€•_Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ!/translations/zh_CN/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/zh_TW/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/it_IT/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ja_JP/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/ko_KR/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/pt_BR/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ!/translations/sp_SP/arch/s390/cds”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒLinux for S/390 and zSeries”h]”hŒLinux for S/390 and zSeries”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ;/var/lib/git/docbuild/linux/Documentation/arch/s390/cds.rst”h´KubhŒ paragraph”“”)�”}”(hŒ>Common Device Support (CDS) Device Driver I/O Support Routines”h]”hŒ>Common Device Support (CDS) Device Driver I/O Support Routines”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhŒdefinition_list”“”)�”}”(hhh]”hŒdefinition_list_item”“”)�”}”(hŒ'Authors: - Ingo Adlung - Cornelia Huck ”h]”(hŒterm”“”)�”}”(hŒAuthors:”h]”hŒAuthors:”…”�”}”(hhèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hæh³hÊh´K hhâubhŒ definition”“”)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ Ingo Adlung”h]”hÌ)�”}”(hjh]”hŒ Ingo Adlung”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhýubj)�”}”(hŒCornelia Huck ”h]”hÌ)�”}”(hŒ Cornelia Huck”h]”hŒ Cornelia Huck”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhhýubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1hûh³hÊh´K hhøubah}”(h]”h ]”h"]”h$]”h&]”uh1höhhâubeh}”(h]”h ]”h"]”h$]”h&]”uh1hàh³hÊh´K hhÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhh·h²hh³Nh´NubhÌ)�”}”(hŒCopyright, IBM Corp. 1999-2002”h]”hŒCopyright, IBM Corp. 1999-2002”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ Introduction”h]”hŒ Introduction”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjYh²hh³hÊh´KubhÌ)�”}”(hXÃThis document describes the common device support routines for Linux/390. Different than other hardware architectures, ESA/390 has defined a unified I/O access method. This gives relief to the device drivers as they don't have to deal with different bus types, polling versus interrupt processing, shared versus non-shared interrupt processing, DMA versus port I/O (PIO), and other hardware features more. However, this implies that either every single device driver needs to implement the hardware I/O attachment functionality itself, or the operating system provides for a unified method to access the hardware, providing all the functionality that every single device driver would have to provide itself.”h]”hXÅThis document describes the common device support routines for Linux/390. Different than other hardware architectures, ESA/390 has defined a unified I/O access method. This gives relief to the device drivers as they don’t have to deal with different bus types, polling versus interrupt processing, shared versus non-shared interrupt processing, DMA versus port I/O (PIO), and other hardware features more. However, this implies that either every single device driver needs to implement the hardware I/O attachment functionality itself, or the operating system provides for a unified method to access the hardware, providing all the functionality that every single device driver would have to provide itself.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjYh²hubhÌ)�”}”(hŒÅThe document does not intend to explain the ESA/390 hardware architecture in every detail.This information can be obtained from the ESA/390 Principles of Operation manual (IBM Form. No. SA22-7201).”h]”hŒÅThe document does not intend to explain the ESA/390 hardware architecture in every detail.This information can be obtained from the ESA/390 Principles of Operation manual (IBM Form. No. SA22-7201).”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KhjYh²hubhÌ)�”}”(hŒŸIn order to build common device support for ESA/390 I/O interfaces, a functional layer was introduced that provides generic I/O access methods to the hardware.”h]”hŒŸIn order to build common device support for ESA/390 I/O interfaces, a functional layer was introduced that provides generic I/O access methods to the hardware.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hjYh²hubhÌ)�”}”(hŒÁThe common device support layer comprises the I/O support routines defined below. Some of them implement common Linux device driver interfaces, while some of them are ESA/390 platform specific.”h]”hŒÁThe common device support layer comprises the I/O support routines defined below. Some of them implement common Linux device driver interfaces, while some of them are ESA/390 platform specific.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K$hjYh²hubhÜ)�”}”(hhh]”há)�”}”(hŒŒNote: In order to write a driver for S/390, you also need to look into the interface described in Documentation/arch/s390/driver-model.rst. ”h]”(hç)�”}”(hŒNote:”h]”hŒNote:”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hæh³hÊh´K*hj¥ubh÷)�”}”(hhh]”hÌ)�”}”(hŒ…In order to write a driver for S/390, you also need to look into the interface described in Documentation/arch/s390/driver-model.rst.”h]”hŒ…In order to write a driver for S/390, you also need to look into the interface described in Documentation/arch/s390/driver-model.rst.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K)hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1höhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hàh³hÊh´K*hj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÛhjYh²hh³hÊh´NubhÌ)�”}”(hŒ"Note for porting drivers from 2.4:”h]”hŒ"Note for porting drivers from 2.4:”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K,hjYh²hubhÌ)�”}”(hŒThe major changes are:”h]”hŒThe major changes are:”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K.hjYh²hubhü)�”}”(hhh]”(j)�”}”(hŒ>The functions use a ccw_device instead of an irq (subchannel).”h]”hÌ)�”}”(hjûh]”hŒ>The functions use a ccw_device instead of an irq (subchannel).”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒYAll drivers must define a ccw_driver (see driver-model.txt) and the associated functions.”h]”hÌ)�”}”(hŒYAll drivers must define a ccw_driver (see driver-model.txt) and the associated functions.”h]”hŒYAll drivers must define a ccw_driver (see driver-model.txt) and the associated functions.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒ>request_irq() and free_irq() are no longer done by the driver.”h]”hÌ)�”}”(hj*h]”hŒ>request_irq() and free_irq() are no longer done by the driver.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K3hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒbThe oper_handler is (kindof) replaced by the probe() and set_online() functions of the ccw_driver.”h]”hÌ)�”}”(hŒbThe oper_handler is (kindof) replaced by the probe() and set_online() functions of the ccw_driver.”h]”hŒbThe oper_handler is (kindof) replaced by the probe() and set_online() functions of the ccw_driver.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K4hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒhThe not_oper_handler is (kindof) replaced by the remove() and set_offline() functions of the ccw_driver.”h]”hÌ)�”}”(hŒhThe not_oper_handler is (kindof) replaced by the remove() and set_offline() functions of the ccw_driver.”h]”hŒhThe not_oper_handler is (kindof) replaced by the remove() and set_offline() functions of the ccw_driver.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒ!The channel device layer is gone.”h]”hÌ)�”}”(hjqh]”hŒ!The channel device layer is gone.”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K8hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒzThe interrupt handlers must be adapted to use a ccw_device as argument. Moreover, they don't return a devstat, but an irb.”h]”hÌ)�”}”(hŒzThe interrupt handlers must be adapted to use a ccw_device as argument. Moreover, they don't return a devstat, but an irb.”h]”hŒ|The interrupt handlers must be adapted to use a ccw_device as argument. Moreover, they don’t return a devstat, but an irb.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K9hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒNBefore initiating an io, the options must be set via ccw_device_set_options().”h]”hÌ)�”}”(hj h]”hŒNBefore initiating an io, the options must be set via ccw_device_set_options().”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K;hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöh²hh³hÊh´Nubj)�”}”(hŒ~Instead of calling read_dev_chars()/read_conf_data(), the driver issues the channel program and handles the interrupt itself. ”h]”hÌ)�”}”(hŒ}Instead of calling read_dev_chars()/read_conf_data(), the driver issues the channel program and handles the interrupt itself.”h]”hŒ}Instead of calling read_dev_chars()/read_conf_data(), the driver issues the channel program and handles the interrupt itself.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kscsw.ecw[]. No device sensing by the device driver itself is required.”h]”hXIf the concurrent sense flag in the extended status word (esw) in the irb is set, the field erw.scnt in the esw describes the number of device specific sense bytes available in the extended control word irb->scsw.ecw[]. No device sensing by the device driver itself is required.”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M>hjNh²hubhÌ)�”}”(hŒƒThe device interrupt handler can use the following definitions to investigate the primary unit check source coded in sense byte 0 :”h]”hŒƒThe device interrupt handler can use the following definitions to investigate the primary unit check source coded in sense byte 0 :”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MChjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhjF ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhjF ubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_CMD_REJECT”h]”hŒSNS0_CMD_REJECT”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MGhjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj` ubj )�”}”(hhh]”hÌ)�”}”(hŒ0x80”h]”hŒ0x80”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MGhjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj` ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_INTERVENTION_REQ”h]”hŒSNS0_INTERVENTION_REQ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj— ubj )�”}”(hhh]”hÌ)�”}”(hŒ0x40”h]”hŒ0x40”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MHhj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj— ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_BUS_OUT_CHECK”h]”hŒSNS0_BUS_OUT_CHECK”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÎ ubj )�”}”(hhh]”hÌ)�”}”(hŒ0x20”h]”hŒ0x20”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhjè ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÎ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_EQUIPMENT_CHECK”h]”hŒSNS0_EQUIPMENT_CHECK”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hÌ)�”}”(hŒ0x10”h]”hŒ0x10”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MJhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_DATA_CHECK”h]”hŒSNS0_DATA_CHECK”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MKhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj<ubj )�”}”(hhh]”hÌ)�”}”(hŒ0x08”h]”hŒ0x08”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MKhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ SNS0_OVERRUN”h]”hŒ SNS0_OVERRUN”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsubj )�”}”(hhh]”hÌ)�”}”(hŒ0x04”h]”hŒ0x04”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MLhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSNS0_INCOMPL_DOMAIN”h]”hŒSNS0_INCOMPL_DOMAIN”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MMhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjªubj )�”}”(hhh]”hÌ)�”}”(hŒ0x01”h]”hŒ0x01”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MMhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj] ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjF ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒŒDepending on the device status, multiple of those values may be set together. Please refer to the device specific documentation for details.”h]”hŒŒDepending on the device status, multiple of those values may be set together. Please refer to the device specific documentation for details.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MPhjNh²hubhÌ)�”}”(hŒHThe irb->scsw.cstat field provides the (accumulated) subchannel status :”h]”hŒHThe irb->scsw.cstat field provides the (accumulated) subchannel status :”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MShjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhjubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhjubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ SCHN_STAT_PCI”h]”hŒ SCHN_STAT_PCI”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MVhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-ubj )�”}”(hhh]”hÌ)�”}”(hŒprogram controlled interrupt”h]”hŒprogram controlled interrupt”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MVhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_INCORR_LEN”h]”hŒSCHN_STAT_INCORR_LEN”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MWhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjdubj )�”}”(hhh]”hÌ)�”}”(hŒincorrect length”h]”hŒincorrect length”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MWhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_PROG_CHECK”h]”hŒSCHN_STAT_PROG_CHECK”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MXhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj›ubj )�”}”(hhh]”hÌ)�”}”(hŒ program check”h]”hŒ program check”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MXhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_PROT_CHECK”h]”hŒSCHN_STAT_PROT_CHECK”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒubj )�”}”(hhh]”hÌ)�”}”(hŒprotection check”h]”hŒprotection check”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MYhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_CHN_DATA_CHK”h]”hŒSCHN_STAT_CHN_DATA_CHK”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MZhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubj )�”}”(hhh]”hÌ)�”}”(hŒchannel data check”h]”hŒchannel data check”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MZhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_CHN_CTRL_CHK”h]”hŒSCHN_STAT_CHN_CTRL_CHK”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M[hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ubj )�”}”(hhh]”hÌ)�”}”(hŒchannel control check”h]”hŒchannel control check”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M[hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_INTF_CTRL_CHK”h]”hŒSCHN_STAT_INTF_CTRL_CHK”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M\hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjwubj )�”}”(hhh]”hÌ)�”}”(hŒinterface control check”h]”hŒinterface control check”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M\hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒSCHN_STAT_CHAIN_CHECK”h]”hŒSCHN_STAT_CHAIN_CHECK”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ubj )�”}”(hhh]”hÌ)�”}”(hŒchaining check”h]”hŒchaining check”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒDThe irb->scsw.dstat field provides the (accumulated) device status :”h]”hŒDThe irb->scsw.dstat field provides the (accumulated) device status :”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M`hjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj ubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_ATTENTION”h]”hŒDEV_STAT_ATTENTION”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mchj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj#ubj )�”}”(hhh]”hÌ)�”}”(hŒ attention”h]”hŒ attention”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mchj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_STAT_MOD”h]”hŒDEV_STAT_STAT_MOD”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mdhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjZubj )�”}”(hhh]”hÌ)�”}”(hŒstatus modifier”h]”hŒstatus modifier”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mdhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_CU_END”h]”hŒDEV_STAT_CU_END”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mehj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘ubj )�”}”(hhh]”hÌ)�”}”(hŒcontrol unit end”h]”hŒcontrol unit end”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mehj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ DEV_STAT_BUSY”h]”hŒ DEV_STAT_BUSY”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MfhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈubj )�”}”(hhh]”hÌ)�”}”(hŒbusy”h]”hŒbusy”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mfhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_CHN_END”h]”hŒDEV_STAT_CHN_END”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÿubj )�”}”(hhh]”hÌ)�”}”(hŒ channel end”h]”hŒ channel end”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mghjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_DEV_END”h]”hŒDEV_STAT_DEV_END”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubj )�”}”(hhh]”hÌ)�”}”(hŒ device end”h]”hŒ device end”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_UNIT_CHECK”h]”hŒDEV_STAT_UNIT_CHECK”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mihjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjmubj )�”}”(hhh]”hÌ)�”}”(hŒ unit check”h]”hŒ unit check”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mihj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒDEV_STAT_UNIT_EXCEP”h]”hŒDEV_STAT_UNIT_EXCEP”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mjhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ubj )�”}”(hhh]”hÌ)�”}”(hŒunit exception”h]”hŒunit exception”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mjhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒbPlease see the ESA/390 Principles of Operation manual for details on the individual flag meanings.”h]”hŒbPlease see the ESA/390 Principles of Operation manual for details on the individual flag meanings.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MmhjNh²hubhÌ)�”}”(hŒ Usage Notes:”h]”hŒ Usage Notes:”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MphjNh²hubhÌ)�”}”(hŒMccw_device_start() must be called disabled and with the ccw device lock held.”h]”hŒMccw_device_start() must be called disabled and with the ccw device lock held.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MrhjNh²hubhÌ)�”}”(hXãThe device driver is allowed to issue the next ccw_device_start() call from within its interrupt handler already. It is not required to schedule a bottom-half, unless a non deterministically long running error recovery procedure or similar needs to be scheduled. During I/O processing the Linux/390 generic I/O device driver support has already obtained the IRQ lock, i.e. the handler must not try to obtain it again when calling ccw_device_start() or we end in a deadlock situation!”•×dh]”hXãThe device driver is allowed to issue the next ccw_device_start() call from within its interrupt handler already. It is not required to schedule a bottom-half, unless a non deterministically long running error recovery procedure or similar needs to be scheduled. During I/O processing the Linux/390 generic I/O device driver support has already obtained the IRQ lock, i.e. the handler must not try to obtain it again when calling ccw_device_start() or we end in a deadlock situation!”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MthjNh²hubhÌ)�”}”(hXNIf a device driver relies on an I/O request to be completed prior to start the next it can reduce I/O processing overhead by chaining a NoOp I/O command CCW_CMD_NOOP to the end of the submitted CCW chain. This will force Channel-End and Device-End status to be presented together, with a single interrupt. However, this should be used with care as it implies the channel will remain busy, not being able to process I/O requests for other devices on the same channel. Therefore e.g. read commands should never use this technique, as the result will be presented by a single interrupt anyway.”h]”hXNIf a device driver relies on an I/O request to be completed prior to start the next it can reduce I/O processing overhead by chaining a NoOp I/O command CCW_CMD_NOOP to the end of the submitted CCW chain. This will force Channel-End and Device-End status to be presented together, with a single interrupt. However, this should be used with care as it implies the channel will remain busy, not being able to process I/O requests for other devices on the same channel. Therefore e.g. read commands should never use this technique, as the result will be presented by a single interrupt anyway.”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M|hjNh²hubhÌ)�”}”(hX5In order to minimize I/O overhead, a device driver should use the DOIO_REPORT_ALL only if the device can report intermediate interrupt information prior to device-end the device driver urgently relies on. In this case all I/O interruptions are presented to the device driver until final status is recognized.”h]”hX5In order to minimize I/O overhead, a device driver should use the DOIO_REPORT_ALL only if the device can report intermediate interrupt information prior to device-end the device driver urgently relies on. In this case all I/O interruptions are presented to the device driver until final status is recognized.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M…hjNh²hubhÌ)�”}”(hX¬If a device is able to recover from asynchronously presented I/O errors, it can perform overlapping I/O using the DOIO_EARLY_NOTIFICATION flag. While some devices always report channel-end and device-end together, with a single interrupt, others present primary status (channel-end) when the channel is ready for the next I/O request and secondary status (device-end) when the data transmission has been completed at the device.”h]”hX¬If a device is able to recover from asynchronously presented I/O errors, it can perform overlapping I/O using the DOIO_EARLY_NOTIFICATION flag. While some devices always report channel-end and device-end together, with a single interrupt, others present primary status (channel-end) when the channel is ready for the next I/O request and secondary status (device-end) when the data transmission has been completed at the device.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M‹hjNh²hubhÌ)�”}”(hŒ˜Above flag allows to exploit this feature, e.g. for communication devices that can handle lost data on the network to allow for enhanced I/O processing.”h]”hŒ˜Above flag allows to exploit this feature, e.g. for communication devices that can handle lost data on the network to allow for enhanced I/O processing.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M’hjNh²hubhÌ)�”}”(hX±Unless the channel subsystem at any time presents a secondary status interrupt, exploiting this feature will cause only primary status interrupts to be presented to the device driver while overlapping I/O is performed. When a secondary status without error (alert status) is presented, this indicates successful completion for all overlapping ccw_device_start() requests that have been issued since the last secondary (final) status.”h]”hX±Unless the channel subsystem at any time presents a secondary status interrupt, exploiting this feature will cause only primary status interrupts to be presented to the device driver while overlapping I/O is performed. When a secondary status without error (alert status) is presented, this indicates successful completion for all overlapping ccw_device_start() requests that have been issued since the last secondary (final) status.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M•hjNh²hubhÌ)�”}”(hXEChannel programs that intend to set the suspend flag on a channel command word (CCW) must start the I/O operation with the DOIO_ALLOW_SUSPEND option or the suspend flag will cause a channel program check. At the time the channel program becomes suspended an intermediate interrupt will be generated by the channel subsystem.”h]”hXEChannel programs that intend to set the suspend flag on a channel command word (CCW) must start the I/O operation with the DOIO_ALLOW_SUSPEND option or the suspend flag will cause a channel program check. At the time the channel program becomes suspended an intermediate interrupt will be generated by the channel subsystem.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MœhjNh²hubhÌ)�”}”(hŒ6ccw_device_resume() - Resume Channel Program Execution”h]”hŒ6ccw_device_resume() - Resume Channel Program Execution”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¢hjNh²hubhÌ)�”}”(hXIf a device driver chooses to suspend the current channel program execution by setting the CCW suspend flag on a particular CCW, the channel program execution is suspended. In order to resume channel program execution the CIO layer provides the ccw_device_resume() routine.”h]”hXIf a device driver chooses to suspend the current channel program execution by setting the CCW suspend flag on a particular CCW, the channel program execution is suspended. In order to resume channel program execution the CIO layer provides the ccw_device_resume() routine.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¤hjNh²hubjÐ)�”}”(hŒ/int ccw_device_resume(struct ccw_device *cdev);”h]”hŒ/int ccw_device_resume(struct ccw_device *cdev);”…”�”}”hj–sbah}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jÏh³hÊh´M«hjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj§ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K0uh1jëhj§ubj)�”}”(hhh]”j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M®hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÁubj )�”}”(hhh]”hÌ)�”}”(hŒ0ccw_device the resume operation is requested for”h]”hŒ0ccw_device the resume operation is requested for”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M®hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒ)The ccw_device_resume() function returns:”h]”hŒ)The ccw_device_resume() function returns:”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M±hjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K uh1jëhjubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K.uh1jëhjubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hj½ h]”hŒ0”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubj )�”}”(hhh]”hÌ)�”}”(hŒ$suspended channel program is resumed”h]”hŒ$suspended channel program is resumed”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M´hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mµhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjlubj )�”}”(hhh]”hÌ)�”}”(hŒstatus pending”h]”hŒstatus pending”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mµhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¶hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj£ubj )�”}”(hhh]”hÌ)�”}”(hŒ*cdev invalid or not-operational subchannel”h]”hŒ*cdev invalid or not-operational subchannel”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¶hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚubj )�”}”(hhh]”hÌ)�”}”(hŒresume function not applicable”h]”hŒresume function not applicable”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M·hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ -ENOTCONN”h]”hŒ -ENOTCONN”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hÌ)�”}”(hŒ.there is no I/O request pending for completion”h]”hŒ.there is no I/O request pending for completion”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M¸hj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒ Usage Notes:”h]”hŒ Usage Notes:”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M»hjNh²hubhÌ)�”}”(hŒhPlease have a look at the ccw_device_start() usage notes for more details on suspended channel programs.”h]”hŒhPlease have a look at the ccw_device_start() usage notes for more details on suspended channel programs.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M½hjNh²hubhÌ)�”}”(hŒ/ccw_device_halt() - Halt I/O Request Processing”h]”hŒ/ccw_device_halt() - Halt I/O Request Processing”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÀhjNh²hubhÌ)�”}”(hŒþSometimes a device driver might need a possibility to stop the processing of a long-running channel program or the device might require to initially issue a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt() command is provided.”h]”hŒþSometimes a device driver might need a possibility to stop the processing of a long-running channel program or the device might require to initially issue a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt() command is provided.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÂhjNh²hubhÌ)�”}”(hŒLccw_device_halt() must be called disabled and with the ccw device lock held.”h]”hŒLccw_device_halt() must be called disabled and with the ccw device lock held.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÇhjNh²hubjÐ)�”}”(hŒXint ccw_device_halt(struct ccw_device *cdev, unsigned long intparm);”h]”hŒXint ccw_device_halt(struct ccw_device *cdev, unsigned long intparm);”…”�”}”hj¡sbah}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jÏh³hÊh´MËhjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj²ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K5uh1jëhj²ubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÌubj )�”}”(hhh]”hÌ)�”}”(hŒ.ccw_device the halt operation is requested for”h]”hŒ.ccw_device the halt operation is requested for”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÏhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒintparm”h]”hŒintparm”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hÌ)�”}”(hŒ†interruption parameter; value is only used if no I/O is outstanding, otherwise the intparm associated with the I/O request is returned”h]”hŒ†interruption parameter; value is only used if no I/O is outstanding, otherwise the intparm associated with the I/O request is returned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒ'The ccw_device_halt() function returns:”h]”hŒ'The ccw_device_halt() function returns:”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÕhjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj^ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jëhj^ubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hj½ h]”hŒ0”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MØhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubj )�”}”(hhh]”hÌ)�”}”(hŒrequest successfully initiated”h]”hŒrequest successfully initiated”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MØhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-EBUSY”h]”hŒ-EBUSY”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÙhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ubj )�”}”(hhh]”hÌ)�”}”(hŒ0the device is currently busy, or status pending.”h]”hŒ0the device is currently busy, or status pending.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÙhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÚhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjåubj )�”}”(hhh]”hÌ)�”}”(hŒ cdev invalid.”h]”hŒ cdev invalid.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÚhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÛhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hÌ)�”}”(hŒ>The device is not operational or the ccw device is not online.”h]”hŒ>The device is not operational or the ccw device is not online.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÛhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒ Usage Notes:”h]”hŒ Usage Notes:”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÞhjNh²hubhÌ)�”}”(hX@A device driver may write a never-ending channel program by writing a channel program that at its end loops back to its beginning by means of a transfer in channel (TIC) command (CCW_CMD_TIC). Usually this is performed by network device drivers by setting the PCI CCW flag (CCW_FLAG_PCI). Once this CCW is executed a program controlled interrupt (PCI) is generated. The device driver can then perform an appropriate action. Prior to interrupt of an outstanding read to a network device (with or without PCI flag) a ccw_device_halt() is required to end the pending operation.”h]”hX@A device driver may write a never-ending channel program by writing a channel program that at its end loops back to its beginning by means of a transfer in channel (TIC) command (CCW_CMD_TIC). Usually this is performed by network device drivers by setting the PCI CCW flag (CCW_FLAG_PCI). Once this CCW is executed a program controlled interrupt (PCI) is generated. The device driver can then perform an appropriate action. Prior to interrupt of an outstanding read to a network device (with or without PCI flag) a ccw_device_halt() is required to end the pending operation.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MàhjNh²hubjÐ)�”}”(hŒ5ccw_device_clear() - Terminage I/O Request Processing”h]”hŒ5ccw_device_clear() - Terminage I/O Request Processing”…”�”}”hj‚sbah}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jÏh³hÊh´MëhjNh²hubhÌ)�”}”(hŒ‘In order to terminate all I/O processing at the subchannel, the clear subchannel (CSCH) command is used. It can be issued via ccw_device_clear().”h]”hŒ‘In order to terminate all I/O processing at the subchannel, the clear subchannel (CSCH) command is used. It can be issued via ccw_device_clear().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MíhjNh²hubhÌ)�”}”(hŒMccw_device_clear() must be called disabled and with the ccw device lock held.”h]”hŒMccw_device_clear() must be called disabled and with the ccw device lock held.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MðhjNh²hubjÐ)�”}”(hŒEint ccw_device_clear(struct ccw_device *cdev, unsigned long intparm);”h]”hŒEint ccw_device_clear(struct ccw_device *cdev, unsigned long intparm);”…”�”}”hj¬sbah}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jÏh³hÊh´MôhjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhj½ubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K/uh1jëhj½ubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M÷hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj×ubj )�”}”(hhh]”hÌ)�”}”(hŒ/ccw_device the clear operation is requested for”h]”hŒ/ccw_device the clear operation is requested for”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M÷hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒintparm”h]”hŒintparm”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Møhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubj )�”}”(hhh]”hÌ)�”}”(hŒ.interruption parameter (see ccw_device_halt())”h]”hŒ.interruption parameter (see ccw_device_halt())”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Møhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´NubhÌ)�”}”(hŒ(The ccw_device_clear() function returns:”h]”hŒ(The ccw_device_clear() function returns:”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MûhjNh²hubjâ)�”}”(hhh]”jç)�”}”(hhh]”(jì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jëhjiubjì)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K>uh1jëhjiubj)�”}”(hhh]”(j)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hj½ h]”hŒ0”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mþhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjƒubj )�”}”(hhh]”hÌ)�”}”(hŒrequest successfully initiated”h]”hŒrequest successfully initiated”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mþhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-ENODEV”h]”hŒ-ENODEV”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mÿhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ubj )�”}”(hhh]”hÌ)�”}”(hŒ cdev invalid”h]”hŒ cdev invalid”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MÿhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ubj)�”}”(hhh]”(j )�”}”(hhh]”hÌ)�”}”(hŒ-EINVAL”h]”hŒ-EINVAL”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjðubj )�”}”(hhh]”hÌ)�”}”(hŒ>The device is not operational or the ccw device is not online.”h]”hŒ>The device is not operational or the ccw device is not online.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jæhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jáhjNh²hh³hÊh´Nubeh}”(h]”Œ"overview-of-cds-interface-concepts”ah ]”h"]”Œ"overview of cds interface concepts”ah$]”h&]”uh1hµhjh²hh³hÊh´Knubh¶)�”}”(hhh]”(h»)�”}”(hŒMiscellaneous Support Routines”h]”hŒMiscellaneous Support Routines”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjBh²hh³hÊh´MubhÌ)�”}”(hŒhThis chapter describes various routines to be used in a Linux/390 device driver programming environment.”h]”hŒhThis chapter describes various routines to be used in a Linux/390 device driver programming environment.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjBh²hubhÌ)�”}”(hŒget_ccwdev_lock()”h]”hŒget_ccwdev_lock()”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjBh²hubhÌ)�”}”(hŒdGet the address of the device specific lock. This is then used in spin_lock() / spin_unlock() calls.”h]”hŒdGet the address of the device specific lock. This is then used in spin_lock() / spin_unlock() calls.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjBh²hubjÐ)�”}”(hŒ7__u8 ccw_device_get_path_mask(struct ccw_device *cdev);”h]”hŒ7__u8 ccw_device_get_path_mask(struct ccw_device *cdev);”…”�”}”hj}sbah}”(h]”h ]”h"]”h$]”h&]”jßjàuh1jÏh³hÊh´MhjBh²hubhÌ)�”}”(hŒ6Get the mask of the path currently available for cdev.”h]”hŒ6Get the mask of the path currently available for cdev.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MhjBh²hubeh}”(h]”Œmiscellaneous-support-routines”ah ]”h"]”Œmiscellaneous support routines”ah$]”h&]”uh1hµhjh²hh³hÊh´Mubeh}”(h]”Œ6common-device-support-cds-for-linux-390-device-drivers”ah ]”h"]”Œ8common device support (cds) for linux/390 device drivers”ah$]”h&]”uh1hµhh·h²hh³hÊh´K]ubeh}”(h]”Œlinux-for-s-390-and-zseries”ah ]”h"]”Œlinux for s/390 and zseries”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”j Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÓŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j®j«jjj¦j£jKjHj?j<jžj›uŒ nametypes”}”(j®‰j‰j¦‰jK‰j?‰jž‰uh}”(j«h·jjYj£jjHj'j<jNj›jBuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.