aboutsummaryrefslogtreecommitdiff
path: root/common/uapi
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-01-26 15:53:16 +0200
committerKimplul <kimi.h.kuparinen@gmail.com>2023-01-26 15:53:16 +0200
commit8a5e4cf53d981e793fca90d9b51bd395265cf4db (patch)
tree245aabe14f45aa717f4f3156bdcfc1afb0388131 /common/uapi
parent5dad7c7ecccaa1e11be23f53e3198af6933c9f60 (diff)
downloadkmi-8a5e4cf53d981e793fca90d9b51bd395265cf4db.tar.gz
kmi-8a5e4cf53d981e793fca90d9b51bd395265cf4db.zip
add req_page syscall
Diffstat (limited to 'common/uapi')
-rw-r--r--common/uapi/dispatch.c1
-rw-r--r--common/uapi/mem.c19
2 files changed, 20 insertions, 0 deletions
diff --git a/common/uapi/dispatch.c b/common/uapi/dispatch.c
index d11e02e..b5cd51e 100644
--- a/common/uapi/dispatch.c
+++ b/common/uapi/dispatch.c
@@ -51,6 +51,7 @@ void handle_syscall(sys_arg_t syscall, sys_arg_t a, sys_arg_t b,
case SYS_NOOP: sys_noop(t, a, b, c, d, e); break;
case SYS_PUTCH: sys_putch(t, a, b, c, d, e); break;
case SYS_REQ_MEM: sys_req_mem(t, a, b, c, d, e); break;
+ case SYS_REQ_PAGE: sys_req_page(t, a, b, c, d, e); break;
case SYS_REQ_PMEM: sys_req_pmem(t, a, b, c, d, e); break;
case SYS_REQ_FIXMEM: sys_req_fixmem(t, a, b, c, d, e); break;
case SYS_REQ_SHAREDMEM: sys_req_sharedmem(t, a, b, c, d, e); break;
diff --git a/common/uapi/mem.c b/common/uapi/mem.c
index 099028e..41ebcca 100644
--- a/common/uapi/mem.c
+++ b/common/uapi/mem.c
@@ -33,6 +33,25 @@ SYSCALL_DEFINE2(req_mem)(struct tcb *t, sys_arg_t size, sys_arg_t flags)
}
/**
+ * Allocate single page to program.
+ *
+ * @param t Current tcb.
+ * @param size Size of the allocation.
+ * @param flags Flags of allocation.
+ * @return \ref ERR_OOMEM if unsucessful, otherwise \ref OK, virtual address,
+ * actual size, physical address, in that order.
+ */
+SYSCALL_DEFINE2(req_page)(struct tcb *t, sys_arg_t size, sys_arg_t flags)
+{
+ struct tcb *r = get_cproc(t);
+ vm_t start = 0; pm_t paddr = 0; size_t asize = size;
+ if (!(start = alloc_uvpage(r, asize, flags, &asize, &paddr)))
+ return_args(t, SYS_RET1(ERR_OOMEM));
+
+ return_args(t, SYS_RET4(OK, start, asize, paddr));
+}
+
+/**
* Fixed memory request syscall handler.
*
* @param t Current tcb.