|  | 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"``. |