/** @file This file is part of the IGD OpRegion Implementation. The IGD OpRegion is an interface between system BIOS, ASL code, and Graphics drivers. Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent @par Specification Reference: - IGD OpRegion/Software SCI SPEC **/ #ifndef _IGD_OPREGION_PROTOCOL_H_ #define _IGD_OPREGION_PROTOCOL_H_ extern EFI_GUID gIgdOpRegionProtocolGuid; /** 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. **/ #pragma pack(1) /// /// OpRegion header (mailbox 0) structure and defines. /// typedef struct { CHAR8 SIGN[0x10]; ///< Offset 0 OpRegion signature UINT32 SIZE; ///< Offset 16 OpRegion size UINT32 OVER; ///< Offset 20 OpRegion structure version UINT8 SVER[0x20]; ///< Offset 24 System BIOS build version UINT8 VVER[0x10]; ///< Offset 56 Video BIOS build version UINT8 GVER[0x10]; ///< Offset 72 Graphic driver build version UINT32 MBOX; ///< Offset 88 Mailboxes supported UINT32 DMOD; ///< Offset 92 Driver Model UINT32 PCON; ///< Offset 96 Platform Capabilities CHAR16 DVER[0x10]; ///< Offset 100 GOP Version UINT8 RHD1[0x7C]; ///< Offset 132 Reserved } OPREGION_HEADER; #pragma pack() #pragma pack(1) /// /// OpRegion mailbox 1 (public ACPI Methods). /// typedef struct { UINT32 DRDY; ///< Offset 0 Driver readiness UINT32 CSTS; ///< Offset 4 Status UINT32 CEVT; ///< Offset 8 Current event UINT8 RM11[0x14]; ///< Offset 12 Reserved UINT32 DIDL; ///< Offset 32 Supported display device 1 UINT32 DDL2; ///< Offset 36 Supported display device 2 UINT32 DDL3; ///< Offset 40 Supported display device 3 UINT32 DDL4; ///< Offset 44 Supported display device 4 UINT32 DDL5; ///< Offset 48 Supported display device 5 UINT32 DDL6; ///< Offset 52 Supported display device 6 UINT32 DDL7; ///< Offset 56 Supported display device 7 UINT32 DDL8; ///< Offset 60 Supported display device 8 UINT32 CPDL; ///< Offset 64 Currently present display device 1 UINT32 CPL2; ///< Offset 68 Currently present display device 2 UINT32 CPL3; ///< Offset 72 Currently present display device 3 UINT32 CPL4; ///< Offset 76 Currently present display device 4 UINT32 CPL5; ///< Offset 80 Currently present display device 5 UINT32 CPL6; ///< Offset 84 Currently present display device 6 UINT32 CPL7; ///< Offset 88 Currently present display device 7 UINT32 CPL8; ///< Offset 92 Currently present display device 8 UINT32 CADL; ///< Offset 96 Currently active display device 1 UINT32 CAL2; ///< Offset 100 Currently active display device 2 UINT32 CAL3; ///< Offset 104 Currently active display device 3 UINT32 CAL4; ///< Offset 108 Currently active display device 4 UINT32 CAL5; ///< Offset 112 Currently active display device 5 UINT32 CAL6; ///< Offset 116 Currently active display device 6 UINT32 CAL7; ///< Offset 120 Currently active display device 7 UINT32 CAL8; ///< Offset 124 Currently active display device 8 UINT32 NADL; ///< Offset 128 Next active device 1 UINT32 NDL2; ///< Offset 132 Next active device 2 UINT32 NDL3; ///< Offset 136 Next active device 3 UINT32 NDL4; ///< Offset 140 Next active device 4 UINT32 NDL5; ///< Offset 144 Next active device 5 UINT32 NDL6; ///< Offset 148 Next active device 6 UINT32 NDL7; ///< Offset 152 Next active device 7 UINT32 NDL8; ///< Offset 156 Next active device 8 UINT32 ASLP; ///< Offset 160 ASL sleep timeout UINT32 TIDX; ///< Offset 164 Toggle table index UINT32 CHPD; ///< Offset 168 Current hot plug enable indicator UINT32 CLID; ///< Offset 172 Current lid state indicator UINT32 CDCK; ///< Offset 176 Current docking state indicator UINT32 SXSW; ///< Offset 180 Display Switch notification on Sx State resume UINT32 EVTS; ///< Offset 184 Events supported by ASL UINT32 CNOT; ///< Offset 188 Current OS Notification UINT32 NRDY; ///< Offset 192 Reasons for DRDY = 0 UINT8 RM12[0x3C]; ///< Offset 196 Reserved } OPREGION_MBOX1; #pragma pack() #pragma pack(1) /// /// OpRegion mailbox 2 (Software SCI Interface). /// typedef struct { UINT32 SCIC; ///< Offset 0 Software SCI function number parameters UINT32 PARM; ///< Offset 4 Software SCI additional parameters UINT32 DSLP; ///< Offset 8 Driver sleep timeout UINT8 RM21[0xF4]; ///< Offset 12 Reserved } OPREGION_MBOX2; #pragma pack() #pragma pack(1) /// /// OpRegion mailbox 3 (Power Conservation). /// typedef struct { UINT32 ARDY; ///< Offset 0 Driver readiness UINT32 ASLC; ///< Offset 4 ASLE interrupt command / status UINT32 TCHE; ///< Offset 8 Technology enabled indicator UINT32 ALSI; ///< Offset 12 Current ALS illuminance reading UINT32 BCLP; ///< Offset 16 Backlight britness to set UINT32 PFIT; ///< Offset 20 Panel fitting Request UINT32 CBLV; ///< Offset 24 Brightness Current State UINT16 BCLM[0x14]; ///< Offset 28 Backlight Brightness Level Duty Cycle Mapping Table UINT32 CPFM; ///< Offset 68 Panel Fitting Current Mode UINT32 EPFM; ///< Offset 72 Enabled Panel Fitting Modes UINT8 PLUT[0x4A]; ///< Offset 76 Panel Look Up Table UINT32 PFMB; ///< Offset 150 PWM Frequency and Minimum Brightness UINT32 CCDV; ///< Offset 154 Color Correction Default Values UINT32 PCFT; ///< Offset 158 Power Conservation Features UINT32 SROT; ///< Offset 162 Supported Rotation angle UINT32 IUER; ///< Offset 166 Intel Ultrabook Event Register UINT64 FDSP; ///< Offset 170 FFS Display Physical address UINT32 FDSS; ///< Offset 178 FFS Display Size UINT8 RM32[0x4A]; ///< Offset 182 Reserved } OPREGION_MBOX3; #pragma pack() #pragma pack(1) /// /// OpRegion mailbox 4 (VBT). /// typedef struct { UINT8 GVD1[0x1C00]; ///< Reserved } OPREGION_VBT; #pragma pack() #pragma pack(1) /// /// IGD OpRegion Structure /// 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) } IGD_OPREGION_STRUC; #pragma pack() /// /// IGD OpRegion Protocol /// typedef struct { IGD_OPREGION_STRUC *OpRegion; ///< IGD Operation Region Structure } IGD_OPREGION_PROTOCOL; #endif