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