Porting NDIS Miniport Driver Send Data Handling

The MiniportSendNetBufferLists function replaces the MiniportSendPackets function. MiniportSendNetBufferLists receives a pointer to a linked list of NET_BUFFER_LIST structures, each of which contains a linked list of NET_BUFFER structures. MiniportSendNetBufferLists does not return a completion status. A miniport driver should therefore always complete a send operation asynchronously by calling the NdisMSendNetBufferListsComplete function.

NDIS 5.x miniport drivers specify the completion status of a send operation as a parameter to the NdisMSendComplete function. NDIS 6.0 miniport drivers, however, specify the completion status in the NET_BUFFER_LIST structure by calling the NET_BUFFER_LIST_STATUS macro, as in the following example:

NET_BUFFER_LIST_STATUS(pNetBufferList) = NDIS_STATUS_SUCCESS

The completion status applies to all the NET_BUFFER structures associated with the NET_BUFFER_LIST structure. Therefore, a miniport driver should set the completion status to NDIS_STATUS_SUCCESS only if the data in all the NET_BUFFER structures associated with the NET_BUFFER_LIST structure was transmitted successfully.

If a miniport driver uses scatter gather DMA, it must call the NdisMAllocateNetBufferSGList function once for each NET_BUFFER structure for which it must obtain a scatter gather DMA list. For more information about scatter gather DMA, see Porting Miniport Driver DMA Operations to NDIS 6.0.

For more information about miniport driver send handling, see Sending Data from a Miniport Driver.