devmgr/
lib.rs

1use twizzler::{
2    collections::vec::{VecObject, VecObjectAlloc},
3    marker::Invariant,
4    object::Object,
5};
6use twizzler_rt_abi::{
7    error::TwzError,
8    object::{MapFlags, ObjID},
9};
10
11#[repr(C)]
12#[derive(Clone, Copy, Debug)]
13pub struct DriverSpec {
14    pub supported: Supported,
15}
16
17#[repr(C)]
18#[derive(Clone, Copy, Debug)]
19pub enum Supported {
20    PcieClass(u8, u8, u8),
21    Vendor(u16, u16),
22}
23
24#[repr(C)]
25#[derive(Clone, Copy, Debug)]
26pub struct OwnedDevice {
27    pub id: ObjID,
28}
29
30unsafe impl Invariant for OwnedDevice {}
31
32#[secgate::gatecall]
33pub fn devmgr_start() -> Result<(), TwzError> {}
34
35#[secgate::gatecall]
36pub fn get_devices(spec: DriverSpec) -> Result<ObjID, TwzError> {}
37
38pub fn enumerate_devices(
39    spec: DriverSpec,
40) -> Result<VecObject<OwnedDevice, VecObjectAlloc>, TwzError> {
41    let id = get_devices(spec)?;
42    Ok(VecObject::from(Object::map(id, MapFlags::READ)?))
43}