1 /* 2 * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #pragma once 8 9 #include "soc/soc.h" 10 #include "soc/memprot_defs.h" 11 12 #ifdef __cplusplus 13 extern "C" { 14 #endif 15 16 /** 17 * @brief Memprot LL error codes 18 * 19 */ 20 typedef enum { 21 MEMP_HAL_OK = 0, 22 MEMP_HAL_ERR_SPLIT_ADDR_OUT_OF_RANGE = 2, 23 MEMP_HAL_ERR_SPLIT_ADDR_INVALID = 2, /* temporary duplicate for S2 builds */ 24 MEMP_HAL_ERR_SPLIT_ADDR_UNALIGNED = 3, 25 MEMP_HAL_ERR_UNI_BLOCK_INVALID = 4, 26 MEMP_HAL_ERR_AREA_INVALID = 5, 27 MEMP_HAL_ERR_WORLD_INVALID = 6, 28 MEMP_HAL_ERR_CORE_INVALID = 7, 29 MEMP_HAL_FAIL = -1, 30 } memprot_hal_err_t; 31 32 /** 33 * @brief Memprot LL PMS World IDs 34 * 35 */ 36 typedef enum { 37 MEMP_HAL_WORLD_NONE = 0x00, 38 MEMP_HAL_WORLD_0 = 0x01, 39 MEMP_HAL_WORLD_1 = 0x10 40 } memprot_hal_world_t; 41 42 /** 43 * @brief Memprot LL PMS Area IDs 44 * 45 */ 46 typedef enum { 47 MEMP_HAL_AREA_NONE = 0, 48 MEMP_HAL_AREA_LOW = 1, 49 MEMP_HAL_AREA_HIGH = 2 50 } memprot_hal_area_t; 51 52 //auxiliary macros & defines 53 54 #define MEMP_HAL_CHECK_IRAM_ADDR_IN_RANGE(x) if (x < SOC_DIRAM_IRAM_LOW || x >= SOC_DIRAM_IRAM_HIGH) { return MEMP_HAL_ERR_SPLIT_ADDR_OUT_OF_RANGE; } 55 #define MEMP_HAL_CHECK_DRAM_ADDR_IN_RANGE(x) if (x < SOC_DIRAM_DRAM_LOW || x >= SOC_DIRAM_DRAM_HIGH) { return MEMP_HAL_ERR_SPLIT_ADDR_OUT_OF_RANGE; } 56 #define MEMP_HAL_CHECK_SPLIT_ADDR_ALIGNED(x) if (x % I_D_SPLIT_LINE_ALIGN != 0) { return MEMP_HAL_ERR_SPLIT_ADDR_UNALIGNED; } 57 58 #define MEMP_HAL_CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_BITS_BELOW_SA 0x0 //0b00 59 #define MEMP_HAL_CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_BITS_EQUAL_SA 0x2 //0b10 60 #define MEMP_HAL_CORE_X_IRAM0_DRAM0_DMA_SRAM_CATEGORY_BITS_ABOVE_SA 0x3 //0b11 61 62 #ifdef __cplusplus 63 } 64 #endif 65