Lines Matching refs:as
191 struct apm_user *as; in queue_event() local
194 list_for_each_entry(as, &apm_user_list, list) { in queue_event()
195 if (as->reader) in queue_event()
196 queue_add_event(&as->queue, event); in queue_event()
204 struct apm_user *as = fp->private_data; in apm_read() local
211 if (queue_empty(&as->queue) && fp->f_flags & O_NONBLOCK) in apm_read()
214 wait_event_interruptible(apm_waitqueue, !queue_empty(&as->queue)); in apm_read()
216 while ((i >= sizeof(event)) && !queue_empty(&as->queue)) { in apm_read()
217 event = queue_get_event(&as->queue); in apm_read()
224 if (as->suspend_state == SUSPEND_PENDING && in apm_read()
226 as->suspend_state = SUSPEND_READ; in apm_read()
241 struct apm_user *as = fp->private_data; in apm_poll() local
244 return queue_empty(&as->queue) ? 0 : EPOLLIN | EPOLLRDNORM; in apm_poll()
260 struct apm_user *as = filp->private_data; in apm_ioctl() local
263 if (!as->suser || !as->writer) in apm_ioctl()
270 as->suspend_result = -EINTR; in apm_ioctl()
272 switch (as->suspend_state) { in apm_ioctl()
279 as->suspend_state = SUSPEND_ACKED; in apm_ioctl()
297 as->suspend_state != SUSPEND_ACKED)) in apm_ioctl()
301 as->suspend_result = -ETIMEDOUT; in apm_ioctl()
305 as->suspend_state = SUSPEND_WAIT; in apm_ioctl()
313 as->suspend_result = pm_suspend(PM_SUSPEND_MEM); in apm_ioctl()
317 err = as->suspend_result; in apm_ioctl()
318 as->suspend_state = SUSPEND_NONE; in apm_ioctl()
328 struct apm_user *as = filp->private_data; in apm_release() local
333 list_del(&as->list); in apm_release()
341 if (as->suspend_state == SUSPEND_PENDING || in apm_release()
342 as->suspend_state == SUSPEND_READ) in apm_release()
348 kfree(as); in apm_release()
354 struct apm_user *as; in apm_open() local
356 as = kzalloc(sizeof(*as), GFP_KERNEL); in apm_open()
357 if (as) { in apm_open()
365 as->suser = capable(CAP_SYS_ADMIN); in apm_open()
366 as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE; in apm_open()
367 as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ; in apm_open()
370 list_add(&as->list, &apm_user_list); in apm_open()
373 filp->private_data = as; in apm_open()
376 return as ? 0 : -ENOMEM; in apm_open()
512 struct apm_user *as; in apm_suspend_notifier() local
532 list_for_each_entry(as, &apm_user_list, list) { in apm_suspend_notifier()
533 if (as->suspend_state != SUSPEND_WAIT && as->reader && in apm_suspend_notifier()
534 as->writer && as->suser) { in apm_suspend_notifier()
535 as->suspend_state = SUSPEND_PENDING; in apm_suspend_notifier()
537 queue_add_event(&as->queue, apm_event); in apm_suspend_notifier()
569 list_for_each_entry(as, &apm_user_list, list) { in apm_suspend_notifier()
570 if (as->suspend_state == SUSPEND_PENDING || in apm_suspend_notifier()
571 as->suspend_state == SUSPEND_READ) { in apm_suspend_notifier()
572 as->suspend_state = SUSPEND_ACKTO; in apm_suspend_notifier()
602 list_for_each_entry(as, &apm_user_list, list) { in apm_suspend_notifier()
603 if (as->suspend_state == SUSPEND_ACKED) { in apm_suspend_notifier()
610 as->suspend_result = 0; in apm_suspend_notifier()
611 as->suspend_state = SUSPEND_DONE; in apm_suspend_notifier()