
if
printf("el%d: Receive in INFINITE loop %04X\n",
}
1
Calls the WRITE_CMD macro to write data to the command port register. The data to be written is the receive discard top packet command (CMD_RXDTP).
13.3 Implementing the el_tint Routine
The if_el device driver’s el_tint( ) routine is the transmit interrupt completion routine. It performs the following tasks:
•Counts the transmit interrupt (Section 13.3.1)
•Reads the transmit status and counts all significant events (Section 13.3.2)
•Manages excessive data collisions (Section 13.3.3)
•Writes to the status register to obtain the next value (Section 13.3.4)
•Queues other transmits (Section 13.3.5)
13.3.1Counting the Transmit Interrupt
The following code shows how the el_tint( ) routine counts the transmit interrupt:
#define TXLOOP ((16*1024)/64)
static void el_tint(struct el_softc *sc, struct ifnet *ifp)
{
int count=TXLOOP;
volatile unsigned int status;
1
1
Increments a counter of the number of the transmit interrupts that have been processed.
13.3.2Reading the Transmit Status and Counting All Significant Events
The following code shows how the el_tint( ) routine reads the transmit status and counts all significant events:
status = READ_TXS(sc); 1
while ((status & (TX_CM<<8)) &&
if (status & ((TX_JBTX_UN)<<8)) {
2
WRITE_TXS(sc, status);
3