mirror of
https://github.com/AmbiML/sparrow-kata-full.git
synced 2025-04-28 02:40:40 +00:00
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:
parent
d25dffb3dd
commit
48c3e88004
@ -13,11 +13,12 @@ assert_cfg!(feature = "CONFIG_KERNEL_MCS");
|
|||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub unsafe fn seL4_Recv(
|
pub unsafe fn seL4_Recv(
|
||||||
mut src: seL4_CPtr,
|
src: seL4_CPtr,
|
||||||
sender: *mut seL4_Word,
|
sender: *mut seL4_Word,
|
||||||
reply: seL4_CPtr,
|
reply: seL4_CPtr,
|
||||||
) -> seL4_MessageInfo {
|
) -> seL4_MessageInfo {
|
||||||
let mut info: seL4_Word;
|
let mut info: seL4_Word;
|
||||||
|
let mut badge: seL4_Word;
|
||||||
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg2 = ::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",
|
asm!("ecall",
|
||||||
in("a7") swinum!(SyscallId::Recv),
|
in("a7") swinum!(SyscallId::Recv),
|
||||||
inout("a0") src,
|
inout("a0") src => badge,
|
||||||
out("a1") info,
|
out("a1") info,
|
||||||
out("a2") msg0,
|
out("a2") msg0,
|
||||||
out("a3") msg1,
|
out("a3") msg1,
|
||||||
@ -39,7 +40,7 @@ pub unsafe fn seL4_Recv(
|
|||||||
seL4_SetMR(2, msg2);
|
seL4_SetMR(2, msg2);
|
||||||
seL4_SetMR(3, msg3);
|
seL4_SetMR(3, msg3);
|
||||||
|
|
||||||
opt_assign!(sender, src);
|
opt_assign!(sender, badge);
|
||||||
|
|
||||||
seL4_MessageInfo { words: [info] }
|
seL4_MessageInfo { words: [info] }
|
||||||
}
|
}
|
||||||
@ -353,12 +354,13 @@ pub unsafe fn seL4_NBSendWaitWithMRs(
|
|||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub unsafe fn seL4_ReplyRecv(
|
pub unsafe fn seL4_ReplyRecv(
|
||||||
mut src: seL4_CPtr,
|
src: seL4_CPtr,
|
||||||
msgInfo: seL4_MessageInfo,
|
msgInfo: seL4_MessageInfo,
|
||||||
sender: *mut seL4_Word,
|
sender: *mut seL4_Word,
|
||||||
reply: seL4_CPtr,
|
reply: seL4_CPtr,
|
||||||
) -> seL4_MessageInfo {
|
) -> seL4_MessageInfo {
|
||||||
let mut info: seL4_Word;
|
let mut info: seL4_Word;
|
||||||
|
let mut badge: seL4_Word;
|
||||||
let mut msg0 = seL4_GetMR(0);
|
let mut msg0 = seL4_GetMR(0);
|
||||||
let mut msg1 = seL4_GetMR(1);
|
let mut msg1 = seL4_GetMR(1);
|
||||||
let mut msg2 = seL4_GetMR(2);
|
let mut msg2 = seL4_GetMR(2);
|
||||||
@ -366,7 +368,7 @@ pub unsafe fn seL4_ReplyRecv(
|
|||||||
|
|
||||||
asm!("ecall",
|
asm!("ecall",
|
||||||
in("a7") swinum!(SyscallId::ReplyRecv),
|
in("a7") swinum!(SyscallId::ReplyRecv),
|
||||||
inout("a0") src,
|
inout("a0") src => badge,
|
||||||
inout("a1") msgInfo.words[0] => info,
|
inout("a1") msgInfo.words[0] => info,
|
||||||
inout("a2") msg0,
|
inout("a2") msg0,
|
||||||
inout("a3") msg1,
|
inout("a3") msg1,
|
||||||
@ -380,7 +382,7 @@ pub unsafe fn seL4_ReplyRecv(
|
|||||||
seL4_SetMR(2, msg2);
|
seL4_SetMR(2, msg2);
|
||||||
seL4_SetMR(3, msg3);
|
seL4_SetMR(3, msg3);
|
||||||
|
|
||||||
opt_assign!(sender, src);
|
opt_assign!(sender, badge);
|
||||||
|
|
||||||
seL4_MessageInfo { words: [info] }
|
seL4_MessageInfo { words: [info] }
|
||||||
}
|
}
|
||||||
|
@ -60,8 +60,9 @@ pub unsafe fn seL4_ReplyWithMRs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[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 info: seL4_Word;
|
||||||
|
let mut badge: seL4_Word;
|
||||||
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg2 = ::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",
|
asm!("ecall",
|
||||||
in("a7") swinum!(SyscallId::Recv),
|
in("a7") swinum!(SyscallId::Recv),
|
||||||
inout("a0") src,
|
inout("a0") src => badge,
|
||||||
out("a1") info,
|
out("a1") info,
|
||||||
out("a2") msg0,
|
out("a2") msg0,
|
||||||
out("a3") msg1,
|
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(2, msg2);
|
||||||
seL4_SetMR(3, msg3);
|
seL4_SetMR(3, msg3);
|
||||||
|
|
||||||
opt_assign!(sender, src);
|
opt_assign!(sender, badge);
|
||||||
|
|
||||||
seL4_MessageInfo { words: [info] }
|
seL4_MessageInfo { words: [info] }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[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 info: seL4_Word;
|
||||||
|
let mut badge: seL4_Word;
|
||||||
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg0 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
let mut msg1 = ::core::mem::MaybeUninit::uninit().assume_init();
|
||||||
let mut msg2 = ::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",
|
asm!("ecall",
|
||||||
in("a7") swinum!(SyscallId::NBRecv),
|
in("a7") swinum!(SyscallId::NBRecv),
|
||||||
inout("a0") src,
|
inout("a0") src => badge,
|
||||||
out("a1") info,
|
out("a1") info,
|
||||||
out("a2") msg0,
|
out("a2") msg0,
|
||||||
out("a3") msg1,
|
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(2, msg2);
|
||||||
seL4_SetMR(3, msg3);
|
seL4_SetMR(3, msg3);
|
||||||
|
|
||||||
opt_assign!(sender, src);
|
opt_assign!(sender, badge);
|
||||||
|
|
||||||
seL4_MessageInfo { words: [info] }
|
seL4_MessageInfo { words: [info] }
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub unsafe fn seL4_ReplyRecv(
|
pub unsafe fn seL4_ReplyRecv(
|
||||||
mut src: seL4_CPtr,
|
src: seL4_CPtr,
|
||||||
msgInfo: seL4_MessageInfo,
|
msgInfo: seL4_MessageInfo,
|
||||||
sender: *mut seL4_Word,
|
sender: *mut seL4_Word,
|
||||||
) -> seL4_MessageInfo {
|
) -> seL4_MessageInfo {
|
||||||
let mut info: seL4_Word;
|
let mut info: seL4_Word;
|
||||||
|
let mut badge: seL4_Word;
|
||||||
let mut msg0 = seL4_GetMR(0);
|
let mut msg0 = seL4_GetMR(0);
|
||||||
let mut msg1 = seL4_GetMR(1);
|
let mut msg1 = seL4_GetMR(1);
|
||||||
let mut msg2 = seL4_GetMR(2);
|
let mut msg2 = seL4_GetMR(2);
|
||||||
@ -129,7 +132,7 @@ pub unsafe fn seL4_ReplyRecv(
|
|||||||
|
|
||||||
asm!("ecall",
|
asm!("ecall",
|
||||||
in("a7") swinum!(SyscallId::ReplyRecv),
|
in("a7") swinum!(SyscallId::ReplyRecv),
|
||||||
inout("a0") src,
|
inout("a0") src => badge,
|
||||||
inout("a1") msgInfo.words[0] => info,
|
inout("a1") msgInfo.words[0] => info,
|
||||||
inout("a2") msg0,
|
inout("a2") msg0,
|
||||||
inout("a3") msg1,
|
inout("a3") msg1,
|
||||||
@ -142,7 +145,7 @@ pub unsafe fn seL4_ReplyRecv(
|
|||||||
seL4_SetMR(2, msg2);
|
seL4_SetMR(2, msg2);
|
||||||
seL4_SetMR(3, msg3);
|
seL4_SetMR(3, msg3);
|
||||||
|
|
||||||
opt_assign!(sender, src);
|
opt_assign!(sender, badge);
|
||||||
|
|
||||||
seL4_MessageInfo { words: [info] }
|
seL4_MessageInfo { words: [info] }
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user