|
ReactOS 0.4.17-dev-683-g0dafdc5
|


Go to the source code of this file.
Macros | |
| #define | UACPI_MAP_FAILED ((void*)-1) |
Typedefs | |
| typedef enum uacpi_work_type | uacpi_work_type |
| typedef void(* | uacpi_work_handler) (uacpi_handle) |
Enumerations | |
| enum | uacpi_work_type { UACPI_WORK_GPE_EXECUTION , UACPI_WORK_NOTIFICATION } |
Definition at line 13 of file kernel_api.h.
| typedef void(* uacpi_work_handler) (uacpi_handle) |
Definition at line 371 of file kernel_api.h.
| typedef enum uacpi_work_type uacpi_work_type |
| Enumerator | |
|---|---|
| UACPI_WORK_GPE_EXECUTION | Schedule a GPE handler method for execution. This should be scheduled to run on CPU0 to avoid potential SMI-related firmware bugs. |
| UACPI_WORK_NOTIFICATION | Schedule a Notify(device) firmware request for execution. This can run on any CPU. |
Definition at line 356 of file kernel_api.h.
| uacpi_status uacpi_kernel_acquire_mutex | ( | uacpi_handle | Handle, |
| uacpi_u16 | Timeout | ||
| ) |
Try to acquire the mutex with a millisecond timeout.
The timeout value has the following meanings: 0x0000 - Attempt to acquire the mutex once, in a non-blocking manner 0x0001...0xFFFE - Attempt to acquire the mutex for at least 'timeout' milliseconds 0xFFFF - Infinite wait, block until the mutex is acquired
The following are possible return values:
Definition at line 152 of file uacpiosl.c.
Referenced by uacpi_acquire_native_mutex(), and uacpi_acquire_native_mutex_may_be_null().
| void * uacpi_kernel_alloc | ( | uacpi_size | size | ) |
Read/write to previously mapped memory
If UACPI_NATIVE_MMIO is not defined, uACPI uses builtin generic MMIO helpers that use simple volatile stores/loads. Allocate a block of memory of 'size' bytes. The contents of the allocated memory are unspecified.
Definition at line 111 of file uacpiosl.c.
Referenced by buffer_alloc(), buffer_to_string(), do_install_gpe_handler(), handle_buffer(), handle_concatenate(), handle_concatenate_res(), handle_create_method(), handle_load(), handle_mid(), handle_special_field(), handle_string(), handle_to(), handle_to_string(), integer_to_string(), io_region_attach(), make_object_for_predefined(), memory_region_attach(), name_string_to_path(), uacpi_builtin_alloc_zeroed(), uacpi_eval_cid(), uacpi_eval_cls(), uacpi_eval_hid(), uacpi_eval_uid(), uacpi_get_namespace_node_info(), uacpi_get_pci_routing_table(), uacpi_initialize_tables(), uacpi_install_address_space_handler_with_flags(), uacpi_install_interface(), uacpi_map_gas(), uacpi_namespace_node_generate_absolute_path(), uacpi_notify_all(), and uacpi_setup_gpe_for_wake().
| uacpi_handle uacpi_kernel_create_event | ( | void | ) |
Create/free an opaque kernel (semaphore-like) event object.
Definition at line 53 of file uacpiosl.c.
Referenced by event_alloc(), and uacpi_initialize_events().
| uacpi_handle uacpi_kernel_create_mutex | ( | void | ) |
Create/free an opaque non-recursive kernel mutex object.
Definition at line 139 of file uacpiosl.c.
Referenced by uacpi_create_mutex(), uacpi_initialize_interfaces(), uacpi_initialize_notify(), uacpi_initialize_tables(), uacpi_recursive_lock_init(), and uacpi_rw_lock_init().
| uacpi_handle uacpi_kernel_create_spinlock | ( | void | ) |
Create/free a kernel spinlock object.
Unlike other types of locks, spinlocks may be used in interrupt contexts.
Definition at line 85 of file uacpiosl.c.
Referenced by uacpi_initialize_events(), uacpi_initialize_events_early(), and uacpi_initialize_registers().
| uacpi_interrupt_state uacpi_kernel_disable_interrupts | ( | void | ) |
Disable interrupts and return a kernel-defined value representing the "before" state. This value is used in the subsequent call to restore the prior state.
Note that this is talking about ALL interrupts on the current CPU, not just those installed by uACPI. This is typically achieved by executing the 'cli' instruction on x86, 'msr daifset, #3' on aarch64 etc.
Referenced by enter_sleep_state_hw_full(), and enter_sleep_state_hw_reduced().
Free a previously allocated memory block.
'mem' might be a NULL pointer. In this case, the call is assumed to be a no-op.
An optionally enabled 'size_hint' parameter contains the size of the original allocation. Note that in some scenarios this incurs additional cost to calculate the object size.
Definition at line 126 of file uacpiosl.c.
| void uacpi_kernel_free_event | ( | uacpi_handle | Handle | ) |
Definition at line 60 of file uacpiosl.c.
Referenced by free_event(), and uacpi_state_reset().
| void uacpi_kernel_free_mutex | ( | uacpi_handle | handle | ) |
Definition at line 146 of file uacpiosl.c.
Referenced by free_mutex(), uacpi_deinitialize_interfaces(), uacpi_deinitialize_notify(), uacpi_deinitialize_tables(), uacpi_recursive_lock_deinit(), uacpi_rw_lock_deinit(), and uacpi_rw_lock_init().
| void uacpi_kernel_free_spinlock | ( | uacpi_handle | Handle | ) |
Definition at line 92 of file uacpiosl.c.
Referenced by uacpi_deinitialize_events(), uacpi_deinitialize_registers(), and uacpi_state_reset().
Returns the number of nanosecond ticks elapsed since boot, strictly monotonic.
Definition at line 35 of file uacpiosl.c.
Referenced by begin_block_execution(), handle_timer(), uacpi_namespace_initialize(), and uacpi_namespace_load().
| uacpi_status uacpi_kernel_get_rsdp | ( | uacpi_phys_addr * | out_rsdp_address | ) |
Definition at line 204 of file uacpiosl.c.
Referenced by initialize_from_rsdp().
| uacpi_thread_id uacpi_kernel_get_thread_id | ( | void | ) |
Returns a unique identifier of the currently executing thread.
The returned thread id cannot be UACPI_THREAD_ID_NONE.
Definition at line 184 of file uacpiosl.c.
Referenced by uacpi_acquire_aml_mutex(), uacpi_recursive_lock_acquire(), and uacpi_this_thread_owns_aml_mutex().
| uacpi_status uacpi_kernel_handle_firmware_request | ( | uacpi_firmware_request * | Req | ) |
Handle a firmware request.
Currently either a Breakpoint or Fatal operators.
Definition at line 177 of file uacpiosl.c.
Referenced by handle_firmware_request().
| uacpi_status uacpi_kernel_install_interrupt_handler | ( | uacpi_u32 | irq, |
| uacpi_interrupt_handler | handler, | ||
| uacpi_handle | ctx, | ||
| uacpi_handle * | out_irq_handle | ||
| ) |
Install an interrupt handler at 'irq', 'ctx' is passed to the provided handler for every invocation.
'out_irq_handle' is set to a kernel-implemented value that can be used to refer to this handler from other API.
Definition at line 212 of file uacpiosl.c.
Referenced by find_or_create_gpe_interrupt_ctx(), and uacpi_initialize_events().
| uacpi_status uacpi_kernel_io_map | ( | uacpi_io_addr | base, |
| uacpi_size | len, | ||
| uacpi_handle * | out_handle | ||
| ) |
Map a SystemIO address at [base, base + len) and return a kernel-implemented handle that can be used for reading and writing the IO range.
NOTE: The x86 architecture uses the in/out family of instructions to access the SystemIO address space.
Definition at line 165 of file uacpiosl.c.
Referenced by io_region_attach(), uacpi_map_gas_noalloc(), and uacpi_reboot().
| uacpi_status uacpi_kernel_io_read16 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u16 * | out_value | ||
| ) |
Definition at line 306 of file uacpiosl.c.
Referenced by uacpi_system_io_read().
| uacpi_status uacpi_kernel_io_read32 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u32 * | out_value | ||
| ) |
Definition at line 313 of file uacpiosl.c.
Referenced by uacpi_system_io_read().
| uacpi_status uacpi_kernel_io_read8 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u8 * | out_value | ||
| ) |
Read/Write the IO range mapped via uacpi_kernel_io_map at a 0-based 'offset' within the range.
NOTE: The x86 architecture uses the in/out family of instructions to access the SystemIO address space.
You are NOT allowed to break e.g. a 4-byte access into four 1-byte accesses. Hardware ALWAYS expects accesses to be of the exact width.
Definition at line 299 of file uacpiosl.c.
Referenced by uacpi_system_io_read().
| void uacpi_kernel_io_unmap | ( | uacpi_handle | handle | ) |
Definition at line 171 of file uacpiosl.c.
Referenced by io_region_detach(), uacpi_reboot(), and unmap_gas_io().
| uacpi_status uacpi_kernel_io_write16 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u16 | in_value | ||
| ) |
Definition at line 327 of file uacpiosl.c.
Referenced by uacpi_system_io_write().
| uacpi_status uacpi_kernel_io_write32 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u32 | in_value | ||
| ) |
Definition at line 334 of file uacpiosl.c.
Referenced by uacpi_system_io_write().
| uacpi_status uacpi_kernel_io_write8 | ( | uacpi_handle | handle, |
| uacpi_size | offset, | ||
| uacpi_u8 | in_value | ||
| ) |
Definition at line 320 of file uacpiosl.c.
Referenced by uacpi_reboot(), and uacpi_system_io_write().
| uacpi_cpu_flags uacpi_kernel_lock_spinlock | ( | uacpi_handle | Handle | ) |
Lock/unlock helpers for spinlocks.
These are expected to disable interrupts, returning the previous state of cpu flags, that can be used to possibly re-enable interrupts if they were enabled before.
Note that lock is infalliable.
Definition at line 98 of file uacpiosl.c.
Referenced by ensure_register_mapped(), handle_global_lock(), set_gpe_state(), uacpi_acquire_global_lock_from_firmware(), and uacpi_write_register_field().
| void uacpi_kernel_log | ( | uacpi_log_level | Level, |
| const uacpi_char * | Char | ||
| ) |
| void * uacpi_kernel_map | ( | uacpi_phys_addr | addr, |
| uacpi_size | len | ||
| ) |
Map a physical memory range starting at 'addr' with length 'len', and return a virtual address that can be used to access it. UACPI_MAP_FAILED is returned in case the operation wasn't successful.
NOTE: 'addr' may be misaligned, in this case the host is expected to round it down to the nearest page-aligned boundary and map that, while making sure that at least 'len' bytes are still mapped starting at 'addr'. The return value preserves the misaligned offset.
Example for uacpi_kernel_map(0x1ABC, 0xF00):
Definition at line 191 of file uacpiosl.c.
Referenced by get_external_table_header(), handle_load(), initialize_from_rsdp(), initialize_from_rxsdt(), memory_region_attach(), table_install_physical_with_origin_unlocked(), table_ref_unlocked(), uacpi_map_gas_noalloc(), and verify_and_install_table().
| void uacpi_kernel_pci_device_close | ( | uacpi_handle | Handle | ) |
Definition at line 251 of file uacpiosl.c.
Referenced by pci_region_detach(), and uacpi_reboot().
| uacpi_status uacpi_kernel_pci_device_open | ( | uacpi_pci_address | address, |
| uacpi_handle * | out_handle | ||
| ) |
Only the above ^^^ API may be used by early table access and UACPI_BAREBONES_MODE. Convenience initialization/deinitialization hooks that will be called by uACPI automatically when appropriate if compiled-in. Open a PCI device at 'address' for reading & writing.
The device at 'address' might not actually exist on the system, in this case the api is allowed to return UACPI_STATUS_NOT_FOUND to indicate that, this error is handled gracefully by creating a dummy device internally that always returns 0xFF on reads and is no-op for writes. This is to support a common pattern in AML that probes for 0xFF reads to detect whether a device exists.
The handle returned via 'out_handle' is used to perform IO on the configuration space of the device.
Definition at line 242 of file uacpiosl.c.
Referenced by pci_region_attach(), and uacpi_reboot().
| uacpi_status uacpi_kernel_pci_read16 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u16 * | value | ||
| ) |
Definition at line 264 of file uacpiosl.c.
Referenced by uacpi_pci_read().
| uacpi_status uacpi_kernel_pci_read32 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u32 * | value | ||
| ) |
Definition at line 271 of file uacpiosl.c.
Referenced by uacpi_pci_read().
| uacpi_status uacpi_kernel_pci_read8 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u8 * | value | ||
| ) |
Read & write the configuration space of a previously open PCI device.
Definition at line 257 of file uacpiosl.c.
Referenced by uacpi_pci_read().
| uacpi_status uacpi_kernel_pci_write16 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u16 | value | ||
| ) |
Definition at line 285 of file uacpiosl.c.
Referenced by uacpi_pci_write().
| uacpi_status uacpi_kernel_pci_write32 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u32 | value | ||
| ) |
Definition at line 292 of file uacpiosl.c.
Referenced by uacpi_pci_write().
| uacpi_status uacpi_kernel_pci_write8 | ( | uacpi_handle | device, |
| uacpi_size | offset, | ||
| uacpi_u8 | value | ||
| ) |
Definition at line 278 of file uacpiosl.c.
Referenced by uacpi_pci_write(), and uacpi_reboot().
| void uacpi_kernel_release_mutex | ( | uacpi_handle | Handle | ) |
Definition at line 159 of file uacpiosl.c.
Referenced by uacpi_release_native_mutex(), uacpi_release_native_mutex_may_be_null(), uacpi_rw_lock_read(), and uacpi_rw_unlock_read().
| void uacpi_kernel_reset_event | ( | uacpi_handle | Handle | ) |
Reset the event counter to 0.
Definition at line 79 of file uacpiosl.c.
Referenced by handle_event_ctl().
| void uacpi_kernel_restore_interrupts | ( | uacpi_interrupt_state | state | ) |
Restore the state of the interrupt flags to the kernel-defined value provided in 'state'.
Referenced by enter_sleep_state_hw_full(), and enter_sleep_state_hw_reduced().
| uacpi_status uacpi_kernel_schedule_work | ( | uacpi_work_type | type, |
| uacpi_work_handler | Handler, | ||
| uacpi_handle | ctx | ||
| ) |
Schedules deferred work for execution. Might be invoked from an interrupt context.
Definition at line 228 of file uacpiosl.c.
Referenced by async_run_gpe_handler(), dispatch_gpe(), and uacpi_notify_all().
| void uacpi_kernel_signal_event | ( | uacpi_handle | Handle | ) |
Signal the event object by incrementing its internal counter by 1.
This function may be used in interrupt contexts.
Definition at line 73 of file uacpiosl.c.
Referenced by handle_event_ctl(), and handle_global_lock().
Sleep for N milliseconds.
Definition at line 47 of file uacpiosl.c.
Referenced by handle_stall_or_sleep().
Spin for N microseconds.
Definition at line 42 of file uacpiosl.c.
Referenced by enter_sleep_state_hw_full(), handle_stall_or_sleep(), set_mode(), and uacpi_reboot().
| uacpi_status uacpi_kernel_uninstall_interrupt_handler | ( | uacpi_interrupt_handler | handler, |
| uacpi_handle | irq_handle | ||
| ) |
Uninstall an interrupt handler. 'irq_handle' is the value returned via 'out_irq_handle' during installation.
Definition at line 221 of file uacpiosl.c.
Referenced by uacpi_deinitialize_events(), and uninstall_gpe_block().
| void uacpi_kernel_unlock_spinlock | ( | uacpi_handle | Handle, |
| uacpi_cpu_flags | Flags | ||
| ) |
Definition at line 105 of file uacpiosl.c.
Referenced by ensure_register_mapped(), handle_global_lock(), set_gpe_state(), uacpi_acquire_global_lock_from_firmware(), and uacpi_write_register_field().
| void uacpi_kernel_unmap | ( | void * | addr, |
| uacpi_size | len | ||
| ) |
Unmap a virtual memory range at 'addr' with a length of 'len' bytes.
NOTE: 'addr' may be misaligned, see the comment above 'uacpi_kernel_map'. Similar steps to uacpi_kernel_map can be taken to retrieve the virtual address originally returned by the VMM for this mapping as well as its true length.
Definition at line 198 of file uacpiosl.c.
Referenced by get_external_table_header(), handle_load(), initialize_from_rsdp(), initialize_from_rxsdt(), memory_region_detach(), table_install_physical_with_origin_unlocked(), table_ref_unlocked(), table_unref_unlocked(), uacpi_deinitialize_tables(), uacpi_map_gas_noalloc(), and verify_and_install_table().
| uacpi_bool uacpi_kernel_wait_for_event | ( | uacpi_handle | Handle, |
| uacpi_u16 | Timeout | ||
| ) |
Try to wait for an event (counter > 0) with a millisecond timeout. A timeout value of 0xFFFF implies infinite wait.
The internal counter is decremented by 1 if wait was successful.
A successful wait is indicated by returning UACPI_TRUE.
Definition at line 66 of file uacpiosl.c.
Referenced by handle_event_ctl(), and uacpi_acquire_global_lock_from_firmware().
| uacpi_status uacpi_kernel_wait_for_work_completion | ( | void | ) |
Waits for two types of work to finish:
Note that the waits must be done in this order specifically.
Definition at line 235 of file uacpiosl.c.
Referenced by gpe_block_mask_safe(), gpe_mask_unmask(), uacpi_install_notify_handler(), uacpi_uninstall_fixed_event_handler(), and uacpi_uninstall_notify_handler().