EL_INTERRUPT

Section: (9)
Updated: 09 October 2005
Index Return to Main Contents

 

NAME

el_interrupt -  

SYNOPSIS

"SYNOPSIS"

irqreturn_t el_interrupt (int irq, void * dev_id, struct pt_regs * regs);  

ARGUMENTS

irq
Interrupt number
dev_id
The 3c501 that burped
regs
Register data (surplus to our requirements)
 

DESCRIPTION

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.

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.

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.


 

Index

NAME
SYNOPSIS
ARGUMENTS
DESCRIPTION

This document was created by man2html, using the manual pages.
Time: 00:02:07 GMT, October 09, 2005