/*++ Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License that 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. 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