IOS_SendCommand


mov esi, CmdData  ; address of BCB or IOR
mov edi, DevData  ; address of BDD or DCB
VxDCall IOS_SendCommand

Directs the IOS to carry out a command specified by a BlockDev Command Block (BCB) or an I/O Request (IOR), depending on a given version flag.

CmdData

Address of a IOR structure if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Command_Block structure.

DevData

Address of a DCB_bdd structure (member of a DCB if the IOR_flags member is set to IORF_VERSION_002. Otherwise, this parameter is the address of a BlockDev_Device_Descriptor structure.

Use of BCBs is provided for backward BlockDev client compatibility.

When passing command data in an IOR structure, the client or driver must set the IOR_vol_designtr, IOR_func, IOR_flags, and possibly IOR_callback members prior to calling the service. If the IORF_SYNC_COMMAND bit is not set, the IOS returns immediately but continues to carry out the I/O request asynchronously. When an asynchronous operation completes or terminates, the IOS notifies the requestor by calling the specified callback procedure (address in the IOR_callback member) and passing on the stack the value contained in IOR_req_req_handle member.

If the IORF_SYNC_COMMAND flag is set, the IOS waits until the I/O request completes or terminates before returning control to the requestor. In this case, the specified callback procedure is never called.

If the IORF_DOUBLE_BUFFER flag is set, the IOS transfers all data through buffers that are manged by the IOS. Clients typically use this flag with I/O requests for which direct DMA to the client's buffer is not possible. This flag may be used with read or write requests only. If the IORF_DOUBLE_BUFFER flag is set, the IOR_sgd_lin_phys member must be set to the 32-bit linear address of an array of scatter/gather descriptors, and the buffer address in each scatter/gather descriptor must also be a 32-bit linear address.

See also DCB, IOR