diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/uefi.c3l/src/def.c3i | 309 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/exports.c3 | 11 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/lib/console.c3 | 2 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/lib/init.c3 | 2 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/lib/private/print.c3 | 2 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/lib/string.c3 | 2 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/protocol/evt_timer_task.c3 | 2 | ||||
| -rw-r--r-- | lib/uefi.c3l/src/protocol/mem.c3 | 2 |
8 files changed, 161 insertions, 171 deletions
diff --git a/lib/uefi.c3l/src/def.c3i b/lib/uefi.c3l/src/def.c3i index f595caa..769f15e 100644 --- a/lib/uefi.c3l/src/def.c3i +++ b/lib/uefi.c3l/src/def.c3i @@ -1,240 +1,221 @@ module uefi; -/* - * EFI_HANDLE alias (sec x.x.x of the UEFI 2.11 specification). - */ +/** EFI_HANDLE alias (sec x.x.x of the UEFI 2.11 specification). */ typedef EfiHandle = void*; -/* - * All UEFI strings are wchar_t strings (Wide-Char types). - */ +/** All UEFI strings are wchar_t strings (Wide-Char types). */ alias EfiString = ushort[]; alias EfiStringRaw = ushort*; -/* - * ... But ASCII strings can also be used and dynamically converted to wide ones. - */ +/** ... But ASCII strings can also be used and dynamically converted to wide ones. */ alias AsciiString = char[]; alias AsciiStringRaw = char*; -/* - * EFI_EVENT alias (sec 7.1.1 of the UEFI 2.11 specification). - */ +/** EFI_EVENT alias (sec 7.1.1 of the UEFI 2.11 specification). */ typedef EfiEvent = void*; -/* - * EFI_TABLE_HEADER structure (sec 4.2.1 of the UEFI 2.11 specification). +/** EFI_TABLE_HEADER structure (sec 4.2.1 of the UEFI 2.11 specification). * The same section contains the following constant expressions - * as well as the EFI_SYSTEM_TABLE structure. - */ + * as well as the EFI_SYSTEM_TABLE structure. */ struct EfiTableHeader @packed { - ulong signature; - uint revision; - uint header_size; - uint crc32; - uint _reserved; + ulong signature; + uint revision; + uint header_size; + uint crc32; + uint _reserved; } -const ulong EFI_SYSTEM_TABLE_SIGNATURE = 0x5453595320494249; -const uint EFI_2_100_SYSTEM_TABLE_REVISION = ((2<<16) | (100)); -const uint EFI_2_90_SYSTEM_TABLE_REVISION = ((2<<16) | (90)); -const uint EFI_2_80_SYSTEM_TABLE_REVISION = ((2<<16) | (80)); -const uint EFI_2_70_SYSTEM_TABLE_REVISION = ((2<<16) | (70)); -const uint EFI_2_60_SYSTEM_TABLE_REVISION = ((2<<16) | (60)); -const uint EFI_2_50_SYSTEM_TABLE_REVISION = ((2<<16) | (50)); -const uint EFI_2_40_SYSTEM_TABLE_REVISION = ((2<<16) | (40)); -const uint EFI_2_31_SYSTEM_TABLE_REVISION = ((2<<16) | (31)); -const uint EFI_2_30_SYSTEM_TABLE_REVISION = ((2<<16) | (30)); -const uint EFI_2_20_SYSTEM_TABLE_REVISION = ((2<<16) | (20)); -const uint EFI_2_10_SYSTEM_TABLE_REVISION = ((2<<16) | (10)); -const uint EFI_2_00_SYSTEM_TABLE_REVISION = ((2<<16) | (00)); -const uint EFI_1_10_SYSTEM_TABLE_REVISION = ((1<<16) | (10)); -const uint EFI_1_02_SYSTEM_TABLE_REVISION = ((1<<16) | (02)); -const uint EFI_SYSTEM_TABLE_REVISION = EFI_2_100_SYSTEM_TABLE_REVISION; -const uint EFI_SPECIFICATION_VERSION = EFI_SYSTEM_TABLE_REVISION; +const ulong EFI_SYSTEM_TABLE_SIGNATURE = 0x5453595320494249; +const uint EFI_2_100_SYSTEM_TABLE_REVISION = ((2 << 16) | (100)); +const uint EFI_2_90_SYSTEM_TABLE_REVISION = ((2 << 16) | (90)); +const uint EFI_2_80_SYSTEM_TABLE_REVISION = ((2 << 16) | (80)); +const uint EFI_2_70_SYSTEM_TABLE_REVISION = ((2 << 16) | (70)); +const uint EFI_2_60_SYSTEM_TABLE_REVISION = ((2 << 16) | (60)); +const uint EFI_2_50_SYSTEM_TABLE_REVISION = ((2 << 16) | (50)); +const uint EFI_2_40_SYSTEM_TABLE_REVISION = ((2 << 16) | (40)); +const uint EFI_2_31_SYSTEM_TABLE_REVISION = ((2 << 16) | (31)); +const uint EFI_2_30_SYSTEM_TABLE_REVISION = ((2 << 16) | (30)); +const uint EFI_2_20_SYSTEM_TABLE_REVISION = ((2 << 16) | (20)); +const uint EFI_2_10_SYSTEM_TABLE_REVISION = ((2 << 16) | (10)); +const uint EFI_2_00_SYSTEM_TABLE_REVISION = ((2 << 16) | (00)); +const uint EFI_1_10_SYSTEM_TABLE_REVISION = ((1 << 16) | (10)); +const uint EFI_1_02_SYSTEM_TABLE_REVISION = ((1 << 16) | (02)); +const uint EFI_SYSTEM_TABLE_REVISION = EFI_2_100_SYSTEM_TABLE_REVISION; +const uint EFI_SPECIFICATION_VERSION = EFI_SYSTEM_TABLE_REVISION; /* NOTE: Do NOT pack this struct: firmware_revision being 32-bit causes misalignment */ struct SystemTable { - EfiTableHeader header; - EfiStringRaw firmware_vendor; - uint firmware_revision; - EfiHandle conin_handle; - SimpleTextInputProtocol *conin; - EfiHandle conout_handle; - SimpleTextOutputProtocol *conout; - EfiHandle conerr_handle; - SimpleTextOutputProtocol *conerr; - RuntimeServices *runtime_services; - BootServices *boot_services; - usz num_entries; - ConfigurationTable *configuration_table; + EfiTableHeader header; + EfiStringRaw firmware_vendor; + uint firmware_revision; + EfiHandle conin_handle; + SimpleTextInputProtocol* conin; + EfiHandle conout_handle; + SimpleTextOutputProtocol* conout; + EfiHandle conerr_handle; + SimpleTextOutputProtocol* conerr; + RuntimeServices* runtime_services; + BootServices* boot_services; + usz num_entries; + ConfigurationTable* configuration_table; } -/* - * EFI_CONFIGURATION_TABLE structure (sec 4.6.1 of the UEFI 2.11 specification). - */ +/** EFI_CONFIGURATION_TABLE structure (sec 4.6.1 of the UEFI 2.11 specification). */ struct ConfigurationTable @packed { - EfiGuid vendor_guid; - void *vendor_table; + EfiGuid vendor_guid; + void* vendor_table; } /* EFI_BOOT_SERVICES structure (4.4.1) */ -const ulong EFI_BOOT_SERVICES_SIGNATURE = 0x56524553544f4f42; //'BOOTSERV' <- EightCC +const ulong EFI_BOOT_SERVICES_SIGNATURE = 0x56524553544f4f42; // 'BOOTSERV' <- EightCC const uint EFI_BOOT_SERVICES_REVISION = EFI_SPECIFICATION_VERSION; struct BootServices @packed { - EfiTableHeader header; + EfiTableHeader header; - /* Task priority services (uefi::proto::evt) */ - FnRaiseTpl raise_tpl; - FnRestoreTpl restore_tpl; + /* Task priority services (uefi::proto::evt) */ + FnRaiseTpl raise_tpl; + FnRestoreTpl restore_tpl; - /* Memory services (uefi::proto::mem) */ - FnAllocatePages allocate_pages; - FnFreePages free_pages; - FnGetMemoryMap get_memory_map; - FnAllocatePool allocate_pool; - FnFreePool free_pool; + /* Memory services (uefi::proto::mem) */ + FnAllocatePages allocate_pages; + FnFreePages free_pages; + FnGetMemoryMap get_memory_map; + FnAllocatePool allocate_pool; + FnFreePool free_pool; - /* Event and Timer services (uefi::proto::evt) */ - FnCreateEvent create_event; - FnSetTimer set_timer; - FnWaitForEvent wait_for_event; - FnSignalEvent signal_event; - FnCloseEvent close_event; - FnCheckEvent check_event; + /* Event and Timer services (uefi::proto::evt) */ + FnCreateEvent create_event; + FnSetTimer set_timer; + FnWaitForEvent wait_for_event; + FnSignalEvent signal_event; + FnCloseEvent close_event; + FnCheckEvent check_event; - /* Protocol Handler services (uefi::proto::handler) */ - FnInstallProtocolInterface install_protocol_interface; - FnReinstallProtocolInterface reinstall_protocol_interface; - FnUninstallProtocolInterface uninstall_protocol_interface; - FnHandleProtocol handle_protocol; - void *_reserved; /* alright then */ - FnRegisterProtocolNotify register_protocol_notify; - FnLocateHandle locate_handle; - FnLocateDevicePath locate_device_path; - FnInstallConfigurationTable install_configuration_table; + /* Protocol Handler services (uefi::proto::handler) */ + FnInstallProtocolInterface install_protocol_interface; + FnReinstallProtocolInterface reinstall_protocol_interface; + FnUninstallProtocolInterface uninstall_protocol_interface; + FnHandleProtocol handle_protocol; + void* _reserved; /* alright then */ + FnRegisterProtocolNotify register_protocol_notify; + FnLocateHandle locate_handle; + FnLocateDevicePath locate_device_path; + FnInstallConfigurationTable install_configuration_table; - /* Image services (uefi::proto::image) */ - FnLoadImage load_image; - FnStartImage start_image; - FnExitImage exit_image; - FnUnloadImage unload_image; - FnExitBootServices exit_boot_services; + /* Image services (uefi::proto::image) */ + FnLoadImage load_image; + FnStartImage start_image; + FnExitImage exit_image; + FnUnloadImage unload_image; + FnExitBootServices exit_boot_services; - /* Misc services (uefi::proto::misc_bs) */ - FnGetNextMonotonicCount get_next_monotonic_count; - FnStall stall; - FnSetWatchdogTimer set_watchdog_timer; + /* Misc services (uefi::proto::misc_bs) */ + FnGetNextMonotonicCount get_next_monotonic_count; + FnStall stall; + FnSetWatchdogTimer set_watchdog_timer; - /* Driver Support services (uefi::proto::handler) */ - FnConnectController connect_controller; - FnDisconnectController disconnect_controller; + /* Driver Support services (uefi::proto::handler) */ + FnConnectController connect_controller; + FnDisconnectController disconnect_controller; - /* Open/Close Protocol services (uefi::proto::handler) */ - FnOpenProtocol open_protocol; - FnCloseProtocol close_protocol; - FnOpenProtocolInformation open_protocol_information; + /* Open/Close Protocol services (uefi::proto::handler) */ + FnOpenProtocol open_protocol; + FnCloseProtocol close_protocol; + FnOpenProtocolInformation open_protocol_information; - /* Library services (uefi::proto::handler) */ - FnProtocolsPerHandle protocols_per_handle; - FnLocateHandleBuffer locate_handle_buffer; - FnLocateProtocol locate_protocol; - FnInstallMultipleProtocolInterfaces install_multiple_protocol_interfaces; - FnUninstallMultipleProtocolInterfaces uninstall_multiple_protocol_interfaces; + /* Library services (uefi::proto::handler) */ + FnProtocolsPerHandle protocols_per_handle; + FnLocateHandleBuffer locate_handle_buffer; + FnLocateProtocol locate_protocol; + FnInstallMultipleProtocolInterfaces install_multiple_protocol_interfaces; + FnUninstallMultipleProtocolInterfaces uninstall_multiple_protocol_interfaces; - /* 32-bit CRC services (uefi::proto::misc_bs) */ - FnCalculateCrc32 calculate_crc32; + /* 32-bit CRC services (uefi::proto::misc_bs) */ + FnCalculateCrc32 calculate_crc32; - /* More misc/trailing services */ - FnCopyMem copy_mem; - FnSetMem set_mem; - FnCreateEventEx create_event_ex; + /* More misc/trailing services */ + FnCopyMem copy_mem; + FnSetMem set_mem; + FnCreateEventEx create_event_ex; } struct RuntimeServices @packed { - EfiTableHeader header; + EfiTableHeader header; - /* Time services (uefi::proto::time) */ - FnGetTime get_time; - FnSetTime set_time; - FnGetWakeupTime get_wakeup_time; - FnSetWakeupTime set_wakeup_time; + /* Time services (uefi::proto::time) */ + FnGetTime get_time; + FnSetTime set_time; + FnGetWakeupTime get_wakeup_time; + FnSetWakeupTime set_wakeup_time; - /* Virtual Memory services (uefi::proto::mem) */ - FnSetVirtualAddressMap set_virtual_address_map; - FnConvertPointer convert_pointer; + /* Virtual Memory services (uefi::proto::mem) */ + FnSetVirtualAddressMap set_virtual_address_map; + FnConvertPointer convert_pointer; - /* Variable services (uefi::proto::variable) */ - FnGetVariable get_variable; - FnGetNextVariableName get_next_variable_name; - FnSetVariable set_variable; + /* Variable services (uefi::proto::variable) */ + FnGetVariable get_variable; + FnGetNextVariableName get_next_variable_name; + FnSetVariable set_variable; - /* Miscellaneous and Capsule services (uefi::proto::misc_rt) */ - FnGetNextHighMonotonicCount get_next_high_monotonic_count; - FnResetSystem reset_system; - FnUpdateCapsule update_capsule; - FnQueryCapsuleCapabilities query_capsule_capabilities; - FnQueryVariableInfo query_variable_info; + /* Miscellaneous and Capsule services (uefi::proto::misc_rt) */ + FnGetNextHighMonotonicCount get_next_high_monotonic_count; + FnResetSystem reset_system; + FnUpdateCapsule update_capsule; + FnQueryCapsuleCapabilities query_capsule_capabilities; + FnQueryVariableInfo query_variable_info; } - -/* - * EFI_GUID structure (sec x.x.x of the UEFI 2.11 specification). - */ +/** EFI_GUID structure (sec x.x.x of the UEFI 2.11 specification). */ struct EfiGuid @packed { - uint data1; - ushort data2; - ushort data3; - char[8] data4; + uint data1; + ushort data2; + ushort data3; + char[8] data4; } -/* - * EFI_TIME structure (sec 8.3.1 of the UEFI 2.11 specification). - */ +/** EFI_TIME structure (sec 8.3.1 of the UEFI 2.11 specification). */ struct EfiTime @packed { - ushort year; - char month; - char day; - char hour; - char minute; - char second; - char _pad1; - uint nanosecond; - short timezone; - EfiDaylightFlags daylight; - char _pad2; + ushort year; + char month; + char day; + char hour; + char minute; + char second; + char _pad1; + uint nanosecond; + short timezone; + EfiDaylightFlags daylight; + char _pad2; } bitstruct EfiDaylightFlags : char { - bool adjust : 0; - bool in_daylight : 1; - char reserved : 2..7; + bool adjust : 0; + bool in_daylight : 1; + char reserved : 2..7; } const short EFI_UNSPECIFIED_TIMEZONE = 0x07FF; -/* - * EFI_TIME_CAPABILITIES (sec 8.3.1 of the UEFI 2.11 specification). - */ +/** EFI_TIME_CAPABILITIES (sec 8.3.1 of the UEFI 2.11 specification). */ struct EfiTimeCapabilities @packed { - uint resolution; - uint accuracy; - bool sets_to_zero; -} + uint resolution; + uint accuracy; + bool sets_to_zero; +}
\ No newline at end of file diff --git a/lib/uefi.c3l/src/exports.c3 b/lib/uefi.c3l/src/exports.c3 index 3b337e3..332311c 100644 --- a/lib/uefi.c3l/src/exports.c3 +++ b/lib/uefi.c3l/src/exports.c3 @@ -188,6 +188,15 @@ fn void* memcpy(void* into, void* from, usz length) @export("memcpy") @nostrip return into; } +fn void* memmove(void* into, void* from, usz length) @export("memmove") @nostrip +{ + void* tmp = malloc(length); + memcpy(tmp, from, length); + memcpy(into, tmp, length); + free(tmp); + return into; +} + fn void memset( void* at, char value, @@ -204,4 +213,4 @@ fn void* realloc( ) @export("realloc") @nostrip => efi_system::efi_sys.realloc(pool, prev_len, new_len)!!; fn void free(void* pool) @export("free") @nostrip => efi_system::efi_sys.free(pool); -fn void? free_safe(void* pool) @export("free_safe") @nostrip => efi_system::efi_sys.free_safe(pool);
\ No newline at end of file +fn void? free_safe(void* pool) @export("free_safe") @nostrip => efi_system::efi_sys.free_safe(pool); diff --git a/lib/uefi.c3l/src/lib/console.c3 b/lib/uefi.c3l/src/lib/console.c3 index 43c4116..862b95a 100644 --- a/lib/uefi.c3l/src/lib/console.c3 +++ b/lib/uefi.c3l/src/lib/console.c3 @@ -129,4 +129,4 @@ fn void? Console.clear(&self, ConsoleColor color, bool preserve_attr = false, bo /* Reset the cursor position if specified. */ if (reset_cursor) efi_error(self.stdout.set_cursor_position(self.stdout, 0, 0))!; -} +}
\ No newline at end of file diff --git a/lib/uefi.c3l/src/lib/init.c3 b/lib/uefi.c3l/src/lib/init.c3 index 23dc781..e81c5e3 100644 --- a/lib/uefi.c3l/src/lib/init.c3 +++ b/lib/uefi.c3l/src/lib/init.c3 @@ -89,4 +89,4 @@ fn bool? init(EfiHandle image, SystemTable* st) @public @allow_deprecated initialized = initialized && (null != (void*)efi_system::efi_sys); return initialized; -} +}
\ No newline at end of file diff --git a/lib/uefi.c3l/src/lib/private/print.c3 b/lib/uefi.c3l/src/lib/private/print.c3 index cb5185c..4dc2d84 100644 --- a/lib/uefi.c3l/src/lib/private/print.c3 +++ b/lib/uefi.c3l/src/lib/private/print.c3 @@ -156,4 +156,4 @@ fn EfiString? _bool_to_str(bool b) => b ? a2w("TRUE") : a2w("FALSE"); fn EfiString? _guid_to_str(EfiGuid* guid) { return a2w("SOMEGUID"); -} +}
\ No newline at end of file diff --git a/lib/uefi.c3l/src/lib/string.c3 b/lib/uefi.c3l/src/lib/string.c3 index a03981e..26d4f21 100644 --- a/lib/uefi.c3l/src/lib/string.c3 +++ b/lib/uefi.c3l/src/lib/string.c3 @@ -142,4 +142,4 @@ macro void? strcpy(void* into, AsciiString from) @builtin => ascii_strcpy(into, macro EfiString? a2w(AsciiString c) @builtin => ascii_to_wide(c); macro EfiString wslice_from_raw(void* rawptr, usz length) @builtin => ((EfiStringRaw)rawptr)[:length]; -macro AsciiString slice_from_raw(void* rawptr, usz length) @builtin => ((AsciiStringRaw)rawptr)[:length]; +macro AsciiString slice_from_raw(void* rawptr, usz length) @builtin => ((AsciiStringRaw)rawptr)[:length];
\ No newline at end of file diff --git a/lib/uefi.c3l/src/protocol/evt_timer_task.c3 b/lib/uefi.c3l/src/protocol/evt_timer_task.c3 index 3d2929b..95c6cf3 100644 --- a/lib/uefi.c3l/src/protocol/evt_timer_task.c3 +++ b/lib/uefi.c3l/src/protocol/evt_timer_task.c3 @@ -100,4 +100,4 @@ const EventTpl TPL_NOTIFY = (EventTpl)16; const EventTpl TPL_HIGH_LEVEL = (EventTpl)31; /* EFI_RESTORE_TPL (7.1.9) */ -alias FnRestoreTpl = fn void(EventTpl); +alias FnRestoreTpl = fn void(EventTpl);
\ No newline at end of file diff --git a/lib/uefi.c3l/src/protocol/mem.c3 b/lib/uefi.c3l/src/protocol/mem.c3 index 8bb2cbb..d829005 100644 --- a/lib/uefi.c3l/src/protocol/mem.c3 +++ b/lib/uefi.c3l/src/protocol/mem.c3 @@ -102,4 +102,4 @@ struct MemoryRange { PhysicalAddress address; ulong length; -} +}
\ No newline at end of file |
