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