4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UGA IO protocol from the EFI 1.10 specification.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Abstraction of a very simple graphics device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2006 - 2008, 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#ifndef __UGA_IO_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __UGA_IO_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_UGA_IO_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { 0x61a4d49e, 0x6f68, 0x4f1b, { 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 } }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_UGA_IO_PROTOCOL EFI_UGA_IO_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UINT32 UGA_STATUS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDtParentBus = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDtGraphicsController,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDtOutputController,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDtOutputPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaDtOther
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} UGA_DEVICE_TYPE, *PUGA_DEVICE_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UINT32 UGA_DEVICE_ID, *PUGA_DEVICE_ID;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UGA_DEVICE_TYPE deviceType;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UGA_DEVICE_ID deviceId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ui32DeviceContextSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 ui32SharedContextSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} UGA_DEVICE_DATA, *PUGA_DEVICE_DATA;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _UGA_DEVICE {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *pvDeviceContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *pvSharedContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *pvRunTimeContext;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync struct _UGA_DEVICE *pParentDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *pvBusIoServices;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *pvStdIoServices;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UGA_DEVICE_DATA deviceData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} UGA_DEVICE, *PUGA_DEVICE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetVersion = 1,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetChildDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoStartDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoStopDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoFlushDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoResetDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetDeviceState,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoSetDeviceState,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoSetPowerState,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetMemoryConfiguration,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoSetVideoMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoCopyRectangle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetEdidSegment,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoDeviceChannelOpen,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoDeviceChannelClose,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoDeviceChannelRead,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoDeviceChannelWrite,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetPersistentDataSize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetPersistentData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoSetPersistentData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetDevicePropertySize,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetDeviceProperty,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoBtPrivateInterface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} UGA_IO_REQUEST_CODE, *PUGA_IO_REQUEST_CODE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UGA_IO_REQUEST_CODE ioRequestCode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *pvInBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 ui64InBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID *pvOutBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 ui64OutBufferSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 ui64BytesReturned;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} UGA_IO_REQUEST, *PUGA_IO_REQUEST;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Dynamically allocate storage for a child UGA_DEVICE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This The EFI_UGA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ParentDevice ParentDevice specifies a pointer to the parent device of Device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceData A pointer to UGA_DEVICE_DATA returned from a call to DispatchService()
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync with a UGA_DEVICE of Parent and an IoRequest of type UgaIoGetChildDevice.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] RunTimeContext Context to associate with Device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Device The Device returns a dynamically allocated child UGA_DEVICE object
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for ParentDevice. The caller is responsible for deleting Device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Device was returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER One of the arguments was not valid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UGA_IO_PROTOCOL_CREATE_DEVICE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UGA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UGA_DEVICE *ParentDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UGA_DEVICE_DATA *DeviceData,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *RunTimeContext,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UGA_DEVICE **Device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Delete a dynamically allocated child UGA_DEVICE object that was allocated via CreateDevice().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This The EFI_UGA_IO_PROTOCOL instance. Type EFI_UGA_IO_PROTOCOL is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync defined in Section 10.7.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Device The Device points to a UGA_DEVICE object that was dynamically
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allocated via a CreateDevice() call.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Device was returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The Device was not allocated via CreateDevice().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_UGA_IO_PROTOCOL_DELETE_DEVICE)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_UGA_IO_PROTOCOL * This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UGA_DEVICE * Device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This is the main UGA service dispatch routine for all UGA_IO_REQUEST s.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param pDevice pDevice specifies a pointer to a device object associated with a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device enumerated by a pIoRequest->ioRequestCode of type
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UgaIoGetChildDevice. The root device for the EFI_UGA_IO_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is represented by pDevice being set to NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param pIoRequest
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync pIoRequest points to a caller allocated buffer that contains data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync defined by pIoRequest->ioRequestCode. See Related Definitions for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync a definition of UGA_IO_REQUEST_CODE s and their associated data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync structures.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @return UGA_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef UGA_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *PUGA_FW_SERVICE_DISPATCH)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN PUGA_DEVICE pDevice,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT PUGA_IO_REQUEST pIoRequest
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Provides a basic abstraction to send I/O requests to the graphics device and any of its children.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_UGA_IO_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UGA_IO_PROTOCOL_CREATE_DEVICE CreateDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UGA_IO_PROTOCOL_DELETE_DEVICE DeleteDevice;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PUGA_FW_SERVICE_DISPATCH DispatchService;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiUgaIoProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Data structure that is stored in the EFI Configuration Table with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// EFI_UGA_IO_PROTOCOL_GUID. The option ROMs listed in this table may have
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// EBC UGA drivers.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Version;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 HeaderSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 SizeOfEntries;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 NumberOfEntries;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_DRIVER_OS_HANDOFF_HEADER;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUgaDriverFromPciRom,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiUgaDriverFromSystem,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiDriverHandoffMax
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_DRIVER_HANOFF_ENUM;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DRIVER_HANOFF_ENUM Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL *DevicePath;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *PciRomImage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PciRomSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_DRIVER_OS_HANDOFF;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif