From 6f0c84af5e6427796588184809fc575851f31b58 Mon Sep 17 00:00:00 2001 From: isiora Date: Tue, 30 Jan 2018 22:32:29 +0000 Subject: Code cleanup. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11416 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/common/ports/ARMCAx-TZ/chsmc.c | 37 ++++++++++++++++++++----------------- os/common/ports/ARMCAx-TZ/chsmc.h | 19 +++++++++++-------- 2 files changed, 31 insertions(+), 25 deletions(-) (limited to 'os/common') diff --git a/os/common/ports/ARMCAx-TZ/chsmc.c b/os/common/ports/ARMCAx-TZ/chsmc.c index a64be1d74..4d1b4a5f6 100644 --- a/os/common/ports/ARMCAx-TZ/chsmc.c +++ b/os/common/ports/ARMCAx-TZ/chsmc.c @@ -104,7 +104,7 @@ static THD_FUNCTION(DiscoveryTrustService, arg) { smc_service_t *svcp; discovery_entry = smcRegisterMeAsService("_discovery"); - if (discovery_entry == NULL) + if ((msg_t)discovery_entry < 0) chSysHalt("no entry available for discovery service"); m = smcServiceWaitRequest(discovery_entry, MSG_OK); while (true) { @@ -163,28 +163,31 @@ void smcInit(void) { * @notapi */ msg_t smcEntry(smc_service_t *svc_handle, smc_params_area_t svc_data, size_t svc_datalen) { - smc_service_t *svcp; + smc_service_t *svcp = NULL; msg_t r; - if (!isAddrSpaceValid(svc_data, svc_datalen)) - return MSG_RESET; - if (svc_handle == SMC_HND_DISCOVERY) { - svcp = discovery_entry; - if (svcp == NULL) - return MSG_RESET; - } else { - if (!isHndlValid(svc_handle)) - return MSG_RESET; - svcp = svc_handle; + 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; } - svcp->svc_data = svc_data; - svcp->svc_datalen = svc_datalen; #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) _dbg_check_lock(); #endif - chThdResumeS(&svcp->svct, MSG_OK); + if (svcp) + chThdResumeS(&svcp->svct, MSG_OK); r = chThdSuspendS(&_ns_thread); #if (CH_DBG_SYSTEM_STATE_CHECK == TRUE) @@ -210,11 +213,11 @@ smc_service_t *smcRegisterMeAsService(const char *svc_name) smc_service_t *svcp; if (n_registered_services == SMC_SVC_MAX_N) - return NULL; + return (smc_service_t *)SMC_SVC_NHND; chMtxLock(&svcs_table_mtx); if (findSvcsEntry(svc_name) != NULL) { chMtxUnlock(&svcs_table_mtx); - return NULL; + return (smc_service_t *)SMC_SVC_EXIST; } svcp = getFreeSvcsEntry(); svcp->register_order = n_registered_services; diff --git a/os/common/ports/ARMCAx-TZ/chsmc.h b/os/common/ports/ARMCAx-TZ/chsmc.h index 37c1e30b1..b4d294020 100644 --- a/os/common/ports/ARMCAx-TZ/chsmc.h +++ b/os/common/ports/ARMCAx-TZ/chsmc.h @@ -19,7 +19,7 @@ /** * @file chsmc.h - * @brief smc Module macros and structures. + * @brief smc module macros and structures. * * @addtogroup SMC * @{ @@ -37,16 +37,19 @@ /* * Service registry errors */ -#define SMC_SVC_OK MSG_RESET /* No error */ -#define SMC_SVC_MANAGED 0x01 /* The service is already managed by a thread */ -#define SMC_SVC_THREAD_EXIST 0x02 /* The thread already manages a service */ -#define SMC_SVC_THREAD_NOENT 0x03 /* The thread is not in the registry */ - +#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) -#define SMC_HND_DISCOVERY ((smc_service_t *)1) +#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 -- cgit v1.2.3