1 /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */ 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 * Copyright (C) 2000 - 2018, Intel Corp. 9 * 10 *****************************************************************************/ 11 12 #ifndef __ACPIOSXF_H__ 13 #define __ACPIOSXF_H__ 14 15 #include <acpi/platform/acenv.h> 16 #include <acpi/actypes.h> 17 18 /* Types for acpi_os_execute */ 19 20 typedef enum { 21 OSL_GLOBAL_LOCK_HANDLER, 22 OSL_NOTIFY_HANDLER, 23 OSL_GPE_HANDLER, 24 OSL_DEBUGGER_MAIN_THREAD, 25 OSL_DEBUGGER_EXEC_THREAD, 26 OSL_EC_POLL_HANDLER, 27 OSL_EC_BURST_HANDLER 28 } acpi_execute_type; 29 30 #define ACPI_NO_UNIT_LIMIT ((u32) -1) 31 #define ACPI_MUTEX_SEM 1 32 33 /* Functions for acpi_os_signal */ 34 35 #define ACPI_SIGNAL_FATAL 0 36 #define ACPI_SIGNAL_BREAKPOINT 1 37 38 struct acpi_signal_fatal_info { 39 u32 type; 40 u32 code; 41 u32 argument; 42 }; 43 44 /* 45 * OSL Initialization and shutdown primitives 46 */ 47 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize 48 acpi_status acpi_os_initialize(void); 49 #endif 50 51 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate 52 acpi_status acpi_os_terminate(void); 53 #endif 54 55 /* 56 * ACPI Table interfaces 57 */ 58 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_root_pointer 59 acpi_physical_address acpi_os_get_root_pointer(void); 60 #endif 61 62 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override 63 acpi_status 64 acpi_os_predefined_override(const struct acpi_predefined_names *init_val, 65 acpi_string *new_val); 66 #endif 67 68 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override 69 acpi_status 70 acpi_os_table_override(struct acpi_table_header *existing_table, 71 struct acpi_table_header **new_table); 72 #endif 73 74 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_physical_table_override 75 acpi_status 76 acpi_os_physical_table_override(struct acpi_table_header *existing_table, 77 acpi_physical_address *new_address, 78 u32 *new_table_length); 79 #endif 80 81 /* 82 * Spinlock primitives 83 */ 84 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock 85 acpi_status acpi_os_create_lock(acpi_spinlock * out_handle); 86 #endif 87 88 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock 89 void acpi_os_delete_lock(acpi_spinlock handle); 90 #endif 91 92 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock 93 acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle); 94 #endif 95 96 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock 97 void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags); 98 #endif 99 100 /* 101 * Semaphore primitives 102 */ 103 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore 104 acpi_status 105 acpi_os_create_semaphore(u32 max_units, 106 u32 initial_units, acpi_semaphore * out_handle); 107 #endif 108 109 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore 110 acpi_status acpi_os_delete_semaphore(acpi_semaphore handle); 111 #endif 112 113 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore 114 acpi_status 115 acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout); 116 #endif 117 118 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore 119 acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units); 120 #endif 121 122 /* 123 * Mutex primitives. May be configured to use semaphores instead via 124 * ACPI_MUTEX_TYPE (see platform/acenv.h) 125 */ 126 #if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE) 127 128 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_mutex 129 acpi_status acpi_os_create_mutex(acpi_mutex * out_handle); 130 #endif 131 132 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex 133 void acpi_os_delete_mutex(acpi_mutex handle); 134 #endif 135 136 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex 137 acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout); 138 #endif 139 140 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex 141 void acpi_os_release_mutex(acpi_mutex handle); 142 #endif 143 144 #endif 145 146 /* 147 * Memory allocation and mapping 148 */ 149 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate 150 void *acpi_os_allocate(acpi_size size); 151 #endif 152 153 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed 154 void *acpi_os_allocate_zeroed(acpi_size size); 155 #endif 156 157 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free 158 void acpi_os_free(void *memory); 159 #endif 160 161 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory 162 void *acpi_os_map_memory(acpi_physical_address where, acpi_size length); 163 #endif 164 165 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory 166 void acpi_os_unmap_memory(void *logical_address, acpi_size size); 167 #endif 168 169 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address 170 acpi_status 171 acpi_os_get_physical_address(void *logical_address, 172 acpi_physical_address *physical_address); 173 #endif 174 175 /* 176 * Memory/Object Cache 177 */ 178 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache 179 acpi_status 180 acpi_os_create_cache(char *cache_name, 181 u16 object_size, 182 u16 max_depth, acpi_cache_t ** return_cache); 183 #endif 184 185 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache 186 acpi_status acpi_os_delete_cache(acpi_cache_t * cache); 187 #endif 188 189 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache 190 acpi_status acpi_os_purge_cache(acpi_cache_t * cache); 191 #endif 192 193 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object 194 void *acpi_os_acquire_object(acpi_cache_t * cache); 195 #endif 196 197 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object 198 acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object); 199 #endif 200 201 /* 202 * Interrupt handlers 203 */ 204 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler 205 acpi_status 206 acpi_os_install_interrupt_handler(u32 interrupt_number, 207 acpi_osd_handler service_routine, 208 void *context); 209 #endif 210 211 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler 212 acpi_status 213 acpi_os_remove_interrupt_handler(u32 interrupt_number, 214 acpi_osd_handler service_routine); 215 #endif 216 217 /* 218 * Threads and Scheduling 219 */ 220 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id 221 acpi_thread_id acpi_os_get_thread_id(void); 222 #endif 223 224 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute 225 acpi_status 226 acpi_os_execute(acpi_execute_type type, 227 acpi_osd_exec_callback function, void *context); 228 #endif 229 230 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete 231 void acpi_os_wait_events_complete(void); 232 #endif 233 234 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep 235 void acpi_os_sleep(u64 milliseconds); 236 #endif 237 238 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall 239 void acpi_os_stall(u32 microseconds); 240 #endif 241 242 /* 243 * Platform and hardware-independent I/O interfaces 244 */ 245 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port 246 acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width); 247 #endif 248 249 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port 250 acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width); 251 #endif 252 253 /* 254 * Platform and hardware-independent physical memory interfaces 255 */ 256 int acpi_os_read_iomem(void __iomem *virt_addr, u64 *value, u32 width); 257 258 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory 259 acpi_status 260 acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width); 261 #endif 262 263 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory 264 acpi_status 265 acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width); 266 #endif 267 268 /* 269 * Platform and hardware-independent PCI configuration space access 270 * Note: Can't use "Register" as a parameter, changed to "Reg" -- 271 * certain compilers complain. 272 */ 273 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_pci_configuration 274 acpi_status 275 acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id, 276 u32 reg, u64 *value, u32 width); 277 #endif 278 279 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration 280 acpi_status 281 acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id, 282 u32 reg, u64 value, u32 width); 283 #endif 284 285 /* 286 * Miscellaneous 287 */ 288 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable 289 u8 acpi_os_readable(void *pointer, acpi_size length); 290 #endif 291 292 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable 293 u8 acpi_os_writable(void *pointer, acpi_size length); 294 #endif 295 296 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer 297 u64 acpi_os_get_timer(void); 298 #endif 299 300 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal 301 acpi_status acpi_os_signal(u32 function, void *info); 302 #endif 303 304 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_enter_sleep 305 acpi_status acpi_os_enter_sleep(u8 sleep_state, u32 rega_value, u32 regb_value); 306 #endif 307 308 /* 309 * Debug print routines 310 */ 311 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf 312 void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...); 313 #endif 314 315 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf 316 void acpi_os_vprintf(const char *format, va_list args); 317 #endif 318 319 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output 320 void acpi_os_redirect_output(void *destination); 321 #endif 322 323 /* 324 * Debug IO 325 */ 326 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line 327 acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read); 328 #endif 329 330 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger 331 acpi_status acpi_os_initialize_debugger(void); 332 #endif 333 334 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger 335 void acpi_os_terminate_debugger(void); 336 #endif 337 338 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_command_ready 339 acpi_status acpi_os_wait_command_ready(void); 340 #endif 341 342 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_notify_command_complete 343 acpi_status acpi_os_notify_command_complete(void); 344 #endif 345 346 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point 347 void 348 acpi_os_trace_point(acpi_trace_event_type type, 349 u8 begin, u8 *aml, char *pathname); 350 #endif 351 352 /* 353 * Obtain ACPI table(s) 354 */ 355 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name 356 acpi_status 357 acpi_os_get_table_by_name(char *signature, 358 u32 instance, 359 struct acpi_table_header **table, 360 acpi_physical_address *address); 361 #endif 362 363 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index 364 acpi_status 365 acpi_os_get_table_by_index(u32 index, 366 struct acpi_table_header **table, 367 u32 *instance, acpi_physical_address *address); 368 #endif 369 370 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address 371 acpi_status 372 acpi_os_get_table_by_address(acpi_physical_address address, 373 struct acpi_table_header **table); 374 #endif 375 376 /* 377 * Directory manipulation 378 */ 379 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory 380 void *acpi_os_open_directory(char *pathname, 381 char *wildcard_spec, char requested_file_type); 382 #endif 383 384 /* requeste_file_type values */ 385 386 #define REQUEST_FILE_ONLY 0 387 #define REQUEST_DIR_ONLY 1 388 389 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename 390 char *acpi_os_get_next_filename(void *dir_handle); 391 #endif 392 393 #ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory 394 void acpi_os_close_directory(void *dir_handle); 395 #endif 396 397 #endif /* __ACPIOSXF_H__ */ 398