Compaq AA-RNG2A-TE Network Card User Manual


 
13.1.8 Indicating That the Interrupt Was Serviced
The following code shows how the el_intr( ) routine indicates that the
interrupt was serviced:
return INTR_SERVICED; 1
}
1
Returns the INTR_SERVICED constant to the kernel interrupt
dispatcher to indicate that el_intr( ) serviced the shared interrupt.
13.2 Implementing the el_rint Routine
The if_el drivers el_rint( ) routine is the receive interrupt completion
routine. It performs the following tasks:
Counts the receive interrupt and reads the receive status (Section 13.2.1)
Pulls the packets from the FIFO buffer (Section 13.2.2)
Examines the first part of the packet (Section 13.2.3)
Copies the received packet into the mbuf (Section 13.2.4)
Discards a packet (Section 13.2.5)
13.2.1 Counting the Receive Interrupt and Reading the Receive
Status
The following code shows how the el_rint( ) routine counts the receive
interrupt and reads the receive status:
#define RXLOOP ((16*1024)/64)
1
static void el_rint(struct el_softc *sc,
struct ifnet *ifp)
{
int len, i, count=RXLOOP;
volatile short status;
struct mbuf *m;
unsigned char *dat;
unsigned int in;
struct ether_header eh;
sc->rint++;
2
status = READ_RXS(sc); 3
1 Defines a constant that represents the maximum number of packets in
a 16K receive buffer.
2 Increments the receive interrupt counter.
3 Calls the READ_RXS macro to read the receive status.
Implementing the Interrupt Section 135