xref: /qemu/docs/system/s390x/css.rst (revision 175198ad91d8bac540159705873b4ffe4fb94eab)
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