- struct udev_device *device;
- struct stat buf;
- UDEV_SYMBOL(struct udev_device *, udev_device_new_from_devnum,
- (struct udev *udev, char type, dev_t devnum));
-
- if (fstat(fd, &buf) < 0) {
- log_(_LOADER_WARNING, "MESA-LOADER: failed to stat fd %d\n", fd);
- return NULL;
- }
+ char *tag = NULL;
+
+ if (device->bustype == DRM_BUS_PCI) {
+ 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;
+ }