cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

acpiosxf.h (11619B)


      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 - 2022, 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__ */