mirror of
https://github.com/justinian/jsix.git
synced 2025-12-09 16:04:32 -08:00
Using `-fvisibility=hidden` when building the kernel, and then `--discard-all` when stripping it, we shave almost 100KiB off of the resulting ELF file. Also dropped some unused symbols from the linker script, and rearranged the sections so that the file is able to be mapped directly into memory instead of having each section copied.
104 lines
2.8 KiB
C++
104 lines
2.8 KiB
C++
#pragma once
|
|
#ifndef _uefi_boot_services_h_
|
|
#define _uefi_boot_services_h_
|
|
|
|
// This Source Code Form is part of the j6-uefi-headers project and is subject
|
|
// to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was
|
|
// not distributed with this file, You can obtain one at
|
|
// http://mozilla.org/MPL/2.0/.
|
|
|
|
#include <stdint.h>
|
|
#include <uefi/tables.h>
|
|
#include <uefi/types.h>
|
|
|
|
namespace uefi {
|
|
namespace bs_impl {
|
|
using allocate_pages = status (*)(allocate_type, memory_type, size_t, void**);
|
|
using free_pages = status (*)(void*, size_t);
|
|
using get_memory_map = status (*)(size_t*, memory_descriptor*, size_t*, size_t*, uint32_t*);
|
|
using allocate_pool = status (*)(memory_type, uint64_t, void**);
|
|
using free_pool = status (*)(void*);
|
|
using handle_protocol = status (*)(handle, const guid*, void**);
|
|
using create_event = status (*)(evt, tpl, event_notify, void*, event*);
|
|
using exit_boot_services = status (*)(handle, size_t);
|
|
using locate_protocol = status (*)(const guid*, void*, void**);
|
|
using copy_mem = void (*)(void*, const void*, size_t);
|
|
using set_mem = void (*)(void*, uint64_t, uint8_t);
|
|
}
|
|
|
|
struct boot_services {
|
|
static constexpr uint64_t signature = 0x56524553544f4f42ull;
|
|
|
|
table_header header;
|
|
|
|
// Task Priority Level management
|
|
void *raise_tpl;
|
|
void *restore_tpl;
|
|
|
|
// Memory Services
|
|
bs_impl::allocate_pages allocate_pages;
|
|
bs_impl::free_pages free_pages;
|
|
bs_impl::get_memory_map get_memory_map;
|
|
bs_impl::allocate_pool allocate_pool;
|
|
bs_impl::free_pool free_pool;
|
|
|
|
// Event & Timer Services
|
|
bs_impl::create_event create_event;
|
|
void *set_timer;
|
|
void *wait_for_event;
|
|
void *signal_event;
|
|
void *close_event;
|
|
void *check_event;
|
|
|
|
// Protocol Handler Services
|
|
void *install_protocol_interface;
|
|
void *reinstall_protocol_interface;
|
|
void *uninstall_protocol_interface;
|
|
bs_impl::handle_protocol handle_protocol;
|
|
void *_reserved;
|
|
void *register_protocol_notify;
|
|
void *locate_handle;
|
|
void *locate_device_path;
|
|
void *install_configuration_table;
|
|
|
|
// Image Services
|
|
void *load_image;
|
|
void *start_image;
|
|
void *exit;
|
|
void *unload_image;
|
|
bs_impl::exit_boot_services exit_boot_services;
|
|
|
|
// Miscellaneous Services
|
|
void *get_next_monotonic_count;
|
|
void *stall;
|
|
void *set_watchdog_timer;
|
|
|
|
// DriverSupport Services
|
|
void *connect_controller;
|
|
void *disconnect_controller;
|
|
|
|
// Open and Close Protocol Services
|
|
void *open_protocol;
|
|
void *close_protocol;
|
|
void *open_protocol_information;
|
|
|
|
// Library Services
|
|
void *protocols_per_handle;
|
|
void *locate_handle_buffer;
|
|
bs_impl::locate_protocol locate_protocol;
|
|
void *install_multiple_protocol_interfaces;
|
|
void *uninstall_multiple_protocol_interfaces;
|
|
|
|
// 32-bit CRC Services
|
|
void *calculate_crc32;
|
|
|
|
// Miscellaneous Services
|
|
bs_impl::copy_mem copy_mem;
|
|
bs_impl::set_mem set_mem;
|
|
void *create_event_ex;
|
|
};
|
|
|
|
} // namespace uefi
|
|
|
|
#endif
|