sel4_shared_memory/
ops.rs

1//
2// Copyright 2024, Colias Group, LLC
3//
4// SPDX-License-Identifier: MIT OR Apache-2.0
5//
6
7use core::ptr;
8
9use zerocopy::{FromBytes, IntoBytes};
10
11use sel4_abstract_ptr::memory_type::{BulkOps, UnitaryOps};
12
13use crate::SharedMemory;
14
15impl<T: FromBytes + IntoBytes> UnitaryOps<T> for SharedMemory {
16    unsafe fn read(src: *const T) -> T {
17        unsafe { ptr::read(src) }
18    }
19
20    unsafe fn write(dst: *mut T, src: T) {
21        unsafe { ptr::write(dst, src) }
22    }
23}
24
25impl<T: FromBytes + IntoBytes> BulkOps<T> for SharedMemory {
26    unsafe fn memmove(dst: *mut T, src: *const T, count: usize) {
27        unsafe { ptr::copy(src, dst, count) }
28    }
29
30    unsafe fn memcpy_into(dst: *mut T, src: *const T, count: usize) {
31        unsafe { ptr::copy_nonoverlapping(src, dst, count) }
32    }
33
34    unsafe fn memcpy_from(dst: *mut T, src: *const T, count: usize) {
35        unsafe { ptr::copy_nonoverlapping(src, dst, count) }
36    }
37
38    unsafe fn memset(dst: *mut T, val: u8, count: usize) {
39        unsafe { ptr::write_bytes(dst, val, count) }
40    }
41}