Lines Matching full:mac
76 MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value");
94 static unsigned int read_mac_reg(const struct pasemi_mac *mac, unsigned int reg) in read_mac_reg() argument
96 return pasemi_read_mac_reg(mac->dma_if, reg); in read_mac_reg()
99 static void write_mac_reg(const struct pasemi_mac *mac, unsigned int reg, in write_mac_reg() argument
102 pasemi_write_mac_reg(mac->dma_if, reg, val); in write_mac_reg()
115 static struct pasemi_mac_rxring *rx_ring(const struct pasemi_mac *mac) in rx_ring() argument
117 return mac->rx; in rx_ring()
120 static struct pasemi_mac_txring *tx_ring(const struct pasemi_mac *mac) in tx_ring() argument
122 return mac->tx; in tx_ring()
135 static int mac_to_intf(struct pasemi_mac *mac) in mac_to_intf() argument
137 struct pci_dev *pdev = mac->pdev; in mac_to_intf()
147 * DMA interface-to-MAC-pci-id mappings, and NIN contains number in mac_to_intf()
149 * Just do a linear search until we find the devfn of the MAC in mac_to_intf()
163 static void pasemi_mac_intf_disable(struct pasemi_mac *mac) in pasemi_mac_intf_disable() argument
167 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_disable()
169 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_disable()
172 static void pasemi_mac_intf_enable(struct pasemi_mac *mac) in pasemi_mac_intf_enable() argument
176 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_enable()
178 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_enable()
181 static int pasemi_get_mac_addr(struct pasemi_mac *mac) in pasemi_get_mac_addr() argument
183 struct pci_dev *pdev = mac->pdev; in pasemi_get_mac_addr()
191 "No device node for mac, not configuring\n"); in pasemi_get_mac_addr()
195 maddr = of_get_property(dn, "local-mac-address", &len); in pasemi_get_mac_addr()
198 memcpy(mac->mac_addr, maddr, ETH_ALEN); in pasemi_get_mac_addr()
202 /* Some old versions of firmware mistakenly uses mac-address in pasemi_get_mac_addr()
203 * (and as a string) instead of a byte array in local-mac-address. in pasemi_get_mac_addr()
207 maddr = of_get_property(dn, "mac-address", NULL); in pasemi_get_mac_addr()
211 "no mac address in device tree, not configuring\n"); in pasemi_get_mac_addr()
217 "can't parse mac address, not configuring\n"); in pasemi_get_mac_addr()
221 memcpy(mac->mac_addr, addr, ETH_ALEN); in pasemi_get_mac_addr()
228 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_mac_addr() local
241 adr1 = read_mac_reg(mac, PAS_MAC_CFG_ADR1); in pasemi_mac_set_mac_addr()
245 pasemi_mac_intf_disable(mac); in pasemi_mac_set_mac_addr()
246 write_mac_reg(mac, PAS_MAC_CFG_ADR0, adr0); in pasemi_mac_set_mac_addr()
247 write_mac_reg(mac, PAS_MAC_CFG_ADR1, adr1); in pasemi_mac_set_mac_addr()
248 pasemi_mac_intf_enable(mac); in pasemi_mac_set_mac_addr()
253 static int pasemi_mac_unmap_tx_skb(struct pasemi_mac *mac, in pasemi_mac_unmap_tx_skb() argument
259 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_unmap_tx_skb()
276 static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac) in pasemi_mac_setup_csring() argument
287 dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n"); in pasemi_mac_setup_csring()
350 static void pasemi_mac_setup_csrings(struct pasemi_mac *mac) in pasemi_mac_setup_csrings() argument
353 mac->cs[0] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
354 if (mac->type == MAC_TYPE_XAUI) in pasemi_mac_setup_csrings()
355 mac->cs[1] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
357 mac->cs[1] = 0; in pasemi_mac_setup_csrings()
360 if (mac->cs[i]) in pasemi_mac_setup_csrings()
361 mac->num_cs++; in pasemi_mac_setup_csrings()
377 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_rx_resources() local
385 dev_err(&mac->pdev->dev, "Can't allocate RX channel\n"); in pasemi_mac_setup_rx_resources()
404 ring->buffers = dma_zalloc_coherent(&mac->dma_pdev->dev, in pasemi_mac_setup_rx_resources()
424 write_dma_reg(PAS_DMA_RXINT_BASEL(mac->dma_if), in pasemi_mac_setup_rx_resources()
427 write_dma_reg(PAS_DMA_RXINT_BASEU(mac->dma_if), in pasemi_mac_setup_rx_resources()
438 write_dma_reg(PAS_DMA_RXINT_CFG(mac->dma_if), cfg); in pasemi_mac_setup_rx_resources()
442 ring->mac = mac; in pasemi_mac_setup_rx_resources()
443 mac->rx = ring; in pasemi_mac_setup_rx_resources()
458 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_tx_resources() local
468 dev_err(&mac->pdev->dev, "Can't allocate TX channel\n"); in pasemi_mac_setup_tx_resources()
495 PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) | in pasemi_mac_setup_tx_resources()
506 ring->mac = mac; in pasemi_mac_setup_tx_resources()
518 static void pasemi_mac_free_tx_resources(struct pasemi_mac *mac) in pasemi_mac_free_tx_resources() argument
520 struct pasemi_mac_txring *txring = tx_ring(mac); in pasemi_mac_free_tx_resources()
541 freed = pasemi_mac_unmap_tx_skb(mac, nfrags, in pasemi_mac_free_tx_resources()
553 static void pasemi_mac_free_rx_buffers(struct pasemi_mac *mac) in pasemi_mac_free_rx_buffers() argument
555 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_free_rx_buffers()
562 pci_unmap_single(mac->dma_pdev, in pasemi_mac_free_rx_buffers()
576 static void pasemi_mac_free_rx_resources(struct pasemi_mac *mac) in pasemi_mac_free_rx_resources() argument
578 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_free_rx_resources()
580 dma_free_coherent(&mac->dma_pdev->dev, RX_RING_SIZE * sizeof(u64), in pasemi_mac_free_rx_resources()
581 rx_ring(mac)->buffers, rx_ring(mac)->buf_dma); in pasemi_mac_free_rx_resources()
583 kfree(rx_ring(mac)->ring_info); in pasemi_mac_free_rx_resources()
584 pasemi_dma_free_chan(&rx_ring(mac)->chan); in pasemi_mac_free_rx_resources()
585 mac->rx = NULL; in pasemi_mac_free_rx_resources()
591 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_replenish_rx_ring() local
592 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_replenish_rx_ring()
598 fill = rx_ring(mac)->next_to_fill; in pasemi_mac_replenish_rx_ring()
608 skb = netdev_alloc_skb(dev, mac->bufsz); in pasemi_mac_replenish_rx_ring()
614 dma = pci_map_single(mac->dma_pdev, skb->data, in pasemi_mac_replenish_rx_ring()
615 mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_replenish_rx_ring()
618 if (unlikely(pci_dma_mapping_error(mac->dma_pdev, dma))) { in pasemi_mac_replenish_rx_ring()
625 *buff = XCT_RXB_LEN(mac->bufsz) | XCT_RXB_ADDR(dma); in pasemi_mac_replenish_rx_ring()
631 write_dma_reg(PAS_DMA_RXINT_INCR(mac->dma_if), count); in pasemi_mac_replenish_rx_ring()
633 rx_ring(mac)->next_to_fill = (rx_ring(mac)->next_to_fill + count) & in pasemi_mac_replenish_rx_ring()
637 static void pasemi_mac_restart_rx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_rx_intr() argument
639 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_restart_rx_intr()
652 write_iob_reg(PAS_IOB_DMA_RXCH_RESET(mac->rx->chan.chno), reg); in pasemi_mac_restart_rx_intr()
655 static void pasemi_mac_restart_tx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_tx_intr() argument
660 pcnt = *tx_ring(mac)->chan.status & PAS_STATUS_PCNT_M; in pasemi_mac_restart_tx_intr()
664 write_iob_reg(PAS_IOB_DMA_TXCH_RESET(tx_ring(mac)->chan.chno), reg); in pasemi_mac_restart_tx_intr()
668 static inline void pasemi_mac_rx_error(const struct pasemi_mac *mac, in pasemi_mac_rx_error() argument
672 struct pasemi_dmachan *chan = &rx_ring(mac)->chan; in pasemi_mac_rx_error()
674 if (!netif_msg_rx_err(mac)) in pasemi_mac_rx_error()
677 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_rx_error()
687 static inline void pasemi_mac_tx_error(const struct pasemi_mac *mac, in pasemi_mac_tx_error() argument
691 struct pasemi_dmachan *chan = &tx_ring(mac)->chan; in pasemi_mac_tx_error()
693 if (!netif_msg_tx_err(mac)) in pasemi_mac_tx_error()
708 struct pasemi_mac *mac = rx->mac; in pasemi_mac_clean_rx() local
709 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_clean_rx()
733 pasemi_mac_rx_error(mac, macrx); in pasemi_mac_clean_rx()
755 pci_unmap_single(pdev, dma, mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_clean_rx()
760 mac->netdev->stats.rx_errors++; in pasemi_mac_clean_rx()
761 mac->netdev->stats.rx_crc_errors++; in pasemi_mac_clean_rx()
783 skb->protocol = eth_type_trans(skb, mac->netdev); in pasemi_mac_clean_rx()
784 napi_gro_receive(&mac->napi, skb); in pasemi_mac_clean_rx()
804 rx_ring(mac)->next_to_clean = n; in pasemi_mac_clean_rx()
810 write_dma_reg(PAS_DMA_RXCHAN_INCR(mac->rx->chan.chno), count << 1); in pasemi_mac_clean_rx()
812 pasemi_mac_replenish_rx_ring(mac->netdev, count); in pasemi_mac_clean_rx()
814 mac->netdev->stats.rx_bytes += tot_bytes; in pasemi_mac_clean_rx()
815 mac->netdev->stats.rx_packets += packets; in pasemi_mac_clean_rx()
817 spin_unlock(&rx_ring(mac)->lock); in pasemi_mac_clean_rx()
828 struct pasemi_mac *mac = txring->mac; in pasemi_mac_clean_tx() local
864 pasemi_mac_tx_error(mac, mactx); in pasemi_mac_clean_tx()
902 netif_wake_queue(mac->netdev); in pasemi_mac_clean_tx()
905 pasemi_mac_unmap_tx_skb(mac, nf[i], skbs[i], dmas[i]); in pasemi_mac_clean_tx()
920 struct pasemi_mac *mac = rxring->mac; in pasemi_mac_rx_intr() local
937 napi_schedule(&mac->napi); in pasemi_mac_rx_intr()
949 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_timer() local
955 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_tx_timer()
962 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_intr() local
977 napi_schedule(&mac->napi); in pasemi_mac_tx_intr()
987 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_adjust_link() local
993 /* If no link, MAC speed settings don't matter. Just report in pasemi_adjust_link()
996 if (mac->link && netif_msg_link(mac)) in pasemi_adjust_link()
1000 pasemi_mac_intf_disable(mac); in pasemi_adjust_link()
1001 mac->link = 0; in pasemi_adjust_link()
1005 pasemi_mac_intf_enable(mac); in pasemi_adjust_link()
1009 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_adjust_link()
1034 msg = mac->link != dev->phydev->link || flags != new_flags; in pasemi_adjust_link()
1036 mac->duplex = dev->phydev->duplex; in pasemi_adjust_link()
1037 mac->speed = dev->phydev->speed; in pasemi_adjust_link()
1038 mac->link = dev->phydev->link; in pasemi_adjust_link()
1041 write_mac_reg(mac, PAS_MAC_CFG_PCFG, new_flags); in pasemi_adjust_link()
1043 if (msg && netif_msg_link(mac)) in pasemi_adjust_link()
1045 dev->name, mac->speed, mac->duplex ? "full" : "half"); in pasemi_adjust_link()
1050 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_phy_init() local
1054 dn = pci_device_to_OF_node(mac->pdev); in pasemi_mac_phy_init()
1057 mac->link = 0; in pasemi_mac_phy_init()
1058 mac->speed = 0; in pasemi_mac_phy_init()
1059 mac->duplex = -1; in pasemi_mac_phy_init()
1076 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_open() local
1084 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags); in pasemi_mac_open()
1090 mac->tx = pasemi_mac_setup_tx_resources(dev); in pasemi_mac_open()
1092 if (!mac->tx) in pasemi_mac_open()
1098 if (dev->mtu > 1500 && !mac->num_cs) { in pasemi_mac_open()
1099 pasemi_mac_setup_csrings(mac); in pasemi_mac_open()
1100 if (!mac->num_cs) in pasemi_mac_open()
1106 write_mac_reg(mac, PAS_MAC_RMON(i), 0); in pasemi_mac_open()
1112 write_iob_reg(PAS_IOB_DMA_RXCH_CFG(mac->rx->chan.chno), in pasemi_mac_open()
1115 write_iob_reg(PAS_IOB_DMA_TXCH_CFG(mac->tx->chan.chno), in pasemi_mac_open()
1118 write_mac_reg(mac, PAS_MAC_IPC_CHNL, in pasemi_mac_open()
1119 PAS_MAC_IPC_CHNL_DCHNO(mac->rx->chan.chno) | in pasemi_mac_open()
1120 PAS_MAC_IPC_CHNL_BCH(mac->rx->chan.chno)); in pasemi_mac_open()
1123 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_open()
1131 pasemi_dma_start_chan(&rx_ring(mac)->chan, PAS_DMA_RXCHAN_CCMDSTA_DU | in pasemi_mac_open()
1137 pasemi_dma_start_chan(&tx_ring(mac)->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ | in pasemi_mac_open()
1144 write_dma_reg(PAS_DMA_RXCHAN_INCR(rx_ring(mac)->chan.chno), in pasemi_mac_open()
1148 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_open()
1149 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_open()
1153 if (mac->type == MAC_TYPE_GMAC) in pasemi_mac_open()
1158 /* Enable interface in MAC */ in pasemi_mac_open()
1159 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_open()
1164 pasemi_mac_intf_enable(mac); in pasemi_mac_open()
1165 if (mac->type == MAC_TYPE_GMAC) { in pasemi_mac_open()
1167 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1169 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1175 napi_enable(&mac->napi); in pasemi_mac_open()
1177 snprintf(mac->tx_irq_name, sizeof(mac->tx_irq_name), "%s tx", in pasemi_mac_open()
1180 ret = request_irq(mac->tx->chan.irq, pasemi_mac_tx_intr, 0, in pasemi_mac_open()
1181 mac->tx_irq_name, mac->tx); in pasemi_mac_open()
1183 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1184 mac->tx->chan.irq, ret); in pasemi_mac_open()
1188 snprintf(mac->rx_irq_name, sizeof(mac->rx_irq_name), "%s rx", in pasemi_mac_open()
1191 ret = request_irq(mac->rx->chan.irq, pasemi_mac_rx_intr, 0, in pasemi_mac_open()
1192 mac->rx_irq_name, mac->rx); in pasemi_mac_open()
1194 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1195 mac->rx->chan.irq, ret); in pasemi_mac_open()
1202 timer_setup(&mac->tx->clean_timer, pasemi_mac_tx_timer, 0); in pasemi_mac_open()
1203 mod_timer(&mac->tx->clean_timer, jiffies + HZ); in pasemi_mac_open()
1208 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_open()
1210 napi_disable(&mac->napi); in pasemi_mac_open()
1213 if (mac->tx) in pasemi_mac_open()
1214 pasemi_mac_free_tx_resources(mac); in pasemi_mac_open()
1215 pasemi_mac_free_rx_resources(mac); in pasemi_mac_open()
1223 static void pasemi_mac_pause_txchan(struct pasemi_mac *mac) in pasemi_mac_pause_txchan() argument
1226 int txch = tx_ring(mac)->chan.chno; in pasemi_mac_pause_txchan()
1239 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_txchan()
1245 static void pasemi_mac_pause_rxchan(struct pasemi_mac *mac) in pasemi_mac_pause_rxchan() argument
1248 int rxch = rx_ring(mac)->chan.chno; in pasemi_mac_pause_rxchan()
1260 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxchan()
1265 static void pasemi_mac_pause_rxint(struct pasemi_mac *mac) in pasemi_mac_pause_rxint() argument
1269 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_pause_rxint()
1272 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_pause_rxint()
1279 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxint()
1281 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0); in pasemi_mac_pause_rxint()
1286 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_close() local
1290 rxch = rx_ring(mac)->chan.chno; in pasemi_mac_close()
1291 txch = tx_ring(mac)->chan.chno; in pasemi_mac_close()
1298 del_timer_sync(&mac->tx->clean_timer); in pasemi_mac_close()
1301 napi_disable(&mac->napi); in pasemi_mac_close()
1303 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_close()
1322 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_close()
1323 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_close()
1325 pasemi_mac_pause_txchan(mac); in pasemi_mac_close()
1326 pasemi_mac_pause_rxint(mac); in pasemi_mac_close()
1327 pasemi_mac_pause_rxchan(mac); in pasemi_mac_close()
1328 pasemi_mac_intf_disable(mac); in pasemi_mac_close()
1330 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_close()
1331 free_irq(mac->rx->chan.irq, mac->rx); in pasemi_mac_close()
1333 for (i = 0; i < mac->num_cs; i++) { in pasemi_mac_close()
1334 pasemi_mac_free_csring(mac->cs[i]); in pasemi_mac_close()
1335 mac->cs[i] = NULL; in pasemi_mac_close()
1338 mac->num_cs = 0; in pasemi_mac_close()
1341 pasemi_mac_free_rx_resources(mac); in pasemi_mac_close()
1342 pasemi_mac_free_tx_resources(mac); in pasemi_mac_close()
1409 /* Event handshaking with MAC TX */ in pasemi_mac_queue_csdesc()
1436 struct pasemi_mac * const mac = netdev_priv(dev); in pasemi_mac_start_tx() local
1437 struct pasemi_mac_txring * const txring = tx_ring(mac); in pasemi_mac_start_tx()
1455 map[0] = pci_map_single(mac->dma_pdev, skb->data, skb_headlen(skb), in pasemi_mac_start_tx()
1458 if (pci_dma_mapping_error(mac->dma_pdev, map[0])) in pasemi_mac_start_tx()
1464 map[i + 1] = skb_frag_dma_map(&mac->dma_pdev->dev, frag, 0, in pasemi_mac_start_tx()
1467 if (dma_mapping_error(&mac->dma_pdev->dev, map[i + 1])) { in pasemi_mac_start_tx()
1505 if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) { in pasemi_mac_start_tx()
1506 csring = mac->cs[mac->last_cs]; in pasemi_mac_start_tx()
1507 mac->last_cs = (mac->last_cs + 1) % mac->num_cs; in pasemi_mac_start_tx()
1545 pci_unmap_single(mac->dma_pdev, map[nfrags], map_size[nfrags], in pasemi_mac_start_tx()
1553 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_rx_mode() local
1556 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_set_rx_mode()
1564 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_set_rx_mode()
1570 struct pasemi_mac *mac = container_of(napi, struct pasemi_mac, napi); in pasemi_mac_poll() local
1573 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_poll()
1574 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget); in pasemi_mac_poll()
1579 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_poll()
1580 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_poll()
1593 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_netpoll() local
1595 disable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1596 pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx); in pasemi_mac_netpoll()
1597 enable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1599 disable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1600 pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx); in pasemi_mac_netpoll()
1601 enable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1607 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_change_mtu() local
1622 napi_disable(&mac->napi); in pasemi_mac_change_mtu()
1624 pasemi_mac_intf_disable(mac); in pasemi_mac_change_mtu()
1626 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_change_mtu()
1627 pasemi_mac_pause_rxint(mac); in pasemi_mac_change_mtu()
1628 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_change_mtu()
1629 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_change_mtu()
1634 if (new_mtu > PE_DEF_MTU && !mac->num_cs) { in pasemi_mac_change_mtu()
1635 pasemi_mac_setup_csrings(mac); in pasemi_mac_change_mtu()
1636 if (!mac->num_cs) { in pasemi_mac_change_mtu()
1645 reg = read_mac_reg(mac, PAS_MAC_CFG_MACCFG); in pasemi_mac_change_mtu()
1648 write_mac_reg(mac, PAS_MAC_CFG_MACCFG, reg); in pasemi_mac_change_mtu()
1652 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_change_mtu()
1656 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_change_mtu()
1659 rx_ring(mac)->next_to_fill = 0; in pasemi_mac_change_mtu()
1662 napi_enable(&mac->napi); in pasemi_mac_change_mtu()
1664 pasemi_mac_intf_enable(mac); in pasemi_mac_change_mtu()
1687 struct pasemi_mac *mac; in pasemi_mac_probe() local
1703 mac = netdev_priv(dev); in pasemi_mac_probe()
1705 mac->pdev = pdev; in pasemi_mac_probe()
1706 mac->netdev = dev; in pasemi_mac_probe()
1708 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64); in pasemi_mac_probe()
1713 mac->dma_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa007, NULL); in pasemi_mac_probe()
1714 if (!mac->dma_pdev) { in pasemi_mac_probe()
1715 dev_err(&mac->pdev->dev, "Can't find DMA Controller\n"); in pasemi_mac_probe()
1720 mac->iob_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa001, NULL); in pasemi_mac_probe()
1721 if (!mac->iob_pdev) { in pasemi_mac_probe()
1722 dev_err(&mac->pdev->dev, "Can't find I/O Bridge\n"); in pasemi_mac_probe()
1727 /* get mac addr from device tree */ in pasemi_mac_probe()
1728 if (pasemi_get_mac_addr(mac) || !is_valid_ether_addr(mac->mac_addr)) { in pasemi_mac_probe()
1732 memcpy(dev->dev_addr, mac->mac_addr, sizeof(mac->mac_addr)); in pasemi_mac_probe()
1734 ret = mac_to_intf(mac); in pasemi_mac_probe()
1736 dev_err(&mac->pdev->dev, "Can't map DMA interface\n"); in pasemi_mac_probe()
1740 mac->dma_if = ret; in pasemi_mac_probe()
1744 mac->type = MAC_TYPE_GMAC; in pasemi_mac_probe()
1747 mac->type = MAC_TYPE_XAUI; in pasemi_mac_probe()
1762 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_probe()
1769 mac->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in pasemi_mac_probe()
1772 mac->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in pasemi_mac_probe()
1777 dev_err(&mac->pdev->dev, "register_netdev failed with error %d\n", in pasemi_mac_probe()
1780 } else if (netif_msg_probe(mac)) { in pasemi_mac_probe()
1782 dev->name, mac->type == MAC_TYPE_GMAC ? "GMAC" : "XAUI", in pasemi_mac_probe()
1783 mac->dma_if, dev->dev_addr); in pasemi_mac_probe()
1789 pci_dev_put(mac->iob_pdev); in pasemi_mac_probe()
1790 pci_dev_put(mac->dma_pdev); in pasemi_mac_probe()
1802 struct pasemi_mac *mac; in pasemi_mac_remove() local
1807 mac = netdev_priv(netdev); in pasemi_mac_remove()
1812 pci_dev_put(mac->dma_pdev); in pasemi_mac_remove()
1813 pci_dev_put(mac->iob_pdev); in pasemi_mac_remove()
1815 pasemi_dma_free_chan(&mac->tx->chan); in pasemi_mac_remove()
1816 pasemi_dma_free_chan(&mac->rx->chan); in pasemi_mac_remove()