This is the final version of Mini Gateway for Automation and Security desgined for Renesas GR Peach Design Contest

Dependencies:   GR-PEACH_video GraphicsFramework HTTPServer R_BSP mbed-rpc mbed-rtos Socket lwip-eth lwip-sys lwip FATFileSystem

Fork of mbed-os-example-mbed5-blinky by mbed-os-examples

Committer:
vipinranka
Date:
Wed Jan 11 11:41:30 2017 +0000
Revision:
12:9a20164dcc47
This is the final version MGAS Project for Renesas GR Peach Design Contest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vipinranka 12:9a20164dcc47 1 /**************************************************************************//**
vipinranka 12:9a20164dcc47 2 * @file core_cmSecureAccess.h
vipinranka 12:9a20164dcc47 3 * @brief CMSIS Cortex-M Core Secure Access Header File
vipinranka 12:9a20164dcc47 4 * @version XXX
vipinranka 12:9a20164dcc47 5 * @date 10. June 2016
vipinranka 12:9a20164dcc47 6 *
vipinranka 12:9a20164dcc47 7 * @note
vipinranka 12:9a20164dcc47 8 *
vipinranka 12:9a20164dcc47 9 ******************************************************************************/
vipinranka 12:9a20164dcc47 10 /* Copyright (c) 2016 ARM LIMITED
vipinranka 12:9a20164dcc47 11
vipinranka 12:9a20164dcc47 12 All rights reserved.
vipinranka 12:9a20164dcc47 13 Redistribution and use in source and binary forms, with or without
vipinranka 12:9a20164dcc47 14 modification, are permitted provided that the following conditions are met:
vipinranka 12:9a20164dcc47 15 - Redistributions of source code must retain the above copyright
vipinranka 12:9a20164dcc47 16 notice, this list of conditions and the following disclaimer.
vipinranka 12:9a20164dcc47 17 - Redistributions in binary form must reproduce the above copyright
vipinranka 12:9a20164dcc47 18 notice, this list of conditions and the following disclaimer in the
vipinranka 12:9a20164dcc47 19 documentation and/or other materials provided with the distribution.
vipinranka 12:9a20164dcc47 20 - Neither the name of ARM nor the names of its contributors may be used
vipinranka 12:9a20164dcc47 21 to endorse or promote products derived from this software without
vipinranka 12:9a20164dcc47 22 specific prior written permission.
vipinranka 12:9a20164dcc47 23 *
vipinranka 12:9a20164dcc47 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
vipinranka 12:9a20164dcc47 25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
vipinranka 12:9a20164dcc47 26 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
vipinranka 12:9a20164dcc47 27 ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
vipinranka 12:9a20164dcc47 28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
vipinranka 12:9a20164dcc47 29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
vipinranka 12:9a20164dcc47 30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
vipinranka 12:9a20164dcc47 31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
vipinranka 12:9a20164dcc47 32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
vipinranka 12:9a20164dcc47 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
vipinranka 12:9a20164dcc47 34 POSSIBILITY OF SUCH DAMAGE.
vipinranka 12:9a20164dcc47 35 ---------------------------------------------------------------------------*/
vipinranka 12:9a20164dcc47 36
vipinranka 12:9a20164dcc47 37
vipinranka 12:9a20164dcc47 38 #ifndef __CORE_CM_SECURE_ACCESS_H
vipinranka 12:9a20164dcc47 39 #define __CORE_CM_SECURE_ACCESS_H
vipinranka 12:9a20164dcc47 40
vipinranka 12:9a20164dcc47 41
vipinranka 12:9a20164dcc47 42 /* ########################### Core Secure Access ########################### */
vipinranka 12:9a20164dcc47 43
vipinranka 12:9a20164dcc47 44 #ifdef FEATURE_UVISOR
vipinranka 12:9a20164dcc47 45 #include "uvisor-lib.h"
vipinranka 12:9a20164dcc47 46
vipinranka 12:9a20164dcc47 47 /* Secure uVisor implementation. */
vipinranka 12:9a20164dcc47 48
vipinranka 12:9a20164dcc47 49 /** Set the value at the target address.
vipinranka 12:9a20164dcc47 50 *
vipinranka 12:9a20164dcc47 51 * Equivalent to: `*address = value`.
vipinranka 12:9a20164dcc47 52 * @param address[in] Target address
vipinranka 12:9a20164dcc47 53 * @param value[in] Value to write at the address location.
vipinranka 12:9a20164dcc47 54 */
vipinranka 12:9a20164dcc47 55 #define SECURE_WRITE(address, value) \
vipinranka 12:9a20164dcc47 56 uvisor_write(main, UVISOR_RGW_SHARED, address, value, UVISOR_RGW_OP_WRITE, 0xFFFFFFFFUL)
vipinranka 12:9a20164dcc47 57
vipinranka 12:9a20164dcc47 58 /** Get the value at the target address.
vipinranka 12:9a20164dcc47 59 *
vipinranka 12:9a20164dcc47 60 * @param address[in] Target address
vipinranka 12:9a20164dcc47 61 * @returns The value `*address`.
vipinranka 12:9a20164dcc47 62 */
vipinranka 12:9a20164dcc47 63 #define SECURE_READ(address) \
vipinranka 12:9a20164dcc47 64 uvisor_read(main, UVISOR_RGW_SHARED, address, UVISOR_RGW_OP_READ, 0xFFFFFFFFUL)
vipinranka 12:9a20164dcc47 65
vipinranka 12:9a20164dcc47 66 /** Get the selected bits at the target address.
vipinranka 12:9a20164dcc47 67 *
vipinranka 12:9a20164dcc47 68 * @param address[in] Target address
vipinranka 12:9a20164dcc47 69 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 70 * @returns The value `*address & mask`.
vipinranka 12:9a20164dcc47 71 */
vipinranka 12:9a20164dcc47 72 #define SECURE_BITS_GET(address, mask) \
vipinranka 12:9a20164dcc47 73 UVISOR_BITS_GET(main, UVISOR_RGW_SHARED, address, mask)
vipinranka 12:9a20164dcc47 74
vipinranka 12:9a20164dcc47 75 /** Check the selected bits at the target address.
vipinranka 12:9a20164dcc47 76 *
vipinranka 12:9a20164dcc47 77 * @param address[in] Address at which to check the bits
vipinranka 12:9a20164dcc47 78 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 79 * @returns The value `((*address & mask) == mask)`.
vipinranka 12:9a20164dcc47 80 */
vipinranka 12:9a20164dcc47 81 #define SECURE_BITS_CHECK(address, mask) \
vipinranka 12:9a20164dcc47 82 UVISOR_BITS_CHECK(main, UVISOR_RGW_SHARED, address, mask)
vipinranka 12:9a20164dcc47 83
vipinranka 12:9a20164dcc47 84 /** Set the selected bits to 1 at the target address.
vipinranka 12:9a20164dcc47 85 *
vipinranka 12:9a20164dcc47 86 * Equivalent to: `*address |= mask`.
vipinranka 12:9a20164dcc47 87 * @param address[in] Target address
vipinranka 12:9a20164dcc47 88 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 89 */
vipinranka 12:9a20164dcc47 90 #define SECURE_BITS_SET(address, mask) \
vipinranka 12:9a20164dcc47 91 UVISOR_BITS_SET(main, UVISOR_RGW_SHARED, address, mask)
vipinranka 12:9a20164dcc47 92
vipinranka 12:9a20164dcc47 93 /** Clear the selected bits at the target address.
vipinranka 12:9a20164dcc47 94 *
vipinranka 12:9a20164dcc47 95 * Equivalent to: `*address &= ~mask`.
vipinranka 12:9a20164dcc47 96 * @param address[in] Target address
vipinranka 12:9a20164dcc47 97 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 98 */
vipinranka 12:9a20164dcc47 99 #define SECURE_BITS_CLEAR(address, mask) \
vipinranka 12:9a20164dcc47 100 UVISOR_BITS_CLEAR(main, UVISOR_RGW_SHARED, address, mask)
vipinranka 12:9a20164dcc47 101
vipinranka 12:9a20164dcc47 102 /** Set the selected bits at the target address to the given value.
vipinranka 12:9a20164dcc47 103 *
vipinranka 12:9a20164dcc47 104 * Equivalent to: `*address = (*address & ~mask) | (value & mask)`.
vipinranka 12:9a20164dcc47 105 * @param address[in] Target address
vipinranka 12:9a20164dcc47 106 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 107 * @param value[in] Value to write at the address location. Note: The value
vipinranka 12:9a20164dcc47 108 * must be already shifted to the correct bit position
vipinranka 12:9a20164dcc47 109 */
vipinranka 12:9a20164dcc47 110 #define SECURE_BITS_SET_VALUE(address, mask, value) \
vipinranka 12:9a20164dcc47 111 UVISOR_BITS_SET_VALUE(main, UVISOR_RGW_SHARED, address, mask, value)
vipinranka 12:9a20164dcc47 112
vipinranka 12:9a20164dcc47 113 /** Toggle the selected bits at the target address.
vipinranka 12:9a20164dcc47 114 *
vipinranka 12:9a20164dcc47 115 * Equivalent to: `*address ^= mask`.
vipinranka 12:9a20164dcc47 116 * @param address[in] Target address
vipinranka 12:9a20164dcc47 117 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 118 */
vipinranka 12:9a20164dcc47 119 #define SECURE_BITS_TOGGLE(address, mask) \
vipinranka 12:9a20164dcc47 120 UVISOR_BITS_TOGGLE(main, UVISOR_RGW_SHARED, address, mask)
vipinranka 12:9a20164dcc47 121
vipinranka 12:9a20164dcc47 122 #else
vipinranka 12:9a20164dcc47 123
vipinranka 12:9a20164dcc47 124 /* Insecure fallback implementation. */
vipinranka 12:9a20164dcc47 125
vipinranka 12:9a20164dcc47 126 /** Set the value at the target address.
vipinranka 12:9a20164dcc47 127 *
vipinranka 12:9a20164dcc47 128 * Equivalent to: `*address = value`.
vipinranka 12:9a20164dcc47 129 * @param address[in] Target address
vipinranka 12:9a20164dcc47 130 * @param value[in] Value to write at the address location.
vipinranka 12:9a20164dcc47 131 */
vipinranka 12:9a20164dcc47 132 #define SECURE_WRITE(address, value) \
vipinranka 12:9a20164dcc47 133 *(address) = (value)
vipinranka 12:9a20164dcc47 134
vipinranka 12:9a20164dcc47 135 /** Get the value at the target address.
vipinranka 12:9a20164dcc47 136 *
vipinranka 12:9a20164dcc47 137 * @param address[in] Target address
vipinranka 12:9a20164dcc47 138 * @returns The value `*address`.
vipinranka 12:9a20164dcc47 139 */
vipinranka 12:9a20164dcc47 140 #define SECURE_READ(address) \
vipinranka 12:9a20164dcc47 141 (*(address))
vipinranka 12:9a20164dcc47 142
vipinranka 12:9a20164dcc47 143 /** Get the selected bits at the target address.
vipinranka 12:9a20164dcc47 144 *
vipinranka 12:9a20164dcc47 145 * @param address[in] Target address
vipinranka 12:9a20164dcc47 146 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 147 * @returns The value `*address & mask`.
vipinranka 12:9a20164dcc47 148 */
vipinranka 12:9a20164dcc47 149 #define SECURE_BITS_GET(address, mask) \
vipinranka 12:9a20164dcc47 150 (*(address) & (mask))
vipinranka 12:9a20164dcc47 151
vipinranka 12:9a20164dcc47 152 /** Check the selected bits at the target address.
vipinranka 12:9a20164dcc47 153 *
vipinranka 12:9a20164dcc47 154 * @param address[in] Address at which to check the bits
vipinranka 12:9a20164dcc47 155 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 156 * @returns The value `((*address & mask) == mask)`.
vipinranka 12:9a20164dcc47 157 */
vipinranka 12:9a20164dcc47 158 #define SECURE_BITS_CHECK(address, mask) \
vipinranka 12:9a20164dcc47 159 ((*(address) & (mask)) == (mask))
vipinranka 12:9a20164dcc47 160
vipinranka 12:9a20164dcc47 161 /** Set the selected bits to 1 at the target address.
vipinranka 12:9a20164dcc47 162 *
vipinranka 12:9a20164dcc47 163 * Equivalent to: `*address |= mask`.
vipinranka 12:9a20164dcc47 164 * @param address[in] Target address
vipinranka 12:9a20164dcc47 165 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 166 */
vipinranka 12:9a20164dcc47 167 #define SECURE_BITS_SET(address, mask) \
vipinranka 12:9a20164dcc47 168 *(address) |= (mask)
vipinranka 12:9a20164dcc47 169
vipinranka 12:9a20164dcc47 170 /** Clear the selected bits at the target address.
vipinranka 12:9a20164dcc47 171 *
vipinranka 12:9a20164dcc47 172 * Equivalent to: `*address &= ~mask`.
vipinranka 12:9a20164dcc47 173 * @param address[in] Target address
vipinranka 12:9a20164dcc47 174 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 175 */
vipinranka 12:9a20164dcc47 176 #define SECURE_BITS_CLEAR(address, mask) \
vipinranka 12:9a20164dcc47 177 *(address) &= ~(mask)
vipinranka 12:9a20164dcc47 178
vipinranka 12:9a20164dcc47 179 /** Set the selected bits at the target address to the given value.
vipinranka 12:9a20164dcc47 180 *
vipinranka 12:9a20164dcc47 181 * Equivalent to: `*address = (*address & ~mask) | (value & mask)`.
vipinranka 12:9a20164dcc47 182 * @param address[in] Target address
vipinranka 12:9a20164dcc47 183 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 184 * @param value[in] Value to write at the address location. Note: The value
vipinranka 12:9a20164dcc47 185 * must be already shifted to the correct bit position
vipinranka 12:9a20164dcc47 186 */
vipinranka 12:9a20164dcc47 187 #define SECURE_BITS_SET_VALUE(address, mask, value) \
vipinranka 12:9a20164dcc47 188 *(address) = (*(address) & ~(mask)) | ((value) & (mask))
vipinranka 12:9a20164dcc47 189
vipinranka 12:9a20164dcc47 190 /** Toggle the selected bits at the target address.
vipinranka 12:9a20164dcc47 191 *
vipinranka 12:9a20164dcc47 192 * Equivalent to: `*address ^= mask`.
vipinranka 12:9a20164dcc47 193 * @param address[in] Target address
vipinranka 12:9a20164dcc47 194 * @param mask[in] Bits to select out of the target address
vipinranka 12:9a20164dcc47 195 */
vipinranka 12:9a20164dcc47 196 #define SECURE_BITS_TOGGLE(address, mask) \
vipinranka 12:9a20164dcc47 197 *(address) ^= (mask)
vipinranka 12:9a20164dcc47 198
vipinranka 12:9a20164dcc47 199 #endif
vipinranka 12:9a20164dcc47 200
vipinranka 12:9a20164dcc47 201 #endif /* __CORE_CM_SECURE_ACCESS_H */