]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - glsdk/libdrm.git/blobdiff - libkms/api.c
libkms: Pick driver backend via pci id that we get from udev
[glsdk/libdrm.git] / libkms / api.c
index 478fa38c40fd6c2fcb9a89464681db4b5ae0f0f0..6cec4b96ac32ad0861b59a6aa78aa577922d3d4d 100644 (file)
 #include <string.h>
 #include "internal.h"
 
-int kms_create(int fd, struct kms_driver **out)
+struct create_record
 {
+       unsigned vendor;
+       unsigned chip;
+       int (*func)(int fd, struct kms_driver **out);
+};
+
+static struct create_record table[] = {
 #ifdef HAVE_VMWGFX
-       return vmwgfx_create(fd, out);
-#else
-       return -ENOSYS;
+       { 0x15ad, 0x0405, vmwgfx_create }, /* VMware vGPU */
 #endif
+       { 0, 0, NULL },
+};
+
+int kms_create(int fd, struct kms_driver **out)
+{
+       unsigned vendor_id, chip_id;
+       int ret, i;
+
+       ret = linux_get_pciid_from_fd(fd, &vendor_id, &chip_id);
+       if (ret)
+               return ret;
+
+       for (i = 0; table[i].func; i++)
+               if (table[i].vendor == vendor_id && table[i].chip == chip_id)
+                       return table[i].func(fd, out);
+
+       return -ENOSYS;
 }
 
 int kms_get_prop(struct kms_driver *kms, unsigned key, unsigned *out)