1 use super::*; 2 3 // The following are preprocessor constants that bindgen can't figure out, so we enter them manually 4 // from <linux/userfaultfd.h>, and have tests to make sure they're accurate. 5 6 pub const UFFD_API: u64 = 0xAA; 7 pub const UFFD_API_FEATURES: u64 = UFFD_FEATURE_EVENT_FORK 8 | UFFD_FEATURE_EVENT_REMAP 9 | UFFD_FEATURE_EVENT_REMOVE 10 | UFFD_FEATURE_EVENT_UNMAP 11 | UFFD_FEATURE_MISSING_HUGETLBFS 12 | UFFD_FEATURE_MISSING_SHMEM; 13 14 pub const UFFD_API_IOCTLS: u64 = 1 << _UFFDIO_REGISTER | 1 << _UFFDIO_UNREGISTER | 1 << _UFFDIO_API; 15 pub const UFFD_API_RANGE_IOCTLS: u64 = 16 1 << _UFFDIO_WAKE | 1 << _UFFDIO_COPY | 1 << _UFFDIO_ZEROPAGE; 17 18 pub const UFFDIO_REGISTER_MODE_MISSING: u64 = 1 << 0; 19 pub const UFFDIO_REGISTER_MODE_WP: u64 = 1 << 1; 20 21 pub const UFFDIO_COPY_MODE_DONTWAKE: u64 = 1 << 0; 22 pub const UFFDIO_COPY_MODE_WP: u64 = 1 << 1; 23 24 pub const UFFDIO_ZEROPAGE_MODE_DONTWAKE: u64 = 1 << 0; 25 26 pub const UFFDIO_API: u32 = 0xc018aa3f; 27 pub const UFFDIO_REGISTER: u32 = 0xc020aa00; 28 pub const UFFDIO_UNREGISTER: u32 = 0x8010aa01; 29 pub const UFFDIO_WAKE: u32 = 0x8010aa02; 30 pub const UFFDIO_COPY: u32 = 0xc028aa03; 31 pub const UFFDIO_ZEROPAGE: u32 = 0xc020aa04; 32 pub const UFFDIO_WRITEPROTECT: u32 = 0xc018aa06; 33 34 #[cfg(test)] 35 mod const_tests { 36 use super::*; 37 38 extern "C" { 39 static _const_UFFD_API: u64; 40 static _const_UFFD_API_FEATURES: u64; 41 static _const_UFFD_API_IOCTLS: u64; 42 static _const_UFFD_API_RANGE_IOCTLS: u64; 43 static _const_UFFDIO_REGISTER_MODE_MISSING: u64; 44 static _const_UFFDIO_REGISTER_MODE_WP: u64; 45 static _const_UFFDIO_COPY_MODE_DONTWAKE: u64; 46 static _const_UFFDIO_COPY_MODE_WP: u64; 47 static _const_UFFDIO_ZEROPAGE_MODE_DONTWAKE: u64; 48 static _const_UFFDIO_API: u32; 49 static _const_UFFDIO_REGISTER: u32; 50 static _const_UFFDIO_UNREGISTER: u32; 51 static _const_UFFDIO_WAKE: u32; 52 static _const_UFFDIO_COPY: u32; 53 static _const_UFFDIO_ZEROPAGE: u32; 54 static _const_UFFDIO_WRITEPROTECT: u32; 55 } 56 57 #[test] consts_correct()58 fn consts_correct() { 59 unsafe { 60 assert_eq!(UFFD_API, _const_UFFD_API, "UFFD_API"); 61 assert_eq!( 62 UFFD_API_FEATURES, _const_UFFD_API_FEATURES, 63 "UFFD_API_FEATURES" 64 ); 65 assert_eq!(UFFD_API_IOCTLS, _const_UFFD_API_IOCTLS, "UFFD_API_IOCTLS"); 66 assert_eq!( 67 UFFD_API_RANGE_IOCTLS, _const_UFFD_API_RANGE_IOCTLS, 68 "UFFD_API_RANGE_IOCTLS" 69 ); 70 assert_eq!( 71 UFFDIO_REGISTER_MODE_MISSING, _const_UFFDIO_REGISTER_MODE_MISSING, 72 "UFFDIO_REGISTER_MODE_MISSING" 73 ); 74 assert_eq!( 75 UFFDIO_REGISTER_MODE_WP, _const_UFFDIO_REGISTER_MODE_WP, 76 "UFFDIO_REGISTER_MODE_WP" 77 ); 78 assert_eq!( 79 UFFDIO_COPY_MODE_DONTWAKE, _const_UFFDIO_COPY_MODE_DONTWAKE, 80 "UFFDIO_COPY_MODE_DONTWAKE" 81 ); 82 assert_eq!( 83 UFFDIO_COPY_MODE_WP, _const_UFFDIO_COPY_MODE_WP, 84 "UFFDIO_COPY_MODE_WP" 85 ); 86 assert_eq!( 87 UFFDIO_ZEROPAGE_MODE_DONTWAKE, _const_UFFDIO_ZEROPAGE_MODE_DONTWAKE, 88 "UFFDIO_ZEROPAGE_MODE_DONTWAKE" 89 ); 90 assert_eq!(UFFDIO_API, _const_UFFDIO_API, "UFFDIO_API"); 91 assert_eq!(UFFDIO_REGISTER, _const_UFFDIO_REGISTER, "UFFDIO_REGISTER"); 92 assert_eq!( 93 UFFDIO_UNREGISTER, _const_UFFDIO_UNREGISTER, 94 "UFFDIO_UNREGISTER" 95 ); 96 assert_eq!(UFFDIO_WAKE, _const_UFFDIO_WAKE, "UFFDIO_WAKE"); 97 assert_eq!(UFFDIO_COPY, _const_UFFDIO_COPY, "UFFDIO_COPY"); 98 assert_eq!(UFFDIO_ZEROPAGE, _const_UFFDIO_ZEROPAGE, "UFFDIO_ZEROPAGE"); 99 assert_eq!( 100 UFFDIO_WRITEPROTECT, _const_UFFDIO_WRITEPROTECT, 101 "UFFDIO_WRITEPROTECT" 102 ); 103 } 104 } 105 } 106