CELQGIPB — Provide interoperability parameter buffer below the bar

CELQGIPB provides an interoperability parameter buffer below the bar and returns the address of the buffer. This service can only be called in the AMODE 64 environment.

Syntax

void CELQGIPB(buf_len, ipb_addr, retcode)

INT4 *buf_len;
POINTER  *ipb_addr;
INT4 *retcode;
buf_len (input)
A fullword integer that contains the buffer length that is passed by the caller. This parameter is required.
ipb_addr(output)
A pointer that points to the address of a piece of below the bar storage, or 0 if no storage obtained. This parameter is required.
retcode(output)
A fullword integer that indicates the return code of this service. It can contain one of the following values:
0
Service was performed successfully.
1
Service was not performed successfully. Either there was a failure to allocate the buffer below the bar or the buffer length that the caller passed was 0.
2
Service was not performed successfully. The depth, which refers to the number of CEL4RO31 entries in trace back of the same thread, is beyond limit 10.
3
Service was not performed successfully. Service cannot be invoked in this thread because the other thread is in switching mode.
Call this CWI interface from assembler as follows:
Input
  • R1 has the argument.
  • R5 has the environment.
  • R6 has the entry point address.
Output
  • R3 has the argument.
Code sequence to call this CWI

LLGT    R6,X'4B8'          Get CEELAA address
LG      R6,88(R6)          Get CEELCA address
LG      R6,8(R6)           Get CEECAA address
LGF     R6,X'448'(R6)      Get 64bit fast vector address
LG      R5,96(R6)          Get celqgipb environment
LG      R6,104(R6)         Get celqgipb routine address
BASR    R7,R6              Branch to celqgipb
Call this CWI interface from c as follows:
#include <__le_cwi.h>
void CELQGIPB(uint32_t* buf_len,void** ipb_addr,uint32_t* 
retcode);
Usage Notes:
  • This service can only be invoked in AMODE 64 applications.
  • The service is only used to provide Interoperability Parameter Buffer for service CEL4RO31.
  • The buffer that is provided by service CELQGIPB is related to the depth of CEL4RO31. For each depth, there is a buffer. The Interoperability Parameter Buffer provided by CELQGIPB is for subsequent service CEL4RO31 to use. The depth refers to the number of CEL4RO31 entries in trace back of the same thread, which is maintained by CEL4RO31. When the depth is greater than 10, any call to service CELQGIPB will fail.
  • CELQGIPB can only be invoked when no switching mode thread exists or the invoking thread is in switching mode. If no switching mode thread exists, once CELQGIPB is invoked the current thread is bound and other threads cannot invoke this function.

Examples

Refer to the examples in CEL4RO31 — Prepare and run programs in the AMODE 31 environment.