9#ifndef UACPI_BAREBONES_MODE
11#ifndef UACPI_REDUCED_HARDWARE
13#define GLOBAL_LOCK_PENDING (1 << 0)
15#define GLOBAL_LOCK_OWNED_BIT 1
16#define GLOBAL_LOCK_OWNED (1 << GLOBAL_LOCK_OWNED_BIT)
18#define GLOBAL_LOCK_MASK 0b11u
30 new_value =
value & ~GLOBAL_LOCK_MASK;
49 new_value =
value & ~GLOBAL_LOCK_MASK;
68 "trying to acquire the global lock from firmware... (attempt %u)\n",
83 "global lock is owned by firmware, waiting for a release "
96 uacpi_error(
"unable to acquire global lock after %u attempts\n", spins);
100 uacpi_trace(
"global lock successfully acquired after %u attempt%s\n",
101 spins, spins > 1 ?
"s" :
"");
110 uacpi_trace(
"releasing the global lock to firmware...\n");
112 uacpi_trace(
"notifying firmware of the global lock release since the "
113 "pending bit was set\n");
141 "unexpected status %08X (%s) while acquiring %p (timeout=%04X)\n",
210 "failing an attempt to acquire mutex @%p, too many recursive "
243 if (
mutex->depth-- > 1)
271 "de-initializing active recursive lock %p with depth=%zu\n",
309 if (
lock->depth-- > 1)
329 lock->num_readers = 0;
336 uacpi_warn(
"de-initializing rw_lock %p with %zu active readers\n",
338 lock->num_readers = 0;
361 if (
lock->num_readers++ == 0) {
364 lock->num_readers = 0;
379 if (
lock->num_readers-- == 1)
#define UACPI_ATOMIC_STORE_THREAD_ID(ptr, value)
unsigned long uacpi_cpu_flags
#define UACPI_THREAD_ID_NONE
#define UACPI_ATOMIC_LOAD_THREAD_ID(ptr)
uacpi_status uacpi_acquire_native_mutex_with_timeout(uacpi_handle mtx, uacpi_u16 timeout)
static uacpi_status uacpi_release_native_mutex(uacpi_handle mtx)
static uacpi_status uacpi_acquire_native_mutex(uacpi_handle mtx)
#define UACPI_ENSURE_INIT_LEVEL_AT_LEAST(lvl)
struct uacpi_runtime_context g_uacpi_rt_ctx
uacpi_status uacpi_namespace_write_unlock(void)
uacpi_status uacpi_namespace_write_lock(void)
@ UACPI_REGISTER_FIELD_GBL_RLS
uacpi_status uacpi_write_register_field(uacpi_register_field, uacpi_u64)
#define uacpi_likely_success(expr)
#define uacpi_unlikely_error(expr)
@ UACPI_STATUS_INVALID_ARGUMENT
@ UACPI_STATUS_OUT_OF_MEMORY
@ UACPI_STATUS_HARDWARE_TIMEOUT
const uacpi_char * uacpi_status_to_string(uacpi_status)
@ UACPI_INIT_LEVEL_SUBSYSTEM_INITIALIZED
uacpi_status uacpi_release_aml_mutex(uacpi_mutex *mutex)
uacpi_status uacpi_rw_lock_deinit(struct uacpi_rw_lock *lock)
uacpi_status uacpi_release_global_lock(uacpi_u32 seq)
uacpi_status uacpi_recursive_lock_deinit(struct uacpi_recursive_lock *lock)
uacpi_bool uacpi_this_thread_owns_aml_mutex(uacpi_mutex *mutex)
uacpi_status uacpi_rw_lock_init(struct uacpi_rw_lock *lock)
uacpi_status uacpi_recursive_lock_init(struct uacpi_recursive_lock *lock)
#define GLOBAL_LOCK_PENDING
static uacpi_bool try_acquire_global_lock_from_firmware(uacpi_u32 *lock)
#define GLOBAL_LOCK_OWNED_BIT
uacpi_status uacpi_rw_unlock_read(struct uacpi_rw_lock *lock)
uacpi_status uacpi_rw_unlock_write(struct uacpi_rw_lock *lock)
uacpi_status uacpi_acquire_global_lock(uacpi_u16 timeout, uacpi_u32 *out_seq)
uacpi_status uacpi_acquire_aml_mutex(uacpi_mutex *mutex, uacpi_u16 timeout)
uacpi_status uacpi_rw_lock_read(struct uacpi_rw_lock *lock)
static uacpi_bool do_release_global_lock_to_firmware(uacpi_u32 *lock)
static uacpi_status uacpi_acquire_global_lock_from_firmware(void)
static void uacpi_release_global_lock_to_firmware(void)
uacpi_status uacpi_recursive_lock_acquire(struct uacpi_recursive_lock *lock)
uacpi_status uacpi_rw_lock_write(struct uacpi_rw_lock *lock)
uacpi_status uacpi_recursive_lock_release(struct uacpi_recursive_lock *lock)
#define GLOBAL_LOCK_OWNED
uacpi_bool uacpi_kernel_wait_for_event(uacpi_handle, uacpi_u16)
uacpi_handle uacpi_kernel_create_mutex(void)
void uacpi_kernel_free_mutex(uacpi_handle)
uacpi_thread_id uacpi_kernel_get_thread_id(void)
void uacpi_kernel_release_mutex(uacpi_handle)
uacpi_status uacpi_kernel_acquire_mutex(uacpi_handle, uacpi_u16)
uacpi_cpu_flags uacpi_kernel_lock_spinlock(uacpi_handle)
void uacpi_kernel_unlock_spinlock(uacpi_handle, uacpi_cpu_flags)
#define UACPI_STUB_IF_REDUCED_HARDWARE(fn)
#define UACPI_ALWAYS_OK_FOR_REDUCED_HARDWARE(fn)
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
#define success(from, fromstr, to, tostr)