3 #include <inc/syscall.h>
7 syscall(int num
, int check
, uint32_t a1
, uint32_t a2
, uint32_t a3
, uint32_t a4
, uint32_t a5
)
11 // Generic system call: pass system call number in AX,
12 // up to five parameters in DX, CX, BX, DI, SI.
13 // Interrupt kernel with T_SYSCALL.
15 // The "volatile" tells the assembler not to optimize
16 // this instruction away just because we don't use the
19 // The last clause tells the assembler that this can
20 // potentially change the condition codes and arbitrary
23 asm volatile("int %1\n"
35 panic("syscall %d returned %d (> 0)", num
, ret
);
41 sys_cputs(const char *s
, size_t len
)
43 syscall(SYS_cputs
, 0, (uint32_t)s
, len
, 0, 0, 0);
49 return syscall(SYS_cgetc
, 0, 0, 0, 0, 0, 0);
53 sys_env_destroy(envid_t envid
)
55 return syscall(SYS_env_destroy
, 1, envid
, 0, 0, 0, 0);
61 return syscall(SYS_getenvid
, 0, 0, 0, 0, 0, 0);
67 syscall(SYS_yield
, 0, 0, 0, 0, 0, 0);
71 sys_page_alloc(envid_t envid
, void *va
, int perm
)
73 return syscall(SYS_page_alloc
, 1, envid
, (uint32_t) va
, perm
, 0, 0);
77 sys_page_map(envid_t srcenv
, void *srcva
, envid_t dstenv
, void *dstva
, int perm
)
79 return syscall(SYS_page_map
, 1, srcenv
, (uint32_t) srcva
, dstenv
, (uint32_t) dstva
, perm
);
83 sys_page_unmap(envid_t envid
, void *va
)
85 return syscall(SYS_page_unmap
, 1, envid
, (uint32_t) va
, 0, 0, 0);
88 // sys_exofork is inlined in lib.h
91 sys_env_set_status(envid_t envid
, int status
)
93 return syscall(SYS_env_set_status
, 1, envid
, status
, 0, 0, 0);
97 sys_env_set_trapframe(envid_t envid
, struct Trapframe
*tf
)
99 return syscall(SYS_env_set_trapframe
, 1, envid
, (uint32_t) tf
, 0, 0, 0);
103 sys_env_set_pgfault_upcall(envid_t envid
, void *upcall
)
105 return syscall(SYS_env_set_pgfault_upcall
, 1, envid
, (uint32_t) upcall
, 0, 0, 0);
109 sys_ipc_try_send(envid_t envid
, uint32_t value
, void *srcva
, int perm
)
111 return syscall(SYS_ipc_try_send
, 0, envid
, value
, (uint32_t) srcva
, perm
, 0);
115 sys_ipc_recv(void *dstva
)
117 return syscall(SYS_ipc_recv
, 1, (uint32_t)dstva
, 0, 0, 0, 0);
121 sys_phy_page(envid_t envid
, void *va
)
123 return syscall(SYS_phy_page
, 0, (uint32_t)envid
, (uint32_t)va
, 0, 0, 0);