1/* 2 * This file is part of the libpayload project. 3 * 4 * Copyright (C) 2008 Advanced Micro Devices, Inc. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 3. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission. 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 _COREBOOT_TABLES_H 31#define _COREBOOT_TABLES_H 32 33#include <arch/types.h> 34 35struct cbuint64 { 36 u32 lo; 37 u32 hi; 38}; 39 40struct cb_header { 41 u8 signature[4]; 42 u32 header_bytes; 43 u32 header_checksum; 44 u32 table_bytes; 45 u32 table_checksum; 46 u32 table_entries; 47}; 48 49struct cb_record { 50 u32 tag; 51 u32 size; 52}; 53 54#define CB_TAG_UNUSED 0x0000 55#define CB_TAG_MEMORY 0x0001 56 57struct cb_memory_range { 58 struct cbuint64 start; 59 struct cbuint64 size; 60 u32 type; 61}; 62 63#define CB_MEM_RAM 1 64#define CB_MEM_RESERVED 2 65#define CB_MEM_TABLE 16 66 67struct cb_memory { 68 u32 tag; 69 u32 size; 70 struct cb_memory_range map[0]; 71}; 72 73#define CB_TAG_HWRPB 0x0002 74 75struct cb_hwrpb { 76 u32 tag; 77 u32 size; 78 u64 hwrpb; 79}; 80 81#define CB_TAG_MAINBOARD 0x0003 82 83struct cb_mainboard { 84 u32 tag; 85 u32 size; 86 u8 vendor_idx; 87 u8 part_number_idx; 88 u8 strings[0]; 89}; 90 91#define CB_TAG_VERSION 0x0004 92#define CB_TAG_EXTRA_VERSION 0x0005 93#define CB_TAG_BUILD 0x0006 94#define CB_TAG_COMPILE_TIME 0x0007 95#define CB_TAG_COMPILE_BY 0x0008 96#define CB_TAG_COMPILE_HOST 0x0009 97#define CB_TAG_COMPILE_DOMAIN 0x000a 98#define CB_TAG_COMPILER 0x000b 99#define CB_TAG_LINKER 0x000c 100#define CB_TAG_ASSEMBLER 0x000d 101 102struct cb_string { 103 u32 tag; 104 u32 size; 105 u8 string[0]; 106}; 107 108#define CB_TAG_SERIAL 0x000f 109 110struct cb_serial { 111 u32 tag; 112 u32 size; 113 u16 ioport; 114}; 115 116#define CB_TAG_CONSOLE 0x00010 117 118struct cb_console { 119 u32 tag; 120 u32 size; 121 u16 type; 122}; 123 124#define CB_TAG_CONSOLE_SERIAL8250 0 125#define CB_TAG_CONSOLE_VGA 1 // OBSOLETE 126#define CB_TAG_CONSOLE_BTEXT 2 // OBSOLETE 127#define CB_TAG_CONSOLE_LOGBUF 3 128#define CB_TAG_CONSOLE_SROM 4 // OBSOLETE 129#define CB_TAG_CONSOLE_EHCI 5 130 131#define CB_TAG_FORWARD 0x00011 132 133struct cb_forward { 134 u32 tag; 135 u32 size; 136 u64 forward; 137}; 138 139#define CB_TAG_FRAMEBUFFER 0x0012 140struct cb_framebuffer { 141 u32 tag; 142 u32 size; 143 144 u64 physical_address; 145 u32 x_resolution; 146 u32 y_resolution; 147 u32 bytes_per_line; 148 u8 bits_per_pixel; 149 u8 red_mask_pos; 150 u8 red_mask_size; 151 u8 green_mask_pos; 152 u8 green_mask_size; 153 u8 blue_mask_pos; 154 u8 blue_mask_size; 155 u8 reserved_mask_pos; 156 u8 reserved_mask_size; 157}; 158 159#define CB_TAG_CMOS_OPTION_TABLE 0x00c8 160struct cb_cmos_option_table { 161 u32 tag; 162 u32 size; 163 u32 header_length; 164}; 165 166#define CB_TAG_OPTION 0x00c9 167#define CMOS_MAX_NAME_LENGTH 32 168struct cb_cmos_entries { 169 u32 tag; 170 u32 size; 171 u32 bit; 172 u32 length; 173 u32 config; 174 u32 config_id; 175 u8 name[CMOS_MAX_NAME_LENGTH]; 176}; 177 178 179#define CB_TAG_OPTION_ENUM 0x00ca 180#define CMOS_MAX_TEXT_LENGTH 32 181struct cb_cmos_enums { 182 u32 tag; 183 u32 size; 184 u32 config_id; 185 u32 value; 186 u8 text[CMOS_MAX_TEXT_LENGTH]; 187}; 188 189#define CB_TAG_OPTION_DEFAULTS 0x00cb 190#define CMOS_IMAGE_BUFFER_SIZE 128 191struct cb_cmos_defaults { 192 u32 tag; 193 u32 size; 194 u32 name_length; 195 u8 name[CMOS_MAX_NAME_LENGTH]; 196 u8 default_set[CMOS_IMAGE_BUFFER_SIZE]; 197}; 198 199#define CB_TAG_OPTION_CHECKSUM 0x00cc 200#define CHECKSUM_NONE 0 201#define CHECKSUM_PCBIOS 1 202struct cb_cmos_checksum { 203 u32 tag; 204 u32 size; 205 u32 range_start; 206 u32 range_end; 207 u32 location; 208 u32 type; 209}; 210 211/* Helpful macros */ 212 213#define MEM_RANGE_COUNT(_rec) \ 214 (((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0])) 215 216#define MEM_RANGE_PTR(_rec, _idx) \ 217 (((u8 *) (_rec)) + sizeof(*(_rec)) \ 218 + (sizeof((_rec)->map[0]) * (_idx))) 219 220#define MB_VENDOR_STRING(_mb) \ 221 (((unsigned char *) ((_mb)->strings)) + (_mb)->vendor_idx) 222 223#define MB_PART_STRING(_mb) \ 224 (((unsigned char *) ((_mb)->strings)) + (_mb)->part_number_idx) 225 226#define UNPACK_CB64(_in) \ 227 ( (((u64) _in.hi) << 32) | _in.lo ) 228 229#endif 230

