diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1999-01-04 16:03:48 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1999-01-04 16:03:48 +0000 |
commit | 78c388aed2b7184182c08428db1de6c872d815f5 (patch) | |
tree | 4b2003b1b4ceb241a17faa995da8dd1004bb8e45 /drivers/net/znet.c | |
parent | eb7a5bf93aaa4be1d7c6181100ab7639e74d67f7 (diff) |
Merge with Linux 2.1.131 and more MIPS goodies.
(Did I mention that CVS is buggy ...)
Diffstat (limited to 'drivers/net/znet.c')
-rw-r--r-- | drivers/net/znet.c | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/drivers/net/znet.c b/drivers/net/znet.c index da6d30a53..2dff6d16b 100644 --- a/drivers/net/znet.c +++ b/drivers/net/znet.c @@ -591,6 +591,7 @@ static void znet_rx(struct device *dev) /* The inverse routine to znet_open(). */ static int znet_close(struct device *dev) { + unsigned long flags; int ioaddr = dev->base_addr; dev->tbusy = 1; @@ -598,8 +599,10 @@ static int znet_close(struct device *dev) outb(CMD0_RESET, ioaddr); /* CMD0_RESET */ + flags=claim_dma_lock(); disable_dma(zn.rx_dma); disable_dma(zn.tx_dma); + release_dma_lock(flags); free_irq(dev->irq, dev); @@ -662,16 +665,21 @@ static void set_multicast_list(struct device *dev) void show_dma(void) { + unsigned long flags; short dma_port = ((zn.tx_dma&3)<<2) + IO_DMA2_BASE; unsigned addr = inb(dma_port); addr |= inb(dma_port) << 8; + + flags=claim_dma_lock(); printk("Addr: %04x cnt:%3x...", addr<<1, get_dma_residue(zn.tx_dma)); + release_dma_lock(flags); } /* Initialize the hardware. We have to do this when the board is open()ed or when we come out of suspend mode. */ static void hardware_init(struct device *dev) { + unsigned long flags; short ioaddr = dev->base_addr; zn.rx_cur = zn.rx_start; @@ -680,22 +688,22 @@ static void hardware_init(struct device *dev) /* Reset the chip, and start it up. */ outb(CMD0_RESET, ioaddr); - cli(); { /* Protect against a DMA flip-flop */ - disable_dma(zn.rx_dma); /* reset by an interrupting task. */ - clear_dma_ff(zn.rx_dma); - set_dma_mode(zn.rx_dma, DMA_RX_MODE); - set_dma_addr(zn.rx_dma, (unsigned int) zn.rx_start); - set_dma_count(zn.rx_dma, RX_BUF_SIZE); - enable_dma(zn.rx_dma); - /* Now set up the Tx channel. */ - disable_dma(zn.tx_dma); - clear_dma_ff(zn.tx_dma); - set_dma_mode(zn.tx_dma, DMA_TX_MODE); - set_dma_addr(zn.tx_dma, (unsigned int) zn.tx_start); - set_dma_count(zn.tx_dma, zn.tx_buf_len<<1); - enable_dma(zn.tx_dma); - } sti(); - + flags=claim_dma_lock(); + disable_dma(zn.rx_dma); /* reset by an interrupting task. */ + clear_dma_ff(zn.rx_dma); + set_dma_mode(zn.rx_dma, DMA_RX_MODE); + set_dma_addr(zn.rx_dma, (unsigned int) zn.rx_start); + set_dma_count(zn.rx_dma, RX_BUF_SIZE); + enable_dma(zn.rx_dma); + /* Now set up the Tx channel. */ + disable_dma(zn.tx_dma); + clear_dma_ff(zn.tx_dma); + set_dma_mode(zn.tx_dma, DMA_TX_MODE); + set_dma_addr(zn.tx_dma, (unsigned int) zn.tx_start); + set_dma_count(zn.tx_dma, zn.tx_buf_len<<1); + enable_dma(zn.tx_dma); + release_dma_lock(flags); + if (znet_debug > 1) printk(KERN_DEBUG "%s: Initializing the i82593, tx buf %p... ", dev->name, zn.tx_start); |