From f5bb1e75164a0e9a33dfdfd533fa3eda7f075ee4 Mon Sep 17 00:00:00 2001 From: isiora Date: Wed, 7 Mar 2018 11:49:30 +0000 Subject: Obsolete. git-svn-id: https://svn.code.sf.net/p/chibios/svn2/trunk@11611 110e8d01-0319-4d1e-a829-52ad28d1bb01 --- os/common/ports/ARMCAx-TZ/chsmc.c | 267 -------------------------------------- os/common/ports/ARMCAx-TZ/chsmc.h | 116 ----------------- 2 files changed, 383 deletions(-) delete mode 100644 os/common/ports/ARMCAx-TZ/chsmc.c delete mode 100644 os/common/ports/ARMCAx-TZ/chsmc.h (limited to 'os/common') diff --git a/os/common/ports/ARMCAx-TZ/chsmc.c b/os/common/ports/ARMCAx-TZ/chsmc.c deleted file mode 100644 index c579aca98..000000000 --- a/os/common/ports/ARMCAx-TZ/chsmc.c +++ /dev/null @@ -1,267 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio. - - This file is part of ChibiOS. - - ChibiOS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/** - * @file chsmc.c - * @brief smc call module code. - * - * @addtogroup SMC - * @{ - */ -#include - -#include "ch.h" -#include "chsmc.h" - -/*===========================================================================*/ -/* Module local definitions. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module exported variables. */ -/*===========================================================================*/ -thread_reference_t _ns_thread = NULL; - -/*===========================================================================*/ -/* Module local types. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module local variables. */ -/*===========================================================================*/ -static thread_reference_t main_t; - -static smc_service_t svcs_table[SMC_SVC_MAX_N]; -static mutex_t svcs_table_mtx; - -static uint32_t n_registered_services = 0; -static smc_service_t *discovery_entry = NULL; - -/*===========================================================================*/ -/* Module local functions. */ -/*===========================================================================*/ - -static bool isAddrSpaceValid(uint8_t *addr, size_t size) -{ - return (bool)((addr - NSEC_IMAGE_START_ADDR) < - (NSEC_MEMORY_END - NSEC_IMAGE_START_ADDR)) && - (bool)((addr + size - NSEC_IMAGE_START_ADDR) < - (NSEC_MEMORY_END - NSEC_IMAGE_START_ADDR)); -} - -static bool isHndlValid(smc_service_t *handle) -{ - if ((handle < &svcs_table[0]) || (handle >= &svcs_table[SMC_SVC_MAX_N])) - return FALSE; - if (((char *)handle - (char *)&svcs_table[0]) % sizeof svcs_table[0]) - return FALSE; - return TRUE; -} - -static smc_service_t *getFreeSvcsEntry(void) -{ - int i; - for (i = 0; i < SMC_SVC_MAX_N; ++i) { - if (svcs_table[i].svct == NULL) - return &svcs_table[i]; - } - return NULL; -} - -static smc_service_t *findSvcsEntry(const char *name) -{ - int i; - for (i = 0; i < SMC_SVC_MAX_N; ++i) { - if (!strncmp(svcs_table[i].svc_name, name, SMC_SVC_MAX_NAME_LEN)) - return &svcs_table[i]; - } - return NULL; -} - -/* - * Internal discovery service. - */ -static THD_WORKING_AREA(waDiscoveryTrustService, 512); -static THD_FUNCTION(DiscoveryTrustService, arg) { - (void) arg; - msg_t m; - smc_service_t *svcp; - - discovery_entry = smcRegisterMeAsService("_discovery"); - if ((msg_t)discovery_entry < 0) - chSysHalt("no entry available for discovery service"); - m = smcServiceWaitRequest(discovery_entry, MSG_OK); - while (true) { - chDbgAssert(m == MSG_OK, ""); - if (discovery_entry->svc_datalen) { - *((char *)discovery_entry->svc_data + discovery_entry->svc_datalen - 1) = '\0'; - chMtxLock(&svcs_table_mtx); - svcp = findSvcsEntry((char *)discovery_entry->svc_data); - chMtxUnlock(&svcs_table_mtx); - m = smcServiceWaitRequest(discovery_entry, (msg_t)svcp); - } - } -} - -/*===========================================================================*/ -/* Module exported functions. */ -/*===========================================================================*/ - -/** - * @brief SMC Module initialization. - * - * @notapi - */ -void smcInit(void) { - int i; - - main_t = chThdGetSelfX(); - for (i = 0; i < SMC_SVC_MAX_N; ++i) { - svcs_table[i].svct = NULL; - svcs_table[i].register_order = 0; - } - chMtxObjectInit(&svcs_table_mtx); - /* - * Creates the discovery service thread. - */ - chThdCreateStatic(waDiscoveryTrustService, sizeof(waDiscoveryTrustService), NORMALPRIO-63, - DiscoveryTrustService, NULL); -} - -/** - * @brief The trusted service call entry point. - * @pre The foreign interrupts are disabled. - * @post A request is passed to the thread registered for the service. - * @post The service thread is resumed. - * - * @param[in] svc_handle the handle of the service to be invoked - * @param[inout] svc_data service request data, often a reference to a more complex structure - * @param[in] svc_datalen size of the svc_data memory area - * - * @return a value defined by the service. - * @retval > 0 the handle of requested service. - * @retval MSG_OK default success value. - * @retval MSG_RESET if the service is unavailable. - * @retval MSG_TIMEOUT call interrupted. - * - * @api - */ -msg_t smcEntry(smc_service_t *svc_handle, smc_params_area_t svc_data, size_t svc_datalen) { - smc_service_t *svcp = NULL; - msg_t r; - - if (svc_handle != SMC_HND_REENTER) { - if (!isAddrSpaceValid(svc_data, svc_datalen)) - return SMC_SVC_INVALID; - if (svc_handle == SMC_HND_DISCOVERY) { - svcp = discovery_entry; - if (svcp == NULL) - return SMC_SVC_NOENT; - } else { - if (!isHndlValid(svc_handle)) - return SMC_SVC_BADH; - svcp = svc_handle; - } - svcp->svc_data = svc_data; - svcp->svc_datalen = svc_datalen; - } - -#if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) - _dbg_check_lock(); -#endif - - if (svcp) - chThdResumeS(&svcp->svct, MSG_OK); - r = chThdSuspendS(&_ns_thread); - -#if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) - _dbg_check_unlock(); -#endif - return r; -} - -/** - * @brief Register the calling thread as a manager of the given service @p svc_name. - * @post The current thread is registered as manager for @p svc_name service. - * Only a thread will be the manager of the service @p svc_name. - * - * @param[in] svc_name the name of the service. - * - * @return a registered smc service object. - * @retval NULL if @p svc_name failed to be registered. - * - * @api - */ -smc_service_t *smcRegisterMeAsService(const char *svc_name) -{ - smc_service_t *svcp; - - if (n_registered_services == SMC_SVC_MAX_N) - return (smc_service_t *)SMC_SVC_NHND; - chMtxLock(&svcs_table_mtx); - if (findSvcsEntry(svc_name) != NULL) { - chMtxUnlock(&svcs_table_mtx); - return (smc_service_t *)SMC_SVC_EXIST; - } - svcp = getFreeSvcsEntry(); - svcp->register_order = n_registered_services; - ++n_registered_services; - strncpy(svcp->svc_name, svc_name, SMC_SVC_MAX_NAME_LEN); - chMtxUnlock(&svcs_table_mtx); - return svcp; -} - -/** - * @brief The calling thread is a service and wait the arrival of a request. - * @post the service object is filled with the parameters of the requestor. - * - * @param[in] svcp the service object reference. - * - * @return the reason of the awakening - * @retval MSG_OK a success value. - * - * @api - */ -msg_t smcServiceWaitRequest(smc_service_t *svcp, msg_t msg) -{ - msg_t r; - - chDbgCheck(svcp != NULL); - - chSysLock(); - if (_ns_thread) { - /* Ack the previous service invocation. Not schedule. */ - chThdResumeI(&_ns_thread, msg); - } - chEvtSignalI(main_t, (1 << svcp->register_order)); - r = chThdSuspendTimeoutS(&svcp->svct, TIME_INFINITE); - chSysUnlock(); - return r; -} - -void smcWaitServicesStarted(uint32_t n_services) -{ - eventmask_t mask; - - chDbgAssert(chThdGetSelfX() == main_t, "Only main thread is allowed to call this"); - mask = (1 << (n_services + 1)) - 1; - chEvtWaitAll(mask); -} - -/** @} */ diff --git a/os/common/ports/ARMCAx-TZ/chsmc.h b/os/common/ports/ARMCAx-TZ/chsmc.h deleted file mode 100644 index fcbeceafa..000000000 --- a/os/common/ports/ARMCAx-TZ/chsmc.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio. - - This file is part of ChibiOS. - - ChibiOS is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - ChibiOS is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -/** - * @file chsmc.h - * @brief smc module macros and structures. - * - * @addtogroup SMC - * @{ - */ - -#ifndef CHSMC_H -#define CHSMC_H - -#include "ch.h" -#include "ccportab.h" - -/*===========================================================================*/ -/* Module constants. */ -/*===========================================================================*/ -/* - * Service registry errors - */ -#define SMC_SVC_OK MSG_OK /* No error */ -#define SMC_SVC_INTR (msg_t)-1 /* Service interrupted */ -#define SMC_SVC_NOENT (msg_t)-2 /* No existent service */ -#define SMC_SVC_INVALID (msg_t)-3 /* Invalid service parameter(s) */ -#define SMC_SVC_BADH (msg_t)-4 /* Invalid service handle */ -#define SMC_SVC_EXIST (msg_t)-5 /* Service already exists */ -#define SMC_SVC_NHND (msg_t)-6 /* No more services */ -/* - * Special service handles - */ -#define SMC_HND_TRAMP ((smc_service_t *)0) /* Trampoline service handle */ -#define SMC_HND_DISCOVERY ((smc_service_t *)1) /* Discovery service handle */ -#define SMC_HND_REENTER ((smc_service_t *)2) /* Reentering a service service handle */ - -/* - * Non secure memory address space - * (to be redefined in an other place. Makefile?) - */ -#define NSEC_IMAGE_START_ADDR ((uint8_t *)0x20000000) -#define NSEC_MEMORY_END ((uint8_t *)0x20100000) - -/* - * Services table cardinality - */ -#define SMC_SVC_MAX_N 32 -#define SMC_SVC_MAX_NAME_LEN 16 - -/*===========================================================================*/ -/* Module pre-compile time settings. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Derived constants and error checks. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* Module data structures and types. */ -/*===========================================================================*/ -typedef uint8_t * smc_params_area_t; - -typedef struct ch_smc_service { - thread_reference_t svct; - uint32_t register_order; - smc_params_area_t svc_data; - uint32_t svc_datalen; - char svc_name[SMC_SVC_MAX_NAME_LEN]; -} smc_service_t; - -/*===========================================================================*/ -/* Module macros. */ -/*===========================================================================*/ - -/*===========================================================================*/ -/* External declarations. */ -/*===========================================================================*/ - -#ifdef __cplusplus -extern "C" { -#endif -extern thread_reference_t _ns_thread; -void _ns_trampoline(uint8_t *addr); -void smcInit(void); -void smcWaitServicesStarted(uint32_t n_services); -smc_service_t *smcRegisterMeAsService(const char *svc_name); -msg_t smcServiceWaitRequest(smc_service_t *svcp, msg_t msg); -msg_t smcServiceWaitRequestS(smc_service_t *svcp); -#ifdef __cplusplus -} -#endif - -/*===========================================================================*/ -/* Module inline functions. */ -/*===========================================================================*/ - -#endif /* CHSMC_H */ - -/** @} */ -- cgit v1.2.3