diff options
author | Daniele Palmas <dnlplm@gmail.com> | 2022-05-04 11:49:03 +0200 |
---|---|---|
committer | Daniele Palmas <dnlplm@gmail.com> | 2022-05-24 09:22:06 +0200 |
commit | 654c5f5014f90df7eb239b83ac88a1065e169731 (patch) | |
tree | e3b4ae95e450acdcd5d62fd93d12ad734bd253c9 /src | |
parent | ff5840c3c7cd6b9de8881d4c081dfa9bc5e43b11 (diff) |
base-modem: add subsystem vendor ID property
Subsystem vendor ID can be used for identifying PCI modems,
so expose the property.
Diffstat (limited to 'src')
-rw-r--r-- | src/mm-base-modem.c | 24 | ||||
-rw-r--r-- | src/mm-base-modem.h | 28 | ||||
-rw-r--r-- | src/mm-device.c | 14 | ||||
-rw-r--r-- | src/mm-device.h | 1 | ||||
-rw-r--r-- | src/mm-plugin.c | 1 | ||||
-rw-r--r-- | src/mm-plugin.h | 1 |
6 files changed, 56 insertions, 13 deletions
diff --git a/src/mm-base-modem.c b/src/mm-base-modem.c index 13fe14dd..9dc26601 100644 --- a/src/mm-base-modem.c +++ b/src/mm-base-modem.c @@ -57,6 +57,7 @@ enum { PROP_PLUGIN, PROP_VENDOR_ID, PROP_PRODUCT_ID, + PROP_SUBSYSTEM_VENDOR_ID, PROP_CONNECTION, PROP_REPROBE, PROP_DATA_NET_SUPPORTED, @@ -89,6 +90,7 @@ struct _MMBaseModemPrivate { guint vendor_id; guint product_id; + guint subsystem_vendor_id; gboolean hotplugged; gboolean valid; @@ -1671,6 +1673,14 @@ mm_base_modem_get_product_id (MMBaseModem *self) return self->priv->product_id; } +guint +mm_base_modem_get_subsystem_vendor_id (MMBaseModem *self) +{ + g_return_val_if_fail (MM_IS_BASE_MODEM (self), 0); + + return self->priv->subsystem_vendor_id; +} + /*****************************************************************************/ static gboolean @@ -1832,6 +1842,9 @@ set_property (GObject *object, case PROP_PRODUCT_ID: self->priv->product_id = g_value_get_uint (value); break; + case PROP_SUBSYSTEM_VENDOR_ID: + self->priv->subsystem_vendor_id = g_value_get_uint (value); + break; case PROP_CONNECTION: g_clear_object (&self->priv->connection); self->priv->connection = g_value_dup_object (value); @@ -1881,6 +1894,9 @@ get_property (GObject *object, case PROP_PRODUCT_ID: g_value_set_uint (value, self->priv->product_id); break; + case PROP_SUBSYSTEM_VENDOR_ID: + g_value_set_uint (value, self->priv->subsystem_vendor_id); + break; case PROP_CONNECTION: g_value_set_object (value, self->priv->connection); break; @@ -2034,6 +2050,14 @@ mm_base_modem_class_init (MMBaseModemClass *klass) G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); g_object_class_install_property (object_class, PROP_PRODUCT_ID, properties[PROP_PRODUCT_ID]); + properties[PROP_SUBSYSTEM_VENDOR_ID] = + g_param_spec_uint (MM_BASE_MODEM_SUBSYSTEM_VENDOR_ID, + "Hardware subsystem vendor ID", + "Hardware subsystem vendor ID. Available for pci devices.", + 0, G_MAXUINT, 0, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY); + g_object_class_install_property (object_class, PROP_SUBSYSTEM_VENDOR_ID, properties[PROP_SUBSYSTEM_VENDOR_ID]); + properties[PROP_CONNECTION] = g_param_spec_object (MM_BASE_MODEM_CONNECTION, "Connection", diff --git a/src/mm-base-modem.h b/src/mm-base-modem.h index e4254a0b..1b7a2219 100644 --- a/src/mm-base-modem.h +++ b/src/mm-base-modem.h @@ -55,17 +55,18 @@ typedef struct _MMBaseModem MMBaseModem; typedef struct _MMBaseModemClass MMBaseModemClass; typedef struct _MMBaseModemPrivate MMBaseModemPrivate; -#define MM_BASE_MODEM_CONNECTION "base-modem-connection" -#define MM_BASE_MODEM_MAX_TIMEOUTS "base-modem-max-timeouts" -#define MM_BASE_MODEM_VALID "base-modem-valid" -#define MM_BASE_MODEM_DEVICE "base-modem-device" -#define MM_BASE_MODEM_DRIVERS "base-modem-drivers" -#define MM_BASE_MODEM_PLUGIN "base-modem-plugin" -#define MM_BASE_MODEM_VENDOR_ID "base-modem-vendor-id" -#define MM_BASE_MODEM_PRODUCT_ID "base-modem-product-id" -#define MM_BASE_MODEM_REPROBE "base-modem-reprobe" -#define MM_BASE_MODEM_DATA_NET_SUPPORTED "base-modem-data-net-supported" -#define MM_BASE_MODEM_DATA_TTY_SUPPORTED "base-modem-data-tty-supported" +#define MM_BASE_MODEM_CONNECTION "base-modem-connection" +#define MM_BASE_MODEM_MAX_TIMEOUTS "base-modem-max-timeouts" +#define MM_BASE_MODEM_VALID "base-modem-valid" +#define MM_BASE_MODEM_DEVICE "base-modem-device" +#define MM_BASE_MODEM_DRIVERS "base-modem-drivers" +#define MM_BASE_MODEM_PLUGIN "base-modem-plugin" +#define MM_BASE_MODEM_VENDOR_ID "base-modem-vendor-id" +#define MM_BASE_MODEM_PRODUCT_ID "base-modem-product-id" +#define MM_BASE_MODEM_SUBSYSTEM_VENDOR_ID "base-modem-subsystem-vendor-id" +#define MM_BASE_MODEM_REPROBE "base-modem-reprobe" +#define MM_BASE_MODEM_DATA_NET_SUPPORTED "base-modem-data-net-supported" +#define MM_BASE_MODEM_DATA_TTY_SUPPORTED "base-modem-data-tty-supported" #define MM_BASE_MODEM_SIGNAL_LINK_PORT_GRABBED "base-modem-link-port-grabbed" #define MM_BASE_MODEM_SIGNAL_LINK_PORT_RELEASED "base-modem-link-port-released" @@ -207,8 +208,9 @@ const gchar *mm_base_modem_get_device (MMBaseModem *self); const gchar **mm_base_modem_get_drivers (MMBaseModem *self); const gchar *mm_base_modem_get_plugin (MMBaseModem *self); -guint mm_base_modem_get_vendor_id (MMBaseModem *self); -guint mm_base_modem_get_product_id (MMBaseModem *self); +guint mm_base_modem_get_vendor_id (MMBaseModem *self); +guint mm_base_modem_get_product_id (MMBaseModem *self); +guint mm_base_modem_get_subsystem_vendor_id (MMBaseModem *self); GCancellable *mm_base_modem_peek_cancellable (MMBaseModem *self); GCancellable *mm_base_modem_get_cancellable (MMBaseModem *self); diff --git a/src/mm-device.c b/src/mm-device.c index c9fa5d05..33528946 100644 --- a/src/mm-device.c +++ b/src/mm-device.c @@ -66,6 +66,8 @@ struct _MMDevicePrivate { /* If USB, device vid/pid */ guint16 vendor; guint16 product; + /* Subsystem vendor ID for PCI devices */ + guint16 subsystem_vendor; /* Kernel drivers managing this device */ gchar **drivers; @@ -241,6 +243,9 @@ mm_device_grab_port (MMDevice *self, self->priv->product = mm_kernel_device_get_physdev_pid (kernel_port); } + if (!self->priv->subsystem_vendor) + self->priv->subsystem_vendor = mm_kernel_device_get_physdev_subsystem_vid (kernel_port); + /* Add new port driver */ add_port_driver (self, kernel_port); @@ -363,6 +368,9 @@ export_modem (MMDevice *self) mm_obj_dbg (self, " vid:pid: 0x%04X:0x%04X", (mm_base_modem_get_vendor_id (self->priv->modem) & 0xFFFF), (mm_base_modem_get_product_id (self->priv->modem) & 0xFFFF)); + if (mm_base_modem_get_subsystem_vendor_id (self->priv->modem)) + mm_obj_dbg (self, " subsystem vid: 0x%04X", + (mm_base_modem_get_subsystem_vendor_id (self->priv->modem) & 0xFFFF)); if (self->priv->virtual) mm_obj_dbg (self, " virtual"); @@ -515,6 +523,12 @@ mm_device_get_product (MMDevice *self) return self->priv->product; } +guint16 +mm_device_get_subsystem_vendor (MMDevice *self) +{ + return self->priv->subsystem_vendor; +} + void mm_device_set_plugin (MMDevice *self, GObject *plugin) diff --git a/src/mm-device.h b/src/mm-device.h index 00d5977a..812c03a6 100644 --- a/src/mm-device.h +++ b/src/mm-device.h @@ -99,6 +99,7 @@ const gchar *mm_device_get_uid (MMDevice *self); const gchar **mm_device_get_drivers (MMDevice *self); guint16 mm_device_get_vendor (MMDevice *self); guint16 mm_device_get_product (MMDevice *self); +guint16 mm_device_get_subsystem_vendor (MMDevice *self); void mm_device_set_plugin (MMDevice *self, GObject *plugin); GObject *mm_device_peek_plugin (MMDevice *self); diff --git a/src/mm-plugin.c b/src/mm-plugin.c index 2020b376..354caf09 100644 --- a/src/mm-plugin.c +++ b/src/mm-plugin.c @@ -924,6 +924,7 @@ mm_plugin_create_modem (MMPlugin *self, drivers, mm_device_get_vendor (device), mm_device_get_product (device), + mm_device_get_subsystem_vendor (device), port_probes, error); if (!modem) diff --git a/src/mm-plugin.h b/src/mm-plugin.h index b27e7a2f..89bac2e2 100644 --- a/src/mm-plugin.h +++ b/src/mm-plugin.h @@ -111,6 +111,7 @@ struct _MMPluginClass { const gchar **drivers, guint16 vendor, guint16 product, + guint16 subsystem_vendor, GList *probes, GError **error); |