xref: /illumos-gate/usr/src/boot/sys/amd64/include/pc/bios.h (revision 55fea89d)
1199767f8SToomas Soome /*-
2199767f8SToomas Soome  * Copyright (c) 1997 Michael Smith
3199767f8SToomas Soome  * Copyright (c) 1998 Jonathan Lemon
4199767f8SToomas Soome  * All rights reserved.
5199767f8SToomas Soome  *
6199767f8SToomas Soome  * Redistribution and use in source and binary forms, with or without
7199767f8SToomas Soome  * modification, are permitted provided that the following conditions
8199767f8SToomas Soome  * are met:
9199767f8SToomas Soome  * 1. Redistributions of source code must retain the above copyright
10199767f8SToomas Soome  *    notice, this list of conditions and the following disclaimer.
11199767f8SToomas Soome  * 2. Redistributions in binary form must reproduce the above copyright
12199767f8SToomas Soome  *    notice, this list of conditions and the following disclaimer in the
13199767f8SToomas Soome  *    documentation and/or other materials provided with the distribution.
14199767f8SToomas Soome  *
15199767f8SToomas Soome  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16199767f8SToomas Soome  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17199767f8SToomas Soome  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18199767f8SToomas Soome  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19199767f8SToomas Soome  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20199767f8SToomas Soome  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21199767f8SToomas Soome  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22199767f8SToomas Soome  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23199767f8SToomas Soome  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24199767f8SToomas Soome  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25199767f8SToomas Soome  * SUCH DAMAGE.
26199767f8SToomas Soome  *
27199767f8SToomas Soome  * $FreeBSD$
28199767f8SToomas Soome  */
29199767f8SToomas Soome 
30199767f8SToomas Soome #ifndef _MACHINE_PC_BIOS_H_
31199767f8SToomas Soome #define _MACHINE_PC_BIOS_H_
32199767f8SToomas Soome 
33199767f8SToomas Soome /*
34199767f8SToomas Soome  * Int 15:E820 'SMAP' structure
35199767f8SToomas Soome  */
36199767f8SToomas Soome #define SMAP_SIG	0x534D4150			/* 'SMAP' */
37199767f8SToomas Soome 
38199767f8SToomas Soome #define	SMAP_TYPE_MEMORY	1
39199767f8SToomas Soome #define	SMAP_TYPE_RESERVED	2
40199767f8SToomas Soome #define	SMAP_TYPE_ACPI_RECLAIM	3
41199767f8SToomas Soome #define	SMAP_TYPE_ACPI_NVS	4
42199767f8SToomas Soome #define	SMAP_TYPE_ACPI_ERROR	5
43199767f8SToomas Soome 
44199767f8SToomas Soome #define	SMAP_XATTR_ENABLED	0x00000001
45199767f8SToomas Soome #define	SMAP_XATTR_NON_VOLATILE	0x00000002
46199767f8SToomas Soome #define	SMAP_XATTR_MASK		(SMAP_XATTR_ENABLED | SMAP_XATTR_NON_VOLATILE)
47199767f8SToomas Soome 
48199767f8SToomas Soome struct bios_smap {
49199767f8SToomas Soome     u_int64_t	base;
50199767f8SToomas Soome     u_int64_t	length;
51199767f8SToomas Soome     u_int32_t	type;
52199767f8SToomas Soome } __packed;
53199767f8SToomas Soome 
54199767f8SToomas Soome /* Structure extended to include extended attribute field in ACPI 3.0. */
55199767f8SToomas Soome struct bios_smap_xattr {
56199767f8SToomas Soome     u_int64_t	base;
57199767f8SToomas Soome     u_int64_t	length;
58199767f8SToomas Soome     u_int32_t	type;
59199767f8SToomas Soome     u_int32_t	xattr;
60199767f8SToomas Soome } __packed;
61*55fea89dSDan Cross 
62199767f8SToomas Soome /*
63199767f8SToomas Soome  * System Management BIOS
64199767f8SToomas Soome  */
65199767f8SToomas Soome #define	SMBIOS_START	0xf0000
66199767f8SToomas Soome #define	SMBIOS_STEP	0x10
67199767f8SToomas Soome #define	SMBIOS_OFF	0
68199767f8SToomas Soome #define	SMBIOS_LEN	4
69199767f8SToomas Soome #define	SMBIOS_SIG	"_SM_"
70199767f8SToomas Soome 
71199767f8SToomas Soome struct smbios_eps {
72199767f8SToomas Soome 	uint8_t		anchor_string[4];		/* '_SM_' */
73199767f8SToomas Soome 	uint8_t		checksum;
74199767f8SToomas Soome 	uint8_t		length;
75199767f8SToomas Soome 	uint8_t		major_version;
76199767f8SToomas Soome 	uint8_t		minor_version;
77199767f8SToomas Soome 	uint16_t	maximum_structure_size;
78199767f8SToomas Soome 	uint8_t		entry_point_revision;
79199767f8SToomas Soome 	uint8_t		formatted_area[5];
80199767f8SToomas Soome 	uint8_t		intermediate_anchor_string[5];	/* '_DMI_' */
81199767f8SToomas Soome 	uint8_t		intermediate_checksum;
82199767f8SToomas Soome 	uint16_t	structure_table_length;
83199767f8SToomas Soome 	uint32_t	structure_table_address;
84199767f8SToomas Soome 	uint16_t	number_structures;
85199767f8SToomas Soome 	uint8_t		BCD_revision;
86199767f8SToomas Soome };
87199767f8SToomas Soome 
88199767f8SToomas Soome struct smbios_structure_header {
89199767f8SToomas Soome 	uint8_t		type;
90199767f8SToomas Soome 	uint8_t		length;
91199767f8SToomas Soome 	uint16_t	handle;
92199767f8SToomas Soome };
93199767f8SToomas Soome 
94199767f8SToomas Soome #ifdef _KERNEL
95199767f8SToomas Soome #define BIOS_PADDRTOVADDR(x)	((x) + KERNBASE)
96199767f8SToomas Soome #define BIOS_VADDRTOPADDR(x)	((x) - KERNBASE)
97199767f8SToomas Soome 
98199767f8SToomas Soome struct bios_oem_signature {
99199767f8SToomas Soome 	char * anchor;		/* search anchor string in BIOS memory */
100199767f8SToomas Soome 	size_t offset;		/* offset from anchor (may be negative) */
101199767f8SToomas Soome 	size_t totlen;		/* total length of BIOS string to copy */
102199767f8SToomas Soome } __packed;
103199767f8SToomas Soome 
104199767f8SToomas Soome struct bios_oem_range {
105199767f8SToomas Soome 	u_int from;		/* shouldn't be below 0xe0000 */
106199767f8SToomas Soome 	u_int to;		/* shouldn't be above 0xfffff */
107199767f8SToomas Soome } __packed;
108199767f8SToomas Soome 
109199767f8SToomas Soome struct bios_oem {
110199767f8SToomas Soome 	struct bios_oem_range range;
111199767f8SToomas Soome 	struct bios_oem_signature signature[];
112199767f8SToomas Soome } __packed;
113199767f8SToomas Soome 
114199767f8SToomas Soome int	bios_oem_strings(struct bios_oem *oem, u_char *buffer, size_t maxlen);
115199767f8SToomas Soome uint32_t bios_sigsearch(uint32_t start, u_char *sig, int siglen, int paralen,
116199767f8SToomas Soome 	    int sigofs);
117199767f8SToomas Soome void bios_add_smap_entries(struct bios_smap *smapbase, u_int32_t smapsize,
118199767f8SToomas Soome 	    vm_paddr_t *physmap, int *physmap_idx);
119199767f8SToomas Soome #endif
120199767f8SToomas Soome 
121199767f8SToomas Soome #endif /* _MACHINE_PC_BIOS_H_ */
122