/* The DRM device we are looking for */
#define RESOLUTION_VENDOR "0x15ad"
#define RESOLUTION_DEVICE "0x0405"
+#define RESOLUTION_KERNELNAME "vmwgfx"
/* Required DRM version for resolutionKMS */
#define RESOLUTION_DRM_MAJOR 2
struct udev_list_entry *devices, *devListEntry;
struct udev_device *dev;
int fd = -1;
+ int drmFd;
const char *devNode = NULL;
+ /* Force load the kernel module. */
+ drmFd = drmOpen(RESOLUTION_KERNELNAME, NULL);
+ if (drmFd >= 0) {
+ (void) drmDropMaster(drmFd);
+ }
+
udev = udev_new();
- if (!udev)
- return -1;
+ if (!udev) {
+ goto outNoUdev;
+ }
/*
* Udev error return codes that are not caught immediately are
udev_enumerate_unref(enumerate);
udev_unref(udev);
+ if (drmFd >= 0) {
+ drmClose(drmFd);
+ }
+
return fd;
outFound:
outErr:
udev_enumerate_unref(enumerate);
udev_unref(udev);
+ outNoUdev:
+ if (drmFd >= 0) {
+ drmClose(drmFd);
+ }
return -1;
}
};
static struct FuncToResolv drm2Table[] = {
+ LIBDRM_RESOLV(Open),
+ LIBDRM_RESOLV(Close),
LIBDRM_RESOLV(GetVersion),
LIBDRM_RESOLV(FreeVersion),
LIBDRM_RESOLV(DropMaster),
* However this struct is not subject to the license header of this file.
*/
struct Drm2Interface {
+ int (*Open)(const char *, const char *);
+ int (*Close)(int);
drmVersionPtr (*GetVersion)(int fd);
void (*FreeVersion)(drmVersionPtr);
int (*DropMaster)(int fd);
#define udev_list_entry_foreach(_a, _b)\
udevi_list_entry_foreach(udevi, _a, _b)
+#define drmOpen \
+ drmi->Open
+#define drmClose \
+ drmi->Close
#define drmGetVersion \
drmi->GetVersion
#define drmFreeVersion \