subscribeIRQ support
This commit is contained in:
parent
9b7e4b535c
commit
681c62941e
|
@ -38,13 +38,15 @@ pub const Service = struct {
|
|||
//// Syscall numbers ////
|
||||
///////////////////////////
|
||||
|
||||
pub const Syscall = enum {
|
||||
pub const Syscall = enum(usize) {
|
||||
exit = 0,
|
||||
createPort = 1,
|
||||
send = 2,
|
||||
receive = 3,
|
||||
map = 4,
|
||||
createThread = 5,
|
||||
subscribeIRQ = 4,
|
||||
inb = 5,
|
||||
map = 6,
|
||||
createThread = 7,
|
||||
};
|
||||
|
||||
|
||||
|
@ -69,6 +71,14 @@ pub fn receive(destination: &Message) void {
|
|||
_ = syscall1(Syscall.receive, @ptrToInt(destination));
|
||||
}
|
||||
|
||||
pub fn subscribeIRQ(irq: u8, mailbox_id: &const MailboxId) void {
|
||||
_ = syscall2(Syscall.subscribeIRQ, irq, @ptrToInt(mailbox_id));
|
||||
}
|
||||
|
||||
pub fn inb(port: u16) u8 {
|
||||
return u8(syscall1(Syscall.inb, port));
|
||||
}
|
||||
|
||||
pub fn map(v_addr: usize, p_addr: usize, size: usize, writable: bool) bool {
|
||||
return syscall4(Syscall.map, v_addr, p_addr, size, usize(writable)) != 0;
|
||||
}
|
||||
|
@ -82,20 +92,20 @@ pub fn createThread(function: fn()void) u16 {
|
|||
//// Syscall stubs ////
|
||||
/////////////////////////
|
||||
|
||||
inline fn syscall0(number: usize) usize {
|
||||
inline fn syscall0(number: Syscall) usize {
|
||||
return asm volatile ("int $0x80"
|
||||
: [ret] "={eax}" (-> usize)
|
||||
: [number] "{eax}" (number));
|
||||
}
|
||||
|
||||
inline fn syscall1(number: usize, arg1: usize) usize {
|
||||
inline fn syscall1(number: Syscall, arg1: usize) usize {
|
||||
return asm volatile ("int $0x80"
|
||||
: [ret] "={eax}" (-> usize)
|
||||
: [number] "{eax}" (number),
|
||||
[arg1] "{ecx}" (arg1));
|
||||
}
|
||||
|
||||
inline fn syscall2(number: usize, arg1: usize, arg2: usize) usize {
|
||||
inline fn syscall2(number: Syscall, arg1: usize, arg2: usize) usize {
|
||||
return asm volatile ("int $0x80"
|
||||
: [ret] "={eax}" (-> usize)
|
||||
: [number] "{eax}" (number),
|
||||
|
@ -103,7 +113,7 @@ inline fn syscall2(number: usize, arg1: usize, arg2: usize) usize {
|
|||
[arg2] "{edx}" (arg2));
|
||||
}
|
||||
|
||||
inline fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
|
||||
inline fn syscall3(number: Syscall, arg1: usize, arg2: usize, arg3: usize) usize {
|
||||
return asm volatile ("int $0x80"
|
||||
: [ret] "={eax}" (-> usize)
|
||||
: [number] "{eax}" (number),
|
||||
|
@ -112,7 +122,7 @@ inline fn syscall3(number: usize, arg1: usize, arg2: usize, arg3: usize) usize {
|
|||
[arg3] "{ebx}" (arg3));
|
||||
}
|
||||
|
||||
inline fn syscall4(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
|
||||
inline fn syscall4(number: Syscall, arg1: usize, arg2: usize, arg3: usize, arg4: usize) usize {
|
||||
return asm volatile ("int $0x80"
|
||||
: [ret] "={eax}" (-> usize)
|
||||
: [number] "{eax}" (number),
|
||||
|
@ -122,7 +132,7 @@ inline fn syscall4(number: usize, arg1: usize, arg2: usize, arg3: usize, arg4: u
|
|||
[arg4] "{esi}" (arg4));
|
||||
}
|
||||
|
||||
inline fn syscall5(number: usize, arg1: usize, arg2: usize, arg3: usize,
|
||||
inline fn syscall5(number: Syscall, arg1: usize, arg2: usize, arg3: usize,
|
||||
arg4: usize, arg5: usize) usize
|
||||
{
|
||||
return asm volatile ("int $0x80"
|
||||
|
@ -135,7 +145,7 @@ inline fn syscall5(number: usize, arg1: usize, arg2: usize, arg3: usize,
|
|||
[arg5] "{edi}" (arg5));
|
||||
}
|
||||
|
||||
inline fn syscall6(number: usize, arg1: usize, arg2: usize, arg3: usize,
|
||||
inline fn syscall6(number: Syscall, arg1: usize, arg2: usize, arg3: usize,
|
||||
arg4: usize, arg5: usize, arg6: usize) usize
|
||||
{
|
||||
return asm volatile ("int $0x80"
|
||||
|
|
Loading…
Reference in New Issue
Block a user