2.3.2.6 Synchronization Functions
The following table defines the synchronization functions included in the NDIS library for miniport drivers.
The timer functions allow the miniport to implement an operation that occurs at a driver-requested interval. For instance, a driver can use a timer to poll its NIC. Events can be used to synchronize operations between two threads, at least one running at IRQL PASSIVE_LEVEL. Spin locks are used to synchronize access to shared resources, as is the NdisMSynchronizeWithInterrupt function.
Function | Definition |
NdisMCancelTimer | Cancels a timer that was previously set with NdisMSetTimer. |
NdisMInitializeTimer | Initializes a timer object and associates a MiniportTimer function with the object. |
NdisMSetTimer | Sets a timer to go off after a specified interval. |
NdisMSetPeriodicTimer | Sets a timer that goes off automatically at a specified interval of until cancelled with a call to NdisMCancelTimer. |
NdisSleep | Causes the caller's thread to block for the specified interval. A driver calls NdisSleep during initialization or when halting the adapter, for instance, while waiting for the NIC to complete initialization. NdisSleep is only called at IRQL PASSIVE_LEVEL. |
NdisStallExecution | Causes the caller's thread to stall for a specified interval not to exceed 50 milliseconds. NdisStallExecution is only called at raised IRQL when NdisSleep cannot be used. |
NdisInitializeEvent | Creates and initializes an event which can then be used to synchronize driver operations. |
NdisSetEvent | Signals the specified event. |
NdisResetEvent | Resets the specified event to the unsignaled state. |
NdisWaitEvent | Causes the caller to wait until the specified event is signaled or the specified time interval expires. |
NdisAcquireSpinLock | Acquires a spin lock to protect access to shared resources between nonISR driver functions in an SMP-safe way. Miniports that are running at IRQL < DISPATCH_LEVEL call this function to acquire a spin lock. |
NdisReleaseSpinLock | Releases a spin lock previously acquired by calling NdisAcquireSpinLock. |
NdisDprAcquireSpinLock | Acquires a spin lock at IRQL DISPATCH_LEVEL. Protects access to shared resources between nonISR driver functions in an SMP-safe way. Faster than calling NdisAcquireSpinLock for driver functions running at IRQL DISPATCH_LEVEL. |
NdisDprReleaseSpinLock | Releases a spin lock previously acquired by calling NdisDprAcquireSpinLock. |
NdisMSynchronizeWithInterrupt | Any NIC driver function that shares resources with the MiniportISR or MiniportDisableInterrupt functions must synchronize access to the resources with these two functions to prevent race conditions. Such functions that must synchronize with MiniportISR and MiniportDisableInterrupt do so by calling NdisMSynchronizeWithInterrupt with a MiniportSynchronizeISR function that also runs at DIRQL while it accesses the shared resource. |