Hi Guys,
I have a EvtIoInCallerContext registered to handle certain IOCTLS. In this incaller context, I want to have the request to a point where it is ready to fire. What this really means is that I want to:-
- Allocate the transaction object.
- Start the transaction.
- Call the DMA APIs to get to the point where I have the scatter gather list.
- Walk the scatter gather list and create a hardware specific “packet”.
- complete the transaction and free the transaction object.
- Call the “WdfDeviceEnqueueRequest”.
Everything I have created is in the “RequestContext” associated with the WDF Request. When the request arrives again in the driver, I will just fire the request.
Please note that my driver does not use map buffers and it has the profile WdfDmaProfileScatterGather64Duplex.
Basically, the actual DMA transfer from/to the hardware happens much after I have completed the DMA Transaction.
In Other Words:
I am just using the DMA APIs to get to the point of having the scatter gather list and nothing else.
I am considering this approach because it simplifies my implementation a lot and reduces the locking in the driver.
Please let me know your thoughts. Do you guys see any side effects of this?
Thanks,
Aj-