/*++ 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