use core::fmt::Debug;
use super::form_browser::BrowserActionRequest;
use super::{FormId, QuestionId, StringId};
use crate::protocol::device_path::DevicePathProtocol;
use crate::{Boolean, Char16, Guid, Status, guid, newtype_enum};
#[derive(Debug)]
#[repr(C)]
pub struct ConfigKeywordHandlerProtocol {
pub set_data: unsafe extern "efiapi" fn(
this: *mut Self,
keyword_string: *const Char16,
progress: *mut *const Char16,
progress_err: *mut u32,
) -> Status,
pub get_data: unsafe extern "efiapi" fn(
this: *const Self,
namespace_id: *const Char16,
keyword_string: *const Char16,
progress: *mut *const Char16,
progress_err: *mut u32,
results: *mut *const Char16,
) -> Status,
}
impl ConfigKeywordHandlerProtocol {
pub const GUID: Guid = guid!("0a8badd5-03b8-4d19-b128-7b8f0edaa596");
}
newtype_enum! {
#[derive(Default)]
pub enum BrowserAction: usize => {
CHANGING = 0,
CHANGED = 1,
RETRIEVE = 2,
FORM_OPEN = 3,
FORM_CLOSE = 4,
SUBMITTED = 5,
DEFAULT_STANDARD = 0x1000,
DEFAULT_MANUFACTURING = 0x1001,
DEFAULT_SAFE = 0x1002,
DEFAULT_PLATFORM = 0x2000,
DEFAULT_HARDWARE = 0x3000,
DEFAULT_FIRMWARE = 0x4000,
}
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct HiiTime {
pub hour: u8,
pub minute: u8,
pub second: u8,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct HiiDate {
pub year: u16,
pub month: u8,
pub day: u8,
}
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct HiiRef {
pub question_id: QuestionId,
pub form_id: FormId,
pub guid: Guid,
pub string_id: StringId,
}
#[repr(C)]
#[derive(Copy, Clone)]
pub union IfrTypeValue {
pub u8: u8, pub u16: u16, pub u32: u32, pub u64: u64, pub b: Boolean, pub time: HiiTime, pub date: HiiDate, pub string: StringId, pub hii_ref: HiiRef, }
impl core::fmt::Debug for IfrTypeValue {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("EfiIfrTypeValue").finish()
}
}
#[derive(Debug)]
#[repr(C)]
pub struct HiiConfigAccessProtocol {
pub extract_config: unsafe extern "efiapi" fn(
this: *const Self,
request: *const Char16,
progress: *mut *const Char16,
results: *mut *const Char16,
) -> Status,
pub route_config: unsafe extern "efiapi" fn(
this: *const Self,
configuration: *const Char16,
progress: *mut *const Char16,
) -> Status,
pub callback: unsafe extern "efiapi" fn(
this: *const Self,
action: BrowserAction,
question_id: QuestionId,
value_type: u8,
value: *mut IfrTypeValue,
action_request: *mut BrowserActionRequest,
) -> Status,
}
impl HiiConfigAccessProtocol {
pub const GUID: Guid = guid!("330d4706-f2a0-4e4f-a369-b66fa8d54385");
}
#[derive(Debug)]
#[repr(C)]
pub struct HiiConfigRoutingProtocol {
pub extract_config: unsafe extern "efiapi" fn(
this: *const Self,
config_request: *const Char16,
progress: *mut *const Char16,
results: *mut *const Char16,
) -> Status,
pub export_config:
unsafe extern "efiapi" fn(this: *const Self, results: *mut *const Char16) -> Status,
pub route_config: unsafe extern "efiapi" fn(
this: *const Self,
configuration: *const Char16,
progress: *mut *const Char16,
) -> Status,
pub block_to_config: unsafe extern "efiapi" fn(
this: *const Self,
config_request: *const Char16,
block: *const u8,
block_size: usize,
config: *mut *const Char16,
progress: *mut *const Char16,
) -> Status,
pub config_to_block: unsafe extern "efiapi" fn(
this: *const Self,
config_resp: *const Char16,
block: *mut *const u8,
block_size: *mut usize,
progress: *mut *const Char16,
) -> Status,
pub get_alt_cfg: unsafe extern "efiapi" fn(
this: *const Self,
config_resp: *const Char16,
guid: *const Guid,
name: *const Char16,
device_path: *const DevicePathProtocol,
alt_cfg_id: *const Char16,
alt_cfg_resp: *mut *const Char16,
) -> Status,
}
impl HiiConfigRoutingProtocol {
pub const GUID: Guid = guid!("587e72d7-cc50-4f79-8209-ca291fc1a10f");
}