IWMEREG — Register a WLM enclave
The IWMEREG service allows the caller to register an enclave in order to prevent it from being deleted. This is useful if the caller wants to schedule SRBs or join tasks to an enclave that is owned by another subsystem. Registration guarantees that the enclave will continue to exist until the corresponding deregistration is done, even if the other subsystem deletes the enclave. The system defers the enclave's deletion until after the last deregistration.
The address space identified as the home address space at the time of registration is held responsible for deregistration in case of abnormal termination of the job step, the job, or the address space itself.
The caller can run in task or SRB mode.
Environment
The requirements for the caller are:
Minimum authorization: | Supervisor state or program key mask (PKM) allowing keys 0-7. |
---|---|
Dispatchable unit mode: | Task or SRB |
Cross memory mode: | Any PASN, any HASN, any SASN |
AMODE: | 31-bit |
ASC mode: | Primary or access register (AR) |
Interrupt status: | Enabled for I/O and external interrupts |
Locks: | No locks may be held. |
Control parameters: | Control parameters must be in the primary address space. |
Programming requirements
- The macro CVT must be included to use this macro.
- The macro IWMYCON must be included to use this macro.
- The macro IWMPB must be in the library concatenation, since it is included by IWMYCON.
- Note that the high-order halfword of register 0, and the reason code variable when specified, may be non-zero and represents diagnostic data which is NOT part of the external interface. The high-order halfword should thus be excluded from comparison with the reason code values described above. The constant, IWMRSNCODE_MASK_CONST defined in IWMYCON, may be used for this purpose.
- All character data, unless otherwise specified, is assumed to be left-justified and padded with blanks on the right, as needed, to occupy the specified number of bytes.
- Since this service may only be used by system-like code, some validity checking on the parameter list is not performed. These checks would only be needed if the macro were not used to invoke the service routine.
Restrictions
This macro supports multiple versions. Some keywords are only supported by certain versions. Refer to the PLISTVER parameter description for further information.
Input register information
Before issuing the IWMEREG macro, the caller does not have to place any information into any register unless using it in register notation for a particular parameter, or using it as a base register.
Output register information
- Register
- Contents
- 0
- Reason code if GR15 return code is non-zero
- 1
- Used as work registers by the system
- 2-13
- Unchanged
- 14
- Used as work registers by the system
- 15
- Return code
- Register
- Contents
- 0-1
- Used as work registers by the system
- 2-13
- Unchanged
- 14-15
- Used as work registers by the system
Some callers depend on register contents remaining the same before and after issuing a service. If the system changes the contents of registers on which the caller depends, the caller must save them before issuing the service, and restore them after the system returns control.
Performance implications
None.
Syntax
The syntax of the IWMEREG macro is as follows:
Parameters
The parameters are explained as follows:
- name
- An optional symbol, starting in column 1, that is the name on the IWMEREG macro invocation. The name must conform to the rules for an ordinary assembler language symbol.
- ,ETOKEN=etoken
- A required input parameter that contains the enclave token.
To code: Specify the RS-type address, or address in register (2)-(12), of an 8-character field.
- ,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)
- An optional input parameter that specifies the macro form.
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.
- ,list addr
- The name of a storage area to contain the parameters. For MF=S and MF=E, this can be an RS-type address or an address in register (1)-(12).
- ,attr
- An optional 1- to 60-character input string that you use to force boundary alignment of the parameter list. Use a value of 0F to force the parameter list to a word boundary, or 0D to force the parameter list to a doubleword boundary. If you do not code attr, the system provides a value of 0D.
- ,COMPLETE
- Specifies that the system is to check for required parameters and supply defaults for omitted optional parameters.
- ,OWNER=HOME
- ,OWNER=PRIMARY
- An optional parameter, for internal use only. The default is OWNER=HOME.
- ,PLISTVER=IMPLIED_VERSION
- ,PLISTVER=MAX
- ,PLISTVER=0
- ,PLISTVER=1
- An optional input parameter that specifies the version of the macro. PLISTVER determines which
parameter list the system generates. PLISTVER is an optional input parameter on all forms of the
macro, including the list form. When using PLISTVER, specify it on all macro forms used for a
request and with the same value on all of the macro forms. The values are:
- IMPLIED_VERSION, which is the lowest version that allows all parameters specified on the request to be processed. If you omit the PLISTVER parameter, IMPLIED_VERSION is the default.
- MAX, if you want the parameter list to be the largest size currently possible. This size
might grow from release to release and affect the amount of storage that your program needs.
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.
- 0, which supports all parameters except those specifically referenced in higher versions.
- 1, which supports the following parameter and those from version 0: OWNER
To code: Specify one of the following:- IMPLIED_VERSION
- MAX
- A decimal value of 0, or 1
- REGTOKEN=regtoken
- A required output parameter that will receive the registration token
To code: Specify the RS-type address, or address in register (2)-(12), of an 8-character field.
- ,RETCODE=retcode
- An optional output parameter into which the return code is to be copied from GPR 15.
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
- ,RSNCODE=rsncode
- An optional output parameter into which the reason code is to be copied from GPR 0.
To code: Specify the RS-type address of a fullword field, or register (2)-(12).
- ,SUBSYS=subsys
- A required input parameter, which contains the generic subsystem type (e.g. IMS, CICS®, etc.).
To code: Specify the RS-type address, or address in register (2)-(12), of a 4-character field.
- ,SUBSYSNM=subsysnm
- A required input parameter, which identifies the subsystem instance.
To code: Specify the RS-type address, or address in register (2)-(12), of an 8-character field.
- ,SUBSYSREQUEST=subsysrequest
- An optional input parameter that allows the caller to pass additional information in order to
distinguish between different invocations by the same subsystem.
To code: Specify the RS-type address, or address in register (2)-(12), of a 32-character field.
ABEND codes
None.
Return codes and reason codes
- GPR 15 (and retcode, when you code RETCODE) contains a return code.
- When the value in GPR 15 is not zero, GPR 0 (and rsncode, when you code RSNCODE) contains reason code.
The following table identifies the hexadecimal return and reason codes and the equate symbol associated with each reason code. IBM support personnel may request the entire reason code, including the xxxx value.
Return Code | Reason Code | Equate Symbol, Meaning, and Action |
---|---|---|
0 | — | Equate Symbol: IwmRetCodeOk Meaning: Successful completion. Action: None required. |
8 | — | Equate Symbol: IwmRetCodeInvocError Meaning: Invalid invocation environment or parameters. |
8 | xxxx0803 | Equate Symbol: IwmRsnCodeDisabled Meaning: Caller is disabled. Action: Avoid requesting this function while disabled. |
8 | xxxx0804 | Equate Symbol: IwmRsnCodeLocked Meaning: The caller is locked. Action: Avoid requesting this function while locked. |
8 | xxxx080B | Equate Symbol: IwmRsnCodeBadPl Meaning: Error accessing parameter list. Action: Check for possible storage overlay. |
8 | xxxx0824 | Equate Symbol: IwmRsnCodeAmode24 Meaning: The caller invoked the service but was in 24-bit addressing mode. Action: Request this function only when you are in 31-bit addressing mode. |
8 | xxxx0828 | Equate Symbol: IwmRsnCodeBadVersion Meaning: Version number in parameter list is not valid. Action: Check for possible storage overlay of the parameter list. |
8 | xxxx083A | Equate Symbol: IwmRsnCodeBadEnclave Meaning: Enclave token does not pass verification. Action: Check for possible storage overlay of the enclave token, or asynchronous events which may have deleted the enclave. |
8 | xxxx0882 | Equate Symbol: IwmRsnCodeTooManyRegistrations Meaning: There are too many concurrent registrations requested. Action: There is a resource shortage. The function may work successfully at a later time. |
10 | — | Equate Symbol: IwmRetCodeCompError Meaning: Component error. Action: No action required. The function may be successful if invoked again. |
Example
IWMEREG ETOKEN=ENCTKN,REGTOKEN=REGTKN,
SUBSYS=SUBSTYPE,SUBSYSNM=SUBSNAME
*
* Storage areas
*
ENCTKN DS CL8 Enclave token
SUBSNAME DS CL8 Subsystem name
SUBSTYPE DS CL4 Subsystem type
REGTKN DS CL8 Register token