56 lines
1.8 KiB
Zig
56 lines
1.8 KiB
Zig
const abi = @import("abi");
|
|
|
|
pub const syscall = struct {
|
|
pub fn send(handle: u32, msg: *const [5]usize) usize {
|
|
return asm volatile ("svc #0"
|
|
: [result] "={x0}" (-> usize),
|
|
: [a0] "{x0}" (handle),
|
|
[a1] "{x1}" (msg[0]),
|
|
[a2] "{x2}" (msg[1]),
|
|
[a3] "{x3}" (msg[2]),
|
|
[a4] "{x4}" (msg[3]),
|
|
[a5] "{x5}" (msg[4]),
|
|
[func] "{x8}" (@intFromEnum(abi.SyscallNumber.SYS_send)),
|
|
: "memory"
|
|
);
|
|
}
|
|
|
|
pub fn sendrecv(handle: u32, msg: *const[5]usize, buffer: *[5]usize) usize {
|
|
return asm volatile (
|
|
\\ svc #0
|
|
\\ stp x1, x2, [%[buf], #16 * 0]
|
|
\\ stp x3, x4, [%[buf], #16 * 1]
|
|
\\ str x5, [%[buf], #16 * 2]
|
|
: [result] "={x0}" (-> usize),
|
|
: [a0] "{x0}" (handle),
|
|
[a1] "{x1}" (msg[0]),
|
|
[a2] "{x2}" (msg[1]),
|
|
[a3] "{x3}" (msg[2]),
|
|
[a4] "{x4}" (msg[3]),
|
|
[a5] "{x5}" (msg[4]),
|
|
[func] "{x8}" (@intFromEnum(abi.SyscallNumber.SYS_sendrecv)),
|
|
[buf] "r" (buffer),
|
|
: "memory"
|
|
);
|
|
}
|
|
|
|
// pub fn syscall1(func: abi.SyscallNumber, arg0: usize) usize {
|
|
// return asm volatile ("svc #0"
|
|
// : [result] "={x0}" (-> usize),
|
|
// : [arg0] "{x0}" (arg0),
|
|
// [func] "{x8}" (@intFromEnum(func)),
|
|
// : "memory"
|
|
// );
|
|
// }
|
|
|
|
// pub fn syscall2(func: abi.SyscallNumber, arg0: usize, arg1: usize) usize {
|
|
// return asm volatile ("svc #0"
|
|
// : [result] "={x0}" (-> usize),
|
|
// : [arg0] "{x0}" (arg0),
|
|
// [arg1] "{x1}" (arg1),
|
|
// [func] "{x8}" (@intFromEnum(func)),
|
|
// : "memory"
|
|
// );
|
|
// }
|
|
};
|