1 /* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 /** 33 * @defgroup memory protection 34 * @ingroup kernel 35 */ 36 37 #ifndef _LOS_MPU_H 38 #define _LOS_MPU_H 39 40 #include "los_compiler.h" 41 42 #ifdef __cplusplus 43 #if __cplusplus 44 extern "C" { 45 #endif /* __cplusplus */ 46 #endif /* __cplusplus */ 47 48 typedef enum { 49 MPU_RW_BY_PRIVILEGED_ONLY = 0, 50 MPU_RW_ANY = 1, 51 MPU_RO_BY_PRIVILEGED_ONLY = 2, 52 MPU_RO_ANY = 3, 53 } MpuAccessPermission; 54 55 typedef enum { 56 MPU_EXECUTABLE = 0, 57 MPU_NON_EXECUTABLE = 1, 58 } MpuExecutable; 59 60 typedef enum { 61 MPU_NO_SHARE = 0, 62 MPU_SHARE = 1, 63 } MpuShareability; 64 65 typedef enum { 66 MPU_MEM_ON_CHIP_ROM = 0, 67 MPU_MEM_ON_CHIP_RAM = 1, 68 MPU_MEM_XIP_PSRAM = 2, 69 MPU_MEM_XIP_NOR_FLASH = 3, 70 MPU_MEM_SHARE_MEM = 4, 71 } MpuMemType; 72 73 typedef struct { 74 UINT32 baseAddr; 75 UINT64 size; /* armv7 size == 2^x (5 <= x <= 32) 128B - 4GB */ 76 MpuAccessPermission permission; 77 MpuExecutable executable; 78 MpuShareability shareability; 79 MpuMemType memType; 80 } MPU_CFG_PARA; 81 82 VOID ArchMpuEnable(UINT32 defaultRegionEnable); 83 VOID ArchMpuDisable(VOID); 84 UINT32 ArchMpuSetRegion(UINT32 regionId, MPU_CFG_PARA *para); 85 UINT32 ArchMpuDisableRegion(UINT32 regionId); 86 INT32 ArchMpuUnusedRegionGet(VOID); 87 88 #ifdef __cplusplus 89 #if __cplusplus 90 } 91 #endif /* __cplusplus */ 92 #endif /* __cplusplus */ 93 94 #endif /* _LOS_MPU_H */ 95