x86_64/
bootparam.rs

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