xref: /aosp_15_r20/external/crosvm/usb_sys/src/lib.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker //! Linux USB device filesystem ioctl bindings.
6*bb4ee6a4SAndroid Build Coastguard Worker 
7*bb4ee6a4SAndroid Build Coastguard Worker // Translated from include/uapi/linux/usbdevice_fs.h
8*bb4ee6a4SAndroid Build Coastguard Worker 
9*bb4ee6a4SAndroid Build Coastguard Worker #![allow(non_upper_case_globals)]
10*bb4ee6a4SAndroid Build Coastguard Worker #![allow(non_camel_case_types)]
11*bb4ee6a4SAndroid Build Coastguard Worker #![allow(non_snake_case)]
12*bb4ee6a4SAndroid Build Coastguard Worker #![allow(dead_code)]
13*bb4ee6a4SAndroid Build Coastguard Worker 
14*bb4ee6a4SAndroid Build Coastguard Worker use std::os::raw::c_char;
15*bb4ee6a4SAndroid Build Coastguard Worker use std::os::raw::c_int;
16*bb4ee6a4SAndroid Build Coastguard Worker use std::os::raw::c_uchar;
17*bb4ee6a4SAndroid Build Coastguard Worker use std::os::raw::c_uint;
18*bb4ee6a4SAndroid Build Coastguard Worker use std::os::raw::c_void;
19*bb4ee6a4SAndroid Build Coastguard Worker 
20*bb4ee6a4SAndroid Build Coastguard Worker use base::ioctl_io_nr;
21*bb4ee6a4SAndroid Build Coastguard Worker use base::ioctl_ior_nr;
22*bb4ee6a4SAndroid Build Coastguard Worker use base::ioctl_iow_nr;
23*bb4ee6a4SAndroid Build Coastguard Worker use base::ioctl_iowr_nr;
24*bb4ee6a4SAndroid Build Coastguard Worker 
25*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
26*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Default)]
27*bb4ee6a4SAndroid Build Coastguard Worker pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>);
28*bb4ee6a4SAndroid Build Coastguard Worker impl<T> __IncompleteArrayField<T> {
29*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
new() -> Self30*bb4ee6a4SAndroid Build Coastguard Worker     pub fn new() -> Self {
31*bb4ee6a4SAndroid Build Coastguard Worker         __IncompleteArrayField(::std::marker::PhantomData)
32*bb4ee6a4SAndroid Build Coastguard Worker     }
33*bb4ee6a4SAndroid Build Coastguard Worker     /// # Safety
34*bb4ee6a4SAndroid Build Coastguard Worker     ///
35*bb4ee6a4SAndroid Build Coastguard Worker     /// Caller must ensure that Self's size and alignment requirements matches
36*bb4ee6a4SAndroid Build Coastguard Worker     /// those of `T`s.
37*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
as_ptr(&self) -> *const T38*bb4ee6a4SAndroid Build Coastguard Worker     pub unsafe fn as_ptr(&self) -> *const T {
39*bb4ee6a4SAndroid Build Coastguard Worker         ::std::mem::transmute(self)
40*bb4ee6a4SAndroid Build Coastguard Worker     }
41*bb4ee6a4SAndroid Build Coastguard Worker     /// # Safety
42*bb4ee6a4SAndroid Build Coastguard Worker     ///
43*bb4ee6a4SAndroid Build Coastguard Worker     /// Caller must ensure that Self's size and alignment requirements matches
44*bb4ee6a4SAndroid Build Coastguard Worker     /// those of `T`s.
45*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
as_mut_ptr(&mut self) -> *mut T46*bb4ee6a4SAndroid Build Coastguard Worker     pub unsafe fn as_mut_ptr(&mut self) -> *mut T {
47*bb4ee6a4SAndroid Build Coastguard Worker         ::std::mem::transmute(self)
48*bb4ee6a4SAndroid Build Coastguard Worker     }
49*bb4ee6a4SAndroid Build Coastguard Worker     /// # Safety
50*bb4ee6a4SAndroid Build Coastguard Worker     ///
51*bb4ee6a4SAndroid Build Coastguard Worker     /// Caller must ensure that Self's size and alignment requirements matches
52*bb4ee6a4SAndroid Build Coastguard Worker     /// those of `T`s.
53*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
as_slice(&self, len: usize) -> &[T]54*bb4ee6a4SAndroid Build Coastguard Worker     pub unsafe fn as_slice(&self, len: usize) -> &[T] {
55*bb4ee6a4SAndroid Build Coastguard Worker         ::std::slice::from_raw_parts(self.as_ptr(), len)
56*bb4ee6a4SAndroid Build Coastguard Worker     }
57*bb4ee6a4SAndroid Build Coastguard Worker     /// # Safety
58*bb4ee6a4SAndroid Build Coastguard Worker     ///
59*bb4ee6a4SAndroid Build Coastguard Worker     /// Caller must ensure that Self's size and alignment requirements matches
60*bb4ee6a4SAndroid Build Coastguard Worker     /// those of `T`s.
61*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
as_mut_slice(&mut self, len: usize) -> &mut [T]62*bb4ee6a4SAndroid Build Coastguard Worker     pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] {
63*bb4ee6a4SAndroid Build Coastguard Worker         ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len)
64*bb4ee6a4SAndroid Build Coastguard Worker     }
65*bb4ee6a4SAndroid Build Coastguard Worker }
66*bb4ee6a4SAndroid Build Coastguard Worker impl<T> ::std::clone::Clone for __IncompleteArrayField<T> {
67*bb4ee6a4SAndroid Build Coastguard Worker     #[inline]
clone(&self) -> Self68*bb4ee6a4SAndroid Build Coastguard Worker     fn clone(&self) -> Self {
69*bb4ee6a4SAndroid Build Coastguard Worker         Self::new()
70*bb4ee6a4SAndroid Build Coastguard Worker     }
71*bb4ee6a4SAndroid Build Coastguard Worker }
72*bb4ee6a4SAndroid Build Coastguard Worker 
73*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
74*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
75*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_ctrltransfer {
76*bb4ee6a4SAndroid Build Coastguard Worker     pub bRequestType: u8,
77*bb4ee6a4SAndroid Build Coastguard Worker     pub bRequest: u8,
78*bb4ee6a4SAndroid Build Coastguard Worker     pub wValue: u16,
79*bb4ee6a4SAndroid Build Coastguard Worker     pub wIndex: u16,
80*bb4ee6a4SAndroid Build Coastguard Worker     pub wLength: u16,
81*bb4ee6a4SAndroid Build Coastguard Worker     pub timeout: u32,
82*bb4ee6a4SAndroid Build Coastguard Worker     pub data: *mut c_void,
83*bb4ee6a4SAndroid Build Coastguard Worker }
84*bb4ee6a4SAndroid Build Coastguard Worker 
85*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
86*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
87*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_bulktransfer {
88*bb4ee6a4SAndroid Build Coastguard Worker     pub ep: c_uint,
89*bb4ee6a4SAndroid Build Coastguard Worker     pub len: c_uint,
90*bb4ee6a4SAndroid Build Coastguard Worker     pub timeout: c_uint,
91*bb4ee6a4SAndroid Build Coastguard Worker     pub data: *mut c_void,
92*bb4ee6a4SAndroid Build Coastguard Worker }
93*bb4ee6a4SAndroid Build Coastguard Worker 
94*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
95*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Default, Copy, Clone)]
96*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_setinterface {
97*bb4ee6a4SAndroid Build Coastguard Worker     pub interface: c_uint,
98*bb4ee6a4SAndroid Build Coastguard Worker     pub altsetting: c_uint,
99*bb4ee6a4SAndroid Build Coastguard Worker }
100*bb4ee6a4SAndroid Build Coastguard Worker 
101*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
102*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Default, Copy, Clone)]
103*bb4ee6a4SAndroid Build Coastguard Worker struct usbdevfs_disconnectsignal {
104*bb4ee6a4SAndroid Build Coastguard Worker     pub signr: c_uint,
105*bb4ee6a4SAndroid Build Coastguard Worker     pub context: usize,
106*bb4ee6a4SAndroid Build Coastguard Worker }
107*bb4ee6a4SAndroid Build Coastguard Worker 
108*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_MAXDRIVERNAME: usize = 255;
109*bb4ee6a4SAndroid Build Coastguard Worker 
110*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
111*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
112*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_getdriver {
113*bb4ee6a4SAndroid Build Coastguard Worker     pub interface: c_uint,
114*bb4ee6a4SAndroid Build Coastguard Worker     pub driver: [u8; USBDEVFS_MAXDRIVERNAME + 1],
115*bb4ee6a4SAndroid Build Coastguard Worker }
116*bb4ee6a4SAndroid Build Coastguard Worker 
117*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
118*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Default, Copy, Clone)]
119*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_connectinfo {
120*bb4ee6a4SAndroid Build Coastguard Worker     pub devnum: c_uint,
121*bb4ee6a4SAndroid Build Coastguard Worker     pub slow: c_char,
122*bb4ee6a4SAndroid Build Coastguard Worker }
123*bb4ee6a4SAndroid Build Coastguard Worker 
124*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_SHORT_NOT_OK: c_uint = 0x01;
125*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_ISO_ASAP: c_uint = 0x02;
126*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_BULK_CONTINUATION: c_uint = 0x04;
127*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_NO_FSBR: c_uint = 0x20;
128*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_ZERO_PACKET: c_uint = 0x40;
129*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_NO_INTERRUPT: c_uint = 0x80;
130*bb4ee6a4SAndroid Build Coastguard Worker 
131*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_TYPE_ISO: c_uchar = 0;
132*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_TYPE_INTERRUPT: c_uchar = 1;
133*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_TYPE_CONTROL: c_uchar = 2;
134*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_URB_TYPE_BULK: c_uchar = 3;
135*bb4ee6a4SAndroid Build Coastguard Worker 
136*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
137*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Default, Copy, Clone)]
138*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_iso_packet_desc {
139*bb4ee6a4SAndroid Build Coastguard Worker     pub length: c_uint,
140*bb4ee6a4SAndroid Build Coastguard Worker     pub actual_length: c_uint,
141*bb4ee6a4SAndroid Build Coastguard Worker     pub status: c_uint,
142*bb4ee6a4SAndroid Build Coastguard Worker }
143*bb4ee6a4SAndroid Build Coastguard Worker 
144*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
145*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Clone)]
146*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_urb {
147*bb4ee6a4SAndroid Build Coastguard Worker     pub urb_type: c_uchar,
148*bb4ee6a4SAndroid Build Coastguard Worker     pub endpoint: c_uchar,
149*bb4ee6a4SAndroid Build Coastguard Worker     pub status: c_int,
150*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: c_uint,
151*bb4ee6a4SAndroid Build Coastguard Worker     pub buffer: *mut c_void,
152*bb4ee6a4SAndroid Build Coastguard Worker     pub buffer_length: c_int,
153*bb4ee6a4SAndroid Build Coastguard Worker     pub actual_length: c_int,
154*bb4ee6a4SAndroid Build Coastguard Worker     pub start_frame: c_int,
155*bb4ee6a4SAndroid Build Coastguard Worker     pub number_of_packets_or_stream_id: c_uint,
156*bb4ee6a4SAndroid Build Coastguard Worker     pub error_count: c_int,
157*bb4ee6a4SAndroid Build Coastguard Worker     pub signr: c_uint,
158*bb4ee6a4SAndroid Build Coastguard Worker     pub usercontext: usize,
159*bb4ee6a4SAndroid Build Coastguard Worker     pub iso_frame_desc: __IncompleteArrayField<usbdevfs_iso_packet_desc>,
160*bb4ee6a4SAndroid Build Coastguard Worker }
161*bb4ee6a4SAndroid Build Coastguard Worker 
162*bb4ee6a4SAndroid Build Coastguard Worker impl Default for usbdevfs_urb {
default() -> Self163*bb4ee6a4SAndroid Build Coastguard Worker     fn default() -> Self {
164*bb4ee6a4SAndroid Build Coastguard Worker         // SAFETY: trivially safe
165*bb4ee6a4SAndroid Build Coastguard Worker         unsafe { ::std::mem::zeroed() }
166*bb4ee6a4SAndroid Build Coastguard Worker     }
167*bb4ee6a4SAndroid Build Coastguard Worker }
168*bb4ee6a4SAndroid Build Coastguard Worker 
169*bb4ee6a4SAndroid Build Coastguard Worker // SAFETY:
170*bb4ee6a4SAndroid Build Coastguard Worker // The structure that embeds this should ensure that this is safe.
171*bb4ee6a4SAndroid Build Coastguard Worker unsafe impl Send for usbdevfs_urb {}
172*bb4ee6a4SAndroid Build Coastguard Worker // SAFETY:
173*bb4ee6a4SAndroid Build Coastguard Worker // The structure that embeds this should ensure that this is safe.
174*bb4ee6a4SAndroid Build Coastguard Worker unsafe impl Sync for usbdevfs_urb {}
175*bb4ee6a4SAndroid Build Coastguard Worker 
176*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
177*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
178*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_ioctl {
179*bb4ee6a4SAndroid Build Coastguard Worker     pub ifno: c_int,
180*bb4ee6a4SAndroid Build Coastguard Worker     pub ioctl_code: c_int,
181*bb4ee6a4SAndroid Build Coastguard Worker     pub data: *mut c_void,
182*bb4ee6a4SAndroid Build Coastguard Worker }
183*bb4ee6a4SAndroid Build Coastguard Worker 
184*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
185*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
186*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_hub_portinfo {
187*bb4ee6a4SAndroid Build Coastguard Worker     pub nports: c_char,
188*bb4ee6a4SAndroid Build Coastguard Worker     pub port: [u8; 127],
189*bb4ee6a4SAndroid Build Coastguard Worker }
190*bb4ee6a4SAndroid Build Coastguard Worker 
191*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_ZERO_PACKET: u32 = 0x01;
192*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_BULK_CONTINUATION: u32 = 0x02;
193*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_NO_PACKET_SIZE_LIM: u32 = 0x04;
194*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_BULK_SCATTER_GATHER: u32 = 0x08;
195*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_REAP_AFTER_DISCONNECT: u32 = 0x10;
196*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_MMAP: u32 = 0x20;
197*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_CAP_DROP_PRIVILEGES: u32 = 0x40;
198*bb4ee6a4SAndroid Build Coastguard Worker 
199*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_DISCONNECT_CLAIM_IF_DRIVER: c_uint = 0x01;
200*bb4ee6a4SAndroid Build Coastguard Worker pub const USBDEVFS_DISCONNECT_CLAIM_EXCEPT_DRIVER: c_uint = 0x02;
201*bb4ee6a4SAndroid Build Coastguard Worker 
202*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
203*bb4ee6a4SAndroid Build Coastguard Worker #[derive(Copy, Clone)]
204*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_disconnect_claim {
205*bb4ee6a4SAndroid Build Coastguard Worker     pub interface: c_uint,
206*bb4ee6a4SAndroid Build Coastguard Worker     pub flags: c_uint,
207*bb4ee6a4SAndroid Build Coastguard Worker     pub driver: [u8; USBDEVFS_MAXDRIVERNAME + 1],
208*bb4ee6a4SAndroid Build Coastguard Worker }
209*bb4ee6a4SAndroid Build Coastguard Worker 
210*bb4ee6a4SAndroid Build Coastguard Worker #[repr(C)]
211*bb4ee6a4SAndroid Build Coastguard Worker pub struct usbdevfs_streams {
212*bb4ee6a4SAndroid Build Coastguard Worker     pub num_streams: c_uint,
213*bb4ee6a4SAndroid Build Coastguard Worker     pub num_eps: c_uint,
214*bb4ee6a4SAndroid Build Coastguard Worker     pub eps: __IncompleteArrayField<c_uchar>,
215*bb4ee6a4SAndroid Build Coastguard Worker }
216*bb4ee6a4SAndroid Build Coastguard Worker 
217*bb4ee6a4SAndroid Build Coastguard Worker impl Default for usbdevfs_streams {
default() -> Self218*bb4ee6a4SAndroid Build Coastguard Worker     fn default() -> Self {
219*bb4ee6a4SAndroid Build Coastguard Worker         // SAFETY: trivially safe
220*bb4ee6a4SAndroid Build Coastguard Worker         unsafe { ::std::mem::zeroed() }
221*bb4ee6a4SAndroid Build Coastguard Worker     }
222*bb4ee6a4SAndroid Build Coastguard Worker }
223*bb4ee6a4SAndroid Build Coastguard Worker 
224*bb4ee6a4SAndroid Build Coastguard Worker const U: u32 = 'U' as u32;
225*bb4ee6a4SAndroid Build Coastguard Worker 
226*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iowr_nr!(USBDEVFS_CONTROL, U, 0, usbdevfs_ctrltransfer);
227*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iowr_nr!(USBDEVFS_BULK, U, 2, usbdevfs_bulktransfer);
228*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_RESETEP, U, 3, c_uint);
229*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_SETINTERFACE, U, 4, usbdevfs_setinterface);
230*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_SETCONFIGURATION, U, 5, c_uint);
231*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_GETDRIVER, U, 8, usbdevfs_getdriver);
232*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_SUBMITURB, U, 10, usbdevfs_urb);
233*bb4ee6a4SAndroid Build Coastguard Worker ioctl_io_nr!(USBDEVFS_DISCARDURB, U, 11);
234*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iow_nr!(USBDEVFS_REAPURB, U, 12, *mut *mut usbdevfs_urb);
235*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iow_nr!(USBDEVFS_REAPURBNDELAY, U, 13, *mut *mut usbdevfs_urb);
236*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_DISCSIGNAL, U, 14, usbdevfs_disconnectsignal);
237*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_CLAIMINTERFACE, U, 15, c_uint);
238*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_RELEASEINTERFACE, U, 16, c_uint);
239*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iow_nr!(USBDEVFS_CONNECTINFO, U, 17, usbdevfs_connectinfo);
240*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iowr_nr!(USBDEVFS_IOCTL, U, 18, usbdevfs_ioctl);
241*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_HUB_PORTINFO, U, 19, usbdevfs_hub_portinfo);
242*bb4ee6a4SAndroid Build Coastguard Worker ioctl_io_nr!(USBDEVFS_RESET, U, 20);
243*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_CLEAR_HALT, U, 21, c_uint);
244*bb4ee6a4SAndroid Build Coastguard Worker ioctl_io_nr!(USBDEVFS_DISCONNECT, U, 22);
245*bb4ee6a4SAndroid Build Coastguard Worker ioctl_io_nr!(USBDEVFS_CONNECT, U, 23);
246*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_CLAIM_PORT, U, 24, c_uint);
247*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_RELEASE_PORT, U, 25, c_uint);
248*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_GET_CAPABILITIES, U, 26, u32);
249*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_DISCONNECT_CLAIM, U, 27, usbdevfs_disconnect_claim);
250*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_ALLOC_STREAMS, U, 28, usbdevfs_streams);
251*bb4ee6a4SAndroid Build Coastguard Worker ioctl_ior_nr!(USBDEVFS_FREE_STREAMS, U, 29, usbdevfs_streams);
252*bb4ee6a4SAndroid Build Coastguard Worker ioctl_iow_nr!(USBDEVFS_DROP_PRIVILEGES, U, 30, u32);
253*bb4ee6a4SAndroid Build Coastguard Worker ioctl_io_nr!(USBDEVFS_GET_SPEED, U, 31);
254