diff options
Diffstat (limited to 'virtio-v1.0-wd01-part1-specification.txt')
-rw-r--r-- | virtio-v1.0-wd01-part1-specification.txt | 156 |
1 files changed, 78 insertions, 78 deletions
diff --git a/virtio-v1.0-wd01-part1-specification.txt b/virtio-v1.0-wd01-part1-specification.txt index d1b15c6..579f9f6 100644 --- a/virtio-v1.0-wd01-part1-specification.txt +++ b/virtio-v1.0-wd01-part1-specification.txt @@ -1222,8 +1222,8 @@ space. In this case: ---------------------- Virtual environments without PCI support (a common situation in -embedded devices models) might use simple memory mapped device (“ -virtio-mmio”) instead of the PCI device. +embedded devices models) might use simple memory mapped device +("virtio-mmio") instead of the PCI device. The memory mapped virtio device behaviour is based on the PCI device specification. Therefore most of operations like device @@ -1234,8 +1234,8 @@ following sections. 2.3.2.1. MMIO Device Discovery ----------------------------- -Unlike PCI, MMIO provides no generic device discovery. For systems using -a device-tree such as Linux's dtc or Open Firmware, the suggested format is: +Unlike PCI, MMIO provides no generic device discovery. For +systems using Flattened Device Trees the suggested format is: virtio_block@1e000 { compatible = "virtio,mmio"; @@ -1250,140 +1250,140 @@ MMIO virtio devices provides a set of memory mapped control registers, all 32 bits wide, followed by device-specific configuration space. The following list presents their layout: -• Offset from the device base address | Direction | Name - Description +* Offset from the device base address | Direction | Name + Description -• 0x000 | R | MagicValue - “virt” string. +* 0x000 | R | MagicValue + "virt" string. -• 0x004 | R | Version - Device version number. Currently must be 1. +* 0x004 | R | Version + Device version number. Currently must be 1. -• 0x008 | R | DeviceID - Virtio Subsystem Device ID (ie. 1 for network card). +* 0x008 | R | DeviceID + Virtio Subsystem Device ID (ie. 1 for network card). -• 0x00c | R | VendorID - Virtio Subsystem Vendor ID. +* 0x00c | R | VendorID + Virtio Subsystem Vendor ID. -• 0x010 | R | HostFeatures - Flags representing features the device supports. - Reading from this register returns 32 consecutive flag bits, +* 0x010 | R | HostFeatures + Flags representing features the device supports. + Reading from this register returns 32 consecutive flag bits, first bit depending on the last value written to - HostFeaturesSel register. Access to this register returns bits HostFeaturesSel*32 - - to (HostFeaturesSel*32)+31, eg. feature bits 0 to 31 if - HostFeaturesSel is set to 0 and features bits 32 to 63 if - HostFeaturesSel is set to 1. Also see "2.1.2. Feature Bits". - -• 0x014 | W | HostFeaturesSel - Device (Host) features word selection. - Writing to this register selects a set of 32 device feature bits + HostFeaturesSel register. Access to this register returns + bits HostFeaturesSel*32 to (HostFeaturesSel*32)+31, eg. + feature bits 0 to 31 if HostFeaturesSel is set to 0 and + features bits 32 to 63 if HostFeaturesSel is set to 1. + Also see "2.1.2. Feature Bits". + +* 0x014 | W | HostFeaturesSel + Device (Host) features word selection. + Writing to this register selects a set of 32 device feature bits accessible by reading from HostFeatures register. Device driver must write a value to the HostFeaturesSel register before reading from the HostFeatures register. -• 0x020 | W | GuestFeatures - Flags representing device features understood and activated by +* 0x020 | W | GuestFeatures + Flags representing device features understood and activated by the driver. - Writing to this register sets 32 consecutive flag bits, first + Writing to this register sets 32 consecutive flag bits, first bit depending on the last value written to GuestFeaturesSel register. Access to this register sets bits GuestFeaturesSel*32 to (GuestFeaturesSel*32)+31, eg. feature bits 0 to 31 if GuestFeaturesSel is set to 0 and features bits 32 to 63 if GuestFeaturesSel is set to 1. Also see "2.1.2. Feature Bits". -• 0x024 | W | GuestFeaturesSel - Activated (Guest) features word selection. - Writing to this register selects a set of 32 activated feature +* 0x024 | W | GuestFeaturesSel + Activated (Guest) features word selection. + Writing to this register selects a set of 32 activated feature bits accessible by writing to the GuestFeatures register. Device driver must write a value to the GuestFeaturesSel register before writing to the GuestFeatures register. -• 0x028 | W | GuestPageSize - Guest page size. - Device driver must write the guest page size in bytes to the +* 0x028 | W | GuestPageSize + Guest page size. + Device driver must write the guest page size in bytes to the register during initialization, before any queues are used. This value must be a power of 2 and is used by the Host to calculate Guest address of the first queue page (see QueuePFN). -• 0x030 | W | QueueSel - Virtual queue index (first queue is 0). - Writing to this register selects the virtual queue that the +* 0x030 | W | QueueSel + Virtual queue index (first queue is 0). + Writing to this register selects the virtual queue that the following operations on QueueNum, QueueAlign and QueuePFN apply to. -• 0x034 | R | QueueNumMax - Maximum virtual queue size. - Reading from the register returns the maximum size of the queue +* 0x034 | R | QueueNumMax + Maximum virtual queue size. + Reading from the register returns the maximum size of the queue the Host is ready to process or zero (0x0) if the queue is not available. This applies to the queue selected by writing to QueueSel and is allowed only when QueuePFN is set to zero (0x0), so when the queue is not actively used. -• 0x038 | W | QueueNum - Virtual queue size. - Queue size is the number of elements in the queue, therefore size +* 0x038 | W | QueueNum + Virtual queue size. + Queue size is the number of elements in the queue, therefore size of the descriptor table and both available and used rings. - Writing to this register notifies the Host what size of the + Writing to this register notifies the Host what size of the queue the Guest will use. This applies to the queue selected by writing to QueueSel. -• 0x03c | W | QueueAlign - Used Ring alignment in the virtual queue. - Writing to this register notifies the Host about alignment +* 0x03c | W | QueueAlign + Used Ring alignment in the virtual queue. + Writing to this register notifies the Host about alignment boundary of the Used Ring in bytes. This value must be a power of 2 and applies to the queue selected by writing to QueueSel. -• 0x040 | RW | QueuePFN - Guest physical page number of the virtual queue. - Writing to this register notifies the host about location of the +* 0x040 | RW | QueuePFN + Guest physical page number of the virtual queue. + Writing to this register notifies the host about location of the virtual queue in the Guest's physical address space. This value is the index number of a page starting with the queue Descriptor Table. Value zero (0x0) means physical address zero (0x00000000) and is illegal. When the Guest stops using the queue it must write zero (0x0) to this register. - Reading from this register returns the currently used page + Reading from this register returns the currently used page number of the queue, therefore a value other than zero (0x0) means that the queue is in use. - Both read and write accesses apply to the queue selected by + Both read and write accesses apply to the queue selected by writing to QueueSel. -• 0x050 | W | QueueNotify - Queue notifier. - Writing a queue index to this register notifies the Host that +* 0x050 | W | QueueNotify + Queue notifier. + Writing a queue index to this register notifies the Host that there are new buffers to process in the queue. -• 0x60 | R | InterruptStatus -Interrupt status. -Reading from this register returns a bit mask of interrupts +* 0x60 | R | InterruptStatus + Interrupt status. + Reading from this register returns a bit mask of interrupts asserted by the device. An interrupt is asserted if the corresponding bit is set, ie. equals one (1). – Bit 0 | Used Ring Update - This interrupt is asserted when the Host has updated the Used + This interrupt is asserted when the Host has updated the Used Ring in at least one of the active virtual queues. – Bit 1 | Configuration change - This interrupt is asserted when configuration of the device has + This interrupt is asserted when configuration of the device has changed. -• 0x064 | W | InterruptACK - Interrupt acknowledge. - Writing to this register notifies the Host that the Guest - finished handling interrupts. Set bits in the value clear the - corresponding bits of the InterruptStatus register. +* 0x064 | W | InterruptACK + Interrupt acknowledge. + Writing to this register notifies the Host that the Guest + finished handling interrupts. Set bits in the value clear + the corresponding bits of the InterruptStatus register. -• 0x070 | RW | Status - Device status. - Reading from this register returns the current device status +* 0x070 | RW | Status + Device status. + Reading from this register returns the current device status flags. - Writing non-zero values to this register sets the status flags, + Writing non-zero values to this register sets the status flags, indicating the Guest progress. Writing zero (0x0) to this register triggers a device reset. - Also see "2.2.1. Device Initialization". + Also see "2.2.1. Device Initialization". -• 0x100+ | RW | Config - Device-specific configuration space starts at an offset 0x100 +* 0x100+ | RW | Config + Device-specific configuration space starts at an offset 0x100 and is accessed with byte alignment. Its meaning and size depends on the device and the driver. @@ -1397,7 +1397,7 @@ Writing to registers described as “R” and reading from registers described as “W” is not permitted and can cause undefined behavior. -100.3.2.2.1. Virtqueue Layout +2.3.2.2.1. Virtqueue Layout ------------------------------ The virtqueue is physically contiguous, with padded added to make the @@ -1428,7 +1428,7 @@ Unlike the fixed page size for PCI, the virtqueue page size is defined by the GuestPageSize field, as written by the guest. This must be done before the virtqueues are configured. -2.3.2.3.1.1. Virtqueue Configuration +2.3.2.3.2. Virtqueue Configuration ----------------------------------- 1. Select the queue writing its index (first queue is 0) to the @@ -1455,13 +1455,13 @@ done before the virtqueues are configured. 7. Write the physical number of the first page of the queue to the QueuePFN register. -2.3.2.3.2. Notifying The Device +2.3.2.3.3. Notifying The Device ------------------------------ The device is notified about new buffers available in a queue by writing the queue index to register QueueNum. -2.3.2.3.3. Receiving Used Buffers From The Device +2.3.2.3.4. Receiving Used Buffers From The Device ------------------------------------------------ The memory mapped virtio device is using single, dedicated @@ -1474,7 +1474,7 @@ interrupt is handled, the driver must acknowledge it by writing a bit mask corresponding to the serviced interrupt to the InterruptACK register. -2.3.2.4.4. Notification of Device Configuration Changes +2.3.2.3.5. Notification of Device Configuration Changes ------------------------------------------------------ This is indicated by bit 1 in the InterruptStatus register, as |