| The virtual channel subsystem | |
| ============================= | |
| QEMU implements a virtual channel subsystem with subchannels, (mostly | |
| functionless) channel paths, and channel devices (virtio-ccw, 3270, and | |
| devices passed via vfio-ccw). It supports multiple subchannel sets (MSS) and | |
| multiple channel subsystems extended (MCSS-E). | |
| All channel devices support the ``devno`` property, which takes a parameter | |
| in the form ``<cssid>.<ssid>.<device number>``. | |
| The default channel subsystem image id (``<cssid>``) is ``0xfe``. Devices in | |
| there will show up in channel subsystem image ``0`` to guests that do not | |
| enable MCSS-E. Note that devices with a different cssid will not be visible | |
| if the guest OS does not enable MCSS-E (which is true for all supported guest | |
| operating systems today). | |
| Supported values for the subchannel set id (``<ssid>``) range from ``0-3``. | |
| Devices with a ssid that is not ``0`` will not be visible if the guest OS | |
| does not enable MSS (any Linux version that supports virtio also enables MSS). | |
| Any device may be put into any subchannel set, there is no restriction by | |
| device type. | |
| The device number can range from ``0-0xffff``. | |
| If the ``devno`` property is not specified for a device, QEMU will choose the | |
| next free device number in subchannel set 0, skipping to the next subchannel | |
| set if no more device numbers are free. | |
| QEMU places a device at the first free subchannel in the specified subchannel | |
| set. If a device is hotunplugged and later replugged, it may appear at a | |
| different subchannel. (This is similar to how z/VM works.) | |
| Examples | |
| -------- | |
| * a virtio-net device, cssid/ssid/devno automatically assigned:: | |
| -device virtio-net-ccw | |
| In a Linux guest (without default devices and no other devices specified | |
| prior to this one), this will show up as ``0.0.0000`` under subchannel | |
| ``0.0.0000``. | |
| The auto-assigned-properties in QEMU (as seen via e.g. ``info qtree``) | |
| would be ``dev_id = "fe.0.0000"`` and ``subch_id = "fe.0.0000"``. | |
| * a virtio-rng device in subchannel set ``0``:: | |
| -device virtio-rng-ccw,devno=fe.0.0042 | |
| If added to the same Linux guest as above, it would show up as ``0.0.0042`` | |
| under subchannel ``0.0.0001``. | |
| The properties for the device would be ``dev_id = "fe.0.0042"`` and | |
| ``subch_id = "fe.0.0001"``. | |
| * a virtio-gpu device in subchannel set ``2``:: | |
| -device virtio-gpu-ccw,devno=fe.2.1111 | |
| If added to the same Linux guest as above, it would show up as ``0.2.1111`` | |
| under subchannel ``0.2.0000``. | |
| The properties for the device would be ``dev_id = "fe.2.1111"`` and | |
| ``subch_id = "fe.2.0000"``. | |
| * a virtio-mouse device in a non-standard channel subsystem image:: | |
| -device virtio-mouse-ccw,devno=2.0.2222 | |
| This would not show up in a standard Linux guest. | |
| The properties for the device would be ``dev_id = "2.0.2222"`` and | |
| ``subch_id = "2.0.0000"``. | |
| * a virtio-keyboard device in another non-standard channel subsystem image:: | |
| -device virtio-keyboard-ccw,devno=0.0.1234 | |
| This would not show up in a standard Linux guest, either, as ``0`` is not | |
| the standard channel subsystem image id. | |
| The properties for the device would be ``dev_id = "0.0.1234"`` and | |
| ``subch_id = "0.0.0000"``. |