ReactOS  0.4.14-dev-317-g96040ec
evxfevnt.c
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Module Name: evxfevnt - External Interfaces, ACPI event disable/enable
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2019, Intel Corp.
9  * All rights reserved.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  * notice, this list of conditions, and the following disclaimer,
16  * without modification.
17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18  * substantially similar to the "NO WARRANTY" disclaimer below
19  * ("Disclaimer") and any redistribution must be conditioned upon
20  * including a substantially similar Disclaimer requirement for further
21  * binary redistribution.
22  * 3. Neither the names of the above-listed copyright holders nor the names
23  * of any contributors may be used to endorse or promote products derived
24  * from this software without specific prior written permission.
25  *
26  * Alternatively, this software may be distributed under the terms of the
27  * GNU General Public License ("GPL") version 2 as published by the Free
28  * Software Foundation.
29  *
30  * NO WARRANTY
31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41  * POSSIBILITY OF SUCH DAMAGES.
42  */
43 
44 #define EXPORT_ACPI_INTERFACES
45 
46 #include "acpi.h"
47 #include "accommon.h"
48 #include "actables.h"
49 
50 #define _COMPONENT ACPI_EVENTS
51  ACPI_MODULE_NAME ("evxfevnt")
52 
53 
54 #if (!ACPI_REDUCED_HARDWARE) /* Entire module */
55 /*******************************************************************************
56  *
57  * FUNCTION: AcpiEnable
58  *
59  * PARAMETERS: None
60  *
61  * RETURN: Status
62  *
63  * DESCRIPTION: Transfers the system into ACPI mode.
64  *
65  ******************************************************************************/
66 
69  void)
70 {
72 
73 
75 
76 
77  /* ACPI tables must be present */
78 
79  if (AcpiGbl_FadtIndex == ACPI_INVALID_TABLE_INDEX)
80  {
82  }
83 
84  /* If the Hardware Reduced flag is set, machine is always in acpi mode */
85 
86  if (AcpiGbl_ReducedHardware)
87  {
89  }
90 
91  /* Check current mode */
92 
94  {
96  "System is already in ACPI mode\n"));
97  }
98  else
99  {
100  /* Transition to ACPI mode */
101 
103  if (ACPI_FAILURE (Status))
104  {
105  ACPI_ERROR ((AE_INFO, "Could not transition to ACPI mode"));
107  }
108 
110  "Transition to ACPI mode successful\n"));
111  }
112 
114 }
115 
117 
118 
119 /*******************************************************************************
120  *
121  * FUNCTION: AcpiDisable
122  *
123  * PARAMETERS: None
124  *
125  * RETURN: Status
126  *
127  * DESCRIPTION: Transfers the system into LEGACY (non-ACPI) mode.
128  *
129  ******************************************************************************/
130 
133  void)
134 {
136 
137 
139 
140 
141  /* If the Hardware Reduced flag is set, machine is always in acpi mode */
142 
143  if (AcpiGbl_ReducedHardware)
144  {
146  }
147 
149  {
151  "System is already in legacy (non-ACPI) mode\n"));
152  }
153  else
154  {
155  /* Transition to LEGACY mode */
156 
158 
159  if (ACPI_FAILURE (Status))
160  {
162  "Could not exit ACPI mode to legacy mode"));
164  }
165 
167  "ACPI mode disabled\n"));
168  }
169 
171 }
172 
174 
175 
176 /*******************************************************************************
177  *
178  * FUNCTION: AcpiEnableEvent
179  *
180  * PARAMETERS: Event - The fixed eventto be enabled
181  * Flags - Reserved
182  *
183  * RETURN: Status
184  *
185  * DESCRIPTION: Enable an ACPI event (fixed)
186  *
187  ******************************************************************************/
188 
191  UINT32 Event,
192  UINT32 Flags)
193 {
195  UINT32 Value;
196 
197 
199 
200 
201  /* If Hardware Reduced flag is set, there are no fixed events */
202 
203  if (AcpiGbl_ReducedHardware)
204  {
206  }
207 
208  /* Decode the Fixed Event */
209 
210  if (Event > ACPI_EVENT_MAX)
211  {
213  }
214 
215  /*
216  * Enable the requested fixed event (by writing a one to the enable
217  * register bit)
218  */
220  AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
222  if (ACPI_FAILURE (Status))
223  {
225  }
226 
227  /* Make sure that the hardware responded */
228 
230  AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value);
231  if (ACPI_FAILURE (Status))
232  {
234  }
235 
236  if (Value != 1)
237  {
239  "Could not enable %s event", AcpiUtGetEventName (Event)));
241  }
242 
244 }
245 
247 
248 
249 /*******************************************************************************
250  *
251  * FUNCTION: AcpiDisableEvent
252  *
253  * PARAMETERS: Event - The fixed event to be disabled
254  * Flags - Reserved
255  *
256  * RETURN: Status
257  *
258  * DESCRIPTION: Disable an ACPI event (fixed)
259  *
260  ******************************************************************************/
261 
264  UINT32 Event,
265  UINT32 Flags)
266 {
268  UINT32 Value;
269 
270 
272 
273 
274  /* If Hardware Reduced flag is set, there are no fixed events */
275 
276  if (AcpiGbl_ReducedHardware)
277  {
279  }
280 
281  /* Decode the Fixed Event */
282 
283  if (Event > ACPI_EVENT_MAX)
284  {
286  }
287 
288  /*
289  * Disable the requested fixed event (by writing a zero to the enable
290  * register bit)
291  */
293  AcpiGbl_FixedEventInfo[Event].EnableRegisterId,
295  if (ACPI_FAILURE (Status))
296  {
298  }
299 
301  AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &Value);
302  if (ACPI_FAILURE (Status))
303  {
305  }
306 
307  if (Value != 0)
308  {
310  "Could not disable %s events", AcpiUtGetEventName (Event)));
312  }
313 
315 }
316 
318 
319 
320 /*******************************************************************************
321  *
322  * FUNCTION: AcpiClearEvent
323  *
324  * PARAMETERS: Event - The fixed event to be cleared
325  *
326  * RETURN: Status
327  *
328  * DESCRIPTION: Clear an ACPI event (fixed)
329  *
330  ******************************************************************************/
331 
334  UINT32 Event)
335 {
337 
338 
340 
341 
342  /* If Hardware Reduced flag is set, there are no fixed events */
343 
344  if (AcpiGbl_ReducedHardware)
345  {
347  }
348 
349  /* Decode the Fixed Event */
350 
351  if (Event > ACPI_EVENT_MAX)
352  {
354  }
355 
356  /*
357  * Clear the requested fixed event (By writing a one to the status
358  * register bit)
359  */
361  AcpiGbl_FixedEventInfo[Event].StatusRegisterId,
363 
365 }
366 
368 
369 
370 /*******************************************************************************
371  *
372  * FUNCTION: AcpiGetEventStatus
373  *
374  * PARAMETERS: Event - The fixed event
375  * EventStatus - Where the current status of the event will
376  * be returned
377  *
378  * RETURN: Status
379  *
380  * DESCRIPTION: Obtains and returns the current status of the event
381  *
382  ******************************************************************************/
383 
386  UINT32 Event,
387  ACPI_EVENT_STATUS *EventStatus)
388 {
390  ACPI_EVENT_STATUS LocalEventStatus = 0;
391  UINT32 InByte;
392 
393 
395 
396 
397  if (!EventStatus)
398  {
400  }
401 
402  /* Decode the Fixed Event */
403 
404  if (Event > ACPI_EVENT_MAX)
405  {
407  }
408 
409  /* Fixed event currently can be dispatched? */
410 
411  if (AcpiGbl_FixedEventHandlers[Event].Handler)
412  {
413  LocalEventStatus |= ACPI_EVENT_FLAG_HAS_HANDLER;
414  }
415 
416  /* Fixed event currently enabled? */
417 
419  AcpiGbl_FixedEventInfo[Event].EnableRegisterId, &InByte);
420  if (ACPI_FAILURE (Status))
421  {
423  }
424 
425  if (InByte)
426  {
427  LocalEventStatus |=
429  }
430 
431  /* Fixed event currently active? */
432 
434  AcpiGbl_FixedEventInfo[Event].StatusRegisterId, &InByte);
435  if (ACPI_FAILURE (Status))
436  {
438  }
439 
440  if (InByte)
441  {
442  LocalEventStatus |= ACPI_EVENT_FLAG_STATUS_SET;
443  }
444 
445  (*EventStatus) = LocalEventStatus;
447 }
448 
450 
451 #endif /* !ACPI_REDUCED_HARDWARE */
_In_opt_ ULONG _Out_ PULONG Value
Definition: rtlfuncs.h:2343
ACPI_STATUS AcpiWriteBitRegister(UINT32 RegisterId, UINT32 Value)
Definition: hwxface.c:282
#define AE_BAD_PARAMETER
Definition: acexcep.h:151
#define ACPI_CLEAR_STATUS
Definition: actypes.h:928
#define AE_NO_ACPI_TABLES
Definition: acexcep.h:110
#define ACPI_EVENT_MAX
Definition: actypes.h:759
UINT32 ACPI_STATUS
Definition: actypes.h:460
#define ACPI_ENABLE_EVENT
Definition: actypes.h:932
ACPI_STATUS AcpiEnableEvent(UINT32 Event, UINT32 Flags)
Definition: evxfevnt.c:190
const char * AcpiUtGetEventName(UINT32 EventId)
Definition: utdecode.c:174
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
#define ACPI_FAILURE(a)
Definition: acexcep.h:95
#define ACPI_EVENT_FLAG_STATUS_SET
Definition: actypes.h:785
unsigned int UINT32
#define ACPI_EVENT_FLAG_ENABLED
Definition: actypes.h:783
#define ACPI_MODULE_NAME(Name)
Definition: acoutput.h:216
#define ACPI_EXPORT_SYMBOL(Symbol)
Definition: actypes.h:343
#define AE_INFO
Definition: acoutput.h:230
ACPI_STATUS AcpiGetEventStatus(UINT32 Event, ACPI_EVENT_STATUS *EventStatus)
Definition: evxfevnt.c:385
ACPI_STATUS AcpiHwSetMode(UINT32 Mode)
Definition: hwacpi.c:66
#define ACPI_EVENT_FLAG_HAS_HANDLER
Definition: actypes.h:787
#define ACPI_INVALID_TABLE_INDEX
Definition: aclocal.h:260
#define AE_NO_HARDWARE_RESPONSE
Definition: acexcep.h:130
ACPI_FIXED_EVENT_INFO AcpiGbl_FixedEventInfo[ACPI_NUM_FIXED_EVENTS]
Definition: utglobal.c:175
#define ACPI_DEBUG_PRINT(pl)
Definition: acoutput.h:475
UINT32 ACPI_EVENT_STATUS
Definition: actypes.h:780
ACPI_STATUS AcpiClearEvent(UINT32 Event)
Definition: evxfevnt.c:333
#define ACPI_DISABLE_EVENT
Definition: actypes.h:933
ACPI_STATUS AcpiReadBitRegister(UINT32 RegisterId, UINT32 *ReturnValue)
Definition: hwxface.c:213
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER Handler
Definition: acpixf.h:662
Status
Definition: gdiplustypes.h:24
#define ACPI_DB_INIT
Definition: acoutput.h:151
#define ACPI_SYS_MODE_LEGACY
Definition: actypes.h:1074
#define ACPI_SYS_MODE_ACPI
Definition: actypes.h:1073
#define return_ACPI_STATUS(s)
Definition: acoutput.h:496
#define ACPI_FUNCTION_TRACE(a)
Definition: acoutput.h:480
ACPI_STATUS AcpiEnable(void)
Definition: evxfevnt.c:68
#define ACPI_ERROR(plist)
Definition: acoutput.h:240
UINT32 AcpiHwGetMode(void)
Definition: hwacpi.c:179
#define AE_OK
Definition: acexcep.h:97
ACPI_STATUS AcpiDisable(void)
Definition: evxfevnt.c:132
ACPI_STATUS AcpiDisableEvent(UINT32 Event, UINT32 Flags)
Definition: evxfevnt.c:263
#define ACPI_EVENT_FLAG_ENABLE_SET
Definition: actypes.h:786