xref: /illumos-gate/usr/src/uts/intel/sys/bootinfo.h (revision 6554ec17858060401cf0f52e78b57fec69f7842d)
1  /*
2   * CDDL HEADER START
3   *
4   * The contents of this file are subject to the terms of the
5   * Common Development and Distribution License (the "License").
6   * You may not use this file except in compliance with the License.
7   *
8   * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9   * or http://www.opensolaris.org/os/licensing.
10   * See the License for the specific language governing permissions
11   * and limitations under the License.
12   *
13   * When distributing Covered Code, include this CDDL HEADER in each
14   * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15   * If applicable, add the following below this CDDL HEADER, with the
16   * fields enclosed by brackets "[]" replaced with your own identifying
17   * information: Portions Copyright [yyyy] [name of copyright owner]
18   *
19   * CDDL HEADER END
20   */
21  
22  /*
23   * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
24   * Use is subject to license terms.
25   */
26  
27  /*
28   * Copyright 2020 Joyent, Inc.
29   */
30  
31  #ifndef	_SYS_BOOTINFO_H
32  #define	_SYS_BOOTINFO_H
33  
34  #ifdef	__cplusplus
35  extern "C" {
36  #endif
37  
38  /*
39   * This is used by bootfs and dboot.  It should be at least as large as the
40   * number of modules that bootloaders (e.g., grub) can support.  This figure
41   * has been chosen to match grub's value exactly.
42   */
43  #define	MAX_BOOT_MODULES	99
44  
45  /*
46   * The 32-bit kernel loader code needs to build several structures that the
47   * kernel is expecting. They will contain native sized pointers for the
48   * target kernel.
49   */
50  
51  #if defined(_BOOT_TARGET_amd64)
52  
53  typedef uint64_t native_ptr_t;
54  
55  #elif defined(_BOOT_TARGET_i386)
56  
57  typedef uint32_t native_ptr_t;
58  
59  #elif defined(_KERNEL)
60  
61  typedef void *native_ptr_t;
62  
63  #endif
64  
65  typedef enum boot_module_type {
66  	BMT_ROOTFS,
67  	BMT_FILE,
68  	BMT_HASH,
69  	BMT_ENV,
70  	BMT_FONT
71  } boot_module_type_t;
72  
73  struct boot_memlist {
74  	uint64_t	addr;
75  	uint64_t	size;
76  	native_ptr_t	next;
77  	native_ptr_t	prev;
78  };
79  
80  /*
81   * The kernel needs to know how to find its modules.
82   */
83  struct boot_modules {
84  	native_ptr_t		bm_addr;
85  	native_ptr_t		bm_name;
86  	native_ptr_t		bm_hash;
87  	uint32_t		bm_size;
88  	boot_module_type_t	bm_type;
89  };
90  
91  /* To help to identify UEFI system. */
92  typedef enum uefi_arch_type {
93  	XBI_UEFI_ARCH_NONE,
94  	XBI_UEFI_ARCH_32,
95  	XBI_UEFI_ARCH_64
96  } uefi_arch_type_t;
97  /*
98   *
99   */
100  #pragma pack(1)
101  struct xboot_info {
102  	uint64_t	bi_next_paddr;	/* next physical address not used */
103  	native_ptr_t	bi_next_vaddr;	/* next virtual address not used */
104  	native_ptr_t	bi_cmdline;
105  	native_ptr_t	bi_phys_install;
106  	native_ptr_t	bi_rsvdmem;
107  	native_ptr_t	bi_pcimem;
108  	native_ptr_t	bi_modules;
109  	uint32_t	bi_module_cnt;
110  	uint32_t	bi_use_largepage;	/* MMU uses large pages */
111  	uint32_t	bi_use_pae;	/* MMU uses PAE mode (8 byte PTES) */
112  	uint32_t	bi_use_nx;	/* MMU uses NX bit in PTEs */
113  	uint32_t	bi_use_pge;	/* MMU uses Page Global Enable */
114  	native_ptr_t	bi_pt_window;
115  	native_ptr_t	bi_pte_to_pt_window;
116  	native_ptr_t	bi_kseg_size;	/* size used for kernel nucleus pages */
117  	uint64_t	bi_top_page_table;
118  #if defined(__xpv)
119  	native_ptr_t	bi_xen_start_info;
120  	native_ptr_t	bi_shared_info;		/* VA for shared_info */
121  #else
122  	native_ptr_t	bi_mb_info;		/* multiboot 1 or 2 info */
123  	int		bi_mb_version;		/* multiboot version */
124  	native_ptr_t	bi_acpi_rsdp;
125  	native_ptr_t	bi_acpi_rsdp_copy;
126  	native_ptr_t	bi_smbios;
127  	native_ptr_t	bi_uefi_systab;
128  	uefi_arch_type_t bi_uefi_arch;
129  #endif
130  	native_ptr_t	bi_framebuffer;
131  };
132  #pragma pack()
133  
134  #ifdef	__cplusplus
135  }
136  #endif
137  
138  #endif	/* _SYS_BOOTINFO_H */
139