Lines Matching full:mac

65 MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value");
83 static unsigned int read_mac_reg(const struct pasemi_mac *mac, unsigned int reg) in read_mac_reg() argument
85 return pasemi_read_mac_reg(mac->dma_if, reg); in read_mac_reg()
88 static void write_mac_reg(const struct pasemi_mac *mac, unsigned int reg, in write_mac_reg() argument
91 pasemi_write_mac_reg(mac->dma_if, reg, val); in write_mac_reg()
104 static struct pasemi_mac_rxring *rx_ring(const struct pasemi_mac *mac) in rx_ring() argument
106 return mac->rx; in rx_ring()
109 static struct pasemi_mac_txring *tx_ring(const struct pasemi_mac *mac) in tx_ring() argument
111 return mac->tx; in tx_ring()
124 static int mac_to_intf(struct pasemi_mac *mac) in mac_to_intf() argument
126 struct pci_dev *pdev = mac->pdev; in mac_to_intf()
136 * DMA interface-to-MAC-pci-id mappings, and NIN contains number in mac_to_intf()
138 * Just do a linear search until we find the devfn of the MAC in mac_to_intf()
152 static void pasemi_mac_intf_disable(struct pasemi_mac *mac) in pasemi_mac_intf_disable() argument
156 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_disable()
158 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_disable()
161 static void pasemi_mac_intf_enable(struct pasemi_mac *mac) in pasemi_mac_intf_enable() argument
165 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_intf_enable()
167 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_intf_enable()
170 static int pasemi_get_mac_addr(struct pasemi_mac *mac) in pasemi_get_mac_addr() argument
172 struct pci_dev *pdev = mac->pdev; in pasemi_get_mac_addr()
180 "No device node for mac, not configuring\n"); in pasemi_get_mac_addr()
184 maddr = of_get_property(dn, "local-mac-address", &len); in pasemi_get_mac_addr()
187 memcpy(mac->mac_addr, maddr, ETH_ALEN); in pasemi_get_mac_addr()
191 /* Some old versions of firmware mistakenly uses mac-address in pasemi_get_mac_addr()
192 * (and as a string) instead of a byte array in local-mac-address. in pasemi_get_mac_addr()
196 maddr = of_get_property(dn, "mac-address", NULL); in pasemi_get_mac_addr()
200 "no mac address in device tree, not configuring\n"); in pasemi_get_mac_addr()
206 "can't parse mac address, not configuring\n"); in pasemi_get_mac_addr()
210 memcpy(mac->mac_addr, addr, ETH_ALEN); in pasemi_get_mac_addr()
217 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_mac_addr() local
230 adr1 = read_mac_reg(mac, PAS_MAC_CFG_ADR1); in pasemi_mac_set_mac_addr()
234 pasemi_mac_intf_disable(mac); in pasemi_mac_set_mac_addr()
235 write_mac_reg(mac, PAS_MAC_CFG_ADR0, adr0); in pasemi_mac_set_mac_addr()
236 write_mac_reg(mac, PAS_MAC_CFG_ADR1, adr1); in pasemi_mac_set_mac_addr()
237 pasemi_mac_intf_enable(mac); in pasemi_mac_set_mac_addr()
242 static int pasemi_mac_unmap_tx_skb(struct pasemi_mac *mac, in pasemi_mac_unmap_tx_skb() argument
248 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_unmap_tx_skb()
265 static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac) in pasemi_mac_setup_csring() argument
276 dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n"); in pasemi_mac_setup_csring()
339 static void pasemi_mac_setup_csrings(struct pasemi_mac *mac) in pasemi_mac_setup_csrings() argument
342 mac->cs[0] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
343 if (mac->type == MAC_TYPE_XAUI) in pasemi_mac_setup_csrings()
344 mac->cs[1] = pasemi_mac_setup_csring(mac); in pasemi_mac_setup_csrings()
346 mac->cs[1] = 0; in pasemi_mac_setup_csrings()
349 if (mac->cs[i]) in pasemi_mac_setup_csrings()
350 mac->num_cs++; in pasemi_mac_setup_csrings()
366 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_rx_resources() local
374 dev_err(&mac->pdev->dev, "Can't allocate RX channel\n"); in pasemi_mac_setup_rx_resources()
393 ring->buffers = dma_alloc_coherent(&mac->dma_pdev->dev, in pasemi_mac_setup_rx_resources()
413 write_dma_reg(PAS_DMA_RXINT_BASEL(mac->dma_if), in pasemi_mac_setup_rx_resources()
416 write_dma_reg(PAS_DMA_RXINT_BASEU(mac->dma_if), in pasemi_mac_setup_rx_resources()
427 write_dma_reg(PAS_DMA_RXINT_CFG(mac->dma_if), cfg); in pasemi_mac_setup_rx_resources()
431 ring->mac = mac; in pasemi_mac_setup_rx_resources()
432 mac->rx = ring; in pasemi_mac_setup_rx_resources()
447 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_setup_tx_resources() local
457 dev_err(&mac->pdev->dev, "Can't allocate TX channel\n"); in pasemi_mac_setup_tx_resources()
484 PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) | in pasemi_mac_setup_tx_resources()
495 ring->mac = mac; in pasemi_mac_setup_tx_resources()
507 static void pasemi_mac_free_tx_resources(struct pasemi_mac *mac) in pasemi_mac_free_tx_resources() argument
509 struct pasemi_mac_txring *txring = tx_ring(mac); in pasemi_mac_free_tx_resources()
530 freed = pasemi_mac_unmap_tx_skb(mac, nfrags, in pasemi_mac_free_tx_resources()
542 static void pasemi_mac_free_rx_buffers(struct pasemi_mac *mac) in pasemi_mac_free_rx_buffers() argument
544 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_free_rx_buffers()
551 pci_unmap_single(mac->dma_pdev, in pasemi_mac_free_rx_buffers()
565 static void pasemi_mac_free_rx_resources(struct pasemi_mac *mac) in pasemi_mac_free_rx_resources() argument
567 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_free_rx_resources()
569 dma_free_coherent(&mac->dma_pdev->dev, RX_RING_SIZE * sizeof(u64), in pasemi_mac_free_rx_resources()
570 rx_ring(mac)->buffers, rx_ring(mac)->buf_dma); in pasemi_mac_free_rx_resources()
572 kfree(rx_ring(mac)->ring_info); in pasemi_mac_free_rx_resources()
573 pasemi_dma_free_chan(&rx_ring(mac)->chan); in pasemi_mac_free_rx_resources()
574 mac->rx = NULL; in pasemi_mac_free_rx_resources()
580 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_replenish_rx_ring() local
581 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_replenish_rx_ring()
587 fill = rx_ring(mac)->next_to_fill; in pasemi_mac_replenish_rx_ring()
597 skb = netdev_alloc_skb(dev, mac->bufsz); in pasemi_mac_replenish_rx_ring()
603 dma = pci_map_single(mac->dma_pdev, skb->data, in pasemi_mac_replenish_rx_ring()
604 mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_replenish_rx_ring()
607 if (unlikely(pci_dma_mapping_error(mac->dma_pdev, dma))) { in pasemi_mac_replenish_rx_ring()
614 *buff = XCT_RXB_LEN(mac->bufsz) | XCT_RXB_ADDR(dma); in pasemi_mac_replenish_rx_ring()
620 write_dma_reg(PAS_DMA_RXINT_INCR(mac->dma_if), count); in pasemi_mac_replenish_rx_ring()
622 rx_ring(mac)->next_to_fill = (rx_ring(mac)->next_to_fill + count) & in pasemi_mac_replenish_rx_ring()
626 static void pasemi_mac_restart_rx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_rx_intr() argument
628 struct pasemi_mac_rxring *rx = rx_ring(mac); in pasemi_mac_restart_rx_intr()
641 write_iob_reg(PAS_IOB_DMA_RXCH_RESET(mac->rx->chan.chno), reg); in pasemi_mac_restart_rx_intr()
644 static void pasemi_mac_restart_tx_intr(const struct pasemi_mac *mac) in pasemi_mac_restart_tx_intr() argument
649 pcnt = *tx_ring(mac)->chan.status & PAS_STATUS_PCNT_M; in pasemi_mac_restart_tx_intr()
653 write_iob_reg(PAS_IOB_DMA_TXCH_RESET(tx_ring(mac)->chan.chno), reg); in pasemi_mac_restart_tx_intr()
657 static inline void pasemi_mac_rx_error(const struct pasemi_mac *mac, in pasemi_mac_rx_error() argument
661 struct pasemi_dmachan *chan = &rx_ring(mac)->chan; in pasemi_mac_rx_error()
663 if (!netif_msg_rx_err(mac)) in pasemi_mac_rx_error()
666 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_rx_error()
676 static inline void pasemi_mac_tx_error(const struct pasemi_mac *mac, in pasemi_mac_tx_error() argument
680 struct pasemi_dmachan *chan = &tx_ring(mac)->chan; in pasemi_mac_tx_error()
682 if (!netif_msg_tx_err(mac)) in pasemi_mac_tx_error()
697 struct pasemi_mac *mac = rx->mac; in pasemi_mac_clean_rx() local
698 struct pci_dev *pdev = mac->dma_pdev; in pasemi_mac_clean_rx()
722 pasemi_mac_rx_error(mac, macrx); in pasemi_mac_clean_rx()
744 pci_unmap_single(pdev, dma, mac->bufsz - LOCAL_SKB_ALIGN, in pasemi_mac_clean_rx()
749 mac->netdev->stats.rx_errors++; in pasemi_mac_clean_rx()
750 mac->netdev->stats.rx_crc_errors++; in pasemi_mac_clean_rx()
772 skb->protocol = eth_type_trans(skb, mac->netdev); in pasemi_mac_clean_rx()
773 napi_gro_receive(&mac->napi, skb); in pasemi_mac_clean_rx()
793 rx_ring(mac)->next_to_clean = n; in pasemi_mac_clean_rx()
799 write_dma_reg(PAS_DMA_RXCHAN_INCR(mac->rx->chan.chno), count << 1); in pasemi_mac_clean_rx()
801 pasemi_mac_replenish_rx_ring(mac->netdev, count); in pasemi_mac_clean_rx()
803 mac->netdev->stats.rx_bytes += tot_bytes; in pasemi_mac_clean_rx()
804 mac->netdev->stats.rx_packets += packets; in pasemi_mac_clean_rx()
806 spin_unlock(&rx_ring(mac)->lock); in pasemi_mac_clean_rx()
817 struct pasemi_mac *mac = txring->mac; in pasemi_mac_clean_tx() local
853 pasemi_mac_tx_error(mac, mactx); in pasemi_mac_clean_tx()
891 netif_wake_queue(mac->netdev); in pasemi_mac_clean_tx()
894 pasemi_mac_unmap_tx_skb(mac, nf[i], skbs[i], dmas[i]); in pasemi_mac_clean_tx()
909 struct pasemi_mac *mac = rxring->mac; in pasemi_mac_rx_intr() local
926 napi_schedule(&mac->napi); in pasemi_mac_rx_intr()
938 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_timer() local
944 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_tx_timer()
951 struct pasemi_mac *mac = txring->mac; in pasemi_mac_tx_intr() local
966 napi_schedule(&mac->napi); in pasemi_mac_tx_intr()
976 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_adjust_link() local
982 /* If no link, MAC speed settings don't matter. Just report in pasemi_adjust_link()
985 if (mac->link && netif_msg_link(mac)) in pasemi_adjust_link()
989 pasemi_mac_intf_disable(mac); in pasemi_adjust_link()
990 mac->link = 0; in pasemi_adjust_link()
994 pasemi_mac_intf_enable(mac); in pasemi_adjust_link()
998 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_adjust_link()
1023 msg = mac->link != dev->phydev->link || flags != new_flags; in pasemi_adjust_link()
1025 mac->duplex = dev->phydev->duplex; in pasemi_adjust_link()
1026 mac->speed = dev->phydev->speed; in pasemi_adjust_link()
1027 mac->link = dev->phydev->link; in pasemi_adjust_link()
1030 write_mac_reg(mac, PAS_MAC_CFG_PCFG, new_flags); in pasemi_adjust_link()
1032 if (msg && netif_msg_link(mac)) in pasemi_adjust_link()
1034 dev->name, mac->speed, mac->duplex ? "full" : "half"); in pasemi_adjust_link()
1039 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_phy_init() local
1043 dn = pci_device_to_OF_node(mac->pdev); in pasemi_mac_phy_init()
1046 mac->link = 0; in pasemi_mac_phy_init()
1047 mac->speed = 0; in pasemi_mac_phy_init()
1048 mac->duplex = -1; in pasemi_mac_phy_init()
1065 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_open() local
1073 write_mac_reg(mac, PAS_MAC_CFG_TXP, flags); in pasemi_mac_open()
1079 mac->tx = pasemi_mac_setup_tx_resources(dev); in pasemi_mac_open()
1081 if (!mac->tx) in pasemi_mac_open()
1087 if (dev->mtu > 1500 && !mac->num_cs) { in pasemi_mac_open()
1088 pasemi_mac_setup_csrings(mac); in pasemi_mac_open()
1089 if (!mac->num_cs) in pasemi_mac_open()
1095 write_mac_reg(mac, PAS_MAC_RMON(i), 0); in pasemi_mac_open()
1101 write_iob_reg(PAS_IOB_DMA_RXCH_CFG(mac->rx->chan.chno), in pasemi_mac_open()
1104 write_iob_reg(PAS_IOB_DMA_TXCH_CFG(mac->tx->chan.chno), in pasemi_mac_open()
1107 write_mac_reg(mac, PAS_MAC_IPC_CHNL, in pasemi_mac_open()
1108 PAS_MAC_IPC_CHNL_DCHNO(mac->rx->chan.chno) | in pasemi_mac_open()
1109 PAS_MAC_IPC_CHNL_BCH(mac->rx->chan.chno)); in pasemi_mac_open()
1112 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_open()
1120 pasemi_dma_start_chan(&rx_ring(mac)->chan, PAS_DMA_RXCHAN_CCMDSTA_DU | in pasemi_mac_open()
1126 pasemi_dma_start_chan(&tx_ring(mac)->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ | in pasemi_mac_open()
1133 write_dma_reg(PAS_DMA_RXCHAN_INCR(rx_ring(mac)->chan.chno), in pasemi_mac_open()
1137 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_open()
1138 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_open()
1142 if (mac->type == MAC_TYPE_GMAC) in pasemi_mac_open()
1147 /* Enable interface in MAC */ in pasemi_mac_open()
1148 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_open()
1153 pasemi_mac_intf_enable(mac); in pasemi_mac_open()
1154 if (mac->type == MAC_TYPE_GMAC) { in pasemi_mac_open()
1156 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1158 dev_warn(&mac->pdev->dev, in pasemi_mac_open()
1164 napi_enable(&mac->napi); in pasemi_mac_open()
1166 snprintf(mac->tx_irq_name, sizeof(mac->tx_irq_name), "%s tx", in pasemi_mac_open()
1169 ret = request_irq(mac->tx->chan.irq, pasemi_mac_tx_intr, 0, in pasemi_mac_open()
1170 mac->tx_irq_name, mac->tx); in pasemi_mac_open()
1172 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1173 mac->tx->chan.irq, ret); in pasemi_mac_open()
1177 snprintf(mac->rx_irq_name, sizeof(mac->rx_irq_name), "%s rx", in pasemi_mac_open()
1180 ret = request_irq(mac->rx->chan.irq, pasemi_mac_rx_intr, 0, in pasemi_mac_open()
1181 mac->rx_irq_name, mac->rx); in pasemi_mac_open()
1183 dev_err(&mac->pdev->dev, "request_irq of irq %d failed: %d\n", in pasemi_mac_open()
1184 mac->rx->chan.irq, ret); in pasemi_mac_open()
1191 timer_setup(&mac->tx->clean_timer, pasemi_mac_tx_timer, 0); in pasemi_mac_open()
1192 mod_timer(&mac->tx->clean_timer, jiffies + HZ); in pasemi_mac_open()
1197 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_open()
1199 napi_disable(&mac->napi); in pasemi_mac_open()
1202 if (mac->tx) in pasemi_mac_open()
1203 pasemi_mac_free_tx_resources(mac); in pasemi_mac_open()
1204 pasemi_mac_free_rx_resources(mac); in pasemi_mac_open()
1212 static void pasemi_mac_pause_txchan(struct pasemi_mac *mac) in pasemi_mac_pause_txchan() argument
1215 int txch = tx_ring(mac)->chan.chno; in pasemi_mac_pause_txchan()
1228 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_txchan()
1234 static void pasemi_mac_pause_rxchan(struct pasemi_mac *mac) in pasemi_mac_pause_rxchan() argument
1237 int rxch = rx_ring(mac)->chan.chno; in pasemi_mac_pause_rxchan()
1249 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxchan()
1254 static void pasemi_mac_pause_rxint(struct pasemi_mac *mac) in pasemi_mac_pause_rxint() argument
1258 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_pause_rxint()
1261 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_pause_rxint()
1268 dev_err(&mac->dma_pdev->dev, in pasemi_mac_pause_rxint()
1270 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), 0); in pasemi_mac_pause_rxint()
1275 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_close() local
1279 rxch = rx_ring(mac)->chan.chno; in pasemi_mac_close()
1280 txch = tx_ring(mac)->chan.chno; in pasemi_mac_close()
1287 del_timer_sync(&mac->tx->clean_timer); in pasemi_mac_close()
1290 napi_disable(&mac->napi); in pasemi_mac_close()
1292 sta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_close()
1311 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_close()
1312 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_close()
1314 pasemi_mac_pause_txchan(mac); in pasemi_mac_close()
1315 pasemi_mac_pause_rxint(mac); in pasemi_mac_close()
1316 pasemi_mac_pause_rxchan(mac); in pasemi_mac_close()
1317 pasemi_mac_intf_disable(mac); in pasemi_mac_close()
1319 free_irq(mac->tx->chan.irq, mac->tx); in pasemi_mac_close()
1320 free_irq(mac->rx->chan.irq, mac->rx); in pasemi_mac_close()
1322 for (i = 0; i < mac->num_cs; i++) { in pasemi_mac_close()
1323 pasemi_mac_free_csring(mac->cs[i]); in pasemi_mac_close()
1324 mac->cs[i] = NULL; in pasemi_mac_close()
1327 mac->num_cs = 0; in pasemi_mac_close()
1330 pasemi_mac_free_rx_resources(mac); in pasemi_mac_close()
1331 pasemi_mac_free_tx_resources(mac); in pasemi_mac_close()
1397 /* Event handshaking with MAC TX */ in pasemi_mac_queue_csdesc()
1424 struct pasemi_mac * const mac = netdev_priv(dev); in pasemi_mac_start_tx() local
1425 struct pasemi_mac_txring * const txring = tx_ring(mac); in pasemi_mac_start_tx()
1443 map[0] = pci_map_single(mac->dma_pdev, skb->data, skb_headlen(skb), in pasemi_mac_start_tx()
1446 if (pci_dma_mapping_error(mac->dma_pdev, map[0])) in pasemi_mac_start_tx()
1452 map[i + 1] = skb_frag_dma_map(&mac->dma_pdev->dev, frag, 0, in pasemi_mac_start_tx()
1455 if (dma_mapping_error(&mac->dma_pdev->dev, map[i + 1])) { in pasemi_mac_start_tx()
1493 if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) { in pasemi_mac_start_tx()
1494 csring = mac->cs[mac->last_cs]; in pasemi_mac_start_tx()
1495 mac->last_cs = (mac->last_cs + 1) % mac->num_cs; in pasemi_mac_start_tx()
1533 pci_unmap_single(mac->dma_pdev, map[nfrags], map_size[nfrags], in pasemi_mac_start_tx()
1541 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_set_rx_mode() local
1544 flags = read_mac_reg(mac, PAS_MAC_CFG_PCFG); in pasemi_mac_set_rx_mode()
1552 write_mac_reg(mac, PAS_MAC_CFG_PCFG, flags); in pasemi_mac_set_rx_mode()
1558 struct pasemi_mac *mac = container_of(napi, struct pasemi_mac, napi); in pasemi_mac_poll() local
1561 pasemi_mac_clean_tx(tx_ring(mac)); in pasemi_mac_poll()
1562 pkts = pasemi_mac_clean_rx(rx_ring(mac), budget); in pasemi_mac_poll()
1567 pasemi_mac_restart_rx_intr(mac); in pasemi_mac_poll()
1568 pasemi_mac_restart_tx_intr(mac); in pasemi_mac_poll()
1581 const struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_netpoll() local
1583 disable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1584 pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx); in pasemi_mac_netpoll()
1585 enable_irq(mac->tx->chan.irq); in pasemi_mac_netpoll()
1587 disable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1588 pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx); in pasemi_mac_netpoll()
1589 enable_irq(mac->rx->chan.irq); in pasemi_mac_netpoll()
1595 struct pasemi_mac *mac = netdev_priv(dev); in pasemi_mac_change_mtu() local
1610 napi_disable(&mac->napi); in pasemi_mac_change_mtu()
1612 pasemi_mac_intf_disable(mac); in pasemi_mac_change_mtu()
1614 rcmdsta = read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if)); in pasemi_mac_change_mtu()
1615 pasemi_mac_pause_rxint(mac); in pasemi_mac_change_mtu()
1616 pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE); in pasemi_mac_change_mtu()
1617 pasemi_mac_free_rx_buffers(mac); in pasemi_mac_change_mtu()
1622 if (new_mtu > PE_DEF_MTU && !mac->num_cs) { in pasemi_mac_change_mtu()
1623 pasemi_mac_setup_csrings(mac); in pasemi_mac_change_mtu()
1624 if (!mac->num_cs) { in pasemi_mac_change_mtu()
1633 reg = read_mac_reg(mac, PAS_MAC_CFG_MACCFG); in pasemi_mac_change_mtu()
1636 write_mac_reg(mac, PAS_MAC_CFG_MACCFG, reg); in pasemi_mac_change_mtu()
1640 mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_change_mtu()
1644 write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if), in pasemi_mac_change_mtu()
1647 rx_ring(mac)->next_to_fill = 0; in pasemi_mac_change_mtu()
1650 napi_enable(&mac->napi); in pasemi_mac_change_mtu()
1652 pasemi_mac_intf_enable(mac); in pasemi_mac_change_mtu()
1675 struct pasemi_mac *mac; in pasemi_mac_probe() local
1691 mac = netdev_priv(dev); in pasemi_mac_probe()
1693 mac->pdev = pdev; in pasemi_mac_probe()
1694 mac->netdev = dev; in pasemi_mac_probe()
1696 netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64); in pasemi_mac_probe()
1701 mac->dma_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa007, NULL); in pasemi_mac_probe()
1702 if (!mac->dma_pdev) { in pasemi_mac_probe()
1703 dev_err(&mac->pdev->dev, "Can't find DMA Controller\n"); in pasemi_mac_probe()
1707 dma_set_mask(&mac->dma_pdev->dev, DMA_BIT_MASK(64)); in pasemi_mac_probe()
1709 mac->iob_pdev = pci_get_device(PCI_VENDOR_ID_PASEMI, 0xa001, NULL); in pasemi_mac_probe()
1710 if (!mac->iob_pdev) { in pasemi_mac_probe()
1711 dev_err(&mac->pdev->dev, "Can't find I/O Bridge\n"); in pasemi_mac_probe()
1716 /* get mac addr from device tree */ in pasemi_mac_probe()
1717 if (pasemi_get_mac_addr(mac) || !is_valid_ether_addr(mac->mac_addr)) { in pasemi_mac_probe()
1721 memcpy(dev->dev_addr, mac->mac_addr, sizeof(mac->mac_addr)); in pasemi_mac_probe()
1723 ret = mac_to_intf(mac); in pasemi_mac_probe()
1725 dev_err(&mac->pdev->dev, "Can't map DMA interface\n"); in pasemi_mac_probe()
1729 mac->dma_if = ret; in pasemi_mac_probe()
1733 mac->type = MAC_TYPE_GMAC; in pasemi_mac_probe()
1736 mac->type = MAC_TYPE_XAUI; in pasemi_mac_probe()
1751 mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128; in pasemi_mac_probe()
1758 mac->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE); in pasemi_mac_probe()
1761 mac->msg_enable = (NETIF_MSG_IFUP << 1 ) - 1; in pasemi_mac_probe()
1766 dev_err(&mac->pdev->dev, "register_netdev failed with error %d\n", in pasemi_mac_probe()
1769 } else if (netif_msg_probe(mac)) { in pasemi_mac_probe()
1771 dev->name, mac->type == MAC_TYPE_GMAC ? "GMAC" : "XAUI", in pasemi_mac_probe()
1772 mac->dma_if, dev->dev_addr); in pasemi_mac_probe()
1778 pci_dev_put(mac->iob_pdev); in pasemi_mac_probe()
1779 pci_dev_put(mac->dma_pdev); in pasemi_mac_probe()
1791 struct pasemi_mac *mac; in pasemi_mac_remove() local
1796 mac = netdev_priv(netdev); in pasemi_mac_remove()
1801 pci_dev_put(mac->dma_pdev); in pasemi_mac_remove()
1802 pci_dev_put(mac->iob_pdev); in pasemi_mac_remove()
1804 pasemi_dma_free_chan(&mac->tx->chan); in pasemi_mac_remove()
1805 pasemi_dma_free_chan(&mac->rx->chan); in pasemi_mac_remove()