---
 sys/dev/pv/if_vio.c    | 84 +++++++++++++++++++++++-------------------
 sys/dev/pv/vioblk.c    |  3 ++
 sys/dev/pv/vioblkreg.h | 21 ++++++-----
 sys/dev/pv/virtio.c    |  1 +
 4 files changed, 62 insertions(+), 47 deletions(-)

diff --git a/sys/dev/pv/if_vio.c b/sys/dev/pv/if_vio.c
index a4cd80af62d..bfc7cfd1ddc 100644
--- a/sys/dev/pv/if_vio.c
+++ b/sys/dev/pv/if_vio.c
@@ -68,25 +68,29 @@
 #define VIRTIO_NET_CONFIG_STATUS       6 /* 16bit */
 
 /* Feature bits */
-#define VIRTIO_NET_F_CSUM              (1ULL<<0)
-#define VIRTIO_NET_F_GUEST_CSUM                (1ULL<<1)
-#define VIRTIO_NET_F_MAC               (1ULL<<5)
-#define VIRTIO_NET_F_GSO               (1ULL<<6)
-#define VIRTIO_NET_F_GUEST_TSO4                (1ULL<<7)
-#define VIRTIO_NET_F_GUEST_TSO6                (1ULL<<8)
-#define VIRTIO_NET_F_GUEST_ECN         (1ULL<<9)
-#define VIRTIO_NET_F_GUEST_UFO         (1ULL<<10)
-#define VIRTIO_NET_F_HOST_TSO4         (1ULL<<11)
-#define VIRTIO_NET_F_HOST_TSO6         (1ULL<<12)
-#define VIRTIO_NET_F_HOST_ECN          (1ULL<<13)
-#define VIRTIO_NET_F_HOST_UFO          (1ULL<<14)
-#define VIRTIO_NET_F_MRG_RXBUF         (1ULL<<15)
-#define VIRTIO_NET_F_STATUS            (1ULL<<16)
-#define VIRTIO_NET_F_CTRL_VQ           (1ULL<<17)
-#define VIRTIO_NET_F_CTRL_RX           (1ULL<<18)
-#define VIRTIO_NET_F_CTRL_VLAN         (1ULL<<19)
-#define VIRTIO_NET_F_CTRL_RX_EXTRA     (1ULL<<20)
-#define VIRTIO_NET_F_GUEST_ANNOUNCE    (1ULL<<21)
+#define VIRTIO_NET_F_CSUM                      (1ULL<<0)
+#define VIRTIO_NET_F_GUEST_CSUM                        (1ULL<<1)
+#define VIRTIO_NET_F_CTRL_GUEST_OFFLOADS        (1ULL<<2)
+#define VIRTIO_NET_F_MTU                        (1ULL<<3)
+#define VIRTIO_NET_F_MAC                       (1ULL<<5)
+#define VIRTIO_NET_F_GSO                       (1ULL<<6)
+#define VIRTIO_NET_F_GUEST_TSO4                        (1ULL<<7)
+#define VIRTIO_NET_F_GUEST_TSO6                        (1ULL<<8)
+#define VIRTIO_NET_F_GUEST_ECN                 (1ULL<<9)
+#define VIRTIO_NET_F_GUEST_UFO                 (1ULL<<10)
+#define VIRTIO_NET_F_HOST_TSO4                 (1ULL<<11)
+#define VIRTIO_NET_F_HOST_TSO6                 (1ULL<<12)
+#define VIRTIO_NET_F_HOST_ECN                  (1ULL<<13)
+#define VIRTIO_NET_F_HOST_UFO                  (1ULL<<14)
+#define VIRTIO_NET_F_MRG_RXBUF                 (1ULL<<15)
+#define VIRTIO_NET_F_STATUS                    (1ULL<<16)
+#define VIRTIO_NET_F_CTRL_VQ                   (1ULL<<17)
+#define VIRTIO_NET_F_CTRL_RX                   (1ULL<<18)
+#define VIRTIO_NET_F_CTRL_VLAN                 (1ULL<<19)
+#define VIRTIO_NET_F_CTRL_RX_EXTRA             (1ULL<<20)
+#define VIRTIO_NET_F_GUEST_ANNOUNCE            (1ULL<<21)
+#define VIRTIO_NET_F_MQ                                (1ULL<<22)
+#define VIRTIO_NET_F_CTRL_MAC_ADDR             (1ULL<<23)
 
 /*
  * Config(8) flags. The lowest byte is reserved for generic virtio stuff.
@@ -97,25 +101,29 @@
 
 static const struct virtio_feature_name virtio_net_feature_names[] = {
 #if VIRTIO_DEBUG
-       { VIRTIO_NET_F_CSUM,            "CSum" },
-       { VIRTIO_NET_F_GUEST_CSUM,      "GuestCSum" },
-       { VIRTIO_NET_F_MAC,             "MAC" },
-       { VIRTIO_NET_F_GSO,             "GSO" },
-       { VIRTIO_NET_F_GUEST_TSO4,      "GuestTSO4" },
-       { VIRTIO_NET_F_GUEST_TSO6,      "GuestTSO6" },
-       { VIRTIO_NET_F_GUEST_ECN,       "GuestECN" },
-       { VIRTIO_NET_F_GUEST_UFO,       "GuestUFO" },
-       { VIRTIO_NET_F_HOST_TSO4,       "HostTSO4" },
-       { VIRTIO_NET_F_HOST_TSO6,       "HostTSO6" },
-       { VIRTIO_NET_F_HOST_ECN,        "HostECN" },
-       { VIRTIO_NET_F_HOST_UFO,        "HostUFO" },
-       { VIRTIO_NET_F_MRG_RXBUF,       "MrgRXBuf" },
-       { VIRTIO_NET_F_STATUS,          "Status" },
-       { VIRTIO_NET_F_CTRL_VQ,         "CtrlVQ" },
-       { VIRTIO_NET_F_CTRL_RX,         "CtrlRX" },
-       { VIRTIO_NET_F_CTRL_VLAN,       "CtrlVLAN" },
-       { VIRTIO_NET_F_CTRL_RX_EXTRA,   "CtrlRXExtra" },
-       { VIRTIO_NET_F_GUEST_ANNOUNCE,  "GuestAnnounce" },
+       { VIRTIO_NET_F_CSUM,                    "CSum" },
+       { VIRTIO_NET_F_GUEST_CSUM,              "GuestCSum" },
+       { VIRTIO_NET_F_CTRL_GUEST_OFFLOADS,     "CtrlGuestOffl" },
+       { VIRTIO_NET_F_MTU,                     "MTU", },
+       { VIRTIO_NET_F_MAC,                     "MAC" },
+       { VIRTIO_NET_F_GSO,                     "GSO" },
+       { VIRTIO_NET_F_GUEST_TSO4,              "GuestTSO4" },
+       { VIRTIO_NET_F_GUEST_TSO6,              "GuestTSO6" },
+       { VIRTIO_NET_F_GUEST_ECN,               "GuestECN" },
+       { VIRTIO_NET_F_GUEST_UFO,               "GuestUFO" },
+       { VIRTIO_NET_F_HOST_TSO4,               "HostTSO4" },
+       { VIRTIO_NET_F_HOST_TSO6,               "HostTSO6" },
+       { VIRTIO_NET_F_HOST_ECN,                "HostECN" },
+       { VIRTIO_NET_F_HOST_UFO,                "HostUFO" },
+       { VIRTIO_NET_F_MRG_RXBUF,               "MrgRXBuf" },
+       { VIRTIO_NET_F_STATUS,                  "Status" },
+       { VIRTIO_NET_F_CTRL_VQ,                 "CtrlVQ" },
+       { VIRTIO_NET_F_CTRL_RX,                 "CtrlRX" },
+       { VIRTIO_NET_F_CTRL_VLAN,               "CtrlVLAN" },
+       { VIRTIO_NET_F_CTRL_RX_EXTRA,           "CtrlRXExtra" },
+       { VIRTIO_NET_F_GUEST_ANNOUNCE,          "GuestAnnounce" },
+       { VIRTIO_NET_F_MQ,                      "MQ" },
+       { VIRTIO_NET_F_CTRL_MAC_ADDR,           "CtrlMAC" },
 #endif
        { 0,                            NULL }
 };
diff --git a/sys/dev/pv/vioblk.c b/sys/dev/pv/vioblk.c
index fc46e52c09c..460c2dfa766 100644
--- a/sys/dev/pv/vioblk.c
+++ b/sys/dev/pv/vioblk.c
@@ -82,6 +82,9 @@ struct virtio_feature_name vioblk_feature_names[] = {
        { VIRTIO_BLK_F_SCSI,            "SCSI" },
        { VIRTIO_BLK_F_FLUSH,           "Flush" },
        { VIRTIO_BLK_F_TOPOLOGY,        "Topology" },
+       { VIRTIO_BLK_F_CONFIG_WCE,      "ConfigWCE" },
+       { VIRTIO_BLK_F_DISCARD,         "Discard" },
+       { VIRTIO_BLK_F_WRITE_ZEROES,    "Write0s" },
 #endif
        { 0,                            NULL }
 };
diff --git a/sys/dev/pv/vioblkreg.h b/sys/dev/pv/vioblkreg.h
index dbfa37e60ea..307c66af535 100644
--- a/sys/dev/pv/vioblkreg.h
+++ b/sys/dev/pv/vioblkreg.h
@@ -40,15 +40,18 @@
 #define VIRTIO_BLK_CONFIG_BLK_SIZE     20 /* 32bit */
 
 /* Feature bits */
-#define VIRTIO_BLK_F_BARRIER   (1ULL<<0)
-#define VIRTIO_BLK_F_SIZE_MAX  (1ULL<<1)
-#define VIRTIO_BLK_F_SEG_MAX   (1ULL<<2)
-#define VIRTIO_BLK_F_GEOMETRY  (1ULL<<4)
-#define VIRTIO_BLK_F_RO                (1ULL<<5)
-#define VIRTIO_BLK_F_BLK_SIZE  (1ULL<<6)
-#define VIRTIO_BLK_F_SCSI      (1ULL<<7)
-#define VIRTIO_BLK_F_FLUSH     (1ULL<<9)
-#define VIRTIO_BLK_F_TOPOLOGY  (1ULL<<10)
+#define VIRTIO_BLK_F_BARRIER           (1ULL<<0)
+#define VIRTIO_BLK_F_SIZE_MAX          (1ULL<<1)
+#define VIRTIO_BLK_F_SEG_MAX           (1ULL<<2)
+#define VIRTIO_BLK_F_GEOMETRY          (1ULL<<4)
+#define VIRTIO_BLK_F_RO                        (1ULL<<5)
+#define VIRTIO_BLK_F_BLK_SIZE          (1ULL<<6)
+#define VIRTIO_BLK_F_SCSI              (1ULL<<7)
+#define VIRTIO_BLK_F_FLUSH             (1ULL<<9)
+#define VIRTIO_BLK_F_TOPOLOGY          (1ULL<<10)
+#define VIRTIO_BLK_F_CONFIG_WCE                (1ULL<<11)
+#define VIRTIO_BLK_F_DISCARD           (1ULL<<12)
+#define VIRTIO_BLK_F_WRITE_ZEROES      (1ULL<<13)
 
 /* Command */
 #define VIRTIO_BLK_T_IN                        0
diff --git a/sys/dev/pv/virtio.c b/sys/dev/pv/virtio.c
index 18b78927180..40ea0b8a85e 100644
--- a/sys/dev/pv/virtio.c
+++ b/sys/dev/pv/virtio.c
@@ -80,6 +80,7 @@ static const struct virtio_feature_name 
transport_feature_names[] = {
        { VIRTIO_F_RING_INDIRECT_DESC,  "RingIndirectDesc"},
        { VIRTIO_F_RING_EVENT_IDX,      "RingEventIdx"},
        { VIRTIO_F_BAD_FEATURE,         "BadFeature"},
+       { VIRTIO_F_VERSION_1,           "Version1"},
        { 0,                            NULL}
 };
 
-- 
2.19.0

Reply via email to