linux/include/acpi/acpiosxf.h
<<
>>
Prefs
   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 - 2021, 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
  20typedef 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
  38struct 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
  48acpi_status acpi_os_initialize(void);
  49#endif
  50
  51#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate
  52acpi_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
  59acpi_physical_address acpi_os_get_root_pointer(void);
  60#endif
  61
  62#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override
  63acpi_status
  64acpi_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
  69acpi_status
  70acpi_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
  75acpi_status
  76acpi_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
  85acpi_status acpi_os_create_lock(acpi_spinlock * out_handle);
  86#endif
  87
  88#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock
  89void acpi_os_delete_lock(acpi_spinlock handle);
  90#endif
  91
  92#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock
  93acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle);
  94#endif
  95
  96#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock
  97void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags);
  98#endif
  99
 100/*
 101 * RAW spinlock primitives. If the OS does not provide them, fallback to
 102 * spinlock primitives
 103 */
 104#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock
 105# define acpi_os_create_raw_lock(out_handle)    acpi_os_create_lock(out_handle)
 106#endif
 107
 108#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock
 109# define acpi_os_delete_raw_lock(handle)        acpi_os_delete_lock(handle)
 110#endif
 111
 112#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock
 113# define acpi_os_acquire_raw_lock(handle)       acpi_os_acquire_lock(handle)
 114#endif
 115
 116#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock
 117# define acpi_os_release_raw_lock(handle, flags)        \
 118        acpi_os_release_lock(handle, flags)
 119#endif
 120
 121/*
 122 * Semaphore primitives
 123 */
 124#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore
 125acpi_status
 126acpi_os_create_semaphore(u32 max_units,
 127                         u32 initial_units, acpi_semaphore * out_handle);
 128#endif
 129
 130#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore
 131acpi_status acpi_os_delete_semaphore(acpi_semaphore handle);
 132#endif
 133
 134#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore
 135acpi_status
 136acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);
 137#endif
 138
 139#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore
 140acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units);
 141#endif
 142
 143/*
 144 * Mutex primitives. May be configured to use semaphores instead via
 145 * ACPI_MUTEX_TYPE (see platform/acenv.h)
 146 */
 147#if (ACPI_MUTEX_TYPE != ACPI_BINARY_SEMAPHORE)
 148
 149#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_mutex
 150acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);
 151#endif
 152
 153#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex
 154void acpi_os_delete_mutex(acpi_mutex handle);
 155#endif
 156
 157#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex
 158acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);
 159#endif
 160
 161#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex
 162void acpi_os_release_mutex(acpi_mutex handle);
 163#endif
 164
 165#endif
 166
 167/*
 168 * Memory allocation and mapping
 169 */
 170#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate
 171void *acpi_os_allocate(acpi_size size);
 172#endif
 173
 174#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed
 175void *acpi_os_allocate_zeroed(acpi_size size);
 176#endif
 177
 178#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free
 179void acpi_os_free(void *memory);
 180#endif
 181
 182#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory
 183void *acpi_os_map_memory(acpi_physical_address where, acpi_size length);
 184#endif
 185
 186#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory
 187void acpi_os_unmap_memory(void *logical_address, acpi_size size);
 188#endif
 189
 190#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address
 191acpi_status
 192acpi_os_get_physical_address(void *logical_address,
 193                             acpi_physical_address *physical_address);
 194#endif
 195
 196/*
 197 * Memory/Object Cache
 198 */
 199#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache
 200acpi_status
 201acpi_os_create_cache(char *cache_name,
 202                     u16 object_size,
 203                     u16 max_depth, acpi_cache_t ** return_cache);
 204#endif
 205
 206#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache
 207acpi_status acpi_os_delete_cache(acpi_cache_t * cache);
 208#endif
 209
 210#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache
 211acpi_status acpi_os_purge_cache(acpi_cache_t * cache);
 212#endif
 213
 214#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object
 215void *acpi_os_acquire_object(acpi_cache_t * cache);
 216#endif
 217
 218#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object
 219acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object);
 220#endif
 221
 222/*
 223 * Interrupt handlers
 224 */
 225#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler
 226acpi_status
 227acpi_os_install_interrupt_handler(u32 interrupt_number,
 228                                  acpi_osd_handler service_routine,
 229                                  void *context);
 230#endif
 231
 232#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler
 233acpi_status
 234acpi_os_remove_interrupt_handler(u32 interrupt_number,
 235                                 acpi_osd_handler service_routine);
 236#endif
 237
 238/*
 239 * Threads and Scheduling
 240 */
 241#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id
 242acpi_thread_id acpi_os_get_thread_id(void);
 243#endif
 244
 245#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute
 246acpi_status
 247acpi_os_execute(acpi_execute_type type,
 248                acpi_osd_exec_callback function, void *context);
 249#endif
 250
 251#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete
 252void acpi_os_wait_events_complete(void);
 253#endif
 254
 255#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep
 256void acpi_os_sleep(u64 milliseconds);
 257#endif
 258
 259#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall
 260void acpi_os_stall(u32 microseconds);
 261#endif
 262
 263/*
 264 * Platform and hardware-independent I/O interfaces
 265 */
 266#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port
 267acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width);
 268#endif
 269
 270#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port
 271acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width);
 272#endif
 273
 274/*
 275 * Platform and hardware-independent physical memory interfaces
 276 */
 277int acpi_os_read_iomem(void __iomem *virt_addr, u64 *value, u32 width);
 278
 279#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory
 280acpi_status
 281acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width);
 282#endif
 283
 284#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory
 285acpi_status
 286acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width);
 287#endif
 288
 289/*
 290 * Platform and hardware-independent PCI configuration space access
 291 * Note: Can't use "Register" as a parameter, changed to "Reg" --
 292 * certain compilers complain.
 293 */
 294#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_pci_configuration
 295acpi_status
 296acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id,
 297                               u32 reg, u64 *value, u32 width);
 298#endif
 299
 300#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration
 301acpi_status
 302acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id,
 303                                u32 reg, u64 value, u32 width);
 304#endif
 305
 306/*
 307 * Miscellaneous
 308 */
 309#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable
 310u8 acpi_os_readable(void *pointer, acpi_size length);
 311#endif
 312
 313#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable
 314u8 acpi_os_writable(void *pointer, acpi_size length);
 315#endif
 316
 317#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer
 318u64 acpi_os_get_timer(void);
 319#endif
 320
 321#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal
 322acpi_status acpi_os_signal(u32 function, void *info);
 323#endif
 324
 325#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_enter_sleep
 326acpi_status acpi_os_enter_sleep(u8 sleep_state, u32 rega_value, u32 regb_value);
 327#endif
 328
 329/*
 330 * Debug print routines
 331 */
 332#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf
 333ACPI_PRINTF_LIKE(1)
 334void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);
 335#endif
 336
 337#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf
 338void acpi_os_vprintf(const char *format, va_list args);
 339#endif
 340
 341#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output
 342void acpi_os_redirect_output(void *destination);
 343#endif
 344
 345/*
 346 * Debug IO
 347 */
 348#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line
 349acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read);
 350#endif
 351
 352#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger
 353acpi_status acpi_os_initialize_debugger(void);
 354#endif
 355
 356#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger
 357void acpi_os_terminate_debugger(void);
 358#endif
 359
 360#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_command_ready
 361acpi_status acpi_os_wait_command_ready(void);
 362#endif
 363
 364#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_notify_command_complete
 365acpi_status acpi_os_notify_command_complete(void);
 366#endif
 367
 368#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point
 369void
 370acpi_os_trace_point(acpi_trace_event_type type,
 371                    u8 begin, u8 *aml, char *pathname);
 372#endif
 373
 374/*
 375 * Obtain ACPI table(s)
 376 */
 377#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name
 378acpi_status
 379acpi_os_get_table_by_name(char *signature,
 380                          u32 instance,
 381                          struct acpi_table_header **table,
 382                          acpi_physical_address *address);
 383#endif
 384
 385#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index
 386acpi_status
 387acpi_os_get_table_by_index(u32 index,
 388                           struct acpi_table_header **table,
 389                           u32 *instance, acpi_physical_address *address);
 390#endif
 391
 392#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address
 393acpi_status
 394acpi_os_get_table_by_address(acpi_physical_address address,
 395                             struct acpi_table_header **table);
 396#endif
 397
 398/*
 399 * Directory manipulation
 400 */
 401#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory
 402void *acpi_os_open_directory(char *pathname,
 403                             char *wildcard_spec, char requested_file_type);
 404#endif
 405
 406/* requeste_file_type values */
 407
 408#define REQUEST_FILE_ONLY                   0
 409#define REQUEST_DIR_ONLY                    1
 410
 411#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename
 412char *acpi_os_get_next_filename(void *dir_handle);
 413#endif
 414
 415#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
 416void acpi_os_close_directory(void *dir_handle);
 417#endif
 418
 419#endif                          /* __ACPIOSXF_H__ */
 420