104 lines
2.5 KiB
Rust
104 lines
2.5 KiB
Rust
//! Graphics Output Protocol
|
|
//!
|
|
//! Provides means to configure graphics hardware and get access to
|
|
//! framebuffers. Replaces the old UGA interface from EFI with a
|
|
//! VGA-independent API.
|
|
|
|
pub const PROTOCOL_GUID: crate::base::Guid = crate::base::Guid::from_fields(
|
|
0x9042a9de,
|
|
0x23dc,
|
|
0x4a38,
|
|
0x96,
|
|
0xfb,
|
|
&[0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a],
|
|
);
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct PixelBitmask {
|
|
pub red_mask: u32,
|
|
pub green_mask: u32,
|
|
pub blue_mask: u32,
|
|
pub reserved_mask: u32,
|
|
}
|
|
|
|
pub type GraphicsPixelFormat = u32;
|
|
|
|
pub const PIXEL_RED_GREEN_BLUE_RESERVED_8_BIT_PER_COLOR: GraphicsPixelFormat = 0x00000000;
|
|
pub const PIXEL_BLUE_GREEN_RED_RESERVED_8_BIT_PER_COLOR: GraphicsPixelFormat = 0x00000001;
|
|
pub const PIXEL_BIT_MASK: GraphicsPixelFormat = 0x00000002;
|
|
pub const PIXEL_BLT_ONLY: GraphicsPixelFormat = 0x00000003;
|
|
pub const PIXEL_FORMAT_MAX: GraphicsPixelFormat = 0x00000004;
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct ModeInformation {
|
|
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,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct Mode {
|
|
pub max_mode: u32,
|
|
pub mode: u32,
|
|
pub info: *mut ModeInformation,
|
|
pub size_of_info: usize,
|
|
pub frame_buffer_base: crate::base::PhysicalAddress,
|
|
pub frame_buffer_size: usize,
|
|
}
|
|
|
|
#[repr(C)]
|
|
#[derive(Clone, Copy, Debug)]
|
|
pub struct BltPixel {
|
|
pub blue: u8,
|
|
pub green: u8,
|
|
pub red: u8,
|
|
pub reserved: u8,
|
|
}
|
|
|
|
pub type BltOperation = u32;
|
|
|
|
pub const BLT_VIDEO_FILL: BltOperation = 0x00000000;
|
|
pub const BLT_VIDEO_TO_BLT_BUFFER: BltOperation = 0x00000001;
|
|
pub const BLT_BUFFER_TO_VIDEO: BltOperation = 0x00000002;
|
|
pub const BLT_VIDEO_TO_VIDEO: BltOperation = 0x00000003;
|
|
pub const BLT_OPERATION_MAX: BltOperation = 0x00000004;
|
|
|
|
pub type ProtocolQueryMode = eficall! {fn(
|
|
*mut Protocol,
|
|
u32,
|
|
*mut usize,
|
|
*mut *mut ModeInformation,
|
|
) -> crate::base::Status};
|
|
|
|
pub type ProtocolSetMode = eficall! {fn(
|
|
*mut Protocol,
|
|
u32,
|
|
) -> crate::base::Status};
|
|
|
|
pub type ProtocolBlt = eficall! {fn(
|
|
*mut Protocol,
|
|
*mut BltPixel,
|
|
BltOperation,
|
|
usize,
|
|
usize,
|
|
usize,
|
|
usize,
|
|
usize,
|
|
usize,
|
|
usize,
|
|
) -> crate::base::Status};
|
|
|
|
#[repr(C)]
|
|
pub struct Protocol {
|
|
pub query_mode: ProtocolQueryMode,
|
|
pub set_mode: ProtocolSetMode,
|
|
pub blt: ProtocolBlt,
|
|
pub mode: *mut Mode,
|
|
}
|