Share via


MiniportTimer (Compact 2013)

3/26/2014

This function is required if a driver's network adapter does not generate interrupts. Otherwise, one or more MiniportTimer functions are optional.

Syntax

VOID MiniportTimer(
  PVOID SystemSpecific1,
  PVOID FunctionContext,
  PVOID SystemSpecific2,
  PVOID SystemSpecific3
);

Parameters

  • SystemSpecific1
    [in] Points to a system-specific variable, which is opaque to MiniportTimer and reserved.
  • SystemSpecific2
    [in] Points to a system-specific value that is reserved.
  • SystemSpecific3
    [in] Points to a system-specific value that is reserved.

Remarks

The driver of a network adapter that does not generate interrupts must have a MiniportTimer function to poll the state of the network adapter. After such a driver's MiniportInitialize function sets up the driver-allocated timer object together with NdisMInitializeTimer, a call to NdisMSetPeriodicTimer causes the MiniportTimer function associated with the timer object to be run repeatedly and automatically at the interval specified by MillisecondsPeriod. Such a polling MiniportTimer function monitors the state of the network adapter to determine when to make indications, when to complete pending sends, and so on. In effect, such a polling MiniportTimer function has the same functionality as the MiniportHandleInterrupt function in the driver of a network adapter that does generate interrupts.

By contrast, calling NdisMSetTimer causes the MiniportTimer function associated with the timer object to be run one time when the given MillisecondsToDelay expires. Such a MiniportTimer function usually performs some driver-determined action if a particular operation times out.

If either kind of MiniportTimer function shares resources with other driver functions, the driver should synchronize access to those resources with a spin lock.

Any network adapter driver or intermediate driver can have more than one MiniportTimer function at the discretion of the driver writer. Each such MiniportTimer function must be associated with a driver-allocated and initialized timer object.

A call to NdisMCancelTimer cancels execution of non-polling MiniportTimer function, if the interval passed in the immediately preceding call to NdisMSetTimer has not yet expired. After a call to NdisMSetPeriodicTimer, a call to NdisMSetTimer or NdisMCancelTimer with the same timer object disables a polling MiniportTimer function: either the MiniportTimer function runs one time, or it is canceled.

The MiniportHalt function of any driver with a MiniportTimer function should call NdisMCancelTimer to ensure that the MiniportTimer function does not attempt to access resources that MiniportHalt has already released.

Requirements

Header

externs.h

See Also

Reference

NDIS 5.x Legacy Functions
MiniportHalt
MiniportInitialize
NdisAcquireSpinLock
NdisAllocateSpinLock
NdisDprAcquireSpinLock
NdisMCancelTimer
NdisMInitializeTimer
NdisMSetPeriodicTimer
NdisMSetTimer
NDIS 5.x Legacy Reference