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