2017-05-12 19:57:50 +08:00
|
|
|
===================================
|
|
|
|
Writing s390 channel device drivers
|
|
|
|
===================================
|
|
|
|
|
|
|
|
:Author: Cornelia Huck
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
============
|
|
|
|
|
|
|
|
This document describes the interfaces available for device drivers that
|
|
|
|
drive s390 based channel attached I/O devices. This includes interfaces
|
|
|
|
for interaction with the hardware and interfaces for interacting with
|
|
|
|
the common driver core. Those interfaces are provided by the s390 common
|
|
|
|
I/O layer.
|
|
|
|
|
|
|
|
The document assumes a familarity with the technical terms associated
|
|
|
|
with the s390 channel I/O architecture. For a description of this
|
|
|
|
architecture, please refer to the "z/Architecture: Principles of
|
|
|
|
Operation", IBM publication no. SA22-7832.
|
|
|
|
|
|
|
|
While most I/O devices on a s390 system are typically driven through the
|
|
|
|
channel I/O mechanism described here, there are various other methods
|
|
|
|
(like the diag interface). These are out of the scope of this document.
|
|
|
|
|
2017-07-11 21:44:09 +08:00
|
|
|
The s390 common I/O layer also provides access to some devices that are
|
|
|
|
not strictly considered I/O devices. They are considered here as well,
|
|
|
|
although they are not the focus of this document.
|
|
|
|
|
2017-05-12 19:57:50 +08:00
|
|
|
Some additional information can also be found in the kernel source under
|
2019-06-09 10:27:16 +08:00
|
|
|
Documentation/s390/driver-model.rst.
|
2017-05-12 19:57:50 +08:00
|
|
|
|
2017-07-11 21:44:09 +08:00
|
|
|
The css bus
|
|
|
|
===========
|
|
|
|
|
|
|
|
The css bus contains the subchannels available on the system. They fall
|
|
|
|
into several categories:
|
|
|
|
|
|
|
|
* Standard I/O subchannels, for use by the system. They have a child
|
|
|
|
device on the ccw bus and are described below.
|
|
|
|
* I/O subchannels bound to the vfio-ccw driver. See
|
2019-06-09 10:27:16 +08:00
|
|
|
Documentation/s390/vfio-ccw.rst.
|
2017-07-11 21:44:09 +08:00
|
|
|
* Message subchannels. No Linux driver currently exists.
|
|
|
|
* CHSC subchannels (at most one). The chsc subchannel driver can be used
|
|
|
|
to send asynchronous chsc commands.
|
|
|
|
* eADM subchannels. Used for talking to storage class memory.
|
|
|
|
|
2017-05-12 19:57:50 +08:00
|
|
|
The ccw bus
|
|
|
|
===========
|
|
|
|
|
|
|
|
The ccw bus typically contains the majority of devices available to a
|
|
|
|
s390 system. Named after the channel command word (ccw), the basic
|
|
|
|
command structure used to address its devices, the ccw bus contains
|
|
|
|
so-called channel attached devices. They are addressed via I/O
|
|
|
|
subchannels, visible on the css bus. A device driver for
|
|
|
|
channel-attached devices, however, will never interact with the
|
|
|
|
subchannel directly, but only via the I/O device on the ccw bus, the ccw
|
|
|
|
device.
|
|
|
|
|
|
|
|
I/O functions for channel-attached devices
|
|
|
|
------------------------------------------
|
|
|
|
|
|
|
|
Some hardware structures have been translated into C structures for use
|
|
|
|
by the common I/O layer and device drivers. For more information on the
|
|
|
|
hardware structures represented here, please consult the Principles of
|
|
|
|
Operation.
|
|
|
|
|
|
|
|
.. kernel-doc:: arch/s390/include/asm/cio.h
|
|
|
|
:internal:
|
|
|
|
|
|
|
|
ccw devices
|
|
|
|
-----------
|
|
|
|
|
|
|
|
Devices that want to initiate channel I/O need to attach to the ccw bus.
|
|
|
|
Interaction with the driver core is done via the common I/O layer, which
|
|
|
|
provides the abstractions of ccw devices and ccw device drivers.
|
|
|
|
|
|
|
|
The functions that initiate or terminate channel I/O all act upon a ccw
|
|
|
|
device structure. Device drivers must not bypass those functions or
|
|
|
|
strange side effects may happen.
|
|
|
|
|
|
|
|
.. kernel-doc:: arch/s390/include/asm/ccwdev.h
|
|
|
|
:internal:
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/s390/cio/device.c
|
|
|
|
:export:
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/s390/cio/device_ops.c
|
|
|
|
:export:
|
|
|
|
|
|
|
|
The channel-measurement facility
|
|
|
|
--------------------------------
|
|
|
|
|
|
|
|
The channel-measurement facility provides a means to collect measurement
|
|
|
|
data which is made available by the channel subsystem for each channel
|
|
|
|
attached device.
|
|
|
|
|
2017-07-18 04:19:25 +08:00
|
|
|
.. kernel-doc:: arch/s390/include/uapi/asm/cmb.h
|
2017-05-12 19:57:50 +08:00
|
|
|
:internal:
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/s390/cio/cmf.c
|
|
|
|
:export:
|
|
|
|
|
|
|
|
The ccwgroup bus
|
|
|
|
================
|
|
|
|
|
|
|
|
The ccwgroup bus only contains artificial devices, created by the user.
|
|
|
|
Many networking devices (e.g. qeth) are in fact composed of several ccw
|
|
|
|
devices (like read, write and data channel for qeth). The ccwgroup bus
|
|
|
|
provides a mechanism to create a meta-device which contains those ccw
|
|
|
|
devices as slave devices and can be associated with the netdevice.
|
|
|
|
|
|
|
|
ccw group devices
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
.. kernel-doc:: arch/s390/include/asm/ccwgroup.h
|
|
|
|
:internal:
|
|
|
|
|
|
|
|
.. kernel-doc:: drivers/s390/cio/ccwgroup.c
|
|
|
|
:export:
|
|
|
|
|
|
|
|
Generic interfaces
|
|
|
|
==================
|
|
|
|
|
2017-07-11 22:04:45 +08:00
|
|
|
The following section contains interfaces in use not only by drivers
|
|
|
|
dealing with ccw devices, but drivers for various other s390 hardware
|
|
|
|
as well.
|
|
|
|
|
|
|
|
Adapter interrupts
|
|
|
|
------------------
|
|
|
|
|
|
|
|
The common I/O layer provides helper functions for dealing with adapter
|
|
|
|
interrupts and interrupt vectors.
|
2017-05-12 19:57:50 +08:00
|
|
|
|
|
|
|
.. kernel-doc:: drivers/s390/cio/airq.c
|
|
|
|
:export:
|