1 /** 2 * Copyright(c) 2011 Trusted Logic. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name Trusted Logic nor the names of its 15 * contributors may be used to endorse or promote products derived 16 * from this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 /*---------------------------------------------------------------------------- 32 * Notes 33 * ===== 34 * 35 * This file is an extension to the delegation client for SMC omap3. It 36 * permits to manage two differences with the original client: 37 * - command line parsing to take into account a file as input 38 * - associate a specific path to each partition 39 * 40 *----------------------------------------------------------------------------*/ 41 #include <stdarg.h> 42 #include <assert.h> 43 #include <stdlib.h> 44 #include <stdio.h> 45 #include <string.h> 46 47 #include "s_version.h" 48 #include "s_error.h" 49 #include "s_type.h" 50 #include "smc_properties.h" 51 52 /* 53 * This function : 54 * 1) parses the configuration file of the SMC 55 * 2) checks that all mandatory partition name are present and valid 56 * 3) associates partition names to one of the 16 partition IDs 57 * 4) Mapping is as follow: 58 * -- partition 0 <--> File System 59 * -- partition 1 <--> Keystore System 60 * -- partition 2 <--> Keystore User 61 * -- partition 15 <--> Super Partition 62 * 63 * It returns 0 in case of success and the error code requested by tf_daemon otherwise. 64 */ 65 int parseCommandLineExtension(char* configurationFileName, char* partitionNames[16]) 66 { 67 int error = 0; 68 uint32_t i = 0; 69 char * tmpChar = NULL; 70 71 if (configurationFileName == NULL) 72 { 73 return 1; 74 } 75 76 error = smcPropertiesParse(configurationFileName); 77 if ( error != 0 ) 78 { 79 return error; 80 } 81 82 /* Allocate SMC partition file Name */ 83 for(i=0; i<15; i++) 84 { 85 partitionNames[i] = NULL; 86 } 87 88 89 /* File System File Name */ 90 tmpChar = smcGetPropertyAsString(FILE_SYSTEM_FILE_NAME); 91 if ( tmpChar == NULL ) 92 { 93 printf("Main system partition storage file name is missing.\n"); 94 goto return_error; 95 } 96 partitionNames[0] = malloc (strlen(tmpChar) + 1); 97 sprintf(partitionNames[0], "%s", tmpChar); 98 99 /* Keystore System File Name */ 100 tmpChar = smcGetPropertyAsString(KEYSTORE_SYSTEM_FILE_NAME); 101 if ( tmpChar == NULL ) 102 { 103 printf("Main system partition storage file name is missing.\n"); 104 goto return_error; 105 } 106 partitionNames[1] = malloc (strlen(tmpChar) + 1); 107 sprintf(partitionNames[1], "%s", tmpChar); 108 109 /* Keystore User File Name */ 110 tmpChar = smcGetPropertyAsString(KEYSTORE_USER_FILE_NAME); 111 if ( tmpChar == NULL ) 112 { 113 printf("Main system partition storage file name is missing.\n"); 114 goto return_error; 115 } 116 partitionNames[2] = malloc (strlen(tmpChar) + 1); 117 sprintf(partitionNames[2], "%s", tmpChar); 118 119 /* Super Partition File Name */ 120 tmpChar = smcGetPropertyAsString(SUPER_PARTITION_FILE_NAME); 121 if ( tmpChar == NULL ) 122 { 123 printf("Main system partition storage file name is missing.\n"); 124 goto return_error; 125 } 126 partitionNames[15] = malloc (strlen(tmpChar) + 1); 127 sprintf(partitionNames[15], "%s", tmpChar); 128 129 /* return Success */ 130 return 0; 131 132 return_error: 133 for (i=0; i<15; i++) 134 { 135 if (partitionNames[i] != NULL) free(partitionNames[i]); 136 } 137 return 1; 138 } 139