OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

virtio-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: [PATCH v5 4/7] transport-fabrics: introduce command set


Introduce command set for Virtio-oF which includes:
- command id: a tag to distinguish in-flight commands
- status: indicate the result of a Virtio-oF command
- opcodes: the Virtio-oF transport layer commands use 0x0000-0x0fff,
          and the device layer commands use 0x1000-0xffff.
	  get/set status/feature/config use consecutive number.

Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
---
 transport-fabrics.tex | 620 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 620 insertions(+)

diff --git a/transport-fabrics.tex b/transport-fabrics.tex
index d562b2c..d794b16 100644
--- a/transport-fabrics.tex
+++ b/transport-fabrics.tex
@@ -113,3 +113,623 @@ \subsubsection{Keyed Data Transfers}\label{sec:Virtio Transport Options / Virtio
      |COMP|     |COMP|     |COMP|
      +----+     +----+     +----+
 \end{lstlisting}
+
+
+\subsection{Commands Definition}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition}
+This section defines data structures, opcodes, and status for Virtio-oF.
+A Virtio-oF command is fixed to 16 bytes, and a Virtio-oF completion is fixed to 16 bytes.
+Note that the reserved fields of Virtio-oF commands and completions are filled with zero.
+
+\subsubsection{Command ID}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Command ID}
+The Command ID (le16 type) is used to uniquely describe a Virtio-oF PDU for identification.
+Generally, the Virtio-oF initiator allocates a Command ID that is unique for all in-flight commands,
+and the Virtio-oF target specifies the same Command ID for completion.
+
+Command IDs 0xff00 - 0xffff are reserved for the Virtio-oF control queue asynchronous events.
+The reserved Command IDs for the Virtio-oF control queue are as follows:
+
+\begin{tabular}{ |l|l| }
+\hline
+Command ID & Description \\
+\hline \hline
+0xfffe & Config change. Causes the initiator to generate a configuration change notification \\
+\hline
+0xffff & Keepalive. The initiator ignores this event \\
+\hline
+0xff00 - 0xfffd & Reserved \\
+\hline
+\end{tabular}
+
+\subsubsection{Status}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Status}
+The Status (le16 type) of a Virtio-oF completion is used to indicate the result of a Virtio-oF command in detail.
+The status values are defined as follows:
+
+\begin{lstlisting}
+/* command executed successfully */
+#define VIRTIO_OF_STATUS_SUCCESS       0x0000
+
+/* unrecognized command, or disabled command due to unsupported feature */
+#define VIRTIO_OF_STATUS_ENOCMD        0x0001
+/* in-flight commands exceeded queue size */
+#define VIRTIO_OF_STATUS_ECMDQUOT      0x0002
+
+/* no such target specified by TVQN */
+#define VIRTIO_OF_STATUS_ENOTGT        0x1001
+/* failed to create Virtio-oF device instance */
+#define VIRTIO_OF_STATUS_ENODEV        0x1002
+/* rejected due to access control */
+#define VIRTIO_OF_STATUS_EACLREJECTED  0x1003
+/* bad Virtio-oF device instance ID */
+#define VIRTIO_OF_STATUS_EBADDEV       0x1010
+/* invalid VQN or mismatched TVQN/IVQN from Virtio-oF device instance */
+#define VIRTIO_OF_STATUS_EBADVQN       0x1011
+/* Virtio-oF virtqueue index exceeded */
+#define VIRTIO_OF_STATUS_EQUEUEQUOT    0x1020
+/* Virtio-oF virtqueue is already in use */
+#define VIRTIO_OF_STATUS_EQUEUEBUSY    0x1021
+/* Virtio-oF virtqueue size exceeded */
+#define VIRTIO_OF_STATUS_EQSIZEQUOT    0x1022
+
+/* unsupported Virtio-oF feature */
+#define VIRTIO_OF_STATUS_EFEATURE      0x2000
+/* unsupported Virtio-oF device instance status */
+#define VIRTIO_OF_STATUS_ESTATUS       0x2010
+/* unsupported Virtio-oF device instance feature */
+#define VIRTIO_OF_STATUS_EDEVFEATURE   0x2020
+/* unsupported offset/bytes of device configuration space */
+#define VIRTIO_OF_STATUS_ECONFOFF      0x2030
+/* unsupported bytes of device configuration space */
+#define VIRTIO_OF_STATUS_ECONFBYTES    0x2031
+/* failed to read device-readable virtqueue buffers */
+#define VIRTIO_OF_STATUS_EOUTVQBUF     0x20f0
+/* failed to write device-writable virtqueue buffers */
+#define VIRTIO_OF_STATUS_EINVQBUF      0x20f1
+\end{lstlisting}
+
+\subsubsection{Opcodes}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes}
+Opcodes (u16 type) of Virtio-oF Commands are as follows:
+
+\begin{lstlisting}
+#define virtio_of_op_connect               0x0000
+#define virtio_of_op_disconnect            0x0001
+#define virtio_of_op_keepalive             0x0002
+#define virtio_of_op_get_feature           0x0004
+#define virtio_of_op_set_feature           0x0005
+#define virtio_of_op_get_keyed_num_descs   0x0100
+#define virtio_of_op_vq                    0x0fff
+#define virtio_of_op_get_vendor_id         0x1000
+#define virtio_of_op_get_device_id         0x1001
+#define virtio_of_op_reset_device          0x1003
+#define virtio_of_op_get_status            0x1004
+#define virtio_of_op_set_status            0x1005
+#define virtio_of_op_get_device_feature    0x1006
+#define virtio_of_op_set_driver_feature    0x1009
+#define virtio_of_op_get_vq_size           0x100a
+#define virtio_of_op_get_config            0x100c
+#define virtio_of_op_set_config            0x100d
+\end{lstlisting}
+
+\paragraph{Connect Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Connect Command}
+
+The Connect Command is used to establish a Virtio-oF queue for both the Virtio-oF control queue and Virtio-oF virtqueue, it is always the first command to execute on a Virtio-oF queue.
+
+The structure of the Connect Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_connect {
+        /* opcode is virtio_of_op_connect */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* Virtio-oF device instance ID. 0xffff is reserved for the Virtio-oF control queue */
+        le16 device_instance_id;
+        /* used by Virtio-oF virtqueue only, equal to virtqueue index */
+        le16 vq_index;
+        /* the length of the Connect Body */
+        le32 length;
+#define VIRTIO_OF_CONTROL_QUEUE_SIZE 32
+        /* the size of a Virtio-oF queue, 0 means the maximum queue size supported */
+        le16 queue_size;
+        u8 reserved[2];
+};
+\end{lstlisting}
+
+The structure of the Connect Body is as follows:
+\begin{lstlisting}
+struct virtio_of_connect {
+        /* Virtio-oF initiator VQN */
+        u8 ivqn[256];
+        /* Virtio-oF target VQN */
+        u8 tvqn[256];
+        u8 reserved[512];
+};
+\end{lstlisting}
+
+The structure of the Connect Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_connect {
+        le16 status;
+        le16 command_id;
+        /* Virtio-oF device instance ID */
+        le16 device_instance_id;
+        u8 reserved[10];
+};
+\end{lstlisting}
+
+The Connect Command, Body, and Completion have the following usages:
+\begin{itemize}
+\item The Virtio-oF initiator specifies \texttt{device_instance_id} of 0xffff in the Connect command
+and Virtio-oF initiator/target VQN in the Connect Body to establish the Virtio-oF control queue first.
+\item The Virtio-oF target allocates any available ID for a newly created Virtio-oF device instance,
+and specifies the \texttt{device_instance_id} of the new Virtio-oF device instance ID in the Connect Completion.
+\item The Virtio-oF initiator specifies the Virtio-oF device instance ID and \texttt{vq_index} to establish Virtio-oF virtqueues one by one.
+The Connect Body is optional for the Virtio-oF virtqueues, once a Virtio-oF virtqueue issues a Connect Command without Connect Body, the Virtio-oF virtqueue uses the same Connect Body as the Virtio-oF control queue.
+\end{itemize}
+
+\paragraph{Disconnect Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Disconnect Command}
+
+The Disconnect Command is used to gracefully disconnect both the Virtio-oF control queue and Virtio-oF virtqueue. All in-flight commands are completed upon receipt of the Disconnect Completion.
+
+The structure of the Disconnect Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_disconnect {
+        /* opcode is virtio_of_op_disconnect */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Disconnect Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_disconnect {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The Disconnect Command and Completion have the following usages:
+\begin{itemize}
+\item The Virtio-oF initiator should disconnect the Virtio-oF virtqueues before the Virtio-oF control queue.
+\item Once the Virtio-oF control queue is disconnected, the Virtio-oF device instance and associated resources should be destroyed.
+\item If the underlying transport connection of a Virtio-oF queue is disconnected without issuing the Disconnect Command, the in-flight commands are not guaranteed to execute successfully.
+\end{itemize}
+
+\paragraph{Keepalive Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Keepalive Command}
+The Keepalive Command is used as a health check mechanism to detect when a Virtio-oF device instance becomes unavailable, it is used for the Virtio-oF control queue only.
+Once the Virtio-oF device instance becomes unavailable, the initiator should disconnect all the Virtio-oF queues and release associated resources.
+
+The structure of the Keepalive Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_keepalive {
+        /* opcode is virtio_of_op_keepalive */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Keepalive Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_keepalive {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+\paragraph{Get Feature Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Feature Command}
+The Get Feature Command is used to get feature bits of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Feature Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_feature {
+        /* opcode is virtio_of_op_get_feature */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* value 0x0 selects feature bits 0 to 63, 0x1 selects feature bits 64 to 127, etc */
+        le32 feature_select;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+The structure of the Get Feature Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_feature {
+        le16 status;
+        le16 command_id;
+        u8 reserved[4];
+        /* feature bits */
+        le64 feature;
+};
+\end{lstlisting}
+
+The feature bits of a Virtio-oF device instance are as follows:
+\begin{lstlisting}
+/* support virtio_of_op_get_keyed_num_descs to get the maximum number of keyed descriptors */
+#define VIRTIO_OF_F_KEYED_NUM_DESCS            0
+\end{lstlisting}
+
+\paragraph{Set Feature Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Set Feature Command}
+The Set Feature Command is used to set the feature bits of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Set Feature Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_set_feature {
+        /* opcode is virtio_of_op_set_feature */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* value 0x0 selects feature bits 0 to 63, 0x1 selects feature bits 64 to 127, etc */
+        le32 feature_select;
+        /* feature bits */
+        le64 feature;
+};
+\end{lstlisting}
+
+The structure of the Set Feature Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_set_feature {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+Note: it is recommended that the
+\nameref{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Feature Command}
+and Set Feature Command should be executed upon the establishment of the Virtio-oF control queue for feature negotiation.
+However, they are allowed to be executed during the Virtio-oF control queue lifecycle.
+
+\paragraph{Get Keyed Number Descriptors Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Keyed Number Descriptors Command}
+The Get Keyed Number Descriptors Command is used to get the maximum number of keyed descriptors of Virtio-oF virtqueues, it is executed on the Virtio-oF control queue.
+
+The structure of the Get Keyed Number Descriptors Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_keyed_num_descs {
+        /* opcode is virtio_of_op_get_keyed_num_descs */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Get Keyed Number Descriptors Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_keyed_num_descs {
+        le16 status;
+        le16 command_id;
+        /* the maximum number of keyed descriptors */
+        u8 descs;
+        u8 reserved[11];
+};
+\end{lstlisting}
+
+\paragraph{VQ Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / VQ Command}
+The VQ Command is used to transmit virtqueue buffers for Virtio-oF virtqueue only.
+
+The structure of the VQ Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_vq {
+        /* opcode is virtio_of_op_vq */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[4];
+        /* the length of device-readable virtqueue buffers */
+        le32 out_length;
+        /* the length of device-writable virtqueue buffers */
+        le32 in_length;
+};
+\end{lstlisting}
+
+The structure of the VQ Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_vq {
+        le16 status;
+        le16 command_id;
+        u8 reserved[4];
+	/* total length of the command which was used, this is less than or equal to in_length */
+        le32 length;
+        /* the length of virtqueue buffers from Virtio-oF target */
+        le32 in_length;
+};
+\end{lstlisting}
+
+For \nameref{sec:Virtio Transport Options / Virtio Over Fabrics / Protocol Data Unit/ Stream Data Transfers},
+\texttt{out_length} of virtio_of_command_vq describes the following bytes in a request Virtio-oF PDU,
+and \texttt{length} of virtio_of_completion_vq describes the following bytes in a response Virtio-oF PDU.
+
+For \nameref{sec:Virtio Transport Options / Virtio Over Fabrics / Protocol Data Unit/ Keyed Data Transfers},
+there are 1 or more keyed descriptors (virtio_of_keyed_desc type) in a request Virtio-oF PDU to describe the virtqueue buffers of \texttt{out_length + in_length} bytes,
+and \texttt{length} of virtio_of_completion_vq describes the number of bytes written into the device writable portion of the buffer described by the keyed descriptors.
+
+\paragraph{Get Vendor ID Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Vendor ID Command}
+The Get Vendor ID Command is used to get the Virtio Vendor ID of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Vendor ID Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_vendor_id {
+        /* opcode is virtio_of_op_get_vendor_id */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Get Vendor ID Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_vendor_id {
+        le16 status;
+        le16 command_id;
+        /* Virtio Vendor ID */
+        le32 vendor_id;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+\paragraph{Get Device ID Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Device ID Command}
+The Get Device ID Command is used to get the Virtio Device ID of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Device ID Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_device_id {
+        /* opcode is virtio_of_op_get_device_id */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Get Device ID Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_device_id {
+        le16 status;
+        le16 command_id;
+        /* Virtio Device ID */
+        le32 device_id;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+\paragraph{Reset Device Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Reset Device Command}
+The Reset Device Command is used to reset a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Reset Device Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_reset_device {
+        /* opcode is virtio_of_op_reset_device */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Reset Device Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_reset_device {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+\paragraph{Get Status Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Status Command}
+The Get Status Command is used to get the status of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Status Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_status {
+        /* opcode is virtio_of_op_get_status */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+The structure of the Get Status Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_status {
+        le16 status;
+        le16 command_id;
+        /* status of the Virtio-oF device instance */
+        le32 dev_status;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+\paragraph{Set Status Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Set Status Command}
+The Set Status Command is used to set the status of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Set Status Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_set_status {
+        /* opcode is virtio_of_op_set_status */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* status of the Virtio-oF device instance */
+        le32 status;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+The structure of the Set Status Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_set_status {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+\paragraph{Get Device Feature Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Device Feature Command}
+The Get Device Feature Command is used to get virtio device feature bits of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Device Feature Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_device_feature {
+        /* opcode is virtio_of_op_get_device_feature */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* value 0x0 selects feature bits 0 to 63, 0x1 selects feature bits 64 to 127, etc */
+        le32 feature_select;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+The structure of the Get Device Feature Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_device_feature {
+        le16 status;
+        le16 command_id;
+        u8 reserved[4];
+        /* feature bits */
+        le64 feature;
+};
+\end{lstlisting}
+
+\paragraph{Set Driver Feature Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Set Driver Feature Command}
+The Set Driver Feature Command is used to set virtio driver feature bits of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Set Driver Feature Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_set_driver_feature {
+        /* opcode is virtio_of_op_set_driver_feature */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* value 0x0 selects feature bits 0 to 63, 0x1 selects feature bits 64 to 127, etc */
+        le32 feature_select;
+        /* feature bits */
+        le64 feature;
+};
+\end{lstlisting}
+
+The structure of the Set Driver Feature Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_set_driver_feature {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+\paragraph{Get VQ Size Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get VQ Size Command}
+The Get VQ Size Command is used to get the maximum queue size of a Virtio-oF virtqueue for the Virtio-oF control queue only.
+
+The structure of the Get VQ Size Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_vq_size {
+        /* opcode is virtio_of_op_get_vq_size */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* the Virtio-oF virtqueue index */
+        le16 vq_index;
+        u8 reserved[10];
+};
+\end{lstlisting}
+
+The structure of the Get VQ Size Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_vq_size {
+        le16 status;
+        le16 command_id;
+        /* size of Virtio-oF virtqueues */
+        le16 size;
+        u8 reserved[10];
+};
+\end{lstlisting}
+
+Note: the Virtio-oF control queue has a fixed queue size, the Virtio-oF initiator can specify a smaller Virtio-oF virtqueue size by
+\nameref{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Connect Command}.
+
+\paragraph{Get Config Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Config Command}
+The Get Config Command is used to get the device configuration space of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Get Config Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_get_config {
+        /* opcode is virtio_of_op_get_config */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* offset of device configuration space */
+        le16 offset;
+        /* bytes to get, available values: 1, 2, 4, 8 */
+        u8 bytes;
+        u8 reserved[9];
+};
+\end{lstlisting}
+
+The structure of the Get Config Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_get_config {
+        le16 status;
+        le16 command_id;
+        /* generation count for the device configuration space */
+        le32 generation;
+        /* v is u8, u16, u32, or u64, then: v = (typeof v)le64_to_cpu(config) */
+        le64 config;
+};
+\end{lstlisting}
+
+\paragraph{Set Config Command}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Set Config Command}
+The Set Config Command is used to set the device configuration space of a Virtio-oF device instance for the Virtio-oF control queue only.
+
+The structure of the Set Config Command structure is as follows:
+\begin{lstlisting}
+struct virtio_of_command_set_config {
+        /* opcode is virtio_of_op_set_config */
+        le16 opcode;
+        /* unique ID for all in-flight commands */
+        le16 command_id;
+        /* offset of device configuration space */
+        le16 offset;
+        /* bytes to get, available values: 1, 2, 4, 8 */
+        u8 bytes;
+        u8 reserved;
+        /* v is u8, u16, u32, or u64, then: config = cpu_to_le64((u64)v) */
+        le64 config;
+};
+\end{lstlisting}
+
+The structure of the Set Config Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_set_config {
+        le16 status;
+        le16 command_id;
+        u8 reserved[12];
+};
+\end{lstlisting}
+
+\paragraph{Config Change Completion}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Config Change Completion}
+A Config Change Completion is used as a configuration change notification of a Virtio-oF device instance for the Virtio-oF control queue only.
+Note: only a single outstanding Config Change Completion is allowed, the configuration change notification is suppressed until the Virtio-oF initiator issues a
+\nameref{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Get Config Command}.
+
+The structure of the Config Change Completion is as follows:
+\begin{lstlisting}
+struct virtio_of_completion_config_change {
+        le16 status;
+        /* command_id is 0xfffe */
+        le16 command_id;
+        /*  generation count for the device configuration space */
+        le32 generation;
+        u8 reserved[8];
+};
+\end{lstlisting}
+
+\paragraph{Keepalive Completion}\label{sec:Virtio Transport Options / Virtio Over Fabrics / Commands Definition / Opcodes / Keepalive Completion}
+A Keepalive Completion is used as a health check mechanism to detect when a Virtio-oF initiator becomes unavailable, it is used by a Virtio-oF device instance for the Virtio-oF control queue only.
+Once the Virtio-oF initiator becomes unavailable, the Virtio-oF target should destroy the Virtio-oF device instance and associated resources.
-- 
2.25.1



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]