View | Details | Raw Unified | Return to bug 148384
Collapse All | Expand All

(-)lnx_apm.c.org (+7 lines)
Lines 31-36 Link Here
31
31
32
static PMClose lnxAPMOpen(void);
32
static PMClose lnxAPMOpen(void);
33
extern PMClose lnxACPIOpen(void);
33
extern PMClose lnxACPIOpen(void);
34
extern PMClose lnxACPIPoll(void);
34
static void lnxCloseAPM(void);
35
static void lnxCloseAPM(void);
35
static pointer APMihPtr = NULL;
36
static pointer APMihPtr = NULL;
36
37
Lines 139-144 Link Here
139
	if (!ret)
140
	if (!ret)
140
		ret = lnxAPMOpen();
141
		ret = lnxAPMOpen();
141
142
143
	/* if we can neither open ACPI nor APM poll for an ACPI service to
144
	   become available */
145
146
	if (!ret && !xf86acpiDisableFlag)
147
	    ret = lnxACPIPoll();
148
142
	return ret;
149
	return ret;
143
}
150
}
144
151
(-)lnx_acpi.c.org (-13 / +56 lines)
Lines 11-17 Link Here
11
#include <unistd.h>
11
#include <unistd.h>
12
#include <fcntl.h>
12
#include <fcntl.h>
13
#include <errno.h>
13
#include <errno.h>
14
 
14
#define DEBUG 1 
15
#define ACPI_SOCKET  "/var/run/acpid.socket"
15
#define ACPI_SOCKET  "/var/run/acpid.socket"
16
#define ACPI_EVENTS  "/proc/acpi/event"
16
#define ACPI_EVENTS  "/proc/acpi/event"
17
17
Lines 30-41 Link Here
30
#define ACPI_VIDEO_HEAD_INVALID		(~0u - 1)
30
#define ACPI_VIDEO_HEAD_INVALID		(~0u - 1)
31
#define ACPI_VIDEO_HEAD_END		(~0u)
31
#define ACPI_VIDEO_HEAD_END		(~0u)
32
32
33
static PMClose doLnxACPIOpen(void);
33
static void lnxCloseACPI(void);
34
static void lnxCloseACPI(void);
34
static pointer ACPIihPtr = NULL;
35
static pointer ACPIihPtr = NULL;
36
static OsTimerPtr acpiTimer = NULL;
35
PMClose lnxACPIOpen(void);
37
PMClose lnxACPIOpen(void);
36
38
37
#define LINE_LENGTH 80
39
#define LINE_LENGTH 80
38
40
41
static CARD32
42
lnxACPICheckTimer(OsTimerPtr timer, CARD32 now, pointer arg)
43
{
44
#if DEBUG
45
	ErrorF("ACPI: trying to reopen\n");
46
#endif
47
    if (doLnxACPIOpen()) {
48
#if DEBUG
49
	ErrorF("ACPI: successfully reopened\n");
50
#endif
51
	acpiTimer = NULL;
52
	return 0;
53
    }
54
    return 5000;
55
}
56
39
static int
57
static int
40
lnxACPIGetEventFromOs(int fd, pmEvent *events, int num)
58
lnxACPIGetEventFromOs(int fd, pmEvent *events, int num)
41
{
59
{
Lines 45-51 Link Here
45
    memset(ev, 0, LINE_LENGTH);
63
    memset(ev, 0, LINE_LENGTH);
46
64
47
    n = read( fd, ev, LINE_LENGTH );
65
    n = read( fd, ev, LINE_LENGTH );
48
66
    if (n == 0) {
67
	lnxCloseACPI();
68
	TimerSet(NULL, 0, 5000, lnxACPICheckTimer, NULL);
69
	return 0;
70
    }
49
    /* Check that we have a video event */
71
    /* Check that we have a video event */
50
    if (strstr(ev, "video") == ev) {
72
    if (strstr(ev, "video") == ev) {
51
	char *video = NULL;
73
	char *video = NULL;
Lines 108-123 Link Here
108
    }
130
    }
109
}
131
}
110
132
111
PMClose
133
static PMClose
112
lnxACPIOpen(void)
134
doLnxACPIOpen(void)
113
{
135
{
114
    int fd;    
136
    int fd;    
115
    struct sockaddr_un addr;
137
    struct sockaddr_un addr;
116
    int r = -1;
138
    int r = -1;
117
139
118
#ifdef DEBUG
119
    ErrorF("ACPI: OSPMOpen called\n");
120
#endif
121
    if (ACPIihPtr || !xf86Info.pmFlag)
140
    if (ACPIihPtr || !xf86Info.pmFlag)
122
	return NULL;
141
	return NULL;
123
   
142
   
Lines 134-154 Link Here
134
	    fd = -1;
153
	    fd = -1;
135
	}
154
	}
136
    }
155
    }
137
156
    if (fd == -1)
138
    if (fd == -1) {
139
	xf86MsgVerb(X_WARNING,3,"Open ACPI failed (%s) (%s)\n", ACPI_SOCKET,
140
		    strerror(errno));
141
	return NULL;
157
	return NULL;
142
    }
143
158
144
    xf86PMGetEventFromOs = lnxACPIGetEventFromOs;
159
    xf86PMGetEventFromOs = lnxACPIGetEventFromOs;
145
    xf86PMConfirmEventToOs = lnxACPIConfirmEventToOs;
160
    xf86PMConfirmEventToOs = lnxACPIConfirmEventToOs;
146
    ACPIihPtr = xf86AddInputHandler(fd,xf86HandlePMEvents,NULL);
161
    ACPIihPtr = xf86AddInputHandler(fd,xf86HandlePMEvents,NULL);
147
    xf86MsgVerb(X_INFO,3,"Open ACPI successful (%s)\n", (r != -1) ? ACPI_SOCKET : ACPI_EVENTS);
148
162
163
    xf86MsgVerb(X_INFO,3,"Open ACPI successful (%s)\n", ACPI_SOCKET);
164
    
165
    return lnxCloseACPI;
166
}
167
168
PMClose 
169
lnxACPIPoll(void)
170
{
171
    TimerSet(NULL, 0, 5000, lnxACPICheckTimer, NULL);
149
    return lnxCloseACPI;
172
    return lnxCloseACPI;
150
}
173
}
151
174
175
PMClose
176
lnxACPIOpen(void)
177
{
178
    PMClose ret;
179
#ifdef DEBUG
180
    ErrorF("ACPI: OSPMOpen called\n");
181
#endif
182
    if (!(ret = doLnxACPIOpen()))
183
	xf86MsgVerb(X_WARNING,3,"Open ACPI failed (%s) (%s)\n", ACPI_SOCKET,
184
		    strerror(errno));
185
186
    return ret;
187
}
188
152
static void
189
static void
153
lnxCloseACPI(void)
190
lnxCloseACPI(void)
154
{
191
{
Lines 162-167 Link Here
162
	shutdown(fd, 2);
199
	shutdown(fd, 2);
163
	close(fd);
200
	close(fd);
164
	ACPIihPtr = NULL;
201
	ACPIihPtr = NULL;
202
	xf86PMGetEventFromOs = NULL;
203
	xf86PMConfirmEventToOs = NULL;
204
	if (acpiTimer) {
205
	    TimerCancel(acpiTimer);
206
	    acpiTimer = NULL;
207
	}
165
    }
208
    }
166
}
209
}
167
210

Return to bug 148384