SendMessage destination + ReceiveMessage source

This commit is contained in:
Mark Poliakov 2023-12-28 22:33:54 +02:00
parent 7a73cd8ff3
commit 3d6408a3cd
2 changed files with 19 additions and 9 deletions

View File

@ -22,9 +22,9 @@ pub mod io {
//! I/O data structures
pub use abi::io::{
DeviceRequest, DirectoryEntry, FileAttr, FileMode, FileType, MountOptions, OpenOptions,
PollControl, RawFd, SeekFrom, TerminalInputOptions, TerminalLineOptions, TerminalOptions,
TerminalOutputOptions, UnmountOptions,
DeviceRequest, DirectoryEntry, FileAttr, FileMode, FileType, MessageDestination,
MountOptions, OpenOptions, PollControl, RawFd, SeekFrom, TerminalInputOptions,
TerminalLineOptions, TerminalOptions, TerminalOutputOptions, UnmountOptions,
};
}

View File

@ -5,8 +5,8 @@ use core::{mem::MaybeUninit, sync::atomic::AtomicU32, time::Duration};
use abi::{
error::{Error, SyscallResult},
io::{
DeviceRequest, DirectoryEntry, FileAttr, FileMode, MountOptions, OpenOptions, PollControl,
RawFd, SeekFrom, UnmountOptions,
DeviceRequest, DirectoryEntry, FileAttr, FileMode, MessageDestination, MountOptions,
OpenOptions, PollControl, RawFd, SeekFrom, UnmountOptions,
},
mem::MappingSource,
process::{
@ -565,12 +565,17 @@ pub unsafe fn open_channel(name: &str, with_sub: bool) -> Result<RawFd, Error> {
/// # Safety
///
/// Unsafe: direct system call.
pub unsafe fn send_message(fd: RawFd, msg: &[u8]) -> Result<(), Error> {
pub unsafe fn send_message(
fd: RawFd,
msg: &[u8],
destination: MessageDestination,
) -> Result<(), Error> {
<()>::from_syscall_result(syscall!(
SyscallFunction::SendMessage,
argn!(fd.0 as usize),
argp!(msg.as_ptr()),
argn!(msg.len())
argn!(msg.len()),
argn!(u64::from(destination) as usize)
))
}
@ -579,11 +584,16 @@ pub unsafe fn send_message(fd: RawFd, msg: &[u8]) -> Result<(), Error> {
/// # Safety
///
/// Unsafe: direct system call.
pub unsafe fn receive_message(fd: RawFd, msg: &mut [u8]) -> Result<usize, Error> {
pub unsafe fn receive_message(
fd: RawFd,
msg: &mut [u8],
from: &mut MaybeUninit<u32>,
) -> Result<usize, Error> {
usize::from_syscall_result(syscall!(
SyscallFunction::ReceiveMessage,
argn!(fd.0 as usize),
argp!(msg.as_mut_ptr()),
argn!(msg.len())
argn!(msg.len()),
argp!(from as *mut _)
))
}