1 /**
2 **/
3 /**
4 
5 Copyright (c) 2012  - 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 PPI produced by a platform driver specifying various
22   expected PCH settings. This PPI is consumed by the PCH PEI modules.
23 
24 **/
25 #ifndef PCH_PLATFORM_POLICY_H_
26 #define PCH_PLATFORM_POLICY_H_
27 //
28 // External include files do NOT need to be explicitly specified in real EDKII
29 // environment
30 //
31 
32 
33 #include "PchRegs.h"
34 
35 //
36 #define PCH_PLATFORM_POLICY_PPI_GUID \
37   { \
38     0x15344673, 0xd365, 0x4be2, 0x85, 0x13, 0x14, 0x97, 0xcc, 0x7, 0x61, 0x1d \
39   }
40 
41 extern EFI_GUID                         gPchPlatformPolicyPpiGuid;
42 
43 ///
44 /// Forward reference for ANSI C compatibility
45 ///
46 typedef struct _PCH_PLATFORM_POLICY_PPI PCH_PLATFORM_POLICY_PPI;
47 
48 ///
49 /// PPI revision number
50 /// Any backwards compatible changes to this PPI will result in an update in the revision number
51 /// Major changes will require publication of a new PPI
52 ///
53 /// Revision 1:    Original version
54 ///
55 #define PCH_PLATFORM_POLICY_PPI_REVISION_1  1
56 #define PCH_PLATFORM_POLICY_PPI_REVISION_2  2
57 #define PCH_PLATFORM_POLICY_PPI_REVISION_3  3
58 #define PCH_PLATFORM_POLICY_PPI_REVISION_4  4
59 #define PCH_PLATFORM_POLICY_PPI_REVISION_5  5
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 typedef struct {
67   UINT8  ThermalDataReportEnable  : 1;   // OBSOLETE from Revision 5 !!! DO NOT USE !!!
68   UINT8  MchTempReadEnable        : 1;
69   UINT8  PchTempReadEnable        : 1;
70   UINT8  CpuEnergyReadEnable      : 1;
71   UINT8  CpuTempReadEnable        : 1;
72   UINT8  Cpu2TempReadEnable       : 1;
73   UINT8  TsOnDimmEnable           : 1;
74   UINT8  Dimm1TempReadEnable      : 1;
75 
76   UINT8  Dimm2TempReadEnable      : 1;
77   UINT8  Dimm3TempReadEnable      : 1;
78   UINT8  Dimm4TempReadEnable      : 1;
79   UINT8  Rsvdbits                 : 5;
80 } PCH_THERMAL_REPORT_CONTROL;
81 //
82 // ---------------------------- HPET Config -----------------------------
83 //
84 typedef struct {
85   BOOLEAN Enable; /// Determines if enable HPET function
86   UINT32  Base;   /// The HPET base address
87 } PCH_HPET_CONFIG;
88 
89 
90 ///
91 /// ---------------------------- SATA Config -----------------------------
92 ///
93 typedef enum {
94   PchSataModeIde,
95   PchSataModeAhci,
96   PchSataModeRaid,
97   PchSataModeMax
98 } PCH_SATA_MODE;
99 
100 ///
101 /// ---------------------------- PCI Express Config -----------------------------
102 ///
103 typedef enum {
104   PchPcieAuto,
105   PchPcieGen1,
106   PchPcieGen2
107 } PCH_PCIE_SPEED;
108 
109 typedef struct {
110   PCH_PCIE_SPEED  PcieSpeed[PCH_PCIE_MAX_ROOT_PORTS];
111 } PCH_PCIE_CONFIG;
112 
113 ///
114 /// ---------------------------- IO APIC Config -----------------------------
115 ///
116 typedef struct {
117   UINT8 IoApicId;
118 } PCH_IOAPIC_CONFIG;
119 
120 ///
121 /// --------------------- Low Power Input Output Config ------------------------
122 ///
123 typedef struct {
124   UINT8                   LpssPciModeEnabled    : 1;    /// Determines if LPSS PCI Mode enabled
125   UINT8                   Dma0Enabled           : 1;     /// Determines if LPSS DMA1 enabled
126   UINT8                   Dma1Enabled           : 1;     /// Determines if LPSS DMA2 enabled
127   UINT8                   I2C0Enabled           : 1;     /// Determines if LPSS I2C #1 enabled
128   UINT8                   I2C1Enabled           : 1;     /// Determines if LPSS I2C #2 enabled
129   UINT8                   I2C2Enabled           : 1;     /// Determines if LPSS I2C #3 enabled
130   UINT8                   I2C3Enabled           : 1;     /// Determines if LPSS I2C #4 enabled
131   UINT8                   I2C4Enabled           : 1;     /// Determines if LPSS I2C #5 enabled
132   UINT8                   I2C5Enabled           : 1;     /// Determines if LPSS I2C #6 enabled
133   UINT8                   I2C6Enabled           : 1;     /// Determines if LPSS I2C #7 enabled
134   UINT8                   Pwm0Enabled           : 1;     /// Determines if LPSS PWM #1 enabled
135   UINT8                   Pwm1Enabled           : 1;     /// Determines if LPSS PWM #2 enabled
136   UINT8                   Hsuart0Enabled        : 1;     /// Determines if LPSS HSUART #1 enabled
137   UINT8                   Hsuart1Enabled        : 1;     /// Determines if LPSS HSUART #2 enabled
138   UINT8                   SpiEnabled            : 1;     /// Determines if LPSS SPI enabled
139   UINT8                   Rsvdbits              : 2;
140 } PEI_PCH_LPSS_CONFIG;
141 
142 ///
143 /// ------------ General PCH Platform Policy PPI definition ------------
144 ///
145 struct _PCH_PLATFORM_POLICY_PPI {
146   UINT8                         Revision;
147   UINT8                         BusNumber;  // Bus Number of the PCH device
148   UINT32                        SpiBase;    // SPI Base Address.
149   UINT32                        PmcBase;    // PMC Base Address.
150   UINT32                        SmbmBase;   // SMB Memory Base Address.
151   UINT32                        IoBase;     // IO Base Address.
152   UINT32                        IlbBase;    // Intel Legacy Block Base Address.
153   UINT32                        PUnitBase;  // PUnit Base Address.
154   UINT32                        Rcba;       // Root Complex Base Address.
155   UINT32                        MphyBase;   // MPHY Base Address.
156   UINT16                        AcpiBase;   // ACPI I/O Base address.
157   UINT16                        GpioBase;   // GPIO Base address
158   PCH_HPET_CONFIG               *HpetConfig;
159   PCH_SATA_MODE                 SataMode;
160   PCH_PCIE_CONFIG               *PcieConfig;
161   PCH_IOAPIC_CONFIG             *IoApicConfig;
162   PEI_PCH_LPSS_CONFIG           *LpssConfig;
163   BOOLEAN                       EnableRmh;      // Determines if enable USB RMH function
164   BOOLEAN                       EhciPllCfgEnable;
165 };
166 
167 #endif
168