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 - 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
  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 * Semaphore primitives
 102 */
 103#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore
 104acpi_status
 105acpi_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
 110acpi_status acpi_os_delete_semaphore(acpi_semaphore handle);
 111#endif
 112
 113#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore
 114acpi_status
 115acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);
 116#endif
 117
 118#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore
 119acpi_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
 129acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);
 130#endif
 131
 132#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex
 133void acpi_os_delete_mutex(acpi_mutex handle);
 134#endif
 135
 136#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex
 137acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);
 138#endif
 139
 140#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex
 141void 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
 150void *acpi_os_allocate(acpi_size size);
 151#endif
 152
 153#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed
 154void *acpi_os_allocate_zeroed(acpi_size size);
 155#endif
 156
 157#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free
 158void acpi_os_free(void *memory);
 159#endif
 160
 161#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory
 162void *acpi_os_map_memory(acpi_physical_address where, acpi_size length);
 163#endif
 164
 165#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory
 166void acpi_os_unmap_memory(void *logical_address, acpi_size size);
 167#endif
 168
 169#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address
 170acpi_status
 171acpi_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
 179acpi_status
 180acpi_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
 186acpi_status acpi_os_delete_cache(acpi_cache_t * cache);
 187#endif
 188
 189#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache
 190acpi_status acpi_os_purge_cache(acpi_cache_t * cache);
 191#endif
 192
 193#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object
 194void *acpi_os_acquire_object(acpi_cache_t * cache);
 195#endif
 196
 197#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object
 198acpi_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
 205acpi_status
 206acpi_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
 212acpi_status
 213acpi_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
 221acpi_thread_id acpi_os_get_thread_id(void);
 222#endif
 223
 224#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute
 225acpi_status
 226acpi_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
 231void acpi_os_wait_events_complete(void);
 232#endif
 233
 234#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep
 235void acpi_os_sleep(u64 milliseconds);
 236#endif
 237
 238#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall
 239void 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
 246acpi_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
 250acpi_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 */
 256int acpi_os_read_iomem(void __iomem *virt_addr, u64 *value, u32 width);
 257
 258#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory
 259acpi_status
 260acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width);
 261#endif
 262
 263#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory
 264acpi_status
 265acpi_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
 274acpi_status
 275acpi_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
 280acpi_status
 281acpi_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
 289u8 acpi_os_readable(void *pointer, acpi_size length);
 290#endif
 291
 292#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable
 293u8 acpi_os_writable(void *pointer, acpi_size length);
 294#endif
 295
 296#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer
 297u64 acpi_os_get_timer(void);
 298#endif
 299
 300#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal
 301acpi_status acpi_os_signal(u32 function, void *info);
 302#endif
 303
 304#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_enter_sleep
 305acpi_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
 312void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);
 313#endif
 314
 315#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf
 316void acpi_os_vprintf(const char *format, va_list args);
 317#endif
 318
 319#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output
 320void acpi_os_redirect_output(void *destination);
 321#endif
 322
 323/*
 324 * Debug IO
 325 */
 326#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line
 327acpi_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
 331acpi_status acpi_os_initialize_debugger(void);
 332#endif
 333
 334#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger
 335void acpi_os_terminate_debugger(void);
 336#endif
 337
 338#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_command_ready
 339acpi_status acpi_os_wait_command_ready(void);
 340#endif
 341
 342#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_notify_command_complete
 343acpi_status acpi_os_notify_command_complete(void);
 344#endif
 345
 346#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point
 347void
 348acpi_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
 356acpi_status
 357acpi_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
 364acpi_status
 365acpi_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
 371acpi_status
 372acpi_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
 380void *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
 390char *acpi_os_get_next_filename(void *dir_handle);
 391#endif
 392
 393#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory
 394void acpi_os_close_directory(void *dir_handle);
 395#endif
 396
 397#endif                          /* __ACPIOSXF_H__ */
 398