| pub mod serial; |
| |
| use crate::{guid, Char16, Event, Guid, PhysicalAddress, Status}; |
| use bitflags::bitflags; |
| use core::ptr; |
| |
| bitflags! { |
| /// Absolute pointer device attributes. |
| #[repr(transparent)] |
| #[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord)] |
| pub struct AbsolutePointerModeAttributes: u32 { |
| /// If set, this device supports an alternate button input. |
| const SUPPORTS_ALT_ACTIVE = 1; |
| |
| /// If set, this device returns pressure data in |
| /// [`AbsolutePointerStatus::current_z`]. |
| const SUPPORTS_PRESSURE_AS_Z = 2; |
| } |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct AbsolutePointerMode { |
| pub absolute_min_x: u64, |
| pub absolute_min_y: u64, |
| pub absolute_min_z: u64, |
| pub absolute_max_x: u64, |
| pub absolute_max_y: u64, |
| pub absolute_max_z: u64, |
| pub attributes: AbsolutePointerModeAttributes, |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct AbsolutePointerState { |
| pub current_x: u64, |
| pub current_y: u64, |
| pub current_z: u64, |
| pub active_buttons: u32, |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct AbsolutePointerProtocol { |
| pub reset: unsafe extern "efiapi" fn(this: *mut Self, extended_verification: u8) -> Status, |
| pub get_state: |
| unsafe extern "efiapi" fn(this: *const Self, state: *mut AbsolutePointerState) -> Status, |
| pub wait_for_input: Event, |
| pub mode: *mut AbsolutePointerMode, |
| } |
| |
| impl AbsolutePointerProtocol { |
| pub const GUID: Guid = guid!("8d59d32b-c655-4ae9-9b15-f25904992a43"); |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct InputKey { |
| pub scan_code: u16, |
| pub unicode_char: Char16, |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct SimpleTextInputProtocol { |
| pub reset: unsafe extern "efiapi" fn(this: *mut Self, extended_verification: bool) -> Status, |
| pub read_key_stroke: unsafe extern "efiapi" fn(this: *mut Self, key: *mut InputKey) -> Status, |
| pub wait_for_key: Event, |
| } |
| |
| impl SimpleTextInputProtocol { |
| pub const GUID: Guid = guid!("387477c1-69c7-11d2-8e39-00a0c969723b"); |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct SimpleTextOutputMode { |
| pub max_mode: i32, |
| pub mode: i32, |
| pub attribute: i32, |
| pub cursor_column: i32, |
| pub cursor_row: i32, |
| pub cursor_visible: bool, |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct SimpleTextOutputProtocol { |
| pub reset: unsafe extern "efiapi" fn(this: *mut Self, extended: bool) -> Status, |
| pub output_string: unsafe extern "efiapi" fn(this: *mut Self, string: *const Char16) -> Status, |
| pub test_string: unsafe extern "efiapi" fn(this: *mut Self, string: *const Char16) -> Status, |
| pub query_mode: unsafe extern "efiapi" fn( |
| this: *mut Self, |
| mode: usize, |
| columns: *mut usize, |
| rows: *mut usize, |
| ) -> Status, |
| pub set_mode: unsafe extern "efiapi" fn(this: *mut Self, mode: usize) -> Status, |
| pub set_attribute: unsafe extern "efiapi" fn(this: *mut Self, attribute: usize) -> Status, |
| pub clear_screen: unsafe extern "efiapi" fn(this: *mut Self) -> Status, |
| pub set_cursor_position: |
| unsafe extern "efiapi" fn(this: *mut Self, column: usize, row: usize) -> Status, |
| pub enable_cursor: unsafe extern "efiapi" fn(this: *mut Self, visible: bool) -> Status, |
| pub mode: *mut SimpleTextOutputMode, |
| } |
| |
| impl SimpleTextOutputProtocol { |
| pub const GUID: Guid = guid!("387477c2-69c7-11d2-8e39-00a0c969723b"); |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct SimplePointerMode { |
| pub resolution_x: u64, |
| pub resolution_y: u64, |
| pub resolution_z: u64, |
| pub left_button: u8, |
| pub right_button: u8, |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq)] |
| #[repr(C)] |
| pub struct SimplePointerState { |
| pub relative_movement_x: i32, |
| pub relative_movement_y: i32, |
| pub relative_movement_z: i32, |
| pub left_button: u8, |
| pub right_button: u8, |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct SimplePointerProtocol { |
| pub reset: unsafe extern "efiapi" fn( |
| this: *mut SimplePointerProtocol, |
| extended_verification: bool, |
| ) -> Status, |
| pub get_state: unsafe extern "efiapi" fn( |
| this: *mut SimplePointerProtocol, |
| state: *mut SimplePointerState, |
| ) -> Status, |
| pub wait_for_input: Event, |
| pub mode: *const SimplePointerMode, |
| } |
| |
| impl SimplePointerProtocol { |
| pub const GUID: Guid = guid!("31878c87-0b75-11d5-9a4f-0090273fc14d"); |
| } |
| |
| #[derive(Debug)] |
| #[repr(C)] |
| pub struct GraphicsOutputProtocol { |
| pub query_mode: unsafe extern "efiapi" fn( |
| *const Self, |
| mode_number: u32, |
| size_of_info: *mut usize, |
| info: *mut *const GraphicsOutputModeInformation, |
| ) -> Status, |
| pub set_mode: unsafe extern "efiapi" fn(*mut Self, mode_number: u32) -> Status, |
| pub blt: unsafe extern "efiapi" fn( |
| *mut Self, |
| blt_buffer: *mut GraphicsOutputBltPixel, |
| blt_operation: GraphicsOutputBltOperation, |
| source_x: usize, |
| source_y: usize, |
| destination_x: usize, |
| destination_y: usize, |
| width: usize, |
| height: usize, |
| delta: usize, |
| ) -> Status, |
| pub mode: *mut GraphicsOutputProtocolMode, |
| } |
| |
| impl GraphicsOutputProtocol { |
| pub const GUID: Guid = guid!("9042a9de-23dc-4a38-96fb-7aded080516a"); |
| } |
| |
| #[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| #[repr(C)] |
| pub struct GraphicsOutputProtocolMode { |
| pub max_mode: u32, |
| pub mode: u32, |
| pub info: *mut GraphicsOutputModeInformation, |
| pub size_of_info: usize, |
| pub frame_buffer_base: PhysicalAddress, |
| pub frame_buffer_size: usize, |
| } |
| |
| impl Default for GraphicsOutputProtocolMode { |
| fn default() -> Self { |
| Self { |
| max_mode: 0, |
| mode: 0, |
| info: ptr::null_mut(), |
| size_of_info: 0, |
| frame_buffer_base: 0, |
| frame_buffer_size: 0, |
| } |
| } |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| #[repr(C)] |
| pub struct GraphicsOutputModeInformation { |
| pub version: u32, |
| pub horizontal_resolution: u32, |
| pub vertical_resolution: u32, |
| pub pixel_format: GraphicsPixelFormat, |
| pub pixel_information: PixelBitmask, |
| pub pixels_per_scan_line: u32, |
| } |
| |
| /// Bitmask used to indicate which bits of a pixel represent a given color. |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| #[repr(C)] |
| pub struct PixelBitmask { |
| /// The bits indicating the red channel. |
| pub red: u32, |
| |
| /// The bits indicating the green channel. |
| pub green: u32, |
| |
| /// The bits indicating the blue channel. |
| pub blue: u32, |
| |
| /// The reserved bits, which are ignored by the video hardware. |
| pub reserved: u32, |
| } |
| |
| newtype_enum! { |
| #[derive(Default)] |
| pub enum GraphicsPixelFormat: u32 => { |
| PIXEL_RED_GREEN_BLUE_RESERVED_8_BIT_PER_COLOR = 0, |
| PIXEL_BLUE_GREEN_RED_RESERVED_8_BIT_PER_COLOR = 1, |
| PIXEL_BIT_MASK = 2, |
| PIXEL_BLT_ONLY = 3, |
| PIXEL_FORMAT_MAX = 4, |
| } |
| } |
| |
| #[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Ord, PartialOrd, Hash)] |
| #[repr(C)] |
| pub struct GraphicsOutputBltPixel { |
| pub blue: u8, |
| pub green: u8, |
| pub red: u8, |
| pub reserved: u8, |
| } |
| |
| newtype_enum! { |
| #[derive(Default)] |
| pub enum GraphicsOutputBltOperation: u32 => { |
| BLT_VIDEO_FILL = 0, |
| BLT_VIDEO_TO_BLT_BUFFER = 1, |
| BLT_BUFFER_TO_VIDEO = 2, |
| BLT_VIDEO_TO_VIDEO = 3, |
| GRAPHICS_OUTPUT_BLT_OPERATION_MAX = 4, |
| } |
| } |