summaryrefslogtreecommitdiffstats
path: root/src/drivers/net/rtl8139.c
diff options
context:
space:
mode:
authorMichael Brown2007-07-03 04:34:08 +0200
committerMichael Brown2007-07-03 04:34:08 +0200
commit290280f90ee58d2f51e753b5499f9de8961988ad (patch)
treeaac90d658149904089062ca4f9ed75442a9fc1a3 /src/drivers/net/rtl8139.c
parentAdd missing call to free_iob() in pxenv_undi_isr(). (diff)
downloadipxe-290280f90ee58d2f51e753b5499f9de8961988ad.tar.gz
ipxe-290280f90ee58d2f51e753b5499f9de8961988ad.tar.xz
ipxe-290280f90ee58d2f51e753b5499f9de8961988ad.zip
Enable/disable interrupts at open/close time.
Diffstat (limited to 'src/drivers/net/rtl8139.c')
-rw-r--r--src/drivers/net/rtl8139.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index 2f68bf6c..6acffd9b 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -302,6 +302,12 @@ static struct nvo_fragment rtl_nvo_fragments[] = {
*/
static void rtl_reset ( struct rtl8139_nic *rtl ) {
+ /* Disable interrupts. May not be necessary, but datasheet
+ * doesn't say that the reset command also resets the
+ * interrupt mask.
+ */
+ outw ( 0, rtl->ioaddr + IntrMask );
+
/* Reset chip */
outb ( CmdReset, rtl->ioaddr + ChipCmd );
mdelay ( 10 );
@@ -340,6 +346,9 @@ static int rtl_open ( struct net_device *netdev ) {
outl ( ( ( TX_DMA_BURST << 8 ) | ( TX_IPG << 24 ) ),
rtl->ioaddr + TxConfig );
+ /* Enable interrupts */
+ outw ( ( ROK | RER | TOK | TER ), rtl->ioaddr + IntrMask );
+
return 0;
}