Add vendor and device attributes to VMBUS devices. These will be used
by Hyper-V tools as well user-level RDMA libraries that will use the
vendor/device tuple to discover the RDMA device.

Signed-off-by: K. Y. Srinivasan <k...@microsoft.com>
---
 Documentation/ABI/stable/sysfs-bus-vmbus |   14 ++++++++++++++
 drivers/hv/vmbus_drv.c                   |   21 +++++++++++++++++++++
 include/linux/hyperv.h                   |    2 ++
 3 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/Documentation/ABI/stable/sysfs-bus-vmbus 
b/Documentation/ABI/stable/sysfs-bus-vmbus
index 636e938..5d0125f 100644
--- a/Documentation/ABI/stable/sysfs-bus-vmbus
+++ b/Documentation/ABI/stable/sysfs-bus-vmbus
@@ -27,3 +27,17 @@ Description: The mapping of which primary/sub channels are 
bound to which
                Virtual Processors.
                Format: <channel's child_relid:the bound cpu's number>
 Users:         tools/hv/lsvmbus
+
+What:          /sys/bus/vmbus/devices/vmbus_*/device
+Date:          Dec. 2015
+KernelVersion: 4.5
+Contact:       K. Y. Srinivasan <k...@microsoft.com>
+Description:   The 16 bit device ID of the device
+Users:         tools/hv/lsvmbus and user level RDMA libraries
+
+What:          /sys/bus/vmbus/devices/vmbus_*/vendor
+Date:          Dec. 2015
+KernelVersion: 4.5
+Contact:       K. Y. Srinivasan <k...@microsoft.com>
+Description:   The 16 bit vendor ID of the device
+Users:         tools/hv/lsvmbus and user level RDMA libraries
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 328e4c3..3668a95 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -477,6 +477,24 @@ static ssize_t channel_vp_mapping_show(struct device *dev,
 }
 static DEVICE_ATTR_RO(channel_vp_mapping);
 
+static ssize_t vendor_show(struct device *dev,
+                          struct device_attribute *dev_attr,
+                          char *buf)
+{
+       struct hv_device *hv_dev = device_to_hv_device(dev);
+       return sprintf(buf, "0x%x\n", hv_dev->vendor_id);
+}
+static DEVICE_ATTR_RO(vendor);
+
+static ssize_t device_show(struct device *dev,
+                          struct device_attribute *dev_attr,
+                          char *buf)
+{
+       struct hv_device *hv_dev = device_to_hv_device(dev);
+       return sprintf(buf, "0x%x\n", hv_dev->device_id);
+}
+static DEVICE_ATTR_RO(device);
+
 /* Set up per device attributes in /sys/bus/vmbus/devices/<bus device> */
 static struct attribute *vmbus_attrs[] = {
        &dev_attr_id.attr,
@@ -502,6 +520,8 @@ static struct attribute *vmbus_attrs[] = {
        &dev_attr_in_read_bytes_avail.attr,
        &dev_attr_in_write_bytes_avail.attr,
        &dev_attr_channel_vp_mapping.attr,
+       &dev_attr_vendor.attr,
+       &dev_attr_device.attr,
        NULL,
 };
 ATTRIBUTE_GROUPS(vmbus);
@@ -957,6 +977,7 @@ struct hv_device *vmbus_device_create(const uuid_le *type,
        memcpy(&child_device_obj->dev_type, type, sizeof(uuid_le));
        memcpy(&child_device_obj->dev_instance, instance,
               sizeof(uuid_le));
+       child_device_obj->vendor_id = 0x1414; /* MSFT vendor ID */
 
 
        return child_device_obj;
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index 179ff33..02478c6 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -959,6 +959,8 @@ struct hv_device {
 
        /* the device instance id of this device */
        uuid_le dev_instance;
+       u16 vendor_id;
+       u16 device_id;
 
        struct device device;
 
-- 
1.7.4.1

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to