5da7c1414e7e & 13 Jun 2022 & Stefan Hajnoczi & {\noindent virtio-blk: document that the capacity field can change\vspace{\baselineskip}


Block devices can change size during operation. A configuration change
notification is sent by the device and the driver detects that the field
has changed. Document this behavior that has already been implemented in
Linux and QEMU since 2011.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/136}

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Block Device / Device Operation}.
 } \\
\hline
ad2e1674bb69 & 13 Jun 2022 & Laura Loghin & {\noindent vsock: add documentation about len header field\vspace{\baselineskip}


\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/137}

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>

Signed-off-by: Laura Loghin <lauralg@amazon.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Socket Device / Device Operation}.
 } \\
\hline
fca015771bc9 & 13 Jun 2022 & Xuan Zhuo & {\noindent virtio-net: support reset queue\vspace{\baselineskip}


A separate reset queue function introduced by Virtqueue Reset.

However, it is currently not defined what to do if the destination queue is
being reset when virtio-net is steering in multi-queue mode.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/138}

Reviewed-by: Jason Wang <jasowang@redhat.com>

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Automatic receive steering in multiqueue mode},
and \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Receive-side scaling (RSS) / Setting RSS parameters}.
 } \\
\hline
6328f51e21b5 & 24 Jun 2022 & Yuri Benditovich & {\noindent virtio-net: define guest USO features\vspace{\baselineskip}


\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/120}

Add definition for large UDP packets device-to-driver.

Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Feature bits},
\ref{sec:Device Types / Network Device / Feature bits / Feature bit requirements},
\ref{sec:Device Types / Network Device / Device Initialization},
\ref{sec:Device Types / Network Device / Device Operation / Setting Up Receive Buffers},
\ref{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets},
and \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Offloads State Configuration / Setting Offloads State}.
 } \\
\hline
49ff7805924c & 24 Jun 2022 & Anton Yakovlev & {\noindent virtio-snd: add support for audio controls\vspace{\baselineskip}


This patch extends the virtio sound device specification by adding
support for audio controls. Audio controls can be used to set the volume
level, mute/unmute the audio signal, switch different modes/states of
the virtual sound device, etc.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/107}

Signed-off-by: Anton Yakovlev <anton.yakovlev@opensynergy.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Driver Conformance / Sound Driver Conformance},
\ref{sec:Conformance / Device Conformance / Sound Device Conformance},
\ref{sec:Device Types / Sound Device / Feature Bits},
\ref{sec:Device Types / Sound Device / Device Configuration Layout},
\ref{sec:Device Types / Sound Device / Device Operation},
and \ref{sec:Device Types / Sound Device / Device Operation / Control Elements}.
 } \\
\hline
4d9068effa81 & 11 Jul 2022 & Alvaro Karsz & {\noindent Introduction of Virtio Network device notifications coalescing feature.\vspace{\baselineskip}


Control a network device notifications coalescing parameters using the control virtqueue.
A new control class was added: VIRTIO_NET_CTRL_NOTF_COAL.

This class provides 2 commands:

\begin{itemize}
\item VIRTIO_NET_CTRL_NOTF_COAL_TX_SET:
  Ask the network device to change the tx_usecs and tx_max_packets parameters.

\begin{itemize}
  \item tx_usecs: Maximum number of usecs to delay a TX notification.

  \item tx_max_packets: Maximum number of packets to send before a TX notification.
\end{itemize}


\item VIRTIO_NET_CTRL_NOTF_COAL_RX_SET:
  Ask the network device to change the rx_usecs and rx_max_packets parameters.

\begin{itemize}
  \item rx_usecs: Maximum number of usecs to delay a RX notification.

  \item rx_max_packets: Maximum number of packets to receive before a RX notification.
\end{itemize}
\end{itemize}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/141}

Reviewed-by: Jason Wang <jasowang@redhat.com>

Signed-off-by: Alvaro Karsz <alvaro.karsz@solid-run.com>

[CH: fixed commit message]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Driver Conformance / Network Driver Conformance},
\ref{sec:Conformance / Device Conformance / Network Device Conformance},
\ref{sec:Device Types / Network Device / Feature bits},
\ref{sec:Device Types / Network Device / Feature bits / Feature bit requirements},
and \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Notifications Coalescing}.
 } \\
\hline
abbe8afda8db & 03 Aug 2022 & Lei He & {\noindent virtio-crypto: introduce akcipher service\vspace{\baselineskip}


Introduce akcipher (asymmetric key cipher) service type, several
asymmetric algorithms and relevent information:

  - RSA(padding algorithm, ASN.1 schema definition)

  - ECDSA(ECC algorithm)

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/129}

Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>

Signed-off-by: Lei He <helei.sig11@bytedance.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Normative References},
\ref{sec:Device Types / Crypto Device},
\ref{sec:Device Types / Crypto Device / Feature bits},
\ref{sec:Device Types / Crypto Device / Feature bit requirements},
\ref{sec:Device Types / Crypto Device / Supported crypto services},
\ref{sec: Device Types / Crypto Device / Supported crypto services / AKCIPHER services},
\ref{sec:Device Types / Crypto Device / Device configuration layout},
\ref{sec:Device Types / Crypto Device / Device Operation / Operation status},
\ref{sec:Device Types / Crypto Device / Device Operation / Control Virtqueue},
\ref{sec:Device Types / Crypto Device / Device Operation / Control Virtqueue / Session operation / Session operation: AKCIPHER session},
\ref{sec:Device Types / Crypto Device / Device Operation / Data Virtqueue},
and \ref{sec:Device Types / Crypto Device / Device Operation / AKCIPHER Service Operation}.
 } \\
\hline
26ed30ccb049 & 03 Aug 2022 & Stefano Garzarella & {\noindent virtio-vsock: add VIRTIO_VSOCK_F_NO_IMPLIED_STREAM feature bit\vspace{\baselineskip}


Initially virtio-vsock only supported the stream type, which is why
there was no feature. Later we added the seqpacket type and in the future
we may have other types (e.g. datagram).

seqpacket is an extension of stream, so it might be implied that if
seqpacket is supported, stream is too, but this might not be true for
other types.

As we discussed here [1] should be better to add a new
VIRTIO_VSOCK_F_NO_IMPLIED_STREAM feature bit to avoid this implication.

Let's also add normative sections to better define the behavior when
VIRTIO_VSOCK_F_NO_IMPLIED_STREAM is negotiated or not.

[1] \url{http://markmail.org/message/2s3qd74drgjxkvte}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/142}

Suggested-by: Michael S. Tsirkin <mst@redhat.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Driver Conformance / Socket Driver Conformance},
\ref{sec:Conformance / Device Conformance / Socket Device Conformance},
and \ref{sec:Device Types / Socket Device / Feature bits}.
 } \\
\hline
a7251b0cb4d9 & 14 Nov 2022 & Hrishivarya Bhageeradhan & {\noindent content: reserve device ID 43 for Camera device\vspace{\baselineskip}


The virtio-camera device allows to stream a camera video with
ability to change controls, formats and get camera captures.
This patch is to reserve the next available device ID for
virtio-camera.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/148}

Signed-off-by: Hrishivarya Bhageeradhan <hrishivarya.bhageeradhan@opensynergy.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types}.
 } \\
\hline
b4e8efa0fa6c & 05 Dec 2022 & Dmitry Fomichev & {\noindent virtio-blk: add zoned block device specification\vspace{\baselineskip}


Introduce support for Zoned Block Devices to virtio.

Zoned Block Devices (ZBDs) aim to achieve a better capacity, latency
and/or cost characteristics compared to commonly available block
devices by getting the entire LBA space of the device divided to block
regions that are much larger than the LBA size. These regions are
called zones and they can only be written sequentially. More details
about ZBDs can be found at

\url{https://zonedstorage.io/docs/introduction/zoned-storage} .

In its current form, the virtio protocol for block devices (virtio-blk)
is not aware of ZBDs but it allows the driver to successfully scan a
host-managed drive provided by the virtio block device. As the result,
the host-managed drive is recognized by virtio driver as a regular,
non-zoned drive that will operate erroneously under the most common
write workloads. Host-aware ZBDs are currently usable, but their
performance may not be optimal because the driver can only see them as
non-zoned block devices.

To fix this, the virtio-blk protocol needs to be extended to add the
capabilities to convey the zone characteristics of ZBDs at the device
side to the driver and to provide support for ZBD-specific commands -
Report Zones, four zone operations (Open, Close, Finish and Reset) and
(optionally) Zone Append. The proposed standard extension aims to
define this new functionality.

This patch extends the virtio-blk section of virtio specification with
the minimum set of requirements that are necessary to support ZBDs.
The resulting device model is a subset of the models defined in ZAC/ZBC
and ZNS standards documents. The included functionality mirrors
the existing Linux kernel block layer ZBD support and should be
sufficient to handle the host-managed and host-aware HDDs that are on
the market today as well as ZNS SSDs that are entering the market at
the time of submission of this patch.

I would like to thank the following people for their useful feedback
and suggestions while working on the initial iterations of this patch.

Damien Le Moal <damien.lemoal@opensource.wdc.com>

Matias Bjørling <Matias.Bjorling@wdc.com>

Niklas Cassel <Niklas.Cassel@wdc.com>

Hans Holmberg <Hans.Holmberg@wdc.com>

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/143}

Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Block Device / Feature bits},
\ref{sec:Device Types / Block Device / Device configuration layout},
\ref{sec:Device Types / Block Device / Device Initialization},
and \ref{sec:Device Types / Block Device / Device Operation}.
 } \\
\hline
985bbf397db4 & 07 Dec 2022 & Xuan Zhuo & {\noindent content: reserve device ID 44 for ISM device\vspace{\baselineskip}


The virtio-ism device provides the ability to share memory between
different guests on a host. A guest's memory got from ism device can be
shared with multiple peers at the same time. This shared relationship
can be dynamically created and released.

The shared memory obtained from the device is divided into multiple ism
regions for share. ISM device provides a mechanism to notify other ism
region referrers of content update events.

This patch is to reserve the next available device ID for virtio-ism.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/150}

Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>

Signed-off-by: Jiang Liu <gerry@linux.alibaba.com>

Signed-off-by: Dust Li <dust.li@linux.alibaba.com>

Signed-off-by: Tony Lu <tonylu@linux.alibaba.com>

Signed-off-by: Helin Guo <helinguo@linux.alibaba.com>

Signed-off-by: Hans Zhang <hans@linux.alibaba.com>

Signed-off-by: He Rongguang <herongguang@linux.alibaba.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types}.
 } \\
\hline
f2b28698a28a & 30 Jan 2023 & Parav Pandit & {\noindent virtio-net: Maintain network device spec in separate directory\vspace{\baselineskip}


Move virtio network device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device},
\ref{sec:Conformance / Device Conformance / Network Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Network Driver Conformance}.
 } \\
\hline
81694cddc4c1 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-net: Fix spelling errors\vspace{\baselineskip}


Fix two spelling errors in the virtio network device specification.

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Initialization},
and \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
335342f5cd88 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-blk: Maintain block device spec in separate directory\vspace{\baselineskip}


Move virtio block device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Block Device},
\ref{sec:Conformance / Device Conformance / Block Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Block Driver Conformance}.
 } \\
\hline
d3d06187eabb & 30 Jan 2023 & Parav Pandit & {\noindent virtio-console: Maintain console device spec in separate directory\vspace{\baselineskip}


Move virtio console device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Console Device},
\ref{sec:Conformance / Device Conformance / Console Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Console Driver Conformance}.
 } \\
\hline
c71e88e86d35 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-entropy: Maintain entropy device spec in separate directory\vspace{\baselineskip}


Move virtio entropy device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Entropy Device},
\ref{sec:Conformance / Device Conformance / Entropy Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Entropy Driver Conformance}.
 } \\
\hline
c06f3b670dd6 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-balloon: Maintain mem balloon device spec in separate directory\vspace{\baselineskip}


Move virtio memory balloon device specification to its own file
similar to recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Memory Balloon Device},
\ref{sec:Conformance / Device Conformance / Traditional Memory Balloon Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Traditional Memory Balloon Driver Conformance}.
 } \\
\hline
d404f1c4e886 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-scsi: Maintain scsi host device spec in separate directory\vspace{\baselineskip}


Move virtio SCSI host device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / SCSI Host Device},
\ref{sec:Conformance / Device Conformance / SCSI Host Device Conformance},
and \ref{sec:Conformance / Driver Conformance / SCSI Host Driver Conformance}.
 } \\
\hline
442bb643a9ad & 30 Jan 2023 & Parav Pandit & {\noindent virtio-gpu: Maintain gpu device spec in separate directory\vspace{\baselineskip}


Move virtio gpu device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / GPU Device Conformance}.
 } \\
\hline
c9686f241819 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-input: Maintain input device spec in separate directory\vspace{\baselineskip}


Move virtio input device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / Input Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Input Driver Conformance}.
 } \\
\hline
8463bba27c79 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-crypto: Maintain crypto device spec in separate directory\vspace{\baselineskip}


Move virtio crypto device specification to its own file similar to
recent virtio devices.
While at it, place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / Crypto Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Crypto Driver Conformance}.
 } \\
\hline
828754b98e3b & 30 Jan 2023 & Parav Pandit & {\noindent virtio-vsock: Maintain socket device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / Socket Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Socket Driver Conformance}.
 } \\
\hline
8632f80e251f & 30 Jan 2023 & Parav Pandit & {\noindent virtio-fs: Maintain file system device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / File System Device Conformance},
and \ref{sec:Conformance / Driver Conformance / File System Driver Conformance}.
 } \\
\hline
b067de47a506 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-rpmb: Maintain rpmb device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / RPMB Device Conformance},
and \ref{sec:Conformance / Driver Conformance / RPMB Driver Conformance}.
 } \\
\hline
b1cf73e96173 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-iommu: Maintain iommu device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / IOMMU Device Conformance},
and \ref{sec:Conformance / Driver Conformance / IOMMU Driver Conformance}.
 } \\
\hline
6813e3cc271e & 30 Jan 2023 & Parav Pandit & {\noindent virtio-sound: Maintain sound device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / Sound Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Sound Driver Conformance}.
 } \\
\hline
5042a5031502 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-mem: Maintain memory device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / Memory Device Conformance},
and \ref{sec:Conformance / Driver Conformance / Memory Driver Conformance}.
 } \\
\hline
00b9935238bf & 30 Jan 2023 & Parav Pandit & {\noindent virtio-i2c: Maintain i2c device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / I2C Adapter Device Conformance},
and \ref{sec:Conformance / Driver Conformance / I2C Adapter Driver Conformance}.
 } \\
\hline
674489b191ab & 30 Jan 2023 & Parav Pandit & {\noindent virtio-scmi: Maintain scmi device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / SCMI Device Conformance},
and \ref{sec:Conformance / Driver Conformance / SCMI Driver Conformance}.
 } \\
\hline
6c9c04d2bf5e & 30 Jan 2023 & Parav Pandit & {\noindent virtio-gpio: Maintain gpio device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / GPIO Device Conformance},
and \ref{sec:Conformance / Driver Conformance / GPIO Driver Conformance}.
 } \\
\hline
d04d253b1055 & 30 Jan 2023 & Parav Pandit & {\noindent virtio-pmem: Maintain pmem device spec in separate directory\vspace{\baselineskip}


Place device specification, its driver and device
conformance into its own directory to have self contained device
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/153}

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Conformance / Device Conformance / PMEM Device Conformance},
and \ref{sec:Conformance / Driver Conformance / PMEM Driver Conformance}.
 } \\
\hline
b1fb6b62495f & 02 Feb 2023 & Parav Pandit & {\noindent virtio-net: Clarify VLAN filter table configuration\vspace{\baselineskip}


The filtering behavior of the VLAN filter commands is not very clear as
discussed in thread [1].

Hence, add the command description and device requirements for it.

[1] \url{https://lists.oasis-open.org/archives/virtio-dev/202301/msg00210.html}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/147}

Suggested-by: Si-Wei Liu <si-wei.liu@oracle.com>

Reviewed-by: Si-Wei Liu <si-wei.liu@oracle.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / VLAN Filtering},
\ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue},
and \ref{sec:Conformance / Device Conformance / Network Device Conformance}.
 } \\
\hline
53b0cb13169c & 02 Feb 2023 & Parav Pandit & {\noindent virtio-net: Avoid confusing device configuration text\vspace{\baselineskip}


The added text in commit of Fixes tag was redundant and
confusing in context of VLAN filtering description.

Hence remove it as discussed in [1] and [2].

[1] \url{https://lists.oasis-open.org/archives/virtio-dev/202301/msg00282.html}
[2] \url{https://lists.oasis-open.org/archives/virtio-dev/202301/msg00286.html}

\vspace{\baselineskip}
Fixes: 296303444f6b ("virtio-net: Clarify VLAN filter table configuration")

Suggested-by: Halil Pasic <pasic@linux.ibm.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

[CH: applied as editorial change]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
3b9b6acb0936 & 09 Feb 2023 & Michael S. Tsirkin & {\noindent audio->sound\vspace{\baselineskip}


Spec calls the device "sound device". Make the name in the
ID section match.

\vspace{\baselineskip}
MST: applied as editorial change.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types}.
 } \\
\hline
0ce03bc6995a & 14 Feb 2023 & Parav Pandit & {\noindent virtio-net: Avoid confusion between a card and a device\vspace{\baselineskip}


Historically virtio network device is documented as an Ethernet card.
A modern card in the industry has one to multiple ports, one to multiple
PCI functions. However the virtio network device is usually just a
single link/port network interface controller.

Hence, avoid this confusing term 'card' and align the specification
to adhere to widely used specification term as 'device' used for all
virtio device types.

Replaced 'card' with 'network interface controller'.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/154}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Discovery},
\ref{sec:Device Types},
\ref{sec:Device Types / Network Device},
\ref{sec:Device Types / Network Device / Feature bits},
and \ref{sec:Device Types / Network Device / Device Initialization}.
 } \\
\hline
be2ce1ee17e0 & 15 Feb 2023 & Parav Pandit & {\noindent content.tex Fix Driver notifications label\vspace{\baselineskip}


Driver notifications section is under "Basic Facilities of a Virtio
Device". However, the label is placed under "Virtqueues" section.

Fix the label references.

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

[CH: pushed as an editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Driver notifications}.
 } \\
\hline
2ea4627093fb & 20 Feb 2023 & Alvaro Karsz & {\noindent virtio-net: Mention VIRTIO_NET_F_HASH_REPORT dependency on VIRTIO_NET_F_CTRL_VQ\vspace{\baselineskip}


If the VIRTIO_NET_F_HASH_REPORT feature is negotiated, the driver may
send VIRTIO_NET_CTRL_MQ_HASH_CONFIG commands, thus, the control VQ
feature should be negotiated.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/158}

Signed-off-by: Alvaro Karsz <alvaro.karsz@solid-run.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device configuration layout}.
 } \\
\hline
73ce5bb02003 & 01 Mar 2023 & Alvaro Karsz & {\noindent virtio-net: Fix and update VIRTIO_NET_F_NOTF_COAL feature\vspace{\baselineskip}


This patch makes several improvements to the notification coalescing
feature, including:

\begin{itemize}

\item Consolidating virtio_net_ctrl_coal_tx and virtio_net_ctrl_coal_rx
  into a single struct, virtio_net_ctrl_coal, as they are identical.

\item Emphasizing that the coalescing commands are best-effort.

\item Defining the behavior of coalescing with regards to delivering
  notifications when a change occur.

\item Stating that the commands should apply to all the receive/transmit
  virtqueues.

\item Stating that every receive/transmit virtqueue should count it's own
  packets.

\item A new intro explaining the entire coalescing operation.

\end{itemize}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/159}

Signed-off-by: Alvaro Karsz <alvaro.karsz@solid-run.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
3508347769af & 01 Mar 2023 & Parav Pandit & {\noindent virtio-net: Improve introductory description\vspace{\baselineskip}


The control VQ of the virtio network device is used beyond advance
steering control. The control VQ dynamically changes multiple features
of the initialized device.

Hence, update this area of control VQ introductory description at few
places and also place the link to its description.

Also update the introduction section to better describe receive and
transmit virtqueues.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/156}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device},
\ref{sec:Device Types / Network Device / Virtqueues},
and \ref{sec:Device Types / Network Device / Device Operation}.
 } \\
\hline
91a469991433 & 10 Mar 2023 & Parav Pandit & {\noindent transport-pci: Split PCI transport to its own file\vspace{\baselineskip}


Place PCI transport specification in its own file to better maintain it.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus}.
 } \\
\hline
9e88ba9c47d0 & 10 Mar 2023 & Parav Pandit & {\noindent transport-mmio: Split MMIO transport to its own file\vspace{\baselineskip}


Place MMIO transport specification in its own file to better maintain it.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO}.
 } \\
\hline
0af264f9d4ea & 10 Mar 2023 & Parav Pandit & {\noindent transport-ccw: Split Channel IO transport to its own file\vspace{\baselineskip}


Place Channel IO transport specification in its own file to
better maintain it.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over Channel I/O}.
 } \\
\hline
deb0aa0c7faa & 10 Mar 2023 & Parav Pandit & {\noindent transport-pci: Fix spellings and white spaces\vspace{\baselineskip}


Now that we have individual files, fix reported spelling errors.

While at it, remove trailing white spaces.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus},
\ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / ISR status capability},
and \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI-specific Initialization And Device Operation / Device Initialization}.
 } \\
\hline
ca97719ea35e & 10 Mar 2023 & Parav Pandit & {\noindent transport-mmio: Fix spellings and white spaces\vspace{\baselineskip}


Now that we have individual files, fix reported spelling errors.

While at it, remove trailing white spaces.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO / MMIO Device Register Layout},
and \ref{sec:Virtio Transport Options / Virtio Over MMIO / Legacy interface}.
 } \\
\hline
8797f4d4e410 & 10 Mar 2023 & Parav Pandit & {\noindent transport-ccw: Fix spellings and white spaces\vspace{\baselineskip}


Now that we have individual files, fix reported spelling errors.

While at it, remove extra white spaces.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/157}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio over channel I/O / Basic Concepts},
\ref{sec:Virtio Transport Options / Virtio over channel I/O / Basic Concepts/ Notifications},
\ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Setting Up Indicators},
and \ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Operation / Guest->Host Notification}.
 } \\
\hline
d3f832b6605d & 15 Mar 2023 & Parav Pandit & {\noindent virtio-net: Describe dev cfg fields read only\vspace{\baselineskip}


Device configuration fields are read only. Avoid duplicating this
description for multiple fields.

Instead describe it one time and do it in the driver requirements
section.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/161}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device configuration layout}.
 } \\
\hline
115ceb97f813 & 15 Mar 2023 & Parav Pandit & {\noindent virtio-net: Define cfg fields before description\vspace{\baselineskip}


Currently some fields of the virtio_net_config structure are defined
before introducing the structure and some are defined after.
Better to define the configuration layout first followed by
description of all the fields.

Device configuration fields are described in the section. Change wording
from 'listed' to 'described' as suggested in patch [1].

[1] \url{https://lists.oasis-open.org/archives/virtio-dev/202302/msg00004.html}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/161}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device configuration layout}.
 } \\
\hline
2d1d8dfa3474 & 15 Mar 2023 & Parav Pandit & {\noindent virtio-net: Fix virtqueues spelling error\vspace{\baselineskip}


Correct spelling from virtqueus to virtqueues.

Signed-off-by: Parav Pandit <parav@nvidia.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

[CH: pushed as editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
2d5495083c12 & 15 Mar 2023 & Parav Pandit & {\noindent transport-pci: Remove duplicate word structure\vspace{\baselineskip}


Remove duplicate word structure.

Signed-off-by: Parav Pandit <parav@nvidia.com>

Acked-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

[CH: pushed as editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Legacy Interfaces: A Note on PCI Device Layout}.
 } \\
\hline
b0414098602f & 15 Mar 2023 & Parav Pandit & {\noindent virtio-blk: Define dev cfg layout before its fields\vspace{\baselineskip}


Define device configuration layout structure before describing its
individual fields.

This is an editorial change.

Suggested-by: Cornelia Huck <cohuck@redhat.com>

Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

See \ref{sec:Device Types / Network Device / Device configuration layout}.
 } \\
\hline
380ed02bdb88 & 04 Apr 2023 & Parav Pandit & {\noindent transport-pci: Remove empty line at end of file\vspace{\baselineskip}


Remove empty line at end of file.

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus}.
 } \\
\hline
1ed0754c6134 & 11 Apr 2023 & Heng Qi & {\noindent virtio-net: support the virtqueue coalescing moderation\vspace{\baselineskip}


Currently, coalescing parameters are grouped for all transmit and receive
virtqueues. This patch supports setting or getting the parameters for a
specified virtqueue, and a typical application of this function is netdim[1].

When the traffic between virtqueues is unbalanced, for example, one virtqueue
is busy and another virtqueue is idle, then it will be very useful to
control coalescing parameters at the virtqueue granularity.

[1] \url{https://docs.kernel.org/networking/net_dim.html}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/166}

Signed-off-by: Heng Qi <hengqi@linux.alibaba.com>

Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Feature bits},
\ref{sec:Device Types / Network Device / Feature bits / Feature bit requirements},
and \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue / Notifications Coalescing}.
 } \\
\hline
362ebd007271 & 11 Apr 2023 & Alvaro Karsz & {\noindent virtio-net: define the VIRTIO_NET_F_CTRL_RX_EXTRA feature bit\vspace{\baselineskip}


The VIRTIO_NET_F_CTRL_RX_EXTRA feature bit is mentioned in the spec
since version 1.0, but it's not properly defined.

This patch defines the feature bit and defines the dependency on VIRTIO_NET_F_CTRL_VQ.

Since this dependency is missing in previous versions, we add it now as
a "SHOULD".

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/162}

Reviewed-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Alvaro Karsz <alvaro.karsz@solid-run.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Feature bits},
and \ref{sec:Device Types / Network Device / Device configuration layout}.
 } \\
\hline
d3b2a19bc369 & 21 Apr 2023 & Parav Pandit & {\noindent device-types/multiple: replace queues with enqueues\vspace{\baselineskip}


Queue is a verb and noun both. Replacing it with enqueue avoids
ambiguity around plural queues noun vs verb; similar to virtio fs device
description.

\vspace{\baselineskip}
Acked-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

[CH: pushed as editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Block Device / Device Operation},
\ref{sec:Device Types / GPIO Device / requestq Operation / Message Flow},
\ref{sec:Device Types / GPIO Device / eventq Operation},
\ref{sec:Device Types / I2C Adapter Device / Device Operation: Request Queue},
\ref{sec:Device Types / SCSI Host Device / Device Operation / Device Operation: Request Queues},
and \ref{sec:Device Types / Socket Device / Device Operation / Receive and Transmit}.
 } \\
\hline
aadefe688680 & 19 May 2023 & Michael S. Tsirkin & {\noindent virtio: document forward compatibility guarantees\vspace{\baselineskip}


Feature negotiation forms the basis of forward compatibility
guarantees of virtio but has never been properly documented.
Do it now.

\vspace{\baselineskip}
Suggested-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Basic Facilities of a Virtio Device / Feature Bits}.
 } \\
\hline
f3ce853c8a91 & 19 May 2023 & Michael S. Tsirkin & {\noindent admin: introduce device group and related concepts\vspace{\baselineskip}


Each device group has a type. For now, define one initial group type:

SR-IOV type - PCI SR-IOV virtual functions (VFs) of a given
PCI SR-IOV physical function (PF). This group may contain zero or more
virtio devices according to NumVFs configured.

Each device within a group has a unique identifier. This identifier
is the group member identifier.

Note: one can argue both ways whether the new device group handling
functionality (this and following patches) is closer
to a new device type or a new transport type.

However, it's expected that we will add more features in the near
future. To facilitate this as much as possible of the text is located in
the new admin chapter.

Effort was made to minimize transport-specific text.

There's a bit of duplication with 0x1 repeated twice and
no special section for group type identifiers.
It seems ok to defer adding these until we have more group
types.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups}.
 } \\
\hline
2cbaaa19b15a & 19 May 2023 & Michael S. Tsirkin & {\noindent admin: introduce group administration commands\vspace{\baselineskip}


This introduces a general structure for group administration commands,
used to control device groups through their owner.

Following patches will introduce specific commands and an interface for
submitting these commands to the owner.

Note that the commands are focused on controlling device groups:
this is why group related fields are in the generic part of
the structure.
Without this the admin vq would become a "whatever" vq which does not do
anything specific at all, just a general transport like thing.
I feel going this way opens the design space to the point where
we no longer know what belongs in e.g. config space
what in the control q and what in the admin q.
As it is, whatever deals with groups is in the admin q; other
things not in the admin q.

There are specific exceptions such as query but that's an exception that
proves the rule ;)

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands},
and \ref{sec:Normative References}.
 } \\
\hline
5f1a8ac61c15 & 19 May 2023 & Michael S. Tsirkin & {\noindent admin: introduce virtio admin virtqueues\vspace{\baselineskip}


The admin virtqueues will be the first interface used to issue admin commands.

Currently the virtio specification defines control virtqueue to manipulate
features and configuration of the device it operates on:
virtio-net, virtio-scsi, etc all have existing control virtqueues. However,
control virtqueue commands are device type specific, which makes it very
difficult to extend for device agnostic commands.

Keeping the device-specific virtqueue separate from the admin virtqueue
is simpler and has fewer potential problems. I don't think creating
common infrastructure for device-specific control virtqueues across
device types worthwhile or within the scope of this patch series.

To support this requirement in a more generic way, this patch introduces
a new admin virtqueue interface.
The admin virtqueue can be seen as the virtqueue analog to a transport.
The admin queue thus does nothing device type-specific (net, scsi, etc)
and instead focuses on transporting the admin commands.

We also support more than one admin virtqueue, for QoS and
scalability requirements.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Administration Virtqueues},
\ref{sec:Basic Facilities of a Virtio Device / Feature Bits},
and \ref{sec:Reserved Feature Bits}.
 } \\
\hline
677aeaebf6a7 & 19 May 2023 & Michael S. Tsirkin & {\noindent pci: add admin vq registers to virtio over pci\vspace{\baselineskip}


Add new registers to the PCI common configuration structure.

These registers will be used for querying the indices of the admin
virtqueues of the owner device. To configure, reset or enable the admin
virtqueues, the driver should follow existing queue configuration/setup
sequence.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Reserved Feature Bits},
and \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Common configuration structure layout}.
 } \\
\hline
a9a59f70be46 & 19 May 2023 & Michael S. Tsirkin & {\noindent mmio: document ADMIN_VQ as reserved\vspace{\baselineskip}


Adding relevant registers needs more work and it's not
clear what the use-case will be as currently only
the PCI transport is supported. But let's keep the
door open on this.
We already say it's reserved in a central place, but it
does not hurt to remind implementers to mask it.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO / Features reserved for future use}.
 } \\
\hline
325046c1460e & 19 May 2023 & Michael S. Tsirkin & {\noindent ccw: document ADMIN_VQ as reserved\vspace{\baselineskip}


Adding relevant registers needs more work and it's not
clear what the use-case will be as currently only
the PCI transport is supported. But let's keep the
door open on this.
We already say it's reserved in a central place, but it
does not hurt to remind implementers to mask it.

Note: there are more features to add to this list.
Will be done later with a patch on top.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Virtio Transport Options / Virtio over channel I/O / Features reserved for future use}.
 } \\
\hline
3dc7196cba2d & 19 May 2023 & Michael S. Tsirkin & {\noindent admin: command list discovery\vspace{\baselineskip}


Add commands to find out which commands does each group support,
as well as enable their use by driver.
This will be especially useful once we have multiple group types.

An alternative is per-type VQs. This is possible but will
require more per-transport work. Discovery through the vq
helps keep things contained.

e.g. lack of support for some command can switch to a legacy mode

note that commands are expected to be avolved by adding new
fields to command specific data at the tail, so
we generally do not need feature bits for compatibility.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands}.
 } \\
\hline
bf1d6b0d24ae & 19 May 2023 & Michael S. Tsirkin & {\noindent admin: conformance clauses\vspace{\baselineskip}


Add conformance clauses for admin commands and admin virtqueues.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/171}

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands},
\ref{sec:Basic Facilities of a Virtio Device / Administration Virtqueues},
and \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Common configuration structure layout}.
 } \\
\hline
b04be31f0bf0 & 19 May 2023 & Michael S. Tsirkin & {\noindent ccw: document more reserved features\vspace{\baselineskip}


vq reset and shared memory are unsupported, too.

\vspace{\baselineskip}
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/160}

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Reviewed-by: Zhu Lingshan <lingshan.zhu@intel.com>

See \ref{sec:Virtio Transport Options / Virtio over channel I/O / Features reserved for future use}.
 } \\
\hline
619f60ae4ccf & 19 May 2023 & Parav Pandit & {\noindent admin: Fix reference and table formation\vspace{\baselineskip}


This patch brings three fixes.

\begin{enumerate}

\item Opcode table has 3 columns, only two were enumerated. Due to this
pdf generation script stops. Fix it and also have resizeable description
column as it needs wrap.

\item Status description column content needs to wrap. Without it pdf
   does not read good. Fix it by having resizeable description column.

\item Fix the broken link to the Device groups.

\end{enumerate}

\vspace{\baselineskip}
Fixes: 2cbaaa1 ("admin: introduce group administration commands")

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands}.
 } \\
\hline
c1cd68b97611 & 19 May 2023 & Parav Pandit & {\noindent transport-pci: Improve config msix vector description\vspace{\baselineskip}


config_msix_vector is the register that holds the MSI-X vector number
for receiving configuration change related interrupts.

It is not "for MSI-X".

Hence, replace the confusing text with appropriate one.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/169}

Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Common configuration structure layout}.
 } \\
\hline
0f433d62e81d & 19 May 2023 & Parav Pandit & {\noindent transport-pci: Improve queue msix vector register desc\vspace{\baselineskip}


queue_msix_vector register is for receiving virtqueue notification
interrupts from the device for the virtqueue.

"for MSI-X" is confusing term.

Also it is the register that driver "writes" to, similar to
many other registers such as queue_desc, queue_driver etc.

Hence, replace the verb from use to write.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/169}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Max Gurtovoy <mgurtovoy@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Common configuration structure layout}.
 } \\
\hline
b0fbccd4062f & 19 May 2023 & Parav Pandit & {\noindent content: Add vq index text\vspace{\baselineskip}


Introduce vq index and its range so that subsequent patches can refer
to it.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Virtqueues}.
 } \\
\hline
362f1cac2516 & 19 May 2023 & Parav Pandit & {\noindent content.tex Replace virtqueue number with index\vspace{\baselineskip}


Replace virtqueue number with index to align to rest of the
specification.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Driver notifications}.
 } \\
\hline
cc4a5604b259 & 19 May 2023 & Parav Pandit & {\noindent content: Rename confusing queue_notify_data and vqn names\vspace{\baselineskip}


Currently queue_notify_data register indicates the device
internal queue notification content. This register is
meaningful only when feature bit VIRTIO_F_NOTIF_CONFIG_DATA is
negotiated.

However, above register name often get confusing association with
very similar feature bit VIRTIO_F_NOTIFICATION_DATA.

When VIRTIO_F_NOTIFICATION_DATA feature bit is negotiated,
notification really involves sending additional queue progress
related information (not queue identifier or index).

Hence

\begin{enumerate}

\item  to avoid any misunderstanding and association of
queue_notify_data with similar name VIRTIO_F_NOTIFICATION_DATA,

and

\item to reflect that queue_notify_data is the actual device
internal virtqueue identifier/index/data/cookie,

\end{enumerate}

\begin{enumerate}[label=\alph*.]

\item rename queue_notify_data to queue_notif_config_data.

\item rename ambiguous vqn to a union of vq_index and vq_config_data

\item The driver notification section assumes that queue notification contains
vq index always. CONFIG_DATA feature bit introduction missed to
update the driver notification section. Hence, correct it.

\end{enumerate}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Acked-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

See \ref{sec:Basic Facilities of a Virtio Device / Driver notifications},
\ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Common configuration structure layout},
and \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI-specific Initialization And Device Operation / Available Buffer Notifications}.
} \\
\hline
fbb119dad56d & 19 May 2023 & Parav Pandit & {\noindent transport-pci: Avoid first vq index reference\vspace{\baselineskip}


Drop reference to first virtqueue as it is already
covered now by the generic section in first patch.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Acked-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI-specific Initialization And Device Operation / Device Initialization}.
 } \\
\hline
a7a21e451987 & 19 May 2023 & Parav Pandit & {\noindent transport-mmio: Rename QueueNum register\vspace{\baselineskip}


These are further named differently between pci and mmio transport.
PCI transport indicates queue size as queue_size.

To bring consistency between pci and mmio transport,
rename the QueueNumMax and QueueNum
registers to QueueSizeMax and QueueSize respectively.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO / MMIO Device Register Layout},
and \ref{sec:Virtio Transport Options / Virtio Over MMIO / Legacy interface}.
 } \\
\hline
9ddc59553984 & 19 May 2023 & Parav Pandit & {\noindent transport-mmio: Avoid referring to zero based index\vspace{\baselineskip}


VQ range is already described in the first patch in basic virtqueue
section. Hence remove the duplicate reference to it.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Acked-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO / MMIO Device Register Layout},
and \ref{sec:Virtio Transport Options / Virtio Over MMIO / Legacy interface}.
 } \\
\hline
e7a764f66598 & 19 May 2023 & Parav Pandit & {\noindent transport-ccw: Rename queue depth/size to other transports\vspace{\baselineskip}


max_num field reflects the maximum queue size/depth. Hence align name of
this field with similar field in PCI and MMIO transport to
max_queue_size.
Similarly rename 'num' to 'size'.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Configuring a Virtqueue}.
 } \\
\hline
c3092410ac51 & 19 May 2023 & Parav Pandit & {\noindent transport-ccw: Refer to the vq by its index\vspace{\baselineskip}


Currently specification uses virtqueue index and
number interchangeably to refer to the virtqueue.

Instead refer to it by its index.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: Halil Pasic <pasic@linux.ibm.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Operation / Guest->Host Notification}.
 } \\
\hline
d6f310dbb3bf & 19 May 2023 & Parav Pandit & {\noindent virtio-net: Avoid duplicate receive queue example\vspace{\baselineskip}


Receive queue number/index example is duplicate which is already defined
in the Setting RSS parameters section.

Hence, avoid such duplicate example and prepare it for the subsequent
patch to describe using receive queue handle.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
da0e16928d0b & 19 May 2023 & Parav Pandit & {\noindent virtio-net: Describe RSS using rss rq id\vspace{\baselineskip}


The content of the indirection table and unclassified_queue were
originally described based on mathematical operations. In order to
make it easier to understand and to avoid intermixing the array
index with the vq index, introduce a structure
rss_rq_id (RSS receive queue
ID) and use it to describe the unclassified_queue and
indirection_table fields.

As part of it, have the example that uses non-zero virtqueue
index which helps to have better mapping between receiveX
object with virtqueue index and the actual value in the
indirection table.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
f9ff777fba59 & 19 May 2023 & Parav Pandit & {\noindent virtio-net: Update vqn to vq_index for cvq cmds\vspace{\baselineskip}


Replace field name vqn to vq_index for recent virtqueue level commands.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/163}

Reviewed-by: David Edmondson <david.edmondson@oracle.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Device Types / Network Device / Device Operation / Control Virtqueue}.
 } \\
\hline
74460ef69d5f & 19 May 2023 & Parav Pandit & {\noindent transport-mmio: Replace virtual queue with virtqueue\vspace{\baselineskip}


Basic facilities define the virtqueue construct for device <-> driver
communication.

PCI transport and individual devices description also refers to it as
virtqueue.

MMIO refers to it as 'virtual queue'.

Align MMIO transport description to call such object a virtqueue.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/168}

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

See \ref{sec:Virtio Transport Options / Virtio Over MMIO / MMIO Device Register Layout},
\ref{sec:Virtio Transport Options / Virtio Over MMIO / MMIO-specific Initialization And Device Operation / Virtqueue Configuration},
and \ref{sec:Virtio Transport Options / Virtio Over MMIO / Legacy interface}.
 } \\
\hline
6724756eaf0a & 07 Jul 2023 & Parav Pandit & {\noindent admin: Split opcode table rows with a line\vspace{\baselineskip}


Currently all opcode appears to be in a single row.
Separate them with a line similar to other tables.

\vspace{\baselineskip}
Signed-off-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

[CH: pushed as editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands}.
 } \\
\hline
1518c9ce2cde & 07 Jul 2023 & Parav Pandit & {\noindent admin: Fix section numbering\vspace{\baselineskip}


Requirements are put one additional level down. Fix it.

Signed-off-by: Parav Pandit <parav@nvidia.com>

Reviewed-by: Cornelia Huck <cohuck@redhat.com>

[CH: pushed as editorial update]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands}.
 } \\
\hline
9c3ba1ec6acb & 14 Jul 2023 & Heng Qi & {\noindent virtio-net: support inner header hash\vspace{\baselineskip}

\begin{enumerate}

\item Currently, a received encapsulated packet has an outer and an inner header, but
the virtio device is unable to calculate the hash for the inner header. The same
flow can traverse through different tunnels, resulting in the encapsulated
packets being spread across multiple receive queues (refer to the figure below).
However, in certain scenarios, we may need to direct these encapsulated packets of
the same flow to a single receive queue. This facilitates the processing
of the flow by the same CPU to improve performance (warm caches, less locking, etc.).

\begin{lstlisting}
               client1                    client2
                  |        +-------+         |
                  +------->|tunnels|<--------+
                           +-------+
                              |  |
                              v  v
                      +-----------------+
                      | monitoring host |
                      +-----------------+
\end{lstlisting}

To achieve this, the device can calculate a symmetric hash based on the inner headers
of the same flow.

\item  For legacy systems, they may lack entropy fields which modern protocols have in
the outer header, resulting in multiple flows with the same outer header but
different inner headers being directed to the same receive queue. This results in
poor receive performance.

To address this limitation, inner header hash can be used to enable the device to advertise
the capability to calculate the hash for the inner packet, regaining better receive performance.

\end{enumerate}

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/173}

Signed-off-by: Heng Qi <hengqi@linux.alibaba.com>

Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>

Reviewed-by: Parav Pandit <parav@nvidia.com>

[CH: added missing lstlisting and hyperref escapes, fixed references]

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types / Network Device / Feature bits},
\ref{sec:Device Types / Network Device / Feature bits / Feature bit requirements},
\ref{sec:Device Types / Network Device / Device configuration layout},
\ref{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets},
\ref{sec:Device Types / Network Device / Device Operation / Processing of Incoming Packets / Inner Header Hash},
\ref{sec:Conformance / Device Conformance / Network Device Conformance},
\ref{sec:Conformance / Driver Conformance / Network Driver Conformance},
and \ref{sec:Normative References}.
 } \\
\hline
73c2fd96af96 & 17 Jul 2023 & Haixu Cui & {\noindent virtio-spi: define the DEVICE ID for virtio SPI master\vspace{\baselineskip}


Define the DEVICE ID of virtio SPI master device as 45.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/174}

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Device Types}.
 } \\
\hline
03c2d32e5093 & 21 Jul 2023 & Parav Pandit & {\noindent admin: Add group member legacy register access commands\vspace{\baselineskip}


Introduce group member legacy common configuration and legacy device
configuration access read/write commands.

Group member legacy registers access commands enable group owner driver
software to access legacy registers on behalf of the guest virtual
machine.

\vspace{\baselineskip}
Usecase:

========

\begin{enumerate}

\item A hypervisor/system needs to provide transitional
   virtio devices to the guest VM at scale of thousands,
   typically, one to eight devices per VM.

\item A hypervisor/system needs to provide such devices using a
   vendor agnostic driver in the hypervisor system.

\item A hypervisor system prefers to have single stack regardless of
   virtio device type (net/blk) and be future compatible with a
   single vfio stack using SR-IOV or other scalable device
   virtualization technology to map PCI devices to the guest VM.
   (as transitional or otherwise)

\end{enumerate}

\vspace{\baselineskip}
Motivation/Background:

=====================

The existing virtio transitional PCI device is missing support for
PCI SR-IOV based devices. Currently it does not work beyond
PCI PF, or as software emulated device in reality. Currently it
has below cited system level limitations:

[a] PCIe spec citation:
VFs do not support I/O Space and thus VF BARs shall not indicate I/O Space.

[b] cpu arch citiation:
Intel 64 and IA-32 Architectures Software Developer’s Manual:
The processor’s I/O address space is separate and distinct from
the physical-memory address space. The I/O address space consists
of 64K individually addressable 8-bit I/O ports, numbered 0 through FFFFH.

[c] PCIe spec citation:
If a bridge implements an I/O address range,...I/O address range will be
aligned to a 4 KB boundary.

\vspace{\baselineskip}
Overview:

=========

Above usecase requirements is solved by PCI PF group owner accessing
its group member PCI VFs legacy registers using the administration
commands of the group owner PCI PF.

Two types of administration commands are added which read/write PCI VF
registers.

Software usage example:

=======================
\vspace{\baselineskip}

1. One way to use and map to the guest VM is by using vfio driver
framework in Linux kernel.

...
}\\
\hline
 & & & {\noindent
...

\begin{lstlisting}

                +----------------------+
                |pci_dev_id = 0x100X   |
+---------------|pci_rev_id = 0x0      |-----+
|vfio device    |BAR0 = I/O region     |     |
|               |Other attributes      |     |
|               +----------------------+     |
|                                            |
+   +--------------+     +-----------------+ |
|   |I/O BAR to AQ |     | Other vfio      | |
|   |rd/wr mapper\& |     | functionalities | |
|   | forwarder    |     |                 | |
|   +--------------+     +-----------------+ |
|                                            |
+------+-------------------------+-----------+
       |                         |
   Config region                 |
     access                Driver notifications
       |                         |
  +----+------------+       +----+------------+
  | +-----+         |       | PCI VF device A |
  | | AQ  |-------------+---->+-------------+ |
  | +-----+         |   |   | | legacy regs | |
  | PCI PF device   |   |   | +-------------+ |
  +-----------------+   |   +-----------------+
                        |
                        |   +----+------------+
                        |   | PCI VF device N |
                        +---->+-------------+ |
                            | | legacy regs | |
                            | +-------------+ |
                            +-----------------+
\end{lstlisting}

2. Continue to use the virtio pci driver to bind to the
   listed device id and use it as in the host.

3. Use it in a light weight hypervisor to run bare-metal OS.

\vspace{\baselineskip}
Fixes: \url{https://github.com/oasis-tcs/virtio-spec/issues/167}

Signed-off-by: Parav Pandit <parav@nvidia.com>

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Signed-off-by: Cornelia Huck <cohuck@redhat.com>

See \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands / Legacy Interface},
\ref{sec:Basic Facilities of a Virtio Device / Device groups / Group administration commands},
and \ref{sec:Conformance / Conformance Targets}.
 } \\
\hline
