The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Problem or Supervisor state and any PSW key |
Dispatchable unit mode: | Task |
Cross memory mode: | PASN=HASN=SASN for MODIFY TYPE=ALLOCATION. For all other functions, any PASN, any HASN, any SASN. |
AMODE: | 24- or 31-bit |
ASC mode: | Primary or Access register (AR) |
Interrupt status: | Enabled for I/O and external interrupts. |
Locks: |
|
Control parameters: | Control parameters must be in the primary address space. |
If an authorized caller supplies the address of a DCB or ACB, this serialization is not necessary, and the returned UCB information remains valid until the DCB or ACB is closed. This serialization is also not necessary if your program codes DSABPTR and has a DCB or ACB that has been open since the program got the DSAB address.
For unauthorized callers, this service ensures that the TIOT resource is properly serialized during its execution.
For more information, see "Serialization of Resources" under "Programming considerations for using the DYNALLOC macro" in z/OS MVS Programming: Authorized Assembler Services Guide.
An authorized caller may hold exclusive serialization on the SYSZTIOT resource. If not provided, the IEFDDSRV service obtains and holds the resource while performing the requested function, and releases it before returning to the caller. Authorized callers holding SYSZTIOT shared will be failed with return code 12, reason 12 (DDSRV_TIOTENQ_FAIL).
For unauthorized callers, the IEFDDSRV service obtains and releases the necessary SYSZTIOT serialization on behalf of the caller. For more information, see "Serialization of Resources" under "Programming considerations for using the DYNALLOC macro" in z/OS MVS Programming: Authorized Assembler Services Guide.
When running in cross-memory mode, the DSAB/TIOT information is obtained from the user's home address space.
Cross-memory mode is not supported.
The user must ensure that the UCBs are not dynamically deleted.
The returned UCB addresses may be either 31-bit accessible actual UCB addresses or 24-bit accessible actual or captured UCB addresses. A captured UCB address is only valid in the address space in which it is originally allocated. The returned UCB addresses are only valid if the devices remain allocated after the execution of the DD service.
In some cases, this service may not return a device UCB, but instead may return a zero UCB address or the address of a dummy UCB. This may occur for DDs that represent DD DUMMY requests, VIO data sets, SYSOUT data sets, in-stream data sets, and some SMS-managed data sets. A dummy UCB can be identified using the UCBDUMMY field in the UCB. A dummy UCB may not have all of the UCB segments that a device UCB may have and not all services that are used for processing device UCBs may support dummy UCBs.
The user must ensure that the UCBs are not dynamically deleted.
The returned UCB addresses are always uncaptured UCB addresses and remain valid unless the UCBs are dynamically deleted.
In some cases, this service may not return a device UCB, but instead may return a zero UCB address or the address of a dummy UCB. This may occur for DDs that represent DD DUMMY requests, VIO data sets, SYSOUT data sets, in-stream data sets, and some SMS-managed data sets. A dummy UCB can be identified using the UCBDUMMY field in the UCB. A dummy UCB may not have all of the UCB segments that a device UCB may have and not all services that are used for processing device UCBs may support dummy UCBs.
There are no input register requirements for issuing the IEFDDSRV macro.
None.
The standard form of the IEFDDSRV macro is written as follows:
Syntax | Description |
---|---|
name | name: Symbol. Begin name in column 1. |
␢ | One or more blanks must precede IEFDDSRV. |
IEFDDSRV | |
␢ | One or more blanks must follow IEFDDSRV. |
RETRIEVE | |
,DEVENTRY | |
,DDNAME=ddname | ddname: RS-type address or register (2) - (12) ASM only. |
,DSABPTR=dsabptr | dsabptr: RS-type address or register (2) - (12) ASM only. |
,DCBPTR=dcbptr | dcbptr: RS-type address or register (2) - (12) ASM only. |
,ACBPTR=acbptr | acbptr: RS-type address or register (2) - (12) ASM only. |
,SUBPOOL=subpool | subpool: RS-type address, or register (2)-(12) ASM only. |
Default: SUBPOOL=0 | |
,DEVAREA=devarea | devarea: RS-type address or register (2) - (12). |
,LOC=BELOW | Default: LOC=BELOW |
,LOC=ANY | |
EXTRACT | |
,TYPE=DEVIOENTRY | Default: TYPE=DEVIOENTRY |
,DDNAME=ddname | ddname: RS-type address or register (2) - (12) ASM only. |
,DSABPTR=dsabptr | dsabptr: RS-type address or register (2) - (12) ASM only. |
,DCBPTR=dcbptr | dcbptr: RS-type address or register (2) - (12) ASM only. |
,ACBPTR=acbptr | acbptr: RS-type address or register (2) - (12) ASM only. |
,SUBPOOL=subpool | subpool: RS-type address, or register (2)-(12) ASM only. |
Default: SUBPOOL=0 | |
,DEVIOAREA=devioarea | devioarea: RS-type address, or register (2)-(12). |
MODIFY | |
,TYPE=ALLOCATION | Default: TYPE=ALLOCATION |
,DDNAME=ddname | ddname: RS-type address or register (2) - (12) ASM only. |
,DSABPTR=dsabptr | dsabptr: RS-type address or register (2) - (12) ASM only. |
,NEWDDNAME=newddname | newddname: RS-type address, or register (2)-(12). |
,TYPE=FEATURE | |
,DSENQMGMT=NO_CHANGE | |
,DSENQMGMT=MEMORY | |
,TCBPTR=tcbptr | tcbptr: RS-type address, or register (2)-(12). |
,RETCODE=retcode | |
,RSNCODE=rsncode | |
,PLISTVER=IMPLIED_VERSION | |
,PLISTVER=MAX | |
,PLISTVER=0 | |
,PLISTVER=1 | |
,MF=S | Default: MF=S |
,MF=(L,list addr) | |
,MF=(L,list addr,attr) | |
,MF=(L,list addr,0D) | |
,MF=(E,list addr) | |
,MF=(E,list addr,COMPLETE) | |
,MF=(E,list addr,NOCHECK) | |
The parameters are explained as follows:
To code: Specify a value.
To code: Specify the RS-type address of an 8-character field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address, or address in register (2)-(12), of a one-byte field.
If IEFDDSRV returns with return code 0 and reason code 0, the system has obtained a storage area of the appropriate size in the requested key and subpool, and placed its address in devarea. You are responsible for releasing this storage. If the return code and reason codes are not 0, the system has not obtained the storage area; do not attempt to release the storage.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RS-type address of an 8-character field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address, or address in register (2)-(12), of a one-byte field.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RS-type address of an 8-character field.
To code: Specify the RS-type address of a pointer field.
To code: Specify the RS-type address, or address in register (2)-(12), of an 8-character field.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RS-type address of a fullword field, or register (2)-(12) or (15), (GPR15), (REG15), or (R15).
To code: Specify the RS-type address of a fullword field, or register (0) or (2)-(12), (00), (GPR0), (GPR00), REG0), (REG00), or (R0).
If you can tolerate the size change, IBM recommends that you always specify PLISTVER=MAX on the list form of the macro. Specifying MAX ensures that the list-form parameter list is always long enough to hold all the parameters you might specify on the execute form, when both are assembled with the same level of the system. In this way, MAX ensures that the parameter list does not overwrite nearby storage.
Use MF=S to specify the standard form of the macro, which builds an inline parameter list and generates the macro invocation to transfer control to the service. MF=S is the default.
Use MF=L to specify the list form of the macro. Use the list form together with the execute form of the macro for applications that require reentrant code. The list form defines an area of storage that the execute form uses to store the parameters. Only the PLISTVER parameter may be coded with the list form of the macro.
Use MF=E to specify the execute form of the macro. Use the execute form together with the list form of the macro for applications that require reentrant code. The execute form of the macro stores the parameters into the storage area defined by the list form, and generates the macro invocation to transfer control to the service.
None.
When the IEFDDSRV macro returns control to your program, GPR 15 (and retcode if you code RETCODE) contains the return code. If the value in GPR 15 is not 0, GPR0 (and rsncode if you code RSNCODE) contains the reason code.
The return and reason codes are mapped in macro IEFDISRC. The hexadecimal return and reason codes from the IEFDDSRV macro are as follows:
Return Code | Reason Code | Meaning and Action |
---|---|---|
X'00' | — | Meaning: The requested function successfully
completed. Reason code
|
X'08' | — | Meaning: Invalid input parameter. Reason
codes
|
X'0C' | — | Meaning: Invalid input parameter. Reason
codes
|
X'10' | — | Meaning: System error: Recovery entered. Action: Check the dump produced by the abend and supply it to the appropriate IBM support personnel. |