sel4-sys: riscv32 seL4_Recv & seL4_ReplyRecv cleanups

Use separate in+out variables instead of a single r/w variable.
This makes all simular code paths consistent.

Change-Id: I0b78e9cdac881db775b6d08ba1051ebc3f0b096d
GitOrigin-RevId: e12735b6c9c7aba49f60327328baaa6a7fcc7519
This commit is contained in:
Sam Leffler 2022-09-22 00:43:40 +00:00
parent d25dffb3dd
commit 48c3e88004
2 changed files with 20 additions and 15 deletions

View File

@ -13,11 +13,12 @@ assert_cfg!(feature = "CONFIG_KERNEL_MCS");
#[inline(always)]
pub unsafe fn seL4_Recv(
mut src: seL4_CPtr,
src: seL4_CPtr,
sender: *mut seL4_Word,
reply: seL4_CPtr,
) -> seL4_MessageInfo {
let mut info: seL4_Word;
let mut badge: seL4_Word;
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg2 = ::core::mem::MaybeUninit::uninit().assume_init();
@ -25,7 +26,7 @@ pub unsafe fn seL4_Recv(
asm!("ecall",
in("a7") swinum!(SyscallId::Recv),
inout("a0") src,
inout("a0") src => badge,
out("a1") info,
out("a2") msg0,
out("a3") msg1,
@ -39,7 +40,7 @@ pub unsafe fn seL4_Recv(
seL4_SetMR(2, msg2);
seL4_SetMR(3, msg3);
opt_assign!(sender, src);
opt_assign!(sender, badge);
seL4_MessageInfo { words: [info] }
}
@ -353,12 +354,13 @@ pub unsafe fn seL4_NBSendWaitWithMRs(
#[inline(always)]
pub unsafe fn seL4_ReplyRecv(
mut src: seL4_CPtr,
src: seL4_CPtr,
msgInfo: seL4_MessageInfo,
sender: *mut seL4_Word,
reply: seL4_CPtr,
) -> seL4_MessageInfo {
let mut info: seL4_Word;
let mut badge: seL4_Word;
let mut msg0 = seL4_GetMR(0);
let mut msg1 = seL4_GetMR(1);
let mut msg2 = seL4_GetMR(2);
@ -366,7 +368,7 @@ pub unsafe fn seL4_ReplyRecv(
asm!("ecall",
in("a7") swinum!(SyscallId::ReplyRecv),
inout("a0") src,
inout("a0") src => badge,
inout("a1") msgInfo.words[0] => info,
inout("a2") msg0,
inout("a3") msg1,
@ -380,7 +382,7 @@ pub unsafe fn seL4_ReplyRecv(
seL4_SetMR(2, msg2);
seL4_SetMR(3, msg3);
opt_assign!(sender, src);
opt_assign!(sender, badge);
seL4_MessageInfo { words: [info] }
}

View File

@ -60,8 +60,9 @@ pub unsafe fn seL4_ReplyWithMRs(
}
#[inline(always)]
pub unsafe fn seL4_Recv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {
pub unsafe fn seL4_Recv(src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {
let mut info: seL4_Word;
let mut badge: seL4_Word;
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg2 = ::core::mem::MaybeUninit::uninit().assume_init();
@ -69,7 +70,7 @@ pub unsafe fn seL4_Recv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_Mess
asm!("ecall",
in("a7") swinum!(SyscallId::Recv),
inout("a0") src,
inout("a0") src => badge,
out("a1") info,
out("a2") msg0,
out("a3") msg1,
@ -82,14 +83,15 @@ pub unsafe fn seL4_Recv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_Mess
seL4_SetMR(2, msg2);
seL4_SetMR(3, msg3);
opt_assign!(sender, src);
opt_assign!(sender, badge);
seL4_MessageInfo { words: [info] }
}
#[inline(always)]
pub unsafe fn seL4_NBRecv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {
pub unsafe fn seL4_NBRecv(src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_MessageInfo {
let mut info: seL4_Word;
let mut badge: seL4_Word;
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
let mut msg2 = ::core::mem::MaybeUninit::uninit().assume_init();
@ -97,7 +99,7 @@ pub unsafe fn seL4_NBRecv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_Me
asm!("ecall",
in("a7") swinum!(SyscallId::NBRecv),
inout("a0") src,
inout("a0") src => badge,
out("a1") info,
out("a2") msg0,
out("a3") msg1,
@ -110,18 +112,19 @@ pub unsafe fn seL4_NBRecv(mut src: seL4_CPtr, sender: *mut seL4_Word) -> seL4_Me
seL4_SetMR(2, msg2);
seL4_SetMR(3, msg3);
opt_assign!(sender, src);
opt_assign!(sender, badge);
seL4_MessageInfo { words: [info] }
}
#[inline(always)]
pub unsafe fn seL4_ReplyRecv(
mut src: seL4_CPtr,
src: seL4_CPtr,
msgInfo: seL4_MessageInfo,
sender: *mut seL4_Word,
) -> seL4_MessageInfo {
let mut info: seL4_Word;
let mut badge: seL4_Word;
let mut msg0 = seL4_GetMR(0);
let mut msg1 = seL4_GetMR(1);
let mut msg2 = seL4_GetMR(2);
@ -129,7 +132,7 @@ pub unsafe fn seL4_ReplyRecv(
asm!("ecall",
in("a7") swinum!(SyscallId::ReplyRecv),
inout("a0") src,
inout("a0") src => badge,
inout("a1") msgInfo.words[0] => info,
inout("a2") msg0,
inout("a3") msg1,
@ -142,7 +145,7 @@ pub unsafe fn seL4_ReplyRecv(
seL4_SetMR(2, msg2);
seL4_SetMR(3, msg3);
opt_assign!(sender, src);
opt_assign!(sender, badge);
seL4_MessageInfo { words: [info] }
}