hw/kdrive: Use passed-in fd for kdrive/linux APM monitoring [v2]

This is a cleanup, proposed by Adam Jackson, but wasn't merged with
the original NotifyFD changes.

Signed-off-by: Keith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Keith Packard 2015-08-27 11:47:26 -07:00 committed by Adam Jackson
parent 55c2e1a3aa
commit 6bf7b49f67

View File

@ -173,41 +173,39 @@ static Bool LinuxApmRunning;
static void static void
LinuxApmNotify(int fd, int mask, void *blockData) LinuxApmNotify(int fd, int mask, void *blockData)
{ {
if (LinuxApmFd >= 0) { apm_event_t event;
apm_event_t event; Bool running = LinuxApmRunning;
Bool running = LinuxApmRunning; int cmd = APM_IOC_SUSPEND;
int cmd = APM_IOC_SUSPEND;
while (read(LinuxApmFd, &event, sizeof(event)) == sizeof(event)) { while (read(fd, &event, sizeof(event)) == sizeof(event)) {
switch (event) { switch (event) {
case APM_SYS_STANDBY: case APM_SYS_STANDBY:
case APM_USER_STANDBY: case APM_USER_STANDBY:
running = FALSE; running = FALSE;
cmd = APM_IOC_STANDBY; cmd = APM_IOC_STANDBY;
break; break;
case APM_SYS_SUSPEND: case APM_SYS_SUSPEND:
case APM_USER_SUSPEND: case APM_USER_SUSPEND:
case APM_CRITICAL_SUSPEND: case APM_CRITICAL_SUSPEND:
running = FALSE; running = FALSE;
cmd = APM_IOC_SUSPEND; cmd = APM_IOC_SUSPEND;
break; break;
case APM_NORMAL_RESUME: case APM_NORMAL_RESUME:
case APM_CRITICAL_RESUME: case APM_CRITICAL_RESUME:
case APM_STANDBY_RESUME: case APM_STANDBY_RESUME:
running = TRUE; running = TRUE;
break; break;
}
}
if (running && !LinuxApmRunning) {
KdResume();
LinuxApmRunning = TRUE;
}
else if (!running && LinuxApmRunning) {
KdSuspend();
LinuxApmRunning = FALSE;
ioctl(LinuxApmFd, cmd, 0);
} }
} }
if (running && !LinuxApmRunning) {
KdResume();
LinuxApmRunning = TRUE;
}
else if (!running && LinuxApmRunning) {
KdSuspend();
LinuxApmRunning = FALSE;
ioctl(fd, cmd, 0);
}
} }
#ifdef FNONBLOCK #ifdef FNONBLOCK