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

  1. The macro CVT must be included to use this macro.
  2. The macro IWMYCON must be included to use this macro.
  3. The macro IWMPB must be in the library concatenation, since it is included by IWMYCON.
  4. 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.
  5. 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.
  6. 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

When control returns to the caller, the GPRs contain:
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
When control returns to the caller, the ARs contain:
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:

Read syntax diagramSkip visual syntax diagramnameIWMEREGREGTOKEN= regtoken,SUBSYS= subsys,SUBSYSNM= subsysnm,SUBSYSREQUEST= subsysrequest,ETOKEN= etoken,OWNER=HOME,OWNER=PRIMARY,RETCODE= retcode,RSNCODE= rsncode,PLISTVER=IMPLIED_VERSION,PLISTVER=MAX,PLISTVER=0,PLISTVER=1,MF=S,MF=(L, list addr,0D, attr),MF=(E, list addr,COMPLETE)

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

When the IWMEREG macro returns control to your program:
  • 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.

Table 1. Return and Reason Codes for the IWMEREG Macro
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