mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Wed Feb 20 22:31:08 2019 +0000
Revision:
189:f392fc9709a3
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 189:f392fc9709a3 1 /* mbed Microcontroller Library
AnnaBridge 189:f392fc9709a3 2 *
AnnaBridge 189:f392fc9709a3 3 * \copyright
AnnaBridge 189:f392fc9709a3 4
AnnaBridge 189:f392fc9709a3 5 * (c) 2018, Cypress Semiconductor Corporation
AnnaBridge 189:f392fc9709a3 6 * or a subsidiary of Cypress Semiconductor Corporation. All rights
AnnaBridge 189:f392fc9709a3 7 * reserved.
AnnaBridge 189:f392fc9709a3 8 *
AnnaBridge 189:f392fc9709a3 9 * SPDX-License-Identifier: Apache-2.0
AnnaBridge 189:f392fc9709a3 10 *
AnnaBridge 189:f392fc9709a3 11 * Licensed under the Apache License, Version 2.0 (the "License");
AnnaBridge 189:f392fc9709a3 12 * you may not use this file except in compliance with the License.
AnnaBridge 189:f392fc9709a3 13 * You may obtain a copy of the License at
AnnaBridge 189:f392fc9709a3 14 *
AnnaBridge 189:f392fc9709a3 15 * http://www.apache.org/licenses/LICENSE-2.0
AnnaBridge 189:f392fc9709a3 16 *
AnnaBridge 189:f392fc9709a3 17 * Unless required by applicable law or agreed to in writing, software
AnnaBridge 189:f392fc9709a3 18 * distributed under the License is distributed on an "AS IS" BASIS,
AnnaBridge 189:f392fc9709a3 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
AnnaBridge 189:f392fc9709a3 20 * See the License for the specific language governing permissions and
AnnaBridge 189:f392fc9709a3 21 * limitations under the License.
AnnaBridge 189:f392fc9709a3 22 */
AnnaBridge 189:f392fc9709a3 23
AnnaBridge 189:f392fc9709a3 24 #ifndef _CYPROTECTION_H_
AnnaBridge 189:f392fc9709a3 25 #define _CYPROTECTION_H_
AnnaBridge 189:f392fc9709a3 26
AnnaBridge 189:f392fc9709a3 27 #include "cy_prot.h"
AnnaBridge 189:f392fc9709a3 28
AnnaBridge 189:f392fc9709a3 29 #define MPU_SMPU_SUBREGIONS_NUMB (8u)
AnnaBridge 189:f392fc9709a3 30 /* MPU is not used yet */
AnnaBridge 189:f392fc9709a3 31 #define CPUSS_PROT_MPU_STRUCT_NR (0u)
AnnaBridge 189:f392fc9709a3 32
AnnaBridge 189:f392fc9709a3 33 #define CPUSS_PROT_PPU_GR_STRUCT_NR (16u)
AnnaBridge 189:f392fc9709a3 34 #define CPUSS_PROT_PPU_PROG_STRUCT_NR (16u)
AnnaBridge 189:f392fc9709a3 35 #define CPUSS_PROT_PPU_FX_SL_STRUCT_NR (16u)
AnnaBridge 189:f392fc9709a3 36 #define CPUSS_PROT_PPU_FX_RG_STRUCT_NR (29u)
AnnaBridge 189:f392fc9709a3 37
AnnaBridge 189:f392fc9709a3 38 #define CPUSS_PROT_PPU_FX_RG_START_ADDR (0x40201000UL)
AnnaBridge 189:f392fc9709a3 39
AnnaBridge 189:f392fc9709a3 40 #define PRIVILEGED_MODE (1u)
AnnaBridge 189:f392fc9709a3 41 #define UNPRIVILEGED_MODE (0u)
AnnaBridge 189:f392fc9709a3 42 #define NONSECURE_MODE (1u)
AnnaBridge 189:f392fc9709a3 43 #define SECURE_MODE (0u)
AnnaBridge 189:f392fc9709a3 44
AnnaBridge 189:f392fc9709a3 45 /* PPU Group existing bitmask - 11001011111 */
AnnaBridge 189:f392fc9709a3 46 #define PERI_PPU_GR_MMIO_EXIST_BITMASK 0x65F
AnnaBridge 189:f392fc9709a3 47 /* PPU MMIO1 Group Fixed Region existing bitmask - 10 */
AnnaBridge 189:f392fc9709a3 48 #define PERI_PPU_GR_MMIO1_EXIST_BITMASK 0x2
AnnaBridge 189:f392fc9709a3 49 /* PPU MMIO2 Group Fixed Region existing bitmask - 11001111111111 */
AnnaBridge 189:f392fc9709a3 50 #define PERI_PPU_GR_MMIO2_EXIST_BITMASK 0x33FF
AnnaBridge 189:f392fc9709a3 51 /* PPU MMIO3 Group Fixed Region existing bitmask - 1111101111111 */
AnnaBridge 189:f392fc9709a3 52 #define PERI_PPU_GR_MMIO3_EXIST_BITMASK 0x1F7F
AnnaBridge 189:f392fc9709a3 53 /* PPU MMIO4 Group Fixed Region existing bitmask - 101 */
AnnaBridge 189:f392fc9709a3 54 #define PERI_PPU_GR_MMIO4_EXIST_BITMASK 0x5
AnnaBridge 189:f392fc9709a3 55 /* PPU MMIO6 Group Fixed Region existing bitmask - 1111111111 */
AnnaBridge 189:f392fc9709a3 56 #define PERI_PPU_GR_MMIO6_EXIST_BITMASK 0x3FF
AnnaBridge 189:f392fc9709a3 57 /* PPU MMIO9 Group Fixed Region existing bitmask - 11 */
AnnaBridge 189:f392fc9709a3 58 #define PERI_PPU_GR_MMIO9_EXIST_BITMASK 0x3
AnnaBridge 189:f392fc9709a3 59 /* PPU MMIO10 Group Fixed Region existing bitmask - 111 */
AnnaBridge 189:f392fc9709a3 60 #define PERI_PPU_GR_MMIO10_EXIST_BITMASK 0x7
AnnaBridge 189:f392fc9709a3 61
AnnaBridge 189:f392fc9709a3 62
AnnaBridge 189:f392fc9709a3 63 /* TODO: There is no SWPU configuration part */
AnnaBridge 189:f392fc9709a3 64 typedef struct {
AnnaBridge 189:f392fc9709a3 65 uint32_t* address; /**< Base address of the memory region (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 66 cy_en_prot_size_t regionSize; /**< Size of the memory region (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 67 uint8_t subregions; /**< Mask of the 8 subregions to disable (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 68 cy_en_prot_perm_t userPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 69 cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 70 bool secure; /**< Non Secure = 0, Secure = 1 */
AnnaBridge 189:f392fc9709a3 71 bool pcMatch; /**< Access evaluation = 0, Matching = 1 */
AnnaBridge 189:f392fc9709a3 72 uint16_t pcMask; /**< Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 73 PROT_SMPU_SMPU_STRUCT_Type* prot_region; /* protection region */
AnnaBridge 189:f392fc9709a3 74 cy_en_prot_perm_t userMstPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 75 cy_en_prot_perm_t privMstPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 76 } cy_smpu_region_config_t;
AnnaBridge 189:f392fc9709a3 77
AnnaBridge 189:f392fc9709a3 78 /*
AnnaBridge 189:f392fc9709a3 79 * See Cy_Prot_ConfigBusMaster function description for parameters meaning
AnnaBridge 189:f392fc9709a3 80 *
AnnaBridge 189:f392fc9709a3 81 * act_pcMask specifies active PC for Cy_Prot_SetActivePC function
AnnaBridge 189:f392fc9709a3 82 */
AnnaBridge 189:f392fc9709a3 83 typedef struct {
AnnaBridge 189:f392fc9709a3 84 en_prot_master_t busMaster;
AnnaBridge 189:f392fc9709a3 85 bool privileged;
AnnaBridge 189:f392fc9709a3 86 bool secure;
AnnaBridge 189:f392fc9709a3 87 uint32_t pcMask;
AnnaBridge 189:f392fc9709a3 88 uint32_t act_pc;
AnnaBridge 189:f392fc9709a3 89 } cy_bus_master_config_t;
AnnaBridge 189:f392fc9709a3 90
AnnaBridge 189:f392fc9709a3 91 /** Configuration structure for Fixed Group (GR) PPU (PPU_GR) struct initialization */
AnnaBridge 189:f392fc9709a3 92 typedef struct
AnnaBridge 189:f392fc9709a3 93 {
AnnaBridge 189:f392fc9709a3 94 cy_en_prot_perm_t userPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 95 cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 96 bool secure; /**< Non Secure = 0, Secure = 1 */
AnnaBridge 189:f392fc9709a3 97 bool pcMatch; /**< Access evaluation = 0, Matching = 1 */
AnnaBridge 189:f392fc9709a3 98 uint16_t pcMask; /**< Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 99 cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */
AnnaBridge 189:f392fc9709a3 100 cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 101 bool secureMst; /**< Non Secure = 0, Secure = 1 Master */
AnnaBridge 189:f392fc9709a3 102 uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 103 PERI_PPU_GR_Type *pPpuStr; /**< Ppu structure address */
AnnaBridge 189:f392fc9709a3 104 } cy_ppu_fixed_gr_cfg_t;
AnnaBridge 189:f392fc9709a3 105 /** Configuration structure for Fixed Region (RG) PPU (PPU_RG) struct initialization */
AnnaBridge 189:f392fc9709a3 106 typedef struct
AnnaBridge 189:f392fc9709a3 107 {
AnnaBridge 189:f392fc9709a3 108 cy_en_prot_perm_t userPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 109 cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 110 bool secure; /**< Non Secure = 0, Secure = 1 */
AnnaBridge 189:f392fc9709a3 111 bool pcMatch; /**< Access evaluation = 0, Matching = 1 */
AnnaBridge 189:f392fc9709a3 112 uint16_t pcMask; /**< Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 113 cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */
AnnaBridge 189:f392fc9709a3 114 cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 115 bool secureMst; /**< Non Secure = 0, Secure = 1 Master */
AnnaBridge 189:f392fc9709a3 116 uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 117 PERI_GR_PPU_RG_Type *pPpuStr; /**< Ppu structure address */
AnnaBridge 189:f392fc9709a3 118 } cy_ppu_fixed_rg_cfg_t;
AnnaBridge 189:f392fc9709a3 119 /** Configuration structure for Fixed Slave (SL) PPU (PPU_SL) struct initialization */
AnnaBridge 189:f392fc9709a3 120 typedef struct
AnnaBridge 189:f392fc9709a3 121 {
AnnaBridge 189:f392fc9709a3 122 cy_en_prot_perm_t userPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 123 cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 124 bool secure; /**< Non Secure = 0, Secure = 1 */
AnnaBridge 189:f392fc9709a3 125 bool pcMatch; /**< Access evaluation = 0, Matching = 1 */
AnnaBridge 189:f392fc9709a3 126 uint16_t pcMask; /**< Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 127 cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */
AnnaBridge 189:f392fc9709a3 128 cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 129 bool secureMst; /**< Non Secure = 0, Secure = 1 Master */
AnnaBridge 189:f392fc9709a3 130 uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 131 PERI_GR_PPU_SL_Type *pPpuStr; /**< Ppu structure address */
AnnaBridge 189:f392fc9709a3 132 } cy_ppu_fixed_sl_cfg_t;
AnnaBridge 189:f392fc9709a3 133
AnnaBridge 189:f392fc9709a3 134 /** Configuration structure for Programmable (PROG) PPU (PPU_PR) struct initialization */
AnnaBridge 189:f392fc9709a3 135 typedef struct
AnnaBridge 189:f392fc9709a3 136 {
AnnaBridge 189:f392fc9709a3 137 uint32_t* address; /**< Base address of the memory region (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 138 cy_en_prot_size_t regionSize; /**< Size of the memory region (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 139 uint8_t subregions; /**< Mask of the 8 subregions to disable (Only applicable to slave) */
AnnaBridge 189:f392fc9709a3 140 cy_en_prot_perm_t userPermission; /**< User permissions for the region */
AnnaBridge 189:f392fc9709a3 141 cy_en_prot_perm_t privPermission; /**< Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 142 bool secure; /**< Non Secure = 0, Secure = 1 */
AnnaBridge 189:f392fc9709a3 143 bool pcMatch; /**< Access evaluation = 0, Matching = 1 */
AnnaBridge 189:f392fc9709a3 144 uint16_t pcMask; /**< Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 145 cy_en_prot_perm_t userMstPermission; /**< Master User permissions for the region */
AnnaBridge 189:f392fc9709a3 146 cy_en_prot_perm_t privMstPermission; /**< Master Privileged permissions for the region */
AnnaBridge 189:f392fc9709a3 147 bool secureMst; /**< Non Secure = 0, Secure = 1 Master */
AnnaBridge 189:f392fc9709a3 148 uint16_t pcMstMask; /**< Master Mask of allowed protection context(s) */
AnnaBridge 189:f392fc9709a3 149 PERI_PPU_PR_Type *pPpuStr; /**< Ppu structure address */
AnnaBridge 189:f392fc9709a3 150 } cy_ppu_prog_cfg_t;
AnnaBridge 189:f392fc9709a3 151
AnnaBridge 189:f392fc9709a3 152 cy_en_prot_status_t smpu_protect(cy_smpu_region_config_t smpu_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 153 cy_en_prot_status_t ppu_fixed_rg_protect(cy_ppu_fixed_rg_cfg_t ppu_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 154 cy_en_prot_status_t ppu_fixed_sl_protect(cy_ppu_fixed_sl_cfg_t ppu_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 155 cy_en_prot_status_t ppu_prog_protect(cy_ppu_prog_cfg_t ppu_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 156 cy_en_prot_status_t ppu_fixed_gr_protect(cy_ppu_fixed_gr_cfg_t ppu_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 157 cy_en_prot_status_t bus_masters_protect(cy_bus_master_config_t bus_masters_config_arr[], uint32_t arr_length);
AnnaBridge 189:f392fc9709a3 158
AnnaBridge 189:f392fc9709a3 159 uint8_t isPeripheralAccessAllowed(uint32_t perStartAddr, uint32_t perSize,
AnnaBridge 189:f392fc9709a3 160 uint8_t privModeFlag, uint8_t nsecureFlag, enum cy_en_prot_pc_t protectionCtx, cy_en_prot_perm_t accessType);
AnnaBridge 189:f392fc9709a3 161 uint8_t isMemoryAccessAllowed(uint32_t memStartAddr, uint32_t memSize,
AnnaBridge 189:f392fc9709a3 162 uint8_t privModeFlag, uint8_t nsecureFlag, enum cy_en_prot_pc_t protectionCtx, cy_en_prot_perm_t accessType);
AnnaBridge 189:f392fc9709a3 163
AnnaBridge 189:f392fc9709a3 164 #endif /* _CYPROTECTION_H_ */