1/*-
 2 * SPDX-License-Identifier: BSD-2-Clause
 3 *
 4 * Copyright (c) 1997 Michael Smith
 5 * Copyright (c) 1998 Jonathan Lemon
 6 * All rights reserved.
 7 *
 8 * Redistribution and use in source and binary forms, with or without
 9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 */
29
30#ifndef _MACHINE_PC_BIOS_H_
31#define _MACHINE_PC_BIOS_H_
32
33/*
34 * Int 15:E820 'SMAP' structure
35 */
36#define SMAP_SIG	0x534D4150			/* 'SMAP' */
37
38#define	SMAP_TYPE_MEMORY	1
39#define	SMAP_TYPE_RESERVED	2
40#define	SMAP_TYPE_ACPI_RECLAIM	3
41#define	SMAP_TYPE_ACPI_NVS	4
42#define	SMAP_TYPE_ACPI_ERROR	5
43#define	SMAP_TYPE_DISABLED	6
44#define	SMAP_TYPE_PMEM		7
45#define	SMAP_TYPE_PRAM		12
46
47#define	SMAP_XATTR_ENABLED	0x00000001
48#define	SMAP_XATTR_NON_VOLATILE	0x00000002
49#define	SMAP_XATTR_MASK		(SMAP_XATTR_ENABLED | SMAP_XATTR_NON_VOLATILE)
50
51struct bios_smap {
52    u_int64_t	base;
53    u_int64_t	length;
54    u_int32_t	type;
55} __packed;
56
57/* Structure extended to include extended attribute field in ACPI 3.0. */
58struct bios_smap_xattr {
59    u_int64_t	base;
60    u_int64_t	length;
61    u_int32_t	type;
62    u_int32_t	xattr;
63} __packed;
64
65#ifdef _KERNEL
66#define BIOS_PADDRTOVADDR(x)	((x) + KERNBASE)
67#define BIOS_VADDRTOPADDR(x)	((x) - KERNBASE)
68
69struct bios_oem_signature {
70	char * anchor;		/* search anchor string in BIOS memory */
71	size_t offset;		/* offset from anchor (may be negative) */
72	size_t totlen;		/* total length of BIOS string to copy */
73} __packed;
74
75struct bios_oem_range {
76	u_int from;		/* shouldn't be below 0xe0000 */
77	u_int to;		/* shouldn't be above 0xfffff */
78} __packed;
79
80struct bios_oem {
81	struct bios_oem_range range;
82	struct bios_oem_signature signature[];
83} __packed;
84
85int	bios_oem_strings(struct bios_oem *oem, u_char *buffer, size_t maxlen);
86uint32_t bios_sigsearch(uint32_t start, u_char *sig, int siglen, int paralen,
87	    int sigofs);
88void bios_add_smap_entries(struct bios_smap *smapbase, u_int32_t smapsize,
89	    vm_paddr_t *physmap, int *physmap_idx);
90#endif
91
92#endif /* _MACHINE_PC_BIOS_H_ */