1<?xml version="1.0" encoding="UTF-8"?>
2<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
3	"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
4
5<book id="s390drivers">
6 <bookinfo>
7  <title>Writing s390 channel device drivers</title>
8
9  <authorgroup>
10   <author>
11    <firstname>Cornelia</firstname>
12    <surname>Huck</surname>
13    <affiliation>
14     <address>
15       <email>cornelia.huck@de.ibm.com</email>
16     </address>
17    </affiliation>
18   </author>
19  </authorgroup>
20
21  <copyright>
22   <year>2007</year>
23   <holder>IBM Corp.</holder>
24  </copyright>
25
26  <legalnotice>
27   <para>
28     This documentation is free software; you can redistribute
29     it and/or modify it under the terms of the GNU General Public
30     License as published by the Free Software Foundation; either
31     version 2 of the License, or (at your option) any later
32     version.
33   </para>
34
35   <para>
36     This program is distributed in the hope that it will be
37     useful, but WITHOUT ANY WARRANTY; without even the implied
38     warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
39     See the GNU General Public License for more details.
40   </para>
41
42   <para>
43     You should have received a copy of the GNU General Public
44     License along with this program; if not, write to the Free
45     Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
46     MA 02111-1307 USA
47   </para>
48
49   <para>
50     For more details see the file COPYING in the source
51     distribution of Linux.
52   </para>
53  </legalnotice>
54 </bookinfo>
55
56<toc></toc>
57
58  <chapter id="intro">
59   <title>Introduction</title>
60  <para>
61    This document describes the interfaces available for device drivers that
62    drive s390 based channel attached I/O devices. This includes interfaces for
63    interaction with the hardware and interfaces for interacting with the
64    common driver core. Those interfaces are provided by the s390 common I/O
65    layer.
66  </para>
67  <para>
68    The document assumes a familarity with the technical terms associated
69    with the s390 channel I/O architecture. For a description of this
70    architecture, please refer to the "z/Architecture: Principles of
71    Operation", IBM publication no. SA22-7832.
72  </para>
73  <para>
74    While most I/O devices on a s390 system are typically driven through the
75    channel I/O mechanism described here, there are various other methods
76    (like the diag interface). These are out of the scope of this document.
77  </para>
78  <para>
79    Some additional information can also be found in the kernel source
80    under Documentation/s390/driver-model.txt.
81  </para>
82  </chapter>
83  <chapter id="ccw">
84   <title>The ccw bus</title>
85  <para>
86	The ccw bus typically contains the majority of devices available to
87	a s390 system. Named after the channel command word (ccw), the basic
88	command structure used to address its devices, the ccw bus contains
89	so-called channel attached devices. They are addressed via I/O
90	subchannels, visible on the css bus. A device driver for
91	channel-attached devices, however, will never interact	with the
92	subchannel directly, but only via the I/O device on the ccw bus,
93	the ccw device.
94  </para>
95    <sect1 id="channelIO">
96     <title>I/O functions for channel-attached devices</title>
97    <para>
98      Some hardware structures have been translated into C structures for use
99      by the common I/O layer and device drivers. For more information on
100      the hardware structures represented here, please consult the Principles
101      of Operation.
102    </para>
103<!-- arch/s390/include/asm/cio.h -->
104<refentry id="API-struct-ccw1">
105<refentryinfo>
106 <title>LINUX</title>
107 <productname>Kernel Hackers Manual</productname>
108 <date>July 2017</date>
109</refentryinfo>
110<refmeta>
111 <refentrytitle><phrase>struct ccw1</phrase></refentrytitle>
112 <manvolnum>9</manvolnum>
113 <refmiscinfo class="version">4.4.14</refmiscinfo>
114</refmeta>
115<refnamediv>
116 <refname>struct ccw1</refname>
117 <refpurpose>
118  channel command word
119 </refpurpose>
120</refnamediv>
121<refsynopsisdiv>
122 <title>Synopsis</title>
123  <programlisting>
124struct ccw1 {
125  __u8 cmd_code;
126  __u8 flags;
127  __u16 count;
128  __u32 cda;
129};  </programlisting>
130</refsynopsisdiv>
131 <refsect1>
132  <title>Members</title>
133  <variablelist>
134    <varlistentry>      <term>cmd_code</term>
135      <listitem><para>
136command code
137      </para></listitem>
138    </varlistentry>
139    <varlistentry>      <term>flags</term>
140      <listitem><para>
141flags, like IDA addressing, etc.
142      </para></listitem>
143    </varlistentry>
144    <varlistentry>      <term>count</term>
145      <listitem><para>
146byte count
147      </para></listitem>
148    </varlistentry>
149    <varlistentry>      <term>cda</term>
150      <listitem><para>
151data address
152      </para></listitem>
153    </varlistentry>
154  </variablelist>
155 </refsect1>
156<refsect1>
157<title>Description</title>
158<para>
159   The ccw is the basic structure to build channel programs that perform
160   operations with the device or the control unit. Only Format-1 channel
161   command words are supported.
162</para>
163</refsect1>
164</refentry>
165
166<refentry id="API-struct-erw">
167<refentryinfo>
168 <title>LINUX</title>
169 <productname>Kernel Hackers Manual</productname>
170 <date>July 2017</date>
171</refentryinfo>
172<refmeta>
173 <refentrytitle><phrase>struct erw</phrase></refentrytitle>
174 <manvolnum>9</manvolnum>
175 <refmiscinfo class="version">4.4.14</refmiscinfo>
176</refmeta>
177<refnamediv>
178 <refname>struct erw</refname>
179 <refpurpose>
180     extended report word
181 </refpurpose>
182</refnamediv>
183<refsynopsisdiv>
184 <title>Synopsis</title>
185  <programlisting>
186struct erw {
187  __u32 res0:3;
188  __u32 auth:1;
189  __u32 pvrf:1;
190  __u32 cpt:1;
191  __u32 fsavf:1;
192  __u32 cons:1;
193  __u32 scavf:1;
194  __u32 fsaf:1;
195  __u32 scnt:6;
196  __u32 res16:16;
197};  </programlisting>
198</refsynopsisdiv>
199 <refsect1>
200  <title>Members</title>
201  <variablelist>
202    <varlistentry>      <term>res0</term>
203      <listitem><para>
204   reserved
205      </para></listitem>
206    </varlistentry>
207    <varlistentry>      <term>auth</term>
208      <listitem><para>
209   authorization check
210      </para></listitem>
211    </varlistentry>
212    <varlistentry>      <term>pvrf</term>
213      <listitem><para>
214   path-verification-required flag
215      </para></listitem>
216    </varlistentry>
217    <varlistentry>      <term>cpt</term>
218      <listitem><para>
219   channel-path timeout
220      </para></listitem>
221    </varlistentry>
222    <varlistentry>      <term>fsavf</term>
223      <listitem><para>
224   failing storage address validity flag
225      </para></listitem>
226    </varlistentry>
227    <varlistentry>      <term>cons</term>
228      <listitem><para>
229   concurrent sense
230      </para></listitem>
231    </varlistentry>
232    <varlistentry>      <term>scavf</term>
233      <listitem><para>
234   secondary ccw address validity flag
235      </para></listitem>
236    </varlistentry>
237    <varlistentry>      <term>fsaf</term>
238      <listitem><para>
239   failing storage address format
240      </para></listitem>
241    </varlistentry>
242    <varlistentry>      <term>scnt</term>
243      <listitem><para>
244   sense count, if <parameter>cons</parameter> == <constant>1</constant>
245      </para></listitem>
246    </varlistentry>
247    <varlistentry>      <term>res16</term>
248      <listitem><para>
249   reserved
250      </para></listitem>
251    </varlistentry>
252  </variablelist>
253 </refsect1>
254</refentry>
255
256<refentry id="API-struct-erw-eadm">
257<refentryinfo>
258 <title>LINUX</title>
259 <productname>Kernel Hackers Manual</productname>
260 <date>July 2017</date>
261</refentryinfo>
262<refmeta>
263 <refentrytitle><phrase>struct erw_eadm</phrase></refentrytitle>
264 <manvolnum>9</manvolnum>
265 <refmiscinfo class="version">4.4.14</refmiscinfo>
266</refmeta>
267<refnamediv>
268 <refname>struct erw_eadm</refname>
269 <refpurpose>
270     EADM Subchannel extended report word
271 </refpurpose>
272</refnamediv>
273<refsynopsisdiv>
274 <title>Synopsis</title>
275  <programlisting>
276struct erw_eadm {
277  __u32 b:1;
278  __u32 r:1;
279};  </programlisting>
280</refsynopsisdiv>
281 <refsect1>
282  <title>Members</title>
283  <variablelist>
284    <varlistentry>      <term>b</term>
285      <listitem><para>
286   aob error
287      </para></listitem>
288    </varlistentry>
289    <varlistentry>      <term>r</term>
290      <listitem><para>
291   arsb error
292      </para></listitem>
293    </varlistentry>
294  </variablelist>
295 </refsect1>
296</refentry>
297
298<refentry id="API-struct-sublog">
299<refentryinfo>
300 <title>LINUX</title>
301 <productname>Kernel Hackers Manual</productname>
302 <date>July 2017</date>
303</refentryinfo>
304<refmeta>
305 <refentrytitle><phrase>struct sublog</phrase></refentrytitle>
306 <manvolnum>9</manvolnum>
307 <refmiscinfo class="version">4.4.14</refmiscinfo>
308</refmeta>
309<refnamediv>
310 <refname>struct sublog</refname>
311 <refpurpose>
312     subchannel logout area
313 </refpurpose>
314</refnamediv>
315<refsynopsisdiv>
316 <title>Synopsis</title>
317  <programlisting>
318struct sublog {
319  __u32 res0:1;
320  __u32 esf:7;
321  __u32 lpum:8;
322  __u32 arep:1;
323  __u32 fvf:5;
324  __u32 sacc:2;
325  __u32 termc:2;
326  __u32 devsc:1;
327  __u32 serr:1;
328  __u32 ioerr:1;
329  __u32 seqc:3;
330};  </programlisting>
331</refsynopsisdiv>
332 <refsect1>
333  <title>Members</title>
334  <variablelist>
335    <varlistentry>      <term>res0</term>
336      <listitem><para>
337   reserved
338      </para></listitem>
339    </varlistentry>
340    <varlistentry>      <term>esf</term>
341      <listitem><para>
342   extended status flags
343      </para></listitem>
344    </varlistentry>
345    <varlistentry>      <term>lpum</term>
346      <listitem><para>
347   last path used mask
348      </para></listitem>
349    </varlistentry>
350    <varlistentry>      <term>arep</term>
351      <listitem><para>
352   ancillary report
353      </para></listitem>
354    </varlistentry>
355    <varlistentry>      <term>fvf</term>
356      <listitem><para>
357   field-validity flags
358      </para></listitem>
359    </varlistentry>
360    <varlistentry>      <term>sacc</term>
361      <listitem><para>
362   storage access code
363      </para></listitem>
364    </varlistentry>
365    <varlistentry>      <term>termc</term>
366      <listitem><para>
367   termination code
368      </para></listitem>
369    </varlistentry>
370    <varlistentry>      <term>devsc</term>
371      <listitem><para>
372   device-status check
373      </para></listitem>
374    </varlistentry>
375    <varlistentry>      <term>serr</term>
376      <listitem><para>
377   secondary error
378      </para></listitem>
379    </varlistentry>
380    <varlistentry>      <term>ioerr</term>
381      <listitem><para>
382   i/o-error alert
383      </para></listitem>
384    </varlistentry>
385    <varlistentry>      <term>seqc</term>
386      <listitem><para>
387   sequence code
388      </para></listitem>
389    </varlistentry>
390  </variablelist>
391 </refsect1>
392</refentry>
393
394<refentry id="API-struct-esw0">
395<refentryinfo>
396 <title>LINUX</title>
397 <productname>Kernel Hackers Manual</productname>
398 <date>July 2017</date>
399</refentryinfo>
400<refmeta>
401 <refentrytitle><phrase>struct esw0</phrase></refentrytitle>
402 <manvolnum>9</manvolnum>
403 <refmiscinfo class="version">4.4.14</refmiscinfo>
404</refmeta>
405<refnamediv>
406 <refname>struct esw0</refname>
407 <refpurpose>
408     Format 0 Extended Status Word (ESW)
409 </refpurpose>
410</refnamediv>
411<refsynopsisdiv>
412 <title>Synopsis</title>
413  <programlisting>
414struct esw0 {
415  struct sublog sublog;
416  struct erw erw;
417  __u32 faddr[2];
418  __u32 saddr;
419};  </programlisting>
420</refsynopsisdiv>
421 <refsect1>
422  <title>Members</title>
423  <variablelist>
424    <varlistentry>      <term>sublog</term>
425      <listitem><para>
426   subchannel logout
427      </para></listitem>
428    </varlistentry>
429    <varlistentry>      <term>erw</term>
430      <listitem><para>
431   extended report word
432      </para></listitem>
433    </varlistentry>
434    <varlistentry>      <term>faddr[2]</term>
435      <listitem><para>
436   failing storage address
437      </para></listitem>
438    </varlistentry>
439    <varlistentry>      <term>saddr</term>
440      <listitem><para>
441   secondary ccw address
442      </para></listitem>
443    </varlistentry>
444  </variablelist>
445 </refsect1>
446</refentry>
447
448<refentry id="API-struct-esw1">
449<refentryinfo>
450 <title>LINUX</title>
451 <productname>Kernel Hackers Manual</productname>
452 <date>July 2017</date>
453</refentryinfo>
454<refmeta>
455 <refentrytitle><phrase>struct esw1</phrase></refentrytitle>
456 <manvolnum>9</manvolnum>
457 <refmiscinfo class="version">4.4.14</refmiscinfo>
458</refmeta>
459<refnamediv>
460 <refname>struct esw1</refname>
461 <refpurpose>
462     Format 1 Extended Status Word (ESW)
463 </refpurpose>
464</refnamediv>
465<refsynopsisdiv>
466 <title>Synopsis</title>
467  <programlisting>
468struct esw1 {
469  __u8 zero0;
470  __u8 lpum;
471  __u16 zero16;
472  struct erw erw;
473  __u32 zeros[3];
474};  </programlisting>
475</refsynopsisdiv>
476 <refsect1>
477  <title>Members</title>
478  <variablelist>
479    <varlistentry>      <term>zero0</term>
480      <listitem><para>
481   reserved zeros
482      </para></listitem>
483    </varlistentry>
484    <varlistentry>      <term>lpum</term>
485      <listitem><para>
486   last path used mask
487      </para></listitem>
488    </varlistentry>
489    <varlistentry>      <term>zero16</term>
490      <listitem><para>
491   reserved zeros
492      </para></listitem>
493    </varlistentry>
494    <varlistentry>      <term>erw</term>
495      <listitem><para>
496   extended report word
497      </para></listitem>
498    </varlistentry>
499    <varlistentry>      <term>zeros[3]</term>
500      <listitem><para>
501   three fullwords of zeros
502      </para></listitem>
503    </varlistentry>
504  </variablelist>
505 </refsect1>
506</refentry>
507
508<refentry id="API-struct-esw2">
509<refentryinfo>
510 <title>LINUX</title>
511 <productname>Kernel Hackers Manual</productname>
512 <date>July 2017</date>
513</refentryinfo>
514<refmeta>
515 <refentrytitle><phrase>struct esw2</phrase></refentrytitle>
516 <manvolnum>9</manvolnum>
517 <refmiscinfo class="version">4.4.14</refmiscinfo>
518</refmeta>
519<refnamediv>
520 <refname>struct esw2</refname>
521 <refpurpose>
522     Format 2 Extended Status Word (ESW)
523 </refpurpose>
524</refnamediv>
525<refsynopsisdiv>
526 <title>Synopsis</title>
527  <programlisting>
528struct esw2 {
529  __u8 zero0;
530  __u8 lpum;
531  __u16 dcti;
532  struct erw erw;
533  __u32 zeros[3];
534};  </programlisting>
535</refsynopsisdiv>
536 <refsect1>
537  <title>Members</title>
538  <variablelist>
539    <varlistentry>      <term>zero0</term>
540      <listitem><para>
541   reserved zeros
542      </para></listitem>
543    </varlistentry>
544    <varlistentry>      <term>lpum</term>
545      <listitem><para>
546   last path used mask
547      </para></listitem>
548    </varlistentry>
549    <varlistentry>      <term>dcti</term>
550      <listitem><para>
551   device-connect-time interval
552      </para></listitem>
553    </varlistentry>
554    <varlistentry>      <term>erw</term>
555      <listitem><para>
556   extended report word
557      </para></listitem>
558    </varlistentry>
559    <varlistentry>      <term>zeros[3]</term>
560      <listitem><para>
561   three fullwords of zeros
562      </para></listitem>
563    </varlistentry>
564  </variablelist>
565 </refsect1>
566</refentry>
567
568<refentry id="API-struct-esw3">
569<refentryinfo>
570 <title>LINUX</title>
571 <productname>Kernel Hackers Manual</productname>
572 <date>July 2017</date>
573</refentryinfo>
574<refmeta>
575 <refentrytitle><phrase>struct esw3</phrase></refentrytitle>
576 <manvolnum>9</manvolnum>
577 <refmiscinfo class="version">4.4.14</refmiscinfo>
578</refmeta>
579<refnamediv>
580 <refname>struct esw3</refname>
581 <refpurpose>
582     Format 3 Extended Status Word (ESW)
583 </refpurpose>
584</refnamediv>
585<refsynopsisdiv>
586 <title>Synopsis</title>
587  <programlisting>
588struct esw3 {
589  __u8 zero0;
590  __u8 lpum;
591  __u16 res;
592  struct erw erw;
593  __u32 zeros[3];
594};  </programlisting>
595</refsynopsisdiv>
596 <refsect1>
597  <title>Members</title>
598  <variablelist>
599    <varlistentry>      <term>zero0</term>
600      <listitem><para>
601   reserved zeros
602      </para></listitem>
603    </varlistentry>
604    <varlistentry>      <term>lpum</term>
605      <listitem><para>
606   last path used mask
607      </para></listitem>
608    </varlistentry>
609    <varlistentry>      <term>res</term>
610      <listitem><para>
611   reserved
612      </para></listitem>
613    </varlistentry>
614    <varlistentry>      <term>erw</term>
615      <listitem><para>
616   extended report word
617      </para></listitem>
618    </varlistentry>
619    <varlistentry>      <term>zeros[3]</term>
620      <listitem><para>
621   three fullwords of zeros
622      </para></listitem>
623    </varlistentry>
624  </variablelist>
625 </refsect1>
626</refentry>
627
628<refentry id="API-struct-esw-eadm">
629<refentryinfo>
630 <title>LINUX</title>
631 <productname>Kernel Hackers Manual</productname>
632 <date>July 2017</date>
633</refentryinfo>
634<refmeta>
635 <refentrytitle><phrase>struct esw_eadm</phrase></refentrytitle>
636 <manvolnum>9</manvolnum>
637 <refmiscinfo class="version">4.4.14</refmiscinfo>
638</refmeta>
639<refnamediv>
640 <refname>struct esw_eadm</refname>
641 <refpurpose>
642     EADM Subchannel Extended Status Word (ESW)
643 </refpurpose>
644</refnamediv>
645<refsynopsisdiv>
646 <title>Synopsis</title>
647  <programlisting>
648struct esw_eadm {
649  __u32 sublog;
650  struct erw_eadm erw;
651};  </programlisting>
652</refsynopsisdiv>
653 <refsect1>
654  <title>Members</title>
655  <variablelist>
656    <varlistentry>      <term>sublog</term>
657      <listitem><para>
658   subchannel logout
659      </para></listitem>
660    </varlistentry>
661    <varlistentry>      <term>erw</term>
662      <listitem><para>
663   extended report word
664      </para></listitem>
665    </varlistentry>
666  </variablelist>
667 </refsect1>
668</refentry>
669
670<refentry id="API-struct-irb">
671<refentryinfo>
672 <title>LINUX</title>
673 <productname>Kernel Hackers Manual</productname>
674 <date>July 2017</date>
675</refentryinfo>
676<refmeta>
677 <refentrytitle><phrase>struct irb</phrase></refentrytitle>
678 <manvolnum>9</manvolnum>
679 <refmiscinfo class="version">4.4.14</refmiscinfo>
680</refmeta>
681<refnamediv>
682 <refname>struct irb</refname>
683 <refpurpose>
684     interruption response block
685 </refpurpose>
686</refnamediv>
687<refsynopsisdiv>
688 <title>Synopsis</title>
689  <programlisting>
690struct irb {
691  union scsw scsw;
692  union esw;
693  __u8 ecw[32];
694};  </programlisting>
695</refsynopsisdiv>
696 <refsect1>
697  <title>Members</title>
698  <variablelist>
699    <varlistentry>      <term>scsw</term>
700      <listitem><para>
701   subchannel status word
702      </para></listitem>
703    </varlistentry>
704    <varlistentry>      <term>esw</term>
705      <listitem><para>
706   extended status word
707      </para></listitem>
708    </varlistentry>
709    <varlistentry>      <term>ecw[32]</term>
710      <listitem><para>
711   extended control word
712      </para></listitem>
713    </varlistentry>
714  </variablelist>
715 </refsect1>
716<refsect1>
717<title>Description</title>
718<para>
719   The irb that is handed to the device driver when an interrupt occurs. For
720   solicited interrupts, the common I/O layer already performs checks whether
721   a field is valid; a field not being valid is always passed as <constant>0</constant>.
722   If a unit check occurred, <parameter>ecw</parameter> may contain sense data; this is retrieved
723   by the common I/O layer itself if the device doesn't support concurrent
724   sense (so that the device driver never needs to perform basic sene itself).
725   For unsolicited interrupts, the irb is passed as-is (expect for sense data,
726   if applicable).
727</para>
728</refsect1>
729</refentry>
730
731<refentry id="API-struct-ciw">
732<refentryinfo>
733 <title>LINUX</title>
734 <productname>Kernel Hackers Manual</productname>
735 <date>July 2017</date>
736</refentryinfo>
737<refmeta>
738 <refentrytitle><phrase>struct ciw</phrase></refentrytitle>
739 <manvolnum>9</manvolnum>
740 <refmiscinfo class="version">4.4.14</refmiscinfo>
741</refmeta>
742<refnamediv>
743 <refname>struct ciw</refname>
744 <refpurpose>
745     command information word (CIW) layout
746 </refpurpose>
747</refnamediv>
748<refsynopsisdiv>
749 <title>Synopsis</title>
750  <programlisting>
751struct ciw {
752  __u32 et:2;
753  __u32 reserved:2;
754  __u32 ct:4;
755  __u32 cmd:8;
756  __u32 count:16;
757};  </programlisting>
758</refsynopsisdiv>
759 <refsect1>
760  <title>Members</title>
761  <variablelist>
762    <varlistentry>      <term>et</term>
763      <listitem><para>
764   entry type
765      </para></listitem>
766    </varlistentry>
767    <varlistentry>      <term>reserved</term>
768      <listitem><para>
769   reserved bits
770      </para></listitem>
771    </varlistentry>
772    <varlistentry>      <term>ct</term>
773      <listitem><para>
774   command type
775      </para></listitem>
776    </varlistentry>
777    <varlistentry>      <term>cmd</term>
778      <listitem><para>
779   command code
780      </para></listitem>
781    </varlistentry>
782    <varlistentry>      <term>count</term>
783      <listitem><para>
784   command count
785      </para></listitem>
786    </varlistentry>
787  </variablelist>
788 </refsect1>
789</refentry>
790
791<refentry id="API-struct-ccw-dev-id">
792<refentryinfo>
793 <title>LINUX</title>
794 <productname>Kernel Hackers Manual</productname>
795 <date>July 2017</date>
796</refentryinfo>
797<refmeta>
798 <refentrytitle><phrase>struct ccw_dev_id</phrase></refentrytitle>
799 <manvolnum>9</manvolnum>
800 <refmiscinfo class="version">4.4.14</refmiscinfo>
801</refmeta>
802<refnamediv>
803 <refname>struct ccw_dev_id</refname>
804 <refpurpose>
805     unique identifier for ccw devices
806 </refpurpose>
807</refnamediv>
808<refsynopsisdiv>
809 <title>Synopsis</title>
810  <programlisting>
811struct ccw_dev_id {
812  u8 ssid;
813  u16 devno;
814};  </programlisting>
815</refsynopsisdiv>
816 <refsect1>
817  <title>Members</title>
818  <variablelist>
819    <varlistentry>      <term>ssid</term>
820      <listitem><para>
821   subchannel set id
822      </para></listitem>
823    </varlistentry>
824    <varlistentry>      <term>devno</term>
825      <listitem><para>
826   device number
827      </para></listitem>
828    </varlistentry>
829  </variablelist>
830 </refsect1>
831<refsect1>
832<title>Description</title>
833<para>
834   This structure is not directly based on any hardware structure. The
835   hardware identifies a device by its device number and its subchannel,
836   which is in turn identified by its id. In order to get a unique identifier
837   for ccw devices across subchannel sets, <parameter>struct</parameter> ccw_dev_id has been
838   introduced.
839</para>
840</refsect1>
841</refentry>
842
843<refentry id="API-ccw-dev-id-is-equal">
844<refentryinfo>
845 <title>LINUX</title>
846 <productname>Kernel Hackers Manual</productname>
847 <date>July 2017</date>
848</refentryinfo>
849<refmeta>
850 <refentrytitle><phrase>ccw_dev_id_is_equal</phrase></refentrytitle>
851 <manvolnum>9</manvolnum>
852 <refmiscinfo class="version">4.4.14</refmiscinfo>
853</refmeta>
854<refnamediv>
855 <refname>ccw_dev_id_is_equal</refname>
856 <refpurpose>
857     compare two ccw_dev_ids
858 </refpurpose>
859</refnamediv>
860<refsynopsisdiv>
861 <title>Synopsis</title>
862  <funcsynopsis><funcprototype>
863   <funcdef>int <function>ccw_dev_id_is_equal </function></funcdef>
864   <paramdef><link linkend="API-struct-ccw-dev-id">struct ccw_dev_id</link> * <parameter>dev_id1</parameter></paramdef>
865   <paramdef><link linkend="API-struct-ccw-dev-id">struct ccw_dev_id</link> * <parameter>dev_id2</parameter></paramdef>
866  </funcprototype></funcsynopsis>
867</refsynopsisdiv>
868<refsect1>
869 <title>Arguments</title>
870 <variablelist>
871  <varlistentry>
872   <term><parameter>dev_id1</parameter></term>
873   <listitem>
874    <para>
875     a ccw_dev_id
876    </para>
877   </listitem>
878  </varlistentry>
879  <varlistentry>
880   <term><parameter>dev_id2</parameter></term>
881   <listitem>
882    <para>
883     another ccw_dev_id
884    </para>
885   </listitem>
886  </varlistentry>
887 </variablelist>
888</refsect1>
889<refsect1>
890<title>Returns</title>
891<para>
892   <constant>1</constant> if the two structures are equal field-by-field,
893   <constant>0</constant> if not.
894</para>
895</refsect1>
896<refsect1>
897<title>Context</title>
898<para>
899   any
900</para>
901</refsect1>
902</refentry>
903
904<refentry id="API-pathmask-to-pos">
905<refentryinfo>
906 <title>LINUX</title>
907 <productname>Kernel Hackers Manual</productname>
908 <date>July 2017</date>
909</refentryinfo>
910<refmeta>
911 <refentrytitle><phrase>pathmask_to_pos</phrase></refentrytitle>
912 <manvolnum>9</manvolnum>
913 <refmiscinfo class="version">4.4.14</refmiscinfo>
914</refmeta>
915<refnamediv>
916 <refname>pathmask_to_pos</refname>
917 <refpurpose>
918     find the position of the left-most bit in a pathmask
919 </refpurpose>
920</refnamediv>
921<refsynopsisdiv>
922 <title>Synopsis</title>
923  <funcsynopsis><funcprototype>
924   <funcdef>u8 <function>pathmask_to_pos </function></funcdef>
925   <paramdef>u8 <parameter>mask</parameter></paramdef>
926  </funcprototype></funcsynopsis>
927</refsynopsisdiv>
928<refsect1>
929 <title>Arguments</title>
930 <variablelist>
931  <varlistentry>
932   <term><parameter>mask</parameter></term>
933   <listitem>
934    <para>
935     pathmask with at least one bit set
936    </para>
937   </listitem>
938  </varlistentry>
939 </variablelist>
940</refsect1>
941</refentry>
942
943    </sect1>
944    <sect1 id="ccwdev">
945     <title>ccw devices</title>
946    <para>
947      Devices that want to initiate channel I/O need to attach to the ccw bus.
948      Interaction with the driver core is done via the common I/O layer, which
949      provides the abstractions of ccw devices and ccw device drivers.
950    </para>
951    <para>
952      The functions that initiate or terminate channel I/O all act upon a
953      ccw device structure. Device drivers must not bypass those functions
954      or strange side effects may happen.
955    </para>
956<!-- arch/s390/include/asm/ccwdev.h -->
957<refentry id="API-struct-ccw-device">
958<refentryinfo>
959 <title>LINUX</title>
960 <productname>Kernel Hackers Manual</productname>
961 <date>July 2017</date>
962</refentryinfo>
963<refmeta>
964 <refentrytitle><phrase>struct ccw_device</phrase></refentrytitle>
965 <manvolnum>9</manvolnum>
966 <refmiscinfo class="version">4.4.14</refmiscinfo>
967</refmeta>
968<refnamediv>
969 <refname>struct ccw_device</refname>
970 <refpurpose>
971  channel attached device
972 </refpurpose>
973</refnamediv>
974<refsynopsisdiv>
975 <title>Synopsis</title>
976  <programlisting>
977struct ccw_device {
978  spinlock_t * ccwlock;
979  struct ccw_device_id id;
980  struct ccw_driver * drv;
981  struct device dev;
982  int online;
983  void (* handler) (struct ccw_device *, unsigned long, struct irb *);
984};  </programlisting>
985</refsynopsisdiv>
986 <refsect1>
987  <title>Members</title>
988  <variablelist>
989    <varlistentry>      <term>ccwlock</term>
990      <listitem><para>
991pointer to device lock
992      </para></listitem>
993    </varlistentry>
994    <varlistentry>      <term>id</term>
995      <listitem><para>
996id of this device
997      </para></listitem>
998    </varlistentry>
999    <varlistentry>      <term>drv</term>
1000      <listitem><para>
1001ccw driver for this device
1002      </para></listitem>
1003    </varlistentry>
1004    <varlistentry>      <term>dev</term>
1005      <listitem><para>
1006embedded device structure
1007      </para></listitem>
1008    </varlistentry>
1009    <varlistentry>      <term>online</term>
1010      <listitem><para>
1011online status of device
1012      </para></listitem>
1013    </varlistentry>
1014    <varlistentry>      <term>handler</term>
1015      <listitem><para>
1016interrupt handler
1017      </para></listitem>
1018    </varlistentry>
1019  </variablelist>
1020 </refsect1>
1021<refsect1>
1022<title>Description</title>
1023<para>
1024   <parameter>handler</parameter> is a member of the device rather than the driver since a driver
1025   can have different interrupt handlers for different ccw devices
1026   (multi-subchannel drivers).
1027</para>
1028</refsect1>
1029</refentry>
1030
1031<refentry id="API-struct-ccw-driver">
1032<refentryinfo>
1033 <title>LINUX</title>
1034 <productname>Kernel Hackers Manual</productname>
1035 <date>July 2017</date>
1036</refentryinfo>
1037<refmeta>
1038 <refentrytitle><phrase>struct ccw_driver</phrase></refentrytitle>
1039 <manvolnum>9</manvolnum>
1040 <refmiscinfo class="version">4.4.14</refmiscinfo>
1041</refmeta>
1042<refnamediv>
1043 <refname>struct ccw_driver</refname>
1044 <refpurpose>
1045     device driver for channel attached devices
1046 </refpurpose>
1047</refnamediv>
1048<refsynopsisdiv>
1049 <title>Synopsis</title>
1050  <programlisting>
1051struct ccw_driver {
1052  struct ccw_device_id * ids;
1053  int (* probe) (struct ccw_device *);
1054  void (* remove) (struct ccw_device *);
1055  int (* set_online) (struct ccw_device *);
1056  int (* set_offline) (struct ccw_device *);
1057  int (* notify) (struct ccw_device *, int);
1058  void (* path_event) (struct ccw_device *, int *);
1059  void (* shutdown) (struct ccw_device *);
1060  int (* prepare) (struct ccw_device *);
1061  void (* complete) (struct ccw_device *);
1062  int (* freeze) (struct ccw_device *);
1063  int (* thaw) (struct ccw_device *);
1064  int (* restore) (struct ccw_device *);
1065  enum uc_todo (* uc_handler) (struct ccw_device *, struct irb *);
1066  struct device_driver driver;
1067  enum interruption_class int_class;
1068};  </programlisting>
1069</refsynopsisdiv>
1070 <refsect1>
1071  <title>Members</title>
1072  <variablelist>
1073    <varlistentry>      <term>ids</term>
1074      <listitem><para>
1075   ids supported by this driver
1076      </para></listitem>
1077    </varlistentry>
1078    <varlistentry>      <term>probe</term>
1079      <listitem><para>
1080   function called on probe
1081      </para></listitem>
1082    </varlistentry>
1083    <varlistentry>      <term>remove</term>
1084      <listitem><para>
1085   function called on remove
1086      </para></listitem>
1087    </varlistentry>
1088    <varlistentry>      <term>set_online</term>
1089      <listitem><para>
1090   called when setting device online
1091      </para></listitem>
1092    </varlistentry>
1093    <varlistentry>      <term>set_offline</term>
1094      <listitem><para>
1095   called when setting device offline
1096      </para></listitem>
1097    </varlistentry>
1098    <varlistentry>      <term>notify</term>
1099      <listitem><para>
1100   notify driver of device state changes
1101      </para></listitem>
1102    </varlistentry>
1103    <varlistentry>      <term>path_event</term>
1104      <listitem><para>
1105   notify driver of channel path events
1106      </para></listitem>
1107    </varlistentry>
1108    <varlistentry>      <term>shutdown</term>
1109      <listitem><para>
1110   called at device shutdown
1111      </para></listitem>
1112    </varlistentry>
1113    <varlistentry>      <term>prepare</term>
1114      <listitem><para>
1115   prepare for pm state transition
1116      </para></listitem>
1117    </varlistentry>
1118    <varlistentry>      <term>complete</term>
1119      <listitem><para>
1120   undo work done in <parameter>prepare</parameter>
1121      </para></listitem>
1122    </varlistentry>
1123    <varlistentry>      <term>freeze</term>
1124      <listitem><para>
1125   callback for freezing during hibernation snapshotting
1126      </para></listitem>
1127    </varlistentry>
1128    <varlistentry>      <term>thaw</term>
1129      <listitem><para>
1130   undo work done in <parameter>freeze</parameter>
1131      </para></listitem>
1132    </varlistentry>
1133    <varlistentry>      <term>restore</term>
1134      <listitem><para>
1135   callback for restoring after hibernation
1136      </para></listitem>
1137    </varlistentry>
1138    <varlistentry>      <term>uc_handler</term>
1139      <listitem><para>
1140   callback for unit check handler
1141      </para></listitem>
1142    </varlistentry>
1143    <varlistentry>      <term>driver</term>
1144      <listitem><para>
1145   embedded device driver structure
1146      </para></listitem>
1147    </varlistentry>
1148    <varlistentry>      <term>int_class</term>
1149      <listitem><para>
1150   interruption class to use for accounting interrupts
1151      </para></listitem>
1152    </varlistentry>
1153  </variablelist>
1154 </refsect1>
1155</refentry>
1156
1157<!-- drivers/s390/cio/device.c -->
1158<refentry id="API-ccw-device-set-offline">
1159<refentryinfo>
1160 <title>LINUX</title>
1161 <productname>Kernel Hackers Manual</productname>
1162 <date>July 2017</date>
1163</refentryinfo>
1164<refmeta>
1165 <refentrytitle><phrase>ccw_device_set_offline</phrase></refentrytitle>
1166 <manvolnum>9</manvolnum>
1167 <refmiscinfo class="version">4.4.14</refmiscinfo>
1168</refmeta>
1169<refnamediv>
1170 <refname>ccw_device_set_offline</refname>
1171 <refpurpose>
1172  disable a ccw device for I/O
1173 </refpurpose>
1174</refnamediv>
1175<refsynopsisdiv>
1176 <title>Synopsis</title>
1177  <funcsynopsis><funcprototype>
1178   <funcdef>int <function>ccw_device_set_offline </function></funcdef>
1179   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1180  </funcprototype></funcsynopsis>
1181</refsynopsisdiv>
1182<refsect1>
1183 <title>Arguments</title>
1184 <variablelist>
1185  <varlistentry>
1186   <term><parameter>cdev</parameter></term>
1187   <listitem>
1188    <para>
1189     target ccw device
1190    </para>
1191   </listitem>
1192  </varlistentry>
1193 </variablelist>
1194</refsect1>
1195<refsect1>
1196<title>Description</title>
1197<para>
1198   This function calls the driver's <function>set_offline</function> function for <parameter>cdev</parameter>, if
1199   given, and then disables <parameter>cdev</parameter>.
1200</para>
1201</refsect1>
1202<refsect1>
1203<title>Returns</title>
1204<para>
1205   <constant>0</constant> on success and a negative error value on failure.
1206</para>
1207</refsect1>
1208<refsect1>
1209<title>Context</title>
1210<para>
1211   enabled, ccw device lock not held
1212</para>
1213</refsect1>
1214</refentry>
1215
1216<refentry id="API-ccw-device-set-online">
1217<refentryinfo>
1218 <title>LINUX</title>
1219 <productname>Kernel Hackers Manual</productname>
1220 <date>July 2017</date>
1221</refentryinfo>
1222<refmeta>
1223 <refentrytitle><phrase>ccw_device_set_online</phrase></refentrytitle>
1224 <manvolnum>9</manvolnum>
1225 <refmiscinfo class="version">4.4.14</refmiscinfo>
1226</refmeta>
1227<refnamediv>
1228 <refname>ccw_device_set_online</refname>
1229 <refpurpose>
1230     enable a ccw device for I/O
1231 </refpurpose>
1232</refnamediv>
1233<refsynopsisdiv>
1234 <title>Synopsis</title>
1235  <funcsynopsis><funcprototype>
1236   <funcdef>int <function>ccw_device_set_online </function></funcdef>
1237   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1238  </funcprototype></funcsynopsis>
1239</refsynopsisdiv>
1240<refsect1>
1241 <title>Arguments</title>
1242 <variablelist>
1243  <varlistentry>
1244   <term><parameter>cdev</parameter></term>
1245   <listitem>
1246    <para>
1247     target ccw device
1248    </para>
1249   </listitem>
1250  </varlistentry>
1251 </variablelist>
1252</refsect1>
1253<refsect1>
1254<title>Description</title>
1255<para>
1256   This function first enables <parameter>cdev</parameter> and then calls the driver's <function>set_online</function>
1257   function for <parameter>cdev</parameter>, if given. If <function>set_online</function> returns an error, <parameter>cdev</parameter> is
1258   disabled again.
1259</para>
1260</refsect1>
1261<refsect1>
1262<title>Returns</title>
1263<para>
1264   <constant>0</constant> on success and a negative error value on failure.
1265</para>
1266</refsect1>
1267<refsect1>
1268<title>Context</title>
1269<para>
1270   enabled, ccw device lock not held
1271</para>
1272</refsect1>
1273</refentry>
1274
1275<refentry id="API-get-ccwdev-by-dev-id">
1276<refentryinfo>
1277 <title>LINUX</title>
1278 <productname>Kernel Hackers Manual</productname>
1279 <date>July 2017</date>
1280</refentryinfo>
1281<refmeta>
1282 <refentrytitle><phrase>get_ccwdev_by_dev_id</phrase></refentrytitle>
1283 <manvolnum>9</manvolnum>
1284 <refmiscinfo class="version">4.4.14</refmiscinfo>
1285</refmeta>
1286<refnamediv>
1287 <refname>get_ccwdev_by_dev_id</refname>
1288 <refpurpose>
1289     obtain device from a ccw device id
1290 </refpurpose>
1291</refnamediv>
1292<refsynopsisdiv>
1293 <title>Synopsis</title>
1294  <funcsynopsis><funcprototype>
1295   <funcdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <function>get_ccwdev_by_dev_id </function></funcdef>
1296   <paramdef><link linkend="API-struct-ccw-dev-id">struct ccw_dev_id</link> * <parameter>dev_id</parameter></paramdef>
1297  </funcprototype></funcsynopsis>
1298</refsynopsisdiv>
1299<refsect1>
1300 <title>Arguments</title>
1301 <variablelist>
1302  <varlistentry>
1303   <term><parameter>dev_id</parameter></term>
1304   <listitem>
1305    <para>
1306     id of the device to be searched
1307    </para>
1308   </listitem>
1309  </varlistentry>
1310 </variablelist>
1311</refsect1>
1312<refsect1>
1313<title>Description</title>
1314<para>
1315   This function searches all devices attached to the ccw bus for a device
1316   matching <parameter>dev_id</parameter>.
1317</para>
1318</refsect1>
1319<refsect1>
1320<title>Returns</title>
1321<para>
1322   If a device is found its reference count is increased and returned;
1323   else <constant>NULL</constant> is returned.
1324</para>
1325</refsect1>
1326</refentry>
1327
1328<refentry id="API-get-ccwdev-by-busid">
1329<refentryinfo>
1330 <title>LINUX</title>
1331 <productname>Kernel Hackers Manual</productname>
1332 <date>July 2017</date>
1333</refentryinfo>
1334<refmeta>
1335 <refentrytitle><phrase>get_ccwdev_by_busid</phrase></refentrytitle>
1336 <manvolnum>9</manvolnum>
1337 <refmiscinfo class="version">4.4.14</refmiscinfo>
1338</refmeta>
1339<refnamediv>
1340 <refname>get_ccwdev_by_busid</refname>
1341 <refpurpose>
1342     obtain device from a bus id
1343 </refpurpose>
1344</refnamediv>
1345<refsynopsisdiv>
1346 <title>Synopsis</title>
1347  <funcsynopsis><funcprototype>
1348   <funcdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <function>get_ccwdev_by_busid </function></funcdef>
1349   <paramdef><link linkend="API-struct-ccw-driver">struct ccw_driver</link> * <parameter>cdrv</parameter></paramdef>
1350   <paramdef>const char * <parameter>bus_id</parameter></paramdef>
1351  </funcprototype></funcsynopsis>
1352</refsynopsisdiv>
1353<refsect1>
1354 <title>Arguments</title>
1355 <variablelist>
1356  <varlistentry>
1357   <term><parameter>cdrv</parameter></term>
1358   <listitem>
1359    <para>
1360     driver the device is owned by
1361    </para>
1362   </listitem>
1363  </varlistentry>
1364  <varlistentry>
1365   <term><parameter>bus_id</parameter></term>
1366   <listitem>
1367    <para>
1368     bus id of the device to be searched
1369    </para>
1370   </listitem>
1371  </varlistentry>
1372 </variablelist>
1373</refsect1>
1374<refsect1>
1375<title>Description</title>
1376<para>
1377   This function searches all devices owned by <parameter>cdrv</parameter> for a device with a bus
1378   id matching <parameter>bus_id</parameter>.
1379</para>
1380</refsect1>
1381<refsect1>
1382<title>Returns</title>
1383<para>
1384   If a match is found, its reference count of the found device is increased
1385   and it is returned; else <constant>NULL</constant> is returned.
1386</para>
1387</refsect1>
1388</refentry>
1389
1390<refentry id="API-ccw-driver-register">
1391<refentryinfo>
1392 <title>LINUX</title>
1393 <productname>Kernel Hackers Manual</productname>
1394 <date>July 2017</date>
1395</refentryinfo>
1396<refmeta>
1397 <refentrytitle><phrase>ccw_driver_register</phrase></refentrytitle>
1398 <manvolnum>9</manvolnum>
1399 <refmiscinfo class="version">4.4.14</refmiscinfo>
1400</refmeta>
1401<refnamediv>
1402 <refname>ccw_driver_register</refname>
1403 <refpurpose>
1404     register a ccw driver
1405 </refpurpose>
1406</refnamediv>
1407<refsynopsisdiv>
1408 <title>Synopsis</title>
1409  <funcsynopsis><funcprototype>
1410   <funcdef>int <function>ccw_driver_register </function></funcdef>
1411   <paramdef><link linkend="API-struct-ccw-driver">struct ccw_driver</link> * <parameter>cdriver</parameter></paramdef>
1412  </funcprototype></funcsynopsis>
1413</refsynopsisdiv>
1414<refsect1>
1415 <title>Arguments</title>
1416 <variablelist>
1417  <varlistentry>
1418   <term><parameter>cdriver</parameter></term>
1419   <listitem>
1420    <para>
1421     driver to be registered
1422    </para>
1423   </listitem>
1424  </varlistentry>
1425 </variablelist>
1426</refsect1>
1427<refsect1>
1428<title>Description</title>
1429<para>
1430   This function is mainly a wrapper around <function>driver_register</function>.
1431</para>
1432</refsect1>
1433<refsect1>
1434<title>Returns</title>
1435<para>
1436   <constant>0</constant> on success and a negative error value on failure.
1437</para>
1438</refsect1>
1439</refentry>
1440
1441<refentry id="API-ccw-driver-unregister">
1442<refentryinfo>
1443 <title>LINUX</title>
1444 <productname>Kernel Hackers Manual</productname>
1445 <date>July 2017</date>
1446</refentryinfo>
1447<refmeta>
1448 <refentrytitle><phrase>ccw_driver_unregister</phrase></refentrytitle>
1449 <manvolnum>9</manvolnum>
1450 <refmiscinfo class="version">4.4.14</refmiscinfo>
1451</refmeta>
1452<refnamediv>
1453 <refname>ccw_driver_unregister</refname>
1454 <refpurpose>
1455     deregister a ccw driver
1456 </refpurpose>
1457</refnamediv>
1458<refsynopsisdiv>
1459 <title>Synopsis</title>
1460  <funcsynopsis><funcprototype>
1461   <funcdef>void <function>ccw_driver_unregister </function></funcdef>
1462   <paramdef><link linkend="API-struct-ccw-driver">struct ccw_driver</link> * <parameter>cdriver</parameter></paramdef>
1463  </funcprototype></funcsynopsis>
1464</refsynopsisdiv>
1465<refsect1>
1466 <title>Arguments</title>
1467 <variablelist>
1468  <varlistentry>
1469   <term><parameter>cdriver</parameter></term>
1470   <listitem>
1471    <para>
1472     driver to be deregistered
1473    </para>
1474   </listitem>
1475  </varlistentry>
1476 </variablelist>
1477</refsect1>
1478<refsect1>
1479<title>Description</title>
1480<para>
1481   This function is mainly a wrapper around <function>driver_unregister</function>.
1482</para>
1483</refsect1>
1484</refentry>
1485
1486<refentry id="API-ccw-device-siosl">
1487<refentryinfo>
1488 <title>LINUX</title>
1489 <productname>Kernel Hackers Manual</productname>
1490 <date>July 2017</date>
1491</refentryinfo>
1492<refmeta>
1493 <refentrytitle><phrase>ccw_device_siosl</phrase></refentrytitle>
1494 <manvolnum>9</manvolnum>
1495 <refmiscinfo class="version">4.4.14</refmiscinfo>
1496</refmeta>
1497<refnamediv>
1498 <refname>ccw_device_siosl</refname>
1499 <refpurpose>
1500     initiate logging
1501 </refpurpose>
1502</refnamediv>
1503<refsynopsisdiv>
1504 <title>Synopsis</title>
1505  <funcsynopsis><funcprototype>
1506   <funcdef>int <function>ccw_device_siosl </function></funcdef>
1507   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1508  </funcprototype></funcsynopsis>
1509</refsynopsisdiv>
1510<refsect1>
1511 <title>Arguments</title>
1512 <variablelist>
1513  <varlistentry>
1514   <term><parameter>cdev</parameter></term>
1515   <listitem>
1516    <para>
1517     ccw device
1518    </para>
1519   </listitem>
1520  </varlistentry>
1521 </variablelist>
1522</refsect1>
1523<refsect1>
1524<title>Description</title>
1525<para>
1526   This function is used to invoke model-dependent logging within the channel
1527   subsystem.
1528</para>
1529</refsect1>
1530</refentry>
1531
1532<!-- drivers/s390/cio/device_ops.c -->
1533<refentry id="API-ccw-device-set-options-mask">
1534<refentryinfo>
1535 <title>LINUX</title>
1536 <productname>Kernel Hackers Manual</productname>
1537 <date>July 2017</date>
1538</refentryinfo>
1539<refmeta>
1540 <refentrytitle><phrase>ccw_device_set_options_mask</phrase></refentrytitle>
1541 <manvolnum>9</manvolnum>
1542 <refmiscinfo class="version">4.4.14</refmiscinfo>
1543</refmeta>
1544<refnamediv>
1545 <refname>ccw_device_set_options_mask</refname>
1546 <refpurpose>
1547  set some options and unset the rest
1548 </refpurpose>
1549</refnamediv>
1550<refsynopsisdiv>
1551 <title>Synopsis</title>
1552  <funcsynopsis><funcprototype>
1553   <funcdef>int <function>ccw_device_set_options_mask </function></funcdef>
1554   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1555   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
1556  </funcprototype></funcsynopsis>
1557</refsynopsisdiv>
1558<refsect1>
1559 <title>Arguments</title>
1560 <variablelist>
1561  <varlistentry>
1562   <term><parameter>cdev</parameter></term>
1563   <listitem>
1564    <para>
1565     device for which the options are to be set
1566    </para>
1567   </listitem>
1568  </varlistentry>
1569  <varlistentry>
1570   <term><parameter>flags</parameter></term>
1571   <listitem>
1572    <para>
1573     options to be set
1574    </para>
1575   </listitem>
1576  </varlistentry>
1577 </variablelist>
1578</refsect1>
1579<refsect1>
1580<title>Description</title>
1581<para>
1582   All flags specified in <parameter>flags</parameter> are set, all flags not specified in <parameter>flags</parameter>
1583   are cleared.
1584</para>
1585</refsect1>
1586<refsect1>
1587<title>Returns</title>
1588<para>
1589   <constant>0</constant> on success, -<constant>EINVAL</constant> on an invalid flag combination.
1590</para>
1591</refsect1>
1592</refentry>
1593
1594<refentry id="API-ccw-device-set-options">
1595<refentryinfo>
1596 <title>LINUX</title>
1597 <productname>Kernel Hackers Manual</productname>
1598 <date>July 2017</date>
1599</refentryinfo>
1600<refmeta>
1601 <refentrytitle><phrase>ccw_device_set_options</phrase></refentrytitle>
1602 <manvolnum>9</manvolnum>
1603 <refmiscinfo class="version">4.4.14</refmiscinfo>
1604</refmeta>
1605<refnamediv>
1606 <refname>ccw_device_set_options</refname>
1607 <refpurpose>
1608     set some options
1609 </refpurpose>
1610</refnamediv>
1611<refsynopsisdiv>
1612 <title>Synopsis</title>
1613  <funcsynopsis><funcprototype>
1614   <funcdef>int <function>ccw_device_set_options </function></funcdef>
1615   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1616   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
1617  </funcprototype></funcsynopsis>
1618</refsynopsisdiv>
1619<refsect1>
1620 <title>Arguments</title>
1621 <variablelist>
1622  <varlistentry>
1623   <term><parameter>cdev</parameter></term>
1624   <listitem>
1625    <para>
1626     device for which the options are to be set
1627    </para>
1628   </listitem>
1629  </varlistentry>
1630  <varlistentry>
1631   <term><parameter>flags</parameter></term>
1632   <listitem>
1633    <para>
1634     options to be set
1635    </para>
1636   </listitem>
1637  </varlistentry>
1638 </variablelist>
1639</refsect1>
1640<refsect1>
1641<title>Description</title>
1642<para>
1643   All flags specified in <parameter>flags</parameter> are set, the remainder is left untouched.
1644</para>
1645</refsect1>
1646<refsect1>
1647<title>Returns</title>
1648<para>
1649   <constant>0</constant> on success, -<constant>EINVAL</constant> if an invalid flag combination would ensue.
1650</para>
1651</refsect1>
1652</refentry>
1653
1654<refentry id="API-ccw-device-clear-options">
1655<refentryinfo>
1656 <title>LINUX</title>
1657 <productname>Kernel Hackers Manual</productname>
1658 <date>July 2017</date>
1659</refentryinfo>
1660<refmeta>
1661 <refentrytitle><phrase>ccw_device_clear_options</phrase></refentrytitle>
1662 <manvolnum>9</manvolnum>
1663 <refmiscinfo class="version">4.4.14</refmiscinfo>
1664</refmeta>
1665<refnamediv>
1666 <refname>ccw_device_clear_options</refname>
1667 <refpurpose>
1668     clear some options
1669 </refpurpose>
1670</refnamediv>
1671<refsynopsisdiv>
1672 <title>Synopsis</title>
1673  <funcsynopsis><funcprototype>
1674   <funcdef>void <function>ccw_device_clear_options </function></funcdef>
1675   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1676   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
1677  </funcprototype></funcsynopsis>
1678</refsynopsisdiv>
1679<refsect1>
1680 <title>Arguments</title>
1681 <variablelist>
1682  <varlistentry>
1683   <term><parameter>cdev</parameter></term>
1684   <listitem>
1685    <para>
1686     device for which the options are to be cleared
1687    </para>
1688   </listitem>
1689  </varlistentry>
1690  <varlistentry>
1691   <term><parameter>flags</parameter></term>
1692   <listitem>
1693    <para>
1694     options to be cleared
1695    </para>
1696   </listitem>
1697  </varlistentry>
1698 </variablelist>
1699</refsect1>
1700<refsect1>
1701<title>Description</title>
1702<para>
1703   All flags specified in <parameter>flags</parameter> are cleared, the remainder is left untouched.
1704</para>
1705</refsect1>
1706</refentry>
1707
1708<refentry id="API-ccw-device-is-pathgroup">
1709<refentryinfo>
1710 <title>LINUX</title>
1711 <productname>Kernel Hackers Manual</productname>
1712 <date>July 2017</date>
1713</refentryinfo>
1714<refmeta>
1715 <refentrytitle><phrase>ccw_device_is_pathgroup</phrase></refentrytitle>
1716 <manvolnum>9</manvolnum>
1717 <refmiscinfo class="version">4.4.14</refmiscinfo>
1718</refmeta>
1719<refnamediv>
1720 <refname>ccw_device_is_pathgroup</refname>
1721 <refpurpose>
1722     determine if paths to this device are grouped
1723 </refpurpose>
1724</refnamediv>
1725<refsynopsisdiv>
1726 <title>Synopsis</title>
1727  <funcsynopsis><funcprototype>
1728   <funcdef>int <function>ccw_device_is_pathgroup </function></funcdef>
1729   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1730  </funcprototype></funcsynopsis>
1731</refsynopsisdiv>
1732<refsect1>
1733 <title>Arguments</title>
1734 <variablelist>
1735  <varlistentry>
1736   <term><parameter>cdev</parameter></term>
1737   <listitem>
1738    <para>
1739     ccw device
1740    </para>
1741   </listitem>
1742  </varlistentry>
1743 </variablelist>
1744</refsect1>
1745<refsect1>
1746<title>Description</title>
1747<para>
1748   Return non-zero if there is a path group, zero otherwise.
1749</para>
1750</refsect1>
1751</refentry>
1752
1753<refentry id="API-ccw-device-is-multipath">
1754<refentryinfo>
1755 <title>LINUX</title>
1756 <productname>Kernel Hackers Manual</productname>
1757 <date>July 2017</date>
1758</refentryinfo>
1759<refmeta>
1760 <refentrytitle><phrase>ccw_device_is_multipath</phrase></refentrytitle>
1761 <manvolnum>9</manvolnum>
1762 <refmiscinfo class="version">4.4.14</refmiscinfo>
1763</refmeta>
1764<refnamediv>
1765 <refname>ccw_device_is_multipath</refname>
1766 <refpurpose>
1767     determine if device is operating in multipath mode
1768 </refpurpose>
1769</refnamediv>
1770<refsynopsisdiv>
1771 <title>Synopsis</title>
1772  <funcsynopsis><funcprototype>
1773   <funcdef>int <function>ccw_device_is_multipath </function></funcdef>
1774   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1775  </funcprototype></funcsynopsis>
1776</refsynopsisdiv>
1777<refsect1>
1778 <title>Arguments</title>
1779 <variablelist>
1780  <varlistentry>
1781   <term><parameter>cdev</parameter></term>
1782   <listitem>
1783    <para>
1784     ccw device
1785    </para>
1786   </listitem>
1787  </varlistentry>
1788 </variablelist>
1789</refsect1>
1790<refsect1>
1791<title>Description</title>
1792<para>
1793   Return non-zero if device is operating in multipath mode, zero otherwise.
1794</para>
1795</refsect1>
1796</refentry>
1797
1798<refentry id="API-ccw-device-clear">
1799<refentryinfo>
1800 <title>LINUX</title>
1801 <productname>Kernel Hackers Manual</productname>
1802 <date>July 2017</date>
1803</refentryinfo>
1804<refmeta>
1805 <refentrytitle><phrase>ccw_device_clear</phrase></refentrytitle>
1806 <manvolnum>9</manvolnum>
1807 <refmiscinfo class="version">4.4.14</refmiscinfo>
1808</refmeta>
1809<refnamediv>
1810 <refname>ccw_device_clear</refname>
1811 <refpurpose>
1812     terminate I/O request processing
1813 </refpurpose>
1814</refnamediv>
1815<refsynopsisdiv>
1816 <title>Synopsis</title>
1817  <funcsynopsis><funcprototype>
1818   <funcdef>int <function>ccw_device_clear </function></funcdef>
1819   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1820   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
1821  </funcprototype></funcsynopsis>
1822</refsynopsisdiv>
1823<refsect1>
1824 <title>Arguments</title>
1825 <variablelist>
1826  <varlistentry>
1827   <term><parameter>cdev</parameter></term>
1828   <listitem>
1829    <para>
1830     target ccw device
1831    </para>
1832   </listitem>
1833  </varlistentry>
1834  <varlistentry>
1835   <term><parameter>intparm</parameter></term>
1836   <listitem>
1837    <para>
1838     interruption parameter; value is only used if no I/O is
1839     outstanding, otherwise the intparm associated with the I/O request
1840     is returned
1841    </para>
1842   </listitem>
1843  </varlistentry>
1844 </variablelist>
1845</refsect1>
1846<refsect1>
1847<title>Description</title>
1848<para>
1849   <function><link linkend="API-ccw-device-clear">ccw_device_clear</link></function> calls csch on <parameter>cdev</parameter>'s subchannel.
1850</para>
1851</refsect1>
1852<refsect1>
1853<title>Returns</title>
1854<para>
1855   <constant>0</constant> on success,
1856   -<constant>ENODEV</constant> on device not operational,
1857   -<constant>EINVAL</constant> on invalid device state.
1858</para>
1859</refsect1>
1860<refsect1>
1861<title>Context</title>
1862<para>
1863   Interrupts disabled, ccw device lock held
1864</para>
1865</refsect1>
1866</refentry>
1867
1868<refentry id="API-ccw-device-start-key">
1869<refentryinfo>
1870 <title>LINUX</title>
1871 <productname>Kernel Hackers Manual</productname>
1872 <date>July 2017</date>
1873</refentryinfo>
1874<refmeta>
1875 <refentrytitle><phrase>ccw_device_start_key</phrase></refentrytitle>
1876 <manvolnum>9</manvolnum>
1877 <refmiscinfo class="version">4.4.14</refmiscinfo>
1878</refmeta>
1879<refnamediv>
1880 <refname>ccw_device_start_key</refname>
1881 <refpurpose>
1882     start a s390 channel program with key
1883 </refpurpose>
1884</refnamediv>
1885<refsynopsisdiv>
1886 <title>Synopsis</title>
1887  <funcsynopsis><funcprototype>
1888   <funcdef>int <function>ccw_device_start_key </function></funcdef>
1889   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
1890   <paramdef><link linkend="API-struct-ccw1">struct ccw1</link> * <parameter>cpa</parameter></paramdef>
1891   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
1892   <paramdef>__u8 <parameter>lpm</parameter></paramdef>
1893   <paramdef>__u8 <parameter>key</parameter></paramdef>
1894   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
1895  </funcprototype></funcsynopsis>
1896</refsynopsisdiv>
1897<refsect1>
1898 <title>Arguments</title>
1899 <variablelist>
1900  <varlistentry>
1901   <term><parameter>cdev</parameter></term>
1902   <listitem>
1903    <para>
1904     target ccw device
1905    </para>
1906   </listitem>
1907  </varlistentry>
1908  <varlistentry>
1909   <term><parameter>cpa</parameter></term>
1910   <listitem>
1911    <para>
1912     logical start address of channel program
1913    </para>
1914   </listitem>
1915  </varlistentry>
1916  <varlistentry>
1917   <term><parameter>intparm</parameter></term>
1918   <listitem>
1919    <para>
1920     user specific interruption parameter; will be presented back to
1921     <parameter>cdev</parameter>'s interrupt handler. Allows a device driver to associate
1922     the interrupt with a particular I/O request.
1923    </para>
1924   </listitem>
1925  </varlistentry>
1926  <varlistentry>
1927   <term><parameter>lpm</parameter></term>
1928   <listitem>
1929    <para>
1930     defines the channel path to be used for a specific I/O request. A
1931     value of 0 will make cio use the opm.
1932    </para>
1933   </listitem>
1934  </varlistentry>
1935  <varlistentry>
1936   <term><parameter>key</parameter></term>
1937   <listitem>
1938    <para>
1939     storage key to be used for the I/O
1940    </para>
1941   </listitem>
1942  </varlistentry>
1943  <varlistentry>
1944   <term><parameter>flags</parameter></term>
1945   <listitem>
1946    <para>
1947     additional flags; defines the action to be performed for I/O
1948     processing.
1949    </para>
1950   </listitem>
1951  </varlistentry>
1952 </variablelist>
1953</refsect1>
1954<refsect1>
1955<title>Description</title>
1956<para>
1957   Start a S/390 channel program. When the interrupt arrives, the
1958   IRQ handler is called, either immediately, delayed (dev-end missing,
1959   or sense required) or never (no IRQ handler registered).
1960</para>
1961</refsect1>
1962<refsect1>
1963<title>Returns</title>
1964<para>
1965   <constant>0</constant>, if the operation was successful;
1966   -<constant>EBUSY</constant>, if the device is busy, or status pending;
1967   -<constant>EACCES</constant>, if no path specified in <parameter>lpm</parameter> is operational;
1968   -<constant>ENODEV</constant>, if the device is not operational.
1969</para>
1970</refsect1>
1971<refsect1>
1972<title>Context</title>
1973<para>
1974   Interrupts disabled, ccw device lock held
1975</para>
1976</refsect1>
1977</refentry>
1978
1979<refentry id="API-ccw-device-start-timeout-key">
1980<refentryinfo>
1981 <title>LINUX</title>
1982 <productname>Kernel Hackers Manual</productname>
1983 <date>July 2017</date>
1984</refentryinfo>
1985<refmeta>
1986 <refentrytitle><phrase>ccw_device_start_timeout_key</phrase></refentrytitle>
1987 <manvolnum>9</manvolnum>
1988 <refmiscinfo class="version">4.4.14</refmiscinfo>
1989</refmeta>
1990<refnamediv>
1991 <refname>ccw_device_start_timeout_key</refname>
1992 <refpurpose>
1993     start a s390 channel program with timeout and key
1994 </refpurpose>
1995</refnamediv>
1996<refsynopsisdiv>
1997 <title>Synopsis</title>
1998  <funcsynopsis><funcprototype>
1999   <funcdef>int <function>ccw_device_start_timeout_key </function></funcdef>
2000   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2001   <paramdef><link linkend="API-struct-ccw1">struct ccw1</link> * <parameter>cpa</parameter></paramdef>
2002   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2003   <paramdef>__u8 <parameter>lpm</parameter></paramdef>
2004   <paramdef>__u8 <parameter>key</parameter></paramdef>
2005   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
2006   <paramdef>int <parameter>expires</parameter></paramdef>
2007  </funcprototype></funcsynopsis>
2008</refsynopsisdiv>
2009<refsect1>
2010 <title>Arguments</title>
2011 <variablelist>
2012  <varlistentry>
2013   <term><parameter>cdev</parameter></term>
2014   <listitem>
2015    <para>
2016     target ccw device
2017    </para>
2018   </listitem>
2019  </varlistentry>
2020  <varlistentry>
2021   <term><parameter>cpa</parameter></term>
2022   <listitem>
2023    <para>
2024     logical start address of channel program
2025    </para>
2026   </listitem>
2027  </varlistentry>
2028  <varlistentry>
2029   <term><parameter>intparm</parameter></term>
2030   <listitem>
2031    <para>
2032     user specific interruption parameter; will be presented back to
2033     <parameter>cdev</parameter>'s interrupt handler. Allows a device driver to associate
2034     the interrupt with a particular I/O request.
2035    </para>
2036   </listitem>
2037  </varlistentry>
2038  <varlistentry>
2039   <term><parameter>lpm</parameter></term>
2040   <listitem>
2041    <para>
2042     defines the channel path to be used for a specific I/O request. A
2043     value of 0 will make cio use the opm.
2044    </para>
2045   </listitem>
2046  </varlistentry>
2047  <varlistentry>
2048   <term><parameter>key</parameter></term>
2049   <listitem>
2050    <para>
2051     storage key to be used for the I/O
2052    </para>
2053   </listitem>
2054  </varlistentry>
2055  <varlistentry>
2056   <term><parameter>flags</parameter></term>
2057   <listitem>
2058    <para>
2059     additional flags; defines the action to be performed for I/O
2060     processing.
2061    </para>
2062   </listitem>
2063  </varlistentry>
2064  <varlistentry>
2065   <term><parameter>expires</parameter></term>
2066   <listitem>
2067    <para>
2068     timeout value in jiffies
2069    </para>
2070   </listitem>
2071  </varlistentry>
2072 </variablelist>
2073</refsect1>
2074<refsect1>
2075<title>Description</title>
2076<para>
2077   Start a S/390 channel program. When the interrupt arrives, the
2078   IRQ handler is called, either immediately, delayed (dev-end missing,
2079   or sense required) or never (no IRQ handler registered).
2080   This function notifies the device driver if the channel program has not
2081   completed during the time specified by <parameter>expires</parameter>. If a timeout occurs, the
2082   channel program is terminated via xsch, hsch or csch, and the device's
2083   interrupt handler will be called with an irb containing ERR_PTR(-<constant>ETIMEDOUT</constant>).
2084</para>
2085</refsect1>
2086<refsect1>
2087<title>Returns</title>
2088<para>
2089   <constant>0</constant>, if the operation was successful;
2090   -<constant>EBUSY</constant>, if the device is busy, or status pending;
2091   -<constant>EACCES</constant>, if no path specified in <parameter>lpm</parameter> is operational;
2092   -<constant>ENODEV</constant>, if the device is not operational.
2093</para>
2094</refsect1>
2095<refsect1>
2096<title>Context</title>
2097<para>
2098   Interrupts disabled, ccw device lock held
2099</para>
2100</refsect1>
2101</refentry>
2102
2103<refentry id="API-ccw-device-start">
2104<refentryinfo>
2105 <title>LINUX</title>
2106 <productname>Kernel Hackers Manual</productname>
2107 <date>July 2017</date>
2108</refentryinfo>
2109<refmeta>
2110 <refentrytitle><phrase>ccw_device_start</phrase></refentrytitle>
2111 <manvolnum>9</manvolnum>
2112 <refmiscinfo class="version">4.4.14</refmiscinfo>
2113</refmeta>
2114<refnamediv>
2115 <refname>ccw_device_start</refname>
2116 <refpurpose>
2117     start a s390 channel program
2118 </refpurpose>
2119</refnamediv>
2120<refsynopsisdiv>
2121 <title>Synopsis</title>
2122  <funcsynopsis><funcprototype>
2123   <funcdef>int <function>ccw_device_start </function></funcdef>
2124   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2125   <paramdef><link linkend="API-struct-ccw1">struct ccw1</link> * <parameter>cpa</parameter></paramdef>
2126   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2127   <paramdef>__u8 <parameter>lpm</parameter></paramdef>
2128   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
2129  </funcprototype></funcsynopsis>
2130</refsynopsisdiv>
2131<refsect1>
2132 <title>Arguments</title>
2133 <variablelist>
2134  <varlistentry>
2135   <term><parameter>cdev</parameter></term>
2136   <listitem>
2137    <para>
2138     target ccw device
2139    </para>
2140   </listitem>
2141  </varlistentry>
2142  <varlistentry>
2143   <term><parameter>cpa</parameter></term>
2144   <listitem>
2145    <para>
2146     logical start address of channel program
2147    </para>
2148   </listitem>
2149  </varlistentry>
2150  <varlistentry>
2151   <term><parameter>intparm</parameter></term>
2152   <listitem>
2153    <para>
2154     user specific interruption parameter; will be presented back to
2155     <parameter>cdev</parameter>'s interrupt handler. Allows a device driver to associate
2156     the interrupt with a particular I/O request.
2157    </para>
2158   </listitem>
2159  </varlistentry>
2160  <varlistentry>
2161   <term><parameter>lpm</parameter></term>
2162   <listitem>
2163    <para>
2164     defines the channel path to be used for a specific I/O request. A
2165     value of 0 will make cio use the opm.
2166    </para>
2167   </listitem>
2168  </varlistentry>
2169  <varlistentry>
2170   <term><parameter>flags</parameter></term>
2171   <listitem>
2172    <para>
2173     additional flags; defines the action to be performed for I/O
2174     processing.
2175    </para>
2176   </listitem>
2177  </varlistentry>
2178 </variablelist>
2179</refsect1>
2180<refsect1>
2181<title>Description</title>
2182<para>
2183   Start a S/390 channel program. When the interrupt arrives, the
2184   IRQ handler is called, either immediately, delayed (dev-end missing,
2185   or sense required) or never (no IRQ handler registered).
2186</para>
2187</refsect1>
2188<refsect1>
2189<title>Returns</title>
2190<para>
2191   <constant>0</constant>, if the operation was successful;
2192   -<constant>EBUSY</constant>, if the device is busy, or status pending;
2193   -<constant>EACCES</constant>, if no path specified in <parameter>lpm</parameter> is operational;
2194   -<constant>ENODEV</constant>, if the device is not operational.
2195</para>
2196</refsect1>
2197<refsect1>
2198<title>Context</title>
2199<para>
2200   Interrupts disabled, ccw device lock held
2201</para>
2202</refsect1>
2203</refentry>
2204
2205<refentry id="API-ccw-device-start-timeout">
2206<refentryinfo>
2207 <title>LINUX</title>
2208 <productname>Kernel Hackers Manual</productname>
2209 <date>July 2017</date>
2210</refentryinfo>
2211<refmeta>
2212 <refentrytitle><phrase>ccw_device_start_timeout</phrase></refentrytitle>
2213 <manvolnum>9</manvolnum>
2214 <refmiscinfo class="version">4.4.14</refmiscinfo>
2215</refmeta>
2216<refnamediv>
2217 <refname>ccw_device_start_timeout</refname>
2218 <refpurpose>
2219     start a s390 channel program with timeout
2220 </refpurpose>
2221</refnamediv>
2222<refsynopsisdiv>
2223 <title>Synopsis</title>
2224  <funcsynopsis><funcprototype>
2225   <funcdef>int <function>ccw_device_start_timeout </function></funcdef>
2226   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2227   <paramdef><link linkend="API-struct-ccw1">struct ccw1</link> * <parameter>cpa</parameter></paramdef>
2228   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2229   <paramdef>__u8 <parameter>lpm</parameter></paramdef>
2230   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
2231   <paramdef>int <parameter>expires</parameter></paramdef>
2232  </funcprototype></funcsynopsis>
2233</refsynopsisdiv>
2234<refsect1>
2235 <title>Arguments</title>
2236 <variablelist>
2237  <varlistentry>
2238   <term><parameter>cdev</parameter></term>
2239   <listitem>
2240    <para>
2241     target ccw device
2242    </para>
2243   </listitem>
2244  </varlistentry>
2245  <varlistentry>
2246   <term><parameter>cpa</parameter></term>
2247   <listitem>
2248    <para>
2249     logical start address of channel program
2250    </para>
2251   </listitem>
2252  </varlistentry>
2253  <varlistentry>
2254   <term><parameter>intparm</parameter></term>
2255   <listitem>
2256    <para>
2257     user specific interruption parameter; will be presented back to
2258     <parameter>cdev</parameter>'s interrupt handler. Allows a device driver to associate
2259     the interrupt with a particular I/O request.
2260    </para>
2261   </listitem>
2262  </varlistentry>
2263  <varlistentry>
2264   <term><parameter>lpm</parameter></term>
2265   <listitem>
2266    <para>
2267     defines the channel path to be used for a specific I/O request. A
2268     value of 0 will make cio use the opm.
2269    </para>
2270   </listitem>
2271  </varlistentry>
2272  <varlistentry>
2273   <term><parameter>flags</parameter></term>
2274   <listitem>
2275    <para>
2276     additional flags; defines the action to be performed for I/O
2277     processing.
2278    </para>
2279   </listitem>
2280  </varlistentry>
2281  <varlistentry>
2282   <term><parameter>expires</parameter></term>
2283   <listitem>
2284    <para>
2285     timeout value in jiffies
2286    </para>
2287   </listitem>
2288  </varlistentry>
2289 </variablelist>
2290</refsect1>
2291<refsect1>
2292<title>Description</title>
2293<para>
2294   Start a S/390 channel program. When the interrupt arrives, the
2295   IRQ handler is called, either immediately, delayed (dev-end missing,
2296   or sense required) or never (no IRQ handler registered).
2297   This function notifies the device driver if the channel program has not
2298   completed during the time specified by <parameter>expires</parameter>. If a timeout occurs, the
2299   channel program is terminated via xsch, hsch or csch, and the device's
2300   interrupt handler will be called with an irb containing ERR_PTR(-<constant>ETIMEDOUT</constant>).
2301</para>
2302</refsect1>
2303<refsect1>
2304<title>Returns</title>
2305<para>
2306   <constant>0</constant>, if the operation was successful;
2307   -<constant>EBUSY</constant>, if the device is busy, or status pending;
2308   -<constant>EACCES</constant>, if no path specified in <parameter>lpm</parameter> is operational;
2309   -<constant>ENODEV</constant>, if the device is not operational.
2310</para>
2311</refsect1>
2312<refsect1>
2313<title>Context</title>
2314<para>
2315   Interrupts disabled, ccw device lock held
2316</para>
2317</refsect1>
2318</refentry>
2319
2320<refentry id="API-ccw-device-halt">
2321<refentryinfo>
2322 <title>LINUX</title>
2323 <productname>Kernel Hackers Manual</productname>
2324 <date>July 2017</date>
2325</refentryinfo>
2326<refmeta>
2327 <refentrytitle><phrase>ccw_device_halt</phrase></refentrytitle>
2328 <manvolnum>9</manvolnum>
2329 <refmiscinfo class="version">4.4.14</refmiscinfo>
2330</refmeta>
2331<refnamediv>
2332 <refname>ccw_device_halt</refname>
2333 <refpurpose>
2334     halt I/O request processing
2335 </refpurpose>
2336</refnamediv>
2337<refsynopsisdiv>
2338 <title>Synopsis</title>
2339  <funcsynopsis><funcprototype>
2340   <funcdef>int <function>ccw_device_halt </function></funcdef>
2341   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2342   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2343  </funcprototype></funcsynopsis>
2344</refsynopsisdiv>
2345<refsect1>
2346 <title>Arguments</title>
2347 <variablelist>
2348  <varlistentry>
2349   <term><parameter>cdev</parameter></term>
2350   <listitem>
2351    <para>
2352     target ccw device
2353    </para>
2354   </listitem>
2355  </varlistentry>
2356  <varlistentry>
2357   <term><parameter>intparm</parameter></term>
2358   <listitem>
2359    <para>
2360     interruption parameter; value is only used if no I/O is
2361     outstanding, otherwise the intparm associated with the I/O request
2362     is returned
2363    </para>
2364   </listitem>
2365  </varlistentry>
2366 </variablelist>
2367</refsect1>
2368<refsect1>
2369<title>Description</title>
2370<para>
2371   <function><link linkend="API-ccw-device-halt">ccw_device_halt</link></function> calls hsch on <parameter>cdev</parameter>'s subchannel.
2372</para>
2373</refsect1>
2374<refsect1>
2375<title>Returns</title>
2376<para>
2377   <constant>0</constant> on success,
2378   -<constant>ENODEV</constant> on device not operational,
2379   -<constant>EINVAL</constant> on invalid device state,
2380   -<constant>EBUSY</constant> on device busy or interrupt pending.
2381</para>
2382</refsect1>
2383<refsect1>
2384<title>Context</title>
2385<para>
2386   Interrupts disabled, ccw device lock held
2387</para>
2388</refsect1>
2389</refentry>
2390
2391<refentry id="API-ccw-device-resume">
2392<refentryinfo>
2393 <title>LINUX</title>
2394 <productname>Kernel Hackers Manual</productname>
2395 <date>July 2017</date>
2396</refentryinfo>
2397<refmeta>
2398 <refentrytitle><phrase>ccw_device_resume</phrase></refentrytitle>
2399 <manvolnum>9</manvolnum>
2400 <refmiscinfo class="version">4.4.14</refmiscinfo>
2401</refmeta>
2402<refnamediv>
2403 <refname>ccw_device_resume</refname>
2404 <refpurpose>
2405     resume channel program execution
2406 </refpurpose>
2407</refnamediv>
2408<refsynopsisdiv>
2409 <title>Synopsis</title>
2410  <funcsynopsis><funcprototype>
2411   <funcdef>int <function>ccw_device_resume </function></funcdef>
2412   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2413  </funcprototype></funcsynopsis>
2414</refsynopsisdiv>
2415<refsect1>
2416 <title>Arguments</title>
2417 <variablelist>
2418  <varlistentry>
2419   <term><parameter>cdev</parameter></term>
2420   <listitem>
2421    <para>
2422     target ccw device
2423    </para>
2424   </listitem>
2425  </varlistentry>
2426 </variablelist>
2427</refsect1>
2428<refsect1>
2429<title>Description</title>
2430<para>
2431   <function><link linkend="API-ccw-device-resume">ccw_device_resume</link></function> calls rsch on <parameter>cdev</parameter>'s subchannel.
2432</para>
2433</refsect1>
2434<refsect1>
2435<title>Returns</title>
2436<para>
2437   <constant>0</constant> on success,
2438   -<constant>ENODEV</constant> on device not operational,
2439   -<constant>EINVAL</constant> on invalid device state,
2440   -<constant>EBUSY</constant> on device busy or interrupt pending.
2441</para>
2442</refsect1>
2443<refsect1>
2444<title>Context</title>
2445<para>
2446   Interrupts disabled, ccw device lock held
2447</para>
2448</refsect1>
2449</refentry>
2450
2451<refentry id="API-ccw-device-get-ciw">
2452<refentryinfo>
2453 <title>LINUX</title>
2454 <productname>Kernel Hackers Manual</productname>
2455 <date>July 2017</date>
2456</refentryinfo>
2457<refmeta>
2458 <refentrytitle><phrase>ccw_device_get_ciw</phrase></refentrytitle>
2459 <manvolnum>9</manvolnum>
2460 <refmiscinfo class="version">4.4.14</refmiscinfo>
2461</refmeta>
2462<refnamediv>
2463 <refname>ccw_device_get_ciw</refname>
2464 <refpurpose>
2465     Search for CIW command in extended sense data.
2466 </refpurpose>
2467</refnamediv>
2468<refsynopsisdiv>
2469 <title>Synopsis</title>
2470  <funcsynopsis><funcprototype>
2471   <funcdef><link linkend="API-struct-ciw">struct ciw</link> * <function>ccw_device_get_ciw </function></funcdef>
2472   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2473   <paramdef>__u32 <parameter>ct</parameter></paramdef>
2474  </funcprototype></funcsynopsis>
2475</refsynopsisdiv>
2476<refsect1>
2477 <title>Arguments</title>
2478 <variablelist>
2479  <varlistentry>
2480   <term><parameter>cdev</parameter></term>
2481   <listitem>
2482    <para>
2483     ccw device to inspect
2484    </para>
2485   </listitem>
2486  </varlistentry>
2487  <varlistentry>
2488   <term><parameter>ct</parameter></term>
2489   <listitem>
2490    <para>
2491     command type to look for
2492    </para>
2493   </listitem>
2494  </varlistentry>
2495 </variablelist>
2496</refsect1>
2497<refsect1>
2498<title>Description</title>
2499<para>
2500   During SenseID, command information words (CIWs) describing special
2501   commands available to the device may have been stored in the extended
2502   sense data. This function searches for CIWs of a specified command
2503   type in the extended sense data.
2504</para>
2505</refsect1>
2506<refsect1>
2507<title>Returns</title>
2508<para>
2509   <constant>NULL</constant> if no extended sense data has been stored or if no CIW of the
2510   specified command type could be found,
2511   else a pointer to the CIW of the specified command type.
2512</para>
2513</refsect1>
2514</refentry>
2515
2516<refentry id="API-ccw-device-get-path-mask">
2517<refentryinfo>
2518 <title>LINUX</title>
2519 <productname>Kernel Hackers Manual</productname>
2520 <date>July 2017</date>
2521</refentryinfo>
2522<refmeta>
2523 <refentrytitle><phrase>ccw_device_get_path_mask</phrase></refentrytitle>
2524 <manvolnum>9</manvolnum>
2525 <refmiscinfo class="version">4.4.14</refmiscinfo>
2526</refmeta>
2527<refnamediv>
2528 <refname>ccw_device_get_path_mask</refname>
2529 <refpurpose>
2530     get currently available paths
2531 </refpurpose>
2532</refnamediv>
2533<refsynopsisdiv>
2534 <title>Synopsis</title>
2535  <funcsynopsis><funcprototype>
2536   <funcdef>__u8 <function>ccw_device_get_path_mask </function></funcdef>
2537   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2538  </funcprototype></funcsynopsis>
2539</refsynopsisdiv>
2540<refsect1>
2541 <title>Arguments</title>
2542 <variablelist>
2543  <varlistentry>
2544   <term><parameter>cdev</parameter></term>
2545   <listitem>
2546    <para>
2547     ccw device to be queried
2548    </para>
2549   </listitem>
2550  </varlistentry>
2551 </variablelist>
2552</refsect1>
2553<refsect1>
2554<title>Returns</title>
2555<para>
2556   <constant>0</constant> if no subchannel for the device is available,
2557   else the mask of currently available paths for the ccw device's subchannel.
2558</para>
2559</refsect1>
2560</refentry>
2561
2562<refentry id="API-ccw-device-get-chp-desc">
2563<refentryinfo>
2564 <title>LINUX</title>
2565 <productname>Kernel Hackers Manual</productname>
2566 <date>July 2017</date>
2567</refentryinfo>
2568<refmeta>
2569 <refentrytitle><phrase>ccw_device_get_chp_desc</phrase></refentrytitle>
2570 <manvolnum>9</manvolnum>
2571 <refmiscinfo class="version">4.4.14</refmiscinfo>
2572</refmeta>
2573<refnamediv>
2574 <refname>ccw_device_get_chp_desc</refname>
2575 <refpurpose>
2576     return newly allocated channel-path descriptor
2577 </refpurpose>
2578</refnamediv>
2579<refsynopsisdiv>
2580 <title>Synopsis</title>
2581  <funcsynopsis><funcprototype>
2582   <funcdef>struct channel_path_desc * <function>ccw_device_get_chp_desc </function></funcdef>
2583   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2584   <paramdef>int <parameter>chp_idx</parameter></paramdef>
2585  </funcprototype></funcsynopsis>
2586</refsynopsisdiv>
2587<refsect1>
2588 <title>Arguments</title>
2589 <variablelist>
2590  <varlistentry>
2591   <term><parameter>cdev</parameter></term>
2592   <listitem>
2593    <para>
2594     device to obtain the descriptor for
2595    </para>
2596   </listitem>
2597  </varlistentry>
2598  <varlistentry>
2599   <term><parameter>chp_idx</parameter></term>
2600   <listitem>
2601    <para>
2602     index of the channel path
2603    </para>
2604   </listitem>
2605  </varlistentry>
2606 </variablelist>
2607</refsect1>
2608<refsect1>
2609<title>Description</title>
2610<para>
2611   On success return a newly allocated copy of the channel-path description
2612   data associated with the given channel path. Return <constant>NULL</constant> on error.
2613</para>
2614</refsect1>
2615</refentry>
2616
2617<refentry id="API-ccw-device-get-id">
2618<refentryinfo>
2619 <title>LINUX</title>
2620 <productname>Kernel Hackers Manual</productname>
2621 <date>July 2017</date>
2622</refentryinfo>
2623<refmeta>
2624 <refentrytitle><phrase>ccw_device_get_id</phrase></refentrytitle>
2625 <manvolnum>9</manvolnum>
2626 <refmiscinfo class="version">4.4.14</refmiscinfo>
2627</refmeta>
2628<refnamediv>
2629 <refname>ccw_device_get_id</refname>
2630 <refpurpose>
2631     obtain a ccw device id
2632 </refpurpose>
2633</refnamediv>
2634<refsynopsisdiv>
2635 <title>Synopsis</title>
2636  <funcsynopsis><funcprototype>
2637   <funcdef>void <function>ccw_device_get_id </function></funcdef>
2638   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2639   <paramdef><link linkend="API-struct-ccw-dev-id">struct ccw_dev_id</link> * <parameter>dev_id</parameter></paramdef>
2640  </funcprototype></funcsynopsis>
2641</refsynopsisdiv>
2642<refsect1>
2643 <title>Arguments</title>
2644 <variablelist>
2645  <varlistentry>
2646   <term><parameter>cdev</parameter></term>
2647   <listitem>
2648    <para>
2649     device to obtain the id for
2650    </para>
2651   </listitem>
2652  </varlistentry>
2653  <varlistentry>
2654   <term><parameter>dev_id</parameter></term>
2655   <listitem>
2656    <para>
2657     where to fill in the values
2658    </para>
2659   </listitem>
2660  </varlistentry>
2661 </variablelist>
2662</refsect1>
2663</refentry>
2664
2665<refentry id="API-ccw-device-tm-start-key">
2666<refentryinfo>
2667 <title>LINUX</title>
2668 <productname>Kernel Hackers Manual</productname>
2669 <date>July 2017</date>
2670</refentryinfo>
2671<refmeta>
2672 <refentrytitle><phrase>ccw_device_tm_start_key</phrase></refentrytitle>
2673 <manvolnum>9</manvolnum>
2674 <refmiscinfo class="version">4.4.14</refmiscinfo>
2675</refmeta>
2676<refnamediv>
2677 <refname>ccw_device_tm_start_key</refname>
2678 <refpurpose>
2679     perform start function
2680 </refpurpose>
2681</refnamediv>
2682<refsynopsisdiv>
2683 <title>Synopsis</title>
2684  <funcsynopsis><funcprototype>
2685   <funcdef>int <function>ccw_device_tm_start_key </function></funcdef>
2686   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2687   <paramdef>struct tcw * <parameter>tcw</parameter></paramdef>
2688   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2689   <paramdef>u8 <parameter>lpm</parameter></paramdef>
2690   <paramdef>u8 <parameter>key</parameter></paramdef>
2691  </funcprototype></funcsynopsis>
2692</refsynopsisdiv>
2693<refsect1>
2694 <title>Arguments</title>
2695 <variablelist>
2696  <varlistentry>
2697   <term><parameter>cdev</parameter></term>
2698   <listitem>
2699    <para>
2700     ccw device on which to perform the start function
2701    </para>
2702   </listitem>
2703  </varlistentry>
2704  <varlistentry>
2705   <term><parameter>tcw</parameter></term>
2706   <listitem>
2707    <para>
2708     transport-command word to be started
2709    </para>
2710   </listitem>
2711  </varlistentry>
2712  <varlistentry>
2713   <term><parameter>intparm</parameter></term>
2714   <listitem>
2715    <para>
2716     user defined parameter to be passed to the interrupt handler
2717    </para>
2718   </listitem>
2719  </varlistentry>
2720  <varlistentry>
2721   <term><parameter>lpm</parameter></term>
2722   <listitem>
2723    <para>
2724     mask of paths to use
2725    </para>
2726   </listitem>
2727  </varlistentry>
2728  <varlistentry>
2729   <term><parameter>key</parameter></term>
2730   <listitem>
2731    <para>
2732     storage key to use for storage access
2733    </para>
2734   </listitem>
2735  </varlistentry>
2736 </variablelist>
2737</refsect1>
2738<refsect1>
2739<title>Description</title>
2740<para>
2741   Start the tcw on the given ccw device. Return zero on success, non-zero
2742   otherwise.
2743</para>
2744</refsect1>
2745</refentry>
2746
2747<refentry id="API-ccw-device-tm-start-timeout-key">
2748<refentryinfo>
2749 <title>LINUX</title>
2750 <productname>Kernel Hackers Manual</productname>
2751 <date>July 2017</date>
2752</refentryinfo>
2753<refmeta>
2754 <refentrytitle><phrase>ccw_device_tm_start_timeout_key</phrase></refentrytitle>
2755 <manvolnum>9</manvolnum>
2756 <refmiscinfo class="version">4.4.14</refmiscinfo>
2757</refmeta>
2758<refnamediv>
2759 <refname>ccw_device_tm_start_timeout_key</refname>
2760 <refpurpose>
2761     perform start function
2762 </refpurpose>
2763</refnamediv>
2764<refsynopsisdiv>
2765 <title>Synopsis</title>
2766  <funcsynopsis><funcprototype>
2767   <funcdef>int <function>ccw_device_tm_start_timeout_key </function></funcdef>
2768   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2769   <paramdef>struct tcw * <parameter>tcw</parameter></paramdef>
2770   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2771   <paramdef>u8 <parameter>lpm</parameter></paramdef>
2772   <paramdef>u8 <parameter>key</parameter></paramdef>
2773   <paramdef>int <parameter>expires</parameter></paramdef>
2774  </funcprototype></funcsynopsis>
2775</refsynopsisdiv>
2776<refsect1>
2777 <title>Arguments</title>
2778 <variablelist>
2779  <varlistentry>
2780   <term><parameter>cdev</parameter></term>
2781   <listitem>
2782    <para>
2783     ccw device on which to perform the start function
2784    </para>
2785   </listitem>
2786  </varlistentry>
2787  <varlistentry>
2788   <term><parameter>tcw</parameter></term>
2789   <listitem>
2790    <para>
2791     transport-command word to be started
2792    </para>
2793   </listitem>
2794  </varlistentry>
2795  <varlistentry>
2796   <term><parameter>intparm</parameter></term>
2797   <listitem>
2798    <para>
2799     user defined parameter to be passed to the interrupt handler
2800    </para>
2801   </listitem>
2802  </varlistentry>
2803  <varlistentry>
2804   <term><parameter>lpm</parameter></term>
2805   <listitem>
2806    <para>
2807     mask of paths to use
2808    </para>
2809   </listitem>
2810  </varlistentry>
2811  <varlistentry>
2812   <term><parameter>key</parameter></term>
2813   <listitem>
2814    <para>
2815     storage key to use for storage access
2816    </para>
2817   </listitem>
2818  </varlistentry>
2819  <varlistentry>
2820   <term><parameter>expires</parameter></term>
2821   <listitem>
2822    <para>
2823     time span in jiffies after which to abort request
2824    </para>
2825   </listitem>
2826  </varlistentry>
2827 </variablelist>
2828</refsect1>
2829<refsect1>
2830<title>Description</title>
2831<para>
2832   Start the tcw on the given ccw device. Return zero on success, non-zero
2833   otherwise.
2834</para>
2835</refsect1>
2836</refentry>
2837
2838<refentry id="API-ccw-device-tm-start">
2839<refentryinfo>
2840 <title>LINUX</title>
2841 <productname>Kernel Hackers Manual</productname>
2842 <date>July 2017</date>
2843</refentryinfo>
2844<refmeta>
2845 <refentrytitle><phrase>ccw_device_tm_start</phrase></refentrytitle>
2846 <manvolnum>9</manvolnum>
2847 <refmiscinfo class="version">4.4.14</refmiscinfo>
2848</refmeta>
2849<refnamediv>
2850 <refname>ccw_device_tm_start</refname>
2851 <refpurpose>
2852     perform start function
2853 </refpurpose>
2854</refnamediv>
2855<refsynopsisdiv>
2856 <title>Synopsis</title>
2857  <funcsynopsis><funcprototype>
2858   <funcdef>int <function>ccw_device_tm_start </function></funcdef>
2859   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2860   <paramdef>struct tcw * <parameter>tcw</parameter></paramdef>
2861   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2862   <paramdef>u8 <parameter>lpm</parameter></paramdef>
2863  </funcprototype></funcsynopsis>
2864</refsynopsisdiv>
2865<refsect1>
2866 <title>Arguments</title>
2867 <variablelist>
2868  <varlistentry>
2869   <term><parameter>cdev</parameter></term>
2870   <listitem>
2871    <para>
2872     ccw device on which to perform the start function
2873    </para>
2874   </listitem>
2875  </varlistentry>
2876  <varlistentry>
2877   <term><parameter>tcw</parameter></term>
2878   <listitem>
2879    <para>
2880     transport-command word to be started
2881    </para>
2882   </listitem>
2883  </varlistentry>
2884  <varlistentry>
2885   <term><parameter>intparm</parameter></term>
2886   <listitem>
2887    <para>
2888     user defined parameter to be passed to the interrupt handler
2889    </para>
2890   </listitem>
2891  </varlistentry>
2892  <varlistentry>
2893   <term><parameter>lpm</parameter></term>
2894   <listitem>
2895    <para>
2896     mask of paths to use
2897    </para>
2898   </listitem>
2899  </varlistentry>
2900 </variablelist>
2901</refsect1>
2902<refsect1>
2903<title>Description</title>
2904<para>
2905   Start the tcw on the given ccw device. Return zero on success, non-zero
2906   otherwise.
2907</para>
2908</refsect1>
2909</refentry>
2910
2911<refentry id="API-ccw-device-tm-start-timeout">
2912<refentryinfo>
2913 <title>LINUX</title>
2914 <productname>Kernel Hackers Manual</productname>
2915 <date>July 2017</date>
2916</refentryinfo>
2917<refmeta>
2918 <refentrytitle><phrase>ccw_device_tm_start_timeout</phrase></refentrytitle>
2919 <manvolnum>9</manvolnum>
2920 <refmiscinfo class="version">4.4.14</refmiscinfo>
2921</refmeta>
2922<refnamediv>
2923 <refname>ccw_device_tm_start_timeout</refname>
2924 <refpurpose>
2925     perform start function
2926 </refpurpose>
2927</refnamediv>
2928<refsynopsisdiv>
2929 <title>Synopsis</title>
2930  <funcsynopsis><funcprototype>
2931   <funcdef>int <function>ccw_device_tm_start_timeout </function></funcdef>
2932   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
2933   <paramdef>struct tcw * <parameter>tcw</parameter></paramdef>
2934   <paramdef>unsigned long <parameter>intparm</parameter></paramdef>
2935   <paramdef>u8 <parameter>lpm</parameter></paramdef>
2936   <paramdef>int <parameter>expires</parameter></paramdef>
2937  </funcprototype></funcsynopsis>
2938</refsynopsisdiv>
2939<refsect1>
2940 <title>Arguments</title>
2941 <variablelist>
2942  <varlistentry>
2943   <term><parameter>cdev</parameter></term>
2944   <listitem>
2945    <para>
2946     ccw device on which to perform the start function
2947    </para>
2948   </listitem>
2949  </varlistentry>
2950  <varlistentry>
2951   <term><parameter>tcw</parameter></term>
2952   <listitem>
2953    <para>
2954     transport-command word to be started
2955    </para>
2956   </listitem>
2957  </varlistentry>
2958  <varlistentry>
2959   <term><parameter>intparm</parameter></term>
2960   <listitem>
2961    <para>
2962     user defined parameter to be passed to the interrupt handler
2963    </para>
2964   </listitem>
2965  </varlistentry>
2966  <varlistentry>
2967   <term><parameter>lpm</parameter></term>
2968   <listitem>
2969    <para>
2970     mask of paths to use
2971    </para>
2972   </listitem>
2973  </varlistentry>
2974  <varlistentry>
2975   <term><parameter>expires</parameter></term>
2976   <listitem>
2977    <para>
2978     time span in jiffies after which to abort request
2979    </para>
2980   </listitem>
2981  </varlistentry>
2982 </variablelist>
2983</refsect1>
2984<refsect1>
2985<title>Description</title>
2986<para>
2987   Start the tcw on the given ccw device. Return zero on success, non-zero
2988   otherwise.
2989</para>
2990</refsect1>
2991</refentry>
2992
2993<refentry id="API-ccw-device-get-mdc">
2994<refentryinfo>
2995 <title>LINUX</title>
2996 <productname>Kernel Hackers Manual</productname>
2997 <date>July 2017</date>
2998</refentryinfo>
2999<refmeta>
3000 <refentrytitle><phrase>ccw_device_get_mdc</phrase></refentrytitle>
3001 <manvolnum>9</manvolnum>
3002 <refmiscinfo class="version">4.4.14</refmiscinfo>
3003</refmeta>
3004<refnamediv>
3005 <refname>ccw_device_get_mdc</refname>
3006 <refpurpose>
3007     accumulate max data count
3008 </refpurpose>
3009</refnamediv>
3010<refsynopsisdiv>
3011 <title>Synopsis</title>
3012  <funcsynopsis><funcprototype>
3013   <funcdef>int <function>ccw_device_get_mdc </function></funcdef>
3014   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3015   <paramdef>u8 <parameter>mask</parameter></paramdef>
3016  </funcprototype></funcsynopsis>
3017</refsynopsisdiv>
3018<refsect1>
3019 <title>Arguments</title>
3020 <variablelist>
3021  <varlistentry>
3022   <term><parameter>cdev</parameter></term>
3023   <listitem>
3024    <para>
3025     ccw device for which the max data count is accumulated
3026    </para>
3027   </listitem>
3028  </varlistentry>
3029  <varlistentry>
3030   <term><parameter>mask</parameter></term>
3031   <listitem>
3032    <para>
3033     mask of paths to use
3034    </para>
3035   </listitem>
3036  </varlistentry>
3037 </variablelist>
3038</refsect1>
3039<refsect1>
3040<title>Description</title>
3041<para>
3042   Return the number of 64K-bytes blocks all paths at least support
3043   for a transport command. Return values &lt;= 0 indicate failures.
3044</para>
3045</refsect1>
3046</refentry>
3047
3048<refentry id="API-ccw-device-tm-intrg">
3049<refentryinfo>
3050 <title>LINUX</title>
3051 <productname>Kernel Hackers Manual</productname>
3052 <date>July 2017</date>
3053</refentryinfo>
3054<refmeta>
3055 <refentrytitle><phrase>ccw_device_tm_intrg</phrase></refentrytitle>
3056 <manvolnum>9</manvolnum>
3057 <refmiscinfo class="version">4.4.14</refmiscinfo>
3058</refmeta>
3059<refnamediv>
3060 <refname>ccw_device_tm_intrg</refname>
3061 <refpurpose>
3062     perform interrogate function
3063 </refpurpose>
3064</refnamediv>
3065<refsynopsisdiv>
3066 <title>Synopsis</title>
3067  <funcsynopsis><funcprototype>
3068   <funcdef>int <function>ccw_device_tm_intrg </function></funcdef>
3069   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3070  </funcprototype></funcsynopsis>
3071</refsynopsisdiv>
3072<refsect1>
3073 <title>Arguments</title>
3074 <variablelist>
3075  <varlistentry>
3076   <term><parameter>cdev</parameter></term>
3077   <listitem>
3078    <para>
3079     ccw device on which to perform the interrogate function
3080    </para>
3081   </listitem>
3082  </varlistentry>
3083 </variablelist>
3084</refsect1>
3085<refsect1>
3086<title>Description</title>
3087<para>
3088   Perform an interrogate function on the given ccw device. Return zero on
3089   success, non-zero otherwise.
3090</para>
3091</refsect1>
3092</refentry>
3093
3094<refentry id="API-ccw-device-get-schid">
3095<refentryinfo>
3096 <title>LINUX</title>
3097 <productname>Kernel Hackers Manual</productname>
3098 <date>July 2017</date>
3099</refentryinfo>
3100<refmeta>
3101 <refentrytitle><phrase>ccw_device_get_schid</phrase></refentrytitle>
3102 <manvolnum>9</manvolnum>
3103 <refmiscinfo class="version">4.4.14</refmiscinfo>
3104</refmeta>
3105<refnamediv>
3106 <refname>ccw_device_get_schid</refname>
3107 <refpurpose>
3108     obtain a subchannel id
3109 </refpurpose>
3110</refnamediv>
3111<refsynopsisdiv>
3112 <title>Synopsis</title>
3113  <funcsynopsis><funcprototype>
3114   <funcdef>void <function>ccw_device_get_schid </function></funcdef>
3115   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3116   <paramdef>struct subchannel_id * <parameter>schid</parameter></paramdef>
3117  </funcprototype></funcsynopsis>
3118</refsynopsisdiv>
3119<refsect1>
3120 <title>Arguments</title>
3121 <variablelist>
3122  <varlistentry>
3123   <term><parameter>cdev</parameter></term>
3124   <listitem>
3125    <para>
3126     device to obtain the id for
3127    </para>
3128   </listitem>
3129  </varlistentry>
3130  <varlistentry>
3131   <term><parameter>schid</parameter></term>
3132   <listitem>
3133    <para>
3134     where to fill in the values
3135    </para>
3136   </listitem>
3137  </varlistentry>
3138 </variablelist>
3139</refsect1>
3140</refentry>
3141
3142    </sect1>
3143    <sect1 id="cmf">
3144     <title>The channel-measurement facility</title>
3145  <para>
3146	The channel-measurement facility provides a means to collect
3147	measurement data which is made available by the channel subsystem
3148	for each channel attached device.
3149  </para>
3150<!-- arch/s390/include/asm/cmb.h -->
3151<refentry>
3152 <refnamediv>
3153  <refname>
3154   arch/s390/include/asm/cmb.h
3155  </refname>
3156  <refpurpose>
3157   Document generation inconsistency
3158  </refpurpose>
3159 </refnamediv>
3160 <refsect1>
3161  <title>
3162   Oops
3163  </title>
3164  <warning>
3165   <para>
3166    The template for this document tried to insert
3167    the structured comment from the file
3168    <filename>arch/s390/include/asm/cmb.h</filename> at this point,
3169    but none was found.
3170    This dummy section is inserted to allow
3171    generation to continue.
3172   </para>
3173  </warning>
3174 </refsect1>
3175</refentry>
3176<!-- drivers/s390/cio/cmf.c -->
3177<refentry id="API-enable-cmf">
3178<refentryinfo>
3179 <title>LINUX</title>
3180 <productname>Kernel Hackers Manual</productname>
3181 <date>July 2017</date>
3182</refentryinfo>
3183<refmeta>
3184 <refentrytitle><phrase>enable_cmf</phrase></refentrytitle>
3185 <manvolnum>9</manvolnum>
3186 <refmiscinfo class="version">4.4.14</refmiscinfo>
3187</refmeta>
3188<refnamediv>
3189 <refname>enable_cmf</refname>
3190 <refpurpose>
3191  switch on the channel measurement for a specific device
3192 </refpurpose>
3193</refnamediv>
3194<refsynopsisdiv>
3195 <title>Synopsis</title>
3196  <funcsynopsis><funcprototype>
3197   <funcdef>int <function>enable_cmf </function></funcdef>
3198   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3199  </funcprototype></funcsynopsis>
3200</refsynopsisdiv>
3201<refsect1>
3202 <title>Arguments</title>
3203 <variablelist>
3204  <varlistentry>
3205   <term><parameter>cdev</parameter></term>
3206   <listitem>
3207    <para>
3208     The ccw device to be enabled
3209    </para>
3210   </listitem>
3211  </varlistentry>
3212 </variablelist>
3213</refsect1>
3214<refsect1>
3215<title>Description</title>
3216<para>
3217   Returns <constant>0</constant> for success or a negative error value.
3218</para>
3219</refsect1>
3220<refsect1>
3221<title>Context</title>
3222<para>
3223   non-atomic
3224</para>
3225</refsect1>
3226</refentry>
3227
3228<refentry id="API-disable-cmf">
3229<refentryinfo>
3230 <title>LINUX</title>
3231 <productname>Kernel Hackers Manual</productname>
3232 <date>July 2017</date>
3233</refentryinfo>
3234<refmeta>
3235 <refentrytitle><phrase>disable_cmf</phrase></refentrytitle>
3236 <manvolnum>9</manvolnum>
3237 <refmiscinfo class="version">4.4.14</refmiscinfo>
3238</refmeta>
3239<refnamediv>
3240 <refname>disable_cmf</refname>
3241 <refpurpose>
3242     switch off the channel measurement for a specific device
3243 </refpurpose>
3244</refnamediv>
3245<refsynopsisdiv>
3246 <title>Synopsis</title>
3247  <funcsynopsis><funcprototype>
3248   <funcdef>int <function>disable_cmf </function></funcdef>
3249   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3250  </funcprototype></funcsynopsis>
3251</refsynopsisdiv>
3252<refsect1>
3253 <title>Arguments</title>
3254 <variablelist>
3255  <varlistentry>
3256   <term><parameter>cdev</parameter></term>
3257   <listitem>
3258    <para>
3259     The ccw device to be disabled
3260    </para>
3261   </listitem>
3262  </varlistentry>
3263 </variablelist>
3264</refsect1>
3265<refsect1>
3266<title>Description</title>
3267<para>
3268   Returns <constant>0</constant> for success or a negative error value.
3269</para>
3270</refsect1>
3271<refsect1>
3272<title>Context</title>
3273<para>
3274   non-atomic
3275</para>
3276</refsect1>
3277</refentry>
3278
3279<refentry id="API-cmf-read">
3280<refentryinfo>
3281 <title>LINUX</title>
3282 <productname>Kernel Hackers Manual</productname>
3283 <date>July 2017</date>
3284</refentryinfo>
3285<refmeta>
3286 <refentrytitle><phrase>cmf_read</phrase></refentrytitle>
3287 <manvolnum>9</manvolnum>
3288 <refmiscinfo class="version">4.4.14</refmiscinfo>
3289</refmeta>
3290<refnamediv>
3291 <refname>cmf_read</refname>
3292 <refpurpose>
3293     read one value from the current channel measurement block
3294 </refpurpose>
3295</refnamediv>
3296<refsynopsisdiv>
3297 <title>Synopsis</title>
3298  <funcsynopsis><funcprototype>
3299   <funcdef>u64 <function>cmf_read </function></funcdef>
3300   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3301   <paramdef>int <parameter>index</parameter></paramdef>
3302  </funcprototype></funcsynopsis>
3303</refsynopsisdiv>
3304<refsect1>
3305 <title>Arguments</title>
3306 <variablelist>
3307  <varlistentry>
3308   <term><parameter>cdev</parameter></term>
3309   <listitem>
3310    <para>
3311     the channel to be read
3312    </para>
3313   </listitem>
3314  </varlistentry>
3315  <varlistentry>
3316   <term><parameter>index</parameter></term>
3317   <listitem>
3318    <para>
3319     the index of the value to be read
3320    </para>
3321   </listitem>
3322  </varlistentry>
3323 </variablelist>
3324</refsect1>
3325<refsect1>
3326<title>Description</title>
3327<para>
3328   Returns the value read or <constant>0</constant> if the value cannot be read.
3329</para>
3330</refsect1>
3331<refsect1>
3332<title>Context</title>
3333<para>
3334   any
3335</para>
3336</refsect1>
3337</refentry>
3338
3339<refentry id="API-cmf-readall">
3340<refentryinfo>
3341 <title>LINUX</title>
3342 <productname>Kernel Hackers Manual</productname>
3343 <date>July 2017</date>
3344</refentryinfo>
3345<refmeta>
3346 <refentrytitle><phrase>cmf_readall</phrase></refentrytitle>
3347 <manvolnum>9</manvolnum>
3348 <refmiscinfo class="version">4.4.14</refmiscinfo>
3349</refmeta>
3350<refnamediv>
3351 <refname>cmf_readall</refname>
3352 <refpurpose>
3353     read the current channel measurement block
3354 </refpurpose>
3355</refnamediv>
3356<refsynopsisdiv>
3357 <title>Synopsis</title>
3358  <funcsynopsis><funcprototype>
3359   <funcdef>int <function>cmf_readall </function></funcdef>
3360   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3361   <paramdef>struct cmbdata * <parameter>data</parameter></paramdef>
3362  </funcprototype></funcsynopsis>
3363</refsynopsisdiv>
3364<refsect1>
3365 <title>Arguments</title>
3366 <variablelist>
3367  <varlistentry>
3368   <term><parameter>cdev</parameter></term>
3369   <listitem>
3370    <para>
3371     the channel to be read
3372    </para>
3373   </listitem>
3374  </varlistentry>
3375  <varlistentry>
3376   <term><parameter>data</parameter></term>
3377   <listitem>
3378    <para>
3379     a pointer to a data block that will be filled
3380    </para>
3381   </listitem>
3382  </varlistentry>
3383 </variablelist>
3384</refsect1>
3385<refsect1>
3386<title>Description</title>
3387<para>
3388   Returns <constant>0</constant> on success, a negative error value otherwise.
3389</para>
3390</refsect1>
3391<refsect1>
3392<title>Context</title>
3393<para>
3394   any
3395</para>
3396</refsect1>
3397</refentry>
3398
3399    </sect1>
3400  </chapter>
3401
3402  <chapter id="ccwgroup">
3403   <title>The ccwgroup bus</title>
3404  <para>
3405	The ccwgroup bus only contains artificial devices, created by the user.
3406	Many networking devices (e.g. qeth) are in fact composed of several
3407	ccw devices (like read, write and data channel for qeth). The
3408	ccwgroup bus provides a mechanism to create a meta-device which
3409	contains those ccw devices as slave devices and can be associated
3410	with the netdevice.
3411  </para>
3412   <sect1 id="ccwgroupdevices">
3413    <title>ccw group devices</title>
3414<!-- arch/s390/include/asm/ccwgroup.h -->
3415<refentry id="API-struct-ccwgroup-device">
3416<refentryinfo>
3417 <title>LINUX</title>
3418 <productname>Kernel Hackers Manual</productname>
3419 <date>July 2017</date>
3420</refentryinfo>
3421<refmeta>
3422 <refentrytitle><phrase>struct ccwgroup_device</phrase></refentrytitle>
3423 <manvolnum>9</manvolnum>
3424 <refmiscinfo class="version">4.4.14</refmiscinfo>
3425</refmeta>
3426<refnamediv>
3427 <refname>struct ccwgroup_device</refname>
3428 <refpurpose>
3429  ccw group device
3430 </refpurpose>
3431</refnamediv>
3432<refsynopsisdiv>
3433 <title>Synopsis</title>
3434  <programlisting>
3435struct ccwgroup_device {
3436  enum state;
3437  unsigned int count;
3438  struct device dev;
3439  struct work_struct ungroup_work;
3440  struct ccw_device * cdev[0];
3441};  </programlisting>
3442</refsynopsisdiv>
3443 <refsect1>
3444  <title>Members</title>
3445  <variablelist>
3446    <varlistentry>      <term>state</term>
3447      <listitem><para>
3448online/offline state
3449      </para></listitem>
3450    </varlistentry>
3451    <varlistentry>      <term>count</term>
3452      <listitem><para>
3453number of attached slave devices
3454      </para></listitem>
3455    </varlistentry>
3456    <varlistentry>      <term>dev</term>
3457      <listitem><para>
3458embedded device structure
3459      </para></listitem>
3460    </varlistentry>
3461    <varlistentry>      <term>ungroup_work</term>
3462      <listitem><para>
3463work to be done when a ccwgroup notifier has action
3464type <constant>BUS_NOTIFY_UNBIND_DRIVER</constant>
3465      </para></listitem>
3466    </varlistentry>
3467    <varlistentry>      <term>cdev[0]</term>
3468      <listitem><para>
3469variable number of slave devices, allocated as needed
3470      </para></listitem>
3471    </varlistentry>
3472  </variablelist>
3473 </refsect1>
3474</refentry>
3475
3476<refentry id="API-struct-ccwgroup-driver">
3477<refentryinfo>
3478 <title>LINUX</title>
3479 <productname>Kernel Hackers Manual</productname>
3480 <date>July 2017</date>
3481</refentryinfo>
3482<refmeta>
3483 <refentrytitle><phrase>struct ccwgroup_driver</phrase></refentrytitle>
3484 <manvolnum>9</manvolnum>
3485 <refmiscinfo class="version">4.4.14</refmiscinfo>
3486</refmeta>
3487<refnamediv>
3488 <refname>struct ccwgroup_driver</refname>
3489 <refpurpose>
3490     driver for ccw group devices
3491 </refpurpose>
3492</refnamediv>
3493<refsynopsisdiv>
3494 <title>Synopsis</title>
3495  <programlisting>
3496struct ccwgroup_driver {
3497  int (* setup) (struct ccwgroup_device *);
3498  void (* remove) (struct ccwgroup_device *);
3499  int (* set_online) (struct ccwgroup_device *);
3500  int (* set_offline) (struct ccwgroup_device *);
3501  void (* shutdown) (struct ccwgroup_device *);
3502  int (* prepare) (struct ccwgroup_device *);
3503  void (* complete) (struct ccwgroup_device *);
3504  int (* freeze) (struct ccwgroup_device *);
3505  int (* thaw) (struct ccwgroup_device *);
3506  int (* restore) (struct ccwgroup_device *);
3507  struct device_driver driver;
3508};  </programlisting>
3509</refsynopsisdiv>
3510 <refsect1>
3511  <title>Members</title>
3512  <variablelist>
3513    <varlistentry>      <term>setup</term>
3514      <listitem><para>
3515   function called during device creation to setup the device
3516      </para></listitem>
3517    </varlistentry>
3518    <varlistentry>      <term>remove</term>
3519      <listitem><para>
3520   function called on remove
3521      </para></listitem>
3522    </varlistentry>
3523    <varlistentry>      <term>set_online</term>
3524      <listitem><para>
3525   function called when device is set online
3526      </para></listitem>
3527    </varlistentry>
3528    <varlistentry>      <term>set_offline</term>
3529      <listitem><para>
3530   function called when device is set offline
3531      </para></listitem>
3532    </varlistentry>
3533    <varlistentry>      <term>shutdown</term>
3534      <listitem><para>
3535   function called when device is shut down
3536      </para></listitem>
3537    </varlistentry>
3538    <varlistentry>      <term>prepare</term>
3539      <listitem><para>
3540   prepare for pm state transition
3541      </para></listitem>
3542    </varlistentry>
3543    <varlistentry>      <term>complete</term>
3544      <listitem><para>
3545   undo work done in <parameter>prepare</parameter>
3546      </para></listitem>
3547    </varlistentry>
3548    <varlistentry>      <term>freeze</term>
3549      <listitem><para>
3550   callback for freezing during hibernation snapshotting
3551      </para></listitem>
3552    </varlistentry>
3553    <varlistentry>      <term>thaw</term>
3554      <listitem><para>
3555   undo work done in <parameter>freeze</parameter>
3556      </para></listitem>
3557    </varlistentry>
3558    <varlistentry>      <term>restore</term>
3559      <listitem><para>
3560   callback for restoring after hibernation
3561      </para></listitem>
3562    </varlistentry>
3563    <varlistentry>      <term>driver</term>
3564      <listitem><para>
3565   embedded driver structure
3566      </para></listitem>
3567    </varlistentry>
3568  </variablelist>
3569 </refsect1>
3570</refentry>
3571
3572<!-- drivers/s390/cio/ccwgroup.c -->
3573<refentry id="API-ccwgroup-set-online">
3574<refentryinfo>
3575 <title>LINUX</title>
3576 <productname>Kernel Hackers Manual</productname>
3577 <date>July 2017</date>
3578</refentryinfo>
3579<refmeta>
3580 <refentrytitle><phrase>ccwgroup_set_online</phrase></refentrytitle>
3581 <manvolnum>9</manvolnum>
3582 <refmiscinfo class="version">4.4.14</refmiscinfo>
3583</refmeta>
3584<refnamediv>
3585 <refname>ccwgroup_set_online</refname>
3586 <refpurpose>
3587  enable a ccwgroup device
3588 </refpurpose>
3589</refnamediv>
3590<refsynopsisdiv>
3591 <title>Synopsis</title>
3592  <funcsynopsis><funcprototype>
3593   <funcdef>int <function>ccwgroup_set_online </function></funcdef>
3594   <paramdef><link linkend="API-struct-ccwgroup-device">struct ccwgroup_device</link> * <parameter>gdev</parameter></paramdef>
3595  </funcprototype></funcsynopsis>
3596</refsynopsisdiv>
3597<refsect1>
3598 <title>Arguments</title>
3599 <variablelist>
3600  <varlistentry>
3601   <term><parameter>gdev</parameter></term>
3602   <listitem>
3603    <para>
3604     target ccwgroup device
3605    </para>
3606   </listitem>
3607  </varlistentry>
3608 </variablelist>
3609</refsect1>
3610<refsect1>
3611<title>Description</title>
3612<para>
3613   This function attempts to put the ccwgroup device into the online state.
3614</para>
3615</refsect1>
3616<refsect1>
3617<title>Returns</title>
3618<para>
3619   <constant>0</constant> on success and a negative error value on failure.
3620</para>
3621</refsect1>
3622</refentry>
3623
3624<refentry id="API-ccwgroup-set-offline">
3625<refentryinfo>
3626 <title>LINUX</title>
3627 <productname>Kernel Hackers Manual</productname>
3628 <date>July 2017</date>
3629</refentryinfo>
3630<refmeta>
3631 <refentrytitle><phrase>ccwgroup_set_offline</phrase></refentrytitle>
3632 <manvolnum>9</manvolnum>
3633 <refmiscinfo class="version">4.4.14</refmiscinfo>
3634</refmeta>
3635<refnamediv>
3636 <refname>ccwgroup_set_offline</refname>
3637 <refpurpose>
3638     disable a ccwgroup device
3639 </refpurpose>
3640</refnamediv>
3641<refsynopsisdiv>
3642 <title>Synopsis</title>
3643  <funcsynopsis><funcprototype>
3644   <funcdef>int <function>ccwgroup_set_offline </function></funcdef>
3645   <paramdef><link linkend="API-struct-ccwgroup-device">struct ccwgroup_device</link> * <parameter>gdev</parameter></paramdef>
3646  </funcprototype></funcsynopsis>
3647</refsynopsisdiv>
3648<refsect1>
3649 <title>Arguments</title>
3650 <variablelist>
3651  <varlistentry>
3652   <term><parameter>gdev</parameter></term>
3653   <listitem>
3654    <para>
3655     target ccwgroup device
3656    </para>
3657   </listitem>
3658  </varlistentry>
3659 </variablelist>
3660</refsect1>
3661<refsect1>
3662<title>Description</title>
3663<para>
3664   This function attempts to put the ccwgroup device into the offline state.
3665</para>
3666</refsect1>
3667<refsect1>
3668<title>Returns</title>
3669<para>
3670   <constant>0</constant> on success and a negative error value on failure.
3671</para>
3672</refsect1>
3673</refentry>
3674
3675<refentry id="API-ccwgroup-create-dev">
3676<refentryinfo>
3677 <title>LINUX</title>
3678 <productname>Kernel Hackers Manual</productname>
3679 <date>July 2017</date>
3680</refentryinfo>
3681<refmeta>
3682 <refentrytitle><phrase>ccwgroup_create_dev</phrase></refentrytitle>
3683 <manvolnum>9</manvolnum>
3684 <refmiscinfo class="version">4.4.14</refmiscinfo>
3685</refmeta>
3686<refnamediv>
3687 <refname>ccwgroup_create_dev</refname>
3688 <refpurpose>
3689     create and register a ccw group device
3690 </refpurpose>
3691</refnamediv>
3692<refsynopsisdiv>
3693 <title>Synopsis</title>
3694  <funcsynopsis><funcprototype>
3695   <funcdef>int <function>ccwgroup_create_dev </function></funcdef>
3696   <paramdef>struct device * <parameter>parent</parameter></paramdef>
3697   <paramdef><link linkend="API-struct-ccwgroup-driver">struct ccwgroup_driver</link> * <parameter>gdrv</parameter></paramdef>
3698   <paramdef>int <parameter>num_devices</parameter></paramdef>
3699   <paramdef>const char * <parameter>buf</parameter></paramdef>
3700  </funcprototype></funcsynopsis>
3701</refsynopsisdiv>
3702<refsect1>
3703 <title>Arguments</title>
3704 <variablelist>
3705  <varlistentry>
3706   <term><parameter>parent</parameter></term>
3707   <listitem>
3708    <para>
3709     parent device for the new device
3710    </para>
3711   </listitem>
3712  </varlistentry>
3713  <varlistentry>
3714   <term><parameter>gdrv</parameter></term>
3715   <listitem>
3716    <para>
3717     driver for the new group device
3718    </para>
3719   </listitem>
3720  </varlistentry>
3721  <varlistentry>
3722   <term><parameter>num_devices</parameter></term>
3723   <listitem>
3724    <para>
3725     number of slave devices
3726    </para>
3727   </listitem>
3728  </varlistentry>
3729  <varlistentry>
3730   <term><parameter>buf</parameter></term>
3731   <listitem>
3732    <para>
3733     buffer containing comma separated bus ids of slave devices
3734    </para>
3735   </listitem>
3736  </varlistentry>
3737 </variablelist>
3738</refsect1>
3739<refsect1>
3740<title>Description</title>
3741<para>
3742   Create and register a new ccw group device as a child of <parameter>parent</parameter>. Slave
3743   devices are obtained from the list of bus ids given in <parameter>buf</parameter>.
3744</para>
3745</refsect1>
3746<refsect1>
3747<title>Returns</title>
3748<para>
3749   <constant>0</constant> on success and an error code on failure.
3750</para>
3751</refsect1>
3752<refsect1>
3753<title>Context</title>
3754<para>
3755   non-atomic
3756</para>
3757</refsect1>
3758</refentry>
3759
3760<refentry id="API-ccwgroup-driver-register">
3761<refentryinfo>
3762 <title>LINUX</title>
3763 <productname>Kernel Hackers Manual</productname>
3764 <date>July 2017</date>
3765</refentryinfo>
3766<refmeta>
3767 <refentrytitle><phrase>ccwgroup_driver_register</phrase></refentrytitle>
3768 <manvolnum>9</manvolnum>
3769 <refmiscinfo class="version">4.4.14</refmiscinfo>
3770</refmeta>
3771<refnamediv>
3772 <refname>ccwgroup_driver_register</refname>
3773 <refpurpose>
3774     register a ccw group driver
3775 </refpurpose>
3776</refnamediv>
3777<refsynopsisdiv>
3778 <title>Synopsis</title>
3779  <funcsynopsis><funcprototype>
3780   <funcdef>int <function>ccwgroup_driver_register </function></funcdef>
3781   <paramdef><link linkend="API-struct-ccwgroup-driver">struct ccwgroup_driver</link> * <parameter>cdriver</parameter></paramdef>
3782  </funcprototype></funcsynopsis>
3783</refsynopsisdiv>
3784<refsect1>
3785 <title>Arguments</title>
3786 <variablelist>
3787  <varlistentry>
3788   <term><parameter>cdriver</parameter></term>
3789   <listitem>
3790    <para>
3791     driver to be registered
3792    </para>
3793   </listitem>
3794  </varlistentry>
3795 </variablelist>
3796</refsect1>
3797<refsect1>
3798<title>Description</title>
3799<para>
3800   This function is mainly a wrapper around <function>driver_register</function>.
3801</para>
3802</refsect1>
3803</refentry>
3804
3805<refentry id="API-ccwgroup-driver-unregister">
3806<refentryinfo>
3807 <title>LINUX</title>
3808 <productname>Kernel Hackers Manual</productname>
3809 <date>July 2017</date>
3810</refentryinfo>
3811<refmeta>
3812 <refentrytitle><phrase>ccwgroup_driver_unregister</phrase></refentrytitle>
3813 <manvolnum>9</manvolnum>
3814 <refmiscinfo class="version">4.4.14</refmiscinfo>
3815</refmeta>
3816<refnamediv>
3817 <refname>ccwgroup_driver_unregister</refname>
3818 <refpurpose>
3819     deregister a ccw group driver
3820 </refpurpose>
3821</refnamediv>
3822<refsynopsisdiv>
3823 <title>Synopsis</title>
3824  <funcsynopsis><funcprototype>
3825   <funcdef>void <function>ccwgroup_driver_unregister </function></funcdef>
3826   <paramdef><link linkend="API-struct-ccwgroup-driver">struct ccwgroup_driver</link> * <parameter>cdriver</parameter></paramdef>
3827  </funcprototype></funcsynopsis>
3828</refsynopsisdiv>
3829<refsect1>
3830 <title>Arguments</title>
3831 <variablelist>
3832  <varlistentry>
3833   <term><parameter>cdriver</parameter></term>
3834   <listitem>
3835    <para>
3836     driver to be deregistered
3837    </para>
3838   </listitem>
3839  </varlistentry>
3840 </variablelist>
3841</refsect1>
3842<refsect1>
3843<title>Description</title>
3844<para>
3845   This function is mainly a wrapper around <function>driver_unregister</function>.
3846</para>
3847</refsect1>
3848</refentry>
3849
3850<refentry id="API-ccwgroup-probe-ccwdev">
3851<refentryinfo>
3852 <title>LINUX</title>
3853 <productname>Kernel Hackers Manual</productname>
3854 <date>July 2017</date>
3855</refentryinfo>
3856<refmeta>
3857 <refentrytitle><phrase>ccwgroup_probe_ccwdev</phrase></refentrytitle>
3858 <manvolnum>9</manvolnum>
3859 <refmiscinfo class="version">4.4.14</refmiscinfo>
3860</refmeta>
3861<refnamediv>
3862 <refname>ccwgroup_probe_ccwdev</refname>
3863 <refpurpose>
3864     probe function for slave devices
3865 </refpurpose>
3866</refnamediv>
3867<refsynopsisdiv>
3868 <title>Synopsis</title>
3869  <funcsynopsis><funcprototype>
3870   <funcdef>int <function>ccwgroup_probe_ccwdev </function></funcdef>
3871   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3872  </funcprototype></funcsynopsis>
3873</refsynopsisdiv>
3874<refsect1>
3875 <title>Arguments</title>
3876 <variablelist>
3877  <varlistentry>
3878   <term><parameter>cdev</parameter></term>
3879   <listitem>
3880    <para>
3881     ccw device to be probed
3882    </para>
3883   </listitem>
3884  </varlistentry>
3885 </variablelist>
3886</refsect1>
3887<refsect1>
3888<title>Description</title>
3889<para>
3890   This is a dummy probe function for ccw devices that are slave devices in
3891   a ccw group device.
3892</para>
3893</refsect1>
3894<refsect1>
3895<title>Returns</title>
3896<para>
3897   always <constant>0</constant>
3898</para>
3899</refsect1>
3900</refentry>
3901
3902<refentry id="API-ccwgroup-remove-ccwdev">
3903<refentryinfo>
3904 <title>LINUX</title>
3905 <productname>Kernel Hackers Manual</productname>
3906 <date>July 2017</date>
3907</refentryinfo>
3908<refmeta>
3909 <refentrytitle><phrase>ccwgroup_remove_ccwdev</phrase></refentrytitle>
3910 <manvolnum>9</manvolnum>
3911 <refmiscinfo class="version">4.4.14</refmiscinfo>
3912</refmeta>
3913<refnamediv>
3914 <refname>ccwgroup_remove_ccwdev</refname>
3915 <refpurpose>
3916     remove function for slave devices
3917 </refpurpose>
3918</refnamediv>
3919<refsynopsisdiv>
3920 <title>Synopsis</title>
3921  <funcsynopsis><funcprototype>
3922   <funcdef>void <function>ccwgroup_remove_ccwdev </function></funcdef>
3923   <paramdef><link linkend="API-struct-ccw-device">struct ccw_device</link> * <parameter>cdev</parameter></paramdef>
3924  </funcprototype></funcsynopsis>
3925</refsynopsisdiv>
3926<refsect1>
3927 <title>Arguments</title>
3928 <variablelist>
3929  <varlistentry>
3930   <term><parameter>cdev</parameter></term>
3931   <listitem>
3932    <para>
3933     ccw device to be removed
3934    </para>
3935   </listitem>
3936  </varlistentry>
3937 </variablelist>
3938</refsect1>
3939<refsect1>
3940<title>Description</title>
3941<para>
3942   This is a remove function for ccw devices that are slave devices in a ccw
3943   group device. It sets the ccw device offline and also deregisters the
3944   embedding ccw group device.
3945</para>
3946</refsect1>
3947</refentry>
3948
3949   </sect1>
3950  </chapter>
3951
3952  <chapter id="genericinterfaces">
3953   <title>Generic interfaces</title>
3954  <para>
3955	Some interfaces are available to other drivers that do not necessarily
3956	have anything to do with the busses described above, but still are
3957	indirectly using basic infrastructure in the common I/O layer.
3958	One example is the support for adapter interrupts.
3959  </para>
3960<!-- drivers/s390/cio/airq.c -->
3961<refentry id="API-register-adapter-interrupt">
3962<refentryinfo>
3963 <title>LINUX</title>
3964 <productname>Kernel Hackers Manual</productname>
3965 <date>July 2017</date>
3966</refentryinfo>
3967<refmeta>
3968 <refentrytitle><phrase>register_adapter_interrupt</phrase></refentrytitle>
3969 <manvolnum>9</manvolnum>
3970 <refmiscinfo class="version">4.4.14</refmiscinfo>
3971</refmeta>
3972<refnamediv>
3973 <refname>register_adapter_interrupt</refname>
3974 <refpurpose>
3975  register adapter interrupt handler
3976 </refpurpose>
3977</refnamediv>
3978<refsynopsisdiv>
3979 <title>Synopsis</title>
3980  <funcsynopsis><funcprototype>
3981   <funcdef>int <function>register_adapter_interrupt </function></funcdef>
3982   <paramdef>struct airq_struct * <parameter>airq</parameter></paramdef>
3983  </funcprototype></funcsynopsis>
3984</refsynopsisdiv>
3985<refsect1>
3986 <title>Arguments</title>
3987 <variablelist>
3988  <varlistentry>
3989   <term><parameter>airq</parameter></term>
3990   <listitem>
3991    <para>
3992     pointer to adapter interrupt descriptor
3993    </para>
3994   </listitem>
3995  </varlistentry>
3996 </variablelist>
3997</refsect1>
3998<refsect1>
3999<title>Description</title>
4000<para>
4001   Returns 0 on success, or -EINVAL.
4002</para>
4003</refsect1>
4004</refentry>
4005
4006<refentry id="API-unregister-adapter-interrupt">
4007<refentryinfo>
4008 <title>LINUX</title>
4009 <productname>Kernel Hackers Manual</productname>
4010 <date>July 2017</date>
4011</refentryinfo>
4012<refmeta>
4013 <refentrytitle><phrase>unregister_adapter_interrupt</phrase></refentrytitle>
4014 <manvolnum>9</manvolnum>
4015 <refmiscinfo class="version">4.4.14</refmiscinfo>
4016</refmeta>
4017<refnamediv>
4018 <refname>unregister_adapter_interrupt</refname>
4019 <refpurpose>
4020     unregister adapter interrupt handler
4021 </refpurpose>
4022</refnamediv>
4023<refsynopsisdiv>
4024 <title>Synopsis</title>
4025  <funcsynopsis><funcprototype>
4026   <funcdef>void <function>unregister_adapter_interrupt </function></funcdef>
4027   <paramdef>struct airq_struct * <parameter>airq</parameter></paramdef>
4028  </funcprototype></funcsynopsis>
4029</refsynopsisdiv>
4030<refsect1>
4031 <title>Arguments</title>
4032 <variablelist>
4033  <varlistentry>
4034   <term><parameter>airq</parameter></term>
4035   <listitem>
4036    <para>
4037     pointer to adapter interrupt descriptor
4038    </para>
4039   </listitem>
4040  </varlistentry>
4041 </variablelist>
4042</refsect1>
4043</refentry>
4044
4045<refentry id="API-airq-iv-create">
4046<refentryinfo>
4047 <title>LINUX</title>
4048 <productname>Kernel Hackers Manual</productname>
4049 <date>July 2017</date>
4050</refentryinfo>
4051<refmeta>
4052 <refentrytitle><phrase>airq_iv_create</phrase></refentrytitle>
4053 <manvolnum>9</manvolnum>
4054 <refmiscinfo class="version">4.4.14</refmiscinfo>
4055</refmeta>
4056<refnamediv>
4057 <refname>airq_iv_create</refname>
4058 <refpurpose>
4059     create an interrupt vector
4060 </refpurpose>
4061</refnamediv>
4062<refsynopsisdiv>
4063 <title>Synopsis</title>
4064  <funcsynopsis><funcprototype>
4065   <funcdef>struct airq_iv * <function>airq_iv_create </function></funcdef>
4066   <paramdef>unsigned long <parameter>bits</parameter></paramdef>
4067   <paramdef>unsigned long <parameter>flags</parameter></paramdef>
4068  </funcprototype></funcsynopsis>
4069</refsynopsisdiv>
4070<refsect1>
4071 <title>Arguments</title>
4072 <variablelist>
4073  <varlistentry>
4074   <term><parameter>bits</parameter></term>
4075   <listitem>
4076    <para>
4077     number of bits in the interrupt vector
4078    </para>
4079   </listitem>
4080  </varlistentry>
4081  <varlistentry>
4082   <term><parameter>flags</parameter></term>
4083   <listitem>
4084    <para>
4085     allocation flags
4086    </para>
4087   </listitem>
4088  </varlistentry>
4089 </variablelist>
4090</refsect1>
4091<refsect1>
4092<title>Description</title>
4093<para>
4094   Returns a pointer to an interrupt vector structure
4095</para>
4096</refsect1>
4097</refentry>
4098
4099<refentry id="API-airq-iv-release">
4100<refentryinfo>
4101 <title>LINUX</title>
4102 <productname>Kernel Hackers Manual</productname>
4103 <date>July 2017</date>
4104</refentryinfo>
4105<refmeta>
4106 <refentrytitle><phrase>airq_iv_release</phrase></refentrytitle>
4107 <manvolnum>9</manvolnum>
4108 <refmiscinfo class="version">4.4.14</refmiscinfo>
4109</refmeta>
4110<refnamediv>
4111 <refname>airq_iv_release</refname>
4112 <refpurpose>
4113     release an interrupt vector
4114 </refpurpose>
4115</refnamediv>
4116<refsynopsisdiv>
4117 <title>Synopsis</title>
4118  <funcsynopsis><funcprototype>
4119   <funcdef>void <function>airq_iv_release </function></funcdef>
4120   <paramdef>struct airq_iv * <parameter>iv</parameter></paramdef>
4121  </funcprototype></funcsynopsis>
4122</refsynopsisdiv>
4123<refsect1>
4124 <title>Arguments</title>
4125 <variablelist>
4126  <varlistentry>
4127   <term><parameter>iv</parameter></term>
4128   <listitem>
4129    <para>
4130     pointer to interrupt vector structure
4131    </para>
4132   </listitem>
4133  </varlistentry>
4134 </variablelist>
4135</refsect1>
4136</refentry>
4137
4138<refentry id="API-airq-iv-alloc">
4139<refentryinfo>
4140 <title>LINUX</title>
4141 <productname>Kernel Hackers Manual</productname>
4142 <date>July 2017</date>
4143</refentryinfo>
4144<refmeta>
4145 <refentrytitle><phrase>airq_iv_alloc</phrase></refentrytitle>
4146 <manvolnum>9</manvolnum>
4147 <refmiscinfo class="version">4.4.14</refmiscinfo>
4148</refmeta>
4149<refnamediv>
4150 <refname>airq_iv_alloc</refname>
4151 <refpurpose>
4152     allocate irq bits from an interrupt vector
4153 </refpurpose>
4154</refnamediv>
4155<refsynopsisdiv>
4156 <title>Synopsis</title>
4157  <funcsynopsis><funcprototype>
4158   <funcdef>unsigned long <function>airq_iv_alloc </function></funcdef>
4159   <paramdef>struct airq_iv * <parameter>iv</parameter></paramdef>
4160   <paramdef>unsigned long <parameter>num</parameter></paramdef>
4161  </funcprototype></funcsynopsis>
4162</refsynopsisdiv>
4163<refsect1>
4164 <title>Arguments</title>
4165 <variablelist>
4166  <varlistentry>
4167   <term><parameter>iv</parameter></term>
4168   <listitem>
4169    <para>
4170     pointer to an interrupt vector structure
4171    </para>
4172   </listitem>
4173  </varlistentry>
4174  <varlistentry>
4175   <term><parameter>num</parameter></term>
4176   <listitem>
4177    <para>
4178     number of consecutive irq bits to allocate
4179    </para>
4180   </listitem>
4181  </varlistentry>
4182 </variablelist>
4183</refsect1>
4184<refsect1>
4185<title>Description</title>
4186<para>
4187   Returns the bit number of the first irq in the allocated block of irqs,
4188   or -1UL if no bit is available or the AIRQ_IV_ALLOC flag has not been
4189   specified
4190</para>
4191</refsect1>
4192</refentry>
4193
4194<refentry id="API-airq-iv-free">
4195<refentryinfo>
4196 <title>LINUX</title>
4197 <productname>Kernel Hackers Manual</productname>
4198 <date>July 2017</date>
4199</refentryinfo>
4200<refmeta>
4201 <refentrytitle><phrase>airq_iv_free</phrase></refentrytitle>
4202 <manvolnum>9</manvolnum>
4203 <refmiscinfo class="version">4.4.14</refmiscinfo>
4204</refmeta>
4205<refnamediv>
4206 <refname>airq_iv_free</refname>
4207 <refpurpose>
4208     free irq bits of an interrupt vector
4209 </refpurpose>
4210</refnamediv>
4211<refsynopsisdiv>
4212 <title>Synopsis</title>
4213  <funcsynopsis><funcprototype>
4214   <funcdef>void <function>airq_iv_free </function></funcdef>
4215   <paramdef>struct airq_iv * <parameter>iv</parameter></paramdef>
4216   <paramdef>unsigned long <parameter>bit</parameter></paramdef>
4217   <paramdef>unsigned long <parameter>num</parameter></paramdef>
4218  </funcprototype></funcsynopsis>
4219</refsynopsisdiv>
4220<refsect1>
4221 <title>Arguments</title>
4222 <variablelist>
4223  <varlistentry>
4224   <term><parameter>iv</parameter></term>
4225   <listitem>
4226    <para>
4227     pointer to interrupt vector structure
4228    </para>
4229   </listitem>
4230  </varlistentry>
4231  <varlistentry>
4232   <term><parameter>bit</parameter></term>
4233   <listitem>
4234    <para>
4235     number of the first irq bit to free
4236    </para>
4237   </listitem>
4238  </varlistentry>
4239  <varlistentry>
4240   <term><parameter>num</parameter></term>
4241   <listitem>
4242    <para>
4243     number of consecutive irq bits to free
4244    </para>
4245   </listitem>
4246  </varlistentry>
4247 </variablelist>
4248</refsect1>
4249</refentry>
4250
4251<refentry id="API-airq-iv-scan">
4252<refentryinfo>
4253 <title>LINUX</title>
4254 <productname>Kernel Hackers Manual</productname>
4255 <date>July 2017</date>
4256</refentryinfo>
4257<refmeta>
4258 <refentrytitle><phrase>airq_iv_scan</phrase></refentrytitle>
4259 <manvolnum>9</manvolnum>
4260 <refmiscinfo class="version">4.4.14</refmiscinfo>
4261</refmeta>
4262<refnamediv>
4263 <refname>airq_iv_scan</refname>
4264 <refpurpose>
4265     scan interrupt vector for non-zero bits
4266 </refpurpose>
4267</refnamediv>
4268<refsynopsisdiv>
4269 <title>Synopsis</title>
4270  <funcsynopsis><funcprototype>
4271   <funcdef>unsigned long <function>airq_iv_scan </function></funcdef>
4272   <paramdef>struct airq_iv * <parameter>iv</parameter></paramdef>
4273   <paramdef>unsigned long <parameter>start</parameter></paramdef>
4274   <paramdef>unsigned long <parameter>end</parameter></paramdef>
4275  </funcprototype></funcsynopsis>
4276</refsynopsisdiv>
4277<refsect1>
4278 <title>Arguments</title>
4279 <variablelist>
4280  <varlistentry>
4281   <term><parameter>iv</parameter></term>
4282   <listitem>
4283    <para>
4284     pointer to interrupt vector structure
4285    </para>
4286   </listitem>
4287  </varlistentry>
4288  <varlistentry>
4289   <term><parameter>start</parameter></term>
4290   <listitem>
4291    <para>
4292     bit number to start the search
4293    </para>
4294   </listitem>
4295  </varlistentry>
4296  <varlistentry>
4297   <term><parameter>end</parameter></term>
4298   <listitem>
4299    <para>
4300     bit number to end the search
4301    </para>
4302   </listitem>
4303  </varlistentry>
4304 </variablelist>
4305</refsect1>
4306<refsect1>
4307<title>Description</title>
4308<para>
4309   Returns the bit number of the next non-zero interrupt bit, or
4310   -1UL if the scan completed without finding any more any non-zero bits.
4311</para>
4312</refsect1>
4313</refentry>
4314
4315  </chapter>
4316
4317</book>
4318