vserver 1.9.3
[linux-2.6.git] / include / acpi / acpiosxf.h
1
2 /******************************************************************************
3  *
4  * Name: acpiosxf.h - All interfaces to the OS Services Layer (OSL).  These
5  *                    interfaces must be implemented by OSL to interface the
6  *                    ACPI components to the host operating system.
7  *
8  *****************************************************************************/
9
10
11 /*
12  * Copyright (C) 2000 - 2004, R. Byron Moore
13  * All rights reserved.
14  *
15  * Redistribution and use in source and binary forms, with or without
16  * modification, are permitted provided that the following conditions
17  * are met:
18  * 1. Redistributions of source code must retain the above copyright
19  *    notice, this list of conditions, and the following disclaimer,
20  *    without modification.
21  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
22  *    substantially similar to the "NO WARRANTY" disclaimer below
23  *    ("Disclaimer") and any redistribution must be conditioned upon
24  *    including a substantially similar Disclaimer requirement for further
25  *    binary redistribution.
26  * 3. Neither the names of the above-listed copyright holders nor the names
27  *    of any contributors may be used to endorse or promote products derived
28  *    from this software without specific prior written permission.
29  *
30  * Alternatively, this software may be distributed under the terms of the
31  * GNU General Public License ("GPL") version 2 as published by the Free
32  * Software Foundation.
33  *
34  * NO WARRANTY
35  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
36  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
37  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
38  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
39  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
40  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
41  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
42  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
43  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
44  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
45  * POSSIBILITY OF SUCH DAMAGES.
46  */
47
48 #ifndef __ACPIOSXF_H__
49 #define __ACPIOSXF_H__
50
51 #include "platform/acenv.h"
52 #include "actypes.h"
53
54
55 /* Priorities for acpi_os_queue_for_execution */
56
57 #define OSD_PRIORITY_GPE            1
58 #define OSD_PRIORITY_HIGH           2
59 #define OSD_PRIORITY_MED            3
60 #define OSD_PRIORITY_LO             4
61
62 #define ACPI_NO_UNIT_LIMIT          ((u32) -1)
63 #define ACPI_MUTEX_SEM              1
64
65
66 /* Functions for acpi_os_signal */
67
68 #define ACPI_SIGNAL_FATAL           0
69 #define ACPI_SIGNAL_BREAKPOINT      1
70
71 struct acpi_signal_fatal_info
72 {
73         u32                             type;
74         u32                             code;
75         u32                             argument;
76 };
77
78
79 /*
80  * OSL Initialization and shutdown primitives
81  */
82
83 acpi_status
84 acpi_os_initialize (
85         void);
86
87 acpi_status
88 acpi_os_terminate (
89         void);
90
91
92 /*
93  * ACPI Table interfaces
94  */
95
96 acpi_status
97 acpi_os_get_root_pointer (
98         u32                             flags,
99         struct acpi_pointer             *address);
100
101 acpi_status
102 acpi_os_predefined_override (
103         const struct acpi_predefined_names *init_val,
104         acpi_string                         *new_val);
105
106 acpi_status
107 acpi_os_table_override (
108         struct acpi_table_header        *existing_table,
109         struct acpi_table_header        **new_table);
110
111
112 /*
113  * Synchronization primitives
114  */
115
116 acpi_status
117 acpi_os_create_semaphore (
118         u32                             max_units,
119         u32                             initial_units,
120         acpi_handle                     *out_handle);
121
122 acpi_status
123 acpi_os_delete_semaphore (
124         acpi_handle                     handle);
125
126 acpi_status
127 acpi_os_wait_semaphore (
128         acpi_handle                     handle,
129         u32                             units,
130         u16                             timeout);
131
132 acpi_status
133 acpi_os_signal_semaphore (
134         acpi_handle                     handle,
135         u32                             units);
136
137 acpi_status
138 acpi_os_create_lock (
139         acpi_handle                     *out_handle);
140
141 void
142 acpi_os_delete_lock (
143         acpi_handle                     handle);
144
145 void
146 acpi_os_acquire_lock (
147         acpi_handle                     handle,
148         u32                             flags);
149
150 void
151 acpi_os_release_lock (
152         acpi_handle                     handle,
153         u32                             flags);
154
155
156 /*
157  * Memory allocation and mapping
158  */
159
160 void *
161 acpi_os_allocate (
162         acpi_size                       size);
163
164 void
165 acpi_os_free (
166         void *                          memory);
167
168 acpi_status
169 acpi_os_map_memory (
170         acpi_physical_address           physical_address,
171         acpi_size                       size,
172         void __iomem                  **logical_address);
173
174 void
175 acpi_os_unmap_memory (
176         void __iomem                  *logical_address,
177         acpi_size                       size);
178
179 acpi_status
180 acpi_os_get_physical_address (
181         void                            *logical_address,
182         acpi_physical_address           *physical_address);
183
184
185 /*
186  * Interrupt handlers
187  */
188
189 acpi_status
190 acpi_os_install_interrupt_handler (
191         u32                             gsi,
192         acpi_osd_handler                service_routine,
193         void                            *context);
194
195 acpi_status
196 acpi_os_remove_interrupt_handler (
197         u32                             gsi,
198         acpi_osd_handler                service_routine);
199
200
201 /*
202  * Threads and Scheduling
203  */
204
205 u32
206 acpi_os_get_thread_id (
207         void);
208
209 acpi_status
210 acpi_os_queue_for_execution (
211         u32                             priority,
212         acpi_osd_exec_callback          function,
213         void                            *context);
214
215 void
216 acpi_os_wait_events_complete(
217         void * context);
218
219 void
220 acpi_os_sleep (
221         u32                             seconds,
222         u32                             milliseconds);
223
224 void
225 acpi_os_stall (
226         u32                             microseconds);
227
228
229 /*
230  * Platform and hardware-independent I/O interfaces
231  */
232
233 acpi_status
234 acpi_os_read_port (
235         acpi_io_address                 address,
236         u32                             *value,
237         u32                             width);
238
239 acpi_status
240 acpi_os_write_port (
241         acpi_io_address                 address,
242         u32                             value,
243         u32                             width);
244
245
246 /*
247  * Platform and hardware-independent physical memory interfaces
248  */
249
250 acpi_status
251 acpi_os_read_memory (
252         acpi_physical_address           address,
253         u32                             *value,
254         u32                             width);
255
256 acpi_status
257 acpi_os_write_memory (
258         acpi_physical_address           address,
259         u32                             value,
260         u32                             width);
261
262
263 /*
264  * Platform and hardware-independent PCI configuration space access
265  * Note: Can't use "Register" as a parameter, changed to "Reg" --
266  * certain compilers complain.
267  */
268
269 acpi_status
270 acpi_os_read_pci_configuration (
271         struct acpi_pci_id              *pci_id,
272         u32                             reg,
273         void                            *value,
274         u32                             width);
275
276 acpi_status
277 acpi_os_write_pci_configuration (
278         struct acpi_pci_id              *pci_id,
279         u32                             reg,
280         acpi_integer                    value,
281         u32                             width);
282
283 /*
284  * Interim function needed for PCI IRQ routing
285  */
286
287 void
288 acpi_os_derive_pci_id(
289         acpi_handle                     rhandle,
290         acpi_handle                     chandle,
291         struct acpi_pci_id              **pci_id);
292
293 /*
294  * Miscellaneous
295  */
296
297 u8
298 acpi_os_readable (
299         void                            *pointer,
300         acpi_size                       length);
301
302 u8
303 acpi_os_writable (
304         void                            *pointer,
305         acpi_size                       length);
306
307 u32
308 acpi_os_get_timer (
309         void);
310
311 acpi_status
312 acpi_os_signal (
313         u32                             function,
314         void                            *info);
315
316 /*
317  * Debug print routines
318  */
319
320 void ACPI_INTERNAL_VAR_XFACE
321 acpi_os_printf (
322         const char                      *format,
323         ...);
324
325 void
326 acpi_os_vprintf (
327         const char                      *format,
328         va_list                 args);
329
330 void
331 acpi_os_redirect_output (
332         void                            *destination);
333
334
335 /*
336  * Debug input
337  */
338
339 u32
340 acpi_os_get_line (
341         char                            *buffer);
342
343
344 /*
345  * Directory manipulation
346  */
347
348 void *
349 acpi_os_open_directory (
350         char                            *pathname,
351         char                            *wildcard_spec,
352         char                            requested_file_type);
353
354 /* requeste_file_type values */
355
356 #define REQUEST_FILE_ONLY                   0
357 #define REQUEST_DIR_ONLY                    1
358
359
360 char *
361 acpi_os_get_next_filename (
362         void                            *dir_handle);
363
364 void
365 acpi_os_close_directory (
366         void                            *dir_handle);
367
368 /*
369  * Debug
370  */
371
372 void
373 acpi_os_dbg_assert(
374         void                            *failed_assertion,
375         void                            *file_name,
376         u32                             line_number,
377         char                            *message);
378
379
380 #endif /* __ACPIOSXF_H__ */