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