mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-30 06:42:48 +03:00
66d97267c7
This excludes all headers in /usr/include/dev because that directory is bonkers huge (18M). We can add these on an as-needed basis.
306 lines
8.5 KiB
C
Vendored
306 lines
8.5 KiB
C
Vendored
/* $OpenBSD: biosvar.h,v 1.68 2019/08/04 14:28:58 kettenis Exp $ */
|
|
|
|
/*
|
|
* Copyright (c) 1997-1999 Michael Shalayeff
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
* SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
|
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
|
* THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
#ifndef _MACHINE_BIOSVAR_H_
|
|
#define _MACHINE_BIOSVAR_H_
|
|
|
|
/* some boxes put apm data seg in the 2nd page */
|
|
#define BOOTARG_OFF (PAGE_SIZE * 2)
|
|
#define BOOTARG_LEN (PAGE_SIZE * 1)
|
|
#define BOOTBIOS_ADDR (0x7c00)
|
|
#define BOOTBIOS_MAXSEC ((1 << 28) - 1)
|
|
|
|
/* BIOS configure flags */
|
|
#define BIOSF_BIOS32 0x0001
|
|
#define BIOSF_PCIBIOS 0x0002
|
|
#define BIOSF_PROMSCAN 0x0004
|
|
#define BIOSF_SMBIOS 0x0008
|
|
|
|
/* BIOS media ID */
|
|
#define BIOSM_F320K 0xff /* floppy ds/sd 8 spt */
|
|
#define BIOSM_F160K 0xfe /* floppy ss/sd 8 spt */
|
|
#define BIOSM_F360K 0xfd /* floppy ds/sd 9 spt */
|
|
#define BIOSM_F180K 0xfc /* floppy ss/sd 9 spt */
|
|
#define BIOSM_ROMD 0xfa /* ROM disk */
|
|
#define BIOSM_F120M 0xf9 /* floppy ds/hd 15 spt 5.25" */
|
|
#define BIOSM_F720K 0xf9 /* floppy ds/dd 9 spt 3.50" */
|
|
#define BIOSM_HD 0xf8 /* hard drive */
|
|
#define BIOSM_F144K 0xf0 /* floppy ds/hd 18 spt 3.50" */
|
|
#define BIOSM_OTHER 0xf0 /* any other */
|
|
|
|
/*
|
|
* BIOS memory maps
|
|
*/
|
|
#define BIOS_MAP_END 0x00 /* End of array XXX - special */
|
|
#define BIOS_MAP_FREE 0x01 /* Usable memory */
|
|
#define BIOS_MAP_RES 0x02 /* Reserved memory */
|
|
#define BIOS_MAP_ACPI 0x03 /* ACPI Reclaim memory */
|
|
#define BIOS_MAP_NVS 0x04 /* ACPI NVS memory */
|
|
|
|
/*
|
|
* Optional ROM header
|
|
*/
|
|
typedef
|
|
struct bios_romheader {
|
|
uint16_t signature; /* 0xaa55 */
|
|
uint8_t len; /* length in pages (512 bytes) */
|
|
uint32_t entry; /* initialization entry point */
|
|
uint8_t reserved[19];
|
|
uint16_t pnpheader; /* offset to PnP expansion header */
|
|
} __packed *bios_romheader_t;
|
|
|
|
/*
|
|
* BIOS32
|
|
*/
|
|
typedef
|
|
struct bios32_header {
|
|
uint32_t signature; /* 00: signature "_32_" */
|
|
uint32_t entry; /* 04: entry point */
|
|
uint8_t rev; /* 08: revision */
|
|
uint8_t length; /* 09: header length */
|
|
uint8_t cksum; /* 0a: modulo 256 checksum */
|
|
uint8_t reserved[5];
|
|
} __packed *bios32_header_t;
|
|
|
|
typedef
|
|
struct bios32_entry_info {
|
|
uint32_t bei_base;
|
|
uint32_t bei_size;
|
|
uint32_t bei_entry;
|
|
} __packed *bios32_entry_info_t;
|
|
|
|
typedef
|
|
struct bios32_entry {
|
|
uint32_t offset;
|
|
uint16_t segment;
|
|
} __packed *bios32_entry_t;
|
|
|
|
#define BIOS32_START 0xe0000
|
|
#define BIOS32_SIZE 0x20000
|
|
#define BIOS32_END (BIOS32_START + BIOS32_SIZE - 0x10)
|
|
|
|
#define BIOS32_MAKESIG(a, b, c, d) \
|
|
((a) | ((b) << 8) | ((c) << 16) | ((d) << 24))
|
|
#define BIOS32_SIGNATURE BIOS32_MAKESIG('_', '3', '2', '_')
|
|
#define PCIBIOS_SIGNATURE BIOS32_MAKESIG('$', 'P', 'C', 'I')
|
|
#define SMBIOS_SIGNATURE BIOS32_MAKESIG('_', 'S', 'M', '_')
|
|
|
|
/*
|
|
* CTL_BIOS definitions.
|
|
*/
|
|
#define BIOS_DEV 1 /* int: BIOS boot device */
|
|
#define BIOS_DISKINFO 2 /* struct: BIOS boot device info */
|
|
#define BIOS_CKSUMLEN 3 /* int: disk cksum block count */
|
|
#define BIOS_MAXID 4 /* number of valid machdep ids */
|
|
|
|
#define CTL_BIOS_NAMES { \
|
|
{ 0, 0 }, \
|
|
{ "biosdev", CTLTYPE_INT }, \
|
|
{ "diskinfo", CTLTYPE_STRUCT }, \
|
|
{ "cksumlen", CTLTYPE_INT }, \
|
|
}
|
|
|
|
#define BOOTARG_MEMMAP 0
|
|
typedef struct _bios_memmap {
|
|
uint64_t addr; /* Beginning of block */
|
|
uint64_t size; /* Size of block */
|
|
uint32_t type; /* Type of block */
|
|
} __packed bios_memmap_t;
|
|
|
|
/* Info about disk from the bios, plus the mapping from
|
|
* BIOS numbers to BSD major (driver?) number.
|
|
*
|
|
* Also, do not bother with BIOSN*() macros, just parcel
|
|
* the info out, and use it like this. This makes for less
|
|
* of a dependence on BIOSN*() macros having to be the same
|
|
* across /boot, /bsd, and userland.
|
|
*/
|
|
#define BOOTARG_DISKINFO 1
|
|
typedef struct _bios_diskinfo {
|
|
/* BIOS section */
|
|
int bios_number; /* BIOS number of drive (or -1) */
|
|
u_int bios_cylinders; /* BIOS cylinders */
|
|
u_int bios_heads; /* BIOS heads */
|
|
u_int bios_sectors; /* BIOS sectors */
|
|
int bios_edd; /* EDD support */
|
|
|
|
/* BSD section */
|
|
dev_t bsd_dev; /* BSD device */
|
|
|
|
/* Checksum section */
|
|
uint32_t checksum; /* Checksum for drive */
|
|
|
|
/* Misc. flags */
|
|
uint32_t flags;
|
|
#define BDI_INVALID 0x00000001 /* I/O error during checksumming */
|
|
#define BDI_GOODLABEL 0x00000002 /* Had SCSI or ST506/ESDI disklabel */
|
|
#define BDI_BADLABEL 0x00000004 /* Had another disklabel */
|
|
#define BDI_EL_TORITO 0x00000008 /* 2,048-byte sectors */
|
|
#define BDI_HIBVALID 0x00000010 /* hibernate signature valid */
|
|
#define BDI_PICKED 0x80000000 /* kernel-only: cksum matched */
|
|
|
|
} __packed bios_diskinfo_t;
|
|
|
|
#define BOOTARG_APMINFO 2
|
|
typedef struct _bios_apminfo {
|
|
/* APM_CONNECT returned values */
|
|
u_int apm_detail;
|
|
u_int apm_code32_base;
|
|
u_int apm_code16_base;
|
|
u_int apm_code_len;
|
|
u_int apm_data_base;
|
|
u_int apm_data_len;
|
|
u_int apm_entry;
|
|
u_int apm_code16_len;
|
|
} __packed bios_apminfo_t;
|
|
|
|
#define BOOTARG_CKSUMLEN 3 /* uint32_t */
|
|
|
|
#define BOOTARG_PCIINFO 4
|
|
typedef struct _bios_pciinfo {
|
|
/* PCI BIOS v2.0+ - Installation check values */
|
|
uint32_t pci_chars; /* Characteristics (%eax) */
|
|
uint32_t pci_rev; /* BCD Revision (%ebx) */
|
|
uint32_t pci_entry32; /* PM entry point for PCI BIOS */
|
|
uint32_t pci_lastbus; /* Number of last PCI bus */
|
|
} __packed bios_pciinfo_t;
|
|
|
|
#define BOOTARG_CONSDEV 5
|
|
typedef struct _bios_consdev {
|
|
dev_t consdev;
|
|
int conspeed;
|
|
int consaddr;
|
|
int consfreq;
|
|
} __packed bios_consdev_t;
|
|
|
|
#define BOOTARG_SMPINFO 6 /* struct mp_float[] */
|
|
|
|
#define BOOTARG_BOOTMAC 7
|
|
typedef struct _bios_bootmac {
|
|
char mac[6];
|
|
} __packed bios_bootmac_t;
|
|
|
|
#define BOOTARG_DDB 8
|
|
typedef struct _bios_ddb {
|
|
int db_console;
|
|
} __packed bios_ddb_t;
|
|
|
|
#define BOOTARG_BOOTDUID 9
|
|
typedef struct _bios_bootduid {
|
|
u_char duid[8];
|
|
} __packed bios_bootduid_t;
|
|
|
|
#define BOOTARG_BOOTSR 10
|
|
#define BOOTSR_UUID_MAX 16
|
|
#define BOOTSR_CRYPTO_MAXKEYBYTES 32
|
|
typedef struct _bios_bootsr {
|
|
uint8_t uuid[BOOTSR_UUID_MAX];
|
|
uint8_t maskkey[BOOTSR_CRYPTO_MAXKEYBYTES];
|
|
} __packed bios_bootsr_t;
|
|
|
|
#define BOOTARG_EFIINFO 11
|
|
typedef struct _bios_efiinfo {
|
|
uint64_t config_acpi;
|
|
uint64_t config_smbios;
|
|
uint64_t fb_addr;
|
|
uint64_t fb_size;
|
|
uint32_t fb_height;
|
|
uint32_t fb_width;
|
|
uint32_t fb_pixpsl; /* pixels per scan line */
|
|
uint32_t fb_red_mask;
|
|
uint32_t fb_green_mask;
|
|
uint32_t fb_blue_mask;
|
|
uint32_t fb_reserved_mask;
|
|
} __packed bios_efiinfo_t;
|
|
|
|
#define BOOTARG_UCODE 12
|
|
typedef struct _bios_ucode {
|
|
uint64_t uc_addr;
|
|
uint64_t uc_size;
|
|
} __packed bios_ucode_t;
|
|
|
|
#if defined(_KERNEL) || defined (_STANDALONE)
|
|
|
|
#ifdef _LOCORE
|
|
#define DOINT(n) int $0x20+(n)
|
|
#else
|
|
#define DOINT(n) "int $0x20+(" #n ")"
|
|
|
|
extern volatile struct BIOS_regs {
|
|
uint32_t biosr_ax;
|
|
uint32_t biosr_cx;
|
|
uint32_t biosr_dx;
|
|
uint32_t biosr_bx;
|
|
uint32_t biosr_bp;
|
|
uint32_t biosr_si;
|
|
uint32_t biosr_di;
|
|
uint32_t biosr_ds;
|
|
uint32_t biosr_es;
|
|
} __packed BIOS_regs;
|
|
|
|
#ifdef _KERNEL
|
|
#include <machine/bus.h>
|
|
|
|
struct bios_attach_args {
|
|
char *ba_name;
|
|
u_int ba_func;
|
|
bus_space_tag_t ba_iot;
|
|
bus_space_tag_t ba_memt;
|
|
union {
|
|
void *_p;
|
|
bios_apminfo_t *_ba_apmp;
|
|
paddr_t _ba_acpipbase;
|
|
} _;
|
|
};
|
|
|
|
#define ba_apmp _._ba_apmp
|
|
#define ba_acpipbase _._ba_acpipbase
|
|
|
|
struct consdev;
|
|
struct proc;
|
|
|
|
int bios_sysctl(int *, u_int, void *, size_t *, void *, size_t, struct proc *);
|
|
|
|
void bios_getopt(void);
|
|
|
|
/* bios32.c */
|
|
int bios32_service(uint32_t, bios32_entry_t, bios32_entry_info_t);
|
|
void bios32_cleanup(void);
|
|
|
|
extern u_int bootapiver;
|
|
extern bios_memmap_t *bios_memmap;
|
|
extern bios_efiinfo_t *bios_efiinfo;
|
|
extern bios_ucode_t *bios_ucode;
|
|
extern void *bios_smpinfo;
|
|
extern bios_pciinfo_t *bios_pciinfo;
|
|
|
|
#endif /* _KERNEL */
|
|
#endif /* _LOCORE */
|
|
#endif /* _KERNEL || _STANDALONE */
|
|
|
|
#endif /* _MACHINE_BIOSVAR_H_ */ |