diff options
| author | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:41:59 -0400 |
|---|---|---|
| committer | andromeda <andromeda@bsd.my.domain> | 2026-10-19 01:41:59 -0400 |
| commit | 7ebe14b3275fba00662e0c0ceeabe96343d04c5a (patch) | |
| tree | a594923a4073c1eb1db766d41da297a715220479 /lib/uefi.c3l/src/protocol/handler.c3 | |
init
Diffstat (limited to 'lib/uefi.c3l/src/protocol/handler.c3')
| -rw-r--r-- | lib/uefi.c3l/src/protocol/handler.c3 | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/lib/uefi.c3l/src/protocol/handler.c3 b/lib/uefi.c3l/src/protocol/handler.c3 new file mode 100644 index 0000000..5bc9e86 --- /dev/null +++ b/lib/uefi.c3l/src/protocol/handler.c3 @@ -0,0 +1,86 @@ +module uefi::proto::handle; +import uefi; + + +/* 7.3) Protocol Handler Services */ +/* EFI_INSTALL_PROTOCOL_INTERFACE (7.3.2) and related definitions */ +alias FnInstallProtocolInterface = fn EfiStatus(EfiHandle*, EfiGuid*, InterfaceType, void*); + +/* NOTE: EFI_HANDLE and EFI_GUID are defined in the def.c3 globals file. */ +enum InterfaceType +{ + NATIVE_INTERFACE, +} + +/* EFI_UNINSTALL_PROTOCOL_INTERFACE (7.3.3) */ +alias FnUninstallProtocolInterface = fn EfiStatus(EfiHandle*, EfiGuid*, void*); + +/* EFI_REINSTALL_PROTOCOL_INTERFACE (7.3.4) */ +alias FnReinstallProtocolInterface = fn EfiStatus(EfiHandle*, EfiGuid*, void*, void*); + +/* EFI_REGISTER_PROTOCOL_NOTIFY (7.3.5) */ +alias FnRegisterProtocolNotify = fn EfiStatus(EfiGuid*, EfiEvent, void**); + +/* EFI_LOCATE_HANDLE (7.3.6) and related */ +alias FnLocateHandle = fn EfiStatus(HandleSearchType, EfiGuid*, void*, usz*, EfiHandle*); + +enum HandleSearchType +{ + ALL_HANDLES, + BY_REGISTER_NOTIFY, + BY_PROTOCOL, +} + +/* EFI_HANDLE_PROTOCOL (7.3.7) */ +alias FnHandleProtocol = fn EfiStatus(EfiHandle, EfiGuid*, void**); + +/* EFI_LOCATE_DEVICE_PATH (7.3.8) */ +// alias FnLocateDevicePath = fn EfiStatus(EfiGuid*, device::DevicePathProtocol**, EfiHandle*); +alias FnLocateDevicePath = fn EfiStatus(EfiGuid*, void**, EfiHandle*); + +/* EFI_OPEN_PROTOCOL (7.3.9) and related */ +alias FnOpenProtocol = fn EfiStatus(EfiHandle, EfiGuid*, void**, EfiHandle, EfiHandle, OpenProtocolAttribute); + +alias OpenProtocolAttribute = uint; +const OpenProtocolAttribute BY_HANDLE_PROTOCOL = 0x0000_0001; +const OpenProtocolAttribute GET_PROTOCOL = 0x0000_0002; +const OpenProtocolAttribute TEST_PROTOCOL = 0x0000_0004; +const OpenProtocolAttribute BY_CHILD_CONTROLLER = 0x0000_0008; +const OpenProtocolAttribute BY_DRIVER = 0x0000_0010; +const OpenProtocolAttribute EXCLUSIVE = 0x0000_0020; + +/* EFI_CLOSE_PROTOCOL (7.3.10) */ +alias FnCloseProtocol = fn EfiStatus(EfiHandle, EfiGuid*, EfiHandle, EfiHandle); + +/* EFI_OPEN_PROTOCOL_INFORMATION (7.3.11) and related */ +alias FnOpenProtocolInformation = fn EfiStatus(EfiHandle, EfiGuid*, OpenProtocolInformationEntry**, usz*); + +struct OpenProtocolInformationEntry +{ + EfiHandle agent_handle; + EfiHandle controller_handle; + OpenProtocolAttribute attributes; + uint open_count; +} + +/* EFI_CONNECT_CONTROLLER (7.3.12) */ +// alias FnConnectController = fn EfiStatus(EfiHandle, EfiHandle*, device::DevicePathProtocol*, bool); +alias FnConnectController = fn EfiStatus(EfiHandle, EfiHandle*, void*, bool); + +/* EFI_DISCONNECT_CONTROLLER (7.3.13) */ +alias FnDisconnectController = fn EfiStatus(EfiHandle, EfiHandle, EfiHandle); + +/* EFI_PROTOCOLS_PER_HANDLE (7.3.14) */ +alias FnProtocolsPerHandle = fn EfiStatus(EfiHandle, EfiGuid***, usz*); + +/* EFI_LOCATE_HANDLE_BUFFER (7.3.15) */ +alias FnLocateHandleBuffer = fn EfiStatus(HandleSearchType, EfiGuid*, void*, usz*, EfiHandle**); + +/* EFI_LOCATE_PROTOCOL (7.3.16) */ +alias FnLocateProtocol = fn EfiStatus(EfiGuid*, void*, void**); + +/* EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES (7.3.17) */ +alias FnInstallMultipleProtocolInterfaces = fn EfiStatus(EfiHandle*, ...); + +/* EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES (7.3.18) */ +alias FnUninstallMultipleProtocolInterfaces = fn EfiStatus(EfiHandle, ...);
\ No newline at end of file |
