uefi_raw/protocol/usb/
mod.rs1use core::ffi;
4
5use bitflags::bitflags;
6
7use crate::{Status, newtype_enum};
8
9pub mod host_controller;
10pub mod io;
11
12newtype_enum! {
13 pub enum DataDirection: i32 => {
14 DATA_IN = 0,
15 DATA_OUT = 1,
16 NO_DATA = 2,
17 }
18}
19
20#[derive(Clone, Copy, Debug, PartialEq, Eq)]
21#[repr(C)]
22pub struct DeviceRequest {
23 pub request_type: u8,
24 pub request: u8,
25 pub value: u16,
26 pub index: u16,
27 pub length: u16,
28}
29
30bitflags! {
31 #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
32 #[repr(transparent)]
33 pub struct UsbTransferStatus: u32 {
34 const NOT_EXECUTE = 0x0001;
35 const STALL = 0x0002;
36 const BUFFER = 0x0004;
37 const BABBLE = 0x0008;
38 const NAK = 0x0010;
39 const CRC = 0x0020;
40 const TIMEOUT = 0x0040;
41 const BIT_STUFF = 0x0080;
42 const SYSTEM = 0x0100;
43 }
44}
45
46impl UsbTransferStatus {
47 pub const SUCCESS: Self = Self::empty();
48}
49
50pub type AsyncUsbTransferCallback = unsafe extern "efiapi" fn(
51 data: *mut ffi::c_void,
52 data_length: usize,
53 context: *mut ffi::c_void,
54 status: UsbTransferStatus,
55) -> Status;
56
57#[derive(Clone, Copy, Debug, PartialEq, Eq)]
58#[repr(C)]
59pub struct DeviceDescriptor {
60 pub length: u8,
61 pub descriptor_type: u8,
62 pub bcd_usb: u16,
63 pub device_class: u8,
64 pub device_subclass: u8,
65 pub device_protocol: u8,
66 pub max_packet_size: u8,
67 pub id_vendor: u16,
68 pub id_product: u16,
69 pub bcd_device: u16,
70 pub str_manufacturer: u8,
71 pub str_product: u8,
72 pub str_serial_number: u8,
73 pub num_configurations: u8,
74}
75
76#[derive(Clone, Copy, Debug, PartialEq, Eq)]
77#[repr(C)]
78pub struct ConfigDescriptor {
79 pub length: u8,
80 pub descriptor_type: u8,
81 pub total_length: u16,
82 pub num_interfaces: u8,
83 pub configuration_value: u8,
84 pub configuration: u8,
85 pub attributes: u8,
86 pub max_power: u8,
87}
88
89#[derive(Clone, Copy, Debug, PartialEq, Eq)]
90#[repr(C)]
91pub struct InterfaceDescriptor {
92 pub length: u8,
93 pub descriptor_type: u8,
94 pub interface_number: u8,
95 pub alternate_setting: u8,
96 pub num_endpoints: u8,
97 pub interface_class: u8,
98 pub interface_subclass: u8,
99 pub interface_protocol: u8,
100 pub interface: u8,
101}
102
103#[derive(Clone, Copy, Debug, PartialEq, Eq)]
104#[repr(C)]
105pub struct EndpointDescriptor {
106 pub length: u8,
107 pub descriptor_type: u8,
108 pub endpoint_address: u8,
109 pub attributes: u8,
110 pub max_packet_size: u16,
111 pub interval: u8,
112}