1#![allow(non_camel_case_types)]
2
3extern crate libc;
4
5use libc::{c_char, c_int, c_uchar, c_void, dev_t, size_t};
6
7pub const EINVAL: c_int = 22;
9
10#[repr(C)]
11#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
12pub struct sd_device {
13 _private: [u8; 0],
14 _marker: core::marker::PhantomData<*mut c_void>,
15}
16
17#[repr(C)]
18#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
19pub struct sd_device_enumerator {
20 _private: [u8; 0],
21 _marker: core::marker::PhantomData<*mut c_void>,
22}
23
24#[repr(C)]
25#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
26pub struct sd_device_monitor {
27 _private: [u8; 0],
28 _marker: core::marker::PhantomData<*mut c_void>,
29}
30
31#[repr(C)]
32#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
33pub struct sd_event {
34 _private: [u8; 0],
35 _marker: core::marker::PhantomData<*mut c_void>,
36}
37
38#[repr(C)]
39#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
40pub struct sd_event_source {
41 _private: [u8; 0],
42 _marker: core::marker::PhantomData<*mut c_void>,
43}
44
45#[repr(C)]
46pub union sd_id128 {
47 pub bytes: [c_uchar; 16],
48 pub qwords: [u64; 2],
49}
50
51pub type sd_id128_t = sd_id128;
52
53#[repr(i64)]
54#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
55pub enum sd_device_action_t {
56 SD_DEVICE_ADD = 0,
57 SD_DEVICE_REMOVE = 1,
58 SD_DEVICE_CHANGE = 2,
59 SD_DEVICE_MOVE = 3,
60 SD_DEVICE_ONLINE = 4,
61 SD_DEVICE_OFFLINE = 5,
62 SD_DEVICE_BIND = 6,
63 SD_DEVICE_UNBIND = 7,
64 _SD_DEVICE_ACTION_MAX = 8,
65 _SD_DEVICE_ACTION_INVALID = -(EINVAL as i64),
66 _SD_ENUM_FORCE_S64_DEVICE_ACTION = i64::MAX,
68}
69
70pub type sd_device_monitor_handler_t = Option<
71 unsafe extern "C" fn(
72 m: *mut sd_device_monitor,
73 device: *mut sd_device,
74 userdata: *mut c_void,
75 ) -> c_int,
76>;
77
78unsafe extern "C" {
79 pub fn sd_device_ref(device: *mut sd_device) -> *mut sd_device;
80 pub fn sd_device_unref(device: *mut sd_device) -> *mut sd_device;
81
82 pub fn sd_device_new_from_syspath(ret: *mut *mut sd_device, syspath: *const c_char) -> c_int;
83 pub fn sd_device_new_from_devnum(
84 ret: *mut *mut sd_device,
85 type_: c_char,
86 devnum: dev_t,
87 ) -> c_int;
88 pub fn sd_device_new_from_subsystem_sysname(
89 ret: *mut *mut sd_device,
90 subsystem: *const c_char,
91 sysname: *const c_char,
92 ) -> c_int;
93 pub fn sd_device_new_from_device_id(ret: *mut *mut sd_device, id: *const c_char) -> c_int;
94 pub fn sd_device_new_from_stat_rdev(ret: *mut *mut sd_device, st: *const libc::stat) -> c_int;
95 pub fn sd_device_new_from_devname(ret: *mut *mut sd_device, devname: *const c_char) -> c_int;
96 pub fn sd_device_new_from_path(ret: *mut *mut sd_device, path: *const c_char) -> c_int;
97 pub fn sd_device_new_from_ifname(ret: *mut *mut sd_device, ifname: *const c_char) -> c_int;
98 pub fn sd_device_new_from_ifindex(ret: *mut *mut sd_device, ifindex: c_int) -> c_int;
99
100 pub fn sd_device_new_child(
101 ret: *mut *mut sd_device,
102 device: *mut sd_device,
103 suffix: *const c_char,
104 ) -> c_int;
105
106 pub fn sd_device_get_parent(device: *mut sd_device, ret: *mut *mut sd_device) -> c_int;
108 pub fn sd_device_get_parent_with_subsystem_devtype(
109 device: *mut sd_device,
110 subsystem: *const c_char,
111 devtype: *const c_char,
112 ret: *mut *mut sd_device,
113 ) -> c_int;
114
115 pub fn sd_device_get_syspath(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
117 pub fn sd_device_get_subsystem(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
118 pub fn sd_device_get_driver_subsystem(device: *mut sd_device, ret: *mut *const c_char)
119 -> c_int;
120 pub fn sd_device_get_devtype(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
121 pub fn sd_device_get_devnum(device: *mut sd_device, devnum: *mut dev_t) -> c_int;
122 pub fn sd_device_get_ifindex(device: *mut sd_device, ifindex: *mut c_int) -> c_int;
123 pub fn sd_device_get_driver(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
124 pub fn sd_device_get_devpath(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
125 pub fn sd_device_get_devname(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
126 pub fn sd_device_get_sysname(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
127 pub fn sd_device_get_sysnum(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
128 pub fn sd_device_get_action(device: *mut sd_device, ret: *mut sd_device_action_t) -> c_int;
129 pub fn sd_device_get_seqnum(device: *mut sd_device, ret: *mut u64) -> c_int;
130 pub fn sd_device_get_diskseq(device: *mut sd_device, ret: *mut u64) -> c_int;
131 pub fn sd_device_get_device_id(device: *mut sd_device, ret: *mut *const c_char) -> c_int;
132
133 pub fn sd_device_get_is_initialized(device: *mut sd_device) -> c_int;
134 pub fn sd_device_get_usec_initialized(device: *mut sd_device, ret: *mut u64) -> c_int;
135 pub fn sd_device_get_usec_since_initialized(device: *mut sd_device, ret: *mut u64) -> c_int;
136
137 pub fn sd_device_get_tag_first(device: *mut sd_device) -> *const c_char;
139 pub fn sd_device_get_tag_next(device: *mut sd_device) -> *const c_char;
140 pub fn sd_device_get_current_tag_first(device: *mut sd_device) -> *const c_char;
141 pub fn sd_device_get_current_tag_next(device: *mut sd_device) -> *const c_char;
142 pub fn sd_device_get_devlink_first(device: *mut sd_device) -> *const c_char;
143 pub fn sd_device_get_devlink_next(device: *mut sd_device) -> *const c_char;
144 pub fn sd_device_get_property_first(
145 device: *mut sd_device,
146 value: *mut *const c_char,
147 ) -> *const c_char;
148 pub fn sd_device_get_property_next(
149 device: *mut sd_device,
150 value: *mut *const c_char,
151 ) -> *const c_char;
152 pub fn sd_device_get_sysattr_first(device: *mut sd_device) -> *const c_char;
153 pub fn sd_device_get_sysattr_next(device: *mut sd_device) -> *const c_char;
154
155 pub fn sd_device_get_child_first(
156 device: *mut sd_device,
157 ret_suffix: *mut *const c_char,
158 ) -> *mut sd_device;
159 pub fn sd_device_get_child_next(
160 device: *mut sd_device,
161 ret_suffix: *mut *const c_char,
162 ) -> *mut sd_device;
163
164 pub fn sd_device_has_tag(device: *mut sd_device, tag: *const c_char) -> c_int;
166 pub fn sd_device_has_current_tag(device: *mut sd_device, tag: *const c_char) -> c_int;
167 pub fn sd_device_get_property_value(
168 device: *mut sd_device,
169 key: *const c_char,
170 value: *mut *const c_char,
171 ) -> c_int;
172
173 pub fn sd_device_get_trigger_uuid(device: *mut sd_device, ret: *mut sd_id128_t) -> c_int;
174
175 pub fn sd_device_get_sysattr_value_with_size(
176 device: *mut sd_device,
177 sysattr: *const c_char,
178 ret_value: *mut *const c_char,
179 ret_size: *mut size_t,
180 ) -> c_int;
181
182 pub fn sd_device_get_sysattr_value(
183 device: *mut sd_device,
184 sysattr: *const c_char,
185 ret_value: *mut *const c_char,
186 ) -> c_int;
187
188 pub fn sd_device_set_sysattr_value(
189 device: *mut sd_device,
190 sysattr: *const c_char,
191 value: *const c_char,
192 ) -> c_int;
193
194 pub fn sd_device_set_sysattr_valuef(
195 device: *mut sd_device,
196 sysattr: *const c_char,
197 format: *const c_char,
198 ...
199 ) -> c_int;
200
201 pub fn sd_device_trigger(device: *mut sd_device, action: sd_device_action_t) -> c_int;
202 pub fn sd_device_trigger_with_uuid(
203 device: *mut sd_device,
204 action: sd_device_action_t,
205 ret_uuid: *mut sd_id128_t,
206 ) -> c_int;
207
208 pub fn sd_device_open(device: *mut sd_device, flags: c_int) -> c_int;
209
210 pub fn sd_device_enumerator_new(ret: *mut *mut sd_device_enumerator) -> c_int;
212 pub fn sd_device_enumerator_ref(e: *mut sd_device_enumerator) -> *mut sd_device_enumerator;
213 pub fn sd_device_enumerator_unref(e: *mut sd_device_enumerator) -> *mut sd_device_enumerator;
214
215 pub fn sd_device_enumerator_get_device_first(e: *mut sd_device_enumerator) -> *mut sd_device;
216 pub fn sd_device_enumerator_get_device_next(e: *mut sd_device_enumerator) -> *mut sd_device;
217 pub fn sd_device_enumerator_get_subsystem_first(e: *mut sd_device_enumerator)
218 -> *mut sd_device;
219 pub fn sd_device_enumerator_get_subsystem_next(e: *mut sd_device_enumerator) -> *mut sd_device;
220
221 pub fn sd_device_enumerator_add_match_subsystem(
222 e: *mut sd_device_enumerator,
223 subsystem: *const c_char,
224 match_: c_int,
225 ) -> c_int;
226
227 pub fn sd_device_enumerator_add_match_sysattr(
228 e: *mut sd_device_enumerator,
229 sysattr: *const c_char,
230 value: *const c_char,
231 match_: c_int,
232 ) -> c_int;
233
234 pub fn sd_device_enumerator_add_match_property(
235 e: *mut sd_device_enumerator,
236 property: *const c_char,
237 value: *const c_char,
238 ) -> c_int;
239
240 pub fn sd_device_enumerator_add_match_property_required(
241 e: *mut sd_device_enumerator,
242 property: *const c_char,
243 value: *const c_char,
244 ) -> c_int;
245
246 pub fn sd_device_enumerator_add_match_sysname(
247 e: *mut sd_device_enumerator,
248 sysname: *const c_char,
249 ) -> c_int;
250 pub fn sd_device_enumerator_add_nomatch_sysname(
251 e: *mut sd_device_enumerator,
252 sysname: *const c_char,
253 ) -> c_int;
254 pub fn sd_device_enumerator_add_match_tag(
255 e: *mut sd_device_enumerator,
256 tag: *const c_char,
257 ) -> c_int;
258 pub fn sd_device_enumerator_add_match_parent(
259 e: *mut sd_device_enumerator,
260 parent: *mut sd_device,
261 ) -> c_int;
262 pub fn sd_device_enumerator_allow_uninitialized(e: *mut sd_device_enumerator) -> c_int;
263 pub fn sd_device_enumerator_add_all_parents(e: *mut sd_device_enumerator) -> c_int;
264
265 pub fn sd_device_monitor_new(ret: *mut *mut sd_device_monitor) -> c_int;
267 pub fn sd_device_monitor_ref(m: *mut sd_device_monitor) -> *mut sd_device_monitor;
268 pub fn sd_device_monitor_unref(m: *mut sd_device_monitor) -> *mut sd_device_monitor;
269
270 pub fn sd_device_monitor_get_fd(m: *mut sd_device_monitor) -> c_int;
271 pub fn sd_device_monitor_get_events(m: *mut sd_device_monitor) -> c_int;
272 pub fn sd_device_monitor_get_timeout(m: *mut sd_device_monitor, ret: *mut u64) -> c_int;
273 pub fn sd_device_monitor_set_receive_buffer_size(
274 m: *mut sd_device_monitor,
275 size: size_t,
276 ) -> c_int;
277
278 pub fn sd_device_monitor_attach_event(m: *mut sd_device_monitor, event: *mut sd_event)
279 -> c_int;
280 pub fn sd_device_monitor_detach_event(m: *mut sd_device_monitor) -> c_int;
281 pub fn sd_device_monitor_get_event(m: *mut sd_device_monitor) -> *mut sd_event;
282 pub fn sd_device_monitor_get_event_source(m: *mut sd_device_monitor) -> *mut sd_event_source;
283
284 pub fn sd_device_monitor_set_description(
285 m: *mut sd_device_monitor,
286 description: *const c_char,
287 ) -> c_int;
288 pub fn sd_device_monitor_get_description(
289 m: *mut sd_device_monitor,
290 ret: *mut *const c_char,
291 ) -> c_int;
292
293 pub fn sd_device_monitor_is_running(m: *mut sd_device_monitor) -> c_int;
294
295 pub fn sd_device_monitor_start(
296 m: *mut sd_device_monitor,
297 callback: sd_device_monitor_handler_t,
298 userdata: *mut c_void,
299 ) -> c_int;
300
301 pub fn sd_device_monitor_stop(m: *mut sd_device_monitor) -> c_int;
302 pub fn sd_device_monitor_receive(m: *mut sd_device_monitor, ret: *mut *mut sd_device) -> c_int;
303
304 pub fn sd_device_monitor_filter_add_match_subsystem_devtype(
305 m: *mut sd_device_monitor,
306 subsystem: *const c_char,
307 devtype: *const c_char,
308 ) -> c_int;
309
310 pub fn sd_device_monitor_filter_add_match_tag(
311 m: *mut sd_device_monitor,
312 tag: *const c_char,
313 ) -> c_int;
314
315 pub fn sd_device_monitor_filter_add_match_sysattr(
316 m: *mut sd_device_monitor,
317 sysattr: *const c_char,
318 value: *const c_char,
319 match_: c_int,
320 ) -> c_int;
321
322 pub fn sd_device_monitor_filter_add_match_parent(
323 m: *mut sd_device_monitor,
324 device: *mut sd_device,
325 match_: c_int,
326 ) -> c_int;
327
328 pub fn sd_device_monitor_filter_update(m: *mut sd_device_monitor) -> c_int;
329 pub fn sd_device_monitor_filter_remove(m: *mut sd_device_monitor) -> c_int;
330}