aboutsummaryrefslogtreecommitdiff
path: root/lib/std/os/uefi/protocols/graphics_output_protocol.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/os/uefi/protocols/graphics_output_protocol.zig')
-rw-r--r--lib/std/os/uefi/protocols/graphics_output_protocol.zig79
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/std/os/uefi/protocols/graphics_output_protocol.zig b/lib/std/os/uefi/protocols/graphics_output_protocol.zig
new file mode 100644
index 0000000000..4713df0501
--- /dev/null
+++ b/lib/std/os/uefi/protocols/graphics_output_protocol.zig
@@ -0,0 +1,79 @@
+const uefi = @import("std").os.uefi;
+const Guid = uefi.Guid;
+
+/// UEFI Specification, Version 2.8, 12.9
+pub const GraphicsOutputProtocol = extern struct {
+ _query_mode: extern fn (*const GraphicsOutputProtocol, u32, *usize, **GraphicsOutputModeInformation) usize,
+ _set_mode: extern fn (*const GraphicsOutputProtocol, u32) usize,
+ _blt: extern fn (*const GraphicsOutputProtocol, ?[*]GraphicsOutputBltPixel, GraphicsOutputBltOperation, usize, usize, usize, usize, usize, usize, usize) usize,
+ mode: *GraphicsOutputProtocolMode,
+
+ pub fn queryMode(self: *const GraphicsOutputProtocol, mode: u32, size_of_info: *usize, info: **GraphicsOutputModeInformation) usize {
+ return self._query_mode(self, mode, size_of_info, info);
+ }
+
+ pub fn setMode(self: *const GraphicsOutputProtocol, mode: u32) usize {
+ return self._set_mode(self, mode);
+ }
+
+ pub fn blt(self: *const GraphicsOutputProtocol, blt_buffer: ?[*]GraphicsOutputBltPixel, blt_operation: GraphicsOutputBltOperation, source_x: usize, source_y: usize, destination_x: usize, destination_y: usize, width: usize, height: usize, delta: usize) usize {
+ return self._blt(self, blt_buffer, blt_operation, source_x, source_y, destination_x, destination_y, width, height, delta);
+ }
+
+ pub const guid align(8) = Guid{
+ .time_low = 0x9042a9de,
+ .time_mid = 0x23dc,
+ .time_high_and_version = 0x4a38,
+ .clock_seq_high_and_reserved = 0x96,
+ .clock_seq_low = 0xfb,
+ .node = [_]u8{ 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a },
+ };
+};
+
+pub const GraphicsOutputProtocolMode = extern struct {
+ max_mode: u32,
+ mode: u32,
+ info: *GraphicsOutputModeInformation,
+ size_of_info: usize,
+ frame_buffer_base: u64,
+ frame_buffer_size: usize,
+};
+
+pub const GraphicsOutputModeInformation = extern struct {
+ version: u32 = undefined,
+ horizontal_resolution: u32 = undefined,
+ vertical_resolution: u32 = undefined,
+ pixel_format: GraphicsPixelFormat = undefined,
+ pixel_information: PixelBitmask = undefined,
+ pixels_per_scan_line: u32 = undefined,
+};
+
+pub const GraphicsPixelFormat = extern enum(u32) {
+ PixelRedGreenBlueReserved8BitPerColor,
+ PixelBlueGreenRedReserved8BitPerColor,
+ PixelBitMask,
+ PixelBltOnly,
+ PixelFormatMax,
+};
+
+pub const PixelBitmask = extern struct {
+ red_mask: u32,
+ green_mask: u32,
+ blue_mask: u32,
+ reserved_mask: u32,
+};
+
+pub const GraphicsOutputBltPixel = extern struct {
+ blue: u8,
+ green: u8,
+ red: u8,
+ reserved: u8 = undefined,
+};
+
+pub const GraphicsOutputBltOperation = extern enum(u32) {
+ BltVideoFill,
+ BltVideoToBltBuffer,
+ BltBufferToVideo,
+ BltVideoToVideo,
+ GraphicsOutputBltOperationMax,
+};