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