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 |