Deleted Added
full compact
evgpe.c (204773) evgpe.c (206117)
1/******************************************************************************
2 *
3 * Module Name: evgpe - General Purpose Event handling and dispatch
4 *
5 *****************************************************************************/
6
7/******************************************************************************
8 *

--- 120 unchanged lines hidden (view full) ---

129
130static void ACPI_SYSTEM_XFACE
131AcpiEvAsynchEnableGpe (
132 void *Context);
133
134
135/*******************************************************************************
136 *
1/******************************************************************************
2 *
3 * Module Name: evgpe - General Purpose Event handling and dispatch
4 *
5 *****************************************************************************/
6
7/******************************************************************************
8 *

--- 120 unchanged lines hidden (view full) ---

129
130static void ACPI_SYSTEM_XFACE
131AcpiEvAsynchEnableGpe (
132 void *Context);
133
134
135/*******************************************************************************
136 *
137 * FUNCTION: AcpiEvSetGpeType
138 *
139 * PARAMETERS: GpeEventInfo - GPE to set
140 * Type - New type
141 *
142 * RETURN: Status
143 *
144 * DESCRIPTION: Sets the new type for the GPE (wake, run, or wake/run)
145 *
146 ******************************************************************************/
147
148ACPI_STATUS
149AcpiEvSetGpeType (
150 ACPI_GPE_EVENT_INFO *GpeEventInfo,
151 UINT8 Type)
152{
153 ACPI_STATUS Status;
154
155
156 ACPI_FUNCTION_TRACE (EvSetGpeType);
157
158
159 /* Validate type and update register enable masks */
160
161 switch (Type)
162 {
163 case ACPI_GPE_TYPE_WAKE:
164 case ACPI_GPE_TYPE_RUNTIME:
165 case ACPI_GPE_TYPE_WAKE_RUN:
166 break;
167
168 default:
169 return_ACPI_STATUS (AE_BAD_PARAMETER);
170 }
171
172 /* Disable the GPE if currently enabled */
173
174 Status = AcpiEvDisableGpe (GpeEventInfo);
175
176 /* Clear the type bits and insert the new Type */
177
178 GpeEventInfo->Flags &= ~ACPI_GPE_TYPE_MASK;
179 GpeEventInfo->Flags |= Type;
180 return_ACPI_STATUS (Status);
181}
182
183
184/*******************************************************************************
185 *
186 * FUNCTION: AcpiEvUpdateGpeEnableMasks
187 *
188 * PARAMETERS: GpeEventInfo - GPE to update
137 * FUNCTION: AcpiEvUpdateGpeEnableMasks
138 *
139 * PARAMETERS: GpeEventInfo - GPE to update
189 * Type - What to do: ACPI_GPE_DISABLE or
190 * ACPI_GPE_ENABLE
191 *
192 * RETURN: Status
193 *
140 *
141 * RETURN: Status
142 *
194 * DESCRIPTION: Updates GPE register enable masks based on the GPE type
143 * DESCRIPTION: Updates GPE register enable masks based upon whether there are
144 * references (either wake or run) to this GPE
195 *
196 ******************************************************************************/
197
198ACPI_STATUS
199AcpiEvUpdateGpeEnableMasks (
145 *
146 ******************************************************************************/
147
148ACPI_STATUS
149AcpiEvUpdateGpeEnableMasks (
200 ACPI_GPE_EVENT_INFO *GpeEventInfo,
201 UINT8 Type)
150 ACPI_GPE_EVENT_INFO *GpeEventInfo)
202{
203 ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
204 UINT8 RegisterBit;
205
206
207 ACPI_FUNCTION_TRACE (EvUpdateGpeEnableMasks);
208
209
210 GpeRegisterInfo = GpeEventInfo->RegisterInfo;
211 if (!GpeRegisterInfo)
212 {
213 return_ACPI_STATUS (AE_NOT_EXIST);
214 }
215
216 RegisterBit = (UINT8)
217 (1 << (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber));
218
151{
152 ACPI_GPE_REGISTER_INFO *GpeRegisterInfo;
153 UINT8 RegisterBit;
154
155
156 ACPI_FUNCTION_TRACE (EvUpdateGpeEnableMasks);
157
158
159 GpeRegisterInfo = GpeEventInfo->RegisterInfo;
160 if (!GpeRegisterInfo)
161 {
162 return_ACPI_STATUS (AE_NOT_EXIST);
163 }
164
165 RegisterBit = (UINT8)
166 (1 << (GpeEventInfo->GpeNumber - GpeRegisterInfo->BaseGpeNumber));
167
219 /* 1) Disable case. Simply clear all enable bits */
168 /* Clear the wake/run bits up front */
220
169
221 if (Type == ACPI_GPE_DISABLE)
222 {
223 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
224 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
225 return_ACPI_STATUS (AE_OK);
226 }
170 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
171 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
227
172
228 /* 2) Enable case. Set/Clear the appropriate enable bits */
173 /* Set the mask bits only if there are references to this GPE */
229
174
230 switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK)
175 if (GpeEventInfo->RuntimeCount)
231 {
176 {
232 case ACPI_GPE_TYPE_WAKE:
233 ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
234 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
235 break;
177 ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
178 }
236
179
237 case ACPI_GPE_TYPE_RUNTIME:
238 ACPI_CLEAR_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
239 ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
240 break;
241
242 case ACPI_GPE_TYPE_WAKE_RUN:
243 ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
244 ACPI_SET_BIT (GpeRegisterInfo->EnableForRun, RegisterBit);
245 break;
246
247 default:
248 return_ACPI_STATUS (AE_BAD_PARAMETER);
180 if (GpeEventInfo->WakeupCount)
181 {
182 ACPI_SET_BIT (GpeRegisterInfo->EnableForWake, RegisterBit);
249 }
250
251 return_ACPI_STATUS (AE_OK);
252}
253
254
255/*******************************************************************************
256 *
257 * FUNCTION: AcpiEvEnableGpe
258 *
259 * PARAMETERS: GpeEventInfo - GPE to enable
183 }
184
185 return_ACPI_STATUS (AE_OK);
186}
187
188
189/*******************************************************************************
190 *
191 * FUNCTION: AcpiEvEnableGpe
192 *
193 * PARAMETERS: GpeEventInfo - GPE to enable
260 * WriteToHardware - Enable now, or just mark data structs
261 * (WAKE GPEs should be deferred)
262 *
263 * RETURN: Status
264 *
194 *
195 * RETURN: Status
196 *
265 * DESCRIPTION: Enable a GPE based on the GPE type
197 * DESCRIPTION: Hardware-enable a GPE. Always enables the GPE, regardless
198 * of type or number of references.
266 *
199 *
200 * Note: The GPE lock should be already acquired when this function is called.
201 *
267 ******************************************************************************/
268
269ACPI_STATUS
270AcpiEvEnableGpe (
202 ******************************************************************************/
203
204ACPI_STATUS
205AcpiEvEnableGpe (
271 ACPI_GPE_EVENT_INFO *GpeEventInfo,
272 BOOLEAN WriteToHardware)
206 ACPI_GPE_EVENT_INFO *GpeEventInfo)
273{
274 ACPI_STATUS Status;
275
276
277 ACPI_FUNCTION_TRACE (EvEnableGpe);
278
279
207{
208 ACPI_STATUS Status;
209
210
211 ACPI_FUNCTION_TRACE (EvEnableGpe);
212
213
280 /* Make sure HW enable masks are updated */
214 /*
215 * We will only allow a GPE to be enabled if it has either an
216 * associated method (_Lxx/_Exx) or a handler. Otherwise, the
217 * GPE will be immediately disabled by AcpiEvGpeDispatch the
218 * first time it fires.
219 */
220 if (!(GpeEventInfo->Flags & ACPI_GPE_DISPATCH_MASK))
221 {
222 return_ACPI_STATUS (AE_NO_HANDLER);
223 }
281
224
282 Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo, ACPI_GPE_ENABLE);
225 /* Ensure the HW enable masks are current */
226
227 Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo);
283 if (ACPI_FAILURE (Status))
284 {
285 return_ACPI_STATUS (Status);
286 }
287
228 if (ACPI_FAILURE (Status))
229 {
230 return_ACPI_STATUS (Status);
231 }
232
288 /* Mark wake-enabled or HW enable, or both */
233 /* Clear the GPE (of stale events) */
289
234
290 switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK)
235 Status = AcpiHwClearGpe (GpeEventInfo);
236 if (ACPI_FAILURE (Status))
291 {
237 {
292 case ACPI_GPE_TYPE_WAKE:
293
294 ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
295 break;
296
297 case ACPI_GPE_TYPE_WAKE_RUN:
298
299 ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
300
301 /*lint -fallthrough */
302
303 case ACPI_GPE_TYPE_RUNTIME:
304
305 ACPI_SET_BIT (GpeEventInfo->Flags, ACPI_GPE_RUN_ENABLED);
306
307 if (WriteToHardware)
308 {
309 /* Clear the GPE (of stale events), then enable it */
310
311 Status = AcpiHwClearGpe (GpeEventInfo);
312 if (ACPI_FAILURE (Status))
313 {
314 return_ACPI_STATUS (Status);
315 }
316
317 /* Enable the requested runtime GPE */
318
319 Status = AcpiHwWriteGpeEnableReg (GpeEventInfo);
320 }
321 break;
322
323 default:
324 return_ACPI_STATUS (AE_BAD_PARAMETER);
238 return_ACPI_STATUS (Status);
325 }
326
239 }
240
327 return_ACPI_STATUS (AE_OK);
241 /* Enable the requested GPE */
242
243 Status = AcpiHwWriteGpeEnableReg (GpeEventInfo);
244 return_ACPI_STATUS (Status);
328}
329
330
331/*******************************************************************************
332 *
333 * FUNCTION: AcpiEvDisableGpe
334 *
335 * PARAMETERS: GpeEventInfo - GPE to disable
336 *
337 * RETURN: Status
338 *
245}
246
247
248/*******************************************************************************
249 *
250 * FUNCTION: AcpiEvDisableGpe
251 *
252 * PARAMETERS: GpeEventInfo - GPE to disable
253 *
254 * RETURN: Status
255 *
339 * DESCRIPTION: Disable a GPE based on the GPE type
256 * DESCRIPTION: Hardware-disable a GPE. Always disables the requested GPE,
257 * regardless of the type or number of references.
340 *
258 *
259 * Note: The GPE lock should be already acquired when this function is called.
260 *
341 ******************************************************************************/
342
343ACPI_STATUS
344AcpiEvDisableGpe (
345 ACPI_GPE_EVENT_INFO *GpeEventInfo)
346{
347 ACPI_STATUS Status;
348
349
350 ACPI_FUNCTION_TRACE (EvDisableGpe);
351
352
353 /*
354 * Note: Always disable the GPE, even if we think that that it is already
355 * disabled. It is possible that the AML or some other code has enabled
356 * the GPE behind our back.
357 */
358
261 ******************************************************************************/
262
263ACPI_STATUS
264AcpiEvDisableGpe (
265 ACPI_GPE_EVENT_INFO *GpeEventInfo)
266{
267 ACPI_STATUS Status;
268
269
270 ACPI_FUNCTION_TRACE (EvDisableGpe);
271
272
273 /*
274 * Note: Always disable the GPE, even if we think that that it is already
275 * disabled. It is possible that the AML or some other code has enabled
276 * the GPE behind our back.
277 */
278
359 /* Make sure HW enable masks are updated */
279 /* Ensure the HW enable masks are current */
360
280
361 Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo, ACPI_GPE_DISABLE);
281 Status = AcpiEvUpdateGpeEnableMasks (GpeEventInfo);
362 if (ACPI_FAILURE (Status))
363 {
364 return_ACPI_STATUS (Status);
365 }
366
282 if (ACPI_FAILURE (Status))
283 {
284 return_ACPI_STATUS (Status);
285 }
286
367 /* Clear the appropriate enabled flags for this GPE */
368
369 switch (GpeEventInfo->Flags & ACPI_GPE_TYPE_MASK)
370 {
371 case ACPI_GPE_TYPE_WAKE:
372
373 ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
374 break;
375
376 case ACPI_GPE_TYPE_WAKE_RUN:
377
378 ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_WAKE_ENABLED);
379
380 /*lint -fallthrough */
381
382 case ACPI_GPE_TYPE_RUNTIME:
383
384 /* Disable the requested runtime GPE */
385
386 ACPI_CLEAR_BIT (GpeEventInfo->Flags, ACPI_GPE_RUN_ENABLED);
387 break;
388
389 default:
390 break;
391 }
392
393 /*
394 * Always H/W disable this GPE, even if we don't know the GPE type.
395 * Simply clear the enable bit for this particular GPE, but do not
396 * write out the current GPE enable mask since this may inadvertently
397 * enable GPEs too early. An example is a rogue GPE that has arrived
398 * during ACPICA initialization - possibly because AML or other code
399 * has enabled the GPE.
400 */
401 Status = AcpiHwLowDisableGpe (GpeEventInfo);
402 return_ACPI_STATUS (Status);
403}
404
405
406/*******************************************************************************
407 *
287 /*
288 * Always H/W disable this GPE, even if we don't know the GPE type.
289 * Simply clear the enable bit for this particular GPE, but do not
290 * write out the current GPE enable mask since this may inadvertently
291 * enable GPEs too early. An example is a rogue GPE that has arrived
292 * during ACPICA initialization - possibly because AML or other code
293 * has enabled the GPE.
294 */
295 Status = AcpiHwLowDisableGpe (GpeEventInfo);
296 return_ACPI_STATUS (Status);
297}
298
299
300/*******************************************************************************
301 *
302 * FUNCTION: AcpiEvLowGetGpeInfo
303 *
304 * PARAMETERS: GpeNumber - Raw GPE number
305 * GpeBlock - A GPE info block
306 *
307 * RETURN: A GPE EventInfo struct. NULL if not a valid GPE (The GpeNumber
308 * is not within the specified GPE block)
309 *
310 * DESCRIPTION: Returns the EventInfo struct associated with this GPE. This is
311 * the low-level implementation of EvGetGpeEventInfo.
312 *
313 ******************************************************************************/
314
315ACPI_GPE_EVENT_INFO *
316AcpiEvLowGetGpeInfo (
317 UINT32 GpeNumber,
318 ACPI_GPE_BLOCK_INFO *GpeBlock)
319{
320 UINT32 GpeIndex;
321
322
323 /*
324 * Validate that the GpeNumber is within the specified GpeBlock.
325 * (Two steps)
326 */
327 if (!GpeBlock ||
328 (GpeNumber < GpeBlock->BlockBaseNumber))
329 {
330 return (NULL);
331 }
332
333 GpeIndex = GpeNumber - GpeBlock->BlockBaseNumber;
334 if (GpeIndex >= GpeBlock->GpeCount)
335 {
336 return (NULL);
337 }
338
339 return (&GpeBlock->EventInfo[GpeIndex]);
340}
341
342
343/*******************************************************************************
344 *
408 * FUNCTION: AcpiEvGetGpeEventInfo
409 *
410 * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1
411 * GpeNumber - Raw GPE number
412 *
413 * RETURN: A GPE EventInfo struct. NULL if not a valid GPE
414 *
415 * DESCRIPTION: Returns the EventInfo struct associated with this GPE.

--- 5 unchanged lines hidden (view full) ---

421 ******************************************************************************/
422
423ACPI_GPE_EVENT_INFO *
424AcpiEvGetGpeEventInfo (
425 ACPI_HANDLE GpeDevice,
426 UINT32 GpeNumber)
427{
428 ACPI_OPERAND_OBJECT *ObjDesc;
345 * FUNCTION: AcpiEvGetGpeEventInfo
346 *
347 * PARAMETERS: GpeDevice - Device node. NULL for GPE0/GPE1
348 * GpeNumber - Raw GPE number
349 *
350 * RETURN: A GPE EventInfo struct. NULL if not a valid GPE
351 *
352 * DESCRIPTION: Returns the EventInfo struct associated with this GPE.

--- 5 unchanged lines hidden (view full) ---

358 ******************************************************************************/
359
360ACPI_GPE_EVENT_INFO *
361AcpiEvGetGpeEventInfo (
362 ACPI_HANDLE GpeDevice,
363 UINT32 GpeNumber)
364{
365 ACPI_OPERAND_OBJECT *ObjDesc;
429 ACPI_GPE_BLOCK_INFO *GpeBlock;
366 ACPI_GPE_EVENT_INFO *GpeInfo;
430 UINT32 i;
431
432
433 ACPI_FUNCTION_ENTRY ();
434
435
436 /* A NULL GpeBlock means use the FADT-defined GPE block(s) */
437
438 if (!GpeDevice)
439 {
440 /* Examine GPE Block 0 and 1 (These blocks are permanent) */
441
442 for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++)
443 {
367 UINT32 i;
368
369
370 ACPI_FUNCTION_ENTRY ();
371
372
373 /* A NULL GpeBlock means use the FADT-defined GPE block(s) */
374
375 if (!GpeDevice)
376 {
377 /* Examine GPE Block 0 and 1 (These blocks are permanent) */
378
379 for (i = 0; i < ACPI_MAX_GPE_BLOCKS; i++)
380 {
444 GpeBlock = AcpiGbl_GpeFadtBlocks[i];
445 if (GpeBlock)
381 GpeInfo = AcpiEvLowGetGpeInfo (GpeNumber,
382 AcpiGbl_GpeFadtBlocks[i]);
383 if (GpeInfo)
446 {
384 {
447 if ((GpeNumber >= GpeBlock->BlockBaseNumber) &&
448 (GpeNumber < GpeBlock->BlockBaseNumber +
449 (GpeBlock->RegisterCount * 8)))
450 {
451 return (&GpeBlock->EventInfo[GpeNumber -
452 GpeBlock->BlockBaseNumber]);
453 }
385 return (GpeInfo);
454 }
455 }
456
457 /* The GpeNumber was not in the range of either FADT GPE block */
458
459 return (NULL);
460 }
461
462 /* A Non-NULL GpeDevice means this is a GPE Block Device */
463
464 ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) GpeDevice);
465 if (!ObjDesc ||
466 !ObjDesc->Device.GpeBlock)
467 {
468 return (NULL);
469 }
470
386 }
387 }
388
389 /* The GpeNumber was not in the range of either FADT GPE block */
390
391 return (NULL);
392 }
393
394 /* A Non-NULL GpeDevice means this is a GPE Block Device */
395
396 ObjDesc = AcpiNsGetAttachedObject ((ACPI_NAMESPACE_NODE *) GpeDevice);
397 if (!ObjDesc ||
398 !ObjDesc->Device.GpeBlock)
399 {
400 return (NULL);
401 }
402
471 GpeBlock = ObjDesc->Device.GpeBlock;
472
473 if ((GpeNumber >= GpeBlock->BlockBaseNumber) &&
474 (GpeNumber < GpeBlock->BlockBaseNumber + (GpeBlock->RegisterCount * 8)))
475 {
476 return (&GpeBlock->EventInfo[GpeNumber - GpeBlock->BlockBaseNumber]);
477 }
478
479 return (NULL);
403 return (AcpiEvLowGetGpeInfo (GpeNumber, ObjDesc->Device.GpeBlock));
480}
481
482
483/*******************************************************************************
484 *
485 * FUNCTION: AcpiEvGpeDetect
486 *
487 * PARAMETERS: GpeXruptList - Interrupt block for this interrupt.

--- 161 unchanged lines hidden (view full) ---

649 /* Must revalidate the GpeNumber/GpeBlock */
650
651 if (!AcpiEvValidGpeEvent (GpeEventInfo))
652 {
653 Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
654 return_VOID;
655 }
656
404}
405
406
407/*******************************************************************************
408 *
409 * FUNCTION: AcpiEvGpeDetect
410 *
411 * PARAMETERS: GpeXruptList - Interrupt block for this interrupt.

--- 161 unchanged lines hidden (view full) ---

573 /* Must revalidate the GpeNumber/GpeBlock */
574
575 if (!AcpiEvValidGpeEvent (GpeEventInfo))
576 {
577 Status = AcpiUtReleaseMutex (ACPI_MTX_EVENTS);
578 return_VOID;
579 }
580
657 /* Set the GPE flags for return to enabled state */
581 /* Update the GPE register masks for return to enabled state */
658
582
659 (void) AcpiEvEnableGpe (GpeEventInfo, FALSE);
583 (void) AcpiEvUpdateGpeEnableMasks (GpeEventInfo);
660
661 /*
662 * Take a snapshot of the GPE info for this level - we copy the info to
663 * prevent a race condition with RemoveHandler/RemoveBlock.
664 */
665 ACPI_MEMCPY (LocalGpeEventInfo, GpeEventInfo,
666 sizeof (ACPI_GPE_EVENT_INFO));
667

--- 199 unchanged lines hidden (view full) ---

867 ACPI_EXCEPTION ((AE_INFO, Status,
868 "Unable to queue handler for GPE[0x%2X] - event disabled",
869 GpeNumber));
870 }
871 break;
872
873 default:
874
584
585 /*
586 * Take a snapshot of the GPE info for this level - we copy the info to
587 * prevent a race condition with RemoveHandler/RemoveBlock.
588 */
589 ACPI_MEMCPY (LocalGpeEventInfo, GpeEventInfo,
590 sizeof (ACPI_GPE_EVENT_INFO));
591

--- 199 unchanged lines hidden (view full) ---

791 ACPI_EXCEPTION ((AE_INFO, Status,
792 "Unable to queue handler for GPE[0x%2X] - event disabled",
793 GpeNumber));
794 }
795 break;
796
797 default:
798
875 /* No handler or method to run! */
876
799 /*
800 * No handler or method to run!
801 * 03/2010: This case should no longer be possible. We will not allow
802 * a GPE to be enabled if it has no handler or method.
803 */
877 ACPI_ERROR ((AE_INFO,
878 "No handler or method for GPE[0x%2X], disabling event",
879 GpeNumber));
880
881 /*
804 ACPI_ERROR ((AE_INFO,
805 "No handler or method for GPE[0x%2X], disabling event",
806 GpeNumber));
807
808 /*
882 * Disable the GPE. The GPE will remain disabled until the ACPICA
883 * Core Subsystem is restarted, or a handler is installed.
809 * Disable the GPE. The GPE will remain disabled a handler
810 * is installed or ACPICA is restarted.
884 */
885 Status = AcpiEvDisableGpe (GpeEventInfo);
886 if (ACPI_FAILURE (Status))
887 {
888 ACPI_EXCEPTION ((AE_INFO, Status,
889 "Unable to disable GPE[0x%2X]", GpeNumber));
890 return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
891 }
892 break;
893 }
894
895 return_UINT32 (ACPI_INTERRUPT_HANDLED);
896}
897
811 */
812 Status = AcpiEvDisableGpe (GpeEventInfo);
813 if (ACPI_FAILURE (Status))
814 {
815 ACPI_EXCEPTION ((AE_INFO, Status,
816 "Unable to disable GPE[0x%2X]", GpeNumber));
817 return_UINT32 (ACPI_INTERRUPT_NOT_HANDLED);
818 }
819 break;
820 }
821
822 return_UINT32 (ACPI_INTERRUPT_HANDLED);
823}
824