Newer
Older
minerva / Kernel / Firmware / EFI / SystemTable.h
@minerva minerva on 13 Jul 2 KB Initial commit
/*
 * Copyright (c) 2024, Sönke Holz <sholz8530@gmail.com>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <Kernel/Firmware/EFI/EFI.h>
#include <Kernel/Firmware/EFI/Protocols/ConsoleSupport.h>
#include <Kernel/Firmware/EFI/Services/BootServices.h>

// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html

namespace Kernel::EFI {

// EFI_CONFIGURATION_TABLE: https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-configuration-table-properties-table
struct ConfigurationTable {
    GUID vendor_guid;
    void* vendor_table;
};
static_assert(AssertSize<ConfigurationTable, 24>());

// EFI_DTB_TABLE_GUID: https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#devicetree-tables
static constexpr GUID DTB_TABLE_GUID = { 0xb1b621d5, 0xf19c, 0x41a5, { 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0 } };

// https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#industry-standard-configuration-tables
static constexpr GUID ACPI_2_0_TABLE_GUID = { 0x8868e871, 0xe4f1, 0x11d3, { 0xbc, 0x22, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81 } };
static constexpr GUID ACPI_TABLE_GUID = { 0xeb9d2d30, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } };
static constexpr GUID SMBIOS3_TABLE_GUID = { 0xf2fd1544, 0x9794, 0x4a2c, { 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94 } };
static constexpr GUID SMBIOS_TABLE_GUID = { 0xeb9d2d31, 0x2d88, 0x11d3, { 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d } };

// EFI_SYSTEM_TABLE: https://uefi.org/specs/UEFI/2.10/04_EFI_System_Table.html#efi-system-table-1
struct SystemTable {
    static constexpr u64 signature = 0x5453595320494249;

    using RuntimeServices = void;

    TableHeader hdr;
    char16_t* firmware_vendor;
    u32 firmware_revision;
    Handle console_in_handle;
    SimpleTextInputProtocol* con_in;
    Handle console_out_handle;
    SimpleTextOutputProtocol* con_out;
    Handle standard_error_handle;
    SimpleTextOutputProtocol* std_err;
    RuntimeServices* runtime_services;
    BootServices* boot_services;
    FlatPtr number_of_table_entries;
    ConfigurationTable* configuration_table;
};
static_assert(AssertSize<SystemTable, 120>());

}