DevHelp PushRequest

This service adds the current device request packet to the linked list of packets to be executed by the physical device driver.

C
USHORT APIENTRY DevHelp_PushRequest( NPBYTE Queue, PBYTE ReqPktAddr );

Assembler
 MOV  SI,OFFSET DS:queue      ; Location of the DWORD queue head ; (which points to the first request in the list) LES  BX,request_packet       ; Pointer to request packet.

MOV  DL,DevHlp_PushRequest

CALL [Device_Help] 

C

 * Queue (NPBYTE) : Location of the queue head which points to the first request in the list.


 * ReqPktAddr (PBYTE) : Pointer to the request packet.

Assembler
 MOV  SI,OFFSET DS:queue      ; Location of the DWORD queue head ; (which points to the first request in the list) LES  BX,request_packet       ; Pointer to request packet. 

C
Success Indicator: 0

Possible errors: None.

Assembler
None

Remarks
A physical device driver uses PushRequest and PullRequest to maintain a work queue for each of its devices. The physical device driver must provide the storage for the DWORD work queue head, which defines the start of the request packet linked list. The work queue head must be initialized to 0.

The physical device driver task-time thread adds all incoming Read/Write requests to its Request List. The device driver task-time thread then determines whether the interrupt-time thread is active, and if not, it sends the request to the device. Because the device can be active at this point, the device driver task-time thread must turn off interrupts before calling the device; otherwise, a window exists in which the device finishes before the packet is put on the list.

PushRequest can also be used to place request packets that were allocated by AllocReqPacket in the request packet work queue.

C

 * 1) include "dhcalls.h"

USHORT APIENTRY DevHelp_PushRequest( NPBYTE Queue,                                    PBYTE  ReqPktAddr ); 