A.2.1 Full NIC Driver Upper-Edge Functions

The full NIC driver must provide the minimum upper-edge functions defined in Table A.2.1. A bound transport driver makes all calls to these functions indirectly, through the NDIS interface library.

The full NIC driver can optionally make use of the NDIS interface filter libraries (Ethernet, Token Ring, and FDDI) to manage multiple transport driver bindings to a network interface card. If the full NIC driver uses a filter library, it must supply the action functions listed in Table A.2.2.

Some of the full NIC driver functions use synchronous processing, while others use asynchronous processing. NDIS 3.0 implements synchronous functions without a wait for an external event. Asynchronous function completion occurs when the NIC driver calls an NDIS interface library completion function, which in turn calls a transport driver completion function for postprocessing.

Names of the full NIC driver functions mentioned in these discussions use Mac as a generic prefix. For all functions written for an actual NIC driver, you may provide your own names, or you can simply substitute the name of the specific driver for Mac. For details of the functions and types mentioned in these sections, see Chapter 1 in the Network Driver Reference.

Table A.2.1 Full NIC Driver Upper-Edge Functions

Function

Definition

Async Option

DriverEntry

Called by the operating system to activate and initialize the NIC driver.

Not Appli-cable

MacAddAdapter

Called by the NDIS interface library to add support for a network card.

No

MacCloseAdapter

Called by a transport driver to close an open binding.

Yes

MacDeferredProcessingRoutine

Called by the operating system to complete interrupt processing that MacInterruptServiceRoutine does not perform. This function is the DPR for the NIC driver.

No

MacInterruptServiceRoutine

Called by the operating system as an ISR that invokes processing associated with a network card interrupt.

No

MacOpenAdapter

Called by a transport driver to open a binding between itself and a network card.

Yes

MacQueryGlobalStatistics

Called by the operating system to query current NIC driver statistics about a logical adapter.

Yes

MacRemoveAdapter

Called by the operating system to remove a registered network card.

No

MacRequest

Called by a transport driver to query or set NIC driver information.

Yes

MacReset

Called by a transport driver to issue a hardware reset to a network card.

Yes

MacSend

Called by a transport driver to instruct the NIC driver to transmit a packet through a network interface card onto the network.

Yes

MacSynchronizeFunction

Called by a NIC driver function to synchronize access to shared data by the ISR and non-ISR network card functions.

No

MacTimerFunction

Called by the operating system for time-delayed processing after the timer expires.

No

MacTransferData

Called by a transport driver to copy the data from a received packet.

Yes

MacUnload

Called by the operating system to instruct the NIC driver to unload itself.

No

MacChangeEthAddresses

Called by the Ethernet filter library to initiate processing if the multicast address list for a network card changes.

Yes

MacChangeFddiAddresses

Called by the FDDI filter library to initiate processing if the multicast address list for a network card changes.

Yes

MacChangeFilter

Called by the Ethernet, Token Ring, or FDDI filter library to initiate processing when a binding sets or clears a filter class.

Yes

MacChangeGroup

Called by the Token Ring filter library to initiate processing if the group address for all bindings changes.

Yes

MacChangeTrAddress

Called by the Token Ring filter library to initiate processing if the functional address for a network card changes.

Yes

MacCloseAction

Called by the Ethernet, Token Ring, or FDDI filter library to complete processing when a binding closes while the NIC driver is indicating a received packet to a bound transport driver.

No