From 894b517dae72d2123f54fe427e837eba7bbc9b14 Mon Sep 17 00:00:00 2001 From: Sushrut Shree Trivedi Date: Tue, 4 Feb 2025 12:11:51 +0530 Subject: kernel-device, generic: add subsystem device ID support Add subsystem device ID support, that can be used in pci devices instead of vendor/device ID customization. Signed-off-by: Sushrut Shree Trivedi --- src/kerneldevice/mm-kernel-device-udev.c | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/kerneldevice/mm-kernel-device-udev.c') diff --git a/src/kerneldevice/mm-kernel-device-udev.c b/src/kerneldevice/mm-kernel-device-udev.c index 09b65db4..7fede022 100644 --- a/src/kerneldevice/mm-kernel-device-udev.c +++ b/src/kerneldevice/mm-kernel-device-udev.c @@ -49,6 +49,7 @@ struct _MMKernelDeviceUdevPrivate { guint16 vendor; guint16 product; guint16 subsystem_vendor; + guint16 subsystem_device; guint16 revision; gchar *driver; @@ -188,6 +189,7 @@ preload_contents_pci (MMKernelDeviceUdev *self) self->priv->vendor = udev_device_get_sysfs_attr_as_hex (iter, "vendor"); self->priv->product = udev_device_get_sysfs_attr_as_hex (iter, "device"); self->priv->subsystem_vendor = udev_device_get_sysfs_attr_as_hex (iter, "subsystem_vendor"); + self->priv->subsystem_device = udev_device_get_sysfs_attr_as_hex (iter, "subsystem_device"); self->priv->revision = udev_device_get_sysfs_attr_as_hex (iter, "revision"); self->priv->physdev = g_object_ref (iter); /* stop traversing as soon as the physical device is found */ @@ -300,6 +302,8 @@ preload_contents (MMKernelDeviceUdev *self) mm_obj_dbg (self, " product: %04x", self->priv->product); if (self->priv->subsystem_vendor) mm_obj_dbg (self, " subsystem vendor: %04x", self->priv->subsystem_vendor); + if (self->priv->subsystem_device) + mm_obj_dbg (self, " subsystem device: %04x", self->priv->subsystem_device); if (self->priv->revision) mm_obj_dbg (self, " revision: %04x", self->priv->revision); } @@ -417,6 +421,12 @@ kernel_device_get_physdev_subsystem_vid (MMKernelDevice *self) return MM_KERNEL_DEVICE_UDEV (self)->priv->subsystem_vendor; } +static guint16 +kernel_device_get_physdev_subsystem_pid (MMKernelDevice *self) +{ + return MM_KERNEL_DEVICE_UDEV (self)->priv->subsystem_device; +} + static guint16 kernel_device_get_physdev_revision (MMKernelDevice *self) { @@ -816,6 +826,7 @@ mm_kernel_device_udev_class_init (MMKernelDeviceUdevClass *klass) kernel_device_class->get_physdev_vid = kernel_device_get_physdev_vid; kernel_device_class->get_physdev_pid = kernel_device_get_physdev_pid; kernel_device_class->get_physdev_subsystem_vid = kernel_device_get_physdev_subsystem_vid; + kernel_device_class->get_physdev_subsystem_pid = kernel_device_get_physdev_subsystem_pid; kernel_device_class->get_physdev_revision = kernel_device_get_physdev_revision; kernel_device_class->get_physdev_sysfs_path = kernel_device_get_physdev_sysfs_path; kernel_device_class->get_physdev_subsystem = kernel_device_get_physdev_subsystem; -- cgit v1.2.3-70-g09d2