summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/ecore_drm/ecore_drm_device.c149
1 files changed, 51 insertions, 98 deletions
diff --git a/src/lib/ecore_drm/ecore_drm_device.c b/src/lib/ecore_drm/ecore_drm_device.c
index c571b9333b..4b7c4e3017 100644
--- a/src/lib/ecore_drm/ecore_drm_device.c
+++ b/src/lib/ecore_drm/ecore_drm_device.c
@@ -151,131 +151,84 @@ EAPI Ecore_Drm_Device *
ecore_drm_device_find(const char *name, const char *seat)
{
Ecore_Drm_Device *dev = NULL;
- struct udev_enumerate *uenum;
- struct udev_list_entry *uentry;
- struct udev_device *udevice, *tmpdevice = NULL, *pcidevice;
- const char *path = NULL, *devseat = NULL;
+ Eina_Bool found = EINA_FALSE;
+ Eina_List *devs, *l;
+ const char *device, *tmpdevice;
- /* check for existing udev reference */
- if (!udev) return NULL;
+ /* try to get a list of drm devics */
+ if (!(devs = eeze_udev_find_by_type(EEZE_UDEV_TYPE_DRM, name)))
+ return NULL;
- /* setup udev enumerator */
- uenum = udev_enumerate_new(udev);
- udev_enumerate_add_match_subsystem(uenum, "drm");
- udev_enumerate_add_match_subsystem(uenum, "card[0-9]*");
+ DBG("Find Drm Device: %s", name);
- /* ask udev for list of drm devices */
- udev_enumerate_scan_devices(uenum);
-
- /* loop list of returned devices */
- udev_list_entry_foreach(uentry, udev_enumerate_get_list_entry(uenum))
+ EINA_LIST_FOREACH(devs, l, device)
{
- /* get device path */
- path = udev_list_entry_get_name(uentry);
+ const char *devpath;
+ const char *devseat;
+ const char *devparent;
- /* get udev device */
- if (!(udevice = udev_device_new_from_syspath(udev, path)))
+ if (!(devpath = eeze_udev_syspath_get_devpath(device)))
continue;
- /* if we are looking for a certain device, then compare names */
- if (name)
- {
- if (strcmp(name, udev_device_get_devnode(udevice)))
- {
- udev_device_unref(udevice);
- continue;
- }
- }
+ DBG("Found Drm Device");
+ DBG("\tDevice: %s", device);
+ DBG("\tDevpath: %s", devpath);
- /* get this devices' seat */
- devseat = udev_device_get_property_value(udevice, "ID_SEAT");
- if (!devseat) devseat = "seat0";
+ if ((name) && (strcmp(name, devpath))) goto cont;
- /* if we are looking for a device on a certain seat, compare it */
- if (seat)
- {
- if (strcmp(seat, devseat))
- {
- udev_device_unref(udevice);
- continue;
- }
- }
- else
- {
- /* no seat name passed to use. check default */
- if (strcmp(devseat, "seat0"))
- {
- udev_device_unref(udevice);
- continue;
- }
- }
+ if (!(devseat = eeze_udev_syspath_get_property(device, "ID_SEAT")))
+ devseat = eina_stringshare_add("seat0");
- /* try to find the boot_vga attribute */
- if ((pcidevice =
- udev_device_get_parent_with_subsystem_devtype(udevice, "pci", NULL)))
+ if ((seat) && (strcmp(seat, devseat)))
+ goto cont;
+ else if (strcmp(devseat, "seat0"))
+ goto cont;
+
+ devparent = eeze_udev_syspath_get_parent_filtered(device, "pci", NULL);
+ if (devparent)
{
const char *id;
- if ((id = udev_device_get_sysattr_value(pcidevice, "boot_vga")))
+ if ((id = eeze_udev_syspath_get_sysattr(devparent, "boot_vga")))
{
- if (!strcmp(id, "1"))
- {
- if (tmpdevice) udev_device_unref(tmpdevice);
- tmpdevice = udevice;
- break;
- }
+ if (!strcmp(id, "1")) found = EINA_TRUE;
+ eina_stringshare_del(id);
}
+
+ eina_stringshare_del(devparent);
}
- if (!tmpdevice)
- tmpdevice = udevice;
- else
- udev_device_unref(udevice);
+cont:
+ eina_stringshare_del(devpath);
+ if (found)
+ {
+ tmpdevice = eina_stringshare_add(device);
+ break;
+ }
}
- /* destroy the enumerator */
- udev_enumerate_unref(uenum);
+ EINA_LIST_FREE(devs, device)
+ eina_stringshare_del(device);
- if (tmpdevice)
- {
- DBG("Found Drm Device");
- DBG("\tFilename: %s", udev_device_get_devnode(tmpdevice));
- DBG("\tDriver: %s", udev_device_get_driver(tmpdevice));
- DBG("\tDevpath: %s", udev_device_get_devpath(tmpdevice));
- DBG("\tSyspath: %s", udev_device_get_syspath(tmpdevice));
- DBG("\tSysname: %s", udev_device_get_sysname(tmpdevice));
-
- /* try to allocate space for return device structure */
- if ((dev = calloc(1, sizeof(Ecore_Drm_Device))))
- {
- const char *id, *seat_id;
+ if (!found) return NULL;
- /* set device name */
- dev->drm.name =
- eina_stringshare_add(udev_device_get_devnode(tmpdevice));
-
- /* set device path */
- dev->drm.path =
- eina_stringshare_add(udev_device_get_syspath(tmpdevice));
+ if ((dev = calloc(1, sizeof(Ecore_Drm_Device))))
+ {
+ dev->drm.name = eeze_udev_syspath_get_devpath(tmpdevice);
+ dev->drm.path = eina_stringshare_add(tmpdevice);
- /* store id for this device */
- if ((id = udev_device_get_sysnum(tmpdevice)))
- dev->id = atoi(id);
+ dev->id = eeze_udev_syspath_get_sysnum(tmpdevice);
- /* set dev seat_id */
- seat_id = udev_device_get_property_value(tmpdevice, "ID_SEAT");
- if (!seat_id) seat_id = "seat0";
+ dev->seat = eeze_udev_syspath_get_property(tmpdevice, "ID_SEAT");
+ if (!dev->seat) dev->seat = eina_stringshare_add("seat0");
- dev->seat = eina_stringshare_add(seat_id);
+ dev->format = 0;
+ dev->use_hw_accel = EINA_FALSE;
- /* dev->format = GBM_FORMAT_XRGB8888; */
- dev->format = 0;
- dev->use_hw_accel = EINA_FALSE;
- }
+ DBG("Using Drm Device: %s", dev->drm.name);
}
- /* release device reference */
- udev_device_unref(tmpdevice);
+ eina_stringshare_del(tmpdevice);
return dev;
}