brintos

brintos / linux-shallow public Read only

0
0
Text · 11.3 KiB · 914c029 Raw
420 lines · c
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). These5 *                    interfaces must be implemented by OSL to interface the6 *                    ACPI components to the host operating system.7 *8 * Copyright (C) 2000 - 2023, 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_HANDLER28} acpi_execute_type;29 30#define ACPI_NO_UNIT_LIMIT          ((u32) -1)31#define ACPI_MUTEX_SEM              132 33/* Functions for acpi_os_signal */34 35#define ACPI_SIGNAL_FATAL           036#define ACPI_SIGNAL_BREAKPOINT      137 38struct acpi_signal_fatal_info {39	u32 type;40	u32 code;41	u32 argument;42};43 44/*45 * OSL Initialization and shutdown primitives46 */47#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize48acpi_status acpi_os_initialize(void);49#endif50 51#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate52acpi_status acpi_os_terminate(void);53#endif54 55/*56 * ACPI Table interfaces57 */58#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_root_pointer59acpi_physical_address acpi_os_get_root_pointer(void);60#endif61 62#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_predefined_override63acpi_status64acpi_os_predefined_override(const struct acpi_predefined_names *init_val,65			    acpi_string *new_val);66#endif67 68#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_table_override69acpi_status70acpi_os_table_override(struct acpi_table_header *existing_table,71		       struct acpi_table_header **new_table);72#endif73 74#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_physical_table_override75acpi_status76acpi_os_physical_table_override(struct acpi_table_header *existing_table,77				acpi_physical_address *new_address,78				u32 *new_table_length);79#endif80 81/*82 * Spinlock primitives83 */84#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_lock85acpi_status acpi_os_create_lock(acpi_spinlock * out_handle);86#endif87 88#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_lock89void acpi_os_delete_lock(acpi_spinlock handle);90#endif91 92#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_lock93acpi_cpu_flags acpi_os_acquire_lock(acpi_spinlock handle);94#endif95 96#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_lock97void acpi_os_release_lock(acpi_spinlock handle, acpi_cpu_flags flags);98#endif99 100/*101 * RAW spinlock primitives. If the OS does not provide them, fallback to102 * spinlock primitives103 */104#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_raw_lock105# define acpi_os_create_raw_lock(out_handle)	acpi_os_create_lock(out_handle)106#endif107 108#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_raw_lock109# define acpi_os_delete_raw_lock(handle)	acpi_os_delete_lock(handle)110#endif111 112#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_raw_lock113# define acpi_os_acquire_raw_lock(handle)	acpi_os_acquire_lock(handle)114#endif115 116#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_raw_lock117# define acpi_os_release_raw_lock(handle, flags)	\118	acpi_os_release_lock(handle, flags)119#endif120 121/*122 * Semaphore primitives123 */124#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_semaphore125acpi_status126acpi_os_create_semaphore(u32 max_units,127			 u32 initial_units, acpi_semaphore * out_handle);128#endif129 130#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_semaphore131acpi_status acpi_os_delete_semaphore(acpi_semaphore handle);132#endif133 134#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_semaphore135acpi_status136acpi_os_wait_semaphore(acpi_semaphore handle, u32 units, u16 timeout);137#endif138 139#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal_semaphore140acpi_status acpi_os_signal_semaphore(acpi_semaphore handle, u32 units);141#endif142 143/*144 * Mutex primitives. May be configured to use semaphores instead via145 * 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_mutex150acpi_status acpi_os_create_mutex(acpi_mutex * out_handle);151#endif152 153#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_mutex154void acpi_os_delete_mutex(acpi_mutex handle);155#endif156 157#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_mutex158acpi_status acpi_os_acquire_mutex(acpi_mutex handle, u16 timeout);159#endif160 161#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_mutex162void acpi_os_release_mutex(acpi_mutex handle);163#endif164 165#endif166 167/*168 * Memory allocation and mapping169 */170#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate171void *acpi_os_allocate(acpi_size size);172#endif173 174#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_allocate_zeroed175void *acpi_os_allocate_zeroed(acpi_size size);176#endif177 178#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_free179void acpi_os_free(void *memory);180#endif181 182#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_map_memory183void *acpi_os_map_memory(acpi_physical_address where, acpi_size length);184#endif185 186#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_unmap_memory187void acpi_os_unmap_memory(void *logical_address, acpi_size size);188#endif189 190#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_physical_address191acpi_status192acpi_os_get_physical_address(void *logical_address,193			     acpi_physical_address *physical_address);194#endif195 196/*197 * Memory/Object Cache198 */199#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_create_cache200acpi_status201acpi_os_create_cache(char *cache_name,202		     u16 object_size,203		     u16 max_depth, acpi_cache_t ** return_cache);204#endif205 206#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_delete_cache207acpi_status acpi_os_delete_cache(acpi_cache_t * cache);208#endif209 210#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_purge_cache211acpi_status acpi_os_purge_cache(acpi_cache_t * cache);212#endif213 214#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_acquire_object215void *acpi_os_acquire_object(acpi_cache_t * cache);216#endif217 218#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_release_object219acpi_status acpi_os_release_object(acpi_cache_t * cache, void *object);220#endif221 222/*223 * Interrupt handlers224 */225#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_install_interrupt_handler226acpi_status227acpi_os_install_interrupt_handler(u32 interrupt_number,228				  acpi_osd_handler service_routine,229				  void *context);230#endif231 232#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_remove_interrupt_handler233acpi_status234acpi_os_remove_interrupt_handler(u32 interrupt_number,235				 acpi_osd_handler service_routine);236#endif237 238/*239 * Threads and Scheduling240 */241#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_thread_id242acpi_thread_id acpi_os_get_thread_id(void);243#endif244 245#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_execute246acpi_status247acpi_os_execute(acpi_execute_type type,248		acpi_osd_exec_callback function, void *context);249#endif250 251#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_events_complete252void acpi_os_wait_events_complete(void);253#endif254 255#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_sleep256void acpi_os_sleep(u64 milliseconds);257#endif258 259#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_stall260void acpi_os_stall(u32 microseconds);261#endif262 263/*264 * Platform and hardware-independent I/O interfaces265 */266#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_port267acpi_status acpi_os_read_port(acpi_io_address address, u32 *value, u32 width);268#endif269 270#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_port271acpi_status acpi_os_write_port(acpi_io_address address, u32 value, u32 width);272#endif273 274/*275 * Platform and hardware-independent physical memory interfaces276 */277int acpi_os_read_iomem(void __iomem *virt_addr, u64 *value, u32 width);278 279#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_read_memory280acpi_status281acpi_os_read_memory(acpi_physical_address address, u64 *value, u32 width);282#endif283 284#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_memory285acpi_status286acpi_os_write_memory(acpi_physical_address address, u64 value, u32 width);287#endif288 289/*290 * Platform and hardware-independent PCI configuration space access291 * 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_configuration295acpi_status296acpi_os_read_pci_configuration(struct acpi_pci_id *pci_id,297			       u32 reg, u64 *value, u32 width);298#endif299 300#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_write_pci_configuration301acpi_status302acpi_os_write_pci_configuration(struct acpi_pci_id *pci_id,303				u32 reg, u64 value, u32 width);304#endif305 306/*307 * Miscellaneous308 */309#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_readable310u8 acpi_os_readable(void *pointer, acpi_size length);311#endif312 313#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_writable314u8 acpi_os_writable(void *pointer, acpi_size length);315#endif316 317#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_timer318u64 acpi_os_get_timer(void);319#endif320 321#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_signal322acpi_status acpi_os_signal(u32 function, void *info);323#endif324 325#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_enter_sleep326acpi_status acpi_os_enter_sleep(u8 sleep_state, u32 rega_value, u32 regb_value);327#endif328 329/*330 * Debug print routines331 */332#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_printf333ACPI_PRINTF_LIKE(1)334void ACPI_INTERNAL_VAR_XFACE acpi_os_printf(const char *format, ...);335#endif336 337#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_vprintf338void acpi_os_vprintf(const char *format, va_list args);339#endif340 341#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_redirect_output342void acpi_os_redirect_output(void *destination);343#endif344 345/*346 * Debug IO347 */348#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_line349acpi_status acpi_os_get_line(char *buffer, u32 buffer_length, u32 *bytes_read);350#endif351 352#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_initialize_debugger353acpi_status acpi_os_initialize_debugger(void);354#endif355 356#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_terminate_debugger357void acpi_os_terminate_debugger(void);358#endif359 360#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_wait_command_ready361acpi_status acpi_os_wait_command_ready(void);362#endif363 364#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_notify_command_complete365acpi_status acpi_os_notify_command_complete(void);366#endif367 368#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_trace_point369void370acpi_os_trace_point(acpi_trace_event_type type,371		    u8 begin, u8 *aml, char *pathname);372#endif373 374/*375 * Obtain ACPI table(s)376 */377#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_name378acpi_status379acpi_os_get_table_by_name(char *signature,380			  u32 instance,381			  struct acpi_table_header **table,382			  acpi_physical_address *address);383#endif384 385#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_index386acpi_status387acpi_os_get_table_by_index(u32 index,388			   struct acpi_table_header **table,389			   u32 *instance, acpi_physical_address *address);390#endif391 392#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_table_by_address393acpi_status394acpi_os_get_table_by_address(acpi_physical_address address,395			     struct acpi_table_header **table);396#endif397 398/*399 * Directory manipulation400 */401#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_open_directory402void *acpi_os_open_directory(char *pathname,403			     char *wildcard_spec, char requested_file_type);404#endif405 406/* requeste_file_type values */407 408#define REQUEST_FILE_ONLY                   0409#define REQUEST_DIR_ONLY                    1410 411#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_get_next_filename412char *acpi_os_get_next_filename(void *dir_handle);413#endif414 415#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_acpi_os_close_directory416void acpi_os_close_directory(void *dir_handle);417#endif418 419#endif				/* __ACPIOSXF_H__ */420