Files
mkrtos-real/mkrtos_user/lib/sys/inc/u_vmam.h
2025-01-26 11:54:01 +08:00

58 lines
1.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <u_types.h>
#include <u_prot.h>
enum vpage_prot_attrs
{
VPAGE_PROT_RO = 1, //!< 只读
VPAGE_PROT_WO = 0x2,
VPAGE_PROT_RW = VPAGE_PROT_RO | VPAGE_PROT_WO, //!< 读写
VPAGE_PROT_X = 0x4,
VPAGE_PROT_RWX = (VPAGE_PROT_RO | VPAGE_PROT_RW | VPAGE_PROT_X), //!< 读写执行
VPAGE_PROT_N_ACCESS_FLAG = 0x8, //!< 访问是否缺页,设置代表缺页
VPAGE_PROT_UNCACHE = 0x10, //!< 不使用缓存
VPAGE_PROT_IN_KNL = 0x20, //!< 内核中使用
};
#define VMA_ADDR_RESV 0x1 //!< flags 保留内存
#define VMA_ADDR_PAGE_FAULT_SIM 0x2 //!< page fault模拟使用mpu模拟该内存不能被栈使用
#define VMA_ADDR_PAGE_FAULT_DSCT 0x4 //!< 申请内存时按叶大小申请与映射
typedef union vma_addr
{
umword_t raw;
struct
{
#if IS_ENABLED(CONFIG_MMU)
umword_t prot : 8;
umword_t flags : 4;
#else
umword_t prot : 6;
umword_t flags : 3;
#endif
// umword_t resv : 2;
umword_t addr : (sizeof(void *) * 8 - CONFIG_PAGE_SHIFT);
};
} vma_addr_t;
static inline vma_addr_t vma_addr_create_raw(umword_t raw)
{
return (vma_addr_t){
.raw = raw,
};
}
static inline vma_addr_t vma_addr_create(uint8_t prot, uint8_t flags, umword_t addr)
{
return (vma_addr_t){
.prot = prot,
.flags = flags,
// .resv = 0,
.addr = addr >> CONFIG_PAGE_SHIFT,
};
}
msg_tag_t u_vmam_alloc(obj_handler_t obj, vma_addr_t addr, size_t size, addr_t paddr, addr_t *vaddr);
msg_tag_t u_vmam_grant(obj_handler_t obj, obj_handler_t dst_task_obj,
addr_t src_addr, addr_t dst_addr, size_t size);
msg_tag_t u_vmam_free(obj_handler_t obj, addr_t addr, size_t size);