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