virtio — archive
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
— [Date Index]
| [Thread Index]
| [Month Index]
| [List Home]
[PATCH 00/10] for review Feb 11 patches on top of virtio@224
There's some mixup wrt device/driver in Rusty's rearrangement of PCI devices, correct the confirmance clauses to list requirement against the correct entity. Signed-off-by: Michael S. Tsirkin <[email protected]> --- content.tex
67 ++++++++++++++++++++++++++++++++++++++++++
-------------------
1 file changed, 46 insertions(+), 21 deletions(-) diff --git a/content.tex b/content.tex index bb28100..2da2d63 100644 --- a/content.tex +++ b/content.tex @@ -875,8 +875,12 @@ struct virtio_pci_cap { end{lstlisting}
This structure can be followed by extra data, depending on -field{cfg_type}, as documented below. The device MAY append extra data -or padding to any structure beyond that, the device MUST accept a field{cap_len} value +field{cfg_type}, as documented below. In this case device MUST +include this extra data (from the beginning of the field{cap_vndr} +through end of the extra data fields if any) +in the capability length as specified by field{cap_len}. +The device MAY append extra data +or padding to any structure beyond that; the driver MUST accept a field{cap_len} value which is larger than specified here.
The fields are interpreted as follows: @@ -939,7 +943,7 @@ The fields are interpreted as follows:
item[field{offset}]
indicates where the structure begins relative to the base address associated -
with the BAR. The alignment requirement of field{offset} are indicated +
with the BAR. The alignment requirements of field{offset} are indicated
in each structure-specific section below.
item[field{length}] @@ -956,8 +960,9 @@ The fields are interpreted as follows:
For example, a future device might present a large structure size of several
MBytes.
As current devices never utilize structures larger than 4KBytes in size, -
driver can limit the mapped structure size to e.g. -
4KBytes to allow forward compatibility with such devices without loss of +
driver may limit the mapped structure size to e.g. +
4KBytes (thus ignoring parts of structure after the first +
4KBytes) to allow forward compatibility with such devices without loss of
functionality and without wasting resources. end{description}
@@ -1006,10 +1011,13 @@ struct virtio_pci_common_cfg { item[field{driver_feature_select}]
The driver uses this to select which feature bits field{driver_feature} shows.
Value 0x0 selects Feature Bits 0 to 31, 0x1 selects Feature Bits 32 to 63. -
When set to any other value, the device MUST return 0 on reads from field{driver_feature} -
return 0, and ignore writing of 0 into field{driver_feature}. The driver -
MUST not write any other value into field{driver_feature} (a corollary of +
When set to any other value: + egin{itemize} + item the device MUST return 0 on reads from the driver_feature field + item the device MUST ignore writing of 0 into the driver_feature field + item the driver MUST NOT write any non 0 value into driver_feature (a corollary of
the rule that the driver can only write a subset of device features). + end{itemize}
item[field{driver_feature}]
The driver writes this to accept feature bits offered by the device. @@ -1081,11 +1089,8 @@ struct virtio_pci_notify_cap { }; end{lstlisting}
-The device MUST present an even field{cap.length} of at least 2. - -The device MUST present field{notify_off_multiplier} as an even power of 2, -or 0. The device MUST ignore a capability with field{notify_off_multiplier} -of 1. +The device MUST either present notify_off_multiplier as an even power of 2, +or present notify_off_multiplier as 0.
field{notify_off_multiplier} is combined with the field{queue_notify_off} to derive the Queue Notify address within a BAR for a specific queue: @@ -1094,13 +1099,21 @@ derive the Queue Notify address within a BAR for a specific queue:
cap.offset + queue_notify_off * notify_off_multiplier end{lstlisting}
-The field{bar}, field{offset} and field{notify_off_multiplier} are taken from the +The field{cap.offset} and field{notify_off_multiplier} are taken from the notification capability structure above, and the field{queue_notify_off} is taken from the common configuration structure.
For example, if field{notifier_off_multiplier} is 0, all queues will use the same
Queue Notify address.
+The value field{cap.length} presented by the device MUST be at least 2 +and MUST be large enough to support queue notification offsets +for all supported queues in all possible configurations. +For all queues, the value field{cap.length} presented by the device MUST satisty: +egin{lstlisting} + cap.length >= queue_notify_off * notify_off_multiplier + 2 +end{lstlisting} + subsubsection{ISR status capability}label{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / ISR status capability}
The device MUST present at least one VIRTIO_PCI_CAP_ISR_CFG capability. This @@ -1136,6 +1149,9 @@ struct virtio_pci_cfg_cap { }; end{lstlisting}
+The fields field{cap.bar}, field{cap.legth}, field{cap.offset} and +field{pci_cfg_data} are read-write (RW). + To access a device region, the driver writes into the capability structure (ie. within the PCI configuration space) as follows:
@@ -1150,13 +1166,22 @@ structure (ie. within the PCI configuration space) as follows:
a multiple of field{cap.length} (ie. all accesses must be aligned). end{itemize}
-At that point, the pci_cfg_data field will provide a window of size -field{cap.length} into the given field{cap.bar} at offset field{cap.offset}: writes will -have the same effect as writes into the BAR, and reads will have the -same effect and return the same value as reads from the BAR. +At that point, field{pci_cfg_data} will provide a window of size +field{cap.length} into the given field{cap.bar} at offset +field{cap.offset} : writes into field{pci_cfg_data} will +have the same effect as writes into the BAR, and reads will have +the same effect and return the same value as reads from the BAR. + +Upon detecting driver write access to field{pci_cfg_data} field, +device MUST execute a write access of length field{cap.length} +at offset field{cap.offset} at BAR selected by field{cap.bar} +using the first field{cap.length} bytes in pci_cfg_data.
-The driver MUST perform reads/writes from/to pci_cfg_data of the same -width as given by field{cap.length}. +Upon detecting driver read access to field{pci_cfg_data} field, +device MUST execute a read access of length field{cap.length} at +offset field{cap.offset} at BAR selected by field{cap.bar} and +store the result in the first field{cap.length} bytes in +pci_cfg_data.
subsubsection{Legacy Interfaces: A Note on PCI Device Layout}label{sec:Virtio Transport Options / Virtio Over PCI Bus / PCI Device Layout / Legacy Interfaces: A Note on PCI Device Layout}
@@ -1369,7 +1394,7 @@ If an interrupt is necessary for a virtqueue, the device SHOULD:
device, field{queue_msix_vector} sets the MSI-X Table entry
number.
-
item If the vector field value is NO_VECTOR, no interrupt +
item If the vector value is NO_VECTOR, no interrupt
message is requested for this event, so the device MUST NOT
deliver an interrupt.
end{enumerate}
--
MST
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
— [Date Index]
| [Thread Index]
| [Month Index]
| [List Home]