@@ -3736,49 +3736,33 @@ pub const HWTSTAMP_FILTER_NTP_ALL: ::c_uint = 15;
3736
3736
// linux/ptp_clock.h
3737
3737
pub const PTP_MAX_SAMPLES : :: c_uint = 25 ; // Maximum allowed offset measurement samples.
3738
3738
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 ) ;
3782
3766
3783
3767
// enum ptp_pin_function
3784
3768
pub const PTP_PF_NONE : :: c_uint = 0 ;
@@ -5840,3 +5824,88 @@ cfg_if! {
5840
5824
pub use self :: non_exhaustive:: * ;
5841
5825
}
5842
5826
}
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