4.5  Full-Duplex Operation

A miniport that runs in full-duplex mode and can simultaneously send and receive on an SMP machine runs faster than a miniport that is serialized on SMP platforms. A miniport that does not support full-duplex is not designed to handle simultaneous sends and receives. For such a miniport, NDIS serializes execution of all its MiniportXxx functions that run at IRQL <= DISPATCH_LEVEL. That is, all the MiniportXxx functions but MiniportISR and MiniportDisableInterrupts are serialized.

In a miniport that operates in full-duplex mode, all entry points but MiniportSend, or MiniportSendPackets if it supports multipacket sends, are serialized. That is, the miniport’s send function can execute concurrently with any of the other MiniportXxx functions in an SMP machine. The only exception is MiniportReset. If a miniport is resetting, it will not get any send requests. Otherwise, possible concurrent execution of the MinportSend(Packets) and other MiniportXxx functions implies the following:

·If there are any resources that are shared between a miniport’s send function and any other MiniportXxx function, that resource must be protected by a spin lock. The only exception to this is the MiniportReset path which is serialized by NDIS with respect to the MiniportSend or MiniportSendPackets function and all other MiniportXxx functions.