4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU Video Controller Driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// QEMU Video Controller Driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _QEMU_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _QEMU_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/GraphicsOutput.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/PciIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DriverSupportedEfiVersion.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/DevicePath.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiDriverEntryPoint.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/TimerLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/Pci.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// QEMU Video PCI Configuration Header values
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CIRRUS_LOGIC_VENDOR_ID 0x1013
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CIRRUS_LOGIC_5430_DEVICE_ID 0x00a8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CIRRUS_LOGIC_5430_ALTERNATE_DEVICE_ID 0x00a0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CIRRUS_LOGIC_5446_DEVICE_ID 0x00b8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// QEMU Vide Graphical Mode Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ModeNumber;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HorizontalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 VerticalResolution;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ColorDepth;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RefreshRate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} QEMU_VIDEO_MODE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_RED_SHIFT 0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_GREEN_SHIFT 3
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_BLUE_SHIFT 6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_RED_MASK (BIT7 | BIT6 | BIT5)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_GREEN_MASK (BIT4 | BIT3 | BIT2)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_BLUE_MASK (BIT1 | BIT0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_TO_COLOR_BYTE(pixel, mask, shift) ((UINT8) ((pixel & mask) << shift))
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_TO_RED_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_RED_MASK, PIXEL_RED_SHIFT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_TO_GREEN_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_GREEN_MASK, PIXEL_GREEN_SHIFT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL_TO_BLUE_BYTE(pixel) PIXEL_TO_COLOR_BYTE(pixel, PIXEL_BLUE_MASK, PIXEL_BLUE_SHIFT)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define RGB_BYTES_TO_PIXEL(Red, Green, Blue) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (UINT8) ( (((Red) >> PIXEL_RED_SHIFT) & PIXEL_RED_MASK) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((Green) >> PIXEL_GREEN_SHIFT) & PIXEL_GREEN_MASK) | \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync (((Blue) >> PIXEL_BLUE_SHIFT) & PIXEL_BLUE_MASK) )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL24_RED_MASK 0x00ff0000
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL24_GREEN_MASK 0x0000ff00
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PIXEL24_BLUE_MASK 0x000000ff
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GRAPHICS_OUTPUT_INVALIDE_MODE_NUMBER 0xffff
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// QEMU Video Private Data Structure
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define QEMU_VIDEO_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('Q', 'V', 'I', 'D')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE Handle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PCI_IO_PROTOCOL *PciIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 OriginalPciAttributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_GRAPHICS_OUTPUT_PROTOCOL GraphicsOutput;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *GopDevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN CurrentMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN MaxMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_MODE_DATA *ModeData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *LineBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN HardwareNeedsStarting;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} QEMU_VIDEO_PRIVATE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Video Mode structure
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Width;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Height;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ColorDepth;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RefreshRate;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 *CrtcSettings;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 *SeqSettings;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 MiscSetting;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} QEMU_VIDEO_VIDEO_MODES;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define QEMU_VIDEO_PRIVATE_DATA_FROM_GRAPHICS_OUTPUT_THIS(a) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR(a, QEMU_VIDEO_PRIVATE_DATA, GraphicsOutput, QEMU_VIDEO_PRIVATE_DATA_SIGNATURE)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Global Variables
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 AttributeController[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 GraphicsController[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 Crtc_640_480_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT16 Seq_640_480_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 Crtc_800_600_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT16 Seq_800_600_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT8 Crtc_1024_768_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern UINT16 Seq_1024_768_256_60[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern QEMU_VIDEO_VIDEO_MODES QemuVideoVideoModes[];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriverBinding;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME_PROTOCOL gQemuVideoComponentName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME2_PROTOCOL gQemuVideoComponentName2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL gQemuVideoDriverSupportedEfiVersion;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Io Registers defined by VGA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CRTC_ADDRESS_REGISTER 0x3d4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define CRTC_DATA_REGISTER 0x3d5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SEQ_ADDRESS_REGISTER 0x3c4
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define SEQ_DATA_REGISTER 0x3c5
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GRAPH_ADDRESS_REGISTER 0x3ce
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define GRAPH_DATA_REGISTER 0x3cf
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATT_ADDRESS_REGISTER 0x3c0
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define MISC_OUTPUT_REGISTER 0x3c2
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define INPUT_STATUS_1_REGISTER 0x3da
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define DAC_PIXEL_MASK_REGISTER 0x3c6
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PALETTE_INDEX_REGISTER 0x3c8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define PALETTE_DATA_REGISTER 0x3c9
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Graphics Output Hardware abstraction internal worker functions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoGraphicsOutputConstructor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoGraphicsOutputDestructor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// EFI_DRIVER_BINDING_PROTOCOL Protocol Interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: Add function description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Controller TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RemainingDevicePath TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: add return values
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoControllerDriverSupported (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: Add function description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Controller TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param RemainingDevicePath TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: add return values
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoControllerDriverStart (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: Add function description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Controller TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param NumberOfChildren TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandleBuffer TODO: add argument description
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TODO: add return values
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoControllerDriverStop (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN NumberOfChildren,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE *ChildHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// EFI Component Name Functions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of a driver in the form of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode string. If the driver specified by This has a user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language, then a pointer to the driver name is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by This does not support the language specified by Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This in the language
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the Driver specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This and the language specified by Language was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoComponentNameGetDriverName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the controller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that is being managed by a driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle in the form of a Unicode string. If the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This has a user readable name in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language, then a pointer to the controller name is returned in ControllerName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and EFI_SUCCESS is returned. If the driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by ControllerHandle and ChildHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned. If the driver specified by This does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support the language specified by Language, then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle[in] The handle of a controller that the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This is managing. This handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specifies the controller whose name is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandle[in] The handle of the child controller to retrieve
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the name of. This is an optional parameter that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may be NULL. It will be NULL for device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers. It will also be NULL for a bus drivers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that wish to retrieve the name of the bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller. It will not be NULL for a bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver that wishes to retrieve the name of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync child controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language from the point of view of the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This was returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoComponentNameGetControllerName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ChildHandle OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **ControllerName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Local Function Prototypes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncInitializeGraphicsMode (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_VIDEO_MODES *ModeData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSetPaletteColor (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Index,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Red,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Green,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Blue
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSetDefaultPalette (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDrawLogo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ScreenWidth,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN ScreenHeight
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncoutb (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Address,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT8 Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncoutw (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Address,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT8
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncinb (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncUINT16
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncinw (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN Address
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncQemuVideoVideoModeSetup (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync QEMU_VIDEO_PRIVATE_DATA *Private
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif