Home | History | Annotate | Download | only in smc_pa_ctrl
      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 #include <stdlib.h>
     32 #include <stdio.h>
     33 #include <string.h>
     34 
     35 #include "s_type.h"
     36 #include "s_version.h"
     37 #include "smc_pa_ctrl_os.h"
     38 
     39 
     40 /*---------------------------------------------------------------------------
     41  * Utility Functions
     42  *---------------------------------------------------------------------------*/
     43 
     44 static void printUsage(bool bSuccess)
     45 {
     46 #ifdef BOOT_TIME_PA
     47    printf("usage : smc_boot_pa_ctrl <options> [command]\n");
     48    printf("   Options:\n");
     49    printf("      -h, --help: Print this help\n");
     50    printf("   Commands:\n");
     51    printf("      -c <conf> : Configuration file path\n");
     52    printf("      start <pa_file_path>: load and start the SMC PA\n");
     53    printf("\n");
     54 #else
     55    printf("usage : smc_pa_ctrl <options> [command]\n");
     56    printf("   Options:\n");
     57    printf("      -h, --help: Print this help\n");
     58    printf("   Commands:\n");
     59    printf("      -c <conf> : Configuration file path\n");
     60    printf("      start <pa_file_path>: load and start the SMC PA\n");
     61    printf("      stop: stop the SMC PA\n");
     62    printf("\n");
     63 #endif
     64 
     65    exit(bSuccess ? 0 : 1);
     66 }
     67 
     68 
     69 
     70 /*---------------------------------------------------------------------------
     71  * Application Entry-Point
     72  *---------------------------------------------------------------------------*/
     73 
     74 int main(int argc, char *argv[])
     75 {
     76    char* pPAFileName = NULL;
     77    char* pConfFileName = NULL;
     78    int   nCommand = SCX_SMC_PA_CTRL_NONE;
     79    int   nStatus = 0;
     80 
     81 #ifdef BOOT_TIME_PA
     82    printf("SMC BOOT PA Control\n");
     83    printf(S_VERSION_STRING "\n");
     84 #else
     85    printf("SMC PA Control\n");
     86    printf(S_VERSION_STRING "\n");
     87 #endif
     88 
     89    /* Skip program name */
     90    argv ++;
     91    argc --;
     92 
     93    while (argc != 0)
     94    {
     95       if (argv[0][0] == '-')
     96       {
     97          /*
     98           * This is an option
     99           */
    100 
    101          if ((strcmp(argv[0], "--help") == 0) || (strcmp(argv[0], "-h") == 0))
    102          {
    103             printUsage(true);
    104          }
    105          else if (strcmp(argv[0], "-c") == 0)
    106          {
    107             /* Next argument */
    108             argc --;
    109             argv ++;
    110 
    111             if (argc <= 0)
    112             {
    113                printf("Missing argument for the option '-c'\n\n");
    114                printUsage(false);
    115             }
    116 
    117             pConfFileName = malloc(strlen(argv[0]) + 1);
    118             if (pConfFileName == NULL)
    119             {
    120                printf("Out of memory\n");
    121                exit(2);
    122             }
    123 
    124             strcpy(pConfFileName, argv[0]);
    125          }
    126          else
    127          {
    128             printf("Invalid option [%s]\n\n", argv[0]);
    129             printUsage(false);
    130          }
    131       }
    132       else
    133       {
    134          /*
    135           * This is a command
    136           */
    137          if (strcmp(argv[0], "start") == 0)
    138          {
    139             /* Next argument */
    140             argc --;
    141             argv ++;
    142 
    143             if (argc <= 0)
    144             {
    145                printf("Missing argument for the command 'start'\n\n");
    146                printUsage(false);
    147             }
    148 
    149             pPAFileName = malloc(strlen(argv[0]) + 1);
    150             if (pPAFileName == NULL)
    151             {
    152                printf("Out of memory\n");
    153                exit(2);
    154             }
    155 
    156             strcpy(pPAFileName, argv[0]);
    157 
    158             nCommand = SCX_SMC_PA_CTRL_START;
    159          }
    160 #ifndef BOOT_TIME_PA
    161          else if (strcmp(argv[0], "stop") == 0)
    162          {
    163             nCommand = SCX_SMC_PA_CTRL_STOP;
    164          }
    165 #endif
    166          else
    167          {
    168             printf("Invalid command [%s]\n\n", argv[0]);
    169             printUsage(false);
    170          }
    171       }
    172 
    173       argc --;
    174       argv ++;
    175    }
    176 
    177    switch (nCommand)
    178    {
    179       case SCX_SMC_PA_CTRL_START:
    180          /*
    181           * Load and execute the SMC PA
    182           */
    183 
    184          if (pConfFileName == NULL)
    185          {
    186             printf("Configuration file path is missing !\n");
    187             printUsage(false);
    188          }
    189 
    190          nStatus = smcPAStart(pPAFileName, pConfFileName);
    191          break;
    192 
    193 #ifndef BOOT_TIME_PA
    194       case SCX_SMC_PA_CTRL_STOP:
    195          /*
    196           * Stop the SMC PA
    197           */
    198 
    199          if (pConfFileName != NULL)
    200          {
    201             printf("Configuration file cannot be used with the 'stop' command\n\n");
    202             printUsage(false);
    203          }
    204 
    205          nStatus = smcPAStop();
    206          break;
    207 #endif
    208 
    209       default:
    210          printf("No command specified\n\n");
    211          printUsage(false);
    212          break;
    213    }
    214 
    215    free(pPAFileName);
    216    free(pConfFileName);
    217 
    218    return nStatus;
    219 }
    220