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