A VSD receives I/O requests through its I/O request routine, that is, the routine the driver inserted in the calldown list when processing the AEP_CONFIG_DCB function.
When the driver receives a request, the IOP structure for the request is on the stack. The driver must check the IOR_func member to determine whether it should process the request. If the VSD does not recognize the request or does not include code to process the request, it must pass the request to the next driver in the calldown chain. Before the VSD passes a request to the next driver, the VSD must install its own callback procedure in the IOP structure. This ensures that the VSD receives notification when the request is complete and permits the VSD to pass this notification to drivers in layers above it.
A VSD that processes a request can do so in a variety of ways, such as:
If a VSD passes a modified request to the next driver in the calldown chain, the VSD must install its own callback procedure in the IOP structure to make sure that the VSD receives notification when the request is complete.
A VSD typically processes a request without passing it to lower layers if it can complete the request without accessing the device. In such cases, the VSD must set the IOR_result member to an appropriate value and call the callback procedure whose address is pointed to by the IOP_callback_ptr member.
If a VSD generates new I/O requests in response to a given request, the VSD must use I/O services such as the IOP_CREATE_IOP and IOP_DEALLOC_MEM functions to allocate and free memory for the corresponding IOP structures. A VSD can initiate an synchronous internal I/O request by calling the ILB_internal_request routine.
See also AEP, ILB_internal_request, IOP, IOR