Lines Matching refs:as
1173 static int queue_empty(struct apm_user *as) in queue_empty() argument
1175 return as->event_head == as->event_tail; in queue_empty()
1178 static apm_event_t get_queued_event(struct apm_user *as) in get_queued_event() argument
1180 if (++as->event_tail >= APM_MAX_EVENTS) in get_queued_event()
1181 as->event_tail = 0; in get_queued_event()
1182 return as->events[as->event_tail]; in get_queued_event()
1187 struct apm_user *as; in queue_event() local
1192 for (as = user_list; as != NULL; as = as->next) { in queue_event()
1193 if ((as == sender) || (!as->reader)) in queue_event()
1195 if (++as->event_head >= APM_MAX_EVENTS) in queue_event()
1196 as->event_head = 0; in queue_event()
1198 if (as->event_head == as->event_tail) { in queue_event()
1203 if (++as->event_tail >= APM_MAX_EVENTS) in queue_event()
1204 as->event_tail = 0; in queue_event()
1206 as->events[as->event_head] = event; in queue_event()
1207 if (!as->suser || !as->writer) in queue_event()
1212 as->suspends_pending++; in queue_event()
1218 as->standbys_pending++; in queue_event()
1248 struct apm_user *as; in suspend() local
1280 for (as = user_list; as != NULL; as = as->next) { in suspend()
1281 as->suspend_wait = 0; in suspend()
1282 as->suspend_result = err; in suspend()
1462 static int check_apm_user(struct apm_user *as, const char *func) in check_apm_user() argument
1464 if (as == NULL || as->magic != APM_BIOS_MAGIC) { in check_apm_user()
1473 struct apm_user *as; in do_read() local
1477 as = fp->private_data; in do_read()
1478 if (check_apm_user(as, "read")) in do_read()
1482 if ((queue_empty(as)) && (fp->f_flags & O_NONBLOCK)) in do_read()
1484 wait_event_interruptible(apm_waitqueue, !queue_empty(as)); in do_read()
1486 while ((i >= sizeof(event)) && !queue_empty(as)) { in do_read()
1487 event = get_queued_event(as); in do_read()
1496 as->suspends_read++; in do_read()
1501 as->standbys_read++; in do_read()
1516 struct apm_user *as; in do_poll() local
1518 as = fp->private_data; in do_poll()
1519 if (check_apm_user(as, "poll")) in do_poll()
1522 if (!queue_empty(as)) in do_poll()
1529 struct apm_user *as; in do_ioctl() local
1532 as = filp->private_data; in do_ioctl()
1533 if (check_apm_user(as, "ioctl")) in do_ioctl()
1535 if (!as->suser || !as->writer) in do_ioctl()
1540 if (as->standbys_read > 0) { in do_ioctl()
1541 as->standbys_read--; in do_ioctl()
1542 as->standbys_pending--; in do_ioctl()
1545 queue_event(APM_USER_STANDBY, as); in do_ioctl()
1552 if (as->suspends_read > 0) { in do_ioctl()
1553 as->suspends_read--; in do_ioctl()
1554 as->suspends_pending--; in do_ioctl()
1557 queue_event(APM_USER_SUSPEND, as); in do_ioctl()
1562 as->suspend_wait = 1; in do_ioctl()
1565 as->suspend_wait == 0); in do_ioctl()
1566 ret = as->suspend_result; in do_ioctl()
1577 struct apm_user *as; in do_release() local
1579 as = filp->private_data; in do_release()
1580 if (check_apm_user(as, "release")) in do_release()
1583 if (as->standbys_pending > 0) { in do_release()
1584 standbys_pending -= as->standbys_pending; in do_release()
1588 if (as->suspends_pending > 0) { in do_release()
1589 suspends_pending -= as->suspends_pending; in do_release()
1594 if (user_list == as) in do_release()
1595 user_list = as->next; in do_release()
1600 (as1 != NULL) && (as1->next != as); in do_release()
1606 as1->next = as->next; in do_release()
1609 kfree(as); in do_release()
1615 struct apm_user *as; in do_open() local
1617 as = kmalloc(sizeof(*as), GFP_KERNEL); in do_open()
1618 if (as == NULL) in do_open()
1621 as->magic = APM_BIOS_MAGIC; in do_open()
1622 as->event_tail = as->event_head = 0; in do_open()
1623 as->suspends_pending = as->standbys_pending = 0; in do_open()
1624 as->suspends_read = as->standbys_read = 0; in do_open()
1632 as->suser = capable(CAP_SYS_ADMIN); in do_open()
1633 as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE; in do_open()
1634 as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ; in do_open()
1636 as->next = user_list; in do_open()
1637 user_list = as; in do_open()
1639 filp->private_data = as; in do_open()