diff options
author | Bryan Buckley <bryan.buckley@ti.com> | 2011-10-19 19:12:18 -0500 |
---|---|---|
committer | Jeffrey Tinker <jtinker@google.com> | 2011-10-20 13:33:52 -0700 |
commit | 2e9e9eca83c3dee85b7815573a8cf1e6d1780741 (patch) | |
tree | 237251f7c49aa9b65252be3451b146835aaea9c5 /security/smc_pa_ctrl/smc_pa_ctrl.c | |
parent | 70e04f3b54d5100621ffa631dbc81579d2cc3c8c (diff) | |
download | hardware_ti_omap4xxx-2e9e9eca83c3dee85b7815573a8cf1e6d1780741.tar.gz hardware_ti_omap4xxx-2e9e9eca83c3dee85b7815573a8cf1e6d1780741.tar.bz2 hardware_ti_omap4xxx-2e9e9eca83c3dee85b7815573a8cf1e6d1780741.zip |
SMC: Initial release of smc_pa_strl, tf_daemon
These userspace components are used to load secure services in the normal
(non-secure) world. The SMC kernel driver is required to use these binaries.
Secure services enable certain security features such as
hardware-accelerated crypto, secure storage, drm, and much more.
Author: "Trusted Logic <smc_support@trusted-logic.com>." Gerrit refuses to
accept.
Change-Id: Ie81604d3fee31abc319643401c3cc66888f9f848
Signed-off-by: Bryan Buckley <bryan.buckley@ti.com>
Signed-off-by: Trusted Logic <smc_support@trusted-logic.com>
Diffstat (limited to 'security/smc_pa_ctrl/smc_pa_ctrl.c')
-rw-r--r-- | security/smc_pa_ctrl/smc_pa_ctrl.c | 219 |
1 files changed, 219 insertions, 0 deletions
diff --git a/security/smc_pa_ctrl/smc_pa_ctrl.c b/security/smc_pa_ctrl/smc_pa_ctrl.c new file mode 100644 index 0000000..93db1a5 --- /dev/null +++ b/security/smc_pa_ctrl/smc_pa_ctrl.c @@ -0,0 +1,219 @@ +/** + * Copyright(c) 2011 Trusted Logic. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name Trusted Logic nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include "s_type.h" +#include "s_version.h" +#include "smc_pa_ctrl_os.h" + + +/*--------------------------------------------------------------------------- + * Utility Functions + *---------------------------------------------------------------------------*/ + +static void printUsage(bool bSuccess) +{ +#ifdef BOOT_TIME_PA + printf("usage : smc_boot_pa_ctrl <options> [command]\n"); + printf(" Options:\n"); + printf(" -h, --help: Print this help\n"); + printf(" Commands:\n"); + printf(" -c <conf> : Configuration file path\n"); + printf(" start <pa_file_path>: load and start the SMC PA\n"); + printf("\n"); +#else + printf("usage : smc_pa_ctrl <options> [command]\n"); + printf(" Options:\n"); + printf(" -h, --help: Print this help\n"); + printf(" Commands:\n"); + printf(" -c <conf> : Configuration file path\n"); + printf(" start <pa_file_path>: load and start the SMC PA\n"); + printf(" stop: stop the SMC PA\n"); + printf("\n"); +#endif + + exit(bSuccess ? 0 : 1); +} + + + +/*--------------------------------------------------------------------------- + * Application Entry-Point + *---------------------------------------------------------------------------*/ + +int main(int argc, char *argv[]) +{ + char* pPAFileName = NULL; + char* pConfFileName = NULL; + int nCommand = SCX_SMC_PA_CTRL_NONE; + int nStatus = 0; + +#ifdef BOOT_TIME_PA + printf("SMC BOOT PA Control\n"); + printf(S_VERSION_STRING "\n"); +#else + printf("SMC PA Control\n"); + printf(S_VERSION_STRING "\n"); +#endif + + /* Skip program name */ + argv ++; + argc --; + + while (argc != 0) + { + if (argv[0][0] == '-') + { + /* + * This is an option + */ + + if ((strcmp(argv[0], "--help") == 0) || (strcmp(argv[0], "-h") == 0)) + { + printUsage(true); + } + else if (strcmp(argv[0], "-c") == 0) + { + /* Next argument */ + argc --; + argv ++; + + if (argc <= 0) + { + printf("Missing argument for the option '-c'\n\n"); + printUsage(false); + } + + pConfFileName = malloc(strlen(argv[0]) + 1); + if (pConfFileName == NULL) + { + printf("Out of memory\n"); + exit(2); + } + + strcpy(pConfFileName, argv[0]); + } + else + { + printf("Invalid option [%s]\n\n", argv[0]); + printUsage(false); + } + } + else + { + /* + * This is a command + */ + if (strcmp(argv[0], "start") == 0) + { + /* Next argument */ + argc --; + argv ++; + + if (argc <= 0) + { + printf("Missing argument for the command 'start'\n\n"); + printUsage(false); + } + + pPAFileName = malloc(strlen(argv[0]) + 1); + if (pPAFileName == NULL) + { + printf("Out of memory\n"); + exit(2); + } + + strcpy(pPAFileName, argv[0]); + + nCommand = SCX_SMC_PA_CTRL_START; + } +#ifndef BOOT_TIME_PA + else if (strcmp(argv[0], "stop") == 0) + { + nCommand = SCX_SMC_PA_CTRL_STOP; + } +#endif + else + { + printf("Invalid command [%s]\n\n", argv[0]); + printUsage(false); + } + } + + argc --; + argv ++; + } + + switch (nCommand) + { + case SCX_SMC_PA_CTRL_START: + /* + * Load and execute the SMC PA + */ + + if (pConfFileName == NULL) + { + printf("Configuration file path is missing !\n"); + printUsage(false); + } + + nStatus = smcPAStart(pPAFileName, pConfFileName); + break; + +#ifndef BOOT_TIME_PA + case SCX_SMC_PA_CTRL_STOP: + /* + * Stop the SMC PA + */ + + if (pConfFileName != NULL) + { + printf("Configuration file cannot be used with the 'stop' command\n\n"); + printUsage(false); + } + + nStatus = smcPAStop(); + break; +#endif + + default: + printf("No command specified\n\n"); + printUsage(false); + break; + } + + free(pPAFileName); + free(pConfFileName); + + return nStatus; +} |