Home | History | Annotate | Download | only in tf_daemon
      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