1 /* $NetBSD: bootinfo.h,v 1.23 2013/08/30 16:42:17 jmcneill Exp $ */ 2 3 /* 4 * Copyright (c) 1997 5 * Matthias Drochner. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * 27 */ 28 29 #define BTINFO_BOOTPATH 0 30 #define BTINFO_ROOTDEVICE 1 31 #define BTINFO_BOOTDISK 3 32 #define BTINFO_NETIF 4 33 #define BTINFO_CONSOLE 6 34 #define BTINFO_BIOSGEOM 7 35 #define BTINFO_SYMTAB 8 36 #define BTINFO_MEMMAP 9 37 #define BTINFO_BOOTWEDGE 10 38 #define BTINFO_MODULELIST 11 39 #define BTINFO_FRAMEBUFFER 12 40 #define BTINFO_USERCONFCOMMANDS 13 41 42 #ifndef _LOCORE 43 44 struct btinfo_common { 45 int len; 46 int type; 47 }; 48 49 struct btinfo_bootpath { 50 struct btinfo_common common; 51 char bootpath[80]; 52 }; 53 54 struct btinfo_rootdevice { 55 struct btinfo_common common; 56 char devname[16]; 57 }; 58 59 struct btinfo_bootdisk { 60 struct btinfo_common common; 61 int labelsector; /* label valid if != -1 */ 62 struct { 63 uint16_t type, checksum; 64 char packname[16]; 65 } label; 66 int biosdev; 67 int partition; 68 }; 69 70 struct btinfo_bootwedge { 71 struct btinfo_common common; 72 int biosdev; 73 daddr_t startblk; 74 uint64_t nblks; 75 daddr_t matchblk; 76 uint64_t matchnblks; 77 uint8_t matchhash[16]; /* MD5 hash */ 78 } __packed; 79 80 struct btinfo_netif { 81 struct btinfo_common common; 82 char ifname[16]; 83 int bus; 84 #define BI_BUS_ISA 0 85 #define BI_BUS_PCI 1 86 union { 87 unsigned int iobase; /* ISA */ 88 unsigned int tag; /* PCI, BIOS format */ 89 } addr; 90 }; 91 92 struct btinfo_console { 93 struct btinfo_common common; 94 char devname[16]; 95 int addr; 96 int speed; 97 }; 98 99 struct btinfo_symtab { 100 struct btinfo_common common; 101 int nsym; 102 int ssym; 103 int esym; 104 }; 105 106 struct bi_memmap_entry { 107 uint64_t addr; /* beginning of block */ /* 8 */ 108 uint64_t size; /* size of block */ /* 8 */ 109 uint32_t type; /* type of block */ /* 4 */ 110 } __packed; /* == 20 */ 111 112 #define BIM_Memory 1 /* available RAM usable by OS */ 113 #define BIM_Reserved 2 /* in use or reserved by the system */ 114 #define BIM_ACPI 3 /* ACPI Reclaim memory */ 115 #define BIM_NVS 4 /* ACPI NVS memory */ 116 117 struct btinfo_memmap { 118 struct btinfo_common common; 119 int num; 120 struct bi_memmap_entry entry[1]; /* var len */ 121 }; 122 123 #if HAVE_NBTOOL_CONFIG_H 124 #include <nbinclude/sys/bootblock.h> 125 #else 126 #include <sys/bootblock.h> 127 #endif /* HAVE_NBTOOL_CONFIG_H */ 128 129 /* 130 * Structure describing disk info as seen by the BIOS. 131 */ 132 struct bi_biosgeom_entry { 133 int sec, head, cyl; /* geometry */ 134 uint64_t totsec; /* LBA sectors from ext int13 */ 135 int flags, dev; /* flags, BIOS device # */ 136 #define BI_GEOM_INVALID 0x000001 137 #define BI_GEOM_EXTINT13 0x000002 138 #ifdef BIOSDISK_EXTINFO_V3 139 #define BI_GEOM_BADCKSUM 0x000004 /* v3.x checksum invalid */ 140 #define BI_GEOM_BUS_MASK 0x00ff00 /* connecting bus type */ 141 #define BI_GEOM_BUS_ISA 0x000100 142 #define BI_GEOM_BUS_PCI 0x000200 143 #define BI_GEOM_BUS_OTHER 0x00ff00 144 #define BI_GEOM_IFACE_MASK 0xff0000 /* interface type */ 145 #define BI_GEOM_IFACE_ATA 0x010000 146 #define BI_GEOM_IFACE_ATAPI 0x020000 147 #define BI_GEOM_IFACE_SCSI 0x030000 148 #define BI_GEOM_IFACE_USB 0x040000 149 #define BI_GEOM_IFACE_1394 0x050000 /* Firewire */ 150 #define BI_GEOM_IFACE_FIBRE 0x060000 /* Fibre channel */ 151 #define BI_GEOM_IFACE_OTHER 0xff0000 152 unsigned int cksum; /* MBR checksum */ 153 unsigned int interface_path; /* ISA iobase PCI bus/dev/fun */ 154 uint64_t device_path; 155 int res0; /* future expansion; 0 now */ 156 #else 157 unsigned int cksum; /* MBR checksum */ 158 int res0, res1, res2, res3; /* future expansion; 0 now */ 159 #endif 160 struct mbr_partition mbrparts[MBR_PART_COUNT]; /* MBR itself */ 161 } __packed; 162 163 struct btinfo_biosgeom { 164 struct btinfo_common common; 165 int num; 166 struct bi_biosgeom_entry disk[1]; /* var len */ 167 }; 168 169 struct bi_modulelist_entry { 170 char path[80]; 171 int type; 172 int len; 173 uint32_t base; 174 }; 175 #define BI_MODULE_NONE 0x00 176 #define BI_MODULE_ELF 0x01 177 #define BI_MODULE_IMAGE 0x02 178 #define BI_MODULE_RND 0x03 179 #define BI_MODULE_FS 0x04 180 181 struct btinfo_modulelist { 182 struct btinfo_common common; 183 int num; 184 uint32_t endpa; 185 /* bi_modulelist_entry list follows */ 186 }; 187 188 struct btinfo_framebuffer { 189 struct btinfo_common common; 190 uint64_t physaddr; 191 uint32_t flags; 192 uint32_t width; 193 uint32_t height; 194 uint16_t stride; 195 uint8_t depth; 196 uint8_t rnum; 197 uint8_t gnum; 198 uint8_t bnum; 199 uint8_t rpos; 200 uint8_t gpos; 201 uint8_t bpos; 202 uint16_t vbemode; 203 uint8_t reserved[14]; 204 }; 205 206 struct bi_userconfcommand { 207 char text[80]; 208 }; 209 210 struct btinfo_userconfcommands { 211 struct btinfo_common common; 212 int num; 213 /* bi_userconfcommand list follows */ 214 }; 215 216 #endif /* _LOCORE */ 217 218 #ifdef _KERNEL 219 220 #define BOOTINFO_MAXSIZE 4096 221 222 #ifndef _LOCORE 223 /* 224 * Structure that holds the information passed by the boot loader. 225 */ 226 struct bootinfo { 227 /* Number of bootinfo_* entries in bi_data. */ 228 uint32_t bi_nentries; 229 230 /* Raw data of bootinfo entries. The first one (if any) is 231 * found at bi_data[0] and can be casted to (bootinfo_common *). 232 * Once this is done, the following entry is found at 'len' 233 * offset as specified by the previous entry. */ 234 uint8_t bi_data[BOOTINFO_MAXSIZE - sizeof(uint32_t)]; 235 }; 236 237 extern struct bootinfo bootinfo; 238 239 void *lookup_bootinfo(int); 240 #endif /* _LOCORE */ 241 242 #endif /* _KERNEL */ 243