添加rtthread相关代码
This commit is contained in:
95
riscv/rtthread/components/mm/mm_memblock.h
Executable file
95
riscv/rtthread/components/mm/mm_memblock.h
Executable file
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* 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__ */
|
||||
Reference in New Issue
Block a user