@@ -4581,6 +4581,36 @@ pub const HWTSTAMP_FILTER_NTP_ALL: ::c_uint = 15;
4581
4581
// linux/ptp_clock.h
4582
4582
pub const PTP_MAX_SAMPLES : :: c_uint = 25 ; // Maximum allowed offset measurement samples.
4583
4583
4584
+ const PTP_CLK_MAGIC : u32 = b'=' as u32 ;
4585
+
4586
+ // FIXME: needs the ptp_clock_caps struct
4587
+ // pub const PTP_CLOCK_GETCAPS: ::c_uint = _IOR::<ptp_clock_caps>(PTP_CLK_MAGIC, 1);
4588
+ pub const PTP_EXTTS_REQUEST : :: c_uint = _IOW :: < ptp_extts_request > ( PTP_CLK_MAGIC , 2 ) ;
4589
+ pub const PTP_PEROUT_REQUEST : :: c_uint = _IOW :: < ptp_perout_request > ( PTP_CLK_MAGIC , 3 ) ;
4590
+ pub const PTP_ENABLE_PPS : :: c_uint = _IOW :: < :: c_int > ( PTP_CLK_MAGIC , 4 ) ;
4591
+ pub const PTP_SYS_OFFSET : :: c_uint = _IOW :: < ptp_sys_offset > ( PTP_CLK_MAGIC , 5 ) ;
4592
+ pub const PTP_PIN_GETFUNC : :: c_uint = _IOWR :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 6 ) ;
4593
+ pub const PTP_PIN_SETFUNC : :: c_uint = _IOW :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 7 ) ;
4594
+ pub const PTP_SYS_OFFSET_PRECISE : :: c_uint = _IOWR :: < ptp_sys_offset_precise > ( PTP_CLK_MAGIC , 8 ) ;
4595
+ pub const PTP_SYS_OFFSET_EXTENDED : :: c_uint = _IOWR :: < ptp_sys_offset_extended > ( PTP_CLK_MAGIC , 9 ) ;
4596
+
4597
+ // FIXME: needs the ptp_clock_caps struct
4598
+ // pub const PTP_CLOCK_GETCAPS2: ::c_uint = _IOR::<ptp_clock_caps>(PTP_CLK_MAGIC, 10);
4599
+ pub const PTP_EXTTS_REQUEST2 : :: c_uint = _IOW :: < ptp_extts_request > ( PTP_CLK_MAGIC , 11 ) ;
4600
+ pub const PTP_PEROUT_REQUEST2 : :: c_uint = _IOW :: < ptp_perout_request > ( PTP_CLK_MAGIC , 12 ) ;
4601
+ pub const PTP_ENABLE_PPS2 : :: c_uint = _IOW :: < :: c_int > ( PTP_CLK_MAGIC , 13 ) ;
4602
+ pub const PTP_SYS_OFFSET2 : :: c_uint = _IOW :: < ptp_sys_offset > ( PTP_CLK_MAGIC , 14 ) ;
4603
+ pub const PTP_PIN_GETFUNC2 : :: c_uint = _IOWR :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 15 ) ;
4604
+ pub const PTP_PIN_SETFUNC2 : :: c_uint = _IOW :: < ptp_pin_desc > ( PTP_CLK_MAGIC , 16 ) ;
4605
+ pub const PTP_SYS_OFFSET_PRECISE2 : :: c_uint = _IOWR :: < ptp_sys_offset_precise > ( PTP_CLK_MAGIC , 17 ) ;
4606
+ pub const PTP_SYS_OFFSET_EXTENDED2 : :: c_uint = _IOWR :: < ptp_sys_offset_extended > ( PTP_CLK_MAGIC , 18 ) ;
4607
+
4608
+ // enum ptp_pin_function
4609
+ pub const PTP_PF_NONE : :: c_uint = 0 ;
4610
+ pub const PTP_PF_EXTTS : :: c_uint = 1 ;
4611
+ pub const PTP_PF_PEROUT : :: c_uint = 2 ;
4612
+ pub const PTP_PF_PHYSYNC : :: c_uint = 3 ;
4613
+
4584
4614
// linux/tls.h
4585
4615
pub const TLS_TX : :: c_int = 1 ;
4586
4616
pub const TLS_RX : :: c_int = 2 ;
@@ -5635,6 +5665,86 @@ pub const SCHED_FLAG_ALL: ::c_int = SCHED_FLAG_RESET_ON_FORK
5635
5665
pub const EPIOCSPARAMS : :: Ioctl = 0x40088a01 ;
5636
5666
pub const EPIOCGPARAMS : :: Ioctl = 0x80088a02 ;
5637
5667
5668
+ const _IOC_NRBITS: u32 = 8 ;
5669
+ const _IOC_TYPEBITS: u32 = 8 ;
5670
+
5671
+ // https://github.com./search?q=repo%3Atorvalds%2Flinux+%22%23define+_IOC_NONE%22&type=code
5672
+ cfg_if ! {
5673
+ if #[ cfg( any(
5674
+ any( target_arch = "powerpc" , target_arch = "powerpc64" ) ,
5675
+ any( target_arch = "sparc" , target_arch = "sparc64" ) ,
5676
+ any( target_arch = "mips" , target_arch = "mips64" ) ,
5677
+ ) ) ] {
5678
+ // https://github.com./torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/powerpc/include/uapi/asm/ioctl.h
5679
+ // https://github.com./torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/sparc/include/uapi/asm/ioctl.h
5680
+ // https://github.com./torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/arch/mips/include/uapi/asm/ioctl.h
5681
+
5682
+ const _IOC_SIZEBITS: u32 = 13 ;
5683
+ const _IOC_DIRBITS: u32 = 3 ;
5684
+
5685
+ const _IOC_NONE: u32 = 1 ;
5686
+ const _IOC_READ: u32 = 2 ;
5687
+ const _IOC_WRITE: u32 = 4 ;
5688
+ } else {
5689
+ // https://github.com./torvalds/linux/blob/b311c1b497e51a628aa89e7cb954481e5f9dced2/include/uapi/asm-generic/ioctl.h
5690
+
5691
+ const _IOC_SIZEBITS: u32 = 14 ;
5692
+ const _IOC_DIRBITS: u32 = 2 ;
5693
+
5694
+ const _IOC_NONE: u32 = 0 ;
5695
+ const _IOC_WRITE: u32 = 1 ;
5696
+ const _IOC_READ: u32 = 2 ;
5697
+ }
5698
+ }
5699
+
5700
+ const _IOC_NRMASK: u32 = ( 1 << _IOC_NRBITS) - 1 ;
5701
+ const _IOC_TYPEMASK: u32 = ( 1 << _IOC_TYPEBITS) - 1 ;
5702
+ const _IOC_SIZEMASK: u32 = ( 1 << _IOC_SIZEBITS) - 1 ;
5703
+ const _IOC_DIRMASK: u32 = ( 1 << _IOC_DIRBITS) - 1 ;
5704
+
5705
+ const _IOC_NRSHIFT: u32 = 0 ;
5706
+ const _IOC_TYPESHIFT: u32 = _IOC_NRSHIFT + _IOC_NRBITS;
5707
+ const _IOC_SIZESHIFT: u32 = _IOC_TYPESHIFT + _IOC_TYPEBITS;
5708
+ const _IOC_DIRSHIFT: u32 = _IOC_SIZESHIFT + _IOC_SIZEBITS;
5709
+
5710
+ // adapted from https://github.com./torvalds/linux/blob/8a696a29c6905594e4abf78eaafcb62165ac61f1/rust/kernel/ioctl.rs
5711
+
5712
+ /// Build an ioctl number, analogous to the C macro of the same name.
5713
+ const fn _IOC ( dir : u32 , ty : u32 , nr : u32 , size : usize ) -> u32 {
5714
+ // FIXME(ctest) the `garando_syntax` crate (used by ctest2 in the CI test suite)
5715
+ // cannot currently parse these `debug_assert!`s
5716
+ //
5717
+ // debug_assert!(dir <= _IOC_DIRMASK);
5718
+ // debug_assert!(ty <= _IOC_TYPEMASK);
5719
+ // debug_assert!(nr <= _IOC_NRMASK);
5720
+ // debug_assert!(size <= (_IOC_SIZEMASK as usize));
5721
+
5722
+ ( dir << _IOC_DIRSHIFT)
5723
+ | ( ty << _IOC_TYPESHIFT)
5724
+ | ( nr << _IOC_NRSHIFT)
5725
+ | ( ( size as u32 ) << _IOC_SIZESHIFT)
5726
+ }
5727
+
5728
+ /// Build an ioctl number for an argumentless ioctl.
5729
+ pub ( crate ) const fn _IO ( ty : u32 , nr : u32 ) -> u32 {
5730
+ _IOC ( _IOC_NONE, ty, nr, 0 )
5731
+ }
5732
+
5733
+ /// Build an ioctl number for an read-only ioctl.
5734
+ pub ( crate ) const fn _IOR < T > ( ty : u32 , nr : u32 ) -> u32 {
5735
+ _IOC ( _IOC_READ, ty, nr, core:: mem:: size_of :: < T > ( ) )
5736
+ }
5737
+
5738
+ /// Build an ioctl number for an write-only ioctl.
5739
+ pub ( crate ) const fn _IOW < T > ( ty : u32 , nr : u32 ) -> u32 {
5740
+ _IOC ( _IOC_WRITE, ty, nr, core:: mem:: size_of :: < T > ( ) )
5741
+ }
5742
+
5743
+ /// Build an ioctl number for a read-write ioctl.
5744
+ pub ( crate ) const fn _IOWR < T > ( ty : u32 , nr : u32 ) -> u32 {
5745
+ _IOC ( _IOC_READ | _IOC_WRITE, ty, nr, core:: mem:: size_of :: < T > ( ) )
5746
+ }
5747
+
5638
5748
f ! {
5639
5749
pub fn NLA_ALIGN ( len: :: c_int) -> :: c_int {
5640
5750
return ( ( len) + NLA_ALIGNTO - 1 ) & !( NLA_ALIGNTO - 1 ) ;
0 commit comments