|
The input/output block (IOB) is not automatically constructed by
a macro instruction; it must be defined as a series of constants and
be on a word boundary. For unit-record and tape devices, the IOB is
32 bytes long. For direct access, teleprocessing, and graphic devices,
8 additional bytes must be provided. Use the system mapping macro
IEZIOB, which expands into a DSECT, to help in constructing an IOB.
IEZIOB fields that are not described here are not part of the programming
interface.
In Figure 1 the shaded areas indicate
fields in which you must specify information. The other fields are
used by the system and must be defined as all zeros. You cannot place
information into these fields, but you can examine them.
You do not have to set the following IOB fields to any particular
value before issuing EXCP because the system itself sets them: - IOBSENS0
- IOBSENS1
- IOBECBCC
- IOBCSW
- IOBSIOCC
- IOBCMD31
Figure 1. Input/Output Block
(IOB) Format
- IOBFLAG1 (1 byte)
- Set bit positions 0, 1,
6, and 7. One-bits in positions 0 and 1 (IOBDATCH and IOBCMDCH) indicate
data chaining and command chaining, respectively. (If you specify
both data chaining and command chaining, the system does not use error
recovery routines except for the direct access and tape devices.)
If an I/O error occurs while your channel program executes, a failure
to set the chaining bits in the IOB that correspond to those in the
CCW might make successful error recovery impossible. The integrity
of your data could be compromised.
A one-bit in position 6 (IOBUNREL)
indicates that the channel program is not a related request; that
is, the channel program is not related to any other channel program.
See bits 2 and 3 of IOBFLAG2 below.
If you intend
to issue an EXCP or XDAP macro with a BSAM, QSAM, or BPAM DCB, you
should turn on bit 7 (IOBSPSVC) to prevent access-method appendages
from processing the I/O request.
- IOBFLAG2 (1 byte)
- If you set bit 6 in the IOBFLAG1 field to zero, bits 2 and 3 (IOBRRT3
and IOBRRT2) in this field must then be set to one of the following:
- 00, if any channel program or appendage associated with a related
request might modify this IOB or channel program.
- 01, if the conditions requiring a 00 setting do not apply, but
the CHE or ABE appendage might retry this channel program if it completes
normally or with the unit-exception or wrong-length-record bits on
in the CSW.
- 10 in all other cases.
The combinations of bits 2 and 3 represent related requests,known as type 1 (00), type 2 (01), and type 3
(10). The type you use determines how much the system can overlap
the processing of related requests. Type 3 allows the greatest overlap,
normally making it possible to quickly reuse a device after a channel-end
interruption. (Related requests that were executed on a pre-MVS system
are executed as type-1 requests if not modified.)
- IOBSENS0 and IOBSENS1 (2 bytes)
- are set by the system when a unit check occurs. These are the
first two sense bytes. Occasionally, the system is unable to obtain
any sense bytes because of unit checks when sense commands are issued.
In this case, the system simulates sense bytes by moving X'10FE' to
IOBSENS0 and IOBSENS1.
The first six of these 16
bits have these device-independent meanings: 1... .... Command reject
.1.. .... Intervention required
..1. .... Bus out check
...1 .... Equipment check
.... 1... Data check
.... .1.. Overrun
The last ten of these 16 bits have
device-dependent meanings. See appropriate hardware documentation.
If
you wish to retrieve more than two sense bytes, supply an IOBE and
IEDB as described in Interruption Handling and Error Recovery Procedures.
- IOBECBCC (1 byte)
- The first byte of the completion code for the channel program.
The system places this code in the high-order byte of the event control
block when the channel program is posted complete. The completion
codes and their meanings are listed under Event Control Block (ECB) Fields.
- IOBECBPT (3 bytes)
- The address of the 4-byte event control block (ECB) you have provided.
- IOBFLAG3 (1 byte) and IOBCSW (7 bytes)
- The system stores status information in these eight bytes. See IOBFLAG3 and IOBCSW Format for Different Channel Program Types.
- IOBSIOCC (1 byte)
- If the channel program uses format 0 CCWs, bits
2 and 3 contain the start subchannel (SSCH) condition code for the
instruction the system issues to start the channel program.
If
this is a format 1 CCW channel program or is a zHPF
channel program, then field IOBSIOCC is redefined as field IOBSTART,
which contains the four byte starting address of the channel program
to be executed. (The IOBE field IOBESIOC is used instead of IOBSIOCC.)
- IOBSTRTB (3 bytes)
- If the channel program uses format 0 CCWs, the three byte starting
address of the channel program to be executed.
- IOBFLAG4 (1 byte)
- Set bit 3 (IOBCEF) to indicate whether you are supplying an IOB
common extension (IOBE). If this bit is 1, then register 0 contains
the IOBE address when you issue EXCP or EXCPVR.
Refer to Requesting Extended Error Information and Requesting Different Levels of ERP Processing.
You must set IOBCEF on if
you want to use format 1 CCWs, 64 bit IDAWS, MIDAWS, or a zHPF channel
program.
- IOBDCBPT (3 bytes)
- The address of the DCB of the data set to be read or written by
the channel program.
- Reserved (1 byte)
- Used by the system.
- IOBRESTR+1 (3 bytes)
- If a related channel program is permanently in error, this field
is used to chain together IOBs that represent dependent channel programs.
To learn more about the conditions under which the chain is built,
see Purging and Restoring I/O Requests (PURGE and RESTORE macros).
- IOBINCAM (2 bytes)
- For magnetic
tape, the amount by which the system increments the block count (DCBBLKCT)
field in the device-dependent portion of the DCB. You can alter these
bytes at any time. For forward operations, these bytes should contain
a binary positive integer (usually +1); for backward operations, they
should contain a binary negative integer. When these bytes are not
used, all zeros must be specified. See Figure 3.
- IOBERRCT (2 bytes)
- Used by the system.
- IOBSEEK (first byte, M)
- For direct access devices, the extent entry in the data extent
block that is associated with the channel program (0 indicates the
first entry; 1 indicates the second, and so forth). For teleprocessing
and graphic devices, it contains the UCB index.
- IOBSEEK (last 7 bytes, BBCCHHR)
- For direct access devices, the seek address for your channel program.
|