Support mmap with customized attr.
This commit is contained in:
@@ -128,8 +128,12 @@ uintptr_t get_tick()
|
||||
|
||||
uintptr_t mmap(uintptr_t vaddr, uintptr_t paddr, int len, bool is_dev)
|
||||
{
|
||||
sys_mmap_info info = {
|
||||
.type = SYS_MMAP_NORMAL,
|
||||
.is_dev = is_dev,
|
||||
};
|
||||
uintptr_t vaddr_inner = vaddr, paddr_inner = paddr;
|
||||
if (syscall(SYSCALL_MMAP, (intptr_t)&vaddr_inner, (intptr_t)&paddr_inner, (intptr_t)len, (intptr_t)is_dev) < 0) {
|
||||
if (syscall(SYSCALL_MMAP, (intptr_t)&vaddr_inner, (intptr_t)&paddr_inner, (intptr_t)len, (intptr_t)&info) < 0) {
|
||||
return (uintptr_t)NULL;
|
||||
}
|
||||
return vaddr_inner;
|
||||
@@ -137,7 +141,20 @@ uintptr_t mmap(uintptr_t vaddr, uintptr_t paddr, int len, bool is_dev)
|
||||
|
||||
int naive_mmap(uintptr_t* vaddr, uintptr_t* paddr, int len, bool is_dev)
|
||||
{
|
||||
return syscall(SYSCALL_MMAP, (uintptr_t)vaddr, (intptr_t)paddr, (intptr_t)len, (intptr_t)is_dev);
|
||||
sys_mmap_info info = {
|
||||
.type = SYS_MMAP_NORMAL,
|
||||
.is_dev = is_dev,
|
||||
};
|
||||
return syscall(SYSCALL_MMAP, (uintptr_t)vaddr, (intptr_t)paddr, (intptr_t)len, (intptr_t)&info);
|
||||
}
|
||||
|
||||
int mmap_with_attr(uintptr_t vaddr, uintptr_t paddr, int len, uintptr_t attr)
|
||||
{
|
||||
sys_mmap_info info = {
|
||||
.type = SYS_MMAP_CUSTOMIZE,
|
||||
.attr = attr,
|
||||
};
|
||||
return syscall(SYSCALL_MMAP, (intptr_t)vaddr, (intptr_t)paddr, (intptr_t)len, (intptr_t)&info);
|
||||
}
|
||||
|
||||
int register_irq(int irq, int opcode)
|
||||
|
||||
@@ -58,6 +58,17 @@ typedef enum {
|
||||
SYS_TASK_YIELD_BLOCK_IPC = 0x2,
|
||||
} task_yield_reason;
|
||||
|
||||
typedef enum {
|
||||
SYS_MMAP_NORMAL = 0x0,
|
||||
SYS_MMAP_CUSTOMIZE,
|
||||
} sys_mmap_type;
|
||||
|
||||
typedef struct sys_mmap_info {
|
||||
sys_mmap_type type;
|
||||
uintptr_t attr;
|
||||
bool is_dev;
|
||||
} sys_mmap_info;
|
||||
|
||||
typedef union {
|
||||
struct {
|
||||
uintptr_t memblock_start;
|
||||
@@ -96,6 +107,7 @@ int register_irq(int irq, int opcode);
|
||||
|
||||
uintptr_t mmap(uintptr_t vaddr, uintptr_t paddr, int len, bool is_dev);
|
||||
int naive_mmap(uintptr_t* vaddr, uintptr_t* paddr, int len, bool is_dev);
|
||||
int customized_mmap(uintptr_t vaddr, uintptr_t paddr, int len, uintptr_t attr);
|
||||
|
||||
int task_heap_base();
|
||||
int get_memblock_info(sys_state_info* info);
|
||||
|
||||
Reference in New Issue
Block a user