audk/Vlv2DeviceRefCodePkg/ValleyView2Soc/NorthCluster/Include/Protocol/IgdOpRegion.h

214 lines
6.2 KiB
C

/*++
Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
SPDX-License-Identifier: BSD-2-Clause-Patent
Module Name:
IgdOpRegion.h
Abstract:
This file is part of the IGD OpRegion Implementation. The IGD OpRegion is
an interface between system BIOS, ASL code, and Graphics drivers.
Supporting Specifiction: IGD OpRegion/Software SCI SPEC
Note: Data structures defined in this protocol are packed not naturally
aligned.
GUID forms:
{CDC5DDDF-E79D-41ec-A9B0-6565490DB9D3}
(0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9, 0xd3);
Acronyms:
NVS: ACPI Non Volatile Storage
OpRegion: ACPI Operational Region
VBT: Video BIOS Table (OEM customizable data)
--*/
#ifndef _IGD_OPREGION_PROTOCOL_H_
#define _IGD_OPREGION_PROTOCOL_H_
//
// OpRegion / Software SCI protocol GUID
//
#define IGD_OPREGION_PROTOCOL_GUID \
{ \
0xcdc5dddf, 0xe79d, 0x41ec, 0xa9, 0xb0, 0x65, 0x65, 0x49, 0xd, 0xb9, 0xd3 \
}
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gIgdOpRegionProtocolGuid;
//
// Forward reference for pure ANSI compatability
//
typedef struct _IGD_OPREGION_PROTOCOL IGD_OPREGION_PROTOCOL;
//
// Protocol data definitions
//
//
// OpRegion structures:
// Sub-structures define the different parts of the OpRegion followed by the
// main structure representing the entire OpRegion.
//
// Note: These structures are packed to 1 byte offsets because the exact
// data location is requred by the supporting design specification due to
// the fact that the data is used by ASL and Graphics driver code compiled
// separatly.
//
//
// OpRegion header (mailbox 0) structure and #defines.
//
#pragma pack (1)
typedef struct {
CHAR8 SIGN[0x10]; // 0 OpRegion signature
UINT32 SIZE; // 0x10 OpRegion size
UINT32 OVER; // 0x14 OpRegion structure version
UINT8 SVER[0x20]; // 0x18 System BIOS build version
UINT8 VVER[0x10]; // 0x38 Video BIOS build version
UINT8 GVER[0x10]; // 0x48 Graphic driver build version
UINT32 MBOX; // 0x58 Mailboxes supported
UINT32 DMOD; // 0x5C Driver Model
UINT32 PCON; // 0x60 Platform Configuration Info
CHAR8 GOPV[0x20]; // 0X64 GOP build version
UINT8 RSV[0x7C]; // Reserved
} OPREGION_HEADER;
#pragma pack ()
//
// OpRegion mailbox 1 (public ACPI Methods).
//
#pragma pack (1)
typedef struct {
UINT32 DRDY; // 0 Driver readiness
UINT32 CSTS; // 4 Status
UINT32 CEVT; // 8 Current event
UINT8 RM11[0x14]; // 12 Reserved
UINT32 DIDL; // 32 Supported display devices list
UINT32 DDL2; // 8 Devices.
UINT32 DDL3;
UINT32 DDL4;
UINT32 DDL5;
UINT32 DDL6;
UINT32 DDL7;
UINT32 DDL8;
UINT32 CPDL; // 64 Currently present display devices list
UINT32 CPL2; // 8 Devices.
UINT32 CPL3;
UINT32 CPL4;
UINT32 CPL5;
UINT32 CPL6;
UINT32 CPL7;
UINT32 CPL8;
UINT32 CADL; // 96 Currently active display devices list
UINT32 CAL2; // 8 Devices.
UINT32 CAL3;
UINT32 CAL4;
UINT32 CAL5;
UINT32 CAL6;
UINT32 CAL7;
UINT32 CAL8;
UINT32 NADL; // 128 Next active device list
UINT32 NDL2; // 8 Devices.
UINT32 NDL3;
UINT32 NDL4;
UINT32 NDL5;
UINT32 NDL6;
UINT32 NDL7;
UINT32 NDL8;
UINT32 ASLP; // 160 ASL sleep timeout
UINT32 TIDX; // 164 Toggle table index
UINT32 CHPD; // 168 Current hot plug enable indicator
UINT32 CLID; // 172 Current lid state indicator
UINT32 CDCK; // 176 Current docking state indicator
UINT32 SXSW; // 180 Display Switch notification on Sx State resume
UINT32 EVTS; // 184 Events supported by ASL
UINT32 CNOT; // 188 Current OS Notification
UINT32 NRDY; // 192 Reasons for DRDY = 0
UINT8 RM12[0x3C]; // 196 Reserved
} OPREGION_MBOX1;
#pragma pack ()
//
// OpRegion mailbox 2 (Software SCI Interface).
//
#pragma pack (1)
typedef struct {
UINT32 SCIC; // 0 Software SCI function number parameters
UINT32 PARM; // 4 Software SCI additional parameters
UINT32 DSLP; // 8 Driver sleep timeout
UINT8 RM21[0xF4]; // 12 Reserved
} OPREGION_MBOX2;
#pragma pack ()
//
// OpRegion mailbox 3 (Power Conservation).
//
#pragma pack (1)
typedef struct {
UINT32 ARDY; // 0 Driver readiness
UINT32 ASLC; // 4 ASLE interrupt command / status
UINT32 TCHE; // 8 Technology enabled indicator
UINT32 ALSI; // 12 Current ALS illuminance reading
UINT32 BCLP; // 16 Backlight britness to set
UINT32 PFIT; // 20 Panel fitting Current State or Request
UINT32 CBLV; // 24 Brightness Current State
UINT16 BCLM[0x14]; // 28 Backlight Brightness Level Duty Cycle Mapping Table
UINT32 CPFM; // 68 Panel Fitting Current Mode
UINT32 EPFM; // 72 Enabled Panel Fitting Mode
UINT8 PLUT[0x4A]; // 76 Panel Look Up Table
UINT32 PFMB; // 150 PWM Frequency and Minimum Brightness
UINT32 CCDV; // 154 Color Correction Default Values
UINT32 PCFT; // 158 Power Conservation Features
UINT8 RM31[0x5E]; // 162 Reserved
} OPREGION_MBOX3;
#pragma pack ()
//
// OpRegion mailbox 4 (VBT).
//
#pragma pack (1)
typedef struct {
UINT8 GVD1[0x1800]; // 6K Reserved
} OPREGION_VBT;
#pragma pack ()
#pragma pack (1)
typedef struct {
UINT8 EDIDOVRD[0x400]; // 6K Edid overriding data
} OPREGION_MBOX5;
#pragma pack ()
//
// Entire OpRegion
//
#pragma pack (1)
typedef struct {
OPREGION_HEADER Header; // OpRegion header
OPREGION_MBOX1 MBox1; // Mailbox 1: Public ACPI Methods
OPREGION_MBOX2 MBox2; // Mailbox 2: Software SCI Inteface
OPREGION_MBOX3 MBox3; // Mailbox 3: Power Conservation
OPREGION_VBT VBT; // VBT: Video BIOS Table (OEM customizable data)
OPREGION_MBOX5 MBox5;
} IGD_OPREGION_STRUC;
#pragma pack ()
//
// Protocol data structure definition
//
struct _IGD_OPREGION_PROTOCOL {
IGD_OPREGION_STRUC *OpRegion;
};
#endif