@@ -3736,49 +3736,33 @@ pub const HWTSTAMP_FILTER_NTP_ALL: ::c_uint = 15;
37363736// linux/ptp_clock.h
37373737pub const PTP_MAX_SAMPLES : :: c_uint = 25 ; // Maximum allowed offset measurement samples.
37383738
3739- cfg_if ! {
3740- if #[ cfg( any( target_arch = "powerpc" , target_arch = "powerpc64" , target_arch = "sparc64" ) ) ] {
3741- pub const PTP_CLOCK_GETCAPS : :: c_uint = 0x40503d01 ;
3742- pub const PTP_EXTTS_REQUEST : :: c_uint = 0x80103d02 ;
3743- pub const PTP_PEROUT_REQUEST : :: c_uint = 0x80383d03 ;
3744- pub const PTP_ENABLE_PPS : :: c_uint = 0x80043d04 ;
3745- pub const PTP_SYS_OFFSET : :: c_uint = 0x83403d05 ;
3746- pub const PTP_PIN_GETFUNC : :: c_uint = 0xc0603d06 ;
3747- pub const PTP_PIN_SETFUNC : :: c_uint = 0x80603d07 ;
3748- pub const PTP_SYS_OFFSET_PRECISE : :: c_uint = 0xc0403d08 ;
3749- pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint = 0xc4c03d09 ;
3750-
3751- pub const PTP_CLOCK_GETCAPS2 : :: c_uint = 0x40503d0a ;
3752- pub const PTP_EXTTS_REQUEST2 : :: c_uint = 0x80103d0b ;
3753- pub const PTP_PEROUT_REQUEST2 : :: c_uint = 0x80383d0c ;
3754- pub const PTP_ENABLE_PPS2 : :: c_uint = 0x80043d0d ;
3755- pub const PTP_SYS_OFFSET2 : :: c_uint = 0x83403d0e ;
3756- pub const PTP_PIN_GETFUNC2 : :: c_uint = 0xc0603d0f ;
3757- pub const PTP_PIN_SETFUNC2 : :: c_uint = 0x80603d10 ;
3758- pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint = 0xc0403d11 ;
3759- pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint = 0xc4c03d12 ;
3760- } else {
3761- pub const PTP_CLOCK_GETCAPS : :: c_uint = 0x80503d01 ;
3762- pub const PTP_EXTTS_REQUEST : :: c_uint = 0x40103d02 ;
3763- pub const PTP_PEROUT_REQUEST : :: c_uint = 0x40383d03 ;
3764- pub const PTP_ENABLE_PPS : :: c_uint = 0x40043d04 ;
3765- pub const PTP_SYS_OFFSET : :: c_uint = 0x43403d05 ;
3766- pub const PTP_PIN_GETFUNC : :: c_uint = 0xc0603d06 ;
3767- pub const PTP_PIN_SETFUNC : :: c_uint = 0x40603d07 ;
3768- pub const PTP_SYS_OFFSET_PRECISE : :: c_uint = 0xc0403d08 ;
3769- pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint = 0xc4c03d09 ;
3770-
3771- pub const PTP_CLOCK_GETCAPS2 : :: c_uint = 0x80503d0a ;
3772- pub const PTP_EXTTS_REQUEST2 : :: c_uint = 0x40103d0b ;
3773- pub const PTP_PEROUT_REQUEST2 : :: c_uint = 0x40383d0c ;
3774- pub const PTP_ENABLE_PPS2 : :: c_uint = 0x40043d0d ;
3775- pub const PTP_SYS_OFFSET2 : :: c_uint = 0x43403d0e ;
3776- pub const PTP_PIN_GETFUNC2 : :: c_uint = 0xc0603d0f ;
3777- pub const PTP_PIN_SETFUNC2 : :: c_uint = 0x40603d10 ;
3778- pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint = 0xc0403d11 ;
3779- pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint = 0xc4c03d12 ;
3780- }
3781- }
3739+ const PTP_CLK_MAGIC : u32 = b'=' as u32 ;
3740+
3741+ pub const PTP_CLOCK_GETCAPS : :: c_uint = ioctl:: _IOR :: < ptp_clock_caps > ( PTP_CLK_MAGIC , 1 ) ;
3742+ pub const PTP_EXTTS_REQUEST : :: c_uint = ioctl:: _IOW :: < ptp_extts_request > ( PTP_CLK_MAGIC , 2 ) ;
3743+ pub const PTP_PEROUT_REQUEST : :: c_uint = ioctl:: _IOW :: < ptp_perout_request > ( PTP_CLK_MAGIC , 3 ) ;
3744+ pub const PTP_ENABLE_PPS : :: c_uint = ioctl:: _IOW :: < :: c_int > ( PTP_CLK_MAGIC , 4 ) ;
3745+ pub const PTP_SYS_OFFSET : :: c_uint = ioctl:: _IOW :: < ptp_sys_offset > ( PTP_CLK_MAGIC , 5 ) ;
3746+ pub const PTP_PIN_GETFUNC : :: c_uint = ioctl:: _IOWR :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 6 ) ;
3747+ pub const PTP_PIN_SETFUNC : :: c_uint = ioctl:: _IOW :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 7 ) ;
3748+ pub const PTP_SYS_OFFSET_PRECISE : :: c_uint =
3749+ ioctl:: _IOWR :: < ptp_sys_offset_precise > ( PTP_CLK_MAGIC , 8 ) ;
3750+ pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint =
3751+ ioctl:: _IOWR :: < ptp_sys_offset_extended > ( PTP_CLK_MAGIC , 9 ) ;
3752+
3753+ pub const PTP_CLOCK_GETCAPS2 : :: c_uint = ioctl:: _IOR :: < ptp_clock_caps > ( PTP_CLK_MAGIC , 10 ) ;
3754+ pub const PTP_EXTTS_REQUEST2 : :: c_uint = ioctl:: _IOW :: < ptp_extts_request > ( PTP_CLK_MAGIC , 11 ) ;
3755+ pub const PTP_PEROUT_REQUEST2 : :: c_uint = ioctl:: _IOW :: < ptp_perout_request > ( PTP_CLK_MAGIC , 12 ) ;
3756+ pub const PTP_ENABLE_PPS2 : :: c_uint = ioctl:: _IOW :: < :: c_int > ( PTP_CLK_MAGIC , 13 ) ;
3757+ pub const PTP_SYS_OFFSET2 : :: c_uint = ioctl:: _IOW :: < ptp_sys_offset > ( PTP_CLK_MAGIC , 14 ) ;
3758+ pub const PTP_PIN_GETFUNC2 : :: c_uint = ioctl:: _IOWR :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 15 ) ;
3759+ pub const PTP_PIN_SETFUNC2 : :: c_uint = ioctl:: _IOW :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 16 ) ;
3760+ pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint =
3761+ ioctl:: _IOWR :: < ptp_sys_offset_precise > ( PTP_CLK_MAGIC , 17 ) ;
3762+ pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint =
3763+ ioctl:: _IOWR :: < ptp_sys_offset_extended > ( PTP_CLK_MAGIC , 18 ) ;
3764+ pub const PTP_MASK_CLEAR_ALL : :: c_uint = ioctl:: _IO ( PTP_CLK_MAGIC , 19 ) ;
3765+ pub const PTP_MASK_EN_SINGLE : :: c_uint = ioctl:: _IOW :: < :: c_uint > ( PTP_CLK_MAGIC , 20 ) ;
37823766
37833767// enum ptp_pin_function
37843768pub const PTP_PF_NONE : :: c_uint = 0 ;
@@ -5840,3 +5824,88 @@ cfg_if! {
58405824 pub use self :: non_exhaustive:: * ;
58415825 }
58425826}
5827+
5828+ mod ioctl {
5829+ const _IOC_NRBITS: u32 = 8 ;
5830+ const _IOC_TYPEBITS: u32 = 8 ;
5831+
5832+ // https://github.com/search?q=repo%3Atorvalds%2Flinux+%22%23define+_IOC_NONE%22&type=code
5833+ cfg_if ! {
5834+ if #[ cfg( any(
5835+ any( target_arch = "powerpc" , target_arch = "powerpc64" ) ,
5836+ any( target_arch = "sparc" , target_arch = "sparc64" ) ,
5837+ any( target_arch = "mips" , target_arch = "mips64" ) ,
5838+ ) ) ]
5839+ {
5840+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/powerpc/include/uapi/asm/ioctl.h
5841+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/sparc/include/uapi/asm/ioctl.h
5842+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/mips/include/uapi/asm/ioctl.h
5843+
5844+ const _IOC_SIZEBITS: u32 = 13 ;
5845+ const _IOC_DIRBITS: u32 = 3 ;
5846+
5847+ const _IOC_NONE: u32 = 1 ;
5848+ const _IOC_READ: u32 = 2 ;
5849+ const _IOC_WRITE: u32 = 4 ;
5850+ } else {
5851+ // https://github.com/torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/include/uapi/asm-generic/ioctl.h
5852+
5853+ const _IOC_SIZEBITS: u32 = 14 ;
5854+ const _IOC_DIRBITS: u32 = 2 ;
5855+
5856+ const _IOC_NONE: u32 = 0 ;
5857+ const _IOC_WRITE: u32 = 1 ;
5858+ const _IOC_READ: u32 = 2 ;
5859+ }
5860+ }
5861+
5862+ const _IOC_NRMASK: u32 = ( 1 << _IOC_NRBITS) - 1 ;
5863+ const _IOC_TYPEMASK: u32 = ( 1 << _IOC_TYPEBITS) - 1 ;
5864+ const _IOC_SIZEMASK: u32 = ( 1 << _IOC_SIZEBITS) - 1 ;
5865+ const _IOC_DIRMASK: u32 = ( 1 << _IOC_DIRBITS) - 1 ;
5866+
5867+ const _IOC_NRSHIFT: u32 = 0 ;
5868+ const _IOC_TYPESHIFT: u32 = _IOC_NRSHIFT + _IOC_NRBITS;
5869+ const _IOC_SIZESHIFT: u32 = _IOC_TYPESHIFT + _IOC_TYPEBITS;
5870+ const _IOC_DIRSHIFT: u32 = _IOC_SIZESHIFT + _IOC_SIZEBITS;
5871+
5872+ // adopted from https://github.com/torvalds/linux/blob/8a696a29c6905594e4abf78eaafcb62165ac61f1/rust/kernel/ioctl.rs
5873+
5874+ /// Build an ioctl number, analogous to the C macro of the same name.
5875+ #[ inline( always) ]
5876+ const fn _IOC ( dir : u32 , ty : u32 , nr : u32 , size : usize ) -> u32 {
5877+ debug_assert ! ( dir <= _IOC_DIRMASK) ;
5878+ debug_assert ! ( ty <= _IOC_TYPEMASK) ;
5879+ debug_assert ! ( nr <= _IOC_NRMASK) ;
5880+ debug_assert ! ( size <= ( _IOC_SIZEMASK as usize ) ) ;
5881+
5882+ ( dir << _IOC_DIRSHIFT)
5883+ | ( ty << _IOC_TYPESHIFT)
5884+ | ( nr << _IOC_NRSHIFT)
5885+ | ( ( size as u32 ) << _IOC_SIZESHIFT)
5886+ }
5887+
5888+ /// Build an ioctl number for an argumentless ioctl.
5889+ #[ inline( always) ]
5890+ pub const fn _IO ( ty : u32 , nr : u32 ) -> u32 {
5891+ _IOC ( _IOC_NONE, ty, nr, 0 )
5892+ }
5893+
5894+ /// Build an ioctl number for an read-only ioctl.
5895+ #[ inline( always) ]
5896+ pub const fn _IOR < T > ( ty : u32 , nr : u32 ) -> u32 {
5897+ _IOC ( _IOC_READ, ty, nr, core:: mem:: size_of :: < T > ( ) )
5898+ }
5899+
5900+ /// Build an ioctl number for an write-only ioctl.
5901+ #[ inline( always) ]
5902+ pub const fn _IOW < T > ( ty : u32 , nr : u32 ) -> u32 {
5903+ _IOC ( _IOC_WRITE, ty, nr, core:: mem:: size_of :: < T > ( ) )
5904+ }
5905+
5906+ /// Build an ioctl number for a read-write ioctl.
5907+ #[ inline( always) ]
5908+ pub const fn _IOWR < T > ( ty : u32 , nr : u32 ) -> u32 {
5909+ _IOC ( _IOC_READ | _IOC_WRITE, ty, nr, core:: mem:: size_of :: < T > ( ) )
5910+ }
5911+ }
0 commit comments