use crate::guid::Guid;
use crate::status::Status;
use crate::Handle;
use super::package::{HiiPackageHeader, HiiPackageKind, HiiPackageListHeader};
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[repr(transparent)]
pub struct HiiHandle(pub usize);
pub type HiiDatabaseNotify = extern "win64" fn(
PackageKind: HiiPackageKind,
PackageGuid: &Guid,
Package: &HiiPackageHeader,
Handle: HiiHandle,
NotifyKind: HiiDatabaseNotifyKind,
) -> Status;
#[repr(usize)]
pub enum HiiDatabaseNotifyKind {
NewPack = 1,
RemovePack = 2,
ExportPack = 4,
AddPack = 8,
}
#[repr(C)]
pub struct HiiKeyboardLayout {
pub LayoutLength: u16,
pub Guid: Guid,
pub LayoutDescriptorStringOffset: u32,
pub DescriptorCount: u8,
}
#[repr(C)]
pub struct HiiDatabase {
pub NewPackageList: extern "win64" fn(
&HiiDatabase,
PackageList: &HiiPackageListHeader,
DriverHandle: Handle,
Handle: &mut HiiHandle,
) -> Status,
pub RemovePackageList: extern "win64" fn(&HiiDatabase, Handle: HiiHandle) -> Status,
pub UpdatePackageList: extern "win64" fn(
&HiiDatabase,
Handle: HiiHandle,
PackageList: &HiiPackageListHeader,
) -> Status,
pub ListPackageLists: extern "win64" fn(
&HiiDatabase,
PackageKind: HiiPackageKind,
PackageGuid: &Guid,
HandleBufferLength: &mut usize,
Handle: *mut HiiHandle,
) -> Status,
pub ExportPackageLists: extern "win64" fn(
&HiiDatabase,
Handle: HiiHandle,
BufferSize: &mut usize,
Buffer: &mut HiiPackageListHeader,
) -> Status,
pub RegisterPackageNotify: extern "win64" fn(
&HiiDatabase,
PackageKind: HiiPackageKind,
PackageGuid: &Guid,
PackageNotifyFn: HiiDatabaseNotify,
NotifyKind: HiiDatabaseNotifyKind,
NotifyHandle: &mut Handle,
) -> Status,
pub UnregisterPackageNotify:
extern "win64" fn(&HiiDatabase, NotificationHandle: Handle) -> Status,
pub FindKeyboardLayouts: extern "win64" fn(
&HiiDatabase,
KeyGuidBufferLength: &mut u16,
KeyGuidBuffer: *mut Guid,
) -> Status,
pub GetKeyboardLayout: extern "win64" fn(
&HiiDatabase,
KeyGuid: &Guid,
KeyboardLayoutLength: &mut u16,
KeyboardLayout: *mut HiiKeyboardLayout,
) -> Status,
pub SetKeyboardLayout: extern "win64" fn(&HiiDatabase, KeyGuid: &Guid) -> Status,
pub GetPackageListHandle: extern "win64" fn(
&HiiDatabase,
PackageListHandle: HiiHandle,
DriverHandle: &mut Handle,
) -> Status,
}