@@ -4188,49 +4188,33 @@ pub const HWTSTAMP_FILTER_NTP_ALL: ::c_uint = 15;
4188
4188
// linux/ptp_clock.h
4189
4189
pub const PTP_MAX_SAMPLES : :: c_uint = 25 ; // Maximum allowed offset measurement samples.
4190
4190
4191
- cfg_if! {
4192
- if #[ cfg( any( target_arch = "powerpc" , target_arch = "powerpc64" , target_arch = "sparc64" ) ) ] {
4193
- pub const PTP_CLOCK_GETCAPS : :: c_uint = 0x40503d01 ;
4194
- pub const PTP_EXTTS_REQUEST : :: c_uint = 0x80103d02 ;
4195
- pub const PTP_PEROUT_REQUEST : :: c_uint = 0x80383d03 ;
4196
- pub const PTP_ENABLE_PPS : :: c_uint = 0x80043d04 ;
4197
- pub const PTP_SYS_OFFSET : :: c_uint = 0x83403d05 ;
4198
- pub const PTP_PIN_GETFUNC : :: c_uint = 0xc0603d06 ;
4199
- pub const PTP_PIN_SETFUNC : :: c_uint = 0x80603d07 ;
4200
- pub const PTP_SYS_OFFSET_PRECISE : :: c_uint = 0xc0403d08 ;
4201
- pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint = 0xc4c03d09 ;
4202
-
4203
- pub const PTP_CLOCK_GETCAPS2 : :: c_uint = 0x40503d0a ;
4204
- pub const PTP_EXTTS_REQUEST2 : :: c_uint = 0x80103d0b ;
4205
- pub const PTP_PEROUT_REQUEST2 : :: c_uint = 0x80383d0c ;
4206
- pub const PTP_ENABLE_PPS2 : :: c_uint = 0x80043d0d ;
4207
- pub const PTP_SYS_OFFSET2 : :: c_uint = 0x83403d0e ;
4208
- pub const PTP_PIN_GETFUNC2 : :: c_uint = 0xc0603d0f ;
4209
- pub const PTP_PIN_SETFUNC2 : :: c_uint = 0x80603d10 ;
4210
- pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint = 0xc0403d11 ;
4211
- pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint = 0xc4c03d12 ;
4212
- } else {
4213
- pub const PTP_CLOCK_GETCAPS : :: c_uint = 0x80503d01 ;
4214
- pub const PTP_EXTTS_REQUEST : :: c_uint = 0x40103d02 ;
4215
- pub const PTP_PEROUT_REQUEST : :: c_uint = 0x40383d03 ;
4216
- pub const PTP_ENABLE_PPS : :: c_uint = 0x40043d04 ;
4217
- pub const PTP_SYS_OFFSET : :: c_uint = 0x43403d05 ;
4218
- pub const PTP_PIN_GETFUNC : :: c_uint = 0xc0603d06 ;
4219
- pub const PTP_PIN_SETFUNC : :: c_uint = 0x40603d07 ;
4220
- pub const PTP_SYS_OFFSET_PRECISE : :: c_uint = 0xc0403d08 ;
4221
- pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint = 0xc4c03d09 ;
4222
-
4223
- pub const PTP_CLOCK_GETCAPS2 : :: c_uint = 0x80503d0a ;
4224
- pub const PTP_EXTTS_REQUEST2 : :: c_uint = 0x40103d0b ;
4225
- pub const PTP_PEROUT_REQUEST2 : :: c_uint = 0x40383d0c ;
4226
- pub const PTP_ENABLE_PPS2 : :: c_uint = 0x40043d0d ;
4227
- pub const PTP_SYS_OFFSET2 : :: c_uint = 0x43403d0e ;
4228
- pub const PTP_PIN_GETFUNC2 : :: c_uint = 0xc0603d0f ;
4229
- pub const PTP_PIN_SETFUNC2 : :: c_uint = 0x40603d10 ;
4230
- pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint = 0xc0403d11 ;
4231
- pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint = 0xc4c03d12 ;
4232
- }
4233
- }
4191
+ const PTP_CLK_MAGIC : u32 = b'=' as u32 ;
4192
+
4193
+ pub const PTP_CLOCK_GETCAPS : :: c_uint = ioctl:: _IOR:: <ptp_clock_caps>( PTP_CLK_MAGIC , 1 ) ;
4194
+ pub const PTP_EXTTS_REQUEST : :: c_uint = ioctl:: _IOW:: <ptp_extts_request>( PTP_CLK_MAGIC , 2 ) ;
4195
+ pub const PTP_PEROUT_REQUEST : :: c_uint = ioctl:: _IOW:: <ptp_perout_request>( PTP_CLK_MAGIC , 3 ) ;
4196
+ pub const PTP_ENABLE_PPS : :: c_uint = ioctl:: _IOW:: <:: c_int>( PTP_CLK_MAGIC , 4 ) ;
4197
+ pub const PTP_SYS_OFFSET : :: c_uint = ioctl:: _IOW:: <ptp_sys_offset>( PTP_CLK_MAGIC , 5 ) ;
4198
+ pub const PTP_PIN_GETFUNC : :: c_uint = ioctl:: _IOWR:: <ptp_pin_desc>( PTP_CLK_MAGIC , 6 ) ;
4199
+ pub const PTP_PIN_SETFUNC : :: c_uint = ioctl:: _IOW:: <ptp_pin_desc>( PTP_CLK_MAGIC , 7 ) ;
4200
+ pub const PTP_SYS_OFFSET_PRECISE : :: c_uint =
4201
+ ioctl:: _IOWR:: <ptp_sys_offset_precise>( PTP_CLK_MAGIC , 8 ) ;
4202
+ pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint =
4203
+ ioctl:: _IOWR:: <ptp_sys_offset_extended>( PTP_CLK_MAGIC , 9 ) ;
4204
+
4205
+ pub const PTP_CLOCK_GETCAPS2 : :: c_uint = ioctl:: _IOR:: <ptp_clock_caps>( PTP_CLK_MAGIC , 10 ) ;
4206
+ pub const PTP_EXTTS_REQUEST2 : :: c_uint = ioctl:: _IOW:: <ptp_extts_request>( PTP_CLK_MAGIC , 11 ) ;
4207
+ pub const PTP_PEROUT_REQUEST2 : :: c_uint = ioctl:: _IOW:: <ptp_perout_request>( PTP_CLK_MAGIC , 12 ) ;
4208
+ pub const PTP_ENABLE_PPS2 : :: c_uint = ioctl:: _IOW:: <:: c_int>( PTP_CLK_MAGIC , 13 ) ;
4209
+ pub const PTP_SYS_OFFSET2 : :: c_uint = ioctl:: _IOW:: <ptp_sys_offset>( PTP_CLK_MAGIC , 14 ) ;
4210
+ pub const PTP_PIN_GETFUNC2 : :: c_uint = ioctl:: _IOWR:: <ptp_pin_desc>( PTP_CLK_MAGIC , 15 ) ;
4211
+ pub const PTP_PIN_SETFUNC2 : :: c_uint = ioctl:: _IOW:: <ptp_pin_desc>( PTP_CLK_MAGIC , 16 ) ;
4212
+ pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint =
4213
+ ioctl:: _IOWR:: <ptp_sys_offset_precise>( PTP_CLK_MAGIC , 17 ) ;
4214
+ pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint =
4215
+ ioctl:: _IOWR:: <ptp_sys_offset_extended>( PTP_CLK_MAGIC , 18 ) ;
4216
+ pub const PTP_MASK_CLEAR_ALL : :: c_uint = ioctl:: _IO( PTP_CLK_MAGIC , 19 ) ;
4217
+ pub const PTP_MASK_EN_SINGLE : :: c_uint = ioctl:: _IOW:: <:: c_uint>( PTP_CLK_MAGIC , 20 ) ;
4234
4218
4235
4219
// enum ptp_pin_function
4236
4220
pub const PTP_PF_NONE : :: c_uint = 0 ;
@@ -6315,3 +6299,88 @@ expand_align!();
6315
6299
6316
6300
mod non_exhaustive;
6317
6301
pub use self :: non_exhaustive:: * ;
6302
+
6303
+ mod ioctl {
6304
+ const _IOC_NRBITS: u32 = 8 ;
6305
+ const _IOC_TYPEBITS: u32 = 8 ;
6306
+
6307
+ // https://github.com/search?q=repo%3Atorvalds%2Flinux+%22%23define+_IOC_NONE%22&type=code
6308
+ cfg_if! {
6309
+ if #[ cfg( any(
6310
+ any( target_arch = "powerpc" , target_arch = "powerpc64" ) ,
6311
+ any( target_arch = "sparc" , target_arch = "sparc64" ) ,
6312
+ any( target_arch = "mips" , target_arch = "mips64" ) ,
6313
+ ) ) ]
6314
+ {
6315
+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/powerpc/include/uapi/asm/ioctl.h
6316
+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/sparc/include/uapi/asm/ioctl.h
6317
+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/mips/include/uapi/asm/ioctl.h
6318
+
6319
+ const _IOC_SIZEBITS: u32 = 13 ;
6320
+ const _IOC_DIRBITS: u32 = 3 ;
6321
+
6322
+ const _IOC_NONE: u32 = 1 ;
6323
+ const _IOC_READ: u32 = 2 ;
6324
+ const _IOC_WRITE: u32 = 4 ;
6325
+ } else {
6326
+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/include/uapi/asm-generic/ioctl.h
6327
+
6328
+ const _IOC_SIZEBITS: u32 = 14 ;
6329
+ const _IOC_DIRBITS: u32 = 2 ;
6330
+
6331
+ const _IOC_NONE: u32 = 0 ;
6332
+ const _IOC_WRITE: u32 = 1 ;
6333
+ const _IOC_READ: u32 = 2 ;
6334
+ }
6335
+ }
6336
+
6337
+ const _IOC_NRMASK: u32 = ( 1 << _IOC_NRBITS) - 1 ;
6338
+ const _IOC_TYPEMASK: u32 = ( 1 << _IOC_TYPEBITS) - 1 ;
6339
+ const _IOC_SIZEMASK: u32 = ( 1 << _IOC_SIZEBITS) - 1 ;
6340
+ const _IOC_DIRMASK: u32 = ( 1 << _IOC_DIRBITS) - 1 ;
6341
+
6342
+ const _IOC_NRSHIFT: u32 = 0 ;
6343
+ const _IOC_TYPESHIFT: u32 = _IOC_NRSHIFT + _IOC_NRBITS;
6344
+ const _IOC_SIZESHIFT: u32 = _IOC_TYPESHIFT + _IOC_TYPEBITS;
6345
+ const _IOC_DIRSHIFT: u32 = _IOC_SIZESHIFT + _IOC_SIZEBITS;
6346
+
6347
+ // adopted from https://github.com/torvalds/linux/blob/8a696a29c6905594e4abf78eaafcb62165ac61f1/rust/kernel/ioctl.rs
6348
+
6349
+ /// Build an ioctl number, analogous to the C macro of the same name.
6350
+ #[ inline( always) ]
6351
+ const fn _IOC( dir: u32 , ty: u32 , nr: u32 , size: usize ) -> u32 {
6352
+ debug_assert!( dir <= _IOC_DIRMASK) ;
6353
+ debug_assert!( ty <= _IOC_TYPEMASK) ;
6354
+ debug_assert!( nr <= _IOC_NRMASK) ;
6355
+ debug_assert!( size <= ( _IOC_SIZEMASK as usize ) ) ;
6356
+
6357
+ ( dir << _IOC_DIRSHIFT)
6358
+ | ( ty << _IOC_TYPESHIFT)
6359
+ | ( nr << _IOC_NRSHIFT)
6360
+ | ( ( size as u32 ) << _IOC_SIZESHIFT)
6361
+ }
6362
+
6363
+ /// Build an ioctl number for an argumentless ioctl.
6364
+ #[ inline( always) ]
6365
+ pub const fn _IO( ty: u32 , nr: u32 ) -> u32 {
6366
+ _IOC( _IOC_NONE, ty, nr, 0 )
6367
+ }
6368
+
6369
+ /// Build an ioctl number for an read-only ioctl.
6370
+ #[ inline( always) ]
6371
+ pub const fn _IOR<T >( ty: u32 , nr: u32 ) -> u32 {
6372
+ _IOC( _IOC_READ, ty, nr, core:: mem:: size_of:: <T >( ) )
6373
+ }
6374
+
6375
+ /// Build an ioctl number for an write-only ioctl.
6376
+ #[ inline( always) ]
6377
+ pub const fn _IOW<T >( ty: u32 , nr: u32 ) -> u32 {
6378
+ _IOC( _IOC_WRITE, ty, nr, core:: mem:: size_of:: <T >( ) )
6379
+ }
6380
+
6381
+ /// Build an ioctl number for a read-write ioctl.
6382
+ #[ inline( always) ]
6383
+ pub const fn _IOWR<T >( ty: u32 , nr: u32 ) -> u32 {
6384
+ _IOC( _IOC_READ | _IOC_WRITE, ty, nr, core:: mem:: size_of:: <T >( ) )
6385
+ }
6386
+ }
0 commit comments