The EXCPVR macro instruction provides you with the
same functions as the EXCP macro instruction and allows your program
to improve the efficiency of the I/O operations in a paging environment
by translating its own virtual channel programs to real channel programs.
In order to issue EXCPVR, your program must be executing in protection
key eight, executing in supervisor state, or be APF authorized.
The program issuing the EXCPVR must remain in authorized state
until completion of the channel programs. For a description of how
to authorize a program, see z/OS MVS Programming: Authorized Assembler Services Guide.
The format of the EXCPVR macro is:
>>-+-------+--EXCPVR--iob_addr---------------------------------><
'-label-'
- iob_addr—RX-type address, (2-12), or (1)
- the address of the input/output block of the channel program to
be executed.
If your program is also supplying an IOBE, then set
register 0 to the address of the IOBE, and set flag IOBCEF
on in the IOB to indicate that the IOB extension is present. An
IOBE is required for format-1 CCW and zHPF channel programs.
To use EXCPVR, follow the procedures needed to execute
an EXCP request and also follow the procedures listed below. If you
have already page fixed your channel program and data areas prior
to issuing the EXCPVR macro, or you are in a V=R address space, steps
1 and 2 are not necessary.
- Code PGFX=YES in the DCB associated with the EXCPVR requests and
provide a page-fix (PGFX) appendage by specifying SIOA=symbol in the
DCB.
- Fix the data area containing your channel program, the data areas
referred to by your channel program, the PCI appendage (if your program
can generate program-controlled interrupts), and any area referred
to by the PCI appendage including the DEB, IOB, etc. To fix these
areas, build a list in your PGFX appendage containing the addresses
of these virtual areas. Any area that you know already is in fixed
storage for the duration of the I/O can be omitted from the page fix
list.
- If you have not already built indirect address lists or
if your channel program still contains virtual addresses prior to
issuing the EXCPVR macro, you must do the following two items in your
start I/O (SIO) appendage. The SIO appendage is described in Start-I/O Appendage.
- Determine whether the data areas in virtual storage specified
in the address fields of your channel program cross page boundaries.
If they do, build an indirect data address list and update your channel
program with the address of the indirect address list. For CCW channel
programs, build an IDAL or MIDAL.
If you build an IDAL, put the
address of the IDAL in the affected CCW and turn on the IDA bit in
the CCW.
If you build a MIDAL, put the address of the MIDAL
in the affected CCW and turn on the MIDA bit in the CCW.
For zHPF
channel programs, build a TIDAL, put the address of the TIDAL in the
input or output address field in the TCW, and turn on the input or
output TIDAL bit in the TCW.
- Translate the addresses in your channel programs from
virtual to central storage addresses.