1 /** @file
2 File to contain all the hardware specific stuff for the Smm QNCn dispatch protocol.
3 
4 Copyright (c) 2013-2015 Intel Corporation.
5 
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution.  The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10 
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13 
14 
15 **/
16 
17 //
18 // Include common header file for this module.
19 //
20 #include "CommonHeader.h"
21 
22 #include "QNCSmmHelpers.h"
23 
24 QNC_SMM_SOURCE_DESC QNCN_SOURCE_DESCS[NUM_ICHN_TYPES] = {
25 
26   // QNCnMch (0)
27   NULL_SOURCE_DESC_INITIALIZER,
28 
29   // QNCnPme (1)
30   NULL_SOURCE_DESC_INITIALIZER,
31 
32   // QNCnRtcAlarm (2)
33   {
34     QNC_SMM_NO_FLAGS,
35     {
36       {{ACPI_ADDR_TYPE, {R_QNC_PM1BLK_PM1E}}, S_QNC_PM1BLK_PM1E, N_QNC_PM1BLK_PM1E_RTC},
37       NULL_BIT_DESC_INITIALIZER
38     },
39     {
40       {{ACPI_ADDR_TYPE, {R_QNC_PM1BLK_PM1S}}, S_QNC_PM1BLK_PM1S, N_QNC_PM1BLK_PM1S_RTC}
41     }
42   },
43 
44   // QNCnRingIndicate (3)
45   NULL_SOURCE_DESC_INITIALIZER,
46 
47   // QNCnAc97Wake (4)
48   NULL_SOURCE_DESC_INITIALIZER,
49 
50   // QNCnSerialIrq (5)
51   NULL_SOURCE_DESC_INITIALIZER,
52 
53   // QNCnY2KRollover (6)
54   NULL_SOURCE_DESC_INITIALIZER,
55 
56   // QNCnTcoTimeout (7)
57   NULL_SOURCE_DESC_INITIALIZER,
58 
59   // QNCnOsTco (8)
60   NULL_SOURCE_DESC_INITIALIZER,
61 
62   // QNCnNmi (9)
63   NULL_SOURCE_DESC_INITIALIZER,
64 
65   // QNCnIntruderDetect (10)
66   NULL_SOURCE_DESC_INITIALIZER,
67 
68   // QNCnBiosWp (11)
69   {
70     QNC_SMM_CLEAR_WITH_ZERO,
71     {
72       {
73         {
74           PCI_ADDR_TYPE,
75           {
76             (
77               (PCI_BUS_NUMBER_QNC << 24) |
78               (PCI_DEVICE_NUMBER_QNC_LPC << 16) |
79               (PCI_FUNCTION_NUMBER_QNC_LPC << 8) |
80               R_QNC_LPC_BIOS_CNTL
81             )
82           }
83         },
84         S_QNC_LPC_BIOS_CNTL,
85         N_QNC_LPC_BIOS_CNTL_BLE
86       },
87       NULL_BIT_DESC_INITIALIZER
88     },
89     {
90       {
91         {
92           PCI_ADDR_TYPE,
93           {
94             (
95               (PCI_BUS_NUMBER_QNC << 24) |
96               (PCI_DEVICE_NUMBER_QNC_LPC << 16) |
97               (PCI_FUNCTION_NUMBER_QNC_LPC << 8) |
98               R_QNC_LPC_BIOS_CNTL
99             )
100           }
101         },
102         S_QNC_LPC_BIOS_CNTL,
103         N_QNC_LPC_BIOS_CNTL_BIOSWE
104       }
105     }
106   },
107 
108   // QNCnMcSmi (12)
109   NULL_SOURCE_DESC_INITIALIZER,
110 
111   // QNCnPmeB0 (13)
112   NULL_SOURCE_DESC_INITIALIZER,
113 
114   // QNCnThrmSts (14)
115   {
116     QNC_SMM_SCI_EN_DEPENDENT,
117     {
118       {{GPE_ADDR_TYPE, {R_QNC_GPE0BLK_GPE0E}}, S_QNC_GPE0BLK_GPE0E, N_QNC_GPE0BLK_GPE0E_THRM},
119       NULL_BIT_DESC_INITIALIZER
120     },
121     {
122       {{GPE_ADDR_TYPE, {R_QNC_GPE0BLK_GPE0S}}, S_QNC_GPE0BLK_GPE0S, N_QNC_GPE0BLK_GPE0S_THRM}
123     }
124   },
125 
126   // QNCnSmBus (15)
127   NULL_SOURCE_DESC_INITIALIZER,
128 
129   // QNCnIntelUsb2 (16)
130   NULL_SOURCE_DESC_INITIALIZER,
131 
132   // QNCnMonSmi7 (17)
133   NULL_SOURCE_DESC_INITIALIZER,
134 
135   // QNCnMonSmi6 (18)
136   NULL_SOURCE_DESC_INITIALIZER,
137 
138   // QNCnMonSmi5 (19)
139   NULL_SOURCE_DESC_INITIALIZER,
140 
141   // QNCnMonSmi4 (20)
142   NULL_SOURCE_DESC_INITIALIZER,
143 
144   // QNCnDevTrap13 (21)
145   NULL_SOURCE_DESC_INITIALIZER,
146 
147   // QNCnDevTrap12 (22)
148   NULL_SOURCE_DESC_INITIALIZER,
149 
150   // QNCnDevTrap11 (23)
151   NULL_SOURCE_DESC_INITIALIZER,
152 
153   // QNCnDevTrap10 (24)
154   NULL_SOURCE_DESC_INITIALIZER,
155 
156   // QNCnDevTrap9 (25)
157   NULL_SOURCE_DESC_INITIALIZER,
158 
159   // QNCnDevTrap8 (26)
160   NULL_SOURCE_DESC_INITIALIZER,
161 
162   // QNCnDevTrap7 (27)
163   NULL_SOURCE_DESC_INITIALIZER,
164 
165   // QNCnDevTrap6 (28)
166   NULL_SOURCE_DESC_INITIALIZER,
167 
168   // QNCnDevTrap5 (29)
169   NULL_SOURCE_DESC_INITIALIZER,
170 
171   // QNCnDevTrap3 (30)
172   NULL_SOURCE_DESC_INITIALIZER,
173 
174   // QNCnDevTrap2 (31)
175   NULL_SOURCE_DESC_INITIALIZER,
176 
177   // QNCnDevTrap1 (32)
178   NULL_SOURCE_DESC_INITIALIZER,
179 
180   // QNCnDevTrap0 (33)
181   NULL_SOURCE_DESC_INITIALIZER,
182 
183   // QNCnIoTrap3 (34)
184   NULL_SOURCE_DESC_INITIALIZER,
185 
186   // QNCnIoTrap2 (35)
187   NULL_SOURCE_DESC_INITIALIZER,
188 
189   // QNCnIoTrap1 (36)
190   NULL_SOURCE_DESC_INITIALIZER,
191 
192   // QNCnIoTrap0 (37)
193   NULL_SOURCE_DESC_INITIALIZER,
194 
195   // QNCnPciExpress (38)
196   NULL_SOURCE_DESC_INITIALIZER,
197 
198   // QNCnMonitor (39)
199   NULL_SOURCE_DESC_INITIALIZER,
200 
201   // QNCnSpi (40)
202   NULL_SOURCE_DESC_INITIALIZER,
203 
204   // QNCnQRT (41)
205   NULL_SOURCE_DESC_INITIALIZER,
206 
207   // QNCnGpioUnlock (42)
208   NULL_SOURCE_DESC_INITIALIZER
209 };
210 
211 VOID
QNCSmmQNCnClearSource(QNC_SMM_SOURCE_DESC * SrcDesc)212 QNCSmmQNCnClearSource(
213   QNC_SMM_SOURCE_DESC   *SrcDesc
214   )
215 {
216     QNCSmmClearSource (SrcDesc);
217 }
218