Lines Matching refs:mac

99 static unsigned int read_mac_reg(const struct pasemi_mac *mac, unsigned int reg)  in read_mac_reg()  argument
101 return pasemi_read_mac_reg(mac->dma_if, reg); in read_mac_reg()
104 static void write_mac_reg(const struct pasemi_mac *mac, unsigned int reg, in write_mac_reg() argument
107 pasemi_write_mac_reg(mac->dma_if, reg, val); in write_mac_reg()
120 static struct pasemi_mac_rxring *rx_ring(const struct pasemi_mac *mac) in rx_ring() argument
122 return mac->rx; in rx_ring()
125 static struct pasemi_mac_txring *tx_ring(const struct pasemi_mac *mac) in tx_ring() argument
127 return mac->tx; in tx_ring()
140 static int mac_to_intf(struct pasemi_mac *mac) in mac_to_intf() argument
142 struct pci_dev *pdev = mac->pdev; in mac_to_intf()
168 static void pasemi_mac_intf_disable(struct pasemi_mac *mac) in pasemi_mac_intf_disable() argument
172 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_disable()
174 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_disable()
177 static void pasemi_mac_intf_enable(struct pasemi_mac *mac) in pasemi_mac_intf_enable() argument
181 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_enable()
183 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_enable()
186 static int pasemi_get_mac_addr(struct pasemi_mac *mac) in pasemi_get_mac_addr() argument
188 struct pci_dev *pdev = mac->pdev; in pasemi_get_mac_addr()
203 memcpy(mac->mac_addr, maddr, ETH_ALEN); in pasemi_get_mac_addr()
228 memcpy(mac->mac_addr, addr, ETH_ALEN); in pasemi_get_mac_addr()
235 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_mac_addr() local
248 adr1 = read_mac_reg(mac, PAS_MAC_CFG_ADR1); in pasemi_mac_set_mac_addr()
252 pasemi_mac_intf_disable(mac); in pasemi_mac_set_mac_addr()
253 write_mac_reg(mac, PAS_MAC_CFG_ADR0, adr0); in pasemi_mac_set_mac_addr()
254 write_mac_reg(mac, PAS_MAC_CFG_ADR1, adr1); in pasemi_mac_set_mac_addr()
255 pasemi_mac_intf_enable(mac); in pasemi_mac_set_mac_addr()
291 static int pasemi_mac_unmap_tx_skb(struct pasemi_mac *mac, in pasemi_mac_unmap_tx_skb() argument
297 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_unmap_tx_skb()
314 static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac) in pasemi_mac_setup_csring() argument
325 dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n"); in pasemi_mac_setup_csring()
388 static void pasemi_mac_setup_csrings(struct pasemi_mac *mac) in pasemi_mac_setup_csrings() argument
391 mac->cs[0] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
392 if (mac->type == MAC_TYPE_XAUI) in pasemi_mac_setup_csrings()
393 mac->cs[1] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
395 mac->cs[1] = 0; in pasemi_mac_setup_csrings()
398 if (mac->cs[i]) in pasemi_mac_setup_csrings()
399 mac->num_cs++; in pasemi_mac_setup_csrings()
415 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_rx_resources() local
423 dev_err(&mac->pdev->dev, "Can't allocate RX channel\n"); in pasemi_mac_setup_rx_resources()
441 ring->buffers = dma_zalloc_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()
589 static void pasemi_mac_free_rx_buffers(struct pasemi_mac *mac) in pasemi_mac_free_rx_buffers() argument
591 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_free_rx_buffers()
598 pci_unmap_single(mac->dma_pdev, in pasemi_mac_free_rx_buffers()
612 static void pasemi_mac_free_rx_resources(struct pasemi_mac *mac) in pasemi_mac_free_rx_resources() argument
614 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_free_rx_resources()
616 dma_free_coherent(&mac->dma_pdev->dev, RX_RING_SIZE * sizeof(u64), in pasemi_mac_free_rx_resources()
617 rx_ring(mac)->buffers, rx_ring(mac)->buf_dma); in pasemi_mac_free_rx_resources()
619 kfree(rx_ring(mac)->ring_info); in pasemi_mac_free_rx_resources()
620 pasemi_dma_free_chan(&rx_ring(mac)->chan); in pasemi_mac_free_rx_resources()
621 mac->rx = NULL; in pasemi_mac_free_rx_resources()
627 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_replenish_rx_ring() local
628 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_replenish_rx_ring()
634 fill = rx_ring(mac)->next_to_fill; in pasemi_mac_replenish_rx_ring()
644 skb = netdev_alloc_skb(dev, mac->bufsz); in pasemi_mac_replenish_rx_ring()
650 dma = pci_map_single(mac->dma_pdev, skb->data, in pasemi_mac_replenish_rx_ring()
651 mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_replenish_rx_ring()
654 if (unlikely(pci_dma_mapping_error(mac->dma_pdev, dma))) { in pasemi_mac_replenish_rx_ring()
661 *buff = XCT_RXB_LEN(mac->bufsz) | XCT_RXB_ADDR(dma); in pasemi_mac_replenish_rx_ring()
667 write_dma_reg(PAS_DMA_RXINT_INCR(mac->dma_if), count); in pasemi_mac_replenish_rx_ring()
669 rx_ring(mac)->next_to_fill = (rx_ring(mac)->next_to_fill + count) & in pasemi_mac_replenish_rx_ring()
673 static void pasemi_mac_restart_rx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_rx_intr() argument
675 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_restart_rx_intr()
688 write_iob_reg(PAS_IOB_DMA_RXCH_RESET(mac->rx->chan.chno), reg); in pasemi_mac_restart_rx_intr()
691 static void pasemi_mac_restart_tx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_tx_intr() argument
696 pcnt = *tx_ring(mac)->chan.status & PAS_STATUS_PCNT_M; in pasemi_mac_restart_tx_intr()
700 write_iob_reg(PAS_IOB_DMA_TXCH_RESET(tx_ring(mac)->chan.chno), reg); in pasemi_mac_restart_tx_intr()
704 static inline void pasemi_mac_rx_error(const struct pasemi_mac *mac, in pasemi_mac_rx_error() argument
708 struct pasemi_dmachan *chan = &rx_ring(mac)->chan; in pasemi_mac_rx_error()
710 if (!netif_msg_rx_err(mac)) in pasemi_mac_rx_error()
713 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_rx_error()
723 static inline void pasemi_mac_tx_error(const struct pasemi_mac *mac, in pasemi_mac_tx_error() argument
727 struct pasemi_dmachan *chan = &tx_ring(mac)->chan; in pasemi_mac_tx_error()
729 if (!netif_msg_tx_err(mac)) in pasemi_mac_tx_error()
744 struct pasemi_mac *mac = rx->mac; in pasemi_mac_clean_rx() local
745 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_clean_rx()
769 pasemi_mac_rx_error(mac, macrx); in pasemi_mac_clean_rx()
791 pci_unmap_single(pdev, dma, mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_clean_rx()
796 mac->netdev->stats.rx_errors++; in pasemi_mac_clean_rx()
797 mac->netdev->stats.rx_crc_errors++; in pasemi_mac_clean_rx()
819 skb->protocol = eth_type_trans(skb, mac->netdev); in pasemi_mac_clean_rx()
820 lro_receive_skb(&mac->lro_mgr, skb, (void *)macrx); in pasemi_mac_clean_rx()
840 rx_ring(mac)->next_to_clean = n; in pasemi_mac_clean_rx()
842 lro_flush_all(&mac->lro_mgr); in pasemi_mac_clean_rx()
848 write_dma_reg(PAS_DMA_RXCHAN_INCR(mac->rx->chan.chno), count << 1); in pasemi_mac_clean_rx()
850 pasemi_mac_replenish_rx_ring(mac->netdev, count); in pasemi_mac_clean_rx()
852 mac->netdev->stats.rx_bytes += tot_bytes; in pasemi_mac_clean_rx()
853 mac->netdev->stats.rx_packets += packets; in pasemi_mac_clean_rx()
855 spin_unlock(&rx_ring(mac)->lock); in pasemi_mac_clean_rx()
866 struct pasemi_mac *mac = txring->mac; in pasemi_mac_clean_tx() local
902 pasemi_mac_tx_error(mac, mactx); in pasemi_mac_clean_tx()
940 netif_wake_queue(mac->netdev); in pasemi_mac_clean_tx()
943 pasemi_mac_unmap_tx_skb(mac, nf[i], skbs[i], dmas[i]); in pasemi_mac_clean_tx()
958 struct pasemi_mac *mac = rxring->mac; in pasemi_mac_rx_intr() local
975 napi_schedule(&mac->napi); in pasemi_mac_rx_intr()
987 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_timer() local
993 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_tx_timer()
1000 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_intr() local
1015 napi_schedule(&mac->napi); in pasemi_mac_tx_intr()
1025 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_adjust_link() local
1030 if (!mac->phydev->link) { in pasemi_adjust_link()
1034 if (mac->link && netif_msg_link(mac)) in pasemi_adjust_link()
1038 pasemi_mac_intf_disable(mac); in pasemi_adjust_link()
1039 mac->link = 0; in pasemi_adjust_link()
1043 pasemi_mac_intf_enable(mac); in pasemi_adjust_link()
1047 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_adjust_link()
1051 if (!mac->phydev->duplex) in pasemi_adjust_link()
1054 switch (mac->phydev->speed) { in pasemi_adjust_link()
1068 printk("Unsupported speed %d\n", mac->phydev->speed); in pasemi_adjust_link()
1072 msg = mac->link != mac->phydev->link || flags != new_flags; in pasemi_adjust_link()
1074 mac->duplex = mac->phydev->duplex; in pasemi_adjust_link()
1075 mac->speed = mac->phydev->speed; in pasemi_adjust_link()
1076 mac->link = mac->phydev->link; in pasemi_adjust_link()
1079 write_mac_reg(mac, PAS_MAC_CFG_PCFG, new_flags); in pasemi_adjust_link()
1081 if (msg && netif_msg_link(mac)) in pasemi_adjust_link()
1083 dev->name, mac->speed, mac->duplex ? "full" : "half"); in pasemi_adjust_link()
1088 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_phy_init() local
1092 dn = pci_device_to_OF_node(mac->pdev); in pasemi_mac_phy_init()
1096 mac->link = 0; in pasemi_mac_phy_init()
1097 mac->speed = 0; in pasemi_mac_phy_init()
1098 mac->duplex = -1; in pasemi_mac_phy_init()
1108 mac->phydev = phydev; in pasemi_mac_phy_init()
1116 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_open() local
1124 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags); in pasemi_mac_open()
1130 mac->tx = pasemi_mac_setup_tx_resources(dev); in pasemi_mac_open()
1132 if (!mac->tx) in pasemi_mac_open()
1138 if (dev->mtu > 1500 && !mac->num_cs) { in pasemi_mac_open()
1139 pasemi_mac_setup_csrings(mac); in pasemi_mac_open()
1140 if (!mac->num_cs) in pasemi_mac_open()
1146 write_mac_reg(mac, PAS_MAC_RMON(i), 0); in pasemi_mac_open()
1152 write_iob_reg(PAS_IOB_DMA_RXCH_CFG(mac->rx->chan.chno), in pasemi_mac_open()
1155 write_iob_reg(PAS_IOB_DMA_TXCH_CFG(mac->tx->chan.chno), in pasemi_mac_open()
1158 write_mac_reg(mac, PAS_MAC_IPC_CHNL, in pasemi_mac_open()
1159 PAS_MAC_IPC_CHNL_DCHNO(mac->rx->chan.chno) | in pasemi_mac_open()
1160 PAS_MAC_IPC_CHNL_BCH(mac->rx->chan.chno)); in pasemi_mac_open()
1163 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_open()
1171 pasemi_dma_start_chan(&rx_ring(mac)->chan, PAS_DMA_RXCHAN_CCMDSTA_DU | in pasemi_mac_open()
1177 pasemi_dma_start_chan(&tx_ring(mac)->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ | in pasemi_mac_open()
1184 write_dma_reg(PAS_DMA_RXCHAN_INCR(rx_ring(mac)->chan.chno), in pasemi_mac_open()
1188 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_open()
1189 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_open()
1193 if (mac->type == MAC_TYPE_GMAC) in pasemi_mac_open()
1199 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_open()
1204 pasemi_mac_intf_enable(mac); in pasemi_mac_open()
1205 if (mac->type == MAC_TYPE_GMAC) { in pasemi_mac_open()
1207 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1209 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1215 napi_enable(&mac->napi); in pasemi_mac_open()
1217 snprintf(mac->tx_irq_name, sizeof(mac->tx_irq_name), "%s tx", in pasemi_mac_open()
1220 ret = request_irq(mac->tx->chan.irq, pasemi_mac_tx_intr, 0, in pasemi_mac_open()
1221 mac->tx_irq_name, mac->tx); in pasemi_mac_open()
1223 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1224 mac->tx->chan.irq, ret); in pasemi_mac_open()
1228 snprintf(mac->rx_irq_name, sizeof(mac->rx_irq_name), "%s rx", in pasemi_mac_open()
1231 ret = request_irq(mac->rx->chan.irq, pasemi_mac_rx_intr, 0, in pasemi_mac_open()
1232 mac->rx_irq_name, mac->rx); in pasemi_mac_open()
1234 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1235 mac->rx->chan.irq, ret); in pasemi_mac_open()
1239 if (mac->phydev) in pasemi_mac_open()
1240 phy_start(mac->phydev); in pasemi_mac_open()
1242 setup_timer(&mac->tx->clean_timer, pasemi_mac_tx_timer, in pasemi_mac_open()
1243 (unsigned long)mac->tx); in pasemi_mac_open()
1244 mod_timer(&mac->tx->clean_timer, jiffies + HZ); in pasemi_mac_open()
1249 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_open()
1251 napi_disable(&mac->napi); in pasemi_mac_open()
1254 if (mac->tx) in pasemi_mac_open()
1255 pasemi_mac_free_tx_resources(mac); in pasemi_mac_open()
1256 pasemi_mac_free_rx_resources(mac); in pasemi_mac_open()
1264 static void pasemi_mac_pause_txchan(struct pasemi_mac *mac) in pasemi_mac_pause_txchan() argument
1267 int txch = tx_ring(mac)->chan.chno; in pasemi_mac_pause_txchan()
1280 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_txchan()
1286 static void pasemi_mac_pause_rxchan(struct pasemi_mac *mac) in pasemi_mac_pause_rxchan() argument
1289 int rxch = rx_ring(mac)->chan.chno; in pasemi_mac_pause_rxchan()
1301 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxchan()
1306 static void pasemi_mac_pause_rxint(struct pasemi_mac *mac) in pasemi_mac_pause_rxint() argument
1310 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_pause_rxint()
1313 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_pause_rxint()
1320 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxint()
1322 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0); in pasemi_mac_pause_rxint()
1327 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_close() local
1331 rxch = rx_ring(mac)->chan.chno; in pasemi_mac_close()
1332 txch = tx_ring(mac)->chan.chno; in pasemi_mac_close()
1334 if (mac->phydev) { in pasemi_mac_close()
1335 phy_stop(mac->phydev); in pasemi_mac_close()
1336 phy_disconnect(mac->phydev); in pasemi_mac_close()
1339 del_timer_sync(&mac->tx->clean_timer); in pasemi_mac_close()
1342 napi_disable(&mac->napi); in pasemi_mac_close()
1344 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_close()
1363 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_close()
1364 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_close()
1366 pasemi_mac_pause_txchan(mac); in pasemi_mac_close()
1367 pasemi_mac_pause_rxint(mac); in pasemi_mac_close()
1368 pasemi_mac_pause_rxchan(mac); in pasemi_mac_close()
1369 pasemi_mac_intf_disable(mac); in pasemi_mac_close()
1371 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_close()
1372 free_irq(mac->rx->chan.irq, mac->rx); in pasemi_mac_close()
1374 for (i = 0; i < mac->num_cs; i++) { in pasemi_mac_close()
1375 pasemi_mac_free_csring(mac->cs[i]); in pasemi_mac_close()
1376 mac->cs[i] = NULL; in pasemi_mac_close()
1379 mac->num_cs = 0; in pasemi_mac_close()
1382 pasemi_mac_free_rx_resources(mac); in pasemi_mac_close()
1383 pasemi_mac_free_tx_resources(mac); in pasemi_mac_close()
1477 struct pasemi_mac * const mac = netdev_priv(dev); in pasemi_mac_start_tx() local
1478 struct pasemi_mac_txring * const txring = tx_ring(mac); in pasemi_mac_start_tx()
1496 map[0] = pci_map_single(mac->dma_pdev, skb->data, skb_headlen(skb), in pasemi_mac_start_tx()
1499 if (pci_dma_mapping_error(mac->dma_pdev, map[0])) in pasemi_mac_start_tx()
1505 map[i + 1] = skb_frag_dma_map(&mac->dma_pdev->dev, frag, 0, in pasemi_mac_start_tx()
1508 if (dma_mapping_error(&mac->dma_pdev->dev, map[i + 1])) { in pasemi_mac_start_tx()
1546 if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) { in pasemi_mac_start_tx()
1547 csring = mac->cs[mac->last_cs]; in pasemi_mac_start_tx()
1548 mac->last_cs = (mac->last_cs + 1) % mac->num_cs; in pasemi_mac_start_tx()
1586 pci_unmap_single(mac->dma_pdev, map[nfrags], map_size[nfrags], in pasemi_mac_start_tx()
1594 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_rx_mode() local
1597 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_set_rx_mode()
1605 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_set_rx_mode()
1611 struct pasemi_mac *mac = container_of(napi, struct pasemi_mac, napi); in pasemi_mac_poll() local
1614 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_poll()
1615 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget); in pasemi_mac_poll()
1620 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_poll()
1621 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_poll()
1634 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_netpoll() local
1636 disable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1637 pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx); in pasemi_mac_netpoll()
1638 enable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1640 disable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1641 pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx); in pasemi_mac_netpoll()
1642 enable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1648 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_change_mtu() local
1666 napi_disable(&mac->napi); in pasemi_mac_change_mtu()
1668 pasemi_mac_intf_disable(mac); in pasemi_mac_change_mtu()
1670 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_change_mtu()
1671 pasemi_mac_pause_rxint(mac); in pasemi_mac_change_mtu()
1672 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_change_mtu()
1673 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_change_mtu()
1678 if (new_mtu > 1500 && !mac->num_cs) { in pasemi_mac_change_mtu()
1679 pasemi_mac_setup_csrings(mac); in pasemi_mac_change_mtu()
1680 if (!mac->num_cs) { in pasemi_mac_change_mtu()
1689 reg = read_mac_reg(mac, PAS_MAC_CFG_MACCFG); in pasemi_mac_change_mtu()
1692 write_mac_reg(mac, PAS_MAC_CFG_MACCFG, reg); in pasemi_mac_change_mtu()
1696 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_change_mtu()
1700 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_change_mtu()
1703 rx_ring(mac)->next_to_fill = 0; in pasemi_mac_change_mtu()
1706 napi_enable(&mac->napi); in pasemi_mac_change_mtu()
1708 pasemi_mac_intf_enable(mac); in pasemi_mac_change_mtu()
1731 struct pasemi_mac *mac; in pasemi_mac_probe() local
1747 mac = netdev_priv(dev); in pasemi_mac_probe()
1749 mac->pdev = pdev; in pasemi_mac_probe()
1750 mac->netdev = dev; in pasemi_mac_probe()
1752 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64); in pasemi_mac_probe()
1757 mac->lro_mgr.max_aggr = LRO_MAX_AGGR; in pasemi_mac_probe()
1758 mac->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS; in pasemi_mac_probe()
1759 mac->lro_mgr.lro_arr = mac->lro_desc; in pasemi_mac_probe()
1760 mac->lro_mgr.get_skb_header = get_skb_hdr; in pasemi_mac_probe()
1761 mac->lro_mgr.features = LRO_F_NAPI | LRO_F_EXTRACT_VLAN_ID; in pasemi_mac_probe()
1762 mac->lro_mgr.dev = mac->netdev; in pasemi_mac_probe()
1763 mac->lro_mgr.ip_summed = CHECKSUM_UNNECESSARY; in pasemi_mac_probe()
1764 mac->lro_mgr.ip_summed_aggr = CHECKSUM_UNNECESSARY; in pasemi_mac_probe()
1767 mac->dma_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa007, NULL); in pasemi_mac_probe()
1768 if (!mac->dma_pdev) { in pasemi_mac_probe()
1769 dev_err(&mac->pdev->dev, "Can't find DMA Controller\n"); in pasemi_mac_probe()
1774 mac->iob_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa001, NULL); in pasemi_mac_probe()
1775 if (!mac->iob_pdev) { in pasemi_mac_probe()
1776 dev_err(&mac->pdev->dev, "Can't find I/O Bridge\n"); in pasemi_mac_probe()
1782 if (pasemi_get_mac_addr(mac) || !is_valid_ether_addr(mac->mac_addr)) { in pasemi_mac_probe()
1786 memcpy(dev->dev_addr, mac->mac_addr, sizeof(mac->mac_addr)); in pasemi_mac_probe()
1788 ret = mac_to_intf(mac); in pasemi_mac_probe()
1790 dev_err(&mac->pdev->dev, "Can't map DMA interface\n"); in pasemi_mac_probe()
1794 mac->dma_if = ret; in pasemi_mac_probe()
1798 mac->type = MAC_TYPE_GMAC; in pasemi_mac_probe()
1801 mac->type = MAC_TYPE_XAUI; in pasemi_mac_probe()
1811 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_probe()
1818 mac->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in pasemi_mac_probe()
1821 mac->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in pasemi_mac_probe()
1826 dev_err(&mac->pdev->dev, "register_netdev failed with error %d\n", in pasemi_mac_probe()
1829 } else if (netif_msg_probe(mac)) { in pasemi_mac_probe()
1831 dev->name, mac->type == MAC_TYPE_GMAC ? "GMAC" : "XAUI", in pasemi_mac_probe()
1832 mac->dma_if, dev->dev_addr); in pasemi_mac_probe()
1838 pci_dev_put(mac->iob_pdev); in pasemi_mac_probe()
1839 pci_dev_put(mac->dma_pdev); in pasemi_mac_probe()
1851 struct pasemi_mac *mac; in pasemi_mac_remove() local
1856 mac = netdev_priv(netdev); in pasemi_mac_remove()
1861 pci_dev_put(mac->dma_pdev); in pasemi_mac_remove()
1862 pci_dev_put(mac->iob_pdev); in pasemi_mac_remove()
1864 pasemi_dma_free_chan(&mac->tx->chan); in pasemi_mac_remove()
1865 pasemi_dma_free_chan(&mac->rx->chan); in pasemi_mac_remove()