1pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
7 0xa19832b9,
8 0xac25,
9 0x11d3,
10 0x9a,
11 0x2d,
12 &[0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d],
13);
14
15pub const REVISION: u64 = 0x0000000000010000u64;
16
17pub const MAX_MCAST_FILTER_CNT: usize = 16;
18
19pub const RECEIVE_UNICAST: u32 = 0x00000001u32;
20pub const RECEIVE_MULTICAST: u32 = 0x00000002u32;
21pub const RECEIVE_BROADCAST: u32 = 0x00000004u32;
22pub const RECEIVE_PROMISCUOUS: u32 = 0x00000008u32;
23pub const RECEIVE_PROMISCUOUS_MULTICAST: u32 = 0x00000010u32;
24
25pub const RECEIVE_INTERRUPT: u32 = 0x00000001u32;
26pub const TRANSMIT_INTERRUPT: u32 = 0x00000002u32;
27pub const COMMAND_INTERRUPT: u32 = 0x00000004u32;
28pub const SOFTWARE_INTERRUPT: u32 = 0x000000008u32;
29
30#[repr(C)]
31#[derive(Clone, Copy, Debug)]
32pub struct Mode {
33 pub state: u32,
34 pub hw_address_size: u32,
35 pub media_header_size: u32,
36 pub max_packet_size: u32,
37 pub nvram_size: u32,
38 pub nvram_access_size: u32,
39 pub receive_filter_mask: u32,
40 pub receive_filter_setting: u32,
41 pub max_mcast_filter_count: u32,
42 pub mcast_filter_count: u32,
43 pub mcast_filter: [crate::base::MacAddress; MAX_MCAST_FILTER_CNT],
44 pub current_address: crate::base::MacAddress,
45 pub broadcast_address: crate::base::MacAddress,
46 pub permanent_address: crate::base::MacAddress,
47 pub if_type: u8,
48 pub mac_address_changeable: crate::base::Boolean,
49 pub multiple_tx_supported: crate::base::Boolean,
50 pub media_present_supported: crate::base::Boolean,
51 pub media_present: crate::base::Boolean,
52}
53
54pub type State = u32;
55
56pub const STOPPED: State = 0x00000000;
57pub const STARTED: State = 0x00000001;
58pub const INITIALIZED: State = 0x00000002;
59pub const MAX_STATE: State = 0x00000003;
60
61#[repr(C)]
62#[derive(Clone, Copy, Debug)]
63pub struct Statistics {
64 pub rx_total_frames: u64,
65 pub rx_good_frames: u64,
66 pub rx_undersize_frames: u64,
67 pub rx_oversize_frames: u64,
68 pub rx_dropped_frames: u64,
69 pub rx_unicast_frames: u64,
70 pub rx_broadcast_frames: u64,
71 pub rx_multicast_frames: u64,
72 pub rx_crc_error_frames: u64,
73 pub rx_total_bytes: u64,
74 pub tx_total_frames: u64,
75 pub tx_good_frames: u64,
76 pub tx_undersize_frames: u64,
77 pub tx_oversize_frames: u64,
78 pub tx_dropped_frames: u64,
79 pub tx_unicast_frames: u64,
80 pub tx_broadcast_frames: u64,
81 pub tx_multicast_frames: u64,
82 pub tx_crc_error_frames: u64,
83 pub tx_total_bytes: u64,
84 pub collisions: u64,
85 pub unsupported_protocol: u64,
86 pub rx_duplicated_frames: u64,
87 pub rx_decrypt_error_frames: u64,
88 pub tx_error_frames: u64,
89 pub tx_retry_frames: u64,
90}
91
92pub type ProtocolStart = eficall! {fn(
93 *mut Protocol,
94) -> crate::base::Status};
95
96pub type ProtocolStop = eficall! {fn(
97 *mut Protocol,
98) -> crate::base::Status};
99
100pub type ProtocolInitialize = eficall! {fn(
101 *mut Protocol,
102 usize,
103 usize,
104) -> crate::base::Status};
105
106pub type ProtocolReset = eficall! {fn(
107 *mut Protocol,
108 crate::base::Boolean,
109) -> crate::base::Status};
110
111pub type ProtocolShutdown = eficall! {fn(
112 *mut Protocol,
113) -> crate::base::Status};
114
115pub type ProtocolReceiveFilters = eficall! {fn(
116 *mut Protocol,
117 u32,
118 u32,
119 crate::base::Boolean,
120 usize,
121 *mut crate::base::MacAddress,
122) -> crate::base::Status};
123
124pub type ProtocolStationAddress = eficall! {fn(
125 *mut Protocol,
126 crate::base::Boolean,
127 *mut crate::base::MacAddress,
128) -> crate::base::Status};
129
130pub type ProtocolStatistics = eficall! {fn(
131 *mut Protocol,
132 crate::base::Boolean,
133 *mut usize,
134 *mut Statistics,
135) -> crate::base::Status};
136
137pub type ProtocolMcastIpToMac = eficall! {fn(
138 *mut Protocol,
139 crate::base::Boolean,
140 *mut crate::base::IpAddress,
141 *mut crate::base::MacAddress,
142) -> crate::base::Status};
143
144pub type ProtocolNvData = eficall! {fn(
145 *mut Protocol,
146 crate::base::Boolean,
147 usize,
148 usize,
149 *mut core::ffi::c_void,
150) -> crate::base::Status};
151
152pub type ProtocolGetStatus = eficall! {fn(
153 *mut Protocol,
154 *mut u32,
155 *mut *mut core::ffi::c_void,
156) -> crate::base::Status};
157
158pub type ProtocolTransmit = eficall! {fn(
159 *mut Protocol,
160 usize,
161 usize,
162 *mut core::ffi::c_void,
163 *mut crate::base::MacAddress,
164 *mut crate::base::MacAddress,
165 *mut u16,
166) -> crate::base::Status};
167
168pub type ProtocolReceive = eficall! {fn(
169 *mut Protocol,
170 *mut usize,
171 *mut usize,
172 *mut core::ffi::c_void,
173 *mut crate::base::MacAddress,
174 *mut crate::base::MacAddress,
175 *mut u16,
176) -> crate::base::Status};
177
178#[repr(C)]
179pub struct Protocol {
180 pub revision: u64,
181 pub start: ProtocolStart,
182 pub stop: ProtocolStop,
183 pub initialize: ProtocolInitialize,
184 pub reset: ProtocolReset,
185 pub shutdown: ProtocolShutdown,
186 pub receive_filters: ProtocolReceiveFilters,
187 pub station_address: ProtocolStationAddress,
188 pub statistics: ProtocolStatistics,
189 pub mcast_ip_to_mac: ProtocolMcastIpToMac,
190 pub nv_data: ProtocolNvData,
191 pub get_status: ProtocolGetStatus,
192 pub transmit: ProtocolTransmit,
193 pub receive: ProtocolReceive,
194 pub wait_for_packet: crate::base::Event,
195 pub mode: *mut Mode,
196}