The requirements for the caller are:
Environmental factor | Requirement |
---|---|
Minimum authorization: | Supervisor state, PSW Key 0. |
Dispatchable unit mode: | Task |
Cross memory mode: | PASN=HASN=SASN |
AMODE: | 31- or 64-bit |
ASC mode: | Primary |
Interrupt status: | Enabled for I/O and external interrupts. |
Locks: | No locks may be held. |
Control parameters: |
None.
The invoker must have SAF authorization to facility 'IOSFBA'. Specifically, the invoker must have UPDATE authority to facility class 'IOSFBA'.
Before issuing the IOSFBA macro, the caller must ensure that general register 13 contains the address of a 72 byte save area (for AMODE(31) callers) or 216 byte save area (for AMODE(64) callers). The save area must be in primary storage in the first 2GB of storage. The caller does not have to place any information into any other general purpose register (GPR) unless using it in register notation for a particular parameter or using it as a base register.
The contents of registers 14 through 1 are altered during processing.
None.
The IOSFBA macro is written as follows:
main diagram >>-+------+--␢--IOSFBA--␢---------------------------------------> '-name-' >--+-ALLOCATE--| parameters-1 |--------------------------------------------------------+--> +-QUERY--+-,--DEVLISTPTR--=--devlistptr-----+--+-,--DEVDESCPTR--=--devdescptr-----+-+ | '-,--DEVLISTPTR64--=--devlistptr64-' '-,--DEVDESCPTR64--=--devdescptr64-' | +-READ--| parameters-2 |------------------------------------------------------------+ +-WRITE--| parameters-3 |-----------------------------------------------------------+ +-ERASE--+-,--DEVDESCPTR--=--devdescptr-----+---------------------------------------+ | '-,--DEVDESCPTR64--=--devdescptr64-' | +-CLEANUP--,--IOTOKEN--=--iotoken---------------------------------------------------+ '-UNALLOCATE--+-,--DEVDESCPTR--=--devdescptr-----+----------------------------------' '-,--DEVDESCPTR64--=--devdescptr64-' >--+------------------------+--+------------------------+-------> '-,--RETCODE--=--retcode-' '-,--RSNCODE--=--rsncode-' .-,--PLISTVER--=--IMPLIED_VERSION-. >--+---------------------------------+--------------------------> +-,--PLISTVER--=--MAX-------------+ '-,--PLISTVER--=--1---------------' .-,--MF--=--S--------------------------------------. >--+--------------------------------------------------+-------->< | .-,--0D---. | +-,--MF--=--(--L--,--list addr--+---------+--)-----+ | '-,--attr-' | | .-,--COMPLETE-. | '-,--MF--=--(--E--,--list addr--+-------------+--)-' '-,--NOCHECK--'
parameters-1 .-,--ACCESS--=--SINGLE-. >>-+----------------------+-------------------------------------> +-,--ACCESS--=--READ---+ +-,--ACCESS--=--WRITE--+ '-,--ACCESS--=--ANY----' >--+-,--DEVLISTPTR--=--devlistptr-----+-------------------------> '-,--DEVLISTPTR64--=--devlistptr64-' >--+-,--DEVDESCPTR--=--devdescptr-----+-------------------------> '-,--DEVDESCPTR64--=--devdescptr64-' .-,--DEVCOUNT--=--1--------------------------------------------. >--+--------------------------------------------------------------+->< | .-,--MINDEVCOUNT--=--0-----------. | '-,--DEVCOUNT--=--devcount--+--------------------------------+-' '-,--MINDEVCOUNT--=--mindevcount-'
parameters-2 >>-+-,--DEVIOLISTPTR--=--deviolistptr-----+---------------------> '-,--DEVIOLISTPTR64--=--deviolistptr64-' .-,--ECB--=--NONE-. >--+-----------------+--+-------------+-------------------------> '-,--ECB--=--ecb--' '-,--RESERVED-' >--+----------------------------------------------------+------>< | .-,--REUSECP--=--NO--. | '-+-,--IOTOKEN--=--NONE----+--+--------------------+-' '-,--IOTOKEN--=--iotoken-' '-,--REUSECP--=--YES-'
parameters-3 >>-+-,--DEVIOLISTPTR--=--deviolistptr-----+---------------------> '-,--DEVIOLISTPTR64--=--deviolistptr64-' .-,--ECB--=--NONE-. >--+-----------------+--+-------------+-------------------------> '-,--ECB--=--ecb--' '-,--RESERVED-' >--+----------------------------------------------------+------>< | .-,--REUSECP--=--NO--. | '-+-,--IOTOKEN--=--NONE----+--+--------------------+-' '-,--IOTOKEN--=--iotoken-' '-,--REUSECP--=--YES-'
The parameters are explained as follows:
To code: Specify a value.
To code: Specify a value.
To code: Specify the RS-type address, or address in register (2)-(12), of a one-byte field.
The device descriptor area contains the addresses of a device descriptor entry for each device successfully allocated. The device descriptor entry contains specific device information discovered by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro). The device descriptor entry is required input for the IOSFBA READ and IOSFBA WRITE services.
When using the IOSFBA READ or IOSFBA WRITE services, the device descriptor entry is required input for each device that is read from or written to. Refer to the DEVIOLISTPTR or DEVIOLISTPTR64 parameter for the IOSFBA READ and/or IOSFBA WRITE service for more information.
The device descriptor address is an input parameter for the IOSFBA UNALLOCATE service. The UNALLOCATE service unallocates the devices contained in the device descriptor area.
The caller is responsible for freeing or releasing this storage after the devices have been UNALLOCATED. The subpool and length of the storage are contained in the device descriptor area. The device descriptor area must be freed using either STORAGE RELEASE or FREEMAIN macro invocation.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The device descriptor area contains the addresses of a device descriptor entry for each device successfully queried. The device descriptor entry contains specific device information discovered by the QUERY service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The caller is responsible for freeing or releasing this storage after the devices have been queried. The subpool and length of the storage are contained in the device descriptor area. The device descriptor area must be freed using either STORAGE RELEASE or FREEMAIN macro invocation.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The device descriptor area contains the addresses of the device descriptor entry for each device to be unallocated. The device descriptor entry contains specific device information discovered by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The status of the erase request for each device is obtained by checking the FBADDL_EraseFailed and FBADDL_NoEraseAttempted indicators in the FBADDL for each device. If FBADDL_EraseFailed is indicated, the FBADDE_COD and FBADDE_RCOD fields contain information about the I/O failure.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The UNALLOCATE service unallocates the devices contained in the device descriptor area, specifically each of the device descriptor entries.
The device descriptor area contains the addresses of the device descriptor entry for each device to be unallocated. The device descriptor entry contains specific device information discovered by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The status of the unallocation request for each device is obtained by checking the return code and reason code contained in the device descriptor entry (FBADDE). The return code and reason code contain the dynamic allocation (SVC 99) return and reason code or an IOSFBA service return and reason code.
The caller is responsible for freeing or releasing this storage after the devices have been UNALLOCATED. The subpool and length of the storage are contained in the device descriptor area. The device descriptor area must be freed using either STORAGE RELEASE or FREEMAIN macro invocation.
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The device descriptor area contains the addresses of a device descriptor entry for each device successfully allocated. The device descriptor entry contains specific device information discovered during by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro). The device descriptor entry is required input for the IOSFBA READ and IOSFBA WRITE services.
When using the IOSFBA READ or IOSFBA WRITE services, the device descriptor entry is required input for each device that is read from or written to. Refer to the DEVIOLIST parameter for the IOSFBA READ and/or IOSFBA WRITE service for more information.
The device descriptor address is an input parameter for the IOSFBA UNALLOCATE service. The UNALLOCATE service unallocates the devices contained in the device descriptor area.
The caller is responsible for freeing or releasing this storage after the devices have been UNALLOCATED. The storage area must be freed using the IARST64 service.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
The device descriptor area contains the addresses of a device descriptor entry for each device successfully queried. The device descriptor entry contains specific device information discovered by the QUERY service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The caller is responsible for freeing or releasing this storage after the devices have been queried. The subpool and length of the storage are contained in the device descriptor area. The device descriptor area must be freed using either STORAGE RELEASE or FREEMAIN macro invocation.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
The UNALLOCATE service unallocates the devices contained in the device descriptor area, specifically each of the device descriptor entries.
The device descriptor area contains the addresses of the device descriptor entry for each device to be unallocated. The device descriptor entry contains specific device information discovered by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The status of the erase request for each device is obtained by checking the FBADDL_EraseFailed and FBADDL_NoEraseAttempted indicators in the FBADDL for each device. If FBADDL_EraseFailed is indicated, the FBADDE_COD and FBADDE_RCOD fields contain information about the I/O failure.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
The UNALLOCATE service unallocates the devices contained in the device descriptor area - specifically each of the device descriptor entry.
The device descriptor area contains the addresses of the device descriptor entry for each device to be unallocated. The device descriptor entry contains specific device information discovered by the ALLOCATE service. The device descriptor entry is mapped by the FBADDE (defined in the IOSDFBA macro).
The status of the unallocation request for each device is obtained by checking the return code and reason code contained in the device descriptor entry (FBADDE). The return code and reason code contain the dynamic allocation (SVC 99) return and reason code or an IOSFBA service return and reason code.
The caller is responsible for freeing or releasing this storage after the devices have been UNALLOCATED. The device descriptor area must be freed using the IARST64 service.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
The device I/O entry includes the address of the device descriptor entry (that was returned as part of the device descriptor area by the IOSFBA ALLOCATE service), a count of extent entries, the addresses of each extent entry (mapped by the FBAEE, defined in the IOSDFBA macro), and if required by the caller, the address of a status block or area (mapped by the FBAST, defined in the IOSDFBA macro). For a complete description, see the IOSDFBA macro.
The extent entry defines the parameters of the READ I/O operation for a given device. It defines the starting block number on the device, the number of blocks to transfer, and the storage address or addresses to place the information read from the FBA device.
The status block provides the caller with status information for the I/O to each device. A status block should be obtained and initialized to zeroes by the caller for each device that will participate in the IOSFBA READ service.
For AMODE(31) callers, the storage area must be addressable in AMODE(31).
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The device I/O entry includes the address of the device descriptor entry (that was returned as part of the device descriptor area by the IOSFBA ALLOCATE service), a count of extent entries, the addresses of each extent entry (mapped by the FBAEE, defined in the IOSDFBA macro), and if required by the caller, the address of a status block or area (mapped by the FBAST, defined in the IOSDFBA macro). For a complete description, see the IOSDFBA macro.
The extent entry defines the parameters of the WRITE I/O operation for a given device. It defines the starting block number on the device, the number of blocks to transfer, and the storage address or addresses to place the information read from the FBA device.
The status block provides the caller with status information for the I/O to each device. A status block should be obtained and initialized to zeroes by the caller for each device that will participate in the IOSFBA WRITE service.
For AMODE(31) callers, the storage area must be addressable in AMODE(31).
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
The device I/O entry includes the address of the device descriptor entry (that was returned as part of the device descriptor area by the IOSFBA ALLOCATE service), a count of extent entries, the addresses of each extent entry (mapped by the FBAEE, defined in the IOSDFBA macro), and if required by the caller, the address of a status block or area (mapped by the FBAST, defined in the IOSDFBA macro). For a complete description, see the IOSDFBA macro.
The extent entry defines the parameters of the READ I/O operation for a given device. It defines the starting block number on the device, the number of blocks to transfer, and the storage address or addresses to place the information read from the FBA device.
The status block provides the caller with status information for the I/O to each device. A status block should be obtained and initialized to zeroes by the caller for each device that will participate in the IOSFBA READ service.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
The device I/O entry includes the address of the device descriptor entry (that was returned as part of the device descriptor area by the IOSFBA ALLOCATE service), a count of extent entries, the addresses of each extent entry (mapped by the FBAEE, defined in the IOSDFBA macro), and if required by the caller, the address of a status block or area (mapped by the FBAST, defined in the IOSDFBA macro). For a complete description, see the IOSDFBA macro.
The extent entry defines the parameters of the WRITE I/O operation for a given device. It defines the starting block number on the device, the number of blocks to transfer, and the storage address or addresses to place the information read from the FBA device.
The status block provides the caller with status information for the I/O to each device. A status block should be obtained and initialized to zeroes by the caller for each device that will participate in the IOSFBA WRITE service.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
For AMODE(31) callers, the storage area must be addressable in AMODE(31).
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
For AMODE(31) callers, the storage area must be addressable in AMODE(31).
To code: Specify the RS-type address, or address in register (2)-(12), of a pointer field.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer field.
To code: Specify the RS-type address, or address in register (2)-(12), of an eight-byte pointer 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, or address in register (2)-(12), of a pointer field.
To code: Specify a value.
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.
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.
If the caller requests DEVCOUNT=x and MINDEVCOUNT=y, the IOSFBA service attempts to allocate the requested number of devices (as specified by the DEVCOUNT=x parameter). If 'x' devices are not available to be allocated, IOSFBA ALLOCATE service attempts to allocate as many devices that are available. The ALLOCATE request is considered successful if at least 'y' devices are allocated (as specified by the MINDEVCOUNT=y parameter). The ALLOCATE request is considered unsuccessful if 'y' devices (as specified by the MINDEVCOUNT=y parameter) are not allocated and a return code is set indicating the ALLOCATE request failed since the minimum number of devices could not be allocated.
The count or number of devices that have been allocated is contained in the device descriptor area (mapped by the FBADDL).
If this keyword is omitted or specified as 0, the MINDEVCOUNT is assumed to be the value specified on the DEVCOUNT keyword. The default is 0.
To code: Specify the RS-type address, or address in register (2)-(12), of a one-byte field.
If you can tolerate the size change, 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.
To code: Specify a value.
To code: Specify a value.
To code: Specify a value.
To code: Specify a value.
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).
To code: Specify a value.
To code: Specify a value.
None.
The following table identifies the hexadecimal return and reason codes:
Return Code | Meaning and Action |
---|---|
X'00' | Successful operation.
|
X'04' | Warning error.
|
X'08' | Error in the caller's parameters.
|
X'0C' | Environmental error.
|
X'10' | The READ or WRITE operation was
not successful. Check the status blocks for information on the failed I/Os. Note that this return code is only valid for synchronous READ and WRITE operations. Asynchronous READ and WRITE operations are notified by a post code of X'10'. |
X'14' | The invoker is not authorized to
use this programming service.
|