From: Satha Rao <skotesh...@marvell.com> This patch extends the virtio_user_read_dev_config API to retrieve link speed and duplex settings if the device features support VIRTIO_NET_F_SPEED_DUPLEX.
Signed-off-by: Satha Rao <skotesh...@marvell.com> --- .../net/virtio/virtio_user/virtio_user_dev.c | 22 ++++++++++++++++++- .../net/virtio/virtio_user/virtio_user_dev.h | 2 ++ drivers/net/virtio/virtio_user_ethdev.c | 6 +++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.c b/drivers/net/virtio/virtio_user/virtio_user_dev.c index 2997d2bd26..91ad1312f7 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.c +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.c @@ -468,6 +468,25 @@ virtio_user_dev_init_mac(struct virtio_user_dev *dev, const char *mac) PMD_DRV_LOG(INFO, "(%s) MAC %s specified", dev->path, buf); } +int +virtio_user_dev_get_speed_duplex_config(struct virtio_user_dev *dev, void *dst, size_t offset, + int length) +{ + int ret = 0; + + if (!(dev->device_features & (1ULL << VIRTIO_NET_F_SPEED_DUPLEX))) + return -ENOTSUP; + + if (!dev->ops->get_config) + return -ENOTSUP; + + ret = dev->ops->get_config(dev, dst, offset, length); + if (ret) + PMD_DRV_LOG(ERR, "(%s) Failed to get speed/duplex config in device", dev->path); + + return ret; +} + static int virtio_user_dev_init_notify(struct virtio_user_dev *dev) { @@ -726,7 +745,8 @@ virtio_user_free_vrings(struct virtio_user_dev *dev) 1ULL << VIRTIO_F_RING_PACKED | \ 1ULL << VIRTIO_F_NOTIFICATION_DATA | \ 1ULL << VIRTIO_F_ORDER_PLATFORM | \ - 1ULL << VIRTIO_NET_F_RSS) + 1ULL << VIRTIO_NET_F_RSS | \ + 1ULL << VIRTIO_NET_F_SPEED_DUPLEX) int virtio_user_dev_init(struct virtio_user_dev *dev, char *path, uint16_t queues, diff --git a/drivers/net/virtio/virtio_user/virtio_user_dev.h b/drivers/net/virtio/virtio_user/virtio_user_dev.h index 66400b3b62..57d75d1c53 100644 --- a/drivers/net/virtio/virtio_user/virtio_user_dev.h +++ b/drivers/net/virtio/virtio_user/virtio_user_dev.h @@ -87,6 +87,8 @@ int virtio_user_dev_set_mac(struct virtio_user_dev *dev); int virtio_user_dev_get_mac(struct virtio_user_dev *dev); int virtio_user_dev_get_rss_config(struct virtio_user_dev *dev, void *dst, size_t offset, int length); +int virtio_user_dev_get_speed_duplex_config(struct virtio_user_dev *dev, void *dst, + size_t offset, int length); void virtio_user_dev_delayed_disconnect_handler(void *param); int virtio_user_dev_server_reconnect(struct virtio_user_dev *dev); extern const char * const virtio_user_backend_strings[]; diff --git a/drivers/net/virtio/virtio_user_ethdev.c b/drivers/net/virtio/virtio_user_ethdev.c index bf29f0dacd..d431b4521b 100644 --- a/drivers/net/virtio/virtio_user_ethdev.c +++ b/drivers/net/virtio/virtio_user_ethdev.c @@ -55,6 +55,12 @@ virtio_user_read_dev_config(struct virtio_hw *hw, size_t offset, if (offset >= offsetof(struct virtio_net_config, rss_max_key_size)) virtio_user_dev_get_rss_config(dev, dst, offset, length); + + if (offset == offsetof(struct virtio_net_config, speed)) + virtio_user_dev_get_speed_duplex_config(dev, dst, offset, length); + + if (offset == offsetof(struct virtio_net_config, duplex)) + virtio_user_dev_get_speed_duplex_config(dev, dst, offset, length); } static void -- 2.25.1