acpi_aml_io
if (!(acpi_aml_io.flags & flag) && circ_space(circ))
if (acpi_aml_io.flags & ACPI_AML_BUSY)
return acpi_aml_io.usages ? true : false;
mutex_lock(&acpi_aml_io.lock);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
__acpi_aml_readable(&acpi_aml_io.in_crc, ACPI_AML_IN_KERN);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
__acpi_aml_writable(&acpi_aml_io.out_crc, ACPI_AML_OUT_KERN);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
__acpi_aml_readable(&acpi_aml_io.out_crc, ACPI_AML_OUT_USER);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
__acpi_aml_writable(&acpi_aml_io.in_crc, ACPI_AML_IN_USER);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.flags |= flag;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.flags |= flag;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.flags &= ~flag;
wake_up_interruptible(&acpi_aml_io.wait);
mutex_unlock(&acpi_aml_io.lock);
struct circ_buf *crc = &acpi_aml_io.out_crc;
struct circ_buf *crc = &acpi_aml_io.in_crc;
ret = wait_event_interruptible(acpi_aml_io.wait,
ret = wait_event_interruptible(acpi_aml_io.wait,
mutex_lock(&acpi_aml_io.lock);
if (acpi_aml_io.function) {
acpi_aml_io.usages++;
function = acpi_aml_io.function;
context = acpi_aml_io.context;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.usages--;
acpi_aml_io.thread = NULL;
wake_up(&acpi_aml_io.wait);
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.function = function;
acpi_aml_io.context = context;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.thread = t;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
if (acpi_aml_io.flags & ACPI_AML_CLOSED) {
if (!(acpi_aml_io.flags & ACPI_AML_OPENED)) {
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.flags |= ACPI_AML_OPENED;
acpi_aml_io.out_crc.head = acpi_aml_io.out_crc.tail = 0;
acpi_aml_io.in_crc.head = acpi_aml_io.in_crc.tail = 0;
acpi_aml_io.users++;
mutex_unlock(&acpi_aml_io.lock);
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.users--;
acpi_aml_io.flags |= ACPI_AML_CLOSED;
wake_up_interruptible(&acpi_aml_io.wait);
mutex_unlock(&acpi_aml_io.lock);
wait_event(acpi_aml_io.wait, !acpi_aml_busy());
wait_event(acpi_aml_io.wait, !acpi_aml_used());
mutex_lock(&acpi_aml_io.lock);
acpi_aml_io.flags &= ~ACPI_AML_OPENED;
if (acpi_aml_io.users == 0) {
acpi_aml_io.flags &= ~ACPI_AML_CLOSED;
mutex_unlock(&acpi_aml_io.lock);
struct circ_buf *crc = &acpi_aml_io.out_crc;
ret = wait_event_interruptible(acpi_aml_io.wait,
static struct acpi_aml_io acpi_aml_io;
struct circ_buf *crc = &acpi_aml_io.in_crc;
ret = wait_event_interruptible(acpi_aml_io.wait,
return acpi_aml_io.thread ? true : false;
poll_wait(file, &acpi_aml_io.wait, wait);
mutex_init(&acpi_aml_io.lock);
init_waitqueue_head(&acpi_aml_io.wait);
acpi_aml_io.out_crc.buf = acpi_aml_io.out_buf;
acpi_aml_io.in_crc.buf = acpi_aml_io.in_buf;
if (!(acpi_aml_io.flags & ACPI_AML_OPENED) ||
(acpi_aml_io.flags & ACPI_AML_CLOSED) ||
current != acpi_aml_io.thread)
if (!(acpi_aml_io.flags & flag) && circ_count(circ))