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                            **logical_address);
173 
174 void
175 acpi_os_unmap_memory (
176 	void                            *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                             interrupt_number,
192 	OSD_HANDLER             service_routine,
193 	void                            *context);
194 
195 acpi_status
196 acpi_os_remove_interrupt_handler (
197 	u32                             interrupt_number,
198 	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 	OSD_EXECUTION_CALLBACK  function,
213 	void                            *context);
214 
215 void
216 acpi_os_sleep (
217 	u32                             seconds,
218 	u32                             milliseconds);
219 
220 void
221 acpi_os_stall (
222 	u32                             microseconds);
223 
224 
225 /*
226  * Platform and hardware-independent I/O interfaces
227  */
228 
229 acpi_status
230 acpi_os_read_port (
231 	acpi_io_address                 address,
232 	u32                             *value,
233 	u32                             width);
234 
235 acpi_status
236 acpi_os_write_port (
237 	acpi_io_address                 address,
238 	u32                             value,
239 	u32                             width);
240 
241 
242 /*
243  * Platform and hardware-independent physical memory interfaces
244  */
245 
246 acpi_status
247 acpi_os_read_memory (
248 	acpi_physical_address           address,
249 	u32                             *value,
250 	u32                             width);
251 
252 acpi_status
253 acpi_os_write_memory (
254 	acpi_physical_address           address,
255 	u32                             value,
256 	u32                             width);
257 
258 
259 /*
260  * Platform and hardware-independent PCI configuration space access
261  */
262 
263 acpi_status
264 acpi_os_read_pci_configuration (
265 	struct acpi_pci_id              *pci_id,
266 	u32                             register,
267 	void                            *value,
268 	u32                             width);
269 
270 acpi_status
271 acpi_os_write_pci_configuration (
272 	struct acpi_pci_id              *pci_id,
273 	u32                             register,
274 	acpi_integer                    value,
275 	u32                             width);
276 
277 /*
278  * Interim function needed for PCI IRQ routing
279  */
280 void
281 acpi_os_derive_pci_id(
282 	acpi_handle                     rhandle,
283 	acpi_handle                     chandle,
284 	struct acpi_pci_id              **pci_id);
285 
286 /*
287  * Miscellaneous
288  */
289 
290 u8
291 acpi_os_readable (
292 	void                            *pointer,
293 	acpi_size                       length);
294 
295 u8
296 acpi_os_writable (
297 	void                            *pointer,
298 	acpi_size                       length);
299 
300 u32
301 acpi_os_get_timer (
302 	void);
303 
304 acpi_status
305 acpi_os_signal (
306 	u32                             function,
307 	void                            *info);
308 
309 /*
310  * Debug print routines
311  */
312 
313 void ACPI_INTERNAL_VAR_XFACE
314 acpi_os_printf (
315 	const char                      *format,
316 	...);
317 
318 void
319 acpi_os_vprintf (
320 	const char                      *format,
321 	va_list                 args);
322 
323 void
324 acpi_os_redirect_output (
325 	void                            *destination);
326 
327 
328 /*
329  * Debug input
330  */
331 
332 u32
333 acpi_os_get_line (
334 	char                            *buffer);
335 
336 
337 /*
338  * Directory manipulation
339  */
340 
341 void *
342 acpi_os_open_directory (
343 	char                            *pathname,
344 	char                            *wildcard_spec,
345 	char                            requested_file_type);
346 
347 /* requeste_file_type values */
348 
349 #define REQUEST_FILE_ONLY                   0
350 #define REQUEST_DIR_ONLY                    1
351 
352 
353 char *
354 acpi_os_get_next_filename (
355 	void                            *dir_handle);
356 
357 void
358 acpi_os_close_directory (
359 	void                            *dir_handle);
360 
361 /*
362  * Debug
363  */
364 
365 void
366 acpi_os_dbg_assert(
367 	void                            *failed_assertion,
368 	void                            *file_name,
369 	u32                             line_number,
370 	char                            *message);
371 
372 
373 #endif /* __ACPIOSXF_H__ */
374