.\" This manpage has been automatically generated by docbook2man
.\" from a DocBook document. This tool can be found at:
.\"
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
.TH "EL_INTERRUPT" "9" "09 October 2005" "" ""
.SH NAME
el_interrupt \-
.SH SYNOPSIS
"SYNOPSIS"
.sp
\fB
.sp
irqreturn_t el_interrupt (int \fIirq\fB, void * \fIdev_id\fB, struct pt_regs * \fIregs\fB);
\fR
.SH "ARGUMENTS"
.TP
\fB\fIirq\fB\fR
Interrupt number
.TP
\fB\fIdev_id\fB\fR
The 3c501 that burped
.TP
\fB\fIregs\fB\fR
Register data (surplus to our requirements)
.SH "DESCRIPTION"
.PP
Handle the ether interface interrupts. The 3c501 needs a lot more
hand holding than most cards. In particular we get a transmit interrupt
with a collision error because the board firmware isnt capable of rewinding
its own transmit buffer pointers. It can however count to 16 for us.
.PP
On the receive side the card is also very dumb. It has no buffering to
speak of. We simply pull the packet out of its PIO buffer (which is slow)
and queue it for the kernel. Then we reset the card for the next packet.
.PP
We sometimes get suprise interrupts late both because the SMP IRQ delivery
is message passing and because the card sometimes seems to deliver late. I
think if it is part way through a receive and the mode is changed it carries
on receiving and sends us an interrupt. We have to band aid all these cases
to get a sensible 150kbytes/second performance. Even then you want a small
TCP window.