1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*
- * Copyright (c) 2006-2023, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2023-09-07 zmshahaha the first version
- */
- #ifndef __MM_MEMBLOCK_H__
- #define __MM_MEMBLOCK_H__
- #include "mm_page.h"
- #include <rtdef.h>
- enum mmblk_flag
- {
- MEMBLOCK_NONE = 0x0, /**< normal region */
- MEMBLOCK_HOTPLUG = 0x1, /**< hotpluggable region */
- MEMBLOCK_NOMAP = 0x2, /**< don't add to kernel direct mapping */
- };
- typedef rt_uint32_t mmblk_flag_t;
- /**
- * @struct rt_mmblk_reg
- *
- * @brief A structure representing a region in rt_memblock
- */
- struct rt_mmblk_reg
- {
- rt_region_t memreg; /**< used to indicate the extent of this area */
- mmblk_flag_t flags; /**< the flag of the region */
- rt_bool_t alloc; /**< is the node allocated */
- rt_slist_t node; /**< hook on rt_memblock */
- };
- /**
- * @struct rt_memblock
- *
- * @brief A structure representing physical memory block
- */
- struct rt_memblock
- {
- rt_slist_t reg_list; /**< store the regions of the memory block */
- };
- /**
- * @brief Add a physical address range to the overall memory region
- *
- * @note The newly added region is strictly prohibited from overlapping with existing regions.
- *
- * @param name the name of the region
- * @param start the beginning of the physical address range
- * @param end the size of the physical address range
- * @param flags the flags of the region
- */
- rt_err_t rt_memblock_add_memory(char *name, rt_size_t start, rt_size_t end, mmblk_flag_t flags);
- /**
- * @brief Add a physical address range to the reserved memory region
- *
- * @note The newly added region is strictly prohibited from overlapping with existing regions.
- *
- * @param name the name of the reseved region
- * @param start the beginning of the physical address range
- * @param end the size of the physical address range
- * @param flags the flags of the region
- */
- rt_err_t rt_memblock_reserve_memory(char *name, rt_size_t start, rt_size_t end, mmblk_flag_t flags);
- /**
- * @brief To conclude the management of memory by the memblock.
- *
- * @note This function will free all usable to buddy system and map all memory without
- * specified MEMBLOCK_NOMAP.
- */
- void rt_memblock_setup_memory_environment(void);
- /**
- * @brief Get the memory memblock.
- *
- * @return Overall memory memblock.
- */
- struct rt_memblock *rt_memblock_get_memory(void);
- /**
- * @brief Get the reserved memory memblock.
- *
- * @return Reserved memory memblock.
- */
- struct rt_memblock *rt_memblock_get_reserved(void);
- #endif /* __MM_MEMBLOCK_H__ */
|