mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 02:19:12 +00:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10403 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			198 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			198 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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
 |