1 /**
2 **/
3 /**
4 
5 Copyright (c) 2013  - 2014, Intel Corporation. All rights reserved
6 
7   This program and the accompanying materials are licensed and made available under
8   the terms and conditions of the BSD License that accompanies this distribution.
9   The full text of the license may be found at
10   http://opensource.org/licenses/bsd-license.php.
11 
12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 
15 
16 
17   @file
18   PchPlatformPolicy.h
19 
20   @brief
21   PCH policy protocol produced by a platform driver specifying various
22   expected PCH settings. This protocol is consumed by the PCH drivers.
23 
24 **/
25 #ifndef _PCH_PLATFORM_POLICY_H_
26 #define _PCH_PLATFORM_POLICY_H_
27 
28 
29 //
30 #include "PchRegs.h"
31 #ifndef ECP_FLAG
32 #include "Uefi.h"
33 #endif
34 
35 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_GUID \
36   { \
37     0x4b0165a9, 0x61d6, 0x4e23, 0xa0, 0xb5, 0x3e, 0xc7, 0x9c, 0x2e, 0x30, 0xd5 \
38   }
39 extern EFI_GUID                                   gDxePchPlatformPolicyProtocolGuid;
40 
41 ///
42 /// Forward reference for ANSI C compatibility
43 ///
44 typedef struct _DXE_PCH_PLATFORM_POLICY_PROTOCOL  DXE_PCH_PLATFORM_POLICY_PROTOCOL;
45 
46 ///
47 /// Protocol revision number
48 /// Any backwards compatible changes to this protocol will result in an update in the revision number
49 /// Major changes will require publication of a new protocol
50 ///
51 /// Revision 1: Original version
52 ///
53 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_1 1
54 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_2 2
55 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_3 3
56 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_4 4
57 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_5 5
58 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_6 6
59 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_7 7
60 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_8 8
61 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_9 9
62 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_10 10
63 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_11 11
64 #define DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_12 12
65 
66 ///
67 /// Generic definitions for device enabling/disabling used by PCH code.
68 ///
69 #define PCH_DEVICE_ENABLE   1
70 #define PCH_DEVICE_DISABLE  0
71 
72 ///
73 /// ---------------------------- Device Enabling ------------------------------
74 ///
75 /// PCH Device enablings
76 ///
77 typedef struct {
78   UINT8 Lan               : 1;    /// 0: Disable; 1: Enable
79   UINT8 Azalia            : 2;    /// 0: Disable; 1: Enable; 2: Auto
80   UINT8 Sata              : 1;    /// 0: Disable; 1: Enable
81   UINT8 Smbus             : 1;    /// 0: Disable; 1: Enable
82   UINT8 LpeEnabled        : 2;    /// 0: Disabled; 1: PCI Mode 2: ACPI Mode
83   UINT8 Reserved[1];              /// Reserved fields for future expansion w/o protocol change
84 } PCH_DEVICE_ENABLING;
85 
86 ///
87 /// ---------------------------- USB Config -----------------------------
88 ///
89 ///
90 /// Overcurrent pins
91 ///
92 typedef enum {
93   PchUsbOverCurrentPin0 = 0,
94   PchUsbOverCurrentPin1,
95   PchUsbOverCurrentPin2,
96   PchUsbOverCurrentPin3,
97   PchUsbOverCurrentPin4,
98   PchUsbOverCurrentPin5,
99   PchUsbOverCurrentPin6,
100   PchUsbOverCurrentPin7,
101   PchUsbOverCurrentPinSkip,
102   PchUsbOverCurrentPinMax
103 } PCH_USB_OVERCURRENT_PIN;
104 
105 typedef struct {
106   UINT8   Enable            : 1;    /// 0: Disable; 1: Enable. This would take effect while UsbPerPortCtl is enabled
107   UINT8   Panel             : 1;    /// 0: Back Panel Port; 1: Front Panel Port.
108   UINT8   Dock              : 1;    /// 0: Not docking port; 1: Docking Port.
109   UINT8   Rsvdbits          : 5;
110 } PCH_USB_PORT_SETTINGS;
111 
112 typedef struct {
113   UINT8 Enable              : 1;    /// 0: Disable; 1: Enable
114   UINT8 Rsvdbits            : 7;
115 } PCH_USB20_CONTROLLER_SETTINGS;
116 
117 typedef struct {
118   UINT8 Enable              : 2;    /// 0: 0: Disabled; 1: PCI Mode 2: ACPI Mode
119   UINT8 Rsvdbits            : 6;
120 } PCH_USBOTG_CONTROLLER_SETTINGS;
121 
122 #define PCH_XHCI_MODE_OFF         0
123 #define PCH_XHCI_MODE_ON          1
124 #define PCH_XHCI_MODE_AUTO        2
125 #define PCH_XHCI_MODE_SMARTAUTO   3
126 
127 #define PCH_EHCI_DEBUG_OFF        0
128 #define PCH_EHCI_DEBUG_ON         1
129 
130 #define PCH_USB_FRONT_PANEL       1
131 #define PCH_USB_BACK_PANEL        0
132 
133 typedef struct {
134   UINT8 Mode               : 2;    /// 0: Disable; 1: Enable, 2: Auto, 3: Smart Auto
135   UINT8 PreBootSupport     : 1;    /// 0: No xHCI driver available; 1: xHCI driver available
136   UINT8 XhciStreams        : 1;    /// 0: Disable; 1: Enable
137   UINT8 Rsvdbits           : 4;
138 } PCH_USB30_CONTROLLER_SETTINGS;
139 
140 typedef struct {
141   UINT8 UsbPerPortCtl       : 1;    /// 0: Disable; 1: Enable Per-port enable control
142   UINT8 Ehci1Usbr           : 1;    /// 0: Disable; 1: Enable EHCI 1 USBR
143   UINT8 RsvdBits            : 6;
144   PCH_USB_PORT_SETTINGS          PortSettings[PCH_USB_MAX_PHYSICAL_PORTS];
145   PCH_USB20_CONTROLLER_SETTINGS  Usb20Settings[PchEhciControllerMax];
146   PCH_USB30_CONTROLLER_SETTINGS  Usb30Settings;
147   PCH_USBOTG_CONTROLLER_SETTINGS UsbOtgSettings;
148   PCH_USB_OVERCURRENT_PIN        Usb20OverCurrentPins[PCH_USB_MAX_PHYSICAL_PORTS];
149   PCH_USB_OVERCURRENT_PIN        Usb30OverCurrentPins[PCH_XHCI_MAX_USB3_PORTS];
150   ///
151   /// The length of Usb Port to configure the USB transmitter,
152   /// Bits [16:4] represents length of Usb Port in inches using octal format and [3:0] is for the decimal Point.
153   ///
154   UINT16                        Usb20PortLength[PCH_EHCI_MAX_PORTS];
155   UINT16                        EhciDebug;
156   UINT16                        UsbXhciLpmSupport;
157 
158 } PCH_USB_CONFIG;
159 
160 ///
161 /// ---------------------------- PCI Express Config ----------------------
162 ///
163 /// The values before AutoConfig match the setting of PCI Express Base Specification 1.1, please be careful for adding new feature
164 ///
165 typedef enum {
166   PchPcieAspmDisabled,
167   PchPcieAspmL0s,
168   PchPcieAspmL1,
169   PchPcieAspmL0sL1,
170   PchPcieAspmAutoConfig,
171   PchPcieAspmMax
172 } PCH_PCI_EXPRESS_ASPM_CONTROL;
173 
174 ///
175 /// Refer to PCH EDS for the PCH implementation values corresponding
176 /// to below PCI-E spec defined ranges
177 ///
178 typedef enum {
179   PchPciECompletionTO_Default,
180   PchPciECompletionTO_50_100us,
181   PchPciECompletionTO_1_10ms,
182   PchPciECompletionTO_16_55ms,
183   PchPciECompletionTO_65_210ms,
184   PchPciECompletionTO_260_900ms,
185   PchPciECompletionTO_1_3P5s,
186   PchPciECompletionTO_4_13s,
187   PchPciECompletionTO_17_64s,
188   PchPciECompletionTO_Disabled
189 } PCH_PCIE_COMPLETION_TIMEOUT;
190 
191 typedef struct {
192   UINT8 Enable                          : 1;    /// Root Port enabling, 0: Disable; 1: Enable.
193   UINT8 Hide                            : 1;    /// Whether or not to hide the configuration space of this port
194   UINT8 SlotImplemented                 : 1;
195   UINT8 HotPlug                         : 1;
196   UINT8 PmSci                           : 1;
197   UINT8 ExtSync                         : 1;    /// Extended Synch
198   UINT8 Rsvdbits                        : 2;
199   ///
200   /// Error handlings
201   ///
202   UINT8 UnsupportedRequestReport        : 1;
203   UINT8 FatalErrorReport                : 1;
204   UINT8 NoFatalErrorReport              : 1;
205   UINT8 CorrectableErrorReport          : 1;
206   UINT8 PmeInterrupt                    : 1;
207   UINT8 SystemErrorOnFatalError         : 1;
208   UINT8 SystemErrorOnNonFatalError      : 1;
209   UINT8 SystemErrorOnCorrectableError   : 1;
210 
211   UINT8 AdvancedErrorReporting          : 1;
212   UINT8 TransmitterHalfSwing            : 1;
213   UINT8 Reserved                        : 6;    /// Reserved fields for future expansion w/o protocol change
214 
215   UINT8 FunctionNumber;                         /// The function number this root port is mapped to.
216   UINT8 PhysicalSlotNumber;
217   PCH_PCIE_COMPLETION_TIMEOUT   CompletionTimeout;
218   PCH_PCI_EXPRESS_ASPM_CONTROL  Aspm;
219 } PCH_PCI_EXPRESS_ROOT_PORT_CONFIG;
220 
221 typedef struct {
222   /**
223     VendorId
224 
225       The vendor Id of Pci Express card ASPM setting override, 0xFFFF means any Vendor ID
226 
227     DeviceId
228 
229       The Device Id of Pci Express card ASPM setting override, 0xFFFF means any Device ID
230 
231     RevId
232 
233       The Rev Id of Pci Express card ASPM setting override, 0xFF means all steppings
234 
235     BaseClassCode
236 
237       The Base Class Code of Pci Express card ASPM setting override, 0xFF means all base class
238 
239     SubClassCode
240 
241       The Sub Class Code of Pci Express card ASPM setting override, 0xFF means all sub class
242 
243 
244     EndPointAspm
245 
246       The override ASPM setting from End point
247   **/
248   UINT16                        VendorId;
249   UINT16                        DeviceId;
250   UINT8                         RevId;
251   UINT8                         BaseClassCode;
252   UINT8                         SubClassCode;
253   PCH_PCI_EXPRESS_ASPM_CONTROL  EndPointAspm;
254 } PCH_PCIE_DEVICE_ASPM_OVERRIDE;
255 
256 typedef struct {
257   UINT16  VendorId; ///< PCI configuration space offset 0
258   UINT16  DeviceId; ///< PCI configuration space offset 2
259   UINT8   RevId;    ///< PCI configuration space offset 8; 0xFF means all steppings
260   /**
261     SnoopLatency bit definition
262     Note: All Reserved bits must be set to 0
263 
264     BIT[15]     - When set to 1b, indicates that the values in bits 9:0 are valid
265                   When clear values in bits 9:0 will be ignored
266     BITS[14:13] - Reserved
267     BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
268                   000b - 1 ns
269                   001b - 32 ns
270                   010b - 1024 ns
271                   011b - 32,768 ns
272                   100b - 1,048,576 ns
273                   101b - 33,554,432 ns
274                   110b - Reserved
275                   111b - Reserved
276     BITS[9:0]   - Snoop Latency Value. The value in these bits will be multiplied with
277                   the scale in bits 12:10
278   **/
279   UINT16  SnoopLatency;
280   /**
281     NonSnoopLatency bit definition
282     Note: All Reserved bits must be set to 0
283 
284     BIT[15]     - When set to 1b, indicates that the values in bits 9:0 are valid
285                   When clear values in bits 9:0 will be ignored
286     BITS[14:13] - Reserved
287     BITS[12:10] - Value in bits 9:0 will be multiplied with the scale in these bits
288                   000b - 1 ns
289                   001b - 32 ns
290                   010b - 1024 ns
291                   011b - 32,768 ns
292                   100b - 1,048,576 ns
293                   101b - 33,554,432 ns
294                   110b - Reserved
295                   111b - Reserved
296     BITS[9:0]   - Non Snoop Latency Value. The value in these bits will be multiplied with
297                   the scale in bits 12:10
298   **/
299   UINT16  NonSnoopLatency;
300 } PCH_PCIE_DEVICE_LTR_OVERRIDE;
301 
302 typedef struct {
303   ///
304   /// Temp Bus Number range available to be assigned to
305   /// each root port and its downstream devices for initialization
306   /// of these devices before PCI Bus enumeration
307   ///
308   UINT8                             TempRootPortBusNumMin;
309   UINT8                             TempRootPortBusNumMax;
310   PCH_PCI_EXPRESS_ROOT_PORT_CONFIG  RootPort[PCH_PCIE_MAX_ROOT_PORTS];
311   BOOLEAN                           RootPortClockGating;
312   UINT8                             NumOfDevAspmOverride;     /// Number of PCI Express card Aspm setting override
313   PCH_PCIE_DEVICE_ASPM_OVERRIDE     *DevAspmOverride;         /// The Pointer which is point to Pci Express card Aspm setting override
314   UINT8                             PcieDynamicGating;        /// Need PMC enable it first from PMC 0x3_12 MCU 318.
315 } PCH_PCI_EXPRESS_CONFIG;
316 
317 
318 ///
319 /// ---------------------------- SATA Config -----------------------------
320 ///
321 typedef enum {
322   PchSataSpeedSupportGen1 = 1,
323   PchSataSpeedSupportGen2
324 } PCH_SATA_SPEED_SUPPORT;
325 
326 typedef struct {
327   UINT8 Enable          : 1;    /// 0: Disable; 1: Enable
328   UINT8 HotPlug         : 1;    /// 0: Disable; 1: Enable
329   UINT8 MechSw          : 1;    /// 0: Disable; 1: Enable
330   UINT8 External        : 1;    /// 0: Disable; 1: Enable
331   UINT8 SpinUp          : 1;    /// 0: Disable; 1: Enable the COMRESET initialization Sequence to the device
332   UINT8 Rsvdbits        : 3;    /// Reserved fields for future expansion w/o protocol change
333 } PCH_SATA_PORT_SETTINGS;
334 
335 typedef struct {
336   PCH_SATA_PORT_SETTINGS  PortSettings[PCH_AHCI_MAX_PORTS];
337   UINT8 RaidAlternateId : 1;    /// 0: Disable; 1: Enable
338   UINT8 Raid0           : 1;    /// 0: Disable; 1: Enable RAID0
339   UINT8 Raid1           : 1;    /// 0: Disable; 1: Enable RAID1
340   UINT8 Raid10          : 1;    /// 0: Disable; 1: Enable RAID10
341   UINT8 Raid5           : 1;    /// 0: Disable; 1: Enable RAID5
342   UINT8 Irrt            : 1;    /// 0: Disable; 1: Enable Intel Rapid Recovery Technology
343   UINT8 OromUiBanner    : 1;    /// 0: Disable; 1: Enable OROM UI and BANNER
344   UINT8 HddUnlock       : 1;    /// 0: Disable; 1: Indicates that the HDD password unlock in the OS is enabled
345 
346   UINT8 LedLocate       : 1;    /// 0: Disable; 1: Indicates that the LED/SGPIO hardware is attached and ping to locate feature is enabled on the OS
347   UINT8 IrrtOnly        : 1;    /// 0: Disable; 1: Allow only IRRT drives to span internal and external ports
348   UINT8 TestMode        : 1;    /// 0: Disable; 1: Allow entrance to the PCH SATA test modes
349   UINT8 SalpSupport     : 1;    /// 0: Disable; 1: Enable Aggressive Link Power Management
350   UINT8 LegacyMode      : 1;    /// 0: Native PCI mode; 1: Legacy mode, when SATA controller is operating in IDE mode
351   UINT8 SpeedSupport    : 4;    /// Indicates the maximum speed the SATA controller can support
352   /// 1h: 1.5 Gb/s (Gen 1); 2h: 3 Gb/s(Gen 2)
353 
354   UINT8 Rsvdbits        : 7;    // Reserved fields for future expansion w/o protocol change
355 } PCH_SATA_CONFIG;
356 ///
357 /// --------------------------- AZALIA Config ------------------------------
358 ///
359 typedef struct {
360   UINT32  VendorDeviceId;
361   UINT16  SubSystemId;
362   UINT8   RevisionId;                       /// 0xFF applies to all steppings
363   UINT8   FrontPanelSupport;
364   UINT16  NumberOfRearJacks;
365   UINT16  NumberOfFrontJacks;
366 } PCH_AZALIA_VERB_TABLE_HEADER;
367 
368 typedef struct {
369   PCH_AZALIA_VERB_TABLE_HEADER  VerbTableHeader;
370   UINT32                        *VerbTableData;
371 } PCH_AZALIA_VERB_TABLE;
372 
373 typedef struct {
374   UINT8                 Pme       : 1;      /// 0: Disable; 1: Enable
375   UINT8                 DS        : 1;      /// 0: Docking is not supported; 1:Docking is supported
376   UINT8                 DA        : 1;      /// 0: Docking is not attached; 1:Docking is attached
377   UINT8                 HdmiCodec : 1;      /// 0: Disable; 1: Enable
378   UINT8                 AzaliaVCi : 1;      /// 0: Disable; 1: Enable
379   UINT8                 Rsvdbits  : 3;
380   UINT8                 AzaliaVerbTableNum; /// Number of verb tables provided by platform
381   PCH_AZALIA_VERB_TABLE *AzaliaVerbTable;   /// Pointer to the actual verb table(s)
382   UINT16                ResetWaitTimer;     /// The delay timer after Azalia reset, the value is number of microseconds
383 } PCH_AZALIA_CONFIG;
384 
385 ///
386 /// --------------------------- Smbus Config ------------------------------
387 ///
388 typedef struct {
389   UINT8 NumRsvdSmbusAddresses;
390   UINT8 *RsvdSmbusAddressTable;
391 } PCH_SMBUS_CONFIG;
392 
393 ///
394 /// --------------------------- Miscellaneous PM Config ------------------------------
395 ///
396 typedef struct {
397   UINT8 MeWakeSts           : 1;
398   UINT8 MeHrstColdSts       : 1;
399   UINT8 MeHrstWarmSts       : 1;
400   UINT8 MeHostPowerDn       : 1;
401   UINT8 WolOvrWkSts         : 1;
402   UINT8 Rsvdbits            : 3;
403 } PCH_POWER_RESET_STATUS;
404 
405 typedef struct {
406   UINT8  PmeB0S5Dis         : 1;
407   UINT8  WolEnableOverride  : 1;
408   UINT8  Rsvdbits           : 6;
409 } PCH_WAKE_CONFIG;
410 
411 typedef enum {
412   PchSlpS360us,
413   PchSlpS31ms,
414   PchSlpS350ms,
415   PchSlpS32s
416 } PCH_SLP_S3_MIN_ASSERT;
417 
418 typedef enum {
419   PchSlpS4PchTime,   /// The time defined in EDS Power Sequencing and Reset Signal Timings table
420   PchSlpS41s,
421   PchSlpS42s,
422   PchSlpS43s,
423   PchSlpS44s
424 } PCH_SLP_S4_MIN_ASSERT;
425 
426 typedef struct {
427   ///
428   /// Specify which Power/Reset bits need to be cleared by
429   /// the PCH Init Driver.
430   /// Usually platform drivers take care of these bits, but if
431   /// not, let PCH Init driver clear the bits.
432   ///
433   PCH_POWER_RESET_STATUS  PowerResetStatusClear;
434   ///
435   /// Specify Wake Policy
436   ///
437   PCH_WAKE_CONFIG         WakeConfig;
438   ///
439   /// SLP_XX Minimum Assertion Width Policy
440   ///
441   PCH_SLP_S3_MIN_ASSERT   PchSlpS3MinAssert;
442   PCH_SLP_S4_MIN_ASSERT   PchSlpS4MinAssert;
443   UINT8                   SlpStrchSusUp : 1;  /// Enable/Disable SLP_X Stretching After SUS Well Power Up
444   UINT8                   SlpLanLowDc   : 1;
445   UINT8                   Rsvdbits      : 6;
446 } PCH_MISC_PM_CONFIG;
447 
448 ///
449 /// --------------------------- Subsystem Vendor ID / Subsystem ID Config -----
450 ///
451 typedef struct {
452   UINT16  SubSystemVendorId;
453   UINT16  SubSystemId;
454 } PCH_DEFAULT_SVID_SID;
455 
456 ///
457 /// --------------------------- Lock Down Config ------------------------------
458 ///
459 typedef struct {
460   UINT8  GlobalSmi      : 1;
461   UINT8  BiosInterface  : 1;
462   UINT8  RtcLock        : 1;
463   UINT8  BiosLock       : 1;
464   UINT8  Rsvdbits       : 4;
465   UINT8  PchBiosLockSwSmiNumber;
466 } PCH_LOCK_DOWN_CONFIG;
467 //
468 // --------------------------- Serial IRQ Config ------------------------------
469 //
470 typedef enum {
471   PchQuietMode,
472   PchContinuousMode
473 } PCH_SIRQ_MODE;
474 ///
475 /// Refer to SoC EDS for the details of Start Frame Pulse Width in Continuous and Quiet mode
476 ///
477 
478 typedef struct {
479   BOOLEAN                 SirqEnable;       /// Determines if enable Serial IRQ
480   PCH_SIRQ_MODE           SirqMode;         /// Serial IRQ Mode Select
481 } PCH_LPC_SIRQ_CONFIG;
482 
483 ///
484 /// --------------------------- Power Optimizer Config ------------------------------
485 ///
486 typedef struct {
487   UINT8  NumOfDevLtrOverride;                            /// Number of Pci Express card listed in LTR override table
488   PCH_PCIE_DEVICE_LTR_OVERRIDE *DevLtrOverride;          /// Pointer to Pci Express devices LTR override table
489 } PCH_PWR_OPT_CONFIG;
490 
491 ///
492 /// --------------------- Low Power Input Output Config ------------------------
493 ///
494 typedef struct {
495   UINT8                   LpssPciModeEnabled    : 1;    /// Determines if LPSS PCI Mode enabled
496   UINT8                   Dma0Enabled           : 1;     /// Determines if LPSS DMA1 enabled
497   UINT8                   Dma1Enabled           : 1;     /// Determines if LPSS DMA2 enabled
498   UINT8                   I2C0Enabled           : 1;     /// Determines if LPSS I2C #1 enabled
499   UINT8                   I2C1Enabled           : 1;     /// Determines if LPSS I2C #2 enabled
500   UINT8                   I2C2Enabled           : 1;     /// Determines if LPSS I2C #3 enabled
501   UINT8                   I2C3Enabled           : 1;     /// Determines if LPSS I2C #4 enabled
502   UINT8                   I2C4Enabled           : 1;     /// Determines if LPSS I2C #5 enabled
503   UINT8                   I2C5Enabled           : 1;     /// Determines if LPSS I2C #6 enabled
504   UINT8                   I2C6Enabled           : 1;     /// Determines if LPSS I2C #7 enabled
505   UINT8                   Pwm0Enabled           : 1;     /// Determines if LPSS PWM #1 enabled
506   UINT8                   Pwm1Enabled           : 1;     /// Determines if LPSS PWM #2 enabled
507   UINT8                   Hsuart0Enabled        : 1;     /// Determines if LPSS HSUART #1 enabled
508   UINT8                   Hsuart1Enabled        : 1;     /// Determines if LPSS HSUART #2 enabled
509   UINT8                   SpiEnabled            : 1;     /// Determines if LPSS SPI enabled
510   UINT8                   Rsvdbits              : 2;
511 } PCH_LPSS_CONFIG;
512 
513 ///
514 /// ----------------------------- SCC Config --------------------------------
515 ///
516 typedef struct {
517   UINT8                   eMMCEnabled           : 1;      /// Determines if SCC eMMC enabled
518   UINT8                   SdioEnabled           : 1;      /// Determines if SCC SDIO enabled
519   UINT8                   SdcardEnabled         : 1;      /// Determines if SCC SD Card enabled
520   UINT8                   HsiEnabled            : 1;      /// Determines if SCC HSI enabled
521   UINT8                   eMMC45Enabled         : 1;      /// Determines if SCC eMMC 4.5 enabled
522   UINT8                   eMMC45DDR50Enabled    : 1;  /// Determines if DDR50 enabled for eMMC 4.5
523   UINT8                   eMMC45HS200Enabled    : 1;  /// Determines if HS200nabled for eMMC 4.5
524   UINT8                   Rsvdbits              : 1;
525   UINT8                   SdCardSDR25Enabled    : 1;    /// Determines if SDR25 for SD Card
526   UINT8                   SdCardDDR50Enabled    : 1;    /// Determines if DDR50 for SD Card
527   UINT8                   Rsvdbits1             : 6;
528   UINT8                   eMMC45RetuneTimerValue;  /// Determines retune timer value.
529 } PCH_SCC_CONFIG;
530 
531 ///
532 /// ------------ General PCH Platform Policy protocol definition ------------
533 ///
534 struct _DXE_PCH_PLATFORM_POLICY_PROTOCOL {
535   UINT8                   Revision;
536   UINT8                   BusNumber;  /// PCI Bus Number of the PCH device
537   PCH_DEVICE_ENABLING     *DeviceEnabling;
538   PCH_USB_CONFIG          *UsbConfig;
539   PCH_PCI_EXPRESS_CONFIG  *PciExpressConfig;
540 
541   PCH_SATA_CONFIG         *SataConfig;
542   PCH_AZALIA_CONFIG       *AzaliaConfig;
543   PCH_SMBUS_CONFIG        *SmbusConfig;
544   PCH_MISC_PM_CONFIG      *MiscPmConfig;
545   PCH_DEFAULT_SVID_SID    *DefaultSvidSid;
546   PCH_LOCK_DOWN_CONFIG    *LockDownConfig;
547   PCH_LPC_SIRQ_CONFIG     *SerialIrqConfig;
548   PCH_PWR_OPT_CONFIG      *PwrOptConfig;
549   PCH_LPSS_CONFIG         *LpssConfig;
550   PCH_SCC_CONFIG          *SccConfig;
551   UINT8                   IdleReserve;
552   UINT8                   EhciPllCfgEnable;
553   UINT8                   AcpiHWRed; //Hardware Reduced Mode
554 };
555 
556 #endif
557