aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorisiora <none@example.com>2018-01-30 22:32:29 +0000
committerisiora <none@example.com>2018-01-30 22:32:29 +0000
commit6f0c84af5e6427796588184809fc575851f31b58 (patch)
tree3ff9c5e4fd2f87f23866f56e21a9ce834504dd37
parent065068033faa5c6c8080af92137bf6567e1d68d6 (diff)
downloadChibiOS-6f0c84af5e6427796588184809fc575851f31b58.tar.gz
ChibiOS-6f0c84af5e6427796588184809fc575851f31b58.tar.bz2
ChibiOS-6f0c84af5e6427796588184809fc575851f31b58.zip
Code cleanup.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@11416 35acf78f-673a-0410-8e92-d51de3d6d3f4
-rw-r--r--os/common/ports/ARMCAx-TZ/chsmc.c37
-rw-r--r--os/common/ports/ARMCAx-TZ/chsmc.h19
2 files changed, 31 insertions, 25 deletions
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