[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: [PATCH v5 4/4] transport-pci: Introduce group legacy group member config region access
This patch links how in a PCI transport a group owner can access group member (PCI VFs) legacy registers using a legacy registers access commands using administration virtqueue infrastructure. Additionally it extend the PCI notification capability through which a PCI VF device indicates to the driver which PCI BAR region to be used for driver notifications. Fixes: https://github.com/oasis-tcs/virtio-spec/issues/167 Signed-off-by: Parav Pandit <parav@nvidia.com> --- changelog: v4->v5: - split pci transport and generic command section to new patch - removed multiple references to the VF - written the description of the command as generic with member and group device terminology - reflected many section names to remove VF v3->v4: - moved noted to the conformance section details in next patch - removed queue notify address query AQ command on Michael's suggestion, though it is fine. Instead replaced with extending virtio_pci_notify_cap to indicate that legacy queue notifications can be done on the notification location. - fixed spelling errors. - replaced administrative virtqueue to administration virtqueue - added queue notification capability register to indicate legacy q notification supported v2->v3: - adddressed Jason and Michael's comment to split single register access command to common config and device specific commands. - dropped the suggetion to introduce enable/disable command as admin command cap bit already covers it. v1->v2: - addressed comments from Michael - added theory of operation - grammar corrections - removed group fields description from individual commands as it is already present in generic section - added endianness normative for legacy device registers region - renamed the file to drop vf and add legacy prefix - added overview in commit log - renamed subsection to reflect command --- conformance.tex | 3 +++ transport-pci-legacy-regs.tex | 46 +++++++++++++++++++++++++++++++++++ transport-pci.tex | 19 +++++++++++++++ 3 files changed, 68 insertions(+) create mode 100644 transport-pci-legacy-regs.tex diff --git a/conformance.tex b/conformance.tex index 6bac4b0..93f409c 100644 --- a/conformance.tex +++ b/conformance.tex @@ -267,6 +267,9 @@ \section{Conformance Targets}\label{sec:Conformance / Conformance Targets} \item Section \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Legacy Interfaces: A Note on PCI Device Layout} \item Section \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI-specific Initialization And Device Operation / Device Initialization / Virtio Device Configuration Layout Detection / Legacy Interface: A Note on Device Layout Detection} \item Section \ref{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI-specific Initialization And Device Operation / Device Initialization / Virtqueue Configuration / Legacy Interface: A Note on Virtqueue Configuration} +\item Section \ref{devicenormative:Virtio Transport Options / Virtio Over PCI Bus / Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access} +\item Section \ref{drivernormative:Virtio Transport Options / Virtio Over PCI Bus / Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access} +\item Section \ref{par:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Legacy Interfaces: Notification capability} \item Section \ref{sec:Virtio Transport Options / Virtio Over MMIO / Legacy interface} \item Section \ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Setting the Virtio Revision / Legacy Interfaces: A Note on Setting the Virtio Revision} \item Section \ref{sec:Virtio Transport Options / Virtio over channel I/O / Device Initialization / Configuring a Virtqueue / Legacy Interface: A Note on Configuring a Virtqueue} diff --git a/transport-pci-legacy-regs.tex b/transport-pci-legacy-regs.tex new file mode 100644 index 0000000..a25b586 --- /dev/null +++ b/transport-pci-legacy-regs.tex @@ -0,0 +1,46 @@ +\subsection{Legacy Interfaces: Group member device Configuration Region Access}\label{sec:Virtio Transport Options / Virtio Over PCI Bus / Legacy Interfaces: Group Member Device Configuration Region Access} + +As described in PCIe base specification \hyperref[intro:PCIe]{[PCIe]} PCI VFs +do not support the I/O space BAR. Due to this limitation, a PCI VF hardware +device that supports legacy interfaces cannot be attached as passthrough +device to the guest virtual machine. + +To have a transitional or legacy virtio device in the guest virtual machine, +a PCI PF device as a group owner may support accessing its group member +device's legacy configuration region using the group administration commands +listed at \ref{sec:Basic Facilities of a Virtio Device / Device groups / Group +administration commands / Legacy Interfaces: legacy configuration access commands}. +These legacy configuration access commands are transported via the +administration virtqueue. This mechanism enables minimal involvement of the +hypervisor software only for the purpose of the legacy configuration region access. + +When a guest virtual machine requests legacy configuration and device +specific regions of group member device, a hypervisor software accesses +it using an administration virtqueue on behalf of the guest virtual machine. + +Even though virtqueue driver notifications can be communicated through +administration virtqueue, if the group member device support such +notifications using a memory-mapped operation, such driver notifications +are sent using a group member device defined notification region. + +The group owner device should not expose PCI BAR0 for the group member +devices when it prefers to support legacy interface for legacy configuration +access using its group owner. +This facilitates hypervisor software to operate with least amount of +complexities to emulate the legacy interface I/O space BAR and passthrough +other PCI BARs and PCI device capabilities to the guest virtual machine +without any translation. + +\devicenormative{\subsubsection}{Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access}{Virtio Transport Options / Virtio Over PCI Bus / Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access} + +When a PCI SR-IOV group owner device supports +VIRTIO_ADMIN_CMD_LEGACY_COMMON_CFG_READ, +VIRTIO_ADMIN_CMD_LEGACY_COMMON_CFG_WRITE, VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_READ, +VIRTIO_ADMIN_CMD_LEGACY_DEV_CFG_WRITE commands, the group owner device SHOULD +NOT expose PCI BAR0 in the SR-IOV Extended capability. This is to facilitate the +software to emulate I/O region BAR0 for supporting the legacy interface. + +\drivernormative{\subsubsection}{Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access}{Virtio Transport Options / Virtio Over PCI Bus / Legacy Interfaces Requirements: Group Member Device Legacy Configuration Access} + +The driver SHOULD NOT emulate I/O region BAR0 if a device group member exposes +a PCI BAR0. diff --git a/transport-pci.tex b/transport-pci.tex index a5c6719..42bc104 100644 --- a/transport-pci.tex +++ b/transport-pci.tex @@ -541,6 +541,7 @@ \subsubsection{Notification structure layout}\label{sec:Virtio Transport Options struct virtio_pci_notify_cap { struct virtio_pci_cap cap; le32 notify_off_multiplier; /* Multiplier for queue_notify_off. */ + u8 legacy_q_notify_supported; }; \end{lstlisting} @@ -560,6 +561,14 @@ \subsubsection{Notification structure layout}\label{sec:Virtio Transport Options the same Queue Notify address for all queues. \end{note} +\field{legacy_q_notify_supported} when set to 1, indicates that the device +supports legacy queue notifications at this notification location. Legacy Queue +Notification address is derived within a BAR for a virtqueue: + +\begin{lstlisting} + cap.offset +\end{lstlisting} + \devicenormative{\paragraph}{Notification capability}{Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Notification capability} The device MUST present at least one notification capability. @@ -596,6 +605,14 @@ \subsubsection{Notification structure layout}\label{sec:Virtio Transport Options cap.length >= queue_notify_off * notify_off_multiplier + 4 \end{lstlisting} +\paragraph{Legacy Interfaces: Notification capability}\label{par:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Legacy Interfaces: Notification capability} + +The device SHOULD set \field{legacy_q_notify_supported} when the device +notification location supports legacy driver notifications. + +The driver in the hypervisor MAY use notification location for accessing +legacy queue notify address when the device supports it. + \subsubsection{ISR status capability}\label{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / ISR status capability} The VIRTIO_PCI_CAP_ISR_CFG capability @@ -1212,3 +1229,5 @@ \subsubsection{Driver Handling Interrupts}\label{sec:Virtio Transport Options / re-examine the configuration space to see what changed. \end{itemize} \end{itemize} + +\input{transport-pci-legacy-regs.tex} -- 2.26.2
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]