| /** @file | |
| UGA IO protocol from the EFI 1.10 specification. | |
| Abstraction of a very simple graphics device. | |
| Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials | |
| are licensed and made available under the terms and conditions of the BSD License | |
| which accompanies this distribution. The full text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #ifndef __UGA_IO_H__ | |
| #define __UGA_IO_H__ | |
| #define EFI_UGA_IO_PROTOCOL_GUID \ | |
| { 0x61a4d49e, 0x6f68, 0x4f1b, { 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 } } | |
| typedef struct _EFI_UGA_IO_PROTOCOL EFI_UGA_IO_PROTOCOL; | |
| typedef UINT32 UGA_STATUS; | |
| typedef enum { | |
| UgaDtParentBus = 1, | |
| UgaDtGraphicsController, | |
| UgaDtOutputController, | |
| UgaDtOutputPort, | |
| UgaDtOther | |
| } UGA_DEVICE_TYPE, *PUGA_DEVICE_TYPE; | |
| typedef UINT32 UGA_DEVICE_ID, *PUGA_DEVICE_ID; | |
| typedef struct { | |
| UGA_DEVICE_TYPE deviceType; | |
| UGA_DEVICE_ID deviceId; | |
| UINT32 ui32DeviceContextSize; | |
| UINT32 ui32SharedContextSize; | |
| } UGA_DEVICE_DATA, *PUGA_DEVICE_DATA; | |
| typedef struct _UGA_DEVICE { | |
| VOID *pvDeviceContext; | |
| VOID *pvSharedContext; | |
| VOID *pvRunTimeContext; | |
| struct _UGA_DEVICE *pParentDevice; | |
| VOID *pvBusIoServices; | |
| VOID *pvStdIoServices; | |
| UGA_DEVICE_DATA deviceData; | |
| } UGA_DEVICE, *PUGA_DEVICE; | |
| typedef enum { | |
| UgaIoGetVersion = 1, | |
| UgaIoGetChildDevice, | |
| UgaIoStartDevice, | |
| UgaIoStopDevice, | |
| UgaIoFlushDevice, | |
| UgaIoResetDevice, | |
| UgaIoGetDeviceState, | |
| UgaIoSetDeviceState, | |
| UgaIoSetPowerState, | |
| UgaIoGetMemoryConfiguration, | |
| UgaIoSetVideoMode, | |
| UgaIoCopyRectangle, | |
| UgaIoGetEdidSegment, | |
| UgaIoDeviceChannelOpen, | |
| UgaIoDeviceChannelClose, | |
| UgaIoDeviceChannelRead, | |
| UgaIoDeviceChannelWrite, | |
| UgaIoGetPersistentDataSize, | |
| UgaIoGetPersistentData, | |
| UgaIoSetPersistentData, | |
| UgaIoGetDevicePropertySize, | |
| UgaIoGetDeviceProperty, | |
| UgaIoBtPrivateInterface | |
| } UGA_IO_REQUEST_CODE, *PUGA_IO_REQUEST_CODE; | |
| typedef struct { | |
| IN UGA_IO_REQUEST_CODE ioRequestCode; | |
| IN VOID *pvInBuffer; | |
| IN UINT64 ui64InBufferSize; | |
| OUT VOID *pvOutBuffer; | |
| IN UINT64 ui64OutBufferSize; | |
| OUT UINT64 ui64BytesReturned; | |
| } UGA_IO_REQUEST, *PUGA_IO_REQUEST; | |
| /** | |
| Dynamically allocate storage for a child UGA_DEVICE. | |
| @param[in] This The EFI_UGA_IO_PROTOCOL instance. | |
| @param[in] ParentDevice ParentDevice specifies a pointer to the parent device of Device. | |
| @param[in] DeviceData A pointer to UGA_DEVICE_DATA returned from a call to DispatchService() | |
| with a UGA_DEVICE of Parent and an IoRequest of type UgaIoGetChildDevice. | |
| @param[in] RunTimeContext Context to associate with Device. | |
| @param[out] Device The Device returns a dynamically allocated child UGA_DEVICE object | |
| for ParentDevice. The caller is responsible for deleting Device. | |
| @retval EFI_SUCCESS Device was returned. | |
| @retval EFI_INVALID_PARAMETER One of the arguments was not valid. | |
| @retval EFI_DEVICE_ERROR The device had an error and could not complete the request. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_UGA_IO_PROTOCOL_CREATE_DEVICE)( | |
| IN EFI_UGA_IO_PROTOCOL *This, | |
| IN UGA_DEVICE *ParentDevice, | |
| IN UGA_DEVICE_DATA *DeviceData, | |
| IN VOID *RunTimeContext, | |
| OUT UGA_DEVICE **Device | |
| ); | |
| /** | |
| Delete a dynamically allocated child UGA_DEVICE object that was allocated via CreateDevice(). | |
| @param[in] This The EFI_UGA_IO_PROTOCOL instance. Type EFI_UGA_IO_PROTOCOL is | |
| defined in Section 10.7. | |
| @param[in] Device The Device points to a UGA_DEVICE object that was dynamically | |
| allocated via a CreateDevice() call. | |
| @retval EFI_SUCCESS Device was returned. | |
| @retval EFI_INVALID_PARAMETER The Device was not allocated via CreateDevice(). | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *EFI_UGA_IO_PROTOCOL_DELETE_DEVICE)( | |
| IN EFI_UGA_IO_PROTOCOL * This, | |
| IN UGA_DEVICE * Device | |
| ); | |
| /** | |
| This is the main UGA service dispatch routine for all UGA_IO_REQUEST s. | |
| @param pDevice pDevice specifies a pointer to a device object associated with a | |
| device enumerated by a pIoRequest->ioRequestCode of type | |
| UgaIoGetChildDevice. The root device for the EFI_UGA_IO_PROTOCOL | |
| is represented by pDevice being set to NULL. | |
| @param pIoRequest | |
| pIoRequest points to a caller allocated buffer that contains data | |
| defined by pIoRequest->ioRequestCode. See Related Definitions for | |
| a definition of UGA_IO_REQUEST_CODE s and their associated data | |
| structures. | |
| @return UGA_STATUS | |
| **/ | |
| typedef UGA_STATUS | |
| (EFIAPI *PUGA_FW_SERVICE_DISPATCH)( | |
| IN PUGA_DEVICE pDevice, | |
| IN OUT PUGA_IO_REQUEST pIoRequest | |
| ); | |
| /// | |
| /// Provides a basic abstraction to send I/O requests to the graphics device and any of its children. | |
| /// | |
| struct _EFI_UGA_IO_PROTOCOL { | |
| EFI_UGA_IO_PROTOCOL_CREATE_DEVICE CreateDevice; | |
| EFI_UGA_IO_PROTOCOL_DELETE_DEVICE DeleteDevice; | |
| PUGA_FW_SERVICE_DISPATCH DispatchService; | |
| }; | |
| extern EFI_GUID gEfiUgaIoProtocolGuid; | |
| // | |
| // Data structure that is stored in the EFI Configuration Table with the | |
| // EFI_UGA_IO_PROTOCOL_GUID. The option ROMs listed in this table may have | |
| // EBC UGA drivers. | |
| // | |
| typedef struct { | |
| UINT32 Version; | |
| UINT32 HeaderSize; | |
| UINT32 SizeOfEntries; | |
| UINT32 NumberOfEntries; | |
| } EFI_DRIVER_OS_HANDOFF_HEADER; | |
| typedef enum { | |
| EfiUgaDriverFromPciRom, | |
| EfiUgaDriverFromSystem, | |
| EfiDriverHandoffMax | |
| } EFI_DRIVER_HANOFF_ENUM; | |
| typedef struct { | |
| EFI_DRIVER_HANOFF_ENUM Type; | |
| EFI_DEVICE_PATH_PROTOCOL *DevicePath; | |
| VOID *PciRomImage; | |
| UINT64 PciRomSize; | |
| } EFI_DRIVER_OS_HANDOFF; | |
| #endif |