Lines Matching refs:mac
98 static unsigned int read_mac_reg(const struct pasemi_mac *mac, unsigned int reg) in read_mac_reg() argument
100 return pasemi_read_mac_reg(mac->dma_if, reg); in read_mac_reg()
103 static void write_mac_reg(const struct pasemi_mac *mac, unsigned int reg, in write_mac_reg() argument
106 pasemi_write_mac_reg(mac->dma_if, reg, val); in write_mac_reg()
119 static struct pasemi_mac_rxring *rx_ring(const struct pasemi_mac *mac) in rx_ring() argument
121 return mac->rx; in rx_ring()
124 static struct pasemi_mac_txring *tx_ring(const struct pasemi_mac *mac) in tx_ring() argument
126 return mac->tx; in tx_ring()
139 static int mac_to_intf(struct pasemi_mac *mac) in mac_to_intf() argument
141 struct pci_dev *pdev = mac->pdev; in mac_to_intf()
167 static void pasemi_mac_intf_disable(struct pasemi_mac *mac) in pasemi_mac_intf_disable() argument
171 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_disable()
173 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_disable()
176 static void pasemi_mac_intf_enable(struct pasemi_mac *mac) in pasemi_mac_intf_enable() argument
180 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_enable()
182 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_enable()
185 static int pasemi_get_mac_addr(struct pasemi_mac *mac) in pasemi_get_mac_addr() argument
187 struct pci_dev *pdev = mac->pdev; in pasemi_get_mac_addr()
202 memcpy(mac->mac_addr, maddr, 6); in pasemi_get_mac_addr()
226 memcpy(mac->mac_addr, addr, 6); in pasemi_get_mac_addr()
233 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_mac_addr() local
246 adr1 = read_mac_reg(mac, PAS_MAC_CFG_ADR1); in pasemi_mac_set_mac_addr()
250 pasemi_mac_intf_disable(mac); in pasemi_mac_set_mac_addr()
251 write_mac_reg(mac, PAS_MAC_CFG_ADR0, adr0); in pasemi_mac_set_mac_addr()
252 write_mac_reg(mac, PAS_MAC_CFG_ADR1, adr1); in pasemi_mac_set_mac_addr()
253 pasemi_mac_intf_enable(mac); in pasemi_mac_set_mac_addr()
289 static int pasemi_mac_unmap_tx_skb(struct pasemi_mac *mac, in pasemi_mac_unmap_tx_skb() argument
295 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_unmap_tx_skb()
312 static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac) in pasemi_mac_setup_csring() argument
323 dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n"); in pasemi_mac_setup_csring()
386 static void pasemi_mac_setup_csrings(struct pasemi_mac *mac) in pasemi_mac_setup_csrings() argument
389 mac->cs[0] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
390 if (mac->type == MAC_TYPE_XAUI) in pasemi_mac_setup_csrings()
391 mac->cs[1] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
393 mac->cs[1] = 0; in pasemi_mac_setup_csrings()
396 if (mac->cs[i]) in pasemi_mac_setup_csrings()
397 mac->num_cs++; in pasemi_mac_setup_csrings()
413 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_rx_resources() local
421 dev_err(&mac->pdev->dev, "Can't allocate RX channel\n"); in pasemi_mac_setup_rx_resources()
439 ring->buffers = dma_alloc_coherent(&mac->dma_pdev->dev, in pasemi_mac_setup_rx_resources()
461 write_dma_reg(PAS_DMA_RXINT_BASEL(mac->dma_if), in pasemi_mac_setup_rx_resources()
464 write_dma_reg(PAS_DMA_RXINT_BASEU(mac->dma_if), in pasemi_mac_setup_rx_resources()
475 write_dma_reg(PAS_DMA_RXINT_CFG(mac->dma_if), cfg); in pasemi_mac_setup_rx_resources()
479 ring->mac = mac; in pasemi_mac_setup_rx_resources()
480 mac->rx = ring; in pasemi_mac_setup_rx_resources()
495 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_tx_resources() local
505 dev_err(&mac->pdev->dev, "Can't allocate TX channel\n"); in pasemi_mac_setup_tx_resources()
531 PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) | in pasemi_mac_setup_tx_resources()
542 ring->mac = mac; in pasemi_mac_setup_tx_resources()
554 static void pasemi_mac_free_tx_resources(struct pasemi_mac *mac) in pasemi_mac_free_tx_resources() argument
556 struct pasemi_mac_txring *txring = tx_ring(mac); in pasemi_mac_free_tx_resources()
577 freed = pasemi_mac_unmap_tx_skb(mac, nfrags, in pasemi_mac_free_tx_resources()
588 static void pasemi_mac_free_rx_buffers(struct pasemi_mac *mac) in pasemi_mac_free_rx_buffers() argument
590 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_free_rx_buffers()
597 pci_unmap_single(mac->dma_pdev, in pasemi_mac_free_rx_buffers()
611 static void pasemi_mac_free_rx_resources(struct pasemi_mac *mac) in pasemi_mac_free_rx_resources() argument
613 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_free_rx_resources()
615 dma_free_coherent(&mac->dma_pdev->dev, RX_RING_SIZE * sizeof(u64), in pasemi_mac_free_rx_resources()
616 rx_ring(mac)->buffers, rx_ring(mac)->buf_dma); in pasemi_mac_free_rx_resources()
618 kfree(rx_ring(mac)->ring_info); in pasemi_mac_free_rx_resources()
619 pasemi_dma_free_chan(&rx_ring(mac)->chan); in pasemi_mac_free_rx_resources()
620 mac->rx = NULL; in pasemi_mac_free_rx_resources()
626 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_replenish_rx_ring() local
627 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_replenish_rx_ring()
633 fill = rx_ring(mac)->next_to_fill; in pasemi_mac_replenish_rx_ring()
643 skb = dev_alloc_skb(mac->bufsz); in pasemi_mac_replenish_rx_ring()
649 dma = pci_map_single(mac->dma_pdev, skb->data, in pasemi_mac_replenish_rx_ring()
650 mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_replenish_rx_ring()
653 if (unlikely(pci_dma_mapping_error(mac->dma_pdev, dma))) { in pasemi_mac_replenish_rx_ring()
660 *buff = XCT_RXB_LEN(mac->bufsz) | XCT_RXB_ADDR(dma); in pasemi_mac_replenish_rx_ring()
666 write_dma_reg(PAS_DMA_RXINT_INCR(mac->dma_if), count); in pasemi_mac_replenish_rx_ring()
668 rx_ring(mac)->next_to_fill = (rx_ring(mac)->next_to_fill + count) & in pasemi_mac_replenish_rx_ring()
672 static void pasemi_mac_restart_rx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_rx_intr() argument
674 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_restart_rx_intr()
687 write_iob_reg(PAS_IOB_DMA_RXCH_RESET(mac->rx->chan.chno), reg); in pasemi_mac_restart_rx_intr()
690 static void pasemi_mac_restart_tx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_tx_intr() argument
695 pcnt = *tx_ring(mac)->chan.status & PAS_STATUS_PCNT_M; in pasemi_mac_restart_tx_intr()
699 write_iob_reg(PAS_IOB_DMA_TXCH_RESET(tx_ring(mac)->chan.chno), reg); in pasemi_mac_restart_tx_intr()
703 static inline void pasemi_mac_rx_error(const struct pasemi_mac *mac, in pasemi_mac_rx_error() argument
707 struct pasemi_dmachan *chan = &rx_ring(mac)->chan; in pasemi_mac_rx_error()
709 if (!netif_msg_rx_err(mac)) in pasemi_mac_rx_error()
712 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_rx_error()
722 static inline void pasemi_mac_tx_error(const struct pasemi_mac *mac, in pasemi_mac_tx_error() argument
726 struct pasemi_dmachan *chan = &tx_ring(mac)->chan; in pasemi_mac_tx_error()
728 if (!netif_msg_tx_err(mac)) in pasemi_mac_tx_error()
743 struct pasemi_mac *mac = rx->mac; in pasemi_mac_clean_rx() local
744 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_clean_rx()
768 pasemi_mac_rx_error(mac, macrx); in pasemi_mac_clean_rx()
790 pci_unmap_single(pdev, dma, mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_clean_rx()
795 mac->netdev->stats.rx_errors++; in pasemi_mac_clean_rx()
796 mac->netdev->stats.rx_crc_errors++; in pasemi_mac_clean_rx()
817 skb->protocol = eth_type_trans(skb, mac->netdev); in pasemi_mac_clean_rx()
818 lro_receive_skb(&mac->lro_mgr, skb, (void *)macrx); in pasemi_mac_clean_rx()
838 rx_ring(mac)->next_to_clean = n; in pasemi_mac_clean_rx()
840 lro_flush_all(&mac->lro_mgr); in pasemi_mac_clean_rx()
846 write_dma_reg(PAS_DMA_RXCHAN_INCR(mac->rx->chan.chno), count << 1); in pasemi_mac_clean_rx()
848 pasemi_mac_replenish_rx_ring(mac->netdev, count); in pasemi_mac_clean_rx()
850 mac->netdev->stats.rx_bytes += tot_bytes; in pasemi_mac_clean_rx()
851 mac->netdev->stats.rx_packets += packets; in pasemi_mac_clean_rx()
853 spin_unlock(&rx_ring(mac)->lock); in pasemi_mac_clean_rx()
864 struct pasemi_mac *mac = txring->mac; in pasemi_mac_clean_tx() local
900 pasemi_mac_tx_error(mac, mactx); in pasemi_mac_clean_tx()
938 netif_wake_queue(mac->netdev); in pasemi_mac_clean_tx()
941 pasemi_mac_unmap_tx_skb(mac, nf[i], skbs[i], dmas[i]); in pasemi_mac_clean_tx()
956 struct pasemi_mac *mac = rxring->mac; in pasemi_mac_rx_intr() local
973 netif_rx_schedule(&mac->napi); in pasemi_mac_rx_intr()
985 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_timer() local
991 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_tx_timer()
998 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_intr() local
1013 netif_rx_schedule(&mac->napi); in pasemi_mac_tx_intr()
1023 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_adjust_link() local
1028 if (!mac->phydev->link) { in pasemi_adjust_link()
1032 if (mac->link && netif_msg_link(mac)) in pasemi_adjust_link()
1036 pasemi_mac_intf_disable(mac); in pasemi_adjust_link()
1037 mac->link = 0; in pasemi_adjust_link()
1041 pasemi_mac_intf_enable(mac); in pasemi_adjust_link()
1045 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_adjust_link()
1049 if (!mac->phydev->duplex) in pasemi_adjust_link()
1052 switch (mac->phydev->speed) { in pasemi_adjust_link()
1066 printk("Unsupported speed %d\n", mac->phydev->speed); in pasemi_adjust_link()
1070 msg = mac->link != mac->phydev->link || flags != new_flags; in pasemi_adjust_link()
1072 mac->duplex = mac->phydev->duplex; in pasemi_adjust_link()
1073 mac->speed = mac->phydev->speed; in pasemi_adjust_link()
1074 mac->link = mac->phydev->link; in pasemi_adjust_link()
1077 write_mac_reg(mac, PAS_MAC_CFG_PCFG, new_flags); in pasemi_adjust_link()
1079 if (msg && netif_msg_link(mac)) in pasemi_adjust_link()
1081 dev->name, mac->speed, mac->duplex ? "full" : "half"); in pasemi_adjust_link()
1086 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_phy_init() local
1095 dn = pci_device_to_OF_node(mac->pdev); in pasemi_mac_phy_init()
1107 snprintf(mac->phy_id, sizeof(mac->phy_id), "%x:%02x", in pasemi_mac_phy_init()
1112 mac->link = 0; in pasemi_mac_phy_init()
1113 mac->speed = 0; in pasemi_mac_phy_init()
1114 mac->duplex = -1; in pasemi_mac_phy_init()
1116 phydev = phy_connect(dev, mac->phy_id, &pasemi_adjust_link, 0, PHY_INTERFACE_MODE_SGMII); in pasemi_mac_phy_init()
1123 mac->phydev = phydev; in pasemi_mac_phy_init()
1135 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_open() local
1143 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags); in pasemi_mac_open()
1149 mac->tx = pasemi_mac_setup_tx_resources(dev); in pasemi_mac_open()
1151 if (!mac->tx) in pasemi_mac_open()
1157 if (dev->mtu > 1500 && !mac->num_cs) { in pasemi_mac_open()
1158 pasemi_mac_setup_csrings(mac); in pasemi_mac_open()
1159 if (!mac->num_cs) in pasemi_mac_open()
1165 write_mac_reg(mac, PAS_MAC_RMON(i), 0); in pasemi_mac_open()
1171 write_iob_reg(PAS_IOB_DMA_RXCH_CFG(mac->rx->chan.chno), in pasemi_mac_open()
1174 write_iob_reg(PAS_IOB_DMA_TXCH_CFG(mac->tx->chan.chno), in pasemi_mac_open()
1177 write_mac_reg(mac, PAS_MAC_IPC_CHNL, in pasemi_mac_open()
1178 PAS_MAC_IPC_CHNL_DCHNO(mac->rx->chan.chno) | in pasemi_mac_open()
1179 PAS_MAC_IPC_CHNL_BCH(mac->rx->chan.chno)); in pasemi_mac_open()
1182 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_open()
1190 pasemi_dma_start_chan(&rx_ring(mac)->chan, PAS_DMA_RXCHAN_CCMDSTA_DU | in pasemi_mac_open()
1196 pasemi_dma_start_chan(&tx_ring(mac)->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ | in pasemi_mac_open()
1203 write_dma_reg(PAS_DMA_RXCHAN_INCR(rx_ring(mac)->chan.chno), in pasemi_mac_open()
1207 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_open()
1208 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_open()
1212 if (mac->type == MAC_TYPE_GMAC) in pasemi_mac_open()
1218 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_open()
1223 pasemi_mac_intf_enable(mac); in pasemi_mac_open()
1224 if (mac->type == MAC_TYPE_GMAC) { in pasemi_mac_open()
1226 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1228 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1234 napi_enable(&mac->napi); in pasemi_mac_open()
1236 snprintf(mac->tx_irq_name, sizeof(mac->tx_irq_name), "%s tx", in pasemi_mac_open()
1239 ret = request_irq(mac->tx->chan.irq, &pasemi_mac_tx_intr, IRQF_DISABLED, in pasemi_mac_open()
1240 mac->tx_irq_name, mac->tx); in pasemi_mac_open()
1242 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1243 mac->tx->chan.irq, ret); in pasemi_mac_open()
1247 snprintf(mac->rx_irq_name, sizeof(mac->rx_irq_name), "%s rx", in pasemi_mac_open()
1250 ret = request_irq(mac->rx->chan.irq, &pasemi_mac_rx_intr, IRQF_DISABLED, in pasemi_mac_open()
1251 mac->rx_irq_name, mac->rx); in pasemi_mac_open()
1253 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1254 mac->rx->chan.irq, ret); in pasemi_mac_open()
1258 if (mac->phydev) in pasemi_mac_open()
1259 phy_start(mac->phydev); in pasemi_mac_open()
1261 init_timer(&mac->tx->clean_timer); in pasemi_mac_open()
1262 mac->tx->clean_timer.function = pasemi_mac_tx_timer; in pasemi_mac_open()
1263 mac->tx->clean_timer.data = (unsigned long)mac->tx; in pasemi_mac_open()
1264 mac->tx->clean_timer.expires = jiffies+HZ; in pasemi_mac_open()
1265 add_timer(&mac->tx->clean_timer); in pasemi_mac_open()
1270 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_open()
1272 napi_disable(&mac->napi); in pasemi_mac_open()
1275 if (mac->tx) in pasemi_mac_open()
1276 pasemi_mac_free_tx_resources(mac); in pasemi_mac_open()
1277 pasemi_mac_free_rx_resources(mac); in pasemi_mac_open()
1285 static void pasemi_mac_pause_txchan(struct pasemi_mac *mac) in pasemi_mac_pause_txchan() argument
1288 int txch = tx_ring(mac)->chan.chno; in pasemi_mac_pause_txchan()
1301 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_txchan()
1307 static void pasemi_mac_pause_rxchan(struct pasemi_mac *mac) in pasemi_mac_pause_rxchan() argument
1310 int rxch = rx_ring(mac)->chan.chno; in pasemi_mac_pause_rxchan()
1322 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxchan()
1327 static void pasemi_mac_pause_rxint(struct pasemi_mac *mac) in pasemi_mac_pause_rxint() argument
1331 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_pause_rxint()
1334 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_pause_rxint()
1341 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxint()
1343 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0); in pasemi_mac_pause_rxint()
1348 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_close() local
1352 rxch = rx_ring(mac)->chan.chno; in pasemi_mac_close()
1353 txch = tx_ring(mac)->chan.chno; in pasemi_mac_close()
1355 if (mac->phydev) { in pasemi_mac_close()
1356 phy_stop(mac->phydev); in pasemi_mac_close()
1357 phy_disconnect(mac->phydev); in pasemi_mac_close()
1360 del_timer_sync(&mac->tx->clean_timer); in pasemi_mac_close()
1363 napi_disable(&mac->napi); in pasemi_mac_close()
1365 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_close()
1384 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_close()
1385 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_close()
1387 pasemi_mac_pause_txchan(mac); in pasemi_mac_close()
1388 pasemi_mac_pause_rxint(mac); in pasemi_mac_close()
1389 pasemi_mac_pause_rxchan(mac); in pasemi_mac_close()
1390 pasemi_mac_intf_disable(mac); in pasemi_mac_close()
1392 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_close()
1393 free_irq(mac->rx->chan.irq, mac->rx); in pasemi_mac_close()
1395 for (i = 0; i < mac->num_cs; i++) { in pasemi_mac_close()
1396 pasemi_mac_free_csring(mac->cs[i]); in pasemi_mac_close()
1397 mac->cs[i] = NULL; in pasemi_mac_close()
1400 mac->num_cs = 0; in pasemi_mac_close()
1403 pasemi_mac_free_rx_resources(mac); in pasemi_mac_close()
1404 pasemi_mac_free_tx_resources(mac); in pasemi_mac_close()
1500 struct pasemi_mac * const mac = netdev_priv(dev); in pasemi_mac_start_tx() local
1501 struct pasemi_mac_txring * const txring = tx_ring(mac); in pasemi_mac_start_tx()
1519 map[0] = pci_map_single(mac->dma_pdev, skb->data, skb_headlen(skb), in pasemi_mac_start_tx()
1522 if (pci_dma_mapping_error(mac->dma_pdev, map[0])) in pasemi_mac_start_tx()
1528 map[i+1] = pci_map_page(mac->dma_pdev, frag->page, in pasemi_mac_start_tx()
1532 if (pci_dma_mapping_error(mac->dma_pdev, map[i+1])) { in pasemi_mac_start_tx()
1570 if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) { in pasemi_mac_start_tx()
1571 csring = mac->cs[mac->last_cs]; in pasemi_mac_start_tx()
1572 mac->last_cs = (mac->last_cs + 1) % mac->num_cs; in pasemi_mac_start_tx()
1610 pci_unmap_single(mac->dma_pdev, map[nfrags], map_size[nfrags], in pasemi_mac_start_tx()
1618 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_rx_mode() local
1621 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_set_rx_mode()
1629 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_set_rx_mode()
1635 struct pasemi_mac *mac = container_of(napi, struct pasemi_mac, napi); in pasemi_mac_poll() local
1638 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_poll()
1639 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget); in pasemi_mac_poll()
1644 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_poll()
1645 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_poll()
1658 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_netpoll() local
1660 disable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1661 pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx); in pasemi_mac_netpoll()
1662 enable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1664 disable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1665 pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx); in pasemi_mac_netpoll()
1666 enable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1672 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_change_mtu() local
1690 napi_disable(&mac->napi); in pasemi_mac_change_mtu()
1692 pasemi_mac_intf_disable(mac); in pasemi_mac_change_mtu()
1694 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_change_mtu()
1695 pasemi_mac_pause_rxint(mac); in pasemi_mac_change_mtu()
1696 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_change_mtu()
1697 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_change_mtu()
1702 if (new_mtu > 1500 && !mac->num_cs) { in pasemi_mac_change_mtu()
1703 pasemi_mac_setup_csrings(mac); in pasemi_mac_change_mtu()
1704 if (!mac->num_cs) { in pasemi_mac_change_mtu()
1713 reg = read_mac_reg(mac, PAS_MAC_CFG_MACCFG); in pasemi_mac_change_mtu()
1716 write_mac_reg(mac, PAS_MAC_CFG_MACCFG, reg); in pasemi_mac_change_mtu()
1720 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_change_mtu()
1724 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_change_mtu()
1727 rx_ring(mac)->next_to_fill = 0; in pasemi_mac_change_mtu()
1730 napi_enable(&mac->napi); in pasemi_mac_change_mtu()
1732 pasemi_mac_intf_enable(mac); in pasemi_mac_change_mtu()
1742 struct pasemi_mac *mac; in pasemi_mac_probe() local
1760 mac = netdev_priv(dev); in pasemi_mac_probe()
1762 mac->pdev = pdev; in pasemi_mac_probe()
1763 mac->netdev = dev; in pasemi_mac_probe()
1765 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64); in pasemi_mac_probe()
1770 mac->lro_mgr.max_aggr = LRO_MAX_AGGR; in pasemi_mac_probe()
1771 mac->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS; in pasemi_mac_probe()
1772 mac->lro_mgr.lro_arr = mac->lro_desc; in pasemi_mac_probe()
1773 mac->lro_mgr.get_skb_header = get_skb_hdr; in pasemi_mac_probe()
1774 mac->lro_mgr.features = LRO_F_NAPI | LRO_F_EXTRACT_VLAN_ID; in pasemi_mac_probe()
1775 mac->lro_mgr.dev = mac->netdev; in pasemi_mac_probe()
1776 mac->lro_mgr.ip_summed = CHECKSUM_UNNECESSARY; in pasemi_mac_probe()
1777 mac->lro_mgr.ip_summed_aggr = CHECKSUM_UNNECESSARY; in pasemi_mac_probe()
1780 mac->dma_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa007, NULL); in pasemi_mac_probe()
1781 if (!mac->dma_pdev) { in pasemi_mac_probe()
1782 dev_err(&mac->pdev->dev, "Can't find DMA Controller\n"); in pasemi_mac_probe()
1787 mac->iob_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa001, NULL); in pasemi_mac_probe()
1788 if (!mac->iob_pdev) { in pasemi_mac_probe()
1789 dev_err(&mac->pdev->dev, "Can't find I/O Bridge\n"); in pasemi_mac_probe()
1795 if (pasemi_get_mac_addr(mac) || !is_valid_ether_addr(mac->mac_addr)) { in pasemi_mac_probe()
1799 memcpy(dev->dev_addr, mac->mac_addr, sizeof(mac->mac_addr)); in pasemi_mac_probe()
1801 mac->dma_if = mac_to_intf(mac); in pasemi_mac_probe()
1802 if (mac->dma_if < 0) { in pasemi_mac_probe()
1803 dev_err(&mac->pdev->dev, "Can't map DMA interface\n"); in pasemi_mac_probe()
1810 mac->type = MAC_TYPE_GMAC; in pasemi_mac_probe()
1813 mac->type = MAC_TYPE_XAUI; in pasemi_mac_probe()
1827 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_probe()
1838 mac->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in pasemi_mac_probe()
1841 mac->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in pasemi_mac_probe()
1846 dev_err(&mac->pdev->dev, "register_netdev failed with error %d\n", in pasemi_mac_probe()
1849 } else if netif_msg_probe(mac) in pasemi_mac_probe()
1851 dev->name, mac->type == MAC_TYPE_GMAC ? "GMAC" : "XAUI", in pasemi_mac_probe()
1852 mac->dma_if, dev->dev_addr); in pasemi_mac_probe()
1857 if (mac->iob_pdev) in pasemi_mac_probe()
1858 pci_dev_put(mac->iob_pdev); in pasemi_mac_probe()
1859 if (mac->dma_pdev) in pasemi_mac_probe()
1860 pci_dev_put(mac->dma_pdev); in pasemi_mac_probe()
1872 struct pasemi_mac *mac; in pasemi_mac_remove() local
1877 mac = netdev_priv(netdev); in pasemi_mac_remove()
1882 pci_dev_put(mac->dma_pdev); in pasemi_mac_remove()
1883 pci_dev_put(mac->iob_pdev); in pasemi_mac_remove()
1885 pasemi_dma_free_chan(&mac->tx->chan); in pasemi_mac_remove()
1886 pasemi_dma_free_chan(&mac->rx->chan); in pasemi_mac_remove()