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}