Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
acpi
acpica
evsci.c
Go to the documentation of this file.
1
/*******************************************************************************
2
*
3
* Module Name: evsci - System Control Interrupt configuration and
4
* legacy to ACPI mode state transition functions
5
*
6
******************************************************************************/
7
8
/*
9
* Copyright (C) 2000 - 2012, Intel Corp.
10
* All rights reserved.
11
*
12
* Redistribution and use in source and binary forms, with or without
13
* modification, are permitted provided that the following conditions
14
* are met:
15
* 1. Redistributions of source code must retain the above copyright
16
* notice, this list of conditions, and the following disclaimer,
17
* without modification.
18
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
19
* substantially similar to the "NO WARRANTY" disclaimer below
20
* ("Disclaimer") and any redistribution must be conditioned upon
21
* including a substantially similar Disclaimer requirement for further
22
* binary redistribution.
23
* 3. Neither the names of the above-listed copyright holders nor the names
24
* of any contributors may be used to endorse or promote products derived
25
* from this software without specific prior written permission.
26
*
27
* Alternatively, this software may be distributed under the terms of the
28
* GNU General Public License ("GPL") version 2 as published by the Free
29
* Software Foundation.
30
*
31
* NO WARRANTY
32
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
33
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
34
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
35
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
36
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
40
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
41
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
42
* POSSIBILITY OF SUCH DAMAGES.
43
*/
44
45
#include <
acpi/acpi.h
>
46
#include "
accommon.h
"
47
#include "
acevents.h
"
48
49
#define _COMPONENT ACPI_EVENTS
50
ACPI_MODULE_NAME
(
"evsci"
)
51
#if (!ACPI_REDUCED_HARDWARE)
/* Entire module */
52
/* Local prototypes */
53
static
u32
ACPI_SYSTEM_XFACE
acpi_ev_sci_xrupt_handler(
void
*
context
);
54
55
/*******************************************************************************
56
*
57
* FUNCTION: acpi_ev_sci_xrupt_handler
58
*
59
* PARAMETERS: context - Calling Context
60
*
61
* RETURN: Status code indicates whether interrupt was handled.
62
*
63
* DESCRIPTION: Interrupt handler that will figure out what function or
64
* control method to call to deal with a SCI.
65
*
66
******************************************************************************/
67
68
static
u32
ACPI_SYSTEM_XFACE
acpi_ev_sci_xrupt_handler(
void
*
context
)
69
{
70
struct
acpi_gpe_xrupt_info
*gpe_xrupt_list =
context
;
71
u32
interrupt_handled =
ACPI_INTERRUPT_NOT_HANDLED
;
72
73
ACPI_FUNCTION_TRACE
(ev_sci_xrupt_handler);
74
75
/*
76
* We are guaranteed by the ACPI CA initialization/shutdown code that
77
* if this interrupt handler is installed, ACPI is enabled.
78
*/
79
80
/*
81
* Fixed Events:
82
* Check for and dispatch any Fixed Events that have occurred
83
*/
84
interrupt_handled |=
acpi_ev_fixed_event_detect
();
85
86
/*
87
* General Purpose Events:
88
* Check for and dispatch any GPEs that have occurred
89
*/
90
interrupt_handled |=
acpi_ev_gpe_detect
(gpe_xrupt_list);
91
92
return_UINT32
(interrupt_handled);
93
}
94
95
/*******************************************************************************
96
*
97
* FUNCTION: acpi_ev_gpe_xrupt_handler
98
*
99
* PARAMETERS: context - Calling Context
100
*
101
* RETURN: Status code indicates whether interrupt was handled.
102
*
103
* DESCRIPTION: Handler for GPE Block Device interrupts
104
*
105
******************************************************************************/
106
107
u32
ACPI_SYSTEM_XFACE
acpi_ev_gpe_xrupt_handler
(
void
*
context
)
108
{
109
struct
acpi_gpe_xrupt_info
*gpe_xrupt_list =
context
;
110
u32
interrupt_handled =
ACPI_INTERRUPT_NOT_HANDLED
;
111
112
ACPI_FUNCTION_TRACE
(ev_gpe_xrupt_handler);
113
114
/*
115
* We are guaranteed by the ACPI CA initialization/shutdown code that
116
* if this interrupt handler is installed, ACPI is enabled.
117
*/
118
119
/* GPEs: Check for and dispatch any GPEs that have occurred */
120
121
interrupt_handled |=
acpi_ev_gpe_detect
(gpe_xrupt_list);
122
123
return_UINT32
(interrupt_handled);
124
}
125
126
/******************************************************************************
127
*
128
* FUNCTION: acpi_ev_install_sci_handler
129
*
130
* PARAMETERS: none
131
*
132
* RETURN: Status
133
*
134
* DESCRIPTION: Installs SCI handler.
135
*
136
******************************************************************************/
137
138
u32
acpi_ev_install_sci_handler
(
void
)
139
{
140
u32
status
=
AE_OK
;
141
142
ACPI_FUNCTION_TRACE
(ev_install_sci_handler);
143
144
status =
145
acpi_os_install_interrupt_handler
((
u32
)
acpi_gbl_FADT
.sci_interrupt,
146
acpi_ev_sci_xrupt_handler,
147
acpi_gbl_gpe_xrupt_list_head
);
148
return_ACPI_STATUS
(status);
149
}
150
151
/******************************************************************************
152
*
153
* FUNCTION: acpi_ev_remove_sci_handler
154
*
155
* PARAMETERS: none
156
*
157
* RETURN: E_OK if handler uninstalled OK, E_ERROR if handler was not
158
* installed to begin with
159
*
160
* DESCRIPTION: Remove the SCI interrupt handler. No further SCIs will be
161
* taken.
162
*
163
* Note: It doesn't seem important to disable all events or set the event
164
* enable registers to their original values. The OS should disable
165
* the SCI interrupt level when the handler is removed, so no more
166
* events will come in.
167
*
168
******************************************************************************/
169
170
acpi_status
acpi_ev_remove_sci_handler
(
void
)
171
{
172
acpi_status
status
;
173
174
ACPI_FUNCTION_TRACE
(ev_remove_sci_handler);
175
176
/* Just let the OS remove the handler and disable the level */
177
178
status =
179
acpi_os_remove_interrupt_handler
((
u32
)
acpi_gbl_FADT
.sci_interrupt,
180
acpi_ev_sci_xrupt_handler);
181
182
return_ACPI_STATUS
(status);
183
}
184
185
#endif
/* !ACPI_REDUCED_HARDWARE */
Generated on Thu Jan 10 2013 13:23:29 for Linux Kernel by
1.8.2