static char *drm_construct_id_path_tag(drmDevicePtr device)
{
-/* Length of "pci-xxxx_xx_xx_x\0" */
-#define PCI_ID_PATH_TAG_LENGTH 17
char *tag = NULL;
if (device->bustype == DRM_BUS_PCI) {
- tag = calloc(PCI_ID_PATH_TAG_LENGTH, sizeof(char));
- if (tag == NULL)
- return NULL;
+ if (asprintf(&tag, "pci-%04x_%02x_%02x_%1u",
+ device->businfo.pci->domain,
+ device->businfo.pci->bus,
+ device->businfo.pci->dev,
+ device->businfo.pci->func) < 0) {
+ return NULL;
+ }
+ } else if (device->bustype == DRM_BUS_PLATFORM ||
+ device->bustype == DRM_BUS_HOST1X) {
+ char *fullname, *name, *address;
+
+ if (device->bustype == DRM_BUS_PLATFORM)
+ fullname = device->businfo.platform->fullname;
+ else
+ fullname = device->businfo.host1x->fullname;
+
+ name = strrchr(fullname, '/');
+ if (!name)
+ name = strdup(fullname);
+ else
+ name = strdup(name + 1);
+
+ address = strchr(name, '@');
+ if (address) {
+ *address++ = '\0';
+
+ if (asprintf(&tag, "platform-%s_%s", address, name) < 0)
+ tag = NULL;
+ } else {
+ if (asprintf(&tag, "platform-%s", name) < 0)
+ tag = NULL;
+ }
- snprintf(tag, PCI_ID_PATH_TAG_LENGTH, "pci-%04x_%02x_%02x_%1u",
- device->businfo.pci->domain, device->businfo.pci->bus,
- device->businfo.pci->dev, device->businfo.pci->func);
+ free(name);
}
return tag;
}
return 0;
}
-
-#if defined(HAVE_LIBDRM)
-static char *
-drm_get_device_name_for_fd(int fd)
-{
- return drmGetDeviceNameFromFd2(fd);
-}
-#endif
-
char *
loader_get_device_name_for_fd(int fd)
{
char *result = NULL;
#if HAVE_LIBDRM
- if ((result = drm_get_device_name_for_fd(fd)))
- return result;
+ result = drmGetDeviceNameFromFd2(fd);
#endif
+
return result;
}