mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-12 14:36:56 +01:00
192 lines
5.9 KiB
C
192 lines
5.9 KiB
C
|
/** @file
|
||
|
UGA IO protocol from the EFI 1.10 specification.
|
||
|
|
||
|
Abstraction of a very simple graphics device.
|
||
|
|
||
|
Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
|
||
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||
|
|
||
|
**/
|
||
|
|
||
|
#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
|