Print this page
acpica-unix2-20130823
PANKOVs restructure
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/uts/intel/io/acpica/events/evevent.c
+++ new/usr/src/common/acpica/components/events/evevent.c
1 1 /******************************************************************************
2 2 *
3 3 * Module Name: evevent - Fixed Event handling and dispatch
4 4 *
5 5 *****************************************************************************/
6 6
7 7 /*
8 - * Copyright (C) 2000 - 2011, Intel Corp.
8 + * Copyright (C) 2000 - 2013, Intel Corp.
9 9 * All rights reserved.
10 10 *
11 11 * Redistribution and use in source and binary forms, with or without
12 12 * modification, are permitted provided that the following conditions
13 13 * are met:
14 14 * 1. Redistributions of source code must retain the above copyright
15 15 * notice, this list of conditions, and the following disclaimer,
16 16 * without modification.
17 17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 18 * substantially similar to the "NO WARRANTY" disclaimer below
19 19 * ("Disclaimer") and any redistribution must be conditioned upon
20 20 * including a substantially similar Disclaimer requirement for further
21 21 * binary redistribution.
22 22 * 3. Neither the names of the above-listed copyright holders nor the names
23 23 * of any contributors may be used to endorse or promote products derived
24 24 * from this software without specific prior written permission.
25 25 *
26 26 * Alternatively, this software may be distributed under the terms of the
27 27 * GNU General Public License ("GPL") version 2 as published by the Free
28 28 * Software Foundation.
29 29 *
30 30 * NO WARRANTY
31 31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
↓ open down ↓ |
22 lines elided |
↑ open up ↑ |
41 41 * POSSIBILITY OF SUCH DAMAGES.
42 42 */
43 43
44 44 #include "acpi.h"
45 45 #include "accommon.h"
46 46 #include "acevents.h"
47 47
48 48 #define _COMPONENT ACPI_EVENTS
49 49 ACPI_MODULE_NAME ("evevent")
50 50
51 +#if (!ACPI_REDUCED_HARDWARE) /* Entire module */
52 +
51 53 /* Local prototypes */
52 54
53 55 static ACPI_STATUS
54 56 AcpiEvFixedEventInitialize (
55 57 void);
56 58
57 59 static UINT32
58 60 AcpiEvFixedEventDispatch (
59 61 UINT32 Event);
60 62
61 63
62 64 /*******************************************************************************
63 65 *
64 66 * FUNCTION: AcpiEvInitializeEvents
65 67 *
66 68 * PARAMETERS: None
67 69 *
68 70 * RETURN: Status
69 71 *
70 72 * DESCRIPTION: Initialize global data structures for ACPI events (Fixed, GPE)
71 73 *
72 74 ******************************************************************************/
73 75
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
74 76 ACPI_STATUS
75 77 AcpiEvInitializeEvents (
76 78 void)
77 79 {
78 80 ACPI_STATUS Status;
79 81
80 82
81 83 ACPI_FUNCTION_TRACE (EvInitializeEvents);
82 84
83 85
86 + /* If Hardware Reduced flag is set, there are no fixed events */
87 +
88 + if (AcpiGbl_ReducedHardware)
89 + {
90 + return_ACPI_STATUS (AE_OK);
91 + }
92 +
84 93 /*
85 94 * Initialize the Fixed and General Purpose Events. This is done prior to
86 95 * enabling SCIs to prevent interrupts from occurring before the handlers
87 96 * are installed.
88 97 */
89 98 Status = AcpiEvFixedEventInitialize ();
90 99 if (ACPI_FAILURE (Status))
91 100 {
92 101 ACPI_EXCEPTION ((AE_INFO, Status,
93 102 "Unable to initialize fixed events"));
94 103 return_ACPI_STATUS (Status);
95 104 }
96 105
97 106 Status = AcpiEvGpeInitialize ();
98 107 if (ACPI_FAILURE (Status))
99 108 {
100 109 ACPI_EXCEPTION ((AE_INFO, Status,
101 110 "Unable to initialize general purpose events"));
102 111 return_ACPI_STATUS (Status);
103 112 }
104 113
105 114 return_ACPI_STATUS (Status);
106 115 }
107 116
108 117
109 118 /*******************************************************************************
110 119 *
111 120 * FUNCTION: AcpiEvInstallXruptHandlers
112 121 *
113 122 * PARAMETERS: None
114 123 *
115 124 * RETURN: Status
116 125 *
117 126 * DESCRIPTION: Install interrupt handlers for the SCI and Global Lock
118 127 *
119 128 ******************************************************************************/
120 129
↓ open down ↓ |
27 lines elided |
↑ open up ↑ |
121 130 ACPI_STATUS
122 131 AcpiEvInstallXruptHandlers (
123 132 void)
124 133 {
125 134 ACPI_STATUS Status;
126 135
127 136
128 137 ACPI_FUNCTION_TRACE (EvInstallXruptHandlers);
129 138
130 139
140 + /* If Hardware Reduced flag is set, there is no ACPI h/w */
141 +
142 + if (AcpiGbl_ReducedHardware)
143 + {
144 + return_ACPI_STATUS (AE_OK);
145 + }
146 +
131 147 /* Install the SCI handler */
132 148
133 149 Status = AcpiEvInstallSciHandler ();
134 150 if (ACPI_FAILURE (Status))
135 151 {
136 152 ACPI_EXCEPTION ((AE_INFO, Status,
137 153 "Unable to install System Control Interrupt handler"));
138 154 return_ACPI_STATUS (Status);
139 155 }
140 156
141 157 /* Install the handler for the Global Lock */
142 158
143 159 Status = AcpiEvInitGlobalLockHandler ();
144 160 if (ACPI_FAILURE (Status))
145 161 {
146 162 ACPI_EXCEPTION ((AE_INFO, Status,
147 163 "Unable to initialize Global Lock handler"));
148 164 return_ACPI_STATUS (Status);
149 165 }
150 166
151 167 AcpiGbl_EventsInitialized = TRUE;
152 168 return_ACPI_STATUS (Status);
153 169 }
154 170
155 171
156 172 /*******************************************************************************
157 173 *
158 174 * FUNCTION: AcpiEvFixedEventInitialize
159 175 *
160 176 * PARAMETERS: None
161 177 *
162 178 * RETURN: Status
163 179 *
164 180 * DESCRIPTION: Install the fixed event handlers and disable all fixed events.
165 181 *
166 182 ******************************************************************************/
167 183
168 184 static ACPI_STATUS
169 185 AcpiEvFixedEventInitialize (
170 186 void)
171 187 {
172 188 UINT32 i;
173 189 ACPI_STATUS Status;
174 190
175 191
176 192 /*
177 193 * Initialize the structure that keeps track of fixed event handlers and
178 194 * enable the fixed events.
179 195 */
180 196 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
181 197 {
182 198 AcpiGbl_FixedEventHandlers[i].Handler = NULL;
183 199 AcpiGbl_FixedEventHandlers[i].Context = NULL;
184 200
185 201 /* Disable the fixed event */
186 202
187 203 if (AcpiGbl_FixedEventInfo[i].EnableRegisterId != 0xFF)
188 204 {
189 205 Status = AcpiWriteBitRegister (
190 206 AcpiGbl_FixedEventInfo[i].EnableRegisterId,
191 207 ACPI_DISABLE_EVENT);
192 208 if (ACPI_FAILURE (Status))
193 209 {
194 210 return (Status);
195 211 }
196 212 }
197 213 }
198 214
199 215 return (AE_OK);
200 216 }
201 217
202 218
203 219 /*******************************************************************************
204 220 *
205 221 * FUNCTION: AcpiEvFixedEventDetect
206 222 *
207 223 * PARAMETERS: None
208 224 *
209 225 * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
210 226 *
211 227 * DESCRIPTION: Checks the PM status register for active fixed events
212 228 *
213 229 ******************************************************************************/
214 230
215 231 UINT32
216 232 AcpiEvFixedEventDetect (
217 233 void)
218 234 {
219 235 UINT32 IntStatus = ACPI_INTERRUPT_NOT_HANDLED;
220 236 UINT32 FixedStatus;
221 237 UINT32 FixedEnable;
222 238 UINT32 i;
223 239
224 240
225 241 ACPI_FUNCTION_NAME (EvFixedEventDetect);
226 242
227 243
228 244 /*
229 245 * Read the fixed feature status and enable registers, as all the cases
230 246 * depend on their values. Ignore errors here.
231 247 */
232 248 (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_STATUS, &FixedStatus);
233 249 (void) AcpiHwRegisterRead (ACPI_REGISTER_PM1_ENABLE, &FixedEnable);
234 250
235 251 ACPI_DEBUG_PRINT ((ACPI_DB_INTERRUPTS,
236 252 "Fixed Event Block: Enable %08X Status %08X\n",
237 253 FixedEnable, FixedStatus));
238 254
239 255 /*
240 256 * Check for all possible Fixed Events and dispatch those that are active
241 257 */
242 258 for (i = 0; i < ACPI_NUM_FIXED_EVENTS; i++)
243 259 {
244 260 /* Both the status and enable bits must be on for this event */
245 261
246 262 if ((FixedStatus & AcpiGbl_FixedEventInfo[i].StatusBitMask) &&
247 263 (FixedEnable & AcpiGbl_FixedEventInfo[i].EnableBitMask))
248 264 {
249 265 /*
250 266 * Found an active (signalled) event. Invoke global event
251 267 * handler if present.
252 268 */
253 269 AcpiFixedEventCount[i]++;
254 270 if (AcpiGbl_GlobalEventHandler)
255 271 {
256 272 AcpiGbl_GlobalEventHandler (ACPI_EVENT_TYPE_FIXED, NULL,
257 273 i, AcpiGbl_GlobalEventHandlerContext);
258 274 }
259 275
260 276 IntStatus |= AcpiEvFixedEventDispatch (i);
261 277 }
262 278 }
263 279
264 280 return (IntStatus);
265 281 }
266 282
267 283
↓ open down ↓ |
127 lines elided |
↑ open up ↑ |
268 284 /*******************************************************************************
269 285 *
270 286 * FUNCTION: AcpiEvFixedEventDispatch
271 287 *
272 288 * PARAMETERS: Event - Event type
273 289 *
274 290 * RETURN: INTERRUPT_HANDLED or INTERRUPT_NOT_HANDLED
275 291 *
276 292 * DESCRIPTION: Clears the status bit for the requested event, calls the
277 293 * handler that previously registered for the event.
294 + * NOTE: If there is no handler for the event, the event is
295 + * disabled to prevent further interrupts.
278 296 *
279 297 ******************************************************************************/
280 298
281 299 static UINT32
282 300 AcpiEvFixedEventDispatch (
283 301 UINT32 Event)
284 302 {
285 303
286 304 ACPI_FUNCTION_ENTRY ();
287 305
288 306
289 307 /* Clear the status bit */
290 308
291 309 (void) AcpiWriteBitRegister (
292 310 AcpiGbl_FixedEventInfo[Event].StatusRegisterId,
293 311 ACPI_CLEAR_STATUS);
294 312
295 313 /*
296 - * Make sure we've got a handler. If not, report an error. The event is
297 - * disabled to prevent further interrupts.
314 + * Make sure that a handler exists. If not, report an error
315 + * and disable the event to prevent further interrupts.
298 316 */
299 - if (NULL == AcpiGbl_FixedEventHandlers[Event].Handler)
317 + if (!AcpiGbl_FixedEventHandlers[Event].Handler)
300 318 {
301 319 (void) AcpiWriteBitRegister (
302 320 AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
303 321 ACPI_DISABLE_EVENT);
304 322
305 323 ACPI_ERROR ((AE_INFO,
306 - "No installed handler for fixed event [0x%08X]",
307 - Event));
324 + "No installed handler for fixed event - %s (%u), disabling",
325 + AcpiUtGetEventName (Event), Event));
308 326
309 327 return (ACPI_INTERRUPT_NOT_HANDLED);
310 328 }
311 329
312 330 /* Invoke the Fixed Event handler */
313 331
314 332 return ((AcpiGbl_FixedEventHandlers[Event].Handler)(
315 333 AcpiGbl_FixedEventHandlers[Event].Context));
316 334 }
317 335
318 -
336 +#endif /* !ACPI_REDUCED_HARDWARE */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX