AcpiBuildTables
+-------------------------------------------+
|table_data |
| (GArray*) |
| +-------------------------------------+ ------------ facs
| |AcpiFacsDescriptorRev1 |
| | signature | = "FACS"
| | | 64bytes
| | |
| | |
| +-------------------------------------+ ------------ dsdt
| |AcpiTableHeader |
| | signature | = "DSDT"
| | |
| | |
| | |
| | |
| +-------------------------------------+ ------------
| |
+-------------------------------------------+
|linker |
| (BIOSLinker*) |
| +-------------------------------------+
| |cmd_blob | list of BiosLinkerLoaderEntry
| | (GArray*) |
| | +--------------------------------+
| | |command | = BIOS_LINKER_LOADER_COMMAND_ALLOCATE
| | | alloc.file | = "etc/acpi/tables"
| | | alloc.align |
| | | alloc.zone |
| | | |
| | +--------------------------------+
| | |command | = BIOS_LINKER_LOADER_COMMAND_ALLOCATE
| | | alloc.file | = "etc/acpi/nvdimm-mem"
| | | alloc.align |
| | | alloc.zone |
| | | |
| | +--------------------------------+
| | |command | = BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM
| | | file | = "etc/acpi/tables"
| | | offset |
| | | start_offset |
| | | |
| | +--------------------------------+
| | |command | = BIOS_LINKER_LOADER_COMMAND_ADD_POINTER
| | | dest_file | = "etc/acpi/tables"
| | | src_file | = "etc/acpi/nvdimm-mem"
| | | offset | = mem_addr_offset
| | | size | = 4
| | +--------------------------------+
| | |
| |file_list | list of BiosLinkerFileEntry
| | (GArray*) |
| | +--------------------------------+
| | |name | = "etc/acpi/tables"
| | |bolb | = table_data
| | +--------------------------------+
| | |name | = "etc/acpi/nvdimm-mem"
| | |bolb | = AcpiNVDIMMState.dsm_mem
| | +--------------------------------+
| | | |
| | | |
+-----+----+--------------------------------+
enum {
BIOS_LINKER_LOADER_COMMAND_ALLOCATE = 0x1,
BIOS_LINKER_LOADER_COMMAND_ADD_POINTER = 0x2,
BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM = 0x3,
BIOS_LINKER_LOADER_COMMAND_WRITE_POINTER = 0x4,
};
Seabios的romfile_loader_entry_s
Seabios中好像没有找到BIOSLinker对应的结构,但是能找到BiosLinkerLoaderEntry对应的是romfile_loader_entry_s。
enum {
ROMFILE_LOADER_COMMAND_ALLOCATE = 0x1,
ROMFILE_LOADER_COMMAND_ADD_POINTER = 0x2,
ROMFILE_LOADER_COMMAND_ADD_CHECKSUM = 0x3,
ROMFILE_LOADER_COMMAND_WRITE_POINTER = 0x4,
};