Lines Matching full:bp

223 	struct bmac_data *bp = netdev_priv(dev);  in bmac_enable_and_reset_chip()  local
224 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_enable_and_reset_chip()
225 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_enable_and_reset_chip()
232 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 1); in bmac_enable_and_reset_chip()
307 struct bmac_data *bp = netdev_priv(dev); in bmac_init_registers() local
324 if (!bp->is_bmac_plus) { in bmac_init_registers()
366 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0; in bmac_init_registers()
367 bmwrite(dev, BHASH3, bp->hash_table_mask[0]); /* bits 15 - 0 */ in bmac_init_registers()
368 bmwrite(dev, BHASH2, bp->hash_table_mask[1]); /* bits 31 - 16 */ in bmac_init_registers()
369 bmwrite(dev, BHASH1, bp->hash_table_mask[2]); /* bits 47 - 32 */ in bmac_init_registers()
370 bmwrite(dev, BHASH0, bp->hash_table_mask[3]); /* bits 63 - 48 */ in bmac_init_registers()
400 struct bmac_data *bp = netdev_priv(dev); in bmac_start_chip() local
401 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_start_chip()
420 struct bmac_data *bp = netdev_priv(dev); in bmac_init_phy() local
430 if (bp->is_bmac_plus) { in bmac_init_phy()
454 struct bmac_data *bp = netdev_priv(dev); in bmac_suspend() local
461 spin_lock_irqsave(&bp->lock, flags); in bmac_suspend()
462 if (bp->timeout_active) { in bmac_suspend()
463 timer_delete(&bp->tx_timeout); in bmac_suspend()
464 bp->timeout_active = 0; in bmac_suspend()
467 disable_irq(bp->tx_dma_intr); in bmac_suspend()
468 disable_irq(bp->rx_dma_intr); in bmac_suspend()
469 bp->sleeping = 1; in bmac_suspend()
470 spin_unlock_irqrestore(&bp->lock, flags); in bmac_suspend()
471 if (bp->opened) { in bmac_suspend()
472 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_suspend()
473 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_suspend()
485 if (bp->rx_bufs[i] != NULL) { in bmac_suspend()
486 dev_kfree_skb(bp->rx_bufs[i]); in bmac_suspend()
487 bp->rx_bufs[i] = NULL; in bmac_suspend()
491 if (bp->tx_bufs[i] != NULL) { in bmac_suspend()
492 dev_kfree_skb(bp->tx_bufs[i]); in bmac_suspend()
493 bp->tx_bufs[i] = NULL; in bmac_suspend()
497 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_suspend()
504 struct bmac_data *bp = netdev_priv(dev); in bmac_resume() local
507 if (bp->opened) in bmac_resume()
511 enable_irq(bp->tx_dma_intr); in bmac_resume()
512 enable_irq(bp->rx_dma_intr); in bmac_resume()
521 struct bmac_data *bp = netdev_priv(dev); in bmac_set_address() local
526 spin_lock_irqsave(&bp->lock, flags); in bmac_set_address()
536 spin_unlock_irqrestore(&bp->lock, flags); in bmac_set_address()
543 struct bmac_data *bp = netdev_priv(dev); in bmac_set_timeout() local
546 spin_lock_irqsave(&bp->lock, flags); in bmac_set_timeout()
547 if (bp->timeout_active) in bmac_set_timeout()
548 timer_delete(&bp->tx_timeout); in bmac_set_timeout()
549 bp->tx_timeout.expires = jiffies + TX_TIMEOUT; in bmac_set_timeout()
550 add_timer(&bp->tx_timeout); in bmac_set_timeout()
551 bp->timeout_active = 1; in bmac_set_timeout()
552 spin_unlock_irqrestore(&bp->lock, flags); in bmac_set_timeout()
579 bmac_init_tx_ring(struct bmac_data *bp) in bmac_init_tx_ring() argument
581 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_init_tx_ring()
583 memset((char *)bp->tx_cmds, 0, (N_TX_RING+1) * sizeof(struct dbdma_cmd)); in bmac_init_tx_ring()
585 bp->tx_empty = 0; in bmac_init_tx_ring()
586 bp->tx_fill = 0; in bmac_init_tx_ring()
587 bp->tx_fullup = 0; in bmac_init_tx_ring()
590 dbdma_setcmd(&bp->tx_cmds[N_TX_RING], in bmac_init_tx_ring()
591 (DBDMA_NOP | BR_ALWAYS), 0, 0, virt_to_bus(bp->tx_cmds)); in bmac_init_tx_ring()
596 out_le32(&td->cmdptr, virt_to_bus(bp->tx_cmds)); in bmac_init_tx_ring()
602 struct bmac_data *bp = netdev_priv(dev); in bmac_init_rx_ring() local
603 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_init_rx_ring()
608 memset((char *)bp->rx_cmds, 0, in bmac_init_rx_ring()
611 if ((skb = bp->rx_bufs[i]) == NULL) { in bmac_init_rx_ring()
612 bp->rx_bufs[i] = skb = netdev_alloc_skb(dev, RX_BUFLEN + 2); in bmac_init_rx_ring()
616 bmac_construct_rxbuff(skb, &bp->rx_cmds[i]); in bmac_init_rx_ring()
619 bp->rx_empty = 0; in bmac_init_rx_ring()
620 bp->rx_fill = i; in bmac_init_rx_ring()
623 dbdma_setcmd(&bp->rx_cmds[N_RX_RING], in bmac_init_rx_ring()
624 (DBDMA_NOP | BR_ALWAYS), 0, 0, virt_to_bus(bp->rx_cmds)); in bmac_init_rx_ring()
628 out_le32(&rd->cmdptr, virt_to_bus(bp->rx_cmds)); in bmac_init_rx_ring()
636 struct bmac_data *bp = netdev_priv(dev); in bmac_transmit_packet() local
637 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_transmit_packet()
642 /* bp->tx_empty, bp->tx_fill)); */ in bmac_transmit_packet()
643 i = bp->tx_fill + 1; in bmac_transmit_packet()
646 if (i == bp->tx_empty) { in bmac_transmit_packet()
648 bp->tx_fullup = 1; in bmac_transmit_packet()
653 dbdma_setcmd(&bp->tx_cmds[i], DBDMA_STOP, 0, 0, 0); in bmac_transmit_packet()
655 bmac_construct_xmt(skb, &bp->tx_cmds[bp->tx_fill]); in bmac_transmit_packet()
657 bp->tx_bufs[bp->tx_fill] = skb; in bmac_transmit_packet()
658 bp->tx_fill = i; in bmac_transmit_packet()
672 struct bmac_data *bp = netdev_priv(dev); in bmac_rxdma_intr() local
673 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_rxdma_intr()
681 spin_lock_irqsave(&bp->lock, flags); in bmac_rxdma_intr()
688 i = bp->rx_empty; in bmac_rxdma_intr()
691 cp = &bp->rx_cmds[i]; in bmac_rxdma_intr()
702 skb = bp->rx_bufs[i]; in bmac_rxdma_intr()
703 bp->rx_bufs[i] = NULL; in bmac_rxdma_intr()
715 if ((skb = bp->rx_bufs[i]) == NULL) { in bmac_rxdma_intr()
716 bp->rx_bufs[i] = skb = netdev_alloc_skb(dev, RX_BUFLEN + 2); in bmac_rxdma_intr()
718 skb_reserve(bp->rx_bufs[i], 2); in bmac_rxdma_intr()
720 bmac_construct_rxbuff(skb, &bp->rx_cmds[i]); in bmac_rxdma_intr()
728 bp->rx_fill = last; in bmac_rxdma_intr()
729 bp->rx_empty = i; in bmac_rxdma_intr()
733 spin_unlock_irqrestore(&bp->lock, flags); in bmac_rxdma_intr()
746 struct bmac_data *bp = netdev_priv(dev); in bmac_txdma_intr() local
751 spin_lock_irqsave(&bp->lock, flags); in bmac_txdma_intr()
757 /* timer_delete(&bp->tx_timeout); */ in bmac_txdma_intr()
758 /* bp->timeout_active = 0; */ in bmac_txdma_intr()
761 cp = &bp->tx_cmds[bp->tx_empty]; in bmac_txdma_intr()
770 if (cp == bus_to_virt(in_le32(&bp->tx_dma->cmdptr))) in bmac_txdma_intr()
774 if (bp->tx_bufs[bp->tx_empty]) { in bmac_txdma_intr()
776 dev_consume_skb_irq(bp->tx_bufs[bp->tx_empty]); in bmac_txdma_intr()
778 bp->tx_bufs[bp->tx_empty] = NULL; in bmac_txdma_intr()
779 bp->tx_fullup = 0; in bmac_txdma_intr()
781 if (++bp->tx_empty >= N_TX_RING) in bmac_txdma_intr()
782 bp->tx_empty = 0; in bmac_txdma_intr()
783 if (bp->tx_empty == bp->tx_fill) in bmac_txdma_intr()
787 spin_unlock_irqrestore(&bp->lock, flags); in bmac_txdma_intr()
804 bmac_addhash(struct bmac_data *bp, unsigned char *addr) in bmac_addhash() argument
811 if (bp->hash_use_count[crc]++) return; /* This bit is already set */ in bmac_addhash()
814 bp->hash_use_count[crc/16] |= mask; in bmac_addhash()
818 bmac_removehash(struct bmac_data *bp, unsigned char *addr) in bmac_removehash() argument
825 if (bp->hash_use_count[crc] == 0) return; /* That bit wasn't in use! */ in bmac_removehash()
826 if (--bp->hash_use_count[crc]) return; /* That bit is still in use */ in bmac_removehash()
829 bp->hash_table_mask[crc/16] &= mask; in bmac_removehash()
869 bmac_update_hash_table_mask(struct net_device *dev, struct bmac_data *bp) in bmac_update_hash_table_mask() argument
871 bmwrite(dev, BHASH3, bp->hash_table_mask[0]); /* bits 15 - 0 */ in bmac_update_hash_table_mask()
872 bmwrite(dev, BHASH2, bp->hash_table_mask[1]); /* bits 31 - 16 */ in bmac_update_hash_table_mask()
873 bmwrite(dev, BHASH1, bp->hash_table_mask[2]); /* bits 47 - 32 */ in bmac_update_hash_table_mask()
874 bmwrite(dev, BHASH0, bp->hash_table_mask[3]); /* bits 63 - 48 */ in bmac_update_hash_table_mask()
880 struct bmac_data *bp, unsigned char *addr)
883 bmac_addhash(bp, addr);
885 bmac_update_hash_table_mask(dev, bp);
892 struct bmac_data *bp, unsigned char *addr)
894 bmac_removehash(bp, addr);
896 bmac_update_hash_table_mask(dev, bp);
910 struct bmac_data *bp = netdev_priv(dev); in bmac_set_multicast() local
915 if (bp->sleeping) in bmac_set_multicast()
921 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0xffff; in bmac_set_multicast()
922 bmac_update_hash_table_mask(dev, bp); in bmac_set_multicast()
932 for (i=0; i<4; i++) bp->hash_table_mask[i] = 0; in bmac_set_multicast()
933 for (i=0; i<64; i++) bp->hash_use_count[i] = 0; in bmac_set_multicast()
939 bmac_addhash(bp, ha->addr); in bmac_set_multicast()
940 bmac_update_hash_table_mask(dev, bp); in bmac_set_multicast()
1136 struct bmac_data *bp = netdev_priv(dev); in bmac_reset_and_enable() local
1141 spin_lock_irqsave(&bp->lock, flags); in bmac_reset_and_enable()
1143 bmac_init_tx_ring(bp); in bmac_reset_and_enable()
1148 bp->sleeping = 0; in bmac_reset_and_enable()
1161 spin_unlock_irqrestore(&bp->lock, flags); in bmac_reset_and_enable()
1180 struct bmac_data *bp; in bmac_probe() local
1207 bp = netdev_priv(dev); in bmac_probe()
1211 bp->mdev = mdev; in bmac_probe()
1212 spin_lock_init(&bp->lock); in bmac_probe()
1246 bp->is_bmac_plus = is_bmac_plus; in bmac_probe()
1247 bp->tx_dma = ioremap(macio_resource_start(mdev, 1), macio_resource_len(mdev, 1)); in bmac_probe()
1248 if (!bp->tx_dma) in bmac_probe()
1250 bp->tx_dma_intr = macio_irq(mdev, 1); in bmac_probe()
1251 bp->rx_dma = ioremap(macio_resource_start(mdev, 2), macio_resource_len(mdev, 2)); in bmac_probe()
1252 if (!bp->rx_dma) in bmac_probe()
1254 bp->rx_dma_intr = macio_irq(mdev, 2); in bmac_probe()
1256 bp->tx_cmds = (volatile struct dbdma_cmd *) DBDMA_ALIGN(bp + 1); in bmac_probe()
1257 bp->rx_cmds = bp->tx_cmds + N_TX_RING + 1; in bmac_probe()
1259 bp->queue = (struct sk_buff_head *)(bp->rx_cmds + N_RX_RING + 1); in bmac_probe()
1260 skb_queue_head_init(bp->queue); in bmac_probe()
1262 timer_setup(&bp->tx_timeout, bmac_tx_timeout, 0); in bmac_probe()
1269 ret = request_irq(bp->tx_dma_intr, bmac_txdma_intr, 0, "BMAC-txdma", dev); in bmac_probe()
1271 printk(KERN_ERR "BMAC: can't get irq %d\n", bp->tx_dma_intr); in bmac_probe()
1274 ret = request_irq(bp->rx_dma_intr, bmac_rxdma_intr, 0, "BMAC-rxdma", dev); in bmac_probe()
1276 printk(KERN_ERR "BMAC: can't get irq %d\n", bp->rx_dma_intr); in bmac_probe()
1283 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_probe()
1298 free_irq(bp->rx_dma_intr, dev); in bmac_probe()
1300 free_irq(bp->tx_dma_intr, dev); in bmac_probe()
1304 iounmap(bp->rx_dma); in bmac_probe()
1306 iounmap(bp->tx_dma); in bmac_probe()
1312 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_probe()
1320 struct bmac_data *bp = netdev_priv(dev); in bmac_open() local
1323 bp->opened = 1; in bmac_open()
1331 struct bmac_data *bp = netdev_priv(dev); in bmac_close() local
1332 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_close()
1333 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_close()
1337 bp->sleeping = 1; in bmac_close()
1355 if (bp->rx_bufs[i] != NULL) { in bmac_close()
1356 dev_kfree_skb(bp->rx_bufs[i]); in bmac_close()
1357 bp->rx_bufs[i] = NULL; in bmac_close()
1362 if (bp->tx_bufs[i] != NULL) { in bmac_close()
1363 dev_kfree_skb(bp->tx_bufs[i]); in bmac_close()
1364 bp->tx_bufs[i] = NULL; in bmac_close()
1369 bp->opened = 0; in bmac_close()
1371 pmac_call_feature(PMAC_FTR_BMAC_ENABLE, macio_get_of_node(bp->mdev), 0, 0); in bmac_close()
1379 struct bmac_data *bp = netdev_priv(dev); in bmac_start() local
1384 if (bp->sleeping) in bmac_start()
1387 spin_lock_irqsave(&bp->lock, flags); in bmac_start()
1389 i = bp->tx_fill + 1; in bmac_start()
1392 if (i == bp->tx_empty) in bmac_start()
1394 skb = skb_dequeue(bp->queue); in bmac_start()
1399 spin_unlock_irqrestore(&bp->lock, flags); in bmac_start()
1405 struct bmac_data *bp = netdev_priv(dev); in bmac_output() local
1406 skb_queue_tail(bp->queue, skb); in bmac_output()
1413 struct bmac_data *bp = timer_container_of(bp, t, tx_timeout); in bmac_tx_timeout() local
1414 struct net_device *dev = macio_get_drvdata(bp->mdev); in bmac_tx_timeout()
1415 volatile struct dbdma_regs __iomem *td = bp->tx_dma; in bmac_tx_timeout()
1416 volatile struct dbdma_regs __iomem *rd = bp->rx_dma; in bmac_tx_timeout()
1423 spin_lock_irqsave(&bp->lock, flags); in bmac_tx_timeout()
1424 bp->timeout_active = 0; in bmac_tx_timeout()
1427 /* bmac_handle_misc_intrs(bp, 0); */ in bmac_tx_timeout()
1429 cp = &bp->tx_cmds[bp->tx_empty]; in bmac_tx_timeout()
1431 /* le32_to_cpu(td->status), le16_to_cpu(cp->xfer_status), bp->tx_bad_runt, */ in bmac_tx_timeout()
1452 bp->tx_empty, bp->tx_fill, bp->tx_fullup)); in bmac_tx_timeout()
1453 i = bp->tx_empty; in bmac_tx_timeout()
1455 if (i != bp->tx_fill) { in bmac_tx_timeout()
1456 dev_kfree_skb_irq(bp->tx_bufs[i]); in bmac_tx_timeout()
1457 bp->tx_bufs[i] = NULL; in bmac_tx_timeout()
1459 bp->tx_empty = i; in bmac_tx_timeout()
1461 bp->tx_fullup = 0; in bmac_tx_timeout()
1463 if (i != bp->tx_fill) { in bmac_tx_timeout()
1464 cp = &bp->tx_cmds[i]; in bmac_tx_timeout()
1479 spin_unlock_irqrestore(&bp->lock, flags); in bmac_tx_timeout()
1540 struct bmac_data *bp = netdev_priv(dev); in bmac_remove() local
1545 free_irq(bp->tx_dma_intr, dev); in bmac_remove()
1546 free_irq(bp->rx_dma_intr, dev); in bmac_remove()
1549 iounmap(bp->tx_dma); in bmac_remove()
1550 iounmap(bp->rx_dma); in bmac_remove()