| <?xml version="1.0" encoding="UTF-8"?> | |
| <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | |
| "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | |
| <book id="s390drivers"> | |
| <bookinfo> | |
| <title>Writing s390 channel device drivers</title> | |
| <authorgroup> | |
| <author> | |
| <firstname>Cornelia</firstname> | |
| <surname>Huck</surname> | |
| <affiliation> | |
| <address> | |
| <email>cornelia.huck@de.ibm.com</email> | |
| </address> | |
| </affiliation> | |
| </author> | |
| </authorgroup> | |
| <copyright> | |
| <year>2007</year> | |
| <holder>IBM Corp.</holder> | |
| </copyright> | |
| <legalnotice> | |
| <para> | |
| This documentation is free software; you can redistribute | |
| it and/or modify it under the terms of the GNU General Public | |
| License as published by the Free Software Foundation; either | |
| version 2 of the License, or (at your option) any later | |
| version. | |
| </para> | |
| <para> | |
| This program is distributed in the hope that it will be | |
| useful, but WITHOUT ANY WARRANTY; without even the implied | |
| warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| See the GNU General Public License for more details. | |
| </para> | |
| <para> | |
| You should have received a copy of the GNU General Public | |
| License along with this program; if not, write to the Free | |
| Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | |
| MA 02111-1307 USA | |
| </para> | |
| <para> | |
| For more details see the file COPYING in the source | |
| distribution of Linux. | |
| </para> | |
| </legalnotice> | |
| </bookinfo> | |
| <toc></toc> | |
| <chapter id="intro"> | |
| <title>Introduction</title> | |
| <para> | |
| 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. | |
| </para> | |
| <para> | |
| 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. | |
| </para> | |
| <para> | |
| 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. | |
| </para> | |
| <para> | |
| Some additional information can also be found in the kernel source | |
| under Documentation/s390/driver-model.txt. | |
| </para> | |
| </chapter> | |
| <chapter id="ccw"> | |
| <title>The ccw bus</title> | |
| <para> | |
| 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. | |
| </para> | |
| <sect1 id="channelIO"> | |
| <title>I/O functions for channel-attached devices</title> | |
| <para> | |
| 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. | |
| </para> | |
| !Iarch/s390/include/asm/cio.h | |
| </sect1> | |
| <sect1 id="ccwdev"> | |
| <title>ccw devices</title> | |
| <para> | |
| 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. | |
| </para> | |
| <para> | |
| 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. | |
| </para> | |
| !Iarch/s390/include/asm/ccwdev.h | |
| !Edrivers/s390/cio/device.c | |
| !Edrivers/s390/cio/device_ops.c | |
| </sect1> | |
| <sect1 id="cmf"> | |
| <title>The channel-measurement facility</title> | |
| <para> | |
| The channel-measurement facility provides a means to collect | |
| measurement data which is made available by the channel subsystem | |
| for each channel attached device. | |
| </para> | |
| !Iarch/s390/include/asm/cmb.h | |
| !Edrivers/s390/cio/cmf.c | |
| </sect1> | |
| </chapter> | |
| <chapter id="ccwgroup"> | |
| <title>The ccwgroup bus</title> | |
| <para> | |
| 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. | |
| </para> | |
| <sect1 id="ccwgroupdevices"> | |
| <title>ccw group devices</title> | |
| !Iarch/s390/include/asm/ccwgroup.h | |
| !Edrivers/s390/cio/ccwgroup.c | |
| </sect1> | |
| </chapter> | |
| <chapter id="genericinterfaces"> | |
| <title>Generic interfaces</title> | |
| <para> | |
| Some interfaces are available to other drivers that do not necessarily | |
| have anything to do with the busses described above, but still are | |
| indirectly using basic infrastructure in the common I/O layer. | |
| One example is the support for adapter interrupts. | |
| </para> | |
| !Edrivers/s390/cio/airq.c | |
| </chapter> | |
| </book> |