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 <= 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