uefi_raw/protocol/
driver.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2
3use crate::protocol::device_path::DevicePathProtocol;
4use crate::{guid, Guid, Handle, Status};
5
6#[derive(Debug)]
7#[repr(C)]
8pub struct DriverBindingProtocol {
9    pub supported: unsafe extern "efiapi" fn(
10        this: *const Self,
11        controller_handle: Handle,
12        remaining_device_path: *const DevicePathProtocol,
13    ) -> Status,
14    pub start: unsafe extern "efiapi" fn(
15        this: *const Self,
16        controller_handle: Handle,
17        remaining_device_path: *const DevicePathProtocol,
18    ) -> Status,
19    pub stop: unsafe extern "efiapi" fn(
20        this: *const Self,
21        controller_handle: Handle,
22        number_of_children: usize,
23        child_handle_buffer: *const Handle,
24    ) -> Status,
25    pub version: u32,
26    pub image_handle: Handle,
27    pub driver_binding_handle: Handle,
28}
29
30impl DriverBindingProtocol {
31    pub const GUID: Guid = guid!("18a031ab-b443-4d1a-a5c0-0c09261e9f71");
32}
33
34#[derive(Debug)]
35#[repr(C)]
36pub struct ComponentName2Protocol {
37    pub get_driver_name: unsafe extern "efiapi" fn(
38        this: *const Self,
39        language: *const u8,
40        driver_name: *mut *const u16,
41    ) -> Status,
42    pub get_controller_name: unsafe extern "efiapi" fn(
43        this: *const Self,
44        controller_handle: Handle,
45        child_handle: Handle,
46        language: *const u8,
47        controller_name: *mut *const u16,
48    ) -> Status,
49    pub supported_languages: *const u8,
50}
51
52impl ComponentName2Protocol {
53    pub const GUID: Guid = guid!("6a7a5cff-e8d9-4f70-bada-75ab3025ce14");
54
55    /// GUID of the original `EFI_COMPONENT_NAME_PROTOCOL`. This protocol was
56    /// deprecated in UEFI 2.1 in favor of the new
57    /// `EFI_COMPONENT_NAME2_PROTOCOL`. The two protocols are identical
58    /// except the encoding of supported languages changed from ISO 639-2 to RFC
59    /// 4646.
60    pub const DEPRECATED_COMPONENT_NAME_GUID: Guid = guid!("107a772c-d5e1-11d4-9a46-0090273fc14d");
61}
62
63#[derive(Debug)]
64#[repr(C)]
65pub struct ServiceBindingProtocol {
66    pub create_child:
67        unsafe extern "efiapi" fn(this: *mut Self, child_handle: *mut Handle) -> Status,
68    pub destroy_child: unsafe extern "efiapi" fn(this: *mut Self, child_handle: Handle) -> Status,
69}