1*745c2f60Skn /* $OpenBSD: biosvar.h,v 1.32 2023/09/08 20:47:22 kn Exp $ */ 2f5df1827Smickey 3f5df1827Smickey /* 4f5df1827Smickey * Copyright (c) 1997-1999 Michael Shalayeff 5f5df1827Smickey * All rights reserved. 6f5df1827Smickey * 7f5df1827Smickey * Redistribution and use in source and binary forms, with or without 8f5df1827Smickey * modification, are permitted provided that the following conditions 9f5df1827Smickey * are met: 10f5df1827Smickey * 1. Redistributions of source code must retain the above copyright 11f5df1827Smickey * notice, this list of conditions and the following disclaimer. 12f5df1827Smickey * 2. Redistributions in binary form must reproduce the above copyright 13f5df1827Smickey * notice, this list of conditions and the following disclaimer in the 14f5df1827Smickey * documentation and/or other materials provided with the distribution. 153cfa2e62Smickey * 3. The name of the author may not be used to endorse or promote products 16f5df1827Smickey * derived from this software without specific prior written permission. 17f5df1827Smickey * 18f5df1827Smickey * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19f5df1827Smickey * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 20f5df1827Smickey * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21f5df1827Smickey * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, 22f5df1827Smickey * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23f5df1827Smickey * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24f5df1827Smickey * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25f5df1827Smickey * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26f5df1827Smickey * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 27f5df1827Smickey * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 28f5df1827Smickey * THE POSSIBILITY OF SUCH DAMAGE. 29f5df1827Smickey */ 30f5df1827Smickey 312fa72412Spirofti #ifndef _MACHINE_BIOSVAR_H_ 322fa72412Spirofti #define _MACHINE_BIOSVAR_H_ 33f5df1827Smickey 34f5df1827Smickey /* some boxes put apm data seg in the 2nd page */ 35184e2458Sderaadt #define BOOTARG_OFF (PAGE_SIZE * 2) 36184e2458Sderaadt #define BOOTARG_LEN (PAGE_SIZE * 1) 37f5df1827Smickey #define BOOTBIOS_ADDR (0x7c00) 389730fd37Skrw #define BOOTBIOS_MAXSEC ((1 << 28) - 1) 39f5df1827Smickey 40f5df1827Smickey /* BIOS configure flags */ 41f5df1827Smickey #define BIOSF_BIOS32 0x0001 42f5df1827Smickey #define BIOSF_PCIBIOS 0x0002 43f5df1827Smickey #define BIOSF_PROMSCAN 0x0004 44244633e7Sjsg #define BIOSF_SMBIOS 0x0008 45f5df1827Smickey 46f5df1827Smickey /* BIOS media ID */ 47f5df1827Smickey #define BIOSM_F320K 0xff /* floppy ds/sd 8 spt */ 48f5df1827Smickey #define BIOSM_F160K 0xfe /* floppy ss/sd 8 spt */ 49f5df1827Smickey #define BIOSM_F360K 0xfd /* floppy ds/sd 9 spt */ 50f5df1827Smickey #define BIOSM_F180K 0xfc /* floppy ss/sd 9 spt */ 51f5df1827Smickey #define BIOSM_ROMD 0xfa /* ROM disk */ 52f5df1827Smickey #define BIOSM_F120M 0xf9 /* floppy ds/hd 15 spt 5.25" */ 53f5df1827Smickey #define BIOSM_F720K 0xf9 /* floppy ds/dd 9 spt 3.50" */ 54f5df1827Smickey #define BIOSM_HD 0xf8 /* hard drive */ 55f5df1827Smickey #define BIOSM_F144K 0xf0 /* floppy ds/hd 18 spt 3.50" */ 56f5df1827Smickey #define BIOSM_OTHER 0xf0 /* any other */ 57f5df1827Smickey 58f5df1827Smickey /* 59f5df1827Smickey * BIOS memory maps 60f5df1827Smickey */ 61f5df1827Smickey #define BIOS_MAP_END 0x00 /* End of array XXX - special */ 62f5df1827Smickey #define BIOS_MAP_FREE 0x01 /* Usable memory */ 63f5df1827Smickey #define BIOS_MAP_RES 0x02 /* Reserved memory */ 64f5df1827Smickey #define BIOS_MAP_ACPI 0x03 /* ACPI Reclaim memory */ 65f5df1827Smickey #define BIOS_MAP_NVS 0x04 /* ACPI NVS memory */ 66f5df1827Smickey 67f5df1827Smickey /* 68f5df1827Smickey * Optional ROM header 69f5df1827Smickey */ 70f5df1827Smickey typedef 71f5df1827Smickey struct bios_romheader { 72f721f560Skettenis uint16_t signature; /* 0xaa55 */ 73f721f560Skettenis uint8_t len; /* length in pages (512 bytes) */ 74f721f560Skettenis uint32_t entry; /* initialization entry point */ 75f721f560Skettenis uint8_t reserved[19]; 76f721f560Skettenis uint16_t pnpheader; /* offset to PnP expansion header */ 77e7940adfSderaadt } __packed *bios_romheader_t; 78f5df1827Smickey 79f5df1827Smickey #define BIOS32_MAKESIG(a, b, c, d) \ 80f5df1827Smickey ((a) | ((b) << 8) | ((c) << 16) | ((d) << 24)) 81de8bfd7dSgwk #define SMBIOS_SIGNATURE BIOS32_MAKESIG('_', 'S', 'M', '_') 82f5df1827Smickey 83f5df1827Smickey /* 84f5df1827Smickey * CTL_BIOS definitions. 85f5df1827Smickey */ 86f5df1827Smickey #define BIOS_DEV 1 /* int: BIOS boot device */ 87f5df1827Smickey #define BIOS_DISKINFO 2 /* struct: BIOS boot device info */ 88f5df1827Smickey #define BIOS_CKSUMLEN 3 /* int: disk cksum block count */ 89f5df1827Smickey #define BIOS_MAXID 4 /* number of valid machdep ids */ 90f5df1827Smickey 91f5df1827Smickey #define CTL_BIOS_NAMES { \ 92f5df1827Smickey { 0, 0 }, \ 93f5df1827Smickey { "biosdev", CTLTYPE_INT }, \ 94f5df1827Smickey { "diskinfo", CTLTYPE_STRUCT }, \ 95f5df1827Smickey { "cksumlen", CTLTYPE_INT }, \ 96f5df1827Smickey } 97f5df1827Smickey 98f5df1827Smickey #define BOOTARG_MEMMAP 0 99f5df1827Smickey typedef struct _bios_memmap { 100f721f560Skettenis uint64_t addr; /* Beginning of block */ 101f721f560Skettenis uint64_t size; /* Size of block */ 102f721f560Skettenis uint32_t type; /* Type of block */ 103e7940adfSderaadt } __packed bios_memmap_t; 104f5df1827Smickey 105f5df1827Smickey /* Info about disk from the bios, plus the mapping from 106f5df1827Smickey * BIOS numbers to BSD major (driver?) number. 107f5df1827Smickey * 108f5df1827Smickey * Also, do not bother with BIOSN*() macros, just parcel 109f5df1827Smickey * the info out, and use it like this. This makes for less 110897c442bStom * of a dependence on BIOSN*() macros having to be the same 111f5df1827Smickey * across /boot, /bsd, and userland. 112f5df1827Smickey */ 113f5df1827Smickey #define BOOTARG_DISKINFO 1 114f5df1827Smickey typedef struct _bios_diskinfo { 115f5df1827Smickey /* BIOS section */ 116f5df1827Smickey int bios_number; /* BIOS number of drive (or -1) */ 117f5df1827Smickey u_int bios_cylinders; /* BIOS cylinders */ 118f5df1827Smickey u_int bios_heads; /* BIOS heads */ 119f5df1827Smickey u_int bios_sectors; /* BIOS sectors */ 120f5df1827Smickey int bios_edd; /* EDD support */ 121f5df1827Smickey 122f5df1827Smickey /* BSD section */ 123f5df1827Smickey dev_t bsd_dev; /* BSD device */ 124f5df1827Smickey 125f5df1827Smickey /* Checksum section */ 126f721f560Skettenis uint32_t checksum; /* Checksum for drive */ 127f5df1827Smickey 128f5df1827Smickey /* Misc. flags */ 129f721f560Skettenis uint32_t flags; 130f5df1827Smickey #define BDI_INVALID 0x00000001 /* I/O error during checksumming */ 131f5df1827Smickey #define BDI_GOODLABEL 0x00000002 /* Had SCSI or ST506/ESDI disklabel */ 132f5df1827Smickey #define BDI_BADLABEL 0x00000004 /* Had another disklabel */ 133338feb3aStom #define BDI_EL_TORITO 0x00000008 /* 2,048-byte sectors */ 134897c442bStom #define BDI_HIBVALID 0x00000010 /* hibernate signature valid */ 135f5df1827Smickey #define BDI_PICKED 0x80000000 /* kernel-only: cksum matched */ 136f5df1827Smickey 137e7940adfSderaadt } __packed bios_diskinfo_t; 138f5df1827Smickey 139f5df1827Smickey #define BOOTARG_APMINFO 2 140f5df1827Smickey typedef struct _bios_apminfo { 141f5df1827Smickey /* APM_CONNECT returned values */ 142f5df1827Smickey u_int apm_detail; 143f5df1827Smickey u_int apm_code32_base; 144f5df1827Smickey u_int apm_code16_base; 145f5df1827Smickey u_int apm_code_len; 146f5df1827Smickey u_int apm_data_base; 147f5df1827Smickey u_int apm_data_len; 148f5df1827Smickey u_int apm_entry; 149f5df1827Smickey u_int apm_code16_len; 150e7940adfSderaadt } __packed bios_apminfo_t; 151f5df1827Smickey 152f721f560Skettenis #define BOOTARG_CKSUMLEN 3 /* uint32_t */ 153f5df1827Smickey 154f5df1827Smickey #define BOOTARG_PCIINFO 4 155f5df1827Smickey typedef struct _bios_pciinfo { 156f5df1827Smickey /* PCI BIOS v2.0+ - Installation check values */ 157f721f560Skettenis uint32_t pci_chars; /* Characteristics (%eax) */ 158f721f560Skettenis uint32_t pci_rev; /* BCD Revision (%ebx) */ 159f721f560Skettenis uint32_t pci_entry32; /* PM entry point for PCI BIOS */ 160f721f560Skettenis uint32_t pci_lastbus; /* Number of last PCI bus */ 161e7940adfSderaadt } __packed bios_pciinfo_t; 162f5df1827Smickey 163f5df1827Smickey #define BOOTARG_CONSDEV 5 164f5df1827Smickey typedef struct _bios_consdev { 165f5df1827Smickey dev_t consdev; 166f5df1827Smickey int conspeed; 16709d240e0Skettenis uint64_t consaddr; 16809d240e0Skettenis int consfreq; 16909d240e0Skettenis uint32_t flags; 17009d240e0Skettenis #define BCD_MMIO 0x00000001 /* Memory Mapped IO */ 17109d240e0Skettenis int reg_width; 17209d240e0Skettenis int reg_shift; 17309d240e0Skettenis } __packed bios_consdev_t; 17409d240e0Skettenis 1758847d4f8Sderaadt #define BOOTARG_BOOTMAC 7 1768847d4f8Sderaadt typedef struct _bios_bootmac { 1778847d4f8Sderaadt char mac[6]; 178e7940adfSderaadt } __packed bios_bootmac_t; 1798847d4f8Sderaadt 180c350d4dcSdlg #define BOOTARG_DDB 8 181c350d4dcSdlg typedef struct _bios_ddb { 182c350d4dcSdlg int db_console; 183c350d4dcSdlg } __packed bios_ddb_t; 184c350d4dcSdlg 18558db950fSjsing #define BOOTARG_BOOTDUID 9 18658db950fSjsing typedef struct _bios_bootduid { 187331b9dcdSjsing u_char duid[8]; 18858db950fSjsing } __packed bios_bootduid_t; 189331b9dcdSjsing 1907ddb4085Sjsing #define BOOTARG_BOOTSR 10 1917ddb4085Sjsing #define BOOTSR_UUID_MAX 16 1927ddb4085Sjsing #define BOOTSR_CRYPTO_MAXKEYBYTES 32 1937ddb4085Sjsing typedef struct _bios_bootsr { 194f721f560Skettenis uint8_t uuid[BOOTSR_UUID_MAX]; 195f721f560Skettenis uint8_t maskkey[BOOTSR_CRYPTO_MAXKEYBYTES]; 1967ddb4085Sjsing } __packed bios_bootsr_t; 1977ddb4085Sjsing 19844026685Syasuoka #define BOOTARG_EFIINFO 11 19944026685Syasuoka typedef struct _bios_efiinfo { 20044026685Syasuoka uint64_t config_acpi; 20144026685Syasuoka uint64_t config_smbios; 20244026685Syasuoka uint64_t fb_addr; 20344026685Syasuoka uint64_t fb_size; 20444026685Syasuoka uint32_t fb_height; 20544026685Syasuoka uint32_t fb_width; 20644026685Syasuoka uint32_t fb_pixpsl; /* pixels per scan line */ 20744026685Syasuoka uint32_t fb_red_mask; 20844026685Syasuoka uint32_t fb_green_mask; 20944026685Syasuoka uint32_t fb_blue_mask; 21044026685Syasuoka uint32_t fb_reserved_mask; 211cdc0877dSkettenis uint32_t flags; 212cdc0877dSkettenis #define BEI_64BIT 0x00000001 /* 64-bit EFI implementation */ 2138584df4eSkettenis #define BEI_ESRT 0x00000002 /* ESRT table */ 214cdc0877dSkettenis uint32_t mmap_desc_ver; 215cdc0877dSkettenis uint32_t mmap_desc_size; 216cdc0877dSkettenis uint32_t mmap_size; 217cdc0877dSkettenis uint64_t mmap_start; 218cdc0877dSkettenis uint64_t system_table; 2198584df4eSkettenis uint64_t config_esrt; 22044026685Syasuoka } __packed bios_efiinfo_t; 22144026685Syasuoka 222b4ccf14aSpatrick #define BOOTARG_UCODE 12 223b4ccf14aSpatrick typedef struct _bios_ucode { 224b4ccf14aSpatrick uint64_t uc_addr; 225b4ccf14aSpatrick uint64_t uc_size; 226b4ccf14aSpatrick } __packed bios_ucode_t; 227b4ccf14aSpatrick 228f5df1827Smickey #if defined(_KERNEL) || defined (_STANDALONE) 229f5df1827Smickey 230f5df1827Smickey #ifdef _LOCORE 231f5df1827Smickey #define DOINT(n) int $0x20+(n) 232f5df1827Smickey #else 233f5df1827Smickey #define DOINT(n) "int $0x20+(" #n ")" 234f5df1827Smickey 235a47f7207Smickey extern volatile struct BIOS_regs { 236f721f560Skettenis uint32_t biosr_ax; 237f721f560Skettenis uint32_t biosr_cx; 238f721f560Skettenis uint32_t biosr_dx; 239f721f560Skettenis uint32_t biosr_bx; 240f721f560Skettenis uint32_t biosr_bp; 241f721f560Skettenis uint32_t biosr_si; 242f721f560Skettenis uint32_t biosr_di; 243f721f560Skettenis uint32_t biosr_ds; 244f721f560Skettenis uint32_t biosr_es; 245e7940adfSderaadt } __packed BIOS_regs; 246f5df1827Smickey 247f5df1827Smickey #ifdef _KERNEL 248f5df1827Smickey #include <machine/bus.h> 249f5df1827Smickey 250f5df1827Smickey struct bios_attach_args { 251f63689adSderaadt char *ba_name; 252f721f560Skettenis u_int ba_func; 253f63689adSderaadt bus_space_tag_t ba_iot; 254f63689adSderaadt bus_space_tag_t ba_memt; 255f5df1827Smickey union { 256f5df1827Smickey void *_p; 257f63689adSderaadt bios_apminfo_t *_ba_apmp; 258f63689adSderaadt paddr_t _ba_acpipbase; 259f5df1827Smickey } _; 260f5df1827Smickey }; 261f5df1827Smickey 262f63689adSderaadt #define ba_apmp _._ba_apmp 263f63689adSderaadt #define ba_acpipbase _._ba_acpipbase 264f5df1827Smickey 265f5df1827Smickey struct consdev; 266f5df1827Smickey struct proc; 267f5df1827Smickey 268f5df1827Smickey int bios_sysctl(int *, u_int, void *, size_t *, void *, size_t, struct proc *); 269f5df1827Smickey 270f5df1827Smickey void bios_getopt(void); 27155988961Sderaadt bios_diskinfo_t *bios_getdiskinfo(dev_t); 272f5df1827Smickey 27336d473f7Sguenther extern int biosbasemem; 274f5df1827Smickey extern u_int bootapiver; 275f5df1827Smickey extern bios_memmap_t *bios_memmap; 27644026685Syasuoka extern bios_efiinfo_t *bios_efiinfo; 277b4ccf14aSpatrick extern bios_ucode_t *bios_ucode; 278f5df1827Smickey 279f5df1827Smickey #endif /* _KERNEL */ 280f5df1827Smickey #endif /* _LOCORE */ 281f5df1827Smickey #endif /* _KERNEL || _STANDALONE */ 282f5df1827Smickey 2832fa72412Spirofti #endif /* _MACHINE_BIOSVAR_H_ */ 284