text: // Copyright 2016 The Fuchsia Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  #pragma once
  
  #include <efi/types.h>
  
  #define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
      {0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a}}
  
  
  typedef struct {
      uint32_t RedMask;
      uint32_t GreenMask;
      uint32_t BlueMask;
      uint32_t ReservedMask;
  } efi_pixel_bitmask;
  
  typedef enum {
      PixelRedGreenBlueReserved8BitPerColor,
      PixelBlueGreenRedReserved8BitPerColor,
      PixelBitMask,
      PixelBltOnly,
      PixelFormatMax
  } efi_graphics_pixel_format;
  
  typedef struct {
      uint32_t Version;
      uint32_t HorizontalResolution;
      uint32_t VerticalResolution;
      efi_graphics_pixel_format PixelFormat;
      efi_pixel_bitmask PixelInformation;
      uint32_t PixelsPerScanLine;
  } efi_graphics_output_mode_information;
  
  typedef struct {
      uint32_t MaxMode;
      uint32_t Mode;
      efi_graphics_output_mode_information* Info;
      size_t SizeOfInfo;
      efi_physical_addr FrameBufferBase;
      size_t FrameBufferSize;
  } efi_graphics_output_mode;
  
  typedef struct {
      uint8_t Blue;
      uint8_t Green;
      uint8_t Red;
      uint8_t Reserved;
  } efi_graphics_output_blt_pixel;
  
  typedef enum {
      EfiBltVideoFill,
      EfiBltVideoToBltBuffer,
      EfiBltBufferToVideo,
      EfiBltVideoToVideo,
      EfiGraphicsOutputBltOperationMax
  } efi_graphics_output_blt_operation;
  
  typedef struct efi_graphics_output_protocol {
      efi_status (*QueryMode) (struct efi_graphics_output_protocol* self,
                               uint32_t mode_num, size_t* info_len,
                               efi_graphics_output_mode_information** info) EFIAPI;
  
      efi_status (*SetMode) (struct efi_graphics_output_protocol* self,
                             uint32_t mode_num) EFIAPI;
  
      efi_status (*Blt) (struct efi_graphics_output_protocol* self,
                         efi_graphics_output_blt_pixel* blt_buf,
                         efi_graphics_output_blt_operation blt_operation,
                         size_t src_x, size_t src_y, size_t dest_x, size_t dest_y,
                         size_t width, size_t height, size_t delta) EFIAPI;
  
      efi_graphics_output_mode* Mode;
  } efi_graphics_output_protocol;
  