]> git.ipfire.org Git - people/ms/ipfire-3.x.git/blob - pkgs/xorg-x11-drv-intel/patches/uevent.patch
ab040fab9b6867e2a5a012126ff37a6f224655b2
[people/ms/ipfire-3.x.git] / pkgs / xorg-x11-drv-intel / patches / uevent.patch
1 diff -up xf86-video-intel-2.12.0/src/i830_driver.c.uevent xf86-video-intel-2.12.0/src/i830_driver.c
2 --- xf86-video-intel-2.12.0/src/i830_driver.c.uevent 2010-06-24 16:29:49.000000000 -0400
3 +++ xf86-video-intel-2.12.0/src/i830_driver.c 2010-06-25 11:40:01.335975581 -0400
4 @@ -81,6 +81,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
5 #include "i915_drm.h"
6 #include <xf86drmMode.h>
7
8 +#include "libudev.h"
9 +
10 #define BIT(x) (1 << (x))
11 #define MAX(a,b) ((a) > (b) ? (a) : (b))
12 #define NB_OF(x) (sizeof (x) / sizeof (*x))
13 @@ -996,6 +998,80 @@ int i830_crtc_to_pipe(xf86CrtcPtr crtc)
14 return drmmode_get_pipe_from_crtc_id(intel->bufmgr, crtc);
15 }
16
17 +static void
18 +I830HandleUEvents(int fd, void *closure)
19 +{
20 + ScrnInfoPtr scrn = closure;
21 + intel_screen_private *intel = intel_get_screen_private(scrn);
22 + struct udev_device *dev;
23 +
24 + dev = udev_monitor_receive_device(intel->uevent_monitor);
25 + if (!dev)
26 + return;
27 +
28 + /*
29 + * technically we should inspect the event to see that it's a hotplug.
30 + * but we know it's a hotplug, we don't get events for anything else.
31 + * XXX but we should definitely trim by drm node
32 + */
33 +
34 + RRGetInfo(screenInfo.screens[scrn->scrnIndex], TRUE);
35 +
36 + udev_device_unref(dev);
37 +}
38 +
39 +static void
40 +I830UeventInit(ScrnInfoPtr scrn)
41 +{
42 + intel_screen_private *intel = intel_get_screen_private(scrn);
43 + struct udev *u;
44 + struct udev_monitor *mon;
45 +
46 + u = udev_new();
47 + if (!u)
48 + return;
49 +
50 + mon = udev_monitor_new_from_netlink(u, "udev");
51 +
52 + if (!mon) {
53 + udev_unref(u);
54 + return;
55 + }
56 +
57 + if (udev_monitor_filter_add_match_subsystem_devtype(mon,
58 + "drm",
59 + "drm_minor") < 0 ||
60 + udev_monitor_enable_receiving(mon) < 0)
61 + {
62 + udev_monitor_unref(mon);
63 + udev_unref(u);
64 + return;
65 + }
66 +
67 + intel->uevent_handler =
68 + xf86AddGeneralHandler(udev_monitor_get_fd(mon),
69 + I830HandleUEvents,
70 + scrn);
71 +
72 + intel->uevent_monitor = mon;
73 +}
74 +
75 +static void
76 +I830UeventFini(ScrnInfoPtr scrn)
77 +{
78 + intel_screen_private *intel = intel_get_screen_private(scrn);
79 +
80 + if (intel->uevent_handler)
81 + {
82 + struct udev *u = udev_monitor_get_udev(intel->uevent_monitor);
83 +
84 + xf86RemoveGeneralHandler(intel->uevent_handler);
85 +
86 + udev_monitor_unref(intel->uevent_monitor);
87 + udev_unref(u);
88 + }
89 +}
90 +
91 static Bool
92 I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
93 {
94 @@ -1233,6 +1309,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr
95
96 intel->suspended = FALSE;
97
98 + I830UeventInit(scrn);
99 +
100 return uxa_resources_init(screen);
101 }
102
103 @@ -1306,7 +1384,8 @@ static Bool I830CloseScreen(int scrnInde
104 {
105 ScrnInfoPtr scrn = xf86Screens[scrnIndex];
106 intel_screen_private *intel = intel_get_screen_private(scrn);
107 -
108 +
109 + I830UeventFini(scrn);
110 if (scrn->vtSema == TRUE) {
111 I830LeaveVT(scrnIndex, 0);
112 }
113 diff -up xf86-video-intel-2.12.0/src/i830.h.uevent xf86-video-intel-2.12.0/src/i830.h
114 --- xf86-video-intel-2.12.0/src/i830.h.uevent 2010-06-24 16:29:49.000000000 -0400
115 +++ xf86-video-intel-2.12.0/src/i830.h 2010-06-25 11:39:15.665029821 -0400
116 @@ -47,6 +47,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
117 #ifndef _I830_H_
118 #define _I830_H_
119
120 +#include "libudev.h"
121 +
122 #include "xf86_OSproc.h"
123 #include "compiler.h"
124 #include "xf86PciInfo.h"
125 @@ -432,6 +434,9 @@ typedef struct intel_screen_private {
126 */
127 Bool fallback_debug;
128 unsigned debug_flush;
129 +
130 + struct udev_monitor *uevent_monitor;
131 + InputHandlerProc uevent_handler;
132 } intel_screen_private;
133
134 enum {
135 diff -up xf86-video-intel-2.12.0/src/Makefile.am.uevent xf86-video-intel-2.12.0/src/Makefile.am
136 --- xf86-video-intel-2.12.0/src/Makefile.am.uevent 2010-06-24 16:29:37.000000000 -0400
137 +++ xf86-video-intel-2.12.0/src/Makefile.am 2010-06-25 11:39:15.665029821 -0400
138 @@ -32,7 +32,7 @@ AM_CFLAGS = @CWARNFLAGS@ @XORG_CFLAGS@ @
139 intel_drv_la_LTLIBRARIES = intel_drv.la
140 intel_drv_la_LDFLAGS = -module -avoid-version
141 intel_drv_ladir = @moduledir@/drivers
142 -intel_drv_la_LIBADD = -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la
143 +intel_drv_la_LIBADD = -ludev -lm @DRM_LIBS@ -ldrm_intel ../uxa/libuxa.la
144 intel_drv_la_LIBADD += @PCIACCESS_LIBS@
145
146 INTEL_DRI_SRCS = \