1 // Copyright 2017 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 /* 6 * automatically generated by bindgen 7 * From chromeos-linux v4.19 8 * $ bindgen \ 9 * --no-layout-tests --with-derive-default --no-doc-comments \ 10 * --allowlist-type boot_params --allowlist-type setup_data \ 11 * arch/x86/include/uapi/asm/bootparam.h 12 */ 13 14 // Editted to derive zerocopy traits, should migrate to bindgen when 15 // its command line support adding custom derives. Currently bindgen 16 // only support deriving custom traits with build.rs, and we don't want 17 // to run build.rs bindgen on kernel. 18 19 use zerocopy::AsBytes; 20 use zerocopy::FromBytes; 21 use zerocopy::FromZeroes; 22 23 /// Set if kernel image has a 64-bit entry point at 0x200. 24 pub const XLF_KERNEL_64: u16 = 1 << 0; 25 /// Set if kernel/boot_params/cmdline/ramdisk can be above 4G. 26 pub const XLF_CAN_BE_LOADED_ABOVE_4G: u16 = 1 << 1; 27 28 #[repr(C)] 29 #[derive(Default)] 30 pub struct __IncompleteArrayField<T>(::std::marker::PhantomData<T>, [T; 0]); 31 impl<T> __IncompleteArrayField<T> { 32 #[inline] new() -> Self33 pub fn new() -> Self { 34 __IncompleteArrayField(::std::marker::PhantomData, []) 35 } 36 /// # Safety 37 /// 38 /// Caller must ensure that Self`s size, alignment and lifetime are 39 /// compatible with returned values requirements. 40 #[inline] as_ptr(&self) -> *const T41 pub unsafe fn as_ptr(&self) -> *const T { 42 ::std::mem::transmute(self) 43 } 44 /// # Safety 45 /// 46 /// Caller must ensure that Self`s size, alignment and lifetime are 47 /// compatible with returned values requirements. 48 #[inline] as_mut_ptr(&mut self) -> *mut T49 pub unsafe fn as_mut_ptr(&mut self) -> *mut T { 50 ::std::mem::transmute(self) 51 } 52 /// # Safety 53 /// 54 /// Caller must ensure that Self`s size, alignment and lifetime are 55 /// compatible with returned values requirements. 56 #[inline] as_slice(&self, len: usize) -> &[T]57 pub unsafe fn as_slice(&self, len: usize) -> &[T] { 58 ::std::slice::from_raw_parts(self.as_ptr(), len) 59 } 60 #[inline] 61 /// # Safety 62 /// 63 /// Caller must ensure that Self`s size, alignment and lifetime are 64 /// compatible with returned values requirements. as_mut_slice(&mut self, len: usize) -> &mut [T]65 pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] { 66 ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len) 67 } 68 } 69 impl<T> ::std::fmt::Debug for __IncompleteArrayField<T> { fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result70 fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { 71 fmt.write_str("__IncompleteArrayField") 72 } 73 } 74 impl<T> ::std::clone::Clone for __IncompleteArrayField<T> { 75 #[inline] clone(&self) -> Self76 fn clone(&self) -> Self { 77 Self::new() 78 } 79 } 80 pub type __u8 = ::std::os::raw::c_uchar; 81 pub type __u16 = ::std::os::raw::c_ushort; 82 pub type __u32 = ::std::os::raw::c_uint; 83 pub type __u64 = ::std::os::raw::c_ulonglong; 84 #[repr(C, packed)] 85 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 86 pub struct screen_info { 87 pub orig_x: __u8, 88 pub orig_y: __u8, 89 pub ext_mem_k: __u16, 90 pub orig_video_page: __u16, 91 pub orig_video_mode: __u8, 92 pub orig_video_cols: __u8, 93 pub flags: __u8, 94 pub unused2: __u8, 95 pub orig_video_ega_bx: __u16, 96 pub unused3: __u16, 97 pub orig_video_lines: __u8, 98 pub orig_video_isVGA: __u8, 99 pub orig_video_points: __u16, 100 pub lfb_width: __u16, 101 pub lfb_height: __u16, 102 pub lfb_depth: __u16, 103 pub lfb_base: __u32, 104 pub lfb_size: __u32, 105 pub cl_magic: __u16, 106 pub cl_offset: __u16, 107 pub lfb_linelength: __u16, 108 pub red_size: __u8, 109 pub red_pos: __u8, 110 pub green_size: __u8, 111 pub green_pos: __u8, 112 pub blue_size: __u8, 113 pub blue_pos: __u8, 114 pub rsvd_size: __u8, 115 pub rsvd_pos: __u8, 116 pub vesapm_seg: __u16, 117 pub vesapm_off: __u16, 118 pub pages: __u16, 119 pub vesa_attributes: __u16, 120 pub capabilities: __u32, 121 pub ext_lfb_base: __u32, 122 pub _reserved: [__u8; 2usize], 123 } 124 #[repr(C)] 125 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 126 pub struct apm_bios_info { 127 pub version: __u16, 128 pub cseg: __u16, 129 pub offset: __u32, 130 pub cseg_16: __u16, 131 pub dseg: __u16, 132 pub flags: __u16, 133 pub cseg_len: __u16, 134 pub cseg_16_len: __u16, 135 pub dseg_len: __u16, 136 } 137 #[repr(C, packed)] 138 #[derive(Copy, Clone, FromZeroes, FromBytes, AsBytes)] 139 pub struct edd_device_params { 140 pub length: __u16, 141 pub info_flags: __u16, 142 pub num_default_cylinders: __u32, 143 pub num_default_heads: __u32, 144 pub sectors_per_track: __u32, 145 pub number_of_sectors: __u64, 146 pub bytes_per_sector: __u16, 147 pub dpte_ptr: __u32, 148 pub key: __u16, 149 pub device_path_info_length: __u8, 150 pub reserved2: __u8, 151 pub reserved3: __u16, 152 pub host_bus_type: [__u8; 4usize], 153 pub interface_type: [__u8; 8usize], 154 pub interface_path: edd_device_params__bindgen_ty_1, 155 pub device_path: edd_device_params__bindgen_ty_2, 156 pub reserved4: __u8, 157 pub checksum: __u8, 158 } 159 #[repr(C)] 160 #[derive(Copy, Clone, FromZeroes, FromBytes, AsBytes)] 161 pub union edd_device_params__bindgen_ty_1 { 162 pub isa: edd_device_params__bindgen_ty_1__bindgen_ty_1, 163 pub pci: edd_device_params__bindgen_ty_1__bindgen_ty_2, 164 pub ibnd: edd_device_params__bindgen_ty_1__bindgen_ty_3, 165 pub xprs: edd_device_params__bindgen_ty_1__bindgen_ty_4, 166 pub htpt: edd_device_params__bindgen_ty_1__bindgen_ty_5, 167 pub unknown: edd_device_params__bindgen_ty_1__bindgen_ty_6, 168 _bindgen_union_align: [u8; 8usize], 169 } 170 #[repr(C, packed)] 171 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 172 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_1 { 173 pub base_address: __u16, 174 pub reserved1: __u16, 175 pub reserved2: __u32, 176 } 177 #[repr(C, packed)] 178 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 179 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_2 { 180 pub bus: __u8, 181 pub slot: __u8, 182 pub function: __u8, 183 pub channel: __u8, 184 pub reserved: __u32, 185 } 186 #[repr(C, packed)] 187 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 188 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_3 { 189 pub reserved: __u64, 190 } 191 #[repr(C, packed)] 192 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 193 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_4 { 194 pub reserved: __u64, 195 } 196 #[repr(C, packed)] 197 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 198 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_5 { 199 pub reserved: __u64, 200 } 201 #[repr(C, packed)] 202 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 203 pub struct edd_device_params__bindgen_ty_1__bindgen_ty_6 { 204 pub reserved: __u64, 205 } 206 impl Default for edd_device_params__bindgen_ty_1 { default() -> Self207 fn default() -> Self { 208 // SAFETY: trivially safe 209 unsafe { ::std::mem::zeroed() } 210 } 211 } 212 #[repr(C)] 213 #[derive(Copy, Clone, FromZeroes, FromBytes, AsBytes)] 214 pub union edd_device_params__bindgen_ty_2 { 215 pub ata: edd_device_params__bindgen_ty_2__bindgen_ty_1, 216 pub atapi: edd_device_params__bindgen_ty_2__bindgen_ty_2, 217 pub scsi: edd_device_params__bindgen_ty_2__bindgen_ty_3, 218 pub usb: edd_device_params__bindgen_ty_2__bindgen_ty_4, 219 pub i1394: edd_device_params__bindgen_ty_2__bindgen_ty_5, 220 pub fibre: edd_device_params__bindgen_ty_2__bindgen_ty_6, 221 pub i2o: edd_device_params__bindgen_ty_2__bindgen_ty_7, 222 pub raid: edd_device_params__bindgen_ty_2__bindgen_ty_8, 223 pub sata: edd_device_params__bindgen_ty_2__bindgen_ty_9, 224 pub unknown: edd_device_params__bindgen_ty_2__bindgen_ty_10, 225 _bindgen_union_align: [u8; 16usize], 226 } 227 #[repr(C, packed)] 228 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 229 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_1 { 230 pub device: __u8, 231 pub reserved1: __u8, 232 pub reserved2: __u16, 233 pub reserved3: __u32, 234 pub reserved4: __u64, 235 } 236 #[repr(C, packed)] 237 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 238 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_2 { 239 pub device: __u8, 240 pub lun: __u8, 241 pub reserved1: __u8, 242 pub reserved2: __u8, 243 pub reserved3: __u32, 244 pub reserved4: __u64, 245 } 246 #[repr(C, packed)] 247 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 248 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_3 { 249 pub id: __u16, 250 pub lun: __u64, 251 pub reserved1: __u16, 252 pub reserved2: __u32, 253 } 254 #[repr(C, packed)] 255 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 256 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_4 { 257 pub serial_number: __u64, 258 pub reserved: __u64, 259 } 260 #[repr(C, packed)] 261 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 262 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_5 { 263 pub eui: __u64, 264 pub reserved: __u64, 265 } 266 #[repr(C, packed)] 267 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 268 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_6 { 269 pub wwid: __u64, 270 pub lun: __u64, 271 } 272 #[repr(C, packed)] 273 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 274 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_7 { 275 pub identity_tag: __u64, 276 pub reserved: __u64, 277 } 278 #[repr(C, packed)] 279 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 280 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_8 { 281 pub array_number: __u32, 282 pub reserved1: __u32, 283 pub reserved2: __u64, 284 } 285 #[repr(C, packed)] 286 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 287 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_9 { 288 pub device: __u8, 289 pub reserved1: __u8, 290 pub reserved2: __u16, 291 pub reserved3: __u32, 292 pub reserved4: __u64, 293 } 294 #[repr(C, packed)] 295 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 296 pub struct edd_device_params__bindgen_ty_2__bindgen_ty_10 { 297 pub reserved1: __u64, 298 pub reserved2: __u64, 299 } 300 impl Default for edd_device_params__bindgen_ty_2 { default() -> Self301 fn default() -> Self { 302 // SAFETY: trivially safe 303 unsafe { ::std::mem::zeroed() } 304 } 305 } 306 impl Default for edd_device_params { default() -> Self307 fn default() -> Self { 308 // SAFETY: trivially safe 309 unsafe { ::std::mem::zeroed() } 310 } 311 } 312 #[repr(C, packed)] 313 #[derive(Copy, Clone, FromZeroes, FromBytes, AsBytes)] 314 pub struct edd_info { 315 pub device: __u8, 316 pub version: __u8, 317 pub interface_support: __u16, 318 pub legacy_max_cylinder: __u16, 319 pub legacy_max_head: __u8, 320 pub legacy_sectors_per_track: __u8, 321 pub params: edd_device_params, 322 } 323 impl Default for edd_info { default() -> Self324 fn default() -> Self { 325 // SAFETY: trivially safe 326 unsafe { ::std::mem::zeroed() } 327 } 328 } 329 #[repr(C)] 330 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 331 pub struct ist_info { 332 pub signature: __u32, 333 pub command: __u32, 334 pub event: __u32, 335 pub perf_level: __u32, 336 } 337 #[repr(C)] 338 #[derive(Copy, Clone, AsBytes, FromZeroes, FromBytes)] 339 pub struct edid_info { 340 pub dummy: [::std::os::raw::c_uchar; 128usize], 341 } 342 impl Default for edid_info { default() -> Self343 fn default() -> Self { 344 // SAFETY: trivially safe 345 unsafe { ::std::mem::zeroed() } 346 } 347 } 348 #[repr(C)] 349 #[derive(Debug, Default)] 350 pub struct setup_data { 351 pub next: __u64, 352 pub type_: __u32, 353 pub len: __u32, 354 pub data: __IncompleteArrayField<__u8>, 355 } 356 #[repr(C, packed)] 357 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 358 pub struct setup_header { 359 pub setup_sects: __u8, 360 pub root_flags: __u16, 361 pub syssize: __u32, 362 pub ram_size: __u16, 363 pub vid_mode: __u16, 364 pub root_dev: __u16, 365 pub boot_flag: __u16, 366 pub jump: __u16, 367 pub header: __u32, 368 pub version: __u16, 369 pub realmode_swtch: __u32, 370 pub start_sys_seg: __u16, 371 pub kernel_version: __u16, 372 pub type_of_loader: __u8, 373 pub loadflags: __u8, 374 pub setup_move_size: __u16, 375 pub code32_start: __u32, 376 pub ramdisk_image: __u32, 377 pub ramdisk_size: __u32, 378 pub bootsect_kludge: __u32, 379 pub heap_end_ptr: __u16, 380 pub ext_loader_ver: __u8, 381 pub ext_loader_type: __u8, 382 pub cmd_line_ptr: __u32, 383 pub initrd_addr_max: __u32, 384 pub kernel_alignment: __u32, 385 pub relocatable_kernel: __u8, 386 pub min_alignment: __u8, 387 pub xloadflags: __u16, 388 pub cmdline_size: __u32, 389 pub hardware_subarch: __u32, 390 pub hardware_subarch_data: __u64, 391 pub payload_offset: __u32, 392 pub payload_length: __u32, 393 pub setup_data: __u64, 394 pub pref_address: __u64, 395 pub init_size: __u32, 396 pub handover_offset: __u32, 397 } 398 #[repr(C)] 399 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 400 pub struct sys_desc_table { 401 pub length: __u16, 402 pub table: [__u8; 14usize], 403 } 404 #[repr(C, packed)] 405 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 406 pub struct olpc_ofw_header { 407 pub ofw_magic: __u32, 408 pub ofw_version: __u32, 409 pub cif_handler: __u32, 410 pub irq_desc_table: __u32, 411 } 412 #[repr(C)] 413 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 414 pub struct efi_info { 415 pub efi_loader_signature: __u32, 416 pub efi_systab: __u32, 417 pub efi_memdesc_size: __u32, 418 pub efi_memdesc_version: __u32, 419 pub efi_memmap: __u32, 420 pub efi_memmap_size: __u32, 421 pub efi_systab_hi: __u32, 422 pub efi_memmap_hi: __u32, 423 } 424 #[repr(C, packed)] 425 #[derive(Debug, Default, Copy, Clone, FromZeroes, FromBytes, AsBytes)] 426 pub struct boot_e820_entry { 427 pub addr: __u64, 428 pub size: __u64, 429 pub type_: __u32, 430 } 431 #[repr(C, packed)] 432 #[derive(Copy, Clone, FromZeroes, FromBytes, AsBytes)] 433 pub struct boot_params { 434 pub screen_info: screen_info, 435 pub apm_bios_info: apm_bios_info, 436 pub _pad2: [__u8; 4usize], 437 pub tboot_addr: __u64, 438 pub ist_info: ist_info, 439 pub acpi_rsdp_addr: __u64, 440 pub _pad3: [__u8; 8usize], 441 pub hd0_info: [__u8; 16usize], 442 pub hd1_info: [__u8; 16usize], 443 pub sys_desc_table: sys_desc_table, 444 pub olpc_ofw_header: olpc_ofw_header, 445 pub ext_ramdisk_image: __u32, 446 pub ext_ramdisk_size: __u32, 447 pub ext_cmd_line_ptr: __u32, 448 pub _pad4: [__u8; 116usize], 449 pub edid_info: edid_info, 450 pub efi_info: efi_info, 451 pub alt_mem_k: __u32, 452 pub scratch: __u32, 453 pub e820_entries: __u8, 454 pub eddbuf_entries: __u8, 455 pub edd_mbr_sig_buf_entries: __u8, 456 pub kbd_status: __u8, 457 pub secure_boot: __u8, 458 pub _pad5: [__u8; 2usize], 459 pub sentinel: __u8, 460 pub _pad6: [__u8; 1usize], 461 pub hdr: setup_header, 462 pub _pad7: [__u8; 40usize], 463 pub edd_mbr_sig_buffer: [__u32; 16usize], 464 pub e820_table: [boot_e820_entry; 128usize], 465 pub _pad8: [__u8; 48usize], 466 pub eddbuf: [edd_info; 6usize], 467 pub _pad9: [__u8; 276usize], 468 } 469 impl Default for boot_params { default() -> Self470 fn default() -> Self { 471 // SAFETY: trivially safe 472 unsafe { ::std::mem::zeroed() } 473 } 474 } 475