Lines Matching +full:srom +full:- +full:page +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
31 #include <asm/page.h>
39 #define trunc_page(x) ((void *)(((unsigned long)(x)) & ~((unsigned long)(PAGE_SIZE - 1))))
40 #define round_page(x) trunc_page(((unsigned long)(x)) + ((unsigned long)(PAGE_SIZE - 1)))
181 dbdma_st32(&dmap->control, in dbdma_continue()
189 dbdma_st32(&dmap->control, in dbdma_reset()
192 while (dbdma_ld32(&dmap->status) & RUN) in dbdma_reset()
201 out_le16(&cp->command, cmd); in dbdma_setcmd()
202 out_le16(&cp->req_count, count); in dbdma_setcmd()
203 out_le32(&cp->phy_addr, addr); in dbdma_setcmd()
204 out_le32(&cp->cmd_dep, cmd_dep); in dbdma_setcmd()
205 out_le16(&cp->xfer_status, 0); in dbdma_setcmd()
206 out_le16(&cp->res_count, 0); in dbdma_setcmd()
212 out_le16((void __iomem *)dev->base_addr + reg_offset, data); in bmwrite()
219 return in_le16((void __iomem *)dev->base_addr + reg_offset); in bmread()
226 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_enable_and_reset_chip()
227 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_enable_and_reset_chip()
234 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 1); in bmac_enable_and_reset_chip()
244 while (--nb >= 0) { in bmac_mif_readbits()
264 while (--nb >= 0) { in bmac_mif_writebits()
321 --i; in bmac_init_registers()
326 if (!bp->is_bmac_plus) { in bmac_init_registers()
368 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0; in bmac_init_registers()
369 bmwrite(dev, BHASH3, bp->hash_table_mask[0]); /* bits 15 - 0 */ in bmac_init_registers()
370 bmwrite(dev, BHASH2, bp->hash_table_mask[1]); /* bits 31 - 16 */ in bmac_init_registers()
371 bmwrite(dev, BHASH1, bp->hash_table_mask[2]); /* bits 47 - 32 */ in bmac_init_registers()
372 bmwrite(dev, BHASH0, bp->hash_table_mask[3]); /* bits 63 - 48 */ in bmac_init_registers()
374 pWord16 = (unsigned short *)dev->dev_addr; in bmac_init_registers()
403 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_start_chip()
432 if (bp->is_bmac_plus) { in bmac_init_phy()
463 spin_lock_irqsave(&bp->lock, flags); in bmac_suspend()
464 if (bp->timeout_active) { in bmac_suspend()
465 del_timer(&bp->tx_timeout); in bmac_suspend()
466 bp->timeout_active = 0; in bmac_suspend()
468 disable_irq(dev->irq); in bmac_suspend()
469 disable_irq(bp->tx_dma_intr); in bmac_suspend()
470 disable_irq(bp->rx_dma_intr); in bmac_suspend()
471 bp->sleeping = 1; in bmac_suspend()
472 spin_unlock_irqrestore(&bp->lock, flags); in bmac_suspend()
473 if (bp->opened) { in bmac_suspend()
474 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_suspend()
475 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_suspend()
483 rd->control = cpu_to_le32(DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE)); /* clear run bit */ in bmac_suspend()
484 td->control = cpu_to_le32(DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE)); /* clear run bit */ in bmac_suspend()
487 if (bp->rx_bufs[i] != NULL) { in bmac_suspend()
488 dev_kfree_skb(bp->rx_bufs[i]); in bmac_suspend()
489 bp->rx_bufs[i] = NULL; in bmac_suspend()
493 if (bp->tx_bufs[i] != NULL) { in bmac_suspend()
494 dev_kfree_skb(bp->tx_bufs[i]); in bmac_suspend()
495 bp->tx_bufs[i] = NULL; in bmac_suspend()
499 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_suspend()
509 if (bp->opened) in bmac_resume()
512 enable_irq(dev->irq); in bmac_resume()
513 enable_irq(bp->tx_dma_intr); in bmac_resume()
514 enable_irq(bp->rx_dma_intr); in bmac_resume()
530 spin_lock_irqsave(&bp->lock, flags); in bmac_set_address()
533 dev->dev_addr[i] = p[i]; in bmac_set_address()
536 pWord16 = (unsigned short *)dev->dev_addr; in bmac_set_address()
541 spin_unlock_irqrestore(&bp->lock, flags); in bmac_set_address()
551 spin_lock_irqsave(&bp->lock, flags); in bmac_set_timeout()
552 if (bp->timeout_active) in bmac_set_timeout()
553 del_timer(&bp->tx_timeout); in bmac_set_timeout()
554 bp->tx_timeout.expires = jiffies + TX_TIMEOUT; in bmac_set_timeout()
555 add_timer(&bp->tx_timeout); in bmac_set_timeout()
556 bp->timeout_active = 1; in bmac_set_timeout()
557 spin_unlock_irqrestore(&bp->lock, flags); in bmac_set_timeout()
567 len = skb->len; in bmac_construct_xmt()
568 vaddr = skb->data; in bmac_construct_xmt()
577 unsigned char *addr = skb? skb->data: bmac_emergency_rxbuf; in bmac_construct_rxbuff()
586 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_init_tx_ring()
588 memset((char *)bp->tx_cmds, 0, (N_TX_RING+1) * sizeof(struct dbdma_cmd)); in bmac_init_tx_ring()
590 bp->tx_empty = 0; in bmac_init_tx_ring()
591 bp->tx_fill = 0; in bmac_init_tx_ring()
592 bp->tx_fullup = 0; in bmac_init_tx_ring()
595 dbdma_setcmd(&bp->tx_cmds[N_TX_RING], in bmac_init_tx_ring()
596 (DBDMA_NOP | BR_ALWAYS), 0, 0, virt_to_bus(bp->tx_cmds)); in bmac_init_tx_ring()
600 out_le32(&td->wait_sel, 0x00200020); in bmac_init_tx_ring()
601 out_le32(&td->cmdptr, virt_to_bus(bp->tx_cmds)); in bmac_init_tx_ring()
608 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_init_rx_ring()
613 memset((char *)bp->rx_cmds, 0, in bmac_init_rx_ring()
616 if ((skb = bp->rx_bufs[i]) == NULL) { in bmac_init_rx_ring()
617 bp->rx_bufs[i] = skb = netdev_alloc_skb(dev, RX_BUFLEN + 2); in bmac_init_rx_ring()
621 bmac_construct_rxbuff(skb, &bp->rx_cmds[i]); in bmac_init_rx_ring()
624 bp->rx_empty = 0; in bmac_init_rx_ring()
625 bp->rx_fill = i; in bmac_init_rx_ring()
628 dbdma_setcmd(&bp->rx_cmds[N_RX_RING], in bmac_init_rx_ring()
629 (DBDMA_NOP | BR_ALWAYS), 0, 0, virt_to_bus(bp->rx_cmds)); in bmac_init_rx_ring()
633 out_le32(&rd->cmdptr, virt_to_bus(bp->rx_cmds)); in bmac_init_rx_ring()
642 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_transmit_packet()
647 /* bp->tx_empty, bp->tx_fill)); */ in bmac_transmit_packet()
648 i = bp->tx_fill + 1; in bmac_transmit_packet()
651 if (i == bp->tx_empty) { in bmac_transmit_packet()
653 bp->tx_fullup = 1; in bmac_transmit_packet()
655 return -1; /* can't take it at the moment */ in bmac_transmit_packet()
658 dbdma_setcmd(&bp->tx_cmds[i], DBDMA_STOP, 0, 0, 0); in bmac_transmit_packet()
660 bmac_construct_xmt(skb, &bp->tx_cmds[bp->tx_fill]); in bmac_transmit_packet()
662 bp->tx_bufs[bp->tx_fill] = skb; in bmac_transmit_packet()
663 bp->tx_fill = i; in bmac_transmit_packet()
665 dev->stats.tx_bytes += skb->len; in bmac_transmit_packet()
678 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_rxdma_intr()
686 spin_lock_irqsave(&bp->lock, flags); in bmac_rxdma_intr()
692 last = -1; in bmac_rxdma_intr()
693 i = bp->rx_empty; in bmac_rxdma_intr()
696 cp = &bp->rx_cmds[i]; in bmac_rxdma_intr()
697 stat = le16_to_cpu(cp->xfer_status); in bmac_rxdma_intr()
698 residual = le16_to_cpu(cp->res_count); in bmac_rxdma_intr()
701 nb = RX_BUFLEN - residual - 2; in bmac_rxdma_intr()
702 if (nb < (ETHERMINPACKET - ETHERCRC)) { in bmac_rxdma_intr()
704 dev->stats.rx_length_errors++; in bmac_rxdma_intr()
705 dev->stats.rx_errors++; in bmac_rxdma_intr()
707 skb = bp->rx_bufs[i]; in bmac_rxdma_intr()
708 bp->rx_bufs[i] = NULL; in bmac_rxdma_intr()
711 nb -= ETHERCRC; in bmac_rxdma_intr()
713 skb->protocol = eth_type_trans(skb, dev); in bmac_rxdma_intr()
715 ++dev->stats.rx_packets; in bmac_rxdma_intr()
716 dev->stats.rx_bytes += nb; in bmac_rxdma_intr()
718 ++dev->stats.rx_dropped; in bmac_rxdma_intr()
720 if ((skb = bp->rx_bufs[i]) == NULL) { in bmac_rxdma_intr()
721 bp->rx_bufs[i] = skb = netdev_alloc_skb(dev, RX_BUFLEN + 2); in bmac_rxdma_intr()
723 skb_reserve(bp->rx_bufs[i], 2); in bmac_rxdma_intr()
725 bmac_construct_rxbuff(skb, &bp->rx_cmds[i]); in bmac_rxdma_intr()
726 cp->res_count = cpu_to_le16(0); in bmac_rxdma_intr()
727 cp->xfer_status = cpu_to_le16(0); in bmac_rxdma_intr()
732 if (last != -1) { in bmac_rxdma_intr()
733 bp->rx_fill = last; in bmac_rxdma_intr()
734 bp->rx_empty = i; in bmac_rxdma_intr()
738 spin_unlock_irqrestore(&bp->lock, flags); in bmac_rxdma_intr()
756 spin_lock_irqsave(&bp->lock, flags); in bmac_txdma_intr()
762 /* del_timer(&bp->tx_timeout); */ in bmac_txdma_intr()
763 /* bp->timeout_active = 0; */ in bmac_txdma_intr()
766 cp = &bp->tx_cmds[bp->tx_empty]; in bmac_txdma_intr()
767 stat = le16_to_cpu(cp->xfer_status); in bmac_txdma_intr()
775 if (cp == bus_to_virt(in_le32(&bp->tx_dma->cmdptr))) in bmac_txdma_intr()
779 if (bp->tx_bufs[bp->tx_empty]) { in bmac_txdma_intr()
780 ++dev->stats.tx_packets; in bmac_txdma_intr()
781 dev_consume_skb_irq(bp->tx_bufs[bp->tx_empty]); in bmac_txdma_intr()
783 bp->tx_bufs[bp->tx_empty] = NULL; in bmac_txdma_intr()
784 bp->tx_fullup = 0; in bmac_txdma_intr()
786 if (++bp->tx_empty >= N_TX_RING) in bmac_txdma_intr()
787 bp->tx_empty = 0; in bmac_txdma_intr()
788 if (bp->tx_empty == bp->tx_fill) in bmac_txdma_intr()
792 spin_unlock_irqrestore(&bp->lock, flags); in bmac_txdma_intr()
795 XXDEBUG(("bmac_txdma_intr done->bmac_start\n")); in bmac_txdma_intr()
803 /* Real fast bit-reversal algorithm, 6-bit values */
824 /* Compute bit-by-bit */ in crc416()
849 newcrc = crc416(0xffffffff, *address); /* address bits 47 - 32 */ in bmac_crc()
850 newcrc = crc416(newcrc, address[1]); /* address bits 31 - 16 */ in bmac_crc()
851 newcrc = crc416(newcrc, address[2]); /* address bits 15 - 0 */ in bmac_crc()
868 crc = bmac_crc((unsigned short *)addr) & 0x3f; /* Big-endian alert! */ in bmac_addhash()
869 crc = reverse6[crc]; /* Hyperfast bit-reversing algorithm */ in bmac_addhash()
870 if (bp->hash_use_count[crc]++) return; /* This bit is already set */ in bmac_addhash()
873 bp->hash_use_count[crc/16] |= mask; in bmac_addhash()
883 crc = bmac_crc((unsigned short *)addr) & 0x3f; /* Big-endian alert! */ in bmac_removehash()
884 crc = reverse6[crc]; /* Hyperfast bit-reversing algorithm */ in bmac_removehash()
885 if (bp->hash_use_count[crc] == 0) return; /* That bit wasn't in use! */ in bmac_removehash()
886 if (--bp->hash_use_count[crc]) return; /* That bit is still in use */ in bmac_removehash()
889 bp->hash_table_mask[crc/16] &= mask; in bmac_removehash()
931 bmwrite(dev, BHASH3, bp->hash_table_mask[0]); /* bits 15 - 0 */ in bmac_update_hash_table_mask()
932 bmwrite(dev, BHASH2, bp->hash_table_mask[1]); /* bits 31 - 16 */ in bmac_update_hash_table_mask()
933 bmwrite(dev, BHASH1, bp->hash_table_mask[2]); /* bits 47 - 32 */ in bmac_update_hash_table_mask()
934 bmwrite(dev, BHASH0, bp->hash_table_mask[3]); /* bits 63 - 48 */ in bmac_update_hash_table_mask()
946 bmac_rx_on(dev, 1, (dev->flags & IFF_PROMISC)? 1 : 0);
957 bmac_rx_on(dev, 1, (dev->flags & IFF_PROMISC)? 1 : 0);
962 num_addrs == -1 Promiscuous mode, receive all packets
963 num_addrs == 0 Normal mode, clear multicast list
964 num_addrs > 0 Multicast mode, receive normal and MC packets, and do
965 best-effort filtering.
975 if (bp->sleeping) in bmac_set_multicast()
980 if((dev->flags & IFF_ALLMULTI) || (netdev_mc_count(dev) > 64)) { in bmac_set_multicast()
981 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0xffff; in bmac_set_multicast()
985 } else if ((dev->flags & IFF_PROMISC) || (num_addrs < 0)) { in bmac_set_multicast()
990 XXDEBUG(("bmac: promisc mode enabled, rx_cfg=%#08x\n", rx_cfg)); in bmac_set_multicast()
992 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0; in bmac_set_multicast()
993 for (i=0; i<64; i++) bp->hash_use_count[i] = 0; in bmac_set_multicast()
999 bmac_addhash(bp, ha->addr); in bmac_set_multicast()
1017 if((dev->flags & IFF_ALLMULTI) || (netdev_mc_count(dev) > 64)) { in bmac_set_multicast()
1022 } else if(dev->flags & IFF_PROMISC) { in bmac_set_multicast()
1034 crc = ether_crc_le(6, ha->addr); in bmac_set_multicast()
1057 /* if (status & FrameReceived) dev->stats.rx_dropped++; */ in bmac_misc_intr()
1058 if (status & RxErrorMask) dev->stats.rx_errors++; in bmac_misc_intr()
1059 if (status & RxCRCCntExp) dev->stats.rx_crc_errors++; in bmac_misc_intr()
1060 if (status & RxLenCntExp) dev->stats.rx_length_errors++; in bmac_misc_intr()
1061 if (status & RxOverFlow) dev->stats.rx_over_errors++; in bmac_misc_intr()
1062 if (status & RxAlignCntExp) dev->stats.rx_frame_errors++; in bmac_misc_intr()
1064 /* if (status & FrameSent) dev->stats.tx_dropped++; */ in bmac_misc_intr()
1065 if (status & TxErrorMask) dev->stats.tx_errors++; in bmac_misc_intr()
1066 if (status & TxUnderrun) dev->stats.tx_fifo_errors++; in bmac_misc_intr()
1067 if (status & TxNormalCollExp) dev->stats.collisions++; in bmac_misc_intr()
1083 #define SROMReadCount 3 /* number of words to read from SROM */
1145 val = addr >> (addr_len-i-1); in read_srom()
1149 /* Now read in the 16-bit data */ in read_srom()
1201 spin_lock_irqsave(&bp->lock, flags); in bmac_reset_and_enable()
1208 bp->sleeping = 0; in bmac_reset_and_enable()
1217 memcpy(data, dev->dev_addr, ETH_ALEN); in bmac_reset_and_enable()
1218 memcpy(data + ETH_ALEN, dev->dev_addr, ETH_ALEN); in bmac_reset_and_enable()
1221 spin_unlock_irqrestore(&bp->lock, flags); in bmac_reset_and_enable()
1244 int is_bmac_plus = ((int)match->data) != 0; in bmac_probe()
1248 return -ENODEV; in bmac_probe()
1251 "mac-address", NULL); in bmac_probe()
1254 "local-mac-address", NULL); in bmac_probe()
1256 printk(KERN_ERR "BMAC: Can't get mac-address\n"); in bmac_probe()
1257 return -ENODEV; in bmac_probe()
1264 return -ENOMEM; in bmac_probe()
1267 SET_NETDEV_DEV(dev, &mdev->ofdev.dev); in bmac_probe()
1270 bp->mdev = mdev; in bmac_probe()
1271 spin_lock_init(&bp->lock); in bmac_probe()
1278 dev->base_addr = (unsigned long) in bmac_probe()
1280 if (dev->base_addr == 0) in bmac_probe()
1283 dev->irq = macio_irq(mdev, 0); in bmac_probe()
1290 dev->dev_addr[j] = rev ? bitrev8(addr[j]): addr[j]; in bmac_probe()
1296 dev->netdev_ops = &bmac_netdev_ops; in bmac_probe()
1297 dev->ethtool_ops = &bmac_ethtool_ops; in bmac_probe()
1303 bp->is_bmac_plus = is_bmac_plus; in bmac_probe()
1304 bp->tx_dma = ioremap(macio_resource_start(mdev, 1), macio_resource_len(mdev, 1)); in bmac_probe()
1305 if (!bp->tx_dma) in bmac_probe()
1307 bp->tx_dma_intr = macio_irq(mdev, 1); in bmac_probe()
1308 bp->rx_dma = ioremap(macio_resource_start(mdev, 2), macio_resource_len(mdev, 2)); in bmac_probe()
1309 if (!bp->rx_dma) in bmac_probe()
1311 bp->rx_dma_intr = macio_irq(mdev, 2); in bmac_probe()
1313 bp->tx_cmds = (volatile struct dbdma_cmd *) DBDMA_ALIGN(bp + 1); in bmac_probe()
1314 bp->rx_cmds = bp->tx_cmds + N_TX_RING + 1; in bmac_probe()
1316 bp->queue = (struct sk_buff_head *)(bp->rx_cmds + N_RX_RING + 1); in bmac_probe()
1317 skb_queue_head_init(bp->queue); in bmac_probe()
1319 timer_setup(&bp->tx_timeout, bmac_tx_timeout, 0); in bmac_probe()
1321 ret = request_irq(dev->irq, bmac_misc_intr, 0, "BMAC-misc", dev); in bmac_probe()
1323 printk(KERN_ERR "BMAC: can't get irq %d\n", dev->irq); in bmac_probe()
1326 ret = request_irq(bp->tx_dma_intr, bmac_txdma_intr, 0, "BMAC-txdma", dev); in bmac_probe()
1328 printk(KERN_ERR "BMAC: can't get irq %d\n", bp->tx_dma_intr); in bmac_probe()
1331 ret = request_irq(bp->rx_dma_intr, bmac_rxdma_intr, 0, "BMAC-rxdma", dev); in bmac_probe()
1333 printk(KERN_ERR "BMAC: can't get irq %d\n", bp->rx_dma_intr); in bmac_probe()
1338 * re-enabled on open() in bmac_probe()
1340 disable_irq(dev->irq); in bmac_probe()
1341 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_probe()
1349 dev->name, (is_bmac_plus ? "+" : ""), dev->dev_addr); in bmac_probe()
1350 XXDEBUG((", base_addr=%#0lx", dev->base_addr)); in bmac_probe()
1356 free_irq(bp->rx_dma_intr, dev); in bmac_probe()
1358 free_irq(bp->tx_dma_intr, dev); in bmac_probe()
1360 free_irq(dev->irq, dev); in bmac_probe()
1362 iounmap(bp->rx_dma); in bmac_probe()
1364 iounmap(bp->tx_dma); in bmac_probe()
1366 iounmap((void __iomem *)dev->base_addr); in bmac_probe()
1370 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_probe()
1373 return -ENODEV; in bmac_probe()
1381 bp->opened = 1; in bmac_open()
1383 enable_irq(dev->irq); in bmac_open()
1390 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_close()
1391 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_close()
1395 bp->sleeping = 1; in bmac_close()
1407 rd->control = cpu_to_le32(DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE)); /* clear run bit */ in bmac_close()
1408 td->control = cpu_to_le32(DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE)); /* clear run bit */ in bmac_close()
1413 if (bp->rx_bufs[i] != NULL) { in bmac_close()
1414 dev_kfree_skb(bp->rx_bufs[i]); in bmac_close()
1415 bp->rx_bufs[i] = NULL; in bmac_close()
1420 if (bp->tx_bufs[i] != NULL) { in bmac_close()
1421 dev_kfree_skb(bp->tx_bufs[i]); in bmac_close()
1422 bp->tx_bufs[i] = NULL; in bmac_close()
1427 bp->opened = 0; in bmac_close()
1428 disable_irq(dev->irq); in bmac_close()
1429 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_close()
1442 if (bp->sleeping) in bmac_start()
1445 spin_lock_irqsave(&bp->lock, flags); in bmac_start()
1447 i = bp->tx_fill + 1; in bmac_start()
1450 if (i == bp->tx_empty) in bmac_start()
1452 skb = skb_dequeue(bp->queue); in bmac_start()
1457 spin_unlock_irqrestore(&bp->lock, flags); in bmac_start()
1464 skb_queue_tail(bp->queue, skb); in bmac_output()
1472 struct net_device *dev = macio_get_drvdata(bp->mdev); in bmac_tx_timeout()
1473 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_tx_timeout()
1474 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_tx_timeout()
1481 spin_lock_irqsave(&bp->lock, flags); in bmac_tx_timeout()
1482 bp->timeout_active = 0; in bmac_tx_timeout()
1487 cp = &bp->tx_cmds[bp->tx_empty]; in bmac_tx_timeout()
1489 /* le32_to_cpu(td->status), le16_to_cpu(cp->xfer_status), bp->tx_bad_runt, */ in bmac_tx_timeout()
1490 /* mb->pr, mb->xmtfs, mb->fifofc)); */ in bmac_tx_timeout()
1497 out_le32(&td->control, DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE|ACTIVE|DEAD)); in bmac_tx_timeout()
1498 printk(KERN_ERR "bmac: transmit timeout - resetting\n"); in bmac_tx_timeout()
1502 cp = bus_to_virt(le32_to_cpu(rd->cmdptr)); in bmac_tx_timeout()
1503 out_le32(&rd->control, DBDMA_CLEAR(RUN|PAUSE|FLUSH|WAKE|ACTIVE|DEAD)); in bmac_tx_timeout()
1504 out_le16(&cp->xfer_status, 0); in bmac_tx_timeout()
1505 out_le32(&rd->cmdptr, virt_to_bus(cp)); in bmac_tx_timeout()
1506 out_le32(&rd->control, DBDMA_SET(RUN|WAKE)); in bmac_tx_timeout()
1510 bp->tx_empty, bp->tx_fill, bp->tx_fullup)); in bmac_tx_timeout()
1511 i = bp->tx_empty; in bmac_tx_timeout()
1512 ++dev->stats.tx_errors; in bmac_tx_timeout()
1513 if (i != bp->tx_fill) { in bmac_tx_timeout()
1514 dev_kfree_skb(bp->tx_bufs[i]); in bmac_tx_timeout()
1515 bp->tx_bufs[i] = NULL; in bmac_tx_timeout()
1517 bp->tx_empty = i; in bmac_tx_timeout()
1519 bp->tx_fullup = 0; in bmac_tx_timeout()
1521 if (i != bp->tx_fill) { in bmac_tx_timeout()
1522 cp = &bp->tx_cmds[i]; in bmac_tx_timeout()
1523 out_le16(&cp->xfer_status, 0); in bmac_tx_timeout()
1524 out_le16(&cp->command, OUTPUT_LAST); in bmac_tx_timeout()
1525 out_le32(&td->cmdptr, virt_to_bus(cp)); in bmac_tx_timeout()
1526 out_le32(&td->control, DBDMA_SET(RUN)); in bmac_tx_timeout()
1537 spin_unlock_irqrestore(&bp->lock, flags); in bmac_tx_timeout()
1568 return -ENOSYS;
1586 *start = buffer + (offset - begin);
1587 len -= (offset - begin);
1602 free_irq(dev->irq, dev); in bmac_remove()
1603 free_irq(bp->tx_dma_intr, dev); in bmac_remove()
1604 free_irq(bp->rx_dma_intr, dev); in bmac_remove()
1606 iounmap((void __iomem *)dev->base_addr); in bmac_remove()
1607 iounmap(bp->tx_dma); in bmac_remove()
1608 iounmap(bp->rx_dma); in bmac_remove()
1653 return -ENOMEM; in bmac_init()