From 1fdd8cb4efb41d59ea6c8f11960428f686c3d4ee Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 11 Mar 2016 18:59:44 +0000 Subject: [PATCH 01/23] Add ARMmbed/uvisor submodule --- .gitmodules | 3 +++ uvisor | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 uvisor diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..33e8699 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "uvisor"] + path = uvisor + url = git@github.com:ARMmbed/uvisor.git diff --git a/uvisor b/uvisor new file mode 160000 index 0000000..4024646 --- /dev/null +++ b/uvisor @@ -0,0 +1 @@ +Subproject commit 40246467a35b51ff330e49ea2468c320aa197f34 From 6fde2fbfc56dd22c550eb61cd6ba8690fd00c01a Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 11 Mar 2016 19:07:32 +0000 Subject: [PATCH 02/23] Remove all source files They are not needed any more since uvisor-lib includes a full static library now. --- source/benchmark.cpp | 40 ---- source/box_config.cpp | 33 --- source/debug.cpp | 22 -- source/disabled.cpp | 204 ------------------ .../efm32/debug/configuration_efm32_m3_p1.o | Bin 32596 -> 0 bytes .../efm32/debug/configuration_efm32_m4_p1.o | Bin 32596 -> 0 bytes source/efm32/get_configuration.cmake | 26 --- .../efm32/release/configuration_efm32_m3_p1.o | Bin 16212 -> 0 bytes .../efm32/release/configuration_efm32_m4_p1.o | Bin 16212 -> 0 bytes source/efm32/version.txt | 1 - source/error.cpp | 22 -- source/interrupts.cpp | 143 ------------ .../configuration_kinetis_m4_0x1fff0000.o | Bin 34564 -> 0 bytes source/kinetis/get_configuration.cmake | 22 -- .../configuration_kinetis_m4_0x1fff0000.o | Bin 16644 -> 0 bytes source/kinetis/version.txt | 1 - .../configuration_stm32_m4_0x10000000_0x0.o | Bin 33060 -> 0 bytes source/stm32/get_configuration.cmake | 22 -- .../configuration_stm32_m4_0x10000000_0x0.o | Bin 16164 -> 0 bytes source/stm32/version.txt | 1 - source/unsupported.cpp | 23 -- 21 files changed, 560 deletions(-) delete mode 100644 source/benchmark.cpp delete mode 100644 source/box_config.cpp delete mode 100644 source/debug.cpp delete mode 100644 source/disabled.cpp delete mode 100644 source/efm32/debug/configuration_efm32_m3_p1.o delete mode 100644 source/efm32/debug/configuration_efm32_m4_p1.o delete mode 100644 source/efm32/get_configuration.cmake delete mode 100644 source/efm32/release/configuration_efm32_m3_p1.o delete mode 100644 source/efm32/release/configuration_efm32_m4_p1.o delete mode 100644 source/efm32/version.txt delete mode 100644 source/error.cpp delete mode 100644 source/interrupts.cpp delete mode 100644 source/kinetis/debug/configuration_kinetis_m4_0x1fff0000.o delete mode 100644 source/kinetis/get_configuration.cmake delete mode 100644 source/kinetis/release/configuration_kinetis_m4_0x1fff0000.o delete mode 100644 source/kinetis/version.txt delete mode 100644 source/stm32/debug/configuration_stm32_m4_0x10000000_0x0.o delete mode 100644 source/stm32/get_configuration.cmake delete mode 100644 source/stm32/release/configuration_stm32_m4_0x10000000_0x0.o delete mode 100644 source/stm32/version.txt delete mode 100644 source/unsupported.cpp diff --git a/source/benchmark.cpp b/source/benchmark.cpp deleted file mode 100644 index 4dfc2d0..0000000 --- a/source/benchmark.cpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "uvisor-lib/uvisor-lib.h" - -void uvisor_benchmark_configure(void) -{ - /* in sequence: - * - initialize the benchmarking unit (default overhead = 0) - * - execute a nop measurement to assess the overhead introduced by the - * measurement itself - * - pass the computed overhead to the configuration routine to complete - * the calibration */ - UVISOR_SVC(UVISOR_SVC_ID_BENCHMARK_CFG, "", 0); - uvisor_benchmark_start(); - UVISOR_SVC(UVISOR_SVC_ID_BENCHMARK_CFG, "", uvisor_benchmark_stop()); -} - -void uvisor_benchmark_start(void) -{ - UVISOR_SVC(UVISOR_SVC_ID_BENCHMARK_RST, ""); -} - -uint32_t uvisor_benchmark_stop(void) -{ - return UVISOR_SVC(UVISOR_SVC_ID_BENCHMARK_STOP, ""); -} diff --git a/source/box_config.cpp b/source/box_config.cpp deleted file mode 100644 index 3e9d9f0..0000000 --- a/source/box_config.cpp +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "uvisor-lib/uvisor-lib.h" - -int uvisor_box_id_self(void) -{ - return UVISOR_SVC(UVISOR_SVC_ID_BOX_ID_SELF, ""); -} - -int uvisor_box_id_caller(void) -{ - return UVISOR_SVC(UVISOR_SVC_ID_BOX_ID_CALLER, ""); -} - -int uvisor_box_namespace(int box_id, char *box_namespace, size_t length) -{ - return UVISOR_SVC(UVISOR_SVC_ID_BOX_NAMESPACE_FROM_ID, "", box_id, box_namespace, length); -} diff --git a/source/debug.cpp b/source/debug.cpp deleted file mode 100644 index d097e79..0000000 --- a/source/debug.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "uvisor-lib/uvisor-lib.h" - -UVISOR_EXTERN void uvisor_debug_init(const TUvisorDebugDriver * const driver) -{ - UVISOR_SVC(UVISOR_SVC_ID_DEBUG_REGISTER_BOX, "", (uint32_t) driver); -} diff --git a/source/disabled.cpp b/source/disabled.cpp deleted file mode 100644 index d41864f..0000000 --- a/source/disabled.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "uvisor-lib/uvisor-lib.h" -#include "cmsis-core/cmsis_nvic.h" -#include -#include - -/* Symbols exported by the mbed linker script */ -UVISOR_EXTERN uint32_t __uvisor_cfgtbl_ptr_start; -UVISOR_EXTERN uint32_t __uvisor_cfgtbl_ptr_end; -UVISOR_EXTERN uint32_t __uvisor_bss_boxes_start; - -/* The pointer to the uVisor context is declared by each box separately. Each - * declaration will have its own type. */ -UVISOR_EXTERN void *uvisor_ctx; - -/* Flag to check that contexts have been initialized */ -static bool g_initialized = false; - -/* Array with all box context pointers */ -static void *g_uvisor_ctx_array[UVISOR_MAX_BOXES] = {0}; - -/* Call stack - * We must keep the full call stack as otherwise it's not possible to restore a - * box context after a nested call. */ -static uint8_t g_call_stack[UVISOR_SVC_CONTEXT_MAX_DEPTH]; -static int g_call_sp; - -/* Memory position pointer - * It is used to allocate chunks of memories from the allocated pool (uVisor - * boxes' .bss). */ -static uint32_t g_memory_position; - -/* Local vector table - * It holds the box ID and the vector for all registered IRQs, so that a context - * switch can be triggered before serving an interrupt. */ -typedef struct user_irq { - uint8_t box_id; - uint32_t vector; -} user_irq_t; -user_irq_t g_uvisor_disabled_vectors[NVIC_USER_IRQ_NUMBER]; - -static void uvisor_disabled_init_context(void) -{ - uint8_t box_id; - const UvisorBoxConfig **box_cfgtbl; - size_t context_size; - - if (g_initialized) { - return; - } - - /* Iterate over all box configuration tables. */ - box_id = 0; - g_memory_position = (uint32_t) &__uvisor_bss_boxes_start; - for(box_cfgtbl = (const UvisorBoxConfig**) &__uvisor_cfgtbl_ptr_start; - box_cfgtbl < (const UvisorBoxConfig**) &__uvisor_cfgtbl_ptr_end; - box_cfgtbl++) { - /* Read the context size from the box configuration table. */ - context_size = (size_t) (*box_cfgtbl)->context_size; - - /* Initialize box context. */ - /* Note: Also box 0 has technically a context, although we force it to - * be zero. */ - if (!context_size) { - g_uvisor_ctx_array[box_id] = NULL; - } else if (!box_id) { - uvisor_error(USER_NOT_ALLOWED); - } else { - /* The box context is alloated from the chunk of memory reserved to - * uVisor boxes' stacks and contexts. */ - /* FIXME Since we do not currently track separate stacks when uVisor - * is disabled, this involves a good wealth of memory waste. */ - g_uvisor_ctx_array[box_id] = (void *) g_memory_position; - memset((void *) g_memory_position, 0, UVISOR_REGION_ROUND_UP(context_size)); - g_memory_position += UVISOR_REGION_ROUND_UP(context_size); - } - box_id++; - } - - /* Do not run this again. */ - g_initialized = true; -} - -void uvisor_disabled_switch_in(const uint32_t *dst_box_cfgtbl_ptr) -{ - uint8_t dst_box_id; - - /* Read the destination box ID. */ - dst_box_id = (uint8_t) (dst_box_cfgtbl_ptr - &__uvisor_cfgtbl_ptr_start); - - /* Allocate the box contexts if they do not exist yet. */ - if (!g_initialized) { - uvisor_disabled_init_context(); - } - - uvisor_ctx = g_uvisor_ctx_array[dst_box_id]; - - /* Push state. */ - if (g_call_sp >= UVISOR_SVC_CONTEXT_MAX_DEPTH - 1) { - uvisor_error(USER_NOT_ALLOWED); - } - g_call_stack[++g_call_sp] = dst_box_id; -} - -void uvisor_disabled_switch_out(void) -{ - uint8_t src_box_id; - - /* Pop state. */ - if (g_call_sp <= 0) { - uvisor_error(USER_NOT_ALLOWED); - } - src_box_id = g_call_stack[--g_call_sp]; - - /* Restore the source context. */ - uvisor_ctx = g_uvisor_ctx_array[src_box_id]; -} - -static void uvisor_disabled_default_vector(void) -{ - uint32_t irqn, vector; - const uint32_t *dst_box_cfgtbl_ptr; - uint8_t dst_box_id; - int ipsr; - - /* Get current IRQ number, from the IPSR. - * We only allow user IRQs to be registered (NVIC). This is consistent with - * the corresponding API when uVisor is enabled. */ - irqn = 0; - ipsr = ((int) (__get_IPSR() & 0x1FF)) - NVIC_USER_IRQ_OFFSET; - if (ipsr < 0 || ipsr >= NVIC_USER_IRQ_NUMBER) { - uvisor_error(USER_NOT_ALLOWED); - } else { - irqn = (uint32_t) ipsr; - } - - /* Calculate the destination box configuration pointer. */ - dst_box_id = g_uvisor_disabled_vectors[irqn].box_id; - dst_box_cfgtbl_ptr = &__uvisor_cfgtbl_ptr_start + (uint32_t) dst_box_id; - - /* Get the IRQ handler. */ - vector = g_uvisor_disabled_vectors[irqn].vector; - if (!vector) { - uvisor_error(USER_NOT_ALLOWED); - } - - /* Switch contexts before and after executing the IRQ handler. */ - uvisor_disabled_switch_in(dst_box_cfgtbl_ptr); - ((void (*)(void)) vector)(); - uvisor_disabled_switch_out(); -} - -void uvisor_disabled_set_vector(uint32_t irqn, uint32_t vector) -{ - uint8_t box_id; - - /* Check IRQn. - * We only allow user IRQs to be registered (NVIC). This is consistent with - * the corresponding API when uVisor is enabled. */ - if (irqn >= NVIC_USER_IRQ_NUMBER) { - uvisor_error(USER_NOT_ALLOWED); - } - - /* Get current box ID. - * We use the call stack pointer to assess the currently active box ID. */ - box_id = g_call_stack[g_call_sp]; - - /* Register IRQ. - * If vector is 0 it corresponds to a de-registration. */ - g_uvisor_disabled_vectors[irqn].box_id = vector ? box_id : 0; - g_uvisor_disabled_vectors[irqn].vector = vector; - - /* Register default handler. - * The default handler performs the context switch around the actual user - * handler. */ - NVIC_SetVector((IRQn_Type) irqn, (uint32_t) &uvisor_disabled_default_vector); -} - -uint32_t uvisor_disabled_get_vector(uint32_t irqn) -{ - /* Check IRQn. - * We only allow user IRQs to be registered (NVIC). This is consistent with - * the corresponding API when uVisor is enabled. */ - if (irqn >= NVIC_USER_IRQ_NUMBER) { - uvisor_error(USER_NOT_ALLOWED); - } - - return g_uvisor_disabled_vectors[irqn].vector; -} diff --git a/source/efm32/debug/configuration_efm32_m3_p1.o b/source/efm32/debug/configuration_efm32_m3_p1.o deleted file mode 100644 index 055c4b72bf7a3e030baf643f89bfee9a179f1e41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32596 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 diff --git a/source/efm32/get_configuration.cmake b/source/efm32/get_configuration.cmake deleted file mode 100644 index 716b128..0000000 --- a/source/efm32/get_configuration.cmake +++ /dev/null @@ -1,26 +0,0 @@ -########################################################################### -# -# Copyright 2016 Silicon Laboratories, Inc. -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -########################################################################### - -if(TARGET_LIKE_EFM32 AND YOTTA_CFG_UVISOR_PRESENT) - if(TARGET_LIKE_CORTEX_M3) - set(UVISOR_CONFIGURATION "configuration_efm32_m3_p1") - elseif(TARGET_LIKE_CORTEX_M4) - set(UVISOR_CONFIGURATION "configuration_efm32_m4_p1") - endif() -endif() diff --git a/source/efm32/release/configuration_efm32_m3_p1.o b/source/efm32/release/configuration_efm32_m3_p1.o deleted file mode 100644 index 4c083a973a5930b56ec606211ab1bf4be2afde35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16212 zcmeHOe{@q-p8vidXZG!X{C2d+LO|7M=TEM|HDG!=gXtCfTFp{)@uL3rsR2tjw&lDX51Za)>|nl%d1;VvBigA=&TEk3uVR zX6BDQyK_$7Ip25R_ulWl_j^D0-p~EMoR=RjYTzk~g7`&2DO}e8>gGjC6xETW6jFc# zt`DR}8Kl|QeEl7V(}XnZ9x>CFX5DN1W|-^l9#-|F2;IY6Ps?GD*2&)tYr8EH!*ma8 zd%VN#&w7U&pXEGo8T=xE4zjV~nV?(JpCp_W&)O8iDqF5-mMA*c=2*-K*?5=G7S!Nh zf%cRDMXNE7=(Mm(q=h{3NN!XoNc#7{+l2LZE3pks$+I7QBV!%B8nt=l9Yz-p{?=O{u^F7V!T-&$ z%GD%i7rYXnsZ1FvvLqMg&-T+&29xnEm%3KgOaDF$u7_0sD;a_3pX2uCSGpte-8X&y#v5L#2E;_)56EzTBGOyhko>dfnX3_wdj0 z^Z@DmXz0UXS88g2qhA}^uDFkHytIQZUYu!t(0;&vPR`ez$9(gp zhN4UMJZq+?p7T7mLVEe<&{-MO)2-8mdU^Iidgue1(*2Xe=Qt{}2b<+$UFYT=8BA2& zuhFW8&$SiuAgu}g9qu{MF$X;trDwrgnFH|gfsYTY!ZmE8LFd4fqd<2z;=dW6dr-Pi z2;K_$hcY{a^)eib<-TbR)0T#Vw}tiMZO$ZK(@#9QH>4Lc>sJ>Hw-wor4Z9f5m^9SQ z)XK9fQw3(|C{x4lan5n96^)|arV^UvLLDcp*_>+wDI@d*`XzfvpK%}JeG?yNm#X_% zo<2j+(}$7-bu}5G0_TSHQ992>wJ98&{=V8nIN|}^H#L0yswK(RCi!+#mJ^0P z1gK^n&Gu5oq!!b!byL{d)oVJw#*>d@CjCNbs-QZX=R6kRm_4}HGe9Mr=*?N-Se)mC zfXx)kzhXC?=yl1UK{oNOMclN6cS_*t!WDR9fjbs_rOh_5oD zk%4D1Mh1-9NK4mI>Vk(C$<;Qh&~s5n zq@M9kjQ0!h6J*1|jbRFBq#D!_ETVa9!`K#`Twm#4-@9H#>35lG<>E@UXT54Url(Bj zlAVy~KHFNH|!CL?RTN7e)B#gDT_;n;}}j=of$te*3s6d~71MolA2 zB*j+W*H?MTSh8x96TR1LNW>ON%K?tEjj3=5A9 zbGR9wcGvZ`s#I2&5&N$M#F${2^l3QwbV!FipN-UPl){L06w^58P5-kvkL=TBQhqw& z%3$M%ZARh4NWaX`5xQBfJb25aWTmYP{W1U&5BFU8m*z$~b#*G4{%eu-6{vT;#6Pa(3kbd%v0Ur9~Jl4KX3? z3eub7ai8@P9f@JcZUryl72+fD??z7J`Z^9L3*n+%N468B^lO}u?Pxj7Sx<@j5r1nQ zo0n>lysefIFrKnu6y$}kqnttFAqP)JN=BJJ4j$J9*9Bx19hq;rF`vIvIJ=phztgP1 zGbhTKKN)As8Q=Euh5?ube#I|-_7hscD%kUOk zxC-a_(Aak6+)s;>9px&YtDN=O%5?+3kzwCV{{g(``=7>pjvwoxeG}ThG-grepuH3A zd(d7iPaeQ?s#4>B7w>BSUc9IIK@a`~yedG^Yx;Z5)XC@gUksAichBR z^tDHaQ?hoL6{zKj48~iOfj&)6tMJ%<(csP&501GclgeaPd!jpztf`;R`|sNb&Sd}8 zTFuLv+bp=Io9!T}uYM+*_Kj>>Xr=z~_)s$QqM9{mY|$9vv$1&sh4YE%aw`_C8|w+) zf0Ej(7eC$1{@{R_KAmU8dnDTUU`#LOinmR~7X7HN5!V}{kw!0S1#J)Y>%|)WjJQ_> zX)dnL``ccA`xNdeGIz85ZvI~uMcaCDEJvmmfML-0t05IrY>4LW9NU9PgJEdk+~8ZW zUY{I$TbwI)h?)`Cx*A^T3kSVdQ}4i8P@P%y`*W-x*IFw`{bM78Y&934xR(ZFyRH$W zo$nGn2sR{6An`)`;r}vILbj8fXJm~lF%AL)cYbw2Qe?lJby8*2z-}xjxH=Zc_bK36 zt~xg@5<6+J&hBXJR7#(3k8p5t+4M6R!nsY&vaT|(tp9`q zB0b`7(O7-g1*(Z-}aSFZ_f~p%iwCYzivN+>|(iOMovsY_9)RMBYRXL zd(6R|^V3nnAGpT5ulqna<40)#ajtXpX&PEZjJMom950Wmh4Z+!-ZC?%ld#wL>Uw_E zD8`?k8SR{SesWYH%(7w3+Ciaj4&)RvR)SSD_DMg-;j9?lc*j{O_u@Mgatd4epRp&x zFyM`2jAzo~-m&f9{VFgsNm22Rm#_+zoX;nZB@OQ~XM69h!>6(57b%g2rtxlG>(h=L z`EiW@N5530e3}#p&+EsiJeqgsC{>~uQ(Xc7N`6y8_9Z4Gx*H6m`<0qcwD<^YW7G-guNhF6-0tXtKXm=#S-6y{i6FQW7_$VBWX=2hQ8$wrjS#?8xO$k+WPY zXsvn9U2b~l70@|I@W zEI128wrF$;K;ALah0LXUHk1KJ0HxTt{Kx?ScBpVB~Vr+rRrQzN!H*KLiL2bE>Y&yxf*wsFP=g*jON${?cb z7177dF+VAu>kkM2)ywEY!2vH>D^DI|dFqXD@WBxEA}eLE1i5?*BYbXS_U78z-AM<@ z{F5<~y_COnH*XN{HYoWWnwZ?znr&XE3-qbB4uo~8SrkfMb`6#|LY^~ zBEiNUUddmOuO6)ICo$`ME1vYAv2F7AUU9Y8cpFDtEzj}Eb*CVy=#1UPj0rr4J3lX{d>My%oc<+Km1r->G|%+f&B>;$oGRPw`YKWNU{T!;bK|8? zlB1)XALat#+gH~0jgMWK=Ke6Cq`}V>C66ltwTsx3w2pc{6f6x>dy~iMVPO%CIia8~ zoaQ!);5YDWdJMaBy+h zDCXBy+v4xRglE^|JQ6M>T&wO&YXDu*CW?Pk9}eb*k!zMWjzE=HPu>}`!bNSgj^xn+ zo4HaSeg9N?qwmw|zVwFldMLt(m}x=&|4KY(NwK8}U)q?WTwAhmwk=t})Y|-@WyG&< zZV3lJ3M-J0<7=S_`zLFk_(FUl`@zC7(n{m8+}#{V#!5yq8nf$QNUg?q%}N+Tn;|d( z#a=U_`!Uz%;-1)N+|!U_$x7N=@@UCo8Km|D+%4`Ik?oRw*Xz*!iO;*(%O= zQkn0~B+(5DbtQm!LcleG4SmtEzxf^UD^0v*cZgY5h> zr>ObyRz^>zI2niFv^bu2b~{LGjzdoox3xSYQ)~7r^dri!LcjGRpD3DCZ0lP}8$`^}>t_v#efgmQztU6m~6*CEuQY74Jn-22J+7x{4{+ z)TNy%;EQ;6K2yfa?3%IDMKg;ehGwfYbu6-bx%)(KejWCgx8FQI;CRom7<=cBVk`oQ z>#rLD{Jol@0Pe%zr2dpp^!IJZZ(0AJh5WvIUlPD;DE%l`Q06KD>?qHn^q~Y$R-)aH zP=12)3W@@MNB$xe;4;cIjBmH0EKiTUcl~wGc*6Sx0to~X2qX|lAdo;Hfj|O*1Of>J z5(p#^NFb0vAb~&vfdm2x1QG}&5J(`9Kp=rY0)Yeq2?P=dBoIg-kU-#n5rJAAHg4Zw zZ)pSS7JO7#+B>>7IB#8A4M}Orr79XKIv?HAWpBZ>t0S6<@h3Fwf{OL_E<04Tbap~T z$A--nk8Ex0Z11SpVsCp0DmHD{;E3m-MJ%`Wo~0G`uC9)@mPfiabYic6-j#=D_?ZOY z=M<5vI+n&0{8S`z72=)P;or3)*Hk-FMy}Z?_{qg2JN%2`#1*%z#2oS*FC*|BEkJKeX`uhP2X-|Vft|O!^9eIjg@qU|8C4c#g=O3v7D2ywZ z#_ckrb`vFEpk3>PcHNHH$1x(sSLXxygAd^6G!s6mW6yEyh~4k+0{AH28R|DYlH!|Q z%oHnTQqN>uH}*hu_IovMY?#4WC+qY26<-C>90rttp9W5}k%jG*pk5i9CpGHE>y`2E zuMFVyKu@e(hvf~E$^q6*(I+MX^9fG)zmNKu6#ZvY^utqhShp^^x!1L{JJ+?gKNQ*j#p@xK+xAdfSNs`E zH?}=6p>;X0SKiXTe#3PQSz%pgm%XEFa@K~2)=$nLd~!3xNdEV%(ZLNjZ8usl$^K?7 zf4|kv4XuxKY?$gnEO%0Sts5WcYS}#1GM0NYOGj77AF(DSlWJ_-Z0{7O8b>oH*>!f< zw@fvQg$^36gnh)S2=?s7;NLm2!KO2o( AqyPW_ diff --git a/source/efm32/release/configuration_efm32_m4_p1.o b/source/efm32/release/configuration_efm32_m4_p1.o deleted file mode 100644 index a8ec5419aeabe42e520803318be589d9b47d52bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16212 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 NVIC_NUM_VECTORS || !ipsr || !NVIC_GetActive((IRQn_Type) irqn)) { - return -1; - } - - /* return the priority level of the active IRQ */ - /* if we are in a system interrupt we do not provide the actual - * priority level, which is usually negative, since we already use -1 - * for stating "no IRQn is active". This is consistent with the - * behavior of the actual uVisor-managed API, as this call will never - * come from a system interrupt. The caller can still use this - * information to assess that an IRQn is actually active (0 = lowest - * priority) */ - if (irqn < 0) { - return 0; - } - else { - return NVIC_GetPriority((IRQn_Type) irqn); - } - } - else { - return UVISOR_SVC(UVISOR_SVC_ID_IRQ_LEVEL_GET, ""); - } -} diff --git a/source/kinetis/debug/configuration_kinetis_m4_0x1fff0000.o b/source/kinetis/debug/configuration_kinetis_m4_0x1fff0000.o deleted file mode 100644 index 18b7cfcba28a1fa666135d8bb4b2630f1a3d00c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34564 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 diff --git a/source/kinetis/version.txt b/source/kinetis/version.txt deleted file mode 100644 index 78bc1ab..0000000 --- a/source/kinetis/version.txt +++ /dev/null @@ -1 +0,0 @@ -0.10.0 diff --git a/source/stm32/debug/configuration_stm32_m4_0x10000000_0x0.o b/source/stm32/debug/configuration_stm32_m4_0x10000000_0x0.o deleted file mode 100644 index 3d4872350b1fe368a91eba203af2550621b311b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33060 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 diff --git a/source/stm32/get_configuration.cmake b/source/stm32/get_configuration.cmake deleted file mode 100644 index f81eec0..0000000 --- a/source/stm32/get_configuration.cmake +++ /dev/null @@ -1,22 +0,0 @@ -########################################################################### -# -# Copyright (c) 2016, ARM Limited, All Rights Reserved -# SPDX-License-Identifier: Apache-2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -########################################################################### - -if(TARGET_LIKE_STM32F429ZI OR TARGET_LIKE_STM32F429XI) - set(UVISOR_CONFIGURATION "configuration_stm32_m4_0x10000000_0x0") -endif() diff --git a/source/stm32/release/configuration_stm32_m4_0x10000000_0x0.o b/source/stm32/release/configuration_stm32_m4_0x10000000_0x0.o deleted file mode 100644 index fca765064f92b258f3b350f3d6a397a95c4b965a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16164 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 diff --git a/source/stm32/version.txt b/source/stm32/version.txt deleted file mode 100644 index 78bc1ab..0000000 --- a/source/stm32/version.txt +++ /dev/null @@ -1 +0,0 @@ -0.10.0 diff --git a/source/unsupported.cpp b/source/unsupported.cpp deleted file mode 100644 index d654d15..0000000 --- a/source/unsupported.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "uvisor-lib/uvisor-lib.h" - -/* uvisor hook for unsupported platforms */ -UVISOR_EXTERN void __attribute__((section(".uvisor.main"))) uvisor_init(void) -{ - return; -} From 6c031a69000d86f61a27b4f4b326862aae37277e Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:50:34 +0000 Subject: [PATCH 03/23] Replace API header files with redirections to uVisor Now header files are taken directly from the ARMmbed/uvisor submodule, so these files are re-directed. The files will be removed in a later version, and are now kept for backwards compatibility. A warning has been added to inform the user about deprecation. --- uvisor-lib/benchmark.h | 5 +- uvisor-lib/box_config.h | 107 +----------------------- uvisor-lib/debug.h | 3 +- uvisor-lib/debug_exports.h | 21 ++--- uvisor-lib/disabled.h | 7 +- uvisor-lib/error.h | 7 +- uvisor-lib/halt_exports.h | 11 ++- uvisor-lib/interrupts.h | 13 +-- uvisor-lib/register_gateway.h | 86 +------------------ uvisor-lib/secure_access.h | 66 +-------------- uvisor-lib/secure_gateway.h | 33 +------- uvisor-lib/svc_exports.h | 147 ++------------------------------- uvisor-lib/svc_gw_exports.h | 9 +- uvisor-lib/unvic_exports.h | 16 ++-- uvisor-lib/uvisor_exports.h | 144 ++------------------------------ uvisor-lib/vmpu_exports.h | 150 ++-------------------------------- 16 files changed, 53 insertions(+), 772 deletions(-) diff --git a/uvisor-lib/benchmark.h b/uvisor-lib/benchmark.h index b9c240f..b24403c 100644 --- a/uvisor-lib/benchmark.h +++ b/uvisor-lib/benchmark.h @@ -17,8 +17,7 @@ #ifndef __UVISOR_LIB_BENCHMARK_H__ #define __UVISOR_LIB_BENCHMARK_H__ -UVISOR_EXTERN void uvisor_benchmark_configure(void); -UVISOR_EXTERN void uvisor_benchmark_start(void); -UVISOR_EXTERN uint32_t uvisor_benchmark_stop(void); +#warning "Deprecated: Do not include uvisor-lib/benchmark.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/benchmark.h" #endif /* __UVISOR_LIB_BENCHMARK_H__ */ diff --git a/uvisor-lib/box_config.h b/uvisor-lib/box_config.h index 41b8530..464291f 100644 --- a/uvisor-lib/box_config.h +++ b/uvisor-lib/box_config.h @@ -17,110 +17,7 @@ #ifndef __UVISOR_LIB_BOX_CONFIG_H__ #define __UVISOR_LIB_BOX_CONFIG_H__ -#include - -UVISOR_EXTERN const uint32_t __uvisor_mode; - -#define UVISOR_DISABLED 0 -#define UVISOR_PERMISSIVE 1 -#define UVISOR_ENABLED 2 - -/* The maximum box namespace length is 37 so that it is exactly big enough for - * a human-readable hex string GUID (as formatted by RFC 4122) followed by a - * terminating NUL. */ -#define UVISOR_MAX_BOX_NAMESPACE_LENGTH 37 - -#define UVISOR_SET_MODE(mode) \ - UVISOR_SET_MODE_ACL_COUNT(mode, NULL, 0) - -#define UVISOR_SET_MODE_ACL(mode, acl_list) \ - UVISOR_SET_MODE_ACL_COUNT(mode, acl_list, UVISOR_ARRAY_COUNT(acl_list)) - -#define UVISOR_SET_MODE_ACL_COUNT(mode, acl_list, acl_list_count) \ - uint8_t __attribute__((section(".keep.uvisor.bss.boxes"), aligned(32))) __reserved_stack[UVISOR_STACK_BAND_SIZE]; \ - \ - UVISOR_EXTERN const uint32_t __uvisor_mode = (mode); \ - \ - static const __attribute__((section(".keep.uvisor.cfgtbl"), aligned(4))) UvisorBoxConfig main_cfg = { \ - UVISOR_BOX_MAGIC, \ - UVISOR_BOX_VERSION, \ - 0, \ - 0, \ - NULL, \ - acl_list, \ - acl_list_count \ - }; \ - \ - extern const __attribute__((section(".keep.uvisor.cfgtbl_ptr_first"), aligned(4))) void * const main_cfg_ptr = &main_cfg; - -/* this macro selects an overloaded macro (variable number of arguments) */ -#define __UVISOR_BOX_MACRO(_1, _2, _3, _4, NAME, ...) NAME - -#define __UVISOR_BOX_CONFIG(box_name, acl_list, acl_list_count, stack_size, context_size) \ - \ - uint8_t __attribute__((section(".keep.uvisor.bss.boxes"), aligned(32))) \ - box_name ## _reserved[UVISOR_STACK_SIZE_ROUND(((UVISOR_MIN_STACK(stack_size) + (context_size))*8)/6)]; \ - \ - static const __attribute__((section(".keep.uvisor.cfgtbl"), aligned(4))) UvisorBoxConfig box_name ## _cfg = { \ - UVISOR_BOX_MAGIC, \ - UVISOR_BOX_VERSION, \ - UVISOR_MIN_STACK(stack_size), \ - context_size, \ - __uvisor_box_namespace, \ - acl_list, \ - acl_list_count \ - }; \ - \ - extern const __attribute__((section(".keep.uvisor.cfgtbl_ptr"), aligned(4))) void * const box_name ## _cfg_ptr = &box_name ## _cfg; - -#define __UVISOR_BOX_CONFIG_NOCONTEXT(box_name, acl_list, stack_size) \ - __UVISOR_BOX_CONFIG(box_name, acl_list, UVISOR_ARRAY_COUNT(acl_list), stack_size, 0) \ - -#define __UVISOR_BOX_CONFIG_CONTEXT(box_name, acl_list, stack_size, context_type) \ - __UVISOR_BOX_CONFIG(box_name, acl_list, UVISOR_ARRAY_COUNT(acl_list), stack_size, sizeof(context_type)) \ - UVISOR_EXTERN context_type * const uvisor_ctx; - -#define __UVISOR_BOX_CONFIG_NOACL(box_name, stack_size, context_type) \ - __UVISOR_BOX_CONFIG(box_name, NULL, 0, stack_size, sizeof(context_type)) \ - UVISOR_EXTERN context_type * const uvisor_ctx; - -#define __UVISOR_BOX_CONFIG_NOACL_NOCONTEXT(box_name, stack_size) \ - __UVISOR_BOX_CONFIG(box_name, NULL, 0, stack_size, 0) - -#define UVISOR_BOX_CONFIG_ACL(...) \ - __UVISOR_BOX_MACRO(__VA_ARGS__, __UVISOR_BOX_CONFIG_CONTEXT, \ - __UVISOR_BOX_CONFIG_NOCONTEXT, \ - __UVISOR_BOX_CONFIG_NOACL_NOCONTEXT)(__VA_ARGS__) - -#define UVISOR_BOX_CONFIG_CTX(...) \ - __UVISOR_BOX_MACRO(__VA_ARGS__, __UVISOR_BOX_CONFIG_CONTEXT, \ - __UVISOR_BOX_CONFIG_NOACL, \ - __UVISOR_BOX_CONFIG_NOACL_NOCONTEXT)(__VA_ARGS__) - -#define UVISOR_BOX_CONFIG(...) \ - UVISOR_BOX_CONFIG_ACL(__VA_ARGS__) - -/* Use this macro before box defintion (for example, UVISOR_BOX_CONFIG) to - * define the name of your box. If you don't want a name, use this macro with - * box_namespace as NULL. */ -#define UVISOR_BOX_NAMESPACE(box_namespace) \ - static const char *const __uvisor_box_namespace = box_namespace - - -/* Return the numeric box ID of the current box. */ -UVISOR_EXTERN int uvisor_box_id_self(void); - -/* Return the numeric box ID of the box that is calling through the most recent - * secure gateway. Return -1 if there is no secure gateway calling box. */ -UVISOR_EXTERN int uvisor_box_id_caller(void); - -/* Copy the box namespace of the specified box ID to the memory provided by - * box_namespace. The box_namespace's length must be at least - * MAX_BOX_NAMESPACE_LENGTH bytes. Return how many bytes were copied into - * box_namespace. Return UVISOR_ERROR_INVALID_BOX_ID if the provided box ID is - * invalid. Return UVISOR_ERROR_BUFFER_TOO_SMALL if the provided box_namespace - * is too small to hold MAX_BOX_NAMESPACE_LENGTH bytes. Return - * UVISOR_ERROR_BOX_NAMESPACE_ANONYMOUS if the box is anonymous. */ -UVISOR_EXTERN int uvisor_box_namespace(int box_id, char *box_namespace, size_t length); +#warning "Deprecated: Do not include uvisor-lib/box_config.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/box_config.h" #endif /* __UVISOR_LIB_BOX_CONFIG_H__ */ diff --git a/uvisor-lib/debug.h b/uvisor-lib/debug.h index 1402623..c100ce4 100644 --- a/uvisor-lib/debug.h +++ b/uvisor-lib/debug.h @@ -17,6 +17,7 @@ #ifndef __UVISOR_LIB_DEBUG_H__ #define __UVISOR_LIB_DEBUG_H__ -UVISOR_EXTERN void uvisor_debug_init(const TUvisorDebugDriver * const driver); +#warning "Deprecated: Do not include uvisor-lib/debug.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/debug.h" #endif /* __UVISOR_LIB_DEBUG_H__ */ diff --git a/uvisor-lib/debug_exports.h b/uvisor-lib/debug_exports.h index 6aac98e..63efcf7 100644 --- a/uvisor-lib/debug_exports.h +++ b/uvisor-lib/debug_exports.h @@ -14,21 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __DEBUG_EXPORTS_H__ -#define __DEBUG_EXPORTS_H__ +#ifndef __UVISOR_LIB_DEBUG_EXPORTS_H__ +#define __UVISOR_LIB_DEBUG_EXPORTS_H__ -#include "uvisor_exports.h" -#include +#warning "Deprecated: Do not include uvisor-lib/debug_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/debug_exports.h" -/* Debug box driver -- Version 0 - * A constant instance of this struct must be instantiated by the unprivileged - * code to setup a debug box.*/ -typedef struct TUvisorDebugDriver { - uint32_t (*get_version)(void); - void (*halt_error)(int); -} TUvisorDebugDriver; - -/* Number of handlers in the debug box driver */ -#define DEBUG_BOX_HANDLERS_NUMBER (sizeof(TUvisorDebugDriver) / sizeof(void *)) - -#endif /* __DEBUG_EXPORTS_H__ */ +#endif /* __UVISOR_LIB_DEBUG_EXPORTS_H__ */ diff --git a/uvisor-lib/disabled.h b/uvisor-lib/disabled.h index 0530cf8..3577d42 100644 --- a/uvisor-lib/disabled.h +++ b/uvisor-lib/disabled.h @@ -17,10 +17,7 @@ #ifndef __UVISOR_LIB_DISABLED_H__ #define __UVISOR_LIB_DISABLED_H__ -UVISOR_EXTERN void uvisor_disabled_switch_in(const uint32_t *dst_box_cfgtbl_ptr); -UVISOR_EXTERN void uvisor_disabled_switch_out(void); - -UVISOR_EXTERN void uvisor_disabled_set_vector(uint32_t irqn, uint32_t vector); -UVISOR_EXTERN uint32_t uvisor_disabled_get_vector(uint32_t irqn); +#warning "Deprecated: Do not include uvisor-lib/disabled.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/disabled.h" #endif /* __UVISOR_LIB_DISABLED_H__ */ diff --git a/uvisor-lib/error.h b/uvisor-lib/error.h index 1014f2d..04c05c5 100644 --- a/uvisor-lib/error.h +++ b/uvisor-lib/error.h @@ -17,10 +17,7 @@ #ifndef __UVISOR_LIB_ERROR_H__ #define __UVISOR_LIB_ERROR_H__ -#define UVISOR_ERROR_INVALID_BOX_ID (-2) -#define UVISOR_ERROR_BUFFER_TOO_SMALL (-3) -#define UVISOR_ERROR_BOX_NAMESPACE_ANONYMOUS (-4) - -UVISOR_EXTERN void uvisor_error(THaltUserError reason); +#warning "Deprecated: Do not include uvisor-lib/error.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/error.h" #endif /* __UVISOR_LIB_ERROR_H__ */ diff --git a/uvisor-lib/halt_exports.h b/uvisor-lib/halt_exports.h index 7bd2ec7..da8f44a 100644 --- a/uvisor-lib/halt_exports.h +++ b/uvisor-lib/halt_exports.h @@ -14,11 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __HALT_EXPORTS_H__ -#define __HALT_EXPORTS_H__ +#ifndef __UVISOR_LIB_HALT_EXPORTS_H__ +#define __UVISOR_LIB_HALT_EXPORTS_H__ -typedef enum { - USER_NOT_ALLOWED = 1, -} THaltUserError; +#warning "Deprecated: Do not include uvisor-lib/halt_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/halt_exports.h" -#endif/*__HALT_EXPORTS_H__*/ +#endif /* __UVISOR_LIB_HALT_EXPORTS_H__ */ diff --git a/uvisor-lib/interrupts.h b/uvisor-lib/interrupts.h index 162a4f1..21bf899 100644 --- a/uvisor-lib/interrupts.h +++ b/uvisor-lib/interrupts.h @@ -17,16 +17,7 @@ #ifndef __UVISOR_LIB_INTERRUPTS_H__ #define __UVISOR_LIB_INTERRUPTS_H__ -UVISOR_EXTERN void vIRQ_SetVectorX(uint32_t irqn, uint32_t vector, uint32_t flag); -UVISOR_EXTERN void vIRQ_SetVector(uint32_t irqn, uint32_t vector); -UVISOR_EXTERN uint32_t vIRQ_GetVector(uint32_t irqn); -UVISOR_EXTERN void vIRQ_EnableIRQ(uint32_t irqn); -UVISOR_EXTERN void vIRQ_DisableIRQ(uint32_t irqn); -UVISOR_EXTERN void vIRQ_ClearPendingIRQ(uint32_t irqn); -UVISOR_EXTERN void vIRQ_SetPendingIRQ(uint32_t irqn); -UVISOR_EXTERN uint32_t vIRQ_GetPendingIRQ(uint32_t irqn); -UVISOR_EXTERN void vIRQ_SetPriority(uint32_t irqn, uint32_t priority); -UVISOR_EXTERN uint32_t vIRQ_GetPriority(uint32_t irqn); -UVISOR_EXTERN int vIRQ_GetLevel(void); +#warning "Deprecated: Do not include uvisor-lib/interrupts.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/interrupts.h" #endif /* __UVISOR_LIB_INTERRUPTS_H__ */ diff --git a/uvisor-lib/register_gateway.h b/uvisor-lib/register_gateway.h index 24338f2..992b2e3 100644 --- a/uvisor-lib/register_gateway.h +++ b/uvisor-lib/register_gateway.h @@ -17,89 +17,7 @@ #ifndef __UVISOR_LIB_REGISTER_GATEWAY_H__ #define __UVISOR_LIB_REGISTER_GATEWAY_H__ -/* register gateway operations */ -/* note: do not use special characters as these numbers will be stringified */ -#define UVISOR_OP_READ(op) (op) -#define UVISOR_OP_WRITE(op) ((1 << 4) | (op)) -#define UVISOR_OP_NOP 0x0 -#define UVISOR_OP_AND 0x1 -#define UVISOR_OP_OR 0x2 -#define UVISOR_OP_XOR 0x3 - -/* default mask for whole register operatins */ -#define __UVISOR_OP_DEFAULT_MASK 0x0 - -/* register gateway metadata */ -#if defined(__CC_ARM) - -/* TODO/FIXME */ - -#elif defined(__GNUC__) - -/* 1 argument: simple read, no mask */ -#define __UVISOR_REGISTER_GATEWAY_METADATA1(src_box, addr) \ - "b.n skip_args%=\n" \ - ".word " UVISOR_TO_STRING(UVISOR_SVC_GW_MAGIC) "\n" \ - ".word " UVISOR_TO_STRING(addr) "\n" \ - ".word " UVISOR_TO_STRING(src_box) "_cfg_ptr\n" \ - ".word " UVISOR_TO_STRING(UVISOR_OP_READ(UVISOR_OP_NOP)) "\n" \ - ".word " UVISOR_TO_STRING(__UVISOR_OP_DEFAULT_MASK) "\n" \ - "skip_args%=:\n" - -/* 2 arguments: simple write, no mask */ -#define __UVISOR_REGISTER_GATEWAY_METADATA2(src_box, addr, val) \ - "b.n skip_args%=\n" \ - ".word " UVISOR_TO_STRING(UVISOR_SVC_GW_MAGIC) "\n" \ - ".word " UVISOR_TO_STRING(addr) "\n" \ - ".word " UVISOR_TO_STRING(src_box) "_cfg_ptr\n" \ - ".word " UVISOR_TO_STRING(UVISOR_OP_WRITE(UVISOR_OP_NOP)) "\n" \ - ".word " UVISOR_TO_STRING(__UVISOR_OP_DEFAULT_MASK) "\n" \ - "skip_args%=:\n" - -/* 3 arguments: masked read */ -#define __UVISOR_REGISTER_GATEWAY_METADATA3(src_box, addr, op, mask) \ - "b.n skip_args%=\n" \ - ".word " UVISOR_TO_STRING(UVISOR_SVC_GW_MAGIC) "\n" \ - ".word " UVISOR_TO_STRING(addr) "\n" \ - ".word " UVISOR_TO_STRING(src_box) "_cfg_ptr\n" \ - ".word " UVISOR_TO_STRING(UVISOR_OP_READ(op)) "\n" \ - ".word " UVISOR_TO_STRING(mask) "\n" \ - "skip_args%=:\n" - -/* 4 arguments: masked write */ -#define __UVISOR_REGISTER_GATEWAY_METADATA4(src_box, addr, val, op, mask) \ - "b.n skip_args%=\n" \ - ".word " UVISOR_TO_STRING(UVISOR_SVC_GW_MAGIC) "\n" \ - ".word " UVISOR_TO_STRING(addr) "\n" \ - ".word " UVISOR_TO_STRING(src_box) "_cfg_ptr\n" \ - ".word " UVISOR_TO_STRING(UVISOR_OP_WRITE(op)) "\n" \ - ".word " UVISOR_TO_STRING(mask) "\n" \ - "skip_args%=:\n" - -#endif /* __CC_ARM or __GNUC__ */ - -#define __UVISOR_REGISTER_GATEWAY_METADATA(src_box, ...) \ - __UVISOR_MACRO_SELECT(_0, ##__VA_ARGS__, __UVISOR_REGISTER_GATEWAY_METADATA4, \ - __UVISOR_REGISTER_GATEWAY_METADATA3, \ - __UVISOR_REGISTER_GATEWAY_METADATA2, \ - __UVISOR_REGISTER_GATEWAY_METADATA1, \ - /* no macro for 0 args */ )(src_box, ##__VA_ARGS__) - -/* register-level gateway - read */ -/* FIXME currently only a hardcoded 32bit constant can be used for the addr field */ -#define uvisor_read(src_box, ...) \ - ({ \ - uint32_t res = UVISOR_SVC(UVISOR_SVC_ID_REGISTER_GATEWAY, \ - __UVISOR_REGISTER_GATEWAY_METADATA(src_box, ##__VA_ARGS__)); \ - res; \ - }) - -/* register-level gateway - write */ -#define uvisor_write(src_box, addr, val, ...) \ - ({ \ - UVISOR_SVC(UVISOR_SVC_ID_REGISTER_GATEWAY, \ - __UVISOR_REGISTER_GATEWAY_METADATA(src_box, addr, val, ##__VA_ARGS__), \ - val); \ - }) +#warning "Deprecated: Do not include uvisor-lib/register_gateway.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/register_gateway.h" #endif /* __UVISOR_LIB_REGISTER_GATEWAY_H__ */ diff --git a/uvisor-lib/secure_access.h b/uvisor-lib/secure_access.h index eefcd14..eef90c4 100644 --- a/uvisor-lib/secure_access.h +++ b/uvisor-lib/secure_access.h @@ -17,69 +17,7 @@ #ifndef __UVISOR_LIB_SECURE_ACCESS_H__ #define __UVISOR_LIB_SECURE_ACCESS_H__ -/* the switch statement will be optimised away since the compiler already knows - * the sizeof(type) */ -#define ADDRESS_WRITE(type, addr, val) \ - { \ - switch(sizeof(type)) \ - { \ - case 4: \ - uvisor_write32((uint32_t volatile * volatile) (addr), (uint32_t) (val)); \ - break; \ - case 2: \ - uvisor_write16((uint16_t volatile * volatile) (addr), (uint16_t) (val)); \ - break; \ - case 1: \ - uvisor_write8((uint8_t volatile * volatile) (addr), (uint8_t ) (val)); \ - break; \ - default: \ - uvisor_error(USER_NOT_ALLOWED); \ - break; \ - } \ - } - -/* the conditional statement will be optimised away since the compiler already - * knows the sizeof(type) */ -#define ADDRESS_READ(type, addr) \ - (sizeof(type) == 4 ? uvisor_read32((uint32_t volatile * volatile) (addr)) : \ - sizeof(type) == 2 ? uvisor_read16((uint16_t volatile * volatile) (addr)) : \ - sizeof(type) == 1 ? uvisor_read8((uint8_t volatile * volatile) (addr)) : 0) - -#define UNION_READ(type, addr, fieldU, fieldB) \ - ({ \ - type res; \ - res.fieldU = ADDRESS_READ(type, addr); \ - res.fieldB; \ - }) - -static inline UVISOR_FORCEINLINE void uvisor_write32(uint32_t volatile * volatile addr, uint32_t val) -{ - UVISOR_ASM_MEMORY_ACCESS(str, uint32_t, addr, val); -} - -static inline UVISOR_FORCEINLINE void uvisor_write16(uint16_t volatile * volatile addr, uint16_t val) -{ - UVISOR_ASM_MEMORY_ACCESS(strh, uint16_t, addr, val); -} - -static inline UVISOR_FORCEINLINE void uvisor_write8(uint8_t volatile * volatile addr, uint8_t val) -{ - UVISOR_ASM_MEMORY_ACCESS(strb, uint8_t, addr, val); -} - -static inline UVISOR_FORCEINLINE uint32_t uvisor_read32(uint32_t volatile * volatile addr) -{ - return UVISOR_ASM_MEMORY_ACCESS(ldr, uint32_t, addr); -} - -static inline UVISOR_FORCEINLINE uint16_t uvisor_read16(uint16_t volatile * volatile addr) -{ - return UVISOR_ASM_MEMORY_ACCESS(ldrh, uint16_t, addr); -} - -static inline UVISOR_FORCEINLINE uint8_t uvisor_read8(uint8_t volatile * volatile addr) -{ - return UVISOR_ASM_MEMORY_ACCESS(ldrb, uint8_t, addr); -} +#warning "Deprecated: Do not include uvisor-lib/secure_access.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/secure_access.h" #endif /* __UVISOR_LIB_SECURE_ACCESS_H__ */ diff --git a/uvisor-lib/secure_gateway.h b/uvisor-lib/secure_gateway.h index ac34824..a1f0c2c 100644 --- a/uvisor-lib/secure_gateway.h +++ b/uvisor-lib/secure_gateway.h @@ -17,36 +17,7 @@ #ifndef __UVISOR_LIB_SECURE_GATEWAY_H__ #define __UVISOR_LIB_SECURE_GATEWAY_H__ -/* secure gateway metadata */ -#if defined(__CC_ARM) - -/* TODO/FIXME */ - -#elif defined(__GNUC__) - -#define __UVISOR_SECURE_GATEWAY_METADATA(dst_box, dst_fn) \ - "b.n skip_args%=\n" \ - ".word " UVISOR_TO_STRING(UVISOR_SVC_GW_MAGIC) "\n" \ - ".word " UVISOR_TO_STRING(dst_fn) "\n" \ - ".word " UVISOR_TO_STRING(dst_box) "_cfg_ptr\n" \ - "skip_args%=:\n" - -#endif /* __CC_ARM or __GNUC__ */ - -/* secure gateway */ -#define secure_gateway(dst_box, dst_fn, ...) \ - ({ \ - uint32_t res; \ - if (__uvisor_mode != UVISOR_DISABLED) { \ - res = UVISOR_SVC(UVISOR_SVC_ID_SECURE_GATEWAY(UVISOR_MACRO_NARGS(__VA_ARGS__)), \ - __UVISOR_SECURE_GATEWAY_METADATA(dst_box, dst_fn), ##__VA_ARGS__); \ - } \ - else { \ - uvisor_disabled_switch_in((const uint32_t *) &dst_box ## _cfg_ptr); \ - res = UVISOR_FUNCTION_CALL(dst_fn, ##__VA_ARGS__); \ - uvisor_disabled_switch_out(); \ - } \ - res; \ - }) +#warning "Deprecated: Do not include uvisor-lib/secure_gateway.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/secure_gateway.h" #endif /* __UVISOR_LIB_SECURE_GATEWAY_H__ */ diff --git a/uvisor-lib/svc_exports.h b/uvisor-lib/svc_exports.h index b1db650..51e17c8 100644 --- a/uvisor-lib/svc_exports.h +++ b/uvisor-lib/svc_exports.h @@ -14,147 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __SVC_EXPORTS_H__ -#define __SVC_EXPORTS_H__ +#ifndef __UVISOR_LIB_SVC_EXPORTS_H__ +#define __UVISOR_LIB_SVC_EXPORTS_H__ -/* maximum depth of nested context switches - * this includes both IRQn and secure gateways, as they use the same state stack - * for their context switches */ -#define UVISOR_SVC_CONTEXT_MAX_DEPTH 0x10 +#warning "Deprecated: Do not include uvisor-lib/svc_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/svc_exports.h" -/* An SVCall takes a 8bit immediate, which is used as follows: - * - * For fast APIs: - * - * 7 6 5 4 3 2 1 0 - * .---.---.---.---.---.---.---.---. - * | 1 | N | N | N | h | h | h | h | - * '---'---'---'---'---'---'---'---' - * | |_______| |___________| - * | | | - * | | | - * | | | - * | | (h) Handler index in the hardcoded table (max 16) - * | | - * | (N) Number of arguments to pass to the handler (max 4) - * | - * SVCall mode: Fast - * - * For slow APIs: - * - * 7 6 5 4 3 2 1 0 - * .---.---.---.---.---.---.---.---. - * | 0 | c | c | c | c | c | c | c | - * '---'---'---'---'---'---'---'---' - * | |_______________________| - * | | - * | | - * | (c) Handler index in the custom table (max 128) - * | - * SVCall mode: Slow - */ - -/* 1 bit of the SVCall imm8 field is used to determine the mode, fast/slow. */ -#define UVISOR_SVC_MODE_FAST 1 -#define UVISOR_SVC_MODE_SLOW 0 -#define UVISOR_SVC_MODE_BIT 7 -#define UVISOR_SVC_MODE_MASK ((uint8_t) (1 << UVISOR_SVC_MODE_BIT)) -#define UVISOR_SVC_MODE(mode) ((uint8_t) (((mode) << UVISOR_SVC_MODE_BIT) & UVISOR_SVC_MODE_MASK)) - -/* 7 or 4 bits of the SVCall imm8 field are used to determine the table index, - * depending on the mode, fast/slow. */ -#define UVISOR_SVC_FAST_INDEX_MAX (1 << 4) -#define UVISOR_SVC_SLOW_INDEX_MAX (1 << 7) -#define UVISOR_SVC_FAST_INDEX_BIT 0 -#define UVISOR_SVC_FAST_INDEX_MASK ((uint8_t) (0xF << UVISOR_SVC_FAST_INDEX_BIT)) -#define UVISOR_SVC_SLOW_INDEX_BIT 0 -#define UVISOR_SVC_SLOW_INDEX_MASK ((uint8_t) (0x7F << UVISOR_SVC_SLOW_INDEX_BIT)) -#define UVISOR_SVC_FAST_INDEX(index) ((uint8_t) (((index) << UVISOR_SVC_FAST_INDEX_BIT) & UVISOR_SVC_FAST_INDEX_MASK)) -#define UVISOR_SVC_SLOW_INDEX(index) ((uint8_t) (((index) << UVISOR_SVC_SLOW_INDEX_BIT) & UVISOR_SVC_SLOW_INDEX_MASK)) - -/* When the SVC mode is "fast", the imm8 field also contains a specification of - * the call interface (number of arguments). - * This is needed for context switches, since the stack manipulation routines - * need to know how many arguments to copy from source to destination. */ -#define UVISOR_SVC_FAST_NARGS_BIT 4 -#define UVISOR_SVC_FAST_NARGS_MASK ((uint8_t) (0x7 << UVISOR_SVC_FAST_NARGS_BIT)) -#define UVISOR_SVC_FAST_NARGS(nargs) ((uint8_t) (((nargs) << UVISOR_SVC_FAST_NARGS_BIT) & UVISOR_SVC_FAST_NARGS_MASK)) - -/* Macros to build the SVCall imm8 field. - * For slow APIs only the SVC handler index is needed. - * For fast APIs the SVC handler index and the number of arguments are needed. */ -#define UVISOR_SVC_CUSTOM_TABLE(index) ((uint8_t) (UVISOR_SVC_MODE(UVISOR_SVC_MODE_SLOW) | \ - UVISOR_SVC_SLOW_INDEX(index))) -#define UVISOR_SVC_FIXED_TABLE(index, nargs) ((uint8_t) (UVISOR_SVC_MODE(UVISOR_SVC_MODE_FAST) | \ - UVISOR_SVC_FAST_INDEX(index) | \ - UVISOR_SVC_FAST_NARGS(nargs))) - -/* SVC immediate values for custom table */ -#define UVISOR_SVC_ID_ISR_SET UVISOR_SVC_CUSTOM_TABLE(1) -#define UVISOR_SVC_ID_ISR_GET UVISOR_SVC_CUSTOM_TABLE(2) -#define UVISOR_SVC_ID_IRQ_ENABLE UVISOR_SVC_CUSTOM_TABLE(3) -#define UVISOR_SVC_ID_IRQ_DISABLE UVISOR_SVC_CUSTOM_TABLE(4) -#define UVISOR_SVC_ID_IRQ_PEND_CLR UVISOR_SVC_CUSTOM_TABLE(5) -#define UVISOR_SVC_ID_IRQ_PEND_SET UVISOR_SVC_CUSTOM_TABLE(6) -#define UVISOR_SVC_ID_IRQ_PEND_GET UVISOR_SVC_CUSTOM_TABLE(7) -#define UVISOR_SVC_ID_IRQ_PRIO_SET UVISOR_SVC_CUSTOM_TABLE(8) -#define UVISOR_SVC_ID_IRQ_PRIO_GET UVISOR_SVC_CUSTOM_TABLE(9) -#define UVISOR_SVC_ID_BENCHMARK_CFG UVISOR_SVC_CUSTOM_TABLE(10) -#define UVISOR_SVC_ID_BENCHMARK_RST UVISOR_SVC_CUSTOM_TABLE(11) -#define UVISOR_SVC_ID_BENCHMARK_STOP UVISOR_SVC_CUSTOM_TABLE(12) -#define UVISOR_SVC_ID_HALT_USER_ERR UVISOR_SVC_CUSTOM_TABLE(13) -#define UVISOR_SVC_ID_IRQ_LEVEL_GET UVISOR_SVC_CUSTOM_TABLE(14) -#define UVISOR_SVC_ID_BOX_ID_SELF UVISOR_SVC_CUSTOM_TABLE(15) -#define UVISOR_SVC_ID_BOX_ID_CALLER UVISOR_SVC_CUSTOM_TABLE(16) -#define UVISOR_SVC_ID_BOX_NAMESPACE_FROM_ID UVISOR_SVC_CUSTOM_TABLE(17) -#define UVISOR_SVC_ID_DEBUG_REBOOT UVISOR_SVC_CUSTOM_TABLE(18) -#define UVISOR_SVC_ID_DEBUG_REGISTER_BOX UVISOR_SVC_CUSTOM_TABLE(19) - -/* SVC immediate values for hardcoded table (call from unprivileged) */ -#define UVISOR_SVC_ID_UNVIC_OUT UVISOR_SVC_FIXED_TABLE(0, 0) -#define UVISOR_SVC_ID_CX_IN(nargs) UVISOR_SVC_FIXED_TABLE(1, nargs) -#define UVISOR_SVC_ID_CX_OUT UVISOR_SVC_FIXED_TABLE(2, 0) -#define UVISOR_SVC_ID_REGISTER_GATEWAY UVISOR_SVC_FIXED_TABLE(3, 0) - -/* SVC immediate values for hardcoded table (call from privileged) */ -#define UVISOR_SVC_ID_UNVIC_IN UVISOR_SVC_FIXED_TABLE(0, 0) - -/* unprivileged code uses a secure gateway to switch context */ -#define UVISOR_SVC_ID_SECURE_GATEWAY(nargs) UVISOR_SVC_ID_CX_IN(nargs) - -/* macro to execute an SVCall; additional metadata can be provided, which will - * be appended right after the svc instruction */ -/* note: the macro is implicitly overloaded to allow 0 to 4 32bits arguments */ -#if defined(__CC_ARM) - -#elif defined(__GNUC__) - -#define UVISOR_SVC(id, metadata, ...) \ - ({ \ - UVISOR_MACRO_REGS_ARGS(uint32_t, ##__VA_ARGS__); \ - UVISOR_MACRO_REGS_RETVAL(uint32_t, res); \ - asm volatile( \ - "svc %[svc_id]\n" \ - metadata \ - : UVISOR_MACRO_GCC_ASM_OUTPUT(res) \ - : UVISOR_MACRO_GCC_ASM_INPUT(__VA_ARGS__), \ - [svc_id] "I" ((id) & 0xFF) \ - ); \ - res; \ - }) - -#define UVISOR_FUNCTION_CALL(dst_fn, ...) \ - ({ \ - UVISOR_MACRO_REGS_ARGS(uint32_t, ##__VA_ARGS__); \ - UVISOR_MACRO_REGS_RETVAL(uint32_t, res); \ - asm volatile( \ - "bl " UVISOR_TO_STRING(dst_fn) "\n" \ - : UVISOR_MACRO_GCC_ASM_OUTPUT(res) \ - : UVISOR_MACRO_GCC_ASM_INPUT(__VA_ARGS__) \ - ); \ - res; \ - }) - -#endif /* defined(__CC_ARM) || defined(__GNUC__) */ - -#endif/*__SVC_EXPORTS_H__*/ +#endif /* __UVISOR_LIB_SVC_EXPORTS_H__ */ diff --git a/uvisor-lib/svc_gw_exports.h b/uvisor-lib/svc_gw_exports.h index d708828..8d1f2e8 100644 --- a/uvisor-lib/svc_gw_exports.h +++ b/uvisor-lib/svc_gw_exports.h @@ -14,9 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __SVC_GW_EXPORTS_H__ -#define __SVC_GW_EXPORTS_H__ +#ifndef __UVISOR_LIB_SVC_GW_EXPORTS_H__ +#define __UVISOR_LIB_SVC_GW_EXPORTS_H__ -#define UVISOR_SVC_GW_MAGIC 0xABCDABCD /* FIXME update with correct magic */ +#warning "Deprecated: Do not include uvisor-lib/svc_gw_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/svc_gw_exports.h" -#endif/*__SVC_GW_EXPORTS_H__*/ +#endif /* __UVISOR_LIB_SVC_GW_EXPORTS_H__ */ diff --git a/uvisor-lib/unvic_exports.h b/uvisor-lib/unvic_exports.h index b071dc2..1a2084a 100644 --- a/uvisor-lib/unvic_exports.h +++ b/uvisor-lib/unvic_exports.h @@ -14,16 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __UNVIC_EXPORTS_H__ -#define __UNVIC_EXPORTS_H__ +#ifndef __UVISOR_LIB_UNVIC_EXPORTS_H__ +#define __UVISOR_LIB_UNVIC_EXPORTS_H__ -/* this value refers to the minimum allowable priority in the physical NVIC - * module, but not in the virtualised one (vIRQ) */ -#define __UVISOR_NVIC_MIN_PRIORITY ((uint32_t) 1) +#warning "Deprecated: Do not include uvisor-lib/unvic_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/unvic_exports.h" -/* this is the maximum priority allowed for the vIRQ module */ -/* users of uVisor APIs can use this to determine the maximum level of - * priorities available to them */ -#define UVISOR_VIRQ_MAX_PRIORITY ((uint32_t) (1 << __NVIC_PRIO_BITS) - 1 - __UVISOR_NVIC_MIN_PRIORITY) - -#endif/*__UNVIC_EXPORTS_H__*/ +#endif /* __UVISOR_LIB_UNVIC_EXPORTS_H__ */ diff --git a/uvisor-lib/uvisor_exports.h b/uvisor-lib/uvisor_exports.h index fa091c8..7f63530 100644 --- a/uvisor-lib/uvisor_exports.h +++ b/uvisor-lib/uvisor_exports.h @@ -14,144 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __UVISOR_EXPORTS_H__ -#define __UVISOR_EXPORTS_H__ +#ifndef __UVISOR_LIB_UVISOR_EXPORTS_H__ +#define __UVISOR_LIB_UVISOR_EXPORTS_H__ -/* maximum number of boxes allowed: 1 is the minimum (unprivileged box) */ -#define UVISOR_MAX_BOXES 5U +#warning "Deprecated: Do not include uvisor-lib/uvisor_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/uvisor_exports.h" -/* extern keyword */ -#ifdef __cplusplus -#define UVISOR_EXTERN extern "C" -#else -#define UVISOR_EXTERN extern -#endif/*__CPP__*/ - -/* asm keyword */ -#ifndef asm -#define asm __asm__ -#endif - -/* compiler attributes */ -#define UVISOR_FORCEINLINE __attribute__((always_inline)) -#define UVISOR_NOINLINE __attribute__((noinline)) -#define UVISOR_PACKED __attribute__((packed)) -#define UVISOR_WEAK __attribute__((weak)) -#define UVISOR_ALIAS(f) __attribute__((weak, alias (#f))) -#define UVISOR_LINKTO(f) __attribute__((alias (#f))) -#define UVISOR_NORETURN __attribute__((noreturn)) -#define UVISOR_NAKED __attribute__((naked)) -#define UVISOR_RAMFUNC __attribute__ ((section (".ramfunc"), noinline)) - -/* array count macro */ -#define UVISOR_ARRAY_COUNT(x) (sizeof(x)/sizeof(x[0])) - -/* convert macro argument to string */ -/* note: this needs one level of indirection, accomplished with the helper macro - * __UVISOR_TO_STRING */ -#define __UVISOR_TO_STRING(x) #x -#define UVISOR_TO_STRING(x) __UVISOR_TO_STRING(x) - -/* select an overloaded macro, so that 0 to 4 arguments can be used */ -#define __UVISOR_MACRO_SELECT(_0, _1, _2, _3, _4, NAME, ...) NAME - -/* count macro arguments */ -#define UVISOR_MACRO_NARGS(...) \ - __UVISOR_MACRO_SELECT(_0, ##__VA_ARGS__, 4, 3, 2, 1, 0) - -/* declare explicit callee-saved registers to hold input arguments (0 to 4) */ -/* note: sizeof(type) must be less than or equal to 4 */ -#define UVISOR_MACRO_REGS_ARGS(type, ...) \ - __UVISOR_MACRO_SELECT(_0, ##__VA_ARGS__, __UVISOR_MACRO_REGS_ARGS4, \ - __UVISOR_MACRO_REGS_ARGS3, \ - __UVISOR_MACRO_REGS_ARGS2, \ - __UVISOR_MACRO_REGS_ARGS1, \ - __UVISOR_MACRO_REGS_ARGS0)(type, ##__VA_ARGS__) -#define __UVISOR_MACRO_REGS_ARGS0(type) -#define __UVISOR_MACRO_REGS_ARGS1(type, a0) \ - register type r0 asm("r0") = (type) a0; -#define __UVISOR_MACRO_REGS_ARGS2(type, a0, a1) \ - register type r0 asm("r0") = (type) a0; \ - register type r1 asm("r1") = (type) a1; -#define __UVISOR_MACRO_REGS_ARGS3(type, a0, a1, a2) \ - register type r0 asm("r0") = (type) a0; \ - register type r1 asm("r1") = (type) a1; \ - register type r2 asm("r2") = (type) a2; -#define __UVISOR_MACRO_REGS_ARGS4(type, a0, a1, a2, a3) \ - register type r0 asm("r0") = (type) a0; \ - register type r1 asm("r1") = (type) a1; \ - register type r2 asm("r2") = (type) a2; \ - register type r3 asm("r3") = (type) a3; - -/* declare explicit callee-saved registers to hold output values */ -/* note: currently only one output value is allowed, up to 32bits */ -#define UVISOR_MACRO_REGS_RETVAL(type, name) \ - register type name asm("r0"); - -/* declare callee-saved input/output operands for gcc-style inline asm */ -/* note: this macro requires that a C variable having the same name of the - * corresponding callee-saved register is declared; these operands follow - * the official ABI for ARMv7M (e.g. 2 input arguments of 32bits each max, - * imply that registers r0 and r1 are used) */ -/* note: gcc only */ -/* note: for 0 inputs a dummy immediate is passed to avoid errors on a misplaced - * comma in the inline assembly */ -#ifdef __GNUC__ - -#define UVISOR_MACRO_GCC_ASM_INPUT(...) \ - __UVISOR_MACRO_SELECT(_0, ##__VA_ARGS__, __UVISOR_MACRO_GCC_ASM_INPUT4, \ - __UVISOR_MACRO_GCC_ASM_INPUT3, \ - __UVISOR_MACRO_GCC_ASM_INPUT2, \ - __UVISOR_MACRO_GCC_ASM_INPUT1, \ - __UVISOR_MACRO_GCC_ASM_INPUT0)(__VA_ARGS__) -#define __UVISOR_MACRO_GCC_ASM_INPUT0() [__dummy] "I" (0) -#define __UVISOR_MACRO_GCC_ASM_INPUT1(a0) [r0] "r" (r0) -#define __UVISOR_MACRO_GCC_ASM_INPUT2(a0, a1) [r0] "r" (r0), [r1] "r" (r1) -#define __UVISOR_MACRO_GCC_ASM_INPUT3(a0, a1, a2) [r0] "r" (r0), [r1] "r" (r1), [r2] "r" (r2) -#define __UVISOR_MACRO_GCC_ASM_INPUT4(a0, a1, a2, a3) [r0] "r" (r0), [r1] "r" (r1), [r2] "r" (r2), [r3] "r" (r3) - -#define UVISOR_MACRO_GCC_ASM_OUTPUT(name) [res] "=r" (name) - -#endif /* __GNUC__ */ - -/* this macro multiplexes read/write opcodes depending on the number of - * arguments */ -#define UVISOR_ASM_MEMORY_ACCESS(opcode, type, ...) \ - __UVISOR_MACRO_SELECT(_0, ##__VA_ARGS__, /* no macro for 4 args */ , \ - /* no macro for 3 args */ , \ - __UVISOR_ASM_MEMORY_ACCESS_W, \ - __UVISOR_ASM_MEMORY_ACCESS_R, \ - /* no macro for 0 args */ )(opcode, type, ##__VA_ARGS__) -/* the macros that actually generate the assembly code for the memory access are - * toolchain-specific */ -#if defined(__CC_ARM) - -/* TODO/FIXME */ - -#elif defined(__GNUC__) - -#define __UVISOR_ASM_MEMORY_ACCESS_R(opcode, type, ...) \ - ({ \ - UVISOR_MACRO_REGS_ARGS(uint32_t, ##__VA_ARGS__); \ - UVISOR_MACRO_REGS_RETVAL(type, res); \ - asm volatile( \ - UVISOR_TO_STRING(opcode)" %[res], [%[r0]]\n" \ - UVISOR_NOP_GROUP \ - : UVISOR_MACRO_GCC_ASM_OUTPUT(res) \ - : UVISOR_MACRO_GCC_ASM_INPUT(__VA_ARGS__) \ - ); \ - res; \ - }) - -#define __UVISOR_ASM_MEMORY_ACCESS_W(opcode, type, ...) \ - UVISOR_MACRO_REGS_ARGS(uint32_t, ##__VA_ARGS__); \ - asm volatile( \ - UVISOR_TO_STRING(opcode)" %[r1], [%[r0]]\n" \ - UVISOR_NOP_GROUP \ - : \ - : UVISOR_MACRO_GCC_ASM_INPUT(__VA_ARGS__) \ - ); - -#endif /* defined(__CC_ARM) || defined(__GNUC__) */ - -#endif/*__UVISOR_EXPORTS_H__*/ +#endif /* __UVISOR_LIB_UVISOR_EXPORTS_H__ */ diff --git a/uvisor-lib/vmpu_exports.h b/uvisor-lib/vmpu_exports.h index 50c22b6..b11bea4 100644 --- a/uvisor-lib/vmpu_exports.h +++ b/uvisor-lib/vmpu_exports.h @@ -14,150 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#ifndef __VMPU_EXPORTS_H__ -#define __VMPU_EXPORTS_H__ +#ifndef __UVISOR_LIB_VMPU_EXPORTS_H__ +#define __UVISOR_LIB_VMPU_EXPORTS_H__ -#include "uvisor_exports.h" -#include +#warning "Deprecated: Do not include uvisor-lib/vmpu_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." +#include "uvisor/api/inc/vmpu_exports.h" -/* supervisor user access modes */ -#define UVISOR_TACL_UEXECUTE 0x0001UL -#define UVISOR_TACL_UWRITE 0x0002UL -#define UVISOR_TACL_UREAD 0x0004UL -#define UVISOR_TACL_UACL (UVISOR_TACL_UREAD |\ - UVISOR_TACL_UWRITE |\ - UVISOR_TACL_UEXECUTE) - -/* supervisor access modes */ -#define UVISOR_TACL_SEXECUTE 0x0008UL -#define UVISOR_TACL_SWRITE 0x0010UL -#define UVISOR_TACL_SREAD 0x0020UL -#define UVISOR_TACL_SACL (UVISOR_TACL_SREAD |\ - UVISOR_TACL_SWRITE |\ - UVISOR_TACL_SEXECUTE) - -#define UVISOR_TACL_EXECUTE (UVISOR_TACL_UEXECUTE | UVISOR_TACL_SEXECUTE) - -/* all possible access control flags */ -#define UVISOR_TACL_ACCESS (UVISOR_TACL_UACL | UVISOR_TACL_SACL) - -/* various modes */ -#define UVISOR_TACL_STACK 0x0040UL -#define UVISOR_TACL_SIZE_ROUND_UP 0x0080UL -#define UVISOR_TACL_SIZE_ROUND_DOWN 0x0100UL -#define UVISOR_TACL_PERIPHERAL 0x0200UL -#define UVISOR_TACL_SHARED 0x0400UL -#define UVISOR_TACL_USER 0x0800UL -#define UVISOR_TACL_IRQ 0x1000UL - -/* subregion mask for ARMv7M */ -#if defined(ARCH_MPU_ARMv7M) || (YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(TARGET_LIKE_KINETIS)) -#define UVISOR_TACL_SUBREGIONS_POS 24 -#define UVISOR_TACL_SUBREGIONS_MASK (0xFFUL< Date: Sat, 12 Mar 2016 12:14:29 +0000 Subject: [PATCH 04/23] Remove dependency on cmsis-core The dependency is now satisfied internally by the uVisor static library. --- module.json | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/module.json b/module.json index 54832ed..f0492fa 100644 --- a/module.json +++ b/module.json @@ -26,8 +26,6 @@ "type": "Apache-2.0" } ], - "dependencies": { - "cmsis-core": "^1.0.0" - }, + "dependencies": {}, "targetDependencies": {} } From 95ea962a2b0cb81743c321eea32cd373288ddbac Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 12:15:11 +0000 Subject: [PATCH 05/23] Add search path pointing to ARMmbed/uvisor --- module.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module.json b/module.json index f0492fa..00fd170 100644 --- a/module.json +++ b/module.json @@ -26,6 +26,9 @@ "type": "Apache-2.0" } ], + "extraIncludes": [ + "uvisor" + ], "dependencies": {}, "targetDependencies": {} } From 7cb7d2126e2b9045fb56812a29aaa08061a29274 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:46:37 +0000 Subject: [PATCH 06/23] Fix style in unsupported.h --- uvisor-lib/unsupported.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/uvisor-lib/unsupported.h b/uvisor-lib/unsupported.h index e86f418..e28273c 100644 --- a/uvisor-lib/unsupported.h +++ b/uvisor-lib/unsupported.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, ARM Limited, All Rights Reserved + * Copyright (c) 2015-2016, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -17,11 +17,11 @@ #ifndef __UVISOR_LIB_UNSUPPORTED_H__ #define __UVISOR_LIB_UNSUPPORTED_H__ -/* uvisor hook for unsupported platforms */ +/* uVisor hook for unsupported platforms */ UVISOR_EXTERN void uvisor_init(void); /******************************************************************************* - * re-definitions from: + * Re-definitions from: ******************************************************************************/ /* uvisor-lib/box-config.h */ @@ -83,7 +83,7 @@ UVISOR_EXTERN const uint32_t __uvisor_mode; #define UVISOR_OP_OR 0x2 #define UVISOR_OP_XOR 0x3 -/* default mask for whole register operatins */ +/* Default mask for whole register operatins */ #define __UVISOR_OP_DEFAULT_MASK 0x0 static inline UVISOR_FORCEINLINE uint32_t uvisor_read(uint32_t addr, uint32_t op, uint32_t mask) @@ -129,15 +129,15 @@ static inline UVISOR_FORCEINLINE void uvisor_write(uint32_t addr, uint32_t val, /* uvisor-lib/secure_access.h */ -/* the conditional statement will be optimised away since the compiler already - * knows the sizeof(type) */ +/* The conditional statement will be optimised away since the compiler already + * knows the sizeof(type). */ #define ADDRESS_READ(type, addr) \ (sizeof(type) == 4 ? uvisor_read32((volatile uint32_t *) (addr)) : \ sizeof(type) == 2 ? uvisor_read16((volatile uint16_t *) (addr)) : \ sizeof(type) == 1 ? uvisor_read8((volatile uint8_t *) (addr)) : 0) -/* the switch statement will be optimised away since the compiler already knows - * the sizeof(type) */ +/* The switch statement will be optimised away since the compiler already knows + * the sizeof(type). */ #define ADDRESS_WRITE(type, addr, val) \ { \ switch(sizeof(type)) \ From fb889b13d1aa23586fdbfabbf99d0fb53e6c391f Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:46:58 +0000 Subject: [PATCH 07/23] Add missing inclusions in unsupported.h --- uvisor-lib/unsupported.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/uvisor-lib/unsupported.h b/uvisor-lib/unsupported.h index e28273c..ae6a24d 100644 --- a/uvisor-lib/unsupported.h +++ b/uvisor-lib/unsupported.h @@ -17,6 +17,9 @@ #ifndef __UVISOR_LIB_UNSUPPORTED_H__ #define __UVISOR_LIB_UNSUPPORTED_H__ +#include "uvisor/api/inc/uvisor_exports.h" +#include + /* uVisor hook for unsupported platforms */ UVISOR_EXTERN void uvisor_init(void); From ea3da2920605e091d19764329d7caa855c57547e Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:48:02 +0000 Subject: [PATCH 08/23] Fix style in override.h --- uvisor-lib/override.h | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/uvisor-lib/override.h b/uvisor-lib/override.h index be72fa4..f53ae44 100644 --- a/uvisor-lib/override.h +++ b/uvisor-lib/override.h @@ -14,16 +14,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -/* note: only include this header file if you need to use code in which you do not - * want to rename NVIC APIs into vIRQ APIs; it must be included directly in the - * source file and as the last header file; inclusion is protected by a guard which - * is dependent on the YOTTA_CFG_UVISOR_PRESENT symbol (set in the target) and the - * UVISOR_NO_HOOKS symbol (defined by uVisor) */ - #ifndef __UVISOR_LIB_OVERRIDE_H__ #define __UVISOR_LIB_OVERRIDE_H__ +/* Note: Only include this header file if you need to use code in which you do + * not want to rename NVIC APIs into vIRQ APIs. It must be included directly in + * the source file and as the last header file. Inclusion is protected by a + * guard which is dependent on the YOTTA_CFG_UVISOR_PRESENT symbol (set in the + * target) and the UVISOR_NO_HOOKS symbol (defined by uVisor) */ + #include extern void vIRQ_SetVectorX(uint32_t irqn, uint32_t vector, uint32_t flag); @@ -39,7 +38,7 @@ extern uint32_t vIRQ_GetPriority(uint32_t irqn); #if YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(UVISOR_NO_HOOKS) -/* re-definition of NVIC APIs supported by uVisor */ +/* Re-definition of NVIC APIs supported by uVisor */ #define NVIC_ClearPendingIRQ(irqn) vIRQ_ClearPendingIRQ((uint32_t) (irqn)) #define NVIC_SetPendingIRQ(irqn) vIRQ_SetPendingIRQ((uint32_t) (irqn)) #define NVIC_GetPendingIRQ(irqn) vIRQ_GetPendingIRQ((uint32_t) (irqn)) From 4e472d3ee7c947129ae4750989c2b452f1a075ef Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:48:28 +0000 Subject: [PATCH 09/23] Fix check on YOTTA_CFG_UVISOR_PRESENT --- uvisor-lib/override.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uvisor-lib/override.h b/uvisor-lib/override.h index f53ae44..44a7ac1 100644 --- a/uvisor-lib/override.h +++ b/uvisor-lib/override.h @@ -36,7 +36,7 @@ extern uint32_t vIRQ_GetPendingIRQ(uint32_t irqn); extern void vIRQ_SetPriority(uint32_t irqn, uint32_t priority); extern uint32_t vIRQ_GetPriority(uint32_t irqn); -#if YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(UVISOR_NO_HOOKS) +#if defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(UVISOR_NO_HOOKS) /* Re-definition of NVIC APIs supported by uVisor */ #define NVIC_ClearPendingIRQ(irqn) vIRQ_ClearPendingIRQ((uint32_t) (irqn)) @@ -49,6 +49,6 @@ extern uint32_t vIRQ_GetPriority(uint32_t irqn); #define NVIC_EnableIRQ(irqn) vIRQ_EnableIRQ((uint32_t) (irqn)) #define NVIC_DisableIRQ(irqn) vIRQ_DisableIRQ((uint32_t) (irqn)) -#endif /* YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(UVISOR_NO_HOOKS) */ +#endif /* defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 && !defined(UVISOR_NO_HOOKS) */ #endif /* __UVISOR_LIB_OVERRIDE_H__ */ From d8aaec40eef1c483a5b7c4e45d1a2c6d728a6e1a Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 17:53:15 +0000 Subject: [PATCH 10/23] Update uvisor-lib.h to latest header files --- uvisor-lib/uvisor-lib.h | 59 +++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/uvisor-lib/uvisor-lib.h b/uvisor-lib/uvisor-lib.h index c741aa2..0a2437b 100644 --- a/uvisor-lib/uvisor-lib.h +++ b/uvisor-lib/uvisor-lib.h @@ -17,37 +17,38 @@ #ifndef __UVISOR_LIB_UVISOR_LIB_H__ #define __UVISOR_LIB_UVISOR_LIB_H__ -#include - -/* needed for NVIC symbols */ -#include "cmsis-core/cmsis_nvic.h" - -/* these header files are included independently from the platform */ -#include "uvisor-lib/debug_exports.h" -#include "uvisor-lib/uvisor_exports.h" -#include "uvisor-lib/vmpu_exports.h" -#include "uvisor-lib/halt_exports.h" -#include "uvisor-lib/svc_exports.h" -#include "uvisor-lib/svc_gw_exports.h" -#include "uvisor-lib/unvic_exports.h" - -/* conditionally included header files */ -#if YOTTA_CFG_UVISOR_PRESENT == 1 - -#include "uvisor-lib/benchmark.h" -#include "uvisor-lib/box_config.h" -#include "uvisor-lib/debug.h" -#include "uvisor-lib/disabled.h" -#include "uvisor-lib/error.h" -#include "uvisor-lib/interrupts.h" -#include "uvisor-lib/register_gateway.h" -#include "uvisor-lib/secure_access.h" -#include "uvisor-lib/secure_gateway.h" - -#else /* YOTTA_CFG_UVISOR_PRESENT == 1 */ +/* This file includes all the uVisor library header files at once. + * Some files are included depending on the whether uVisor is supported on the + * target or not. */ + +/* Note: uvisor-lib/override.h should never be included automatically, but only + * when needed to explicitly override symbols in a source file. See the + * file's comments for further information. */ + +#if defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 + +#include "uvisor/api/inc/benchmark.h" +#include "uvisor/api/inc/box_config.h" +#include "uvisor/api/inc/debug.h" +#include "uvisor/api/inc/disabled.h" +#include "uvisor/api/inc/error.h" +#include "uvisor/api/inc/interrupts.h" +#include "uvisor/api/inc/register_gateway.h" +#include "uvisor/api/inc/secure_access.h" +#include "uvisor/api/inc/secure_gateway.h" + +#else /* defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 */ #include "uvisor-lib/unsupported.h" -#endif /* YOTTA_CFG_UVISOR_PRESENT == 1 */ +#endif /* defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 */ + +#include "uvisor/api/inc/debug_exports.h" +#include "uvisor/api/inc/halt_exports.h" +#include "uvisor/api/inc/svc_exports.h" +#include "uvisor/api/inc/svc_gw_exports.h" +#include "uvisor/api/inc/unvic_exports.h" +#include "uvisor/api/inc/uvisor_exports.h" +#include "uvisor/api/inc/vmpu_exports.h" #endif /* __UVISOR_LIB_UVISOR_LIB_H__ */ From ba597b1521bd526490bb0d03442ad947f4c5def6 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 18:08:24 +0000 Subject: [PATCH 11/23] Re-factor uvisor-lib build system The check for supported platforms is now centralized into a unique file, supported.cmake. The CMakeLists.txt file now only includes the uVisor library from the path of the ARMmbed/uvisor repository. --- source/CMakeLists.txt | 62 ++++++++++++------------- source/support_nxp.cmake | 26 +++++++++++ source/support_silicon_labs.cmake | 28 +++++++++++ source/support_stmicroelectronics.cmake | 26 +++++++++++ 4 files changed, 110 insertions(+), 32 deletions(-) create mode 100644 source/support_nxp.cmake create mode 100644 source/support_silicon_labs.cmake create mode 100644 source/support_stmicroelectronics.cmake diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 58a9a81..fce16c2 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -17,57 +17,51 @@ # ########################################################################### -# Detect yotta build mode. +# uVisor paths +set(UVISOR_ROOT "${CMAKE_CURRENT_LIST_DIR}/../uvisor") +set(UVISOR_API_LIB "${UVISOR_ROOT}/api/lib") + +# Detect the yotta build mode. if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") set(UVISOR_MODE "debug") else() set(UVISOR_MODE "release") endif() -# Determine the uVisor binary based on the target. -# Note: We currently only support the GCC toolchain. -set(UVISOR_SUPPORTED false) -if(TARGET_LIKE_GCC) - # Pick the correct folder based on the target family. - if(TARGET_LIKE_KINETIS) - set(UVISOR_FAMILY "kinetis") - elseif(TARGET_LIKE_STM32) - set(UVISOR_FAMILY "stm32") - elseif(TARGET_LIKE_EFM32) - set(UVISOR_FAMILY "efm32") - endif() +# Determine the uVisor configuration based on the target. +# The included files define UVISOR_CONFIGURATION, if any. +file(GLOB UVISOR_LIB_SUPPORT_FILES "${CMAKE_CURRENT_LIST_DIR}/support_*.cmake") +foreach(SUPPORT_FILE ${UVISOR_LIB_SUPPORT_FILES}) + include("${SUPPORT_FILE}") +endforeach(SUPPORT_FILE) - # Infer path to binary. - # The included file defines UVISOR_CONFIGURATION. - include(${UVISOR_FAMILY}/get_configuration.cmake) - if(NOT ("${UVISOR_CONFIGURATION}" STREQUAL "")) - set(UVISOR_SUPPORTED true) - set(UVISOR_BINARY "${UVISOR_FAMILY}/${UVISOR_MODE}/${UVISOR_CONFIGURATION}.o") - endif() +# Determine UVISOR_SUPPORTED. +# Even if a target claims that uVisor is supported (YOTTA_CFG_UVISOR_PRESENT), +# we still need to check that the uVisor code-base actually supports the target +# family. +# Note: Currently we only support targets built with GCC. +if(YOTTA_CFG_UVISOR_PRESENT AND UVISOR_CONFIGURATION AND TARGET_LIKE_GCC) + set(UVISOR_SUPPORTED true) +else() + set(UVISOR_SUPPORTED false) endif() -# Build all files if uVisor is supported, otherwise throw a warning and only -# build unsupported.cpp. if(UVISOR_SUPPORTED) + add_library(uvisor-lib) + target_link_libraries(uvisor-lib ${UVISOR_API_LIB}/${UVISOR_FAMILY}/${UVISOR_MODE}/${UVISOR_CONFIGURATION}.a) +else() # uvisor-lib source files - file(GLOB UVISOR_SRC "*.cpp") + file(GLOB UVISOR_LIB_SRC "${CMAKE_CURRENT_LIST_DIR}/*.c") + add_library(uvisor-lib ${UVISOR_LIB_SRC}) - add_library(uvisor-lib - ${UVISOR_BINARY} - ${UVISOR_SRC} - ) -else() message(WARNING "\n ********************************************************************* * WARNING (uvisor-lib): unsupported platform; your code will still * * work but no security feature is provided; * * UVISOR_DISABLED is set by default * *********************************************************************") - add_library(uvisor-lib - "unsupported.cpp" - ) - # check that the yotta config option has not been mistakenly changed + # Check that the yotta config option has not been mistakenly changed. if((DEFINED YOTTA_CFG_UVISOR_PRESENT) AND ("${YOTTA_CFG_UVISOR_PRESENT}" STREQUAL "1")) message(FATAL_ERROR "\n ********************************************************************* @@ -84,3 +78,7 @@ else() *********************************************************************") endif() endif() + +# This is needed as this library does not specify any source file when the +# target supports uVisor. +set_target_properties(uvisor-lib PROPERTIES LINKER_LANGUAGE C) diff --git a/source/support_nxp.cmake b/source/support_nxp.cmake new file mode 100644 index 0000000..6fb716a --- /dev/null +++ b/source/support_nxp.cmake @@ -0,0 +1,26 @@ +########################################################################### +# +# Copyright (c) 2013-2016, ARM Limited, All Rights Reserved +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +########################################################################### + +# NXP Kinetis +if(TARGET_LIKE_KINETIS) + set(UVISOR_FAMILY "kinetis") + if(TARGET_LIKE_MK64FN1M0VMD12) + set(UVISOR_CONFIGURATION "configuration_kinetis_m4_0x1fff0000") + endif() +endif() diff --git a/source/support_silicon_labs.cmake b/source/support_silicon_labs.cmake new file mode 100644 index 0000000..2b1002b --- /dev/null +++ b/source/support_silicon_labs.cmake @@ -0,0 +1,28 @@ +########################################################################### +# +# Copyright 2016 Silicon Laboratories, Inc. +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +########################################################################### + +# Silicon Labs EFM32 +if(TARGET_LIKE_EFM32) + set(UVISOR_FAMILY "efm32") + if(TARGET_LIKE_CORTEX_M3) + set(UVISOR_CONFIGURATION "configuration_efm32_m3_p1") + elseif(TARGET_LIKE_CORTEX_M4) + set(UVISOR_CONFIGURATION "configuration_efm32_m4_p1") + endif() +endif() diff --git a/source/support_stmicroelectronics.cmake b/source/support_stmicroelectronics.cmake new file mode 100644 index 0000000..17c0735 --- /dev/null +++ b/source/support_stmicroelectronics.cmake @@ -0,0 +1,26 @@ +########################################################################### +# +# Copyright (c) 2013-2016, ARM Limited, All Rights Reserved +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +########################################################################### + +# STMicroelectronics STM32 +if(TARGET_LIKE_STM32) + set(UVISOR_FAMILY "stm32") + if(TARGET_LIKE_STM32F429ZI OR TARGET_LIKE_STM32F429XI) + set(UVISOR_CONFIGURATION "configuration_stm32_m4_0x10000000_0x0") + endif() +endif() From 3f282a16523f1ec509e76728fcfe567b5884c53c Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 12 Mar 2016 18:23:28 +0000 Subject: [PATCH 12/23] Add uvisor_init function for unsupported targets --- source/unsupported.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 source/unsupported.c diff --git a/source/unsupported.c b/source/unsupported.c new file mode 100644 index 0000000..c339efb --- /dev/null +++ b/source/unsupported.c @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2015-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "uvisor-lib/uvisor-lib.h" + +/* uVisor hook for unsupported platforms */ +UVISOR_EXTERN void __attribute__((section(".uvisor.main"))) uvisor_init(void) +{ + return; +} From 8d5c80e2c6b62170acafce3b2fa65cef8def2cc1 Mon Sep 17 00:00:00 2001 From: Jaeden Amero Date: Tue, 15 Mar 2016 15:42:36 +0000 Subject: [PATCH 13/23] Documentation: Auto-number the sections --- DOCUMENTATION.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index d879fff..73ce706 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -3,10 +3,10 @@ Here you can find detailed documentation for: 1. [Configuration macros](#configuration-macros), to configure a secure box and protect data and peripherals. -2. [Secure function calls](#secure-function-call), to execute code in the context of a secure box. -3. [Low level APIs](#low-level-apis), to access uVisor functions that are not available to unprivileged code (interrupts, restricted system registers). -4. [Type definitions](#type-definitions). -5. [Error codes](#error-codes). +1. [Secure function calls](#secure-function-call), to execute code in the context of a secure box. +1. [Low level APIs](#low-level-apis), to access uVisor functions that are not available to unprivileged code (interrupts, restricted system registers). +1. [Type definitions](#type-definitions). +1. [Error codes](#error-codes). ## Configuration macros From 7f665613f6070f00f62a6dc94239ea4c9a9bc31b Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Wed, 16 Mar 2016 13:56:55 +0000 Subject: [PATCH 14/23] Remove the vIRQ_SetVectorX API The API was unused. vIRQ_SetVector is the official way of setting a vIRQ. --- DOCUMENTATION.md | 32 -------------------------------- uvisor-lib/override.h | 1 - uvisor-lib/unsupported.h | 1 - 3 files changed, 34 deletions(-) diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index d879fff..b1fc7da 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -226,32 +226,6 @@ Currently the following low level operations are permitted: ### Interrupt management -```C -void vIRQ_SetVectorX(uint32_t irqn, uint32_t vector, uint32_t flag) -``` - - - - - - - - - - - - - - - - - - -
DescriptionRegister an ISR to the currently active box, with the ability to specify permissions associated with the IRQn slot
Parameters
uint32_t irqn
IRQn
uint32_t vector
Interrupt handler; if 0 the IRQn slot is de-registered for the current - box
uint32_t flag
Permission flag (currently not implemented)
- ---- - ```C void vIRQ_SetVector(uint32_t irqn, uint32_t vector) ``` @@ -272,12 +246,6 @@ void vIRQ_SetVector(uint32_t irqn, uint32_t vector) -**Note:** - -1. Currently `vIRQ_SetVectorX` and `vIRQ_SetVector` are mapped to the same function because the argument `flag` is not yet used to determine the permissions associated with the IRQn slot - -2. `vIRQ_SetVector` is especially kept for backward compatibility with `NVIC_SetVector` - --- ```C diff --git a/uvisor-lib/override.h b/uvisor-lib/override.h index 44a7ac1..f7653fc 100644 --- a/uvisor-lib/override.h +++ b/uvisor-lib/override.h @@ -25,7 +25,6 @@ #include -extern void vIRQ_SetVectorX(uint32_t irqn, uint32_t vector, uint32_t flag); extern void vIRQ_SetVector(uint32_t irqn, uint32_t vector); extern uint32_t vIRQ_GetVector(uint32_t irqn); extern void vIRQ_EnableIRQ(uint32_t irqn); diff --git a/uvisor-lib/unsupported.h b/uvisor-lib/unsupported.h index ae6a24d..577ea8e 100644 --- a/uvisor-lib/unsupported.h +++ b/uvisor-lib/unsupported.h @@ -66,7 +66,6 @@ UVISOR_EXTERN const uint32_t __uvisor_mode; /* uvisor-lib/interrupts.h */ -#define vIRQ_SetVectorX(irqn, vector, flag) NVIC_SetVector((IRQn_Type) (irqn), (uint32_t) (vector)) #define vIRQ_SetVector(irqn, vector) NVIC_SetVector((IRQn_Type) (irqn), (uint32_t) (vector)) #define vIRQ_GetVector(irqn) NVIC_GetVector((IRQn_Type) (irqn)) #define vIRQ_EnableIRQ(irqn) NVIC_EnableIRQ((IRQn_Type) (irqn)) From cfc7a2dc93b9ba2f2144e43ac3bc8e2bdb87e8cb Mon Sep 17 00:00:00 2001 From: Jaeden Amero Date: Tue, 15 Mar 2016 18:04:46 +0000 Subject: [PATCH 15/23] Documentation: Add Box ID --- DOCUMENTATION.md | 117 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 117 insertions(+) diff --git a/DOCUMENTATION.md b/DOCUMENTATION.md index 73ce706..715cc80 100644 --- a/DOCUMENTATION.md +++ b/DOCUMENTATION.md @@ -4,6 +4,7 @@ Here you can find detailed documentation for: 1. [Configuration macros](#configuration-macros), to configure a secure box and protect data and peripherals. 1. [Secure function calls](#secure-function-call), to execute code in the context of a secure box. +1. [Box Identity](#box-identity), to retrieve a box-specific ID or the namespace of the current or calling box. 1. [Low level APIs](#low-level-apis), to access uVisor functions that are not available to unprivileged code (interrupts, restricted system registers). 1. [Type definitions](#type-definitions). 1. [Error codes](#error-codes). @@ -67,6 +68,7 @@ static const UvBoxAclItem g_box_acl[] = { }; /* Configure the secure box compartment. */ +UVISOR_BOX_NAMESPACE("com.example.my-box-name"); UVISOR_BOX_CONFIG(my_box_name, g_box_acl, BOX_STACK_SIZE, BoxContext); ``` @@ -166,6 +168,45 @@ UVISOR_SET_MODE_ACL(UVISOR_ENABLED, g_background_acl); 2. This macro must be used only once in the top level yotta executable. +--- + +```C +UVISOR_BOX_NAMESPACE(static const char const namespace[]) +``` + + + + + + + + + + + + + + +
Description

Specify the namespace for a box.

+ +

The namespace of the box must be a null-terminated string no longer than MAX_BOX_NAMESPACE_LENGTH (including the terminating null). The namespace must also be stored in public flash. uVisor will verify that the namespace is null-terminated and stored in public flash at boot-time, and will halt if the namespace fails this verification.

+ +

For now, use a reverse domain name for the box namespace. If you don't have a reverse domain name, use a GUID string identifier. We currently don't verify that the namespace is globally unique, but we will perform this validation in the future.

+ +

Use of this configuration macro before UVISOR_BOX_CONFIG is required. If you do not wish to give your box a namespace, specify NULL as the namespace to create an anonymous box.

+
TypeC/C++ pre-processor macro (pseudo-function)
ParametersnamespaceThe namespace of the box
+ +Example: +```C +#include "uvisor-lib/uvisor-lib.h" + +/* Configure the secure box. */ +UVISOR_BOX_NAMESPACE("com.example.my-box-name"); +UVISOR_BOX_CONFIG(my_box_name, UVISOR_BOX_STACK_SIZE); +``` + +--- + ## Secure function call ```C @@ -218,6 +259,82 @@ uint32_t secure_sum(uint32_t op1, uint32_t op2) } ``` +## Box Identity + +A box identity identifies a security domain uniquely and globally. + +The box identity API can be used to determine the source box of an inbound secure gateway call. This can be useful for implementing complex authorization logic between mutually distrustful security domains. + +uVisor provides the ability to retrieve the box ID of the current box (`uvisor_box_id_self`), or of the box that most recently called the current box through a secure gateway (`uvisor_box_id_caller`). + +The box ID number is not constant and can change between reboots. But, the box ID number can be used as a token to retrieve a constant string identifier, known as the box namespace. + +A box namespace is a static, box-specific string, that can help identify which box has which ID at run-time. In the future, the box namespace will be guaranteed to be globally unique. + +A full example using this API is available at [example-uvisor-box-id](https://github.com/ARMmbed/example-uvisor-box-id). + +```C +int uvisor_box_id_self(void) +``` + + + + + + + + + + +
DescriptionGet the ID of the current box
Return valueThe ID of the current box
+ +--- + +```C +int uvisor_box_id_caller(void) +``` + + + + + + + + + + +
DescriptionGet the ID of the box that is calling the current box through the most recent secure gateway
Return valueThe ID of the caller box, or -1 if there is no secure gateway calling box
+ +--- + +```C +int uvisor_box_namespace(int box_id, char *box_namespace, size_t length) +``` + + + + + + + + + + + + + + + + + + + + + + + +
DescriptionCopy the namespace of the specified box to the provided buffer.
Return valueReturn how many bytes were copied into box_namespace. Return UVISOR_ERROR_INVALID_BOX_ID if the provided box ID is invalid. Return UVISOR_ERROR_BUFFER_TOO_SMALL if the provided box_namespace is too small to hold MAX_BOX_NAMESPACE_LENGTH bytes. Return UVISOR_ERROR_BOX_NAMESPACE_ANONYMOUS if the box is anonymous.
Parametersint box_idThe ID of the box you want to retrieve the namespace of
char *box_namespaceThe buffer where the box namespace will be copied to
size_t lengthThe length in bytes of the provided box_namespace buffer
+ ## Low-level APIs Currently the following low level operations are permitted: From 163f8d9193961a31d57861057d4a8580def8f3f6 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Sat, 19 Mar 2016 23:03:53 +0000 Subject: [PATCH 16/23] Update version of ARMmbed/uvisor submodule --- uvisor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uvisor b/uvisor index 4024646..20f87e8 160000 --- a/uvisor +++ b/uvisor @@ -1 +1 @@ -Subproject commit 40246467a35b51ff330e49ea2468c320aa197f34 +Subproject commit 20f87e8e5449374552977ecf2051ec7df3f9dae1 From c925f9973f8afe1b4a869f323f455967739608b9 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Mon, 21 Mar 2016 10:04:59 +0000 Subject: [PATCH 17/23] Remove outdated redirection header files --- uvisor-lib/benchmark.h | 23 ----------------------- uvisor-lib/box_config.h | 23 ----------------------- uvisor-lib/debug.h | 23 ----------------------- uvisor-lib/debug_exports.h | 23 ----------------------- uvisor-lib/disabled.h | 23 ----------------------- uvisor-lib/error.h | 23 ----------------------- uvisor-lib/halt_exports.h | 23 ----------------------- uvisor-lib/interrupts.h | 23 ----------------------- uvisor-lib/register_gateway.h | 23 ----------------------- uvisor-lib/secure_access.h | 23 ----------------------- uvisor-lib/secure_gateway.h | 23 ----------------------- uvisor-lib/svc_exports.h | 23 ----------------------- uvisor-lib/svc_gw_exports.h | 23 ----------------------- uvisor-lib/unvic_exports.h | 23 ----------------------- uvisor-lib/uvisor_exports.h | 23 ----------------------- uvisor-lib/vmpu_exports.h | 23 ----------------------- 16 files changed, 368 deletions(-) delete mode 100644 uvisor-lib/benchmark.h delete mode 100644 uvisor-lib/box_config.h delete mode 100644 uvisor-lib/debug.h delete mode 100644 uvisor-lib/debug_exports.h delete mode 100644 uvisor-lib/disabled.h delete mode 100644 uvisor-lib/error.h delete mode 100644 uvisor-lib/halt_exports.h delete mode 100644 uvisor-lib/interrupts.h delete mode 100644 uvisor-lib/register_gateway.h delete mode 100644 uvisor-lib/secure_access.h delete mode 100644 uvisor-lib/secure_gateway.h delete mode 100644 uvisor-lib/svc_exports.h delete mode 100644 uvisor-lib/svc_gw_exports.h delete mode 100644 uvisor-lib/unvic_exports.h delete mode 100644 uvisor-lib/uvisor_exports.h delete mode 100644 uvisor-lib/vmpu_exports.h diff --git a/uvisor-lib/benchmark.h b/uvisor-lib/benchmark.h deleted file mode 100644 index b24403c..0000000 --- a/uvisor-lib/benchmark.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_BENCHMARK_H__ -#define __UVISOR_LIB_BENCHMARK_H__ - -#warning "Deprecated: Do not include uvisor-lib/benchmark.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/benchmark.h" - -#endif /* __UVISOR_LIB_BENCHMARK_H__ */ diff --git a/uvisor-lib/box_config.h b/uvisor-lib/box_config.h deleted file mode 100644 index 464291f..0000000 --- a/uvisor-lib/box_config.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_BOX_CONFIG_H__ -#define __UVISOR_LIB_BOX_CONFIG_H__ - -#warning "Deprecated: Do not include uvisor-lib/box_config.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/box_config.h" - -#endif /* __UVISOR_LIB_BOX_CONFIG_H__ */ diff --git a/uvisor-lib/debug.h b/uvisor-lib/debug.h deleted file mode 100644 index c100ce4..0000000 --- a/uvisor-lib/debug.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_DEBUG_H__ -#define __UVISOR_LIB_DEBUG_H__ - -#warning "Deprecated: Do not include uvisor-lib/debug.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/debug.h" - -#endif /* __UVISOR_LIB_DEBUG_H__ */ diff --git a/uvisor-lib/debug_exports.h b/uvisor-lib/debug_exports.h deleted file mode 100644 index 63efcf7..0000000 --- a/uvisor-lib/debug_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_DEBUG_EXPORTS_H__ -#define __UVISOR_LIB_DEBUG_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/debug_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/debug_exports.h" - -#endif /* __UVISOR_LIB_DEBUG_EXPORTS_H__ */ diff --git a/uvisor-lib/disabled.h b/uvisor-lib/disabled.h deleted file mode 100644 index 3577d42..0000000 --- a/uvisor-lib/disabled.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_DISABLED_H__ -#define __UVISOR_LIB_DISABLED_H__ - -#warning "Deprecated: Do not include uvisor-lib/disabled.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/disabled.h" - -#endif /* __UVISOR_LIB_DISABLED_H__ */ diff --git a/uvisor-lib/error.h b/uvisor-lib/error.h deleted file mode 100644 index 04c05c5..0000000 --- a/uvisor-lib/error.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_ERROR_H__ -#define __UVISOR_LIB_ERROR_H__ - -#warning "Deprecated: Do not include uvisor-lib/error.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/error.h" - -#endif /* __UVISOR_LIB_ERROR_H__ */ diff --git a/uvisor-lib/halt_exports.h b/uvisor-lib/halt_exports.h deleted file mode 100644 index da8f44a..0000000 --- a/uvisor-lib/halt_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_HALT_EXPORTS_H__ -#define __UVISOR_LIB_HALT_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/halt_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/halt_exports.h" - -#endif /* __UVISOR_LIB_HALT_EXPORTS_H__ */ diff --git a/uvisor-lib/interrupts.h b/uvisor-lib/interrupts.h deleted file mode 100644 index 21bf899..0000000 --- a/uvisor-lib/interrupts.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_INTERRUPTS_H__ -#define __UVISOR_LIB_INTERRUPTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/interrupts.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/interrupts.h" - -#endif /* __UVISOR_LIB_INTERRUPTS_H__ */ diff --git a/uvisor-lib/register_gateway.h b/uvisor-lib/register_gateway.h deleted file mode 100644 index 992b2e3..0000000 --- a/uvisor-lib/register_gateway.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2015-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_REGISTER_GATEWAY_H__ -#define __UVISOR_LIB_REGISTER_GATEWAY_H__ - -#warning "Deprecated: Do not include uvisor-lib/register_gateway.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/register_gateway.h" - -#endif /* __UVISOR_LIB_REGISTER_GATEWAY_H__ */ diff --git a/uvisor-lib/secure_access.h b/uvisor-lib/secure_access.h deleted file mode 100644 index eef90c4..0000000 --- a/uvisor-lib/secure_access.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_SECURE_ACCESS_H__ -#define __UVISOR_LIB_SECURE_ACCESS_H__ - -#warning "Deprecated: Do not include uvisor-lib/secure_access.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/secure_access.h" - -#endif /* __UVISOR_LIB_SECURE_ACCESS_H__ */ diff --git a/uvisor-lib/secure_gateway.h b/uvisor-lib/secure_gateway.h deleted file mode 100644 index a1f0c2c..0000000 --- a/uvisor-lib/secure_gateway.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_SECURE_GATEWAY_H__ -#define __UVISOR_LIB_SECURE_GATEWAY_H__ - -#warning "Deprecated: Do not include uvisor-lib/secure_gateway.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/secure_gateway.h" - -#endif /* __UVISOR_LIB_SECURE_GATEWAY_H__ */ diff --git a/uvisor-lib/svc_exports.h b/uvisor-lib/svc_exports.h deleted file mode 100644 index 51e17c8..0000000 --- a/uvisor-lib/svc_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_SVC_EXPORTS_H__ -#define __UVISOR_LIB_SVC_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/svc_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/svc_exports.h" - -#endif /* __UVISOR_LIB_SVC_EXPORTS_H__ */ diff --git a/uvisor-lib/svc_gw_exports.h b/uvisor-lib/svc_gw_exports.h deleted file mode 100644 index 8d1f2e8..0000000 --- a/uvisor-lib/svc_gw_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_SVC_GW_EXPORTS_H__ -#define __UVISOR_LIB_SVC_GW_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/svc_gw_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/svc_gw_exports.h" - -#endif /* __UVISOR_LIB_SVC_GW_EXPORTS_H__ */ diff --git a/uvisor-lib/unvic_exports.h b/uvisor-lib/unvic_exports.h deleted file mode 100644 index 1a2084a..0000000 --- a/uvisor-lib/unvic_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_UNVIC_EXPORTS_H__ -#define __UVISOR_LIB_UNVIC_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/unvic_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/unvic_exports.h" - -#endif /* __UVISOR_LIB_UNVIC_EXPORTS_H__ */ diff --git a/uvisor-lib/uvisor_exports.h b/uvisor-lib/uvisor_exports.h deleted file mode 100644 index 7f63530..0000000 --- a/uvisor-lib/uvisor_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2015, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_UVISOR_EXPORTS_H__ -#define __UVISOR_LIB_UVISOR_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/uvisor_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/uvisor_exports.h" - -#endif /* __UVISOR_LIB_UVISOR_EXPORTS_H__ */ diff --git a/uvisor-lib/vmpu_exports.h b/uvisor-lib/vmpu_exports.h deleted file mode 100644 index b11bea4..0000000 --- a/uvisor-lib/vmpu_exports.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2013-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_VMPU_EXPORTS_H__ -#define __UVISOR_LIB_VMPU_EXPORTS_H__ - -#warning "Deprecated: Do not include uvisor-lib/vmpu_exports.h directly. Instead, include uvisor-lib/uvisor-lib.h." -#include "uvisor/api/inc/vmpu_exports.h" - -#endif /* __UVISOR_LIB_VMPU_EXPORTS_H__ */ From 4447c1313b00fd28c35ac23044467a08720b9eed Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Mon, 21 Mar 2016 13:19:53 +0000 Subject: [PATCH 18/23] Remove unsupported.* files They are moved to ARMmbed/uvisor, since they are general enough to be kept in the main uVisor code-base. --- source/unsupported.c | 23 ----- uvisor-lib/unsupported.h | 195 --------------------------------------- 2 files changed, 218 deletions(-) delete mode 100644 source/unsupported.c delete mode 100644 uvisor-lib/unsupported.h diff --git a/source/unsupported.c b/source/unsupported.c deleted file mode 100644 index c339efb..0000000 --- a/source/unsupported.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2015-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "uvisor-lib/uvisor-lib.h" - -/* uVisor hook for unsupported platforms */ -UVISOR_EXTERN void __attribute__((section(".uvisor.main"))) uvisor_init(void) -{ - return; -} diff --git a/uvisor-lib/unsupported.h b/uvisor-lib/unsupported.h deleted file mode 100644 index 577ea8e..0000000 --- a/uvisor-lib/unsupported.h +++ /dev/null @@ -1,195 +0,0 @@ -/* - * Copyright (c) 2015-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#ifndef __UVISOR_LIB_UNSUPPORTED_H__ -#define __UVISOR_LIB_UNSUPPORTED_H__ - -#include "uvisor/api/inc/uvisor_exports.h" -#include - -/* uVisor hook for unsupported platforms */ -UVISOR_EXTERN void uvisor_init(void); - -/******************************************************************************* - * Re-definitions from: - ******************************************************************************/ - -/* uvisor-lib/box-config.h */ - -UVISOR_EXTERN const uint32_t __uvisor_mode; - -#define UVISOR_DISABLED 0 - -#define UVISOR_SET_MODE(mode) \ - UVISOR_SET_MODE_ACL_COUNT(mode, NULL, 0) - -#define UVISOR_SET_MODE_ACL(mode, acl_list) \ - UVISOR_SET_MODE_ACL_COUNT(mode, acl_list, UVISOR_ARRAY_COUNT(acl_list)) - -#define UVISOR_SET_MODE_ACL_COUNT(mode, acl_list, acl_list_count) \ - UVISOR_EXTERN const uint32_t __uvisor_mode = UVISOR_DISABLED; \ - static const void *main_acl = acl_list; \ - extern const __attribute__((section(".keep.uvisor.cfgtbl_ptr_first"), aligned(4))) void * const main_cfg_ptr = &main_acl; - -#define __UVISOR_BOX_CONFIG_NOCONTEXT(box_name, acl_list, stack_size) \ - static const void *box_acl_ ## box_name = acl_list; \ - extern const __attribute__((section(".keep.uvisor.cfgtbl_ptr"), aligned(4))) void * const box_name ## _cfg_ptr = &box_acl_ ## box_name; - -#define __UVISOR_BOX_CONFIG_CONTEXT(box_name, acl_list, stack_size, context_type) \ - context_type box_ctx_ ## box_name; \ - context_type * const uvisor_ctx = &box_ctx_ ## box_name; \ - static const void *box_acl_ ## box_name = acl_list; \ - const __attribute__((section(".keep.uvisor.cfgtbl_ptr"), aligned(4))) volatile void *box_name ## _cfg_ptr = \ - &box_acl_ ## box_name; - -#define __UVISOR_BOX_MACRO(_1, _2, _3, _4, NAME, ...) NAME -#define UVISOR_BOX_CONFIG(...) \ - __UVISOR_BOX_MACRO(__VA_ARGS__, __UVISOR_BOX_CONFIG_CONTEXT, \ - __UVISOR_BOX_CONFIG_NOCONTEXT)(__VA_ARGS__) - -#define UVISOR_BOX_CONFIG_ACL(...) UVISOR_BOX_CONFIG(__VA_ARGS__) - -#define UVISOR_BOX_CONFIG_CTX(...) UVISOR_BOX_CONFIG(__VA_ARGS__) - -/* uvisor-lib/interrupts.h */ - -#define vIRQ_SetVector(irqn, vector) NVIC_SetVector((IRQn_Type) (irqn), (uint32_t) (vector)) -#define vIRQ_GetVector(irqn) NVIC_GetVector((IRQn_Type) (irqn)) -#define vIRQ_EnableIRQ(irqn) NVIC_EnableIRQ((IRQn_Type) (irqn)) -#define vIRQ_DisableIRQ(irqn) NVIC_DisableIRQ((IRQn_Type) (irqn)) -#define vIRQ_ClearPendingIRQ(irqn) NVIC_ClearPendingIRQ((IRQn_Type) (irqn)) -#define vIRQ_SetPendingIRQ(irqn) NVIC_SetPendingIRQ((IRQn_Type) (irqn)) -#define vIRQ_GetPendingIRQ(irqn) NVIC_GetPendingIRQ((IRQn_Type) (irqn)) -#define vIRQ_SetPriority(irqn, priority) NVIC_SetPriority((IRQn_Type) (irqn), (uint32_t) (priority)) -#define vIRQ_GetPriority(irqn) NVIC_GetPriority((IRQn_Type) (irqn)) - -/* uvisor-lib/register_gateway.h */ - -#define UVISOR_OP_READ(op) (op) -#define UVISOR_OP_WRITE(op) ((1 << 4) | (op)) -#define UVISOR_OP_NOP 0x0 -#define UVISOR_OP_AND 0x1 -#define UVISOR_OP_OR 0x2 -#define UVISOR_OP_XOR 0x3 - -/* Default mask for whole register operatins */ -#define __UVISOR_OP_DEFAULT_MASK 0x0 - -static inline UVISOR_FORCEINLINE uint32_t uvisor_read(uint32_t addr, uint32_t op, uint32_t mask) -{ - switch(op) - { - case UVISOR_OP_READ(UVISOR_OP_NOP): - return *((uint32_t *) addr); - case UVISOR_OP_READ(UVISOR_OP_AND): - return *((uint32_t *) addr) & mask; - case UVISOR_OP_READ(UVISOR_OP_OR): - return *((uint32_t *) addr) | mask; - case UVISOR_OP_READ(UVISOR_OP_XOR): - return *((uint32_t *) addr) ^ mask; - default: - /* FIXME */ - return 0; - } -} - -#define uvisor_read(addr) uvisor_read((uint32_t) (addr), UVISOR_OP_READ(UVISOR_OP_NOP), __UVISOR_OP_DEFAULT_MASK) - -static inline UVISOR_FORCEINLINE void uvisor_write(uint32_t addr, uint32_t val, uint32_t op, uint32_t mask) -{ - switch(op) - { - case UVISOR_OP_WRITE(UVISOR_OP_NOP): - *((uint32_t *) addr) = val; - case UVISOR_OP_WRITE(UVISOR_OP_AND): - *((uint32_t *) addr) &= val | ~mask; - case UVISOR_OP_WRITE(UVISOR_OP_OR): - *((uint32_t *) addr) |= val & mask; - case UVISOR_OP_WRITE(UVISOR_OP_XOR): - *((uint32_t *) addr) ^= val & mask; - default: - /* FIXME */ - return; - } -} - -#define uvisor_write(addr, val) uvisor_write((uint32_t) (addr), (uint32_t) (val), \ - UVISOR_OP_WRITE(UVISOR_OP_NOP), __UVISOR_OP_DEFAULT_MASK) - -/* uvisor-lib/secure_access.h */ - -/* The conditional statement will be optimised away since the compiler already - * knows the sizeof(type). */ -#define ADDRESS_READ(type, addr) \ - (sizeof(type) == 4 ? uvisor_read32((volatile uint32_t *) (addr)) : \ - sizeof(type) == 2 ? uvisor_read16((volatile uint16_t *) (addr)) : \ - sizeof(type) == 1 ? uvisor_read8((volatile uint8_t *) (addr)) : 0) - -/* The switch statement will be optimised away since the compiler already knows - * the sizeof(type). */ -#define ADDRESS_WRITE(type, addr, val) \ - { \ - switch(sizeof(type)) \ - { \ - case 4: \ - uvisor_write32((volatile uint32_t *) (addr), (uint32_t) (val)); \ - break; \ - case 2: \ - uvisor_write16((volatile uint16_t *) (addr), (uint16_t) (val)); \ - break; \ - case 1: \ - uvisor_write8((volatile uint8_t *) (addr), (uint8_t) (val)); \ - break; \ - } \ - } - -#define UNION_READ(type, addr, fieldU, fieldB) ((*((volatile type *) (addr))).fieldB) - -static inline UVISOR_FORCEINLINE void uvisor_write32(uint32_t volatile *addr, uint32_t val) -{ - *(addr) = val; -} - -static inline UVISOR_FORCEINLINE void uvisor_write16(uint16_t volatile *addr, uint16_t val) -{ - *(addr) = val; -} - -static inline UVISOR_FORCEINLINE void uvisor_write8(uint8_t volatile *addr, uint8_t val) -{ - *(addr) = val; -} - -static inline UVISOR_FORCEINLINE uint32_t uvisor_read32(uint32_t volatile *addr) -{ - return *(addr); -} - -static inline UVISOR_FORCEINLINE uint16_t uvisor_read16(uint16_t volatile *addr) -{ - return *(addr); -} - -static inline UVISOR_FORCEINLINE uint8_t uvisor_read8(uint8_t volatile *addr) -{ - return *(addr); -} - -/* uvisor-lib/secure_gateway.h */ - -#define secure_gateway(dst_box, dst_fn, ...) dst_fn(__VA_ARGS__) - -#endif /* __UVISOR_LIB_UNSUPPORTED_H__ */ From 62308b7afea15de53221ba81543f60513ee605cd Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Mon, 21 Mar 2016 13:20:48 +0000 Subject: [PATCH 19/23] Translate yotta-specific symbols to uVisor ones With this commit uvisor-lib/uvisor-lib.h becomes a wrapper to uvisor/api/inc/uvisor-lib.h. This latter file is included after all yotta-specific symbols have been translated into uVisor ones. This currently includes the following symbols: * UVISOR_PRESENT * ARCH_MPU_{ARMv7M, KINETIS} --- uvisor-lib/uvisor-lib.h | 43 +++++++++++++++++------------------------ 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/uvisor-lib/uvisor-lib.h b/uvisor-lib/uvisor-lib.h index 0a2437b..593c6cb 100644 --- a/uvisor-lib/uvisor-lib.h +++ b/uvisor-lib/uvisor-lib.h @@ -17,38 +17,31 @@ #ifndef __UVISOR_LIB_UVISOR_LIB_H__ #define __UVISOR_LIB_UVISOR_LIB_H__ -/* This file includes all the uVisor library header files at once. - * Some files are included depending on the whether uVisor is supported on the - * target or not. */ - -/* Note: uvisor-lib/override.h should never be included automatically, but only - * when needed to explicitly override symbols in a source file. See the - * file's comments for further information. */ +/* This file translates yotta-specific pre-processor symbols into + * uVisor-specific ones. Then the main uvisor-lib.h file is included. */ #if defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 -#include "uvisor/api/inc/benchmark.h" -#include "uvisor/api/inc/box_config.h" -#include "uvisor/api/inc/debug.h" -#include "uvisor/api/inc/disabled.h" -#include "uvisor/api/inc/error.h" -#include "uvisor/api/inc/interrupts.h" -#include "uvisor/api/inc/register_gateway.h" -#include "uvisor/api/inc/secure_access.h" -#include "uvisor/api/inc/secure_gateway.h" +#define UVISOR_PRESENT 1 + +/* Specify the MPU architecture */ +#if defined(TARGET_LIKE_ARMV7_M) + +#if defined(TARGET_LIKE_KINETIS) +#define ARCH_MPU_KINETIS +#else +#define ARCH_MPU_ARMv7M +#endif + +#endif /* defined(TARGET_LIKE_ARMV7_M) */ #else /* defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 */ -#include "uvisor-lib/unsupported.h" +/* There is no need to specify any other symbol if uVisor is unsupported. */ +#define UVISOR_PRESENT 0 -#endif /* defined(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 */ +#endif /* define(YOTTA_CFG_UVISOR_PRESENT) && YOTTA_CFG_UVISOR_PRESENT == 1 */ -#include "uvisor/api/inc/debug_exports.h" -#include "uvisor/api/inc/halt_exports.h" -#include "uvisor/api/inc/svc_exports.h" -#include "uvisor/api/inc/svc_gw_exports.h" -#include "uvisor/api/inc/unvic_exports.h" -#include "uvisor/api/inc/uvisor_exports.h" -#include "uvisor/api/inc/vmpu_exports.h" +#include "uvisor/api/inc/uvisor-lib.h" #endif /* __UVISOR_LIB_UVISOR_LIB_H__ */ From 7028c8f07901d5f0c5cfbccf2f7d4a29dd123d4d Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Mon, 21 Mar 2016 13:22:42 +0000 Subject: [PATCH 20/23] Build unsupported.c if not UVISOR_SUPPORTED MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Now unsupported.c is located in the uVisor main code-base. It is only built by yotta if uVisor is not supported on the current target. Otherwise, the uVisor release library (*.a) is included — as usual. --- source/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index fce16c2..1cb4770 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -20,6 +20,7 @@ # uVisor paths set(UVISOR_ROOT "${CMAKE_CURRENT_LIST_DIR}/../uvisor") set(UVISOR_API_LIB "${UVISOR_ROOT}/api/lib") +set(UVISOR_API_SRC "${UVISOR_ROOT}/api/src") # Detect the yotta build mode. if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") @@ -50,9 +51,8 @@ if(UVISOR_SUPPORTED) add_library(uvisor-lib) target_link_libraries(uvisor-lib ${UVISOR_API_LIB}/${UVISOR_FAMILY}/${UVISOR_MODE}/${UVISOR_CONFIGURATION}.a) else() - # uvisor-lib source files - file(GLOB UVISOR_LIB_SRC "${CMAKE_CURRENT_LIST_DIR}/*.c") - add_library(uvisor-lib ${UVISOR_LIB_SRC}) + # Build unsupported.c + add_library(uvisor-lib ${UVISOR_API_SRC}/unsupported.c) message(WARNING "\n ********************************************************************* From dc23d865de5420831cd24d1ea3a4e51a85aa2e8e Mon Sep 17 00:00:00 2001 From: Bogdan Marinescu Date: Wed, 23 Mar 2016 21:30:31 +0200 Subject: [PATCH 21/23] version v2.1.0 --- module.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module.json b/module.json index 00fd170..aa8a2f6 100644 --- a/module.json +++ b/module.json @@ -1,6 +1,6 @@ { "name": "uvisor-lib", - "version": "2.0.0", + "version": "2.1.0", "description": "Add security features to mbed", "keywords": [ "security" @@ -27,7 +27,7 @@ } ], "extraIncludes": [ - "uvisor" + "uvisor" ], "dependencies": {}, "targetDependencies": {} From 075cae3dd96a8a840e4293b4c3ca294beb502f2c Mon Sep 17 00:00:00 2001 From: ccli8 Date: Tue, 3 May 2016 10:59:05 +0800 Subject: [PATCH 22/23] Support Nuvoton NUC472 and M451 --- source/support_nuvoton.cmake | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 source/support_nuvoton.cmake diff --git a/source/support_nuvoton.cmake b/source/support_nuvoton.cmake new file mode 100644 index 0000000..817a5c7 --- /dev/null +++ b/source/support_nuvoton.cmake @@ -0,0 +1,28 @@ +########################################################################### +# +# Copyright (c) 2016-2017, Nuvoton, All Rights Reserved +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +########################################################################### + +if(TARGET_LIKE_NUC472 OR TARGET_LIKE_NUC442) + # Nuvoton NUC472/442 series + set(UVISOR_FAMILY "nuc472") + set(UVISOR_CONFIGURATION "configuration_nuc472_m4_0x20000000_0x0") +elseif(TARGET_LIKE_M451 OR TARGET_LIKE_M452 OR TARGET_LIKE_M453) + # Nuvoton M451 series + set(UVISOR_FAMILY "m451") + set(UVISOR_CONFIGURATION "configuration_m451_m4_0x20000000_0x0") +endif() From 04fa92bbf6bfeb6f2b69b8672239873766643aa1 Mon Sep 17 00:00:00 2001 From: Milosch Meriac Date: Mon, 25 Jul 2016 17:55:58 +0100 Subject: [PATCH 23/23] Deprecate uVisor for yotta - point to new repository --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0bd8f36..7f3961b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +> **This library is deprecated and kept for historic purposed: please refer to the [main repository](https://github.com/ARMmbed/uvisor) for more information**. + # The `uvisor-lib` library This is a yotta module that provides a packaged version of uVisor for use in ARM mbed OS.