Home | History | Annotate | Download | only in Include
      1 /** @file
      2   Coreboot PEI module include file.
      3 
      4   Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
      5   This program and the accompanying materials
      6   are licensed and made available under the terms and conditions of the BSD License
      7   which accompanies this distribution.  The full text of the license may be found at
      8   http://opensource.org/licenses/bsd-license.php
      9 
     10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     12 
     13 **/
     14 
     15 /*
     16  * This file is part of the libpayload project.
     17  *
     18  * Copyright (C) 2008 Advanced Micro Devices, Inc.
     19  *
     20  * Redistribution and use in source and binary forms, with or without
     21  * modification, are permitted provided that the following conditions
     22  * are met:
     23  * 1. Redistributions of source code must retain the above copyright
     24  *    notice, this list of conditions and the following disclaimer.
     25  * 2. Redistributions in binary form must reproduce the above copyright
     26  *    notice, this list of conditions and the following disclaimer in the
     27  *    documentation and/or other materials provided with the distribution.
     28  * 3. The name of the author may not be used to endorse or promote products
     29  *    derived from this software without specific prior written permission.
     30  *
     31  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     32  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     33  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     34  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     35  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     39  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     40  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     41  * SUCH DAMAGE.
     42  */
     43 
     44 
     45 #ifndef _COREBOOT_PEI_H_INCLUDED_
     46 #define _COREBOOT_PEI_H_INCLUDED_
     47 
     48 #if defined(_MSC_VER)
     49 #pragma warning( disable : 4200 )
     50 #endif
     51 
     52 #define DYN_CBMEM_ALIGN_SIZE (4096)
     53 
     54 #define IMD_ENTRY_MAGIC      (~0xC0389481)
     55 #define CBMEM_ENTRY_MAGIC    (~0xC0389479)
     56 
     57 struct cbmem_entry {
     58   UINT32 magic;
     59   UINT32 start;
     60   UINT32 size;
     61   UINT32 id;
     62 };
     63 
     64 struct cbmem_root {
     65   UINT32 max_entries;
     66   UINT32 num_entries;
     67   UINT32 locked;
     68   UINT32 size;
     69   struct cbmem_entry entries[0];
     70 };
     71 
     72 struct imd_entry {
     73   UINT32 magic;
     74   UINT32 start_offset;
     75   UINT32 size;
     76   UINT32 id;
     77 };
     78 
     79 struct imd_root {
     80   UINT32 max_entries;
     81   UINT32 num_entries;
     82   UINT32 flags;
     83   UINT32 entry_align;
     84   UINT32 max_offset;
     85   struct imd_entry entries[0];
     86 };
     87 
     88 struct cbuint64 {
     89   UINT32 lo;
     90   UINT32 hi;
     91 };
     92 
     93 #define CB_HEADER_SIGNATURE 0x4F49424C
     94 
     95 struct cb_header {
     96   UINT32 signature;
     97   UINT32 header_bytes;
     98   UINT32 header_checksum;
     99   UINT32 table_bytes;
    100   UINT32 table_checksum;
    101   UINT32 table_entries;
    102 };
    103 
    104 struct cb_record {
    105   UINT32 tag;
    106   UINT32 size;
    107 };
    108 
    109 #define CB_TAG_UNUSED     0x0000
    110 #define CB_TAG_MEMORY     0x0001
    111 
    112 struct cb_memory_range {
    113   struct cbuint64 start;
    114   struct cbuint64 size;
    115   UINT32 type;
    116 };
    117 
    118 #define CB_MEM_RAM    1
    119 #define CB_MEM_RESERVED     2
    120 #define CB_MEM_ACPI   3
    121 #define CB_MEM_NVS    4
    122 #define CB_MEM_UNUSABLE     5
    123 #define CB_MEM_VENDOR_RSVD  6
    124 #define CB_MEM_TABLE       16
    125 
    126 struct cb_memory {
    127   UINT32 tag;
    128   UINT32 size;
    129   struct cb_memory_range map[0];
    130 };
    131 
    132 #define CB_TAG_MAINBOARD  0x0003
    133 
    134 struct cb_mainboard {
    135   UINT32 tag;
    136   UINT32 size;
    137   UINT8 vendor_idx;
    138   UINT8 part_number_idx;
    139   UINT8 strings[0];
    140 };
    141 #define CB_TAG_VERSION  0x0004
    142 #define CB_TAG_EXTRA_VERSION  0x0005
    143 #define CB_TAG_BUILD    0x0006
    144 #define CB_TAG_COMPILE_TIME   0x0007
    145 #define CB_TAG_COMPILE_BY     0x0008
    146 #define CB_TAG_COMPILE_HOST   0x0009
    147 #define CB_TAG_COMPILE_DOMAIN 0x000a
    148 #define CB_TAG_COMPILER       0x000b
    149 #define CB_TAG_LINKER   0x000c
    150 #define CB_TAG_ASSEMBLER      0x000d
    151 
    152 struct cb_string {
    153   UINT32 tag;
    154   UINT32 size;
    155   UINT8 string[0];
    156 };
    157 
    158 #define CB_TAG_SERIAL   0x000f
    159 
    160 struct cb_serial {
    161   UINT32 tag;
    162   UINT32 size;
    163 #define CB_SERIAL_TYPE_IO_MAPPED     1
    164 #define CB_SERIAL_TYPE_MEMORY_MAPPED 2
    165   UINT32 type;
    166   UINT32 baseaddr;
    167   UINT32 baud;
    168   UINT32 regwidth;
    169 
    170   // Crystal or input frequency to the chip containing the UART.
    171   // Provide the board specific details to allow the payload to
    172   // initialize the chip containing the UART and make independent
    173   // decisions as to which dividers to select and their values
    174   // to eventually arrive at the desired console baud-rate.
    175   UINT32 input_hertz;
    176 
    177   // UART PCI address: bus, device, function
    178   // 1 << 31 - Valid bit, PCI UART in use
    179   // Bus << 20
    180   // Device << 15
    181   // Function << 12
    182   UINT32 uart_pci_addr;
    183 };
    184 
    185 #define CB_TAG_CONSOLE       0x00010
    186 
    187 struct cb_console {
    188   UINT32 tag;
    189   UINT32 size;
    190   UINT16 type;
    191 };
    192 
    193 #define CB_TAG_CONSOLE_SERIAL8250 0
    194 #define CB_TAG_CONSOLE_VGA  1 // OBSOLETE
    195 #define CB_TAG_CONSOLE_BTEXT      2 // OBSOLETE
    196 #define CB_TAG_CONSOLE_LOGBUF     3
    197 #define CB_TAG_CONSOLE_SROM       4 // OBSOLETE
    198 #define CB_TAG_CONSOLE_EHCI       5
    199 
    200 #define CB_TAG_FORWARD       0x00011
    201 
    202 struct cb_forward {
    203   UINT32 tag;
    204   UINT32 size;
    205   UINT64 forward;
    206 };
    207 
    208 #define CB_TAG_FRAMEBUFFER      0x0012
    209 struct cb_framebuffer {
    210   UINT32 tag;
    211   UINT32 size;
    212 
    213   UINT64 physical_address;
    214   UINT32 x_resolution;
    215   UINT32 y_resolution;
    216   UINT32 bytes_per_line;
    217   UINT8 bits_per_pixel;
    218   UINT8 red_mask_pos;
    219   UINT8 red_mask_size;
    220   UINT8 green_mask_pos;
    221   UINT8 green_mask_size;
    222   UINT8 blue_mask_pos;
    223   UINT8 blue_mask_size;
    224   UINT8 reserved_mask_pos;
    225   UINT8 reserved_mask_size;
    226 };
    227 
    228 #define CB_TAG_VDAT     0x0015
    229 struct cb_vdat {
    230   UINT32 tag;
    231   UINT32 size;  /* size of the entire entry */
    232   UINT64 vdat_addr;
    233   UINT32 vdat_size;
    234 };
    235 
    236 #define CB_TAG_TIMESTAMPS       0x0016
    237 #define CB_TAG_CBMEM_CONSOLE    0x0017
    238 #define CB_TAG_MRC_CACHE  0x0018
    239 struct cb_cbmem_tab {
    240   UINT32 tag;
    241   UINT32 size;
    242   UINT64 cbmem_tab;
    243 };
    244 
    245 /* Helpful macros */
    246 
    247 #define MEM_RANGE_COUNT(_rec) \
    248   (((_rec)->size - sizeof(*(_rec))) / sizeof((_rec)->map[0]))
    249 
    250 #define MEM_RANGE_PTR(_rec, _idx) \
    251   (void *)(((UINT8 *) (_rec)) + sizeof(*(_rec)) \
    252     + (sizeof((_rec)->map[0]) * (_idx)))
    253 
    254 
    255 #endif // _COREBOOT_PEI_H_INCLUDED_
    256