1*f31270d4SCornelia HuckThe virtual channel subsystem 2*f31270d4SCornelia Huck============================= 3*f31270d4SCornelia Huck 4*f31270d4SCornelia HuckQEMU implements a virtual channel subsystem with subchannels, (mostly 5*f31270d4SCornelia Huckfunctionless) channel paths, and channel devices (virtio-ccw, 3270, and 6*f31270d4SCornelia Huckdevices passed via vfio-ccw). It supports multiple subchannel sets (MSS) and 7*f31270d4SCornelia Huckmultiple channel subsystems extended (MCSS-E). 8*f31270d4SCornelia Huck 9*f31270d4SCornelia HuckAll channel devices support the ``devno`` property, which takes a parameter 10*f31270d4SCornelia Huckin the form ``<cssid>.<ssid>.<device number>``. 11*f31270d4SCornelia Huck 12*f31270d4SCornelia HuckThe default channel subsystem image id (``<cssid>``) is ``0xfe``. Devices in 13*f31270d4SCornelia Huckthere will show up in channel subsystem image ``0`` to guests that do not 14*f31270d4SCornelia Huckenable MCSS-E. Note that devices with a different cssid will not be visible 15*f31270d4SCornelia Huckif the guest OS does not enable MCSS-E (which is true for all supported guest 16*f31270d4SCornelia Huckoperating systems today). 17*f31270d4SCornelia Huck 18*f31270d4SCornelia HuckSupported values for the subchannel set id (``<ssid>``) range from ``0-3``. 19*f31270d4SCornelia HuckDevices with a ssid that is not ``0`` will not be visible if the guest OS 20*f31270d4SCornelia Huckdoes not enable MSS (any Linux version that supports virtio also enables MSS). 21*f31270d4SCornelia HuckAny device may be put into any subchannel set, there is no restriction by 22*f31270d4SCornelia Huckdevice type. 23*f31270d4SCornelia Huck 24*f31270d4SCornelia HuckThe device number can range from ``0-0xffff``. 25*f31270d4SCornelia Huck 26*f31270d4SCornelia HuckIf the ``devno`` property is not specified for a device, QEMU will choose the 27*f31270d4SCornelia Hucknext free device number in subchannel set 0, skipping to the next subchannel 28*f31270d4SCornelia Huckset if no more device numbers are free. 29*f31270d4SCornelia Huck 30*f31270d4SCornelia HuckQEMU places a device at the first free subchannel in the specified subchannel 31*f31270d4SCornelia Huckset. If a device is hotunplugged and later replugged, it may appear at a 32*f31270d4SCornelia Huckdifferent subchannel. (This is similar to how z/VM works.) 33*f31270d4SCornelia Huck 34*f31270d4SCornelia Huck 35*f31270d4SCornelia HuckExamples 36*f31270d4SCornelia Huck-------- 37*f31270d4SCornelia Huck 38*f31270d4SCornelia Huck* a virtio-net device, cssid/ssid/devno automatically assigned:: 39*f31270d4SCornelia Huck 40*f31270d4SCornelia Huck -device virtio-net-ccw 41*f31270d4SCornelia Huck 42*f31270d4SCornelia Huck In a Linux guest (without default devices and no other devices specified 43*f31270d4SCornelia Huck prior to this one), this will show up as ``0.0.0000`` under subchannel 44*f31270d4SCornelia Huck ``0.0.0000``. 45*f31270d4SCornelia Huck 46*f31270d4SCornelia Huck The auto-assigned-properties in QEMU (as seen via e.g. ``info qtree``) 47*f31270d4SCornelia Huck would be ``dev_id = "fe.0.0000"`` and ``subch_id = "fe.0.0000"``. 48*f31270d4SCornelia Huck 49*f31270d4SCornelia Huck* a virtio-rng device in subchannel set ``0``:: 50*f31270d4SCornelia Huck 51*f31270d4SCornelia Huck -device virtio-rng-ccw,devno=fe.0.0042 52*f31270d4SCornelia Huck 53*f31270d4SCornelia Huck If added to the same Linux guest as above, it would show up as ``0.0.0042`` 54*f31270d4SCornelia Huck under subchannel ``0.0.0001``. 55*f31270d4SCornelia Huck 56*f31270d4SCornelia Huck The properties for the device would be ``dev_id = "fe.0.0042"`` and 57*f31270d4SCornelia Huck ``subch_id = "fe.0.0001"``. 58*f31270d4SCornelia Huck 59*f31270d4SCornelia Huck* a virtio-gpu device in subchannel set ``2``:: 60*f31270d4SCornelia Huck 61*f31270d4SCornelia Huck -device virtio-gpu-ccw,devno=fe.2.1111 62*f31270d4SCornelia Huck 63*f31270d4SCornelia Huck If added to the same Linux guest as above, it would show up as ``0.2.1111`` 64*f31270d4SCornelia Huck under subchannel ``0.2.0000``. 65*f31270d4SCornelia Huck 66*f31270d4SCornelia Huck The properties for the device would be ``dev_id = "fe.2.1111"`` and 67*f31270d4SCornelia Huck ``subch_id = "fe.2.0000"``. 68*f31270d4SCornelia Huck 69*f31270d4SCornelia Huck* a virtio-mouse device in a non-standard channel subsystem image:: 70*f31270d4SCornelia Huck 71*f31270d4SCornelia Huck -device virtio-mouse-ccw,devno=2.0.2222 72*f31270d4SCornelia Huck 73*f31270d4SCornelia Huck This would not show up in a standard Linux guest. 74*f31270d4SCornelia Huck 75*f31270d4SCornelia Huck The properties for the device would be ``dev_id = "2.0.2222"`` and 76*f31270d4SCornelia Huck ``subch_id = "2.0.0000"``. 77*f31270d4SCornelia Huck 78*f31270d4SCornelia Huck* a virtio-keyboard device in another non-standard channel subsystem image:: 79*f31270d4SCornelia Huck 80*f31270d4SCornelia Huck -device virtio-keyboard-ccw,devno=0.0.1234 81*f31270d4SCornelia Huck 82*f31270d4SCornelia Huck This would not show up in a standard Linux guest, either, as ``0`` is not 83*f31270d4SCornelia Huck the standard channel subsystem image id. 84*f31270d4SCornelia Huck 85*f31270d4SCornelia Huck The properties for the device would be ``dev_id = "0.0.1234"`` and 86*f31270d4SCornelia Huck ``subch_id = "0.0.0000"``. 87