1 /* 2 * Copyright (c) 2006-2023, RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2023-09-25 tangzz98 the first version 9 */ 10 11 #ifndef __MPROTECT_H__ 12 #define __MPROTECT_H__ 13 14 #include <rtdef.h> 15 #include <mputype.h> 16 17 #define ADDR_IN_REGION(addr, region) (((rt_size_t)(addr) >= (rt_size_t)((region)->start)) && ((rt_size_t)(addr) < (rt_size_t)((region)->start) + (region)->size)) 18 19 typedef struct 20 { 21 void *start; 22 rt_size_t size; 23 rt_mem_attr_t attr; 24 } rt_mem_region_t; 25 26 #include <mpu.h> 27 28 typedef struct 29 { 30 rt_mem_region_t region; 31 rt_thread_t owner; 32 } rt_mem_exclusive_region_t; 33 34 int rt_mprotect_init(void); 35 rt_err_t rt_mprotect_add_region(rt_thread_t thread, rt_mem_region_t *region); 36 rt_err_t rt_mprotect_delete_region(rt_thread_t thread, rt_mem_region_t *region); 37 rt_err_t rt_mprotect_update_region(rt_thread_t thread, rt_mem_region_t *region); 38 rt_err_t rt_mprotect_add_exclusive_region(void *start, rt_size_t size); 39 rt_err_t rt_mprotect_delete_exclusive_region(void *start, rt_size_t size); 40 41 #endif /* __MPROTECT_H__ */ 42