xref: /aosp_15_r20/external/crosvm/x86_64/src/bootparam.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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