10#ifndef UACPI_BAREBONES_MODE
12#ifndef UACPI_REDUCED_HARDWARE
14#define GLOBAL_LOCK_PENDING (1 << 0)
16#define GLOBAL_LOCK_OWNED_BIT 1
17#define GLOBAL_LOCK_OWNED (1 << GLOBAL_LOCK_OWNED_BIT)
19#define GLOBAL_LOCK_MASK 3u
31 new_value =
value & ~GLOBAL_LOCK_MASK;
50 new_value =
value & ~GLOBAL_LOCK_MASK;
69 "trying to acquire the global lock from firmware... (attempt %u)",
84 "global lock is owned by firmware, waiting for a release "
97 uacpi_error(
"unable to acquire global lock after %u attempts", spins);
101 uacpi_trace(
"global lock successfully acquired after %u attempt%s",
102 spins, spins > 1 ?
"s" :
"");
111 uacpi_trace(
"releasing the global lock to firmware...");
113 uacpi_trace(
"notifying firmware of the global lock release since the "
114 "pending bit was set");
142 "unexpected status %08X (%s) while acquiring %p (timeout=%04X)",
211 "failing an attempt to acquire mutex @%p, too many recursive "
244 if (
mutex->depth-- > 1)
272 "de-initializing active recursive lock %p with depth=%zu",
310 if (
lock->depth-- > 1)
330 lock->num_readers = 0;
337 uacpi_warn(
"de-initializing rw_lock %p with %zu active readers",
339 lock->num_readers = 0;
362 if (
lock->num_readers++ == 0) {
365 lock->num_readers = 0;
380 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
#define uacpi_mmio_read32
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)