xen/core/
memory_access.rs1use xen_sys::{
2 xenmem_access_t_XENMEM_access_default, xenmem_access_t_XENMEM_access_n,
3 xenmem_access_t_XENMEM_access_n2rwx, xenmem_access_t_XENMEM_access_r,
4 xenmem_access_t_XENMEM_access_r_pw, xenmem_access_t_XENMEM_access_rw,
5 xenmem_access_t_XENMEM_access_rwx, xenmem_access_t_XENMEM_access_rx,
6 xenmem_access_t_XENMEM_access_rx2rw, xenmem_access_t_XENMEM_access_w,
7 xenmem_access_t_XENMEM_access_wx, xenmem_access_t_XENMEM_access_x,
8};
9
10bitflags::bitflags! {
11 #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
12 pub struct MemoryAccess: u8 {
13 const NONE = xenmem_access_t_XENMEM_access_n as u8; const R = xenmem_access_t_XENMEM_access_r as u8; const W = xenmem_access_t_XENMEM_access_w as u8; const X = xenmem_access_t_XENMEM_access_x as u8; const RW = xenmem_access_t_XENMEM_access_rw as u8; const WX = xenmem_access_t_XENMEM_access_wx as u8; const RX = xenmem_access_t_XENMEM_access_rx as u8; const RWX = xenmem_access_t_XENMEM_access_rwx as u8; const RX2RW = xenmem_access_t_XENMEM_access_rx2rw as u8;
23 const N2RWX = xenmem_access_t_XENMEM_access_n2rwx as u8;
24 const R_PW = xenmem_access_t_XENMEM_access_r_pw as u8;
25
26 const DEFAULT = xenmem_access_t_XENMEM_access_default as u8;
27 }
28}
29
30impl std::fmt::Display for MemoryAccess {
31 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
32 let mut result = [b'-'; 3];
33
34 if self.contains(MemoryAccess::R) {
35 result[0] = b'r';
36 }
37 if self.contains(MemoryAccess::W) {
38 result[1] = b'w';
39 }
40 if self.contains(MemoryAccess::X) {
41 result[2] = b'x';
42 }
43
44 f.write_str(unsafe { std::str::from_utf8_unchecked(&result) })
46 }
47}