Home | History | Annotate | Download | only in asm
      1 /* SPDX-License-Identifier: GPL-2.0+ */
      2 /*
      3  * Copyright (C) 2015, Bin Meng <bmeng.cn (at) gmail.com>
      4  */
      5 
      6 #ifndef _X86_TABLES_H_
      7 #define _X86_TABLES_H_
      8 
      9 #include <tables_csum.h>
     10 
     11 #define ROM_TABLE_ADDR	CONFIG_ROM_TABLE_ADDR
     12 #define ROM_TABLE_END	(CONFIG_ROM_TABLE_ADDR + CONFIG_ROM_TABLE_SIZE - 1)
     13 
     14 #define ROM_TABLE_ALIGN	1024
     15 
     16 /* SeaBIOS expects coreboot tables at address range 0x0000-0x1000 */
     17 #define CB_TABLE_ADDR	0x800
     18 
     19 /**
     20  * table_compute_checksum() - Compute a table checksum
     21  *
     22  * This computes an 8-bit checksum for the configuration table.
     23  * All bytes in the configuration table, including checksum itself and
     24  * reserved bytes must add up to zero.
     25  *
     26  * @v:		configuration table base address
     27  * @len:	configuration table size
     28  * @return:	the 8-bit checksum
     29  */
     30 u8 table_compute_checksum(void *v, int len);
     31 
     32 /**
     33  * table_fill_string() - Fill a string with pad in the configuration table
     34  *
     35  * This fills a string in the configuration table. It copies number of bytes
     36  * from the source string, and if source string length is shorter than the
     37  * required size to copy, pad the table string with the given pad character.
     38  *
     39  * @dest:	where to fill a string
     40  * @src:	where to copy from
     41  * @n:		number of bytes to copy
     42  * @pad:	character to pad the remaining bytes
     43  */
     44 void table_fill_string(char *dest, const char *src, size_t n, char pad);
     45 
     46 /**
     47  * write_tables() - Write x86 configuration tables
     48  *
     49  * This writes x86 configuration tables, including PIRQ routing table,
     50  * Multi-Processor table and ACPI table. Whether a specific type of
     51  * configuration table is written is controlled by a Kconfig option.
     52  */
     53 void write_tables(void);
     54 
     55 /**
     56  * write_pirq_routing_table() - Write PIRQ routing table
     57  *
     58  * This writes PIRQ routing table at a given address.
     59  *
     60  * @start:	start address to write PIRQ routing table
     61  * @return:	end address of PIRQ routing table
     62  */
     63 ulong write_pirq_routing_table(ulong start);
     64 
     65 #endif /* _X86_TABLES_H_ */
     66