Lines Matching refs:pdata
71 struct xgene_enet_pdata *pdata; in xgene_enet_refill_pagepool() local
84 pdata = netdev_priv(ndev); in xgene_enet_refill_pagepool()
112 pdata->ring_ops->wr_cmd(buf_pool, nbuf); in xgene_enet_refill_pagepool()
123 struct xgene_enet_pdata *pdata; in xgene_enet_refill_bufpool() local
134 pdata = netdev_priv(ndev); in xgene_enet_refill_bufpool()
161 pdata->ring_ops->wr_cmd(buf_pool, nbuf); in xgene_enet_refill_bufpool()
228 struct xgene_enet_pdata *pdata = netdev_priv(cp_ring->ndev); in xgene_enet_tx_completion() local
255 spin_lock(&pdata->mss_lock); in xgene_enet_tx_completion()
256 pdata->mss_refcnt[mss_index]--; in xgene_enet_tx_completion()
257 spin_unlock(&pdata->mss_lock); in xgene_enet_tx_completion()
278 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_setup_mss() local
282 spin_lock(&pdata->mss_lock); in xgene_enet_setup_mss()
286 if (pdata->mss[i] == mss) { in xgene_enet_setup_mss()
287 pdata->mss_refcnt[i]++; in xgene_enet_setup_mss()
294 if (!pdata->mss_refcnt[i]) { in xgene_enet_setup_mss()
295 pdata->mss_refcnt[i]++; in xgene_enet_setup_mss()
296 pdata->mac_ops->set_mss(pdata, mss, i); in xgene_enet_setup_mss()
297 pdata->mss[i] = mss; in xgene_enet_setup_mss()
302 spin_unlock(&pdata->mss_lock); in xgene_enet_setup_mss()
410 struct xgene_enet_pdata *pdata = netdev_priv(tx_ring->ndev); in xgene_enet_setup_tx_desc() local
543 pdata->tx_level[tx_ring->cp_ring->index] += count; in xgene_enet_setup_tx_desc()
552 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_start_xmit() local
555 u32 tx_level = pdata->tx_level[index]; in xgene_enet_start_xmit()
558 tx_ring = pdata->tx_ring[index]; in xgene_enet_start_xmit()
559 if (tx_level < pdata->txc_level[index]) in xgene_enet_start_xmit()
560 tx_level += ((typeof(pdata->tx_level[index]))~0U); in xgene_enet_start_xmit()
562 if ((tx_level - pdata->txc_level[index]) > pdata->tx_qcnt_hi) { in xgene_enet_start_xmit()
584 pdata->ring_ops->wr_cmd(tx_ring, count); in xgene_enet_start_xmit()
674 struct xgene_enet_pdata *pdata; in xgene_enet_rx_frame() local
687 pdata = netdev_priv(ndev); in xgene_enet_rx_frame()
708 pdata->false_rflr++; in xgene_enet_rx_frame()
710 pdata->vlan_rjbr++; in xgene_enet_rx_frame()
785 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_process_ring() local
829 pdata->txc_level[ring->index] += desc_count; in xgene_enet_process_ring()
836 pdata->ring_ops->wr_cmd(ring, -count); in xgene_enet_process_ring()
864 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_timeout() local
868 pdata->mac_ops->reset(pdata); in xgene_enet_timeout()
870 for (i = 0; i < pdata->txq_cnt; i++) { in xgene_enet_timeout()
879 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_set_irq_name() local
883 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_set_irq_name()
884 ring = pdata->rx_ring[i]; in xgene_enet_set_irq_name()
885 if (!pdata->cq_cnt) { in xgene_enet_set_irq_name()
894 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_set_irq_name()
895 ring = pdata->tx_ring[i]->cp_ring; in xgene_enet_set_irq_name()
903 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_register_irq() local
909 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_register_irq()
910 ring = pdata->rx_ring[i]; in xgene_enet_register_irq()
920 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_register_irq()
921 ring = pdata->tx_ring[i]->cp_ring; in xgene_enet_register_irq()
936 struct xgene_enet_pdata *pdata; in xgene_enet_free_irq() local
941 pdata = netdev_priv(ndev); in xgene_enet_free_irq()
944 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_free_irq()
945 ring = pdata->rx_ring[i]; in xgene_enet_free_irq()
950 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_free_irq()
951 ring = pdata->tx_ring[i]->cp_ring; in xgene_enet_free_irq()
957 static void xgene_enet_napi_enable(struct xgene_enet_pdata *pdata) in xgene_enet_napi_enable() argument
962 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_napi_enable()
963 napi = &pdata->rx_ring[i]->napi; in xgene_enet_napi_enable()
967 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_napi_enable()
968 napi = &pdata->tx_ring[i]->cp_ring->napi; in xgene_enet_napi_enable()
973 static void xgene_enet_napi_disable(struct xgene_enet_pdata *pdata) in xgene_enet_napi_disable() argument
978 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_napi_disable()
979 napi = &pdata->rx_ring[i]->napi; in xgene_enet_napi_disable()
983 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_napi_disable()
984 napi = &pdata->tx_ring[i]->cp_ring->napi; in xgene_enet_napi_disable()
991 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_open() local
992 const struct xgene_mac_ops *mac_ops = pdata->mac_ops; in xgene_enet_open()
995 ret = netif_set_real_num_tx_queues(ndev, pdata->txq_cnt); in xgene_enet_open()
999 ret = netif_set_real_num_rx_queues(ndev, pdata->rxq_cnt); in xgene_enet_open()
1003 xgene_enet_napi_enable(pdata); in xgene_enet_open()
1011 schedule_delayed_work(&pdata->link_work, PHY_POLL_LINK_OFF); in xgene_enet_open()
1015 mac_ops->tx_enable(pdata); in xgene_enet_open()
1016 mac_ops->rx_enable(pdata); in xgene_enet_open()
1024 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_close() local
1025 const struct xgene_mac_ops *mac_ops = pdata->mac_ops; in xgene_enet_close()
1029 mac_ops->tx_disable(pdata); in xgene_enet_close()
1030 mac_ops->rx_disable(pdata); in xgene_enet_close()
1035 cancel_delayed_work_sync(&pdata->link_work); in xgene_enet_close()
1038 xgene_enet_napi_disable(pdata); in xgene_enet_close()
1039 for (i = 0; i < pdata->rxq_cnt; i++) in xgene_enet_close()
1040 xgene_enet_process_ring(pdata->rx_ring[i], -1); in xgene_enet_close()
1046 struct xgene_enet_pdata *pdata; in xgene_enet_delete_ring() local
1049 pdata = netdev_priv(ring->ndev); in xgene_enet_delete_ring()
1052 pdata->ring_ops->clear(ring); in xgene_enet_delete_ring()
1056 static void xgene_enet_delete_desc_rings(struct xgene_enet_pdata *pdata) in xgene_enet_delete_desc_rings() argument
1062 for (i = 0; i < pdata->txq_cnt; i++) { in xgene_enet_delete_desc_rings()
1063 ring = pdata->tx_ring[i]; in xgene_enet_delete_desc_rings()
1066 pdata->port_ops->clear(pdata, ring); in xgene_enet_delete_desc_rings()
1067 if (pdata->cq_cnt) in xgene_enet_delete_desc_rings()
1069 pdata->tx_ring[i] = NULL; in xgene_enet_delete_desc_rings()
1074 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_delete_desc_rings()
1075 ring = pdata->rx_ring[i]; in xgene_enet_delete_desc_rings()
1081 pdata->port_ops->clear(pdata, page_pool); in xgene_enet_delete_desc_rings()
1087 pdata->port_ops->clear(pdata, buf_pool); in xgene_enet_delete_desc_rings()
1090 pdata->rx_ring[i] = NULL; in xgene_enet_delete_desc_rings()
1127 struct xgene_enet_pdata *pdata; in xgene_enet_free_desc_ring() local
1134 pdata = netdev_priv(ring->ndev); in xgene_enet_free_desc_ring()
1137 pdata->ring_ops->clear(ring); in xgene_enet_free_desc_ring()
1143 static void xgene_enet_free_desc_rings(struct xgene_enet_pdata *pdata) in xgene_enet_free_desc_rings() argument
1146 struct device *dev = &pdata->pdev->dev; in xgene_enet_free_desc_rings()
1151 for (i = 0; i < pdata->txq_cnt; i++) { in xgene_enet_free_desc_rings()
1152 ring = pdata->tx_ring[i]; in xgene_enet_free_desc_rings()
1157 if (ring->cp_ring && pdata->cq_cnt) in xgene_enet_free_desc_rings()
1165 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_free_desc_rings()
1166 ring = pdata->rx_ring[i]; in xgene_enet_free_desc_rings()
1191 static bool is_irq_mbox_required(struct xgene_enet_pdata *pdata, in is_irq_mbox_required() argument
1194 if ((pdata->enet_id == XGENE_ENET2) && in is_irq_mbox_required()
1202 static void __iomem *xgene_enet_ring_cmd_base(struct xgene_enet_pdata *pdata, in xgene_enet_ring_cmd_base() argument
1205 u8 num_ring_id_shift = pdata->ring_ops->num_ring_id_shift; in xgene_enet_ring_cmd_base()
1207 return pdata->ring_cmd_addr + (ring->num << num_ring_id_shift); in xgene_enet_ring_cmd_base()
1214 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_create_desc_ring() local
1242 if (is_irq_mbox_required(pdata, ring)) { in xgene_enet_create_desc_ring()
1255 ring->cmd_base = xgene_enet_ring_cmd_base(pdata, ring); in xgene_enet_create_desc_ring()
1257 ring = pdata->ring_ops->setup(ring); in xgene_enet_create_desc_ring()
1290 static u8 xgene_start_cpu_bufnum(struct xgene_enet_pdata *pdata) in xgene_start_cpu_bufnum() argument
1292 struct device *dev = &pdata->pdev->dev; in xgene_start_cpu_bufnum()
1298 return (!ret) ? cpu_bufnum : pdata->cpu_bufnum; in xgene_start_cpu_bufnum()
1304 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_create_desc_rings() local
1308 u8 eth_bufnum = pdata->eth_bufnum; in xgene_enet_create_desc_rings()
1309 u8 bp_bufnum = pdata->bp_bufnum; in xgene_enet_create_desc_rings()
1310 u16 ring_num = pdata->ring_num; in xgene_enet_create_desc_rings()
1318 cpu_bufnum = xgene_start_cpu_bufnum(pdata); in xgene_enet_create_desc_rings()
1320 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_create_desc_rings()
1322 owner = xgene_derive_ring_owner(pdata); in xgene_enet_create_desc_rings()
1333 owner = xgene_derive_ring_owner(pdata); in xgene_enet_create_desc_rings()
1345 rx_ring->irq = pdata->irqs[i]; in xgene_enet_create_desc_rings()
1356 pdata->rx_ring[i] = rx_ring; in xgene_enet_create_desc_rings()
1358 if ((pdata->enet_id == XGENE_ENET1 && pdata->rxq_cnt > 4) || in xgene_enet_create_desc_rings()
1359 (pdata->enet_id == XGENE_ENET2 && pdata->rxq_cnt > 16)) { in xgene_enet_create_desc_rings()
1364 owner = xgene_derive_ring_owner(pdata); in xgene_enet_create_desc_rings()
1395 for (i = 0; i < pdata->txq_cnt; i++) { in xgene_enet_create_desc_rings()
1397 owner = xgene_derive_ring_owner(pdata); in xgene_enet_create_desc_rings()
1416 pdata->tx_ring[i] = tx_ring; in xgene_enet_create_desc_rings()
1418 if (!pdata->cq_cnt) { in xgene_enet_create_desc_rings()
1419 cp_ring = pdata->rx_ring[i]; in xgene_enet_create_desc_rings()
1432 cp_ring->irq = pdata->irqs[pdata->rxq_cnt + i]; in xgene_enet_create_desc_rings()
1457 if (pdata->ring_ops->coalesce) in xgene_enet_create_desc_rings()
1458 pdata->ring_ops->coalesce(pdata->tx_ring[0]); in xgene_enet_create_desc_rings()
1459 pdata->tx_qcnt_hi = pdata->tx_ring[0]->slots - 128; in xgene_enet_create_desc_rings()
1464 xgene_enet_free_desc_rings(pdata); in xgene_enet_create_desc_rings()
1472 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_get_stats64() local
1476 for (i = 0; i < pdata->txq_cnt; i++) { in xgene_enet_get_stats64()
1477 ring = pdata->tx_ring[i]; in xgene_enet_get_stats64()
1486 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_get_stats64()
1487 ring = pdata->rx_ring[i]; in xgene_enet_get_stats64()
1507 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_set_mac_address() local
1513 pdata->mac_ops->set_mac_addr(pdata); in xgene_enet_set_mac_address()
1520 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_change_mtu() local
1530 pdata->mac_ops->set_framesize(pdata, frame_size); in xgene_change_mtu()
1548 struct xgene_enet_pdata *pdata) in xgene_get_port_id_acpi() argument
1555 pdata->port_id = 0; in xgene_get_port_id_acpi()
1557 pdata->port_id = temp; in xgene_get_port_id_acpi()
1564 static void xgene_get_port_id_dt(struct device *dev, struct xgene_enet_pdata *pdata) in xgene_get_port_id_dt() argument
1570 pdata->port_id = id & BIT(0); in xgene_get_port_id_dt()
1575 static int xgene_get_tx_delay(struct xgene_enet_pdata *pdata) in xgene_get_tx_delay() argument
1577 struct device *dev = &pdata->pdev->dev; in xgene_get_tx_delay()
1582 pdata->tx_delay = 4; in xgene_get_tx_delay()
1591 pdata->tx_delay = delay; in xgene_get_tx_delay()
1596 static int xgene_get_rx_delay(struct xgene_enet_pdata *pdata) in xgene_get_rx_delay() argument
1598 struct device *dev = &pdata->pdev->dev; in xgene_get_rx_delay()
1603 pdata->rx_delay = 2; in xgene_get_rx_delay()
1612 pdata->rx_delay = delay; in xgene_get_rx_delay()
1617 static int xgene_enet_get_irqs(struct xgene_enet_pdata *pdata) in xgene_enet_get_irqs() argument
1619 struct platform_device *pdev = pdata->pdev; in xgene_enet_get_irqs()
1622 if (phy_interface_mode_is_rgmii(pdata->phy_mode)) in xgene_enet_get_irqs()
1624 else if (pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) in xgene_enet_get_irqs()
1632 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_get_irqs()
1634 pdata->rxq_cnt = max_irqs / 2; in xgene_enet_get_irqs()
1635 pdata->txq_cnt = max_irqs / 2; in xgene_enet_get_irqs()
1636 pdata->cq_cnt = max_irqs / 2; in xgene_enet_get_irqs()
1641 pdata->irqs[i] = ret; in xgene_enet_get_irqs()
1647 static void xgene_enet_check_phy_handle(struct xgene_enet_pdata *pdata) in xgene_enet_check_phy_handle() argument
1651 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) in xgene_enet_check_phy_handle()
1657 ret = xgene_enet_phy_connect(pdata->ndev); in xgene_enet_check_phy_handle()
1659 pdata->mdio_driver = true; in xgene_enet_check_phy_handle()
1662 static void xgene_enet_gpiod_get(struct xgene_enet_pdata *pdata) in xgene_enet_gpiod_get() argument
1664 struct device *dev = &pdata->pdev->dev; in xgene_enet_gpiod_get()
1666 pdata->sfp_gpio_en = false; in xgene_enet_gpiod_get()
1667 if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII || in xgene_enet_gpiod_get()
1672 pdata->sfp_gpio_en = true; in xgene_enet_gpiod_get()
1673 pdata->sfp_rdy = gpiod_get(dev, "rxlos", GPIOD_IN); in xgene_enet_gpiod_get()
1674 if (IS_ERR(pdata->sfp_rdy)) in xgene_enet_gpiod_get()
1675 pdata->sfp_rdy = gpiod_get(dev, "sfp", GPIOD_IN); in xgene_enet_gpiod_get()
1678 static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) in xgene_enet_get_resources() argument
1688 pdev = pdata->pdev; in xgene_enet_get_resources()
1690 ndev = pdata->ndev; in xgene_enet_get_resources()
1697 pdata->base_addr = devm_ioremap(dev, res->start, resource_size(res)); in xgene_enet_get_resources()
1698 if (!pdata->base_addr) { in xgene_enet_get_resources()
1708 pdata->ring_csr_addr = devm_ioremap(dev, res->start, in xgene_enet_get_resources()
1710 if (!pdata->ring_csr_addr) { in xgene_enet_get_resources()
1720 pdata->ring_cmd_addr = devm_ioremap(dev, res->start, in xgene_enet_get_resources()
1722 if (!pdata->ring_cmd_addr) { in xgene_enet_get_resources()
1728 xgene_get_port_id_dt(dev, pdata); in xgene_enet_get_resources()
1731 xgene_get_port_id_acpi(dev, pdata); in xgene_enet_get_resources()
1739 pdata->phy_mode = device_get_phy_mode(dev); in xgene_enet_get_resources()
1740 if (pdata->phy_mode < 0) { in xgene_enet_get_resources()
1742 return pdata->phy_mode; in xgene_enet_get_resources()
1744 if (!phy_interface_mode_is_rgmii(pdata->phy_mode) && in xgene_enet_get_resources()
1745 pdata->phy_mode != PHY_INTERFACE_MODE_SGMII && in xgene_enet_get_resources()
1746 pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) { in xgene_enet_get_resources()
1751 ret = xgene_get_tx_delay(pdata); in xgene_enet_get_resources()
1755 ret = xgene_get_rx_delay(pdata); in xgene_enet_get_resources()
1759 ret = xgene_enet_get_irqs(pdata); in xgene_enet_get_resources()
1763 xgene_enet_gpiod_get(pdata); in xgene_enet_get_resources()
1765 pdata->clk = devm_clk_get(&pdev->dev, NULL); in xgene_enet_get_resources()
1766 if (IS_ERR(pdata->clk)) { in xgene_enet_get_resources()
1767 if (pdata->phy_mode != PHY_INTERFACE_MODE_SGMII) { in xgene_enet_get_resources()
1772 if (PTR_ERR(pdata->clk) != -ENOENT || dev->of_node) in xgene_enet_get_resources()
1773 return PTR_ERR(pdata->clk); in xgene_enet_get_resources()
1779 if (pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) in xgene_enet_get_resources()
1780 base_addr = pdata->base_addr - (pdata->port_id * MAC_OFFSET); in xgene_enet_get_resources()
1782 base_addr = pdata->base_addr; in xgene_enet_get_resources()
1783 pdata->eth_csr_addr = base_addr + BLOCK_ETH_CSR_OFFSET; in xgene_enet_get_resources()
1784 pdata->cle.base = base_addr + BLOCK_ETH_CLE_CSR_OFFSET; in xgene_enet_get_resources()
1785 pdata->eth_ring_if_addr = base_addr + BLOCK_ETH_RING_IF_OFFSET; in xgene_enet_get_resources()
1786 pdata->eth_diag_csr_addr = base_addr + BLOCK_ETH_DIAG_CSR_OFFSET; in xgene_enet_get_resources()
1787 if (phy_interface_mode_is_rgmii(pdata->phy_mode) || in xgene_enet_get_resources()
1788 pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) { in xgene_enet_get_resources()
1789 pdata->mcx_mac_addr = pdata->base_addr + BLOCK_ETH_MAC_OFFSET; in xgene_enet_get_resources()
1790 pdata->mcx_stats_addr = in xgene_enet_get_resources()
1791 pdata->base_addr + BLOCK_ETH_STATS_OFFSET; in xgene_enet_get_resources()
1792 offset = (pdata->enet_id == XGENE_ENET1) ? in xgene_enet_get_resources()
1795 pdata->mcx_mac_csr_addr = base_addr + offset; in xgene_enet_get_resources()
1797 pdata->mcx_mac_addr = base_addr + BLOCK_AXG_MAC_OFFSET; in xgene_enet_get_resources()
1798 pdata->mcx_stats_addr = base_addr + BLOCK_AXG_STATS_OFFSET; in xgene_enet_get_resources()
1799 pdata->mcx_mac_csr_addr = base_addr + BLOCK_AXG_MAC_CSR_OFFSET; in xgene_enet_get_resources()
1800 pdata->pcs_addr = base_addr + BLOCK_PCS_OFFSET; in xgene_enet_get_resources()
1802 pdata->rx_buff_cnt = NUM_PKT_BUF; in xgene_enet_get_resources()
1807 static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata) in xgene_enet_init_hw() argument
1809 struct xgene_enet_cle *enet_cle = &pdata->cle; in xgene_enet_init_hw()
1811 struct net_device *ndev = pdata->ndev; in xgene_enet_init_hw()
1817 ret = pdata->port_ops->reset(pdata); in xgene_enet_init_hw()
1828 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_init_hw()
1829 buf_pool = pdata->rx_ring[i]->buf_pool; in xgene_enet_init_hw()
1831 page_pool = pdata->rx_ring[i]->page_pool; in xgene_enet_init_hw()
1834 count = pdata->rx_buff_cnt; in xgene_enet_init_hw()
1845 dst_ring_num = xgene_enet_dst_ring_num(pdata->rx_ring[0]); in xgene_enet_init_hw()
1846 buf_pool = pdata->rx_ring[0]->buf_pool; in xgene_enet_init_hw()
1847 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_init_hw()
1856 ret = pdata->cle_ops->cle_init(pdata); in xgene_enet_init_hw()
1863 dst_ring_num = xgene_enet_dst_ring_num(pdata->rx_ring[0]); in xgene_enet_init_hw()
1864 buf_pool = pdata->rx_ring[0]->buf_pool; in xgene_enet_init_hw()
1865 page_pool = pdata->rx_ring[0]->page_pool; in xgene_enet_init_hw()
1867 pdata->port_ops->cle_bypass(pdata, dst_ring_num, in xgene_enet_init_hw()
1872 pdata->phy_speed = SPEED_UNKNOWN; in xgene_enet_init_hw()
1873 pdata->mac_ops->init(pdata); in xgene_enet_init_hw()
1878 xgene_enet_delete_desc_rings(pdata); in xgene_enet_init_hw()
1882 static void xgene_enet_setup_ops(struct xgene_enet_pdata *pdata) in xgene_enet_setup_ops() argument
1884 switch (pdata->phy_mode) { in xgene_enet_setup_ops()
1889 pdata->mac_ops = &xgene_gmac_ops; in xgene_enet_setup_ops()
1890 pdata->port_ops = &xgene_gport_ops; in xgene_enet_setup_ops()
1891 pdata->rm = RM3; in xgene_enet_setup_ops()
1892 pdata->rxq_cnt = 1; in xgene_enet_setup_ops()
1893 pdata->txq_cnt = 1; in xgene_enet_setup_ops()
1894 pdata->cq_cnt = 0; in xgene_enet_setup_ops()
1897 pdata->mac_ops = &xgene_sgmac_ops; in xgene_enet_setup_ops()
1898 pdata->port_ops = &xgene_sgport_ops; in xgene_enet_setup_ops()
1899 pdata->rm = RM1; in xgene_enet_setup_ops()
1900 pdata->rxq_cnt = 1; in xgene_enet_setup_ops()
1901 pdata->txq_cnt = 1; in xgene_enet_setup_ops()
1902 pdata->cq_cnt = 1; in xgene_enet_setup_ops()
1905 pdata->mac_ops = &xgene_xgmac_ops; in xgene_enet_setup_ops()
1906 pdata->port_ops = &xgene_xgport_ops; in xgene_enet_setup_ops()
1907 pdata->cle_ops = &xgene_cle3in_ops; in xgene_enet_setup_ops()
1908 pdata->rm = RM0; in xgene_enet_setup_ops()
1909 if (!pdata->rxq_cnt) { in xgene_enet_setup_ops()
1910 pdata->rxq_cnt = XGENE_NUM_RX_RING; in xgene_enet_setup_ops()
1911 pdata->txq_cnt = XGENE_NUM_TX_RING; in xgene_enet_setup_ops()
1912 pdata->cq_cnt = XGENE_NUM_TXC_RING; in xgene_enet_setup_ops()
1917 if (pdata->enet_id == XGENE_ENET1) { in xgene_enet_setup_ops()
1918 switch (pdata->port_id) { in xgene_enet_setup_ops()
1920 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_setup_ops()
1921 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_0; in xgene_enet_setup_ops()
1922 pdata->eth_bufnum = X2_START_ETH_BUFNUM_0; in xgene_enet_setup_ops()
1923 pdata->bp_bufnum = X2_START_BP_BUFNUM_0; in xgene_enet_setup_ops()
1924 pdata->ring_num = START_RING_NUM_0; in xgene_enet_setup_ops()
1926 pdata->cpu_bufnum = START_CPU_BUFNUM_0; in xgene_enet_setup_ops()
1927 pdata->eth_bufnum = START_ETH_BUFNUM_0; in xgene_enet_setup_ops()
1928 pdata->bp_bufnum = START_BP_BUFNUM_0; in xgene_enet_setup_ops()
1929 pdata->ring_num = START_RING_NUM_0; in xgene_enet_setup_ops()
1933 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_setup_ops()
1934 pdata->cpu_bufnum = XG_START_CPU_BUFNUM_1; in xgene_enet_setup_ops()
1935 pdata->eth_bufnum = XG_START_ETH_BUFNUM_1; in xgene_enet_setup_ops()
1936 pdata->bp_bufnum = XG_START_BP_BUFNUM_1; in xgene_enet_setup_ops()
1937 pdata->ring_num = XG_START_RING_NUM_1; in xgene_enet_setup_ops()
1939 pdata->cpu_bufnum = START_CPU_BUFNUM_1; in xgene_enet_setup_ops()
1940 pdata->eth_bufnum = START_ETH_BUFNUM_1; in xgene_enet_setup_ops()
1941 pdata->bp_bufnum = START_BP_BUFNUM_1; in xgene_enet_setup_ops()
1942 pdata->ring_num = START_RING_NUM_1; in xgene_enet_setup_ops()
1948 pdata->ring_ops = &xgene_ring1_ops; in xgene_enet_setup_ops()
1950 switch (pdata->port_id) { in xgene_enet_setup_ops()
1952 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_0; in xgene_enet_setup_ops()
1953 pdata->eth_bufnum = X2_START_ETH_BUFNUM_0; in xgene_enet_setup_ops()
1954 pdata->bp_bufnum = X2_START_BP_BUFNUM_0; in xgene_enet_setup_ops()
1955 pdata->ring_num = X2_START_RING_NUM_0; in xgene_enet_setup_ops()
1958 pdata->cpu_bufnum = X2_START_CPU_BUFNUM_1; in xgene_enet_setup_ops()
1959 pdata->eth_bufnum = X2_START_ETH_BUFNUM_1; in xgene_enet_setup_ops()
1960 pdata->bp_bufnum = X2_START_BP_BUFNUM_1; in xgene_enet_setup_ops()
1961 pdata->ring_num = X2_START_RING_NUM_1; in xgene_enet_setup_ops()
1966 pdata->rm = RM0; in xgene_enet_setup_ops()
1967 pdata->ring_ops = &xgene_ring2_ops; in xgene_enet_setup_ops()
1971 static void xgene_enet_napi_add(struct xgene_enet_pdata *pdata) in xgene_enet_napi_add() argument
1976 for (i = 0; i < pdata->rxq_cnt; i++) { in xgene_enet_napi_add()
1977 napi = &pdata->rx_ring[i]->napi; in xgene_enet_napi_add()
1978 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, in xgene_enet_napi_add()
1982 for (i = 0; i < pdata->cq_cnt; i++) { in xgene_enet_napi_add()
1983 napi = &pdata->tx_ring[i]->cp_ring->napi; in xgene_enet_napi_add()
1984 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, in xgene_enet_napi_add()
2016 struct xgene_enet_pdata *pdata; in xgene_enet_probe() local
2027 pdata = netdev_priv(ndev); in xgene_enet_probe()
2029 pdata->pdev = pdev; in xgene_enet_probe()
2030 pdata->ndev = ndev; in xgene_enet_probe()
2032 platform_set_drvdata(pdev, pdata); in xgene_enet_probe()
2042 pdata->enet_id = (enum xgene_enet_id)of_id->data; in xgene_enet_probe()
2050 pdata->enet_id = (enum xgene_enet_id) acpi_id->driver_data; in xgene_enet_probe()
2053 if (!pdata->enet_id) { in xgene_enet_probe()
2058 ret = xgene_enet_get_resources(pdata); in xgene_enet_probe()
2062 xgene_enet_setup_ops(pdata); in xgene_enet_probe()
2063 spin_lock_init(&pdata->mac_lock); in xgene_enet_probe()
2065 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_probe()
2067 spin_lock_init(&pdata->mss_lock); in xgene_enet_probe()
2077 xgene_enet_check_phy_handle(pdata); in xgene_enet_probe()
2079 ret = xgene_enet_init_hw(pdata); in xgene_enet_probe()
2083 link_state = pdata->mac_ops->link_state; in xgene_enet_probe()
2084 if (pdata->phy_mode == PHY_INTERFACE_MODE_XGMII) { in xgene_enet_probe()
2085 INIT_DELAYED_WORK(&pdata->link_work, link_state); in xgene_enet_probe()
2086 } else if (!pdata->mdio_driver) { in xgene_enet_probe()
2087 if (phy_interface_mode_is_rgmii(pdata->phy_mode)) in xgene_enet_probe()
2088 ret = xgene_enet_mdio_config(pdata); in xgene_enet_probe()
2090 INIT_DELAYED_WORK(&pdata->link_work, link_state); in xgene_enet_probe()
2096 spin_lock_init(&pdata->stats_lock); in xgene_enet_probe()
2097 ret = xgene_extd_stats_init(pdata); in xgene_enet_probe()
2101 xgene_enet_napi_add(pdata); in xgene_enet_probe()
2116 xgene_enet_delete_desc_rings(pdata); in xgene_enet_probe()
2119 if (pdata->mdio_driver) in xgene_enet_probe()
2120 xgene_enet_phy_disconnect(pdata); in xgene_enet_probe()
2121 else if (phy_interface_mode_is_rgmii(pdata->phy_mode)) in xgene_enet_probe()
2122 xgene_enet_mdio_remove(pdata); in xgene_enet_probe()
2130 struct xgene_enet_pdata *pdata; in xgene_enet_remove() local
2133 pdata = platform_get_drvdata(pdev); in xgene_enet_remove()
2134 ndev = pdata->ndev; in xgene_enet_remove()
2141 if (pdata->mdio_driver) in xgene_enet_remove()
2142 xgene_enet_phy_disconnect(pdata); in xgene_enet_remove()
2143 else if (phy_interface_mode_is_rgmii(pdata->phy_mode)) in xgene_enet_remove()
2144 xgene_enet_mdio_remove(pdata); in xgene_enet_remove()
2147 xgene_enet_delete_desc_rings(pdata); in xgene_enet_remove()
2148 pdata->port_ops->shutdown(pdata); in xgene_enet_remove()
2156 struct xgene_enet_pdata *pdata; in xgene_enet_shutdown() local
2158 pdata = platform_get_drvdata(pdev); in xgene_enet_shutdown()
2159 if (!pdata) in xgene_enet_shutdown()
2162 if (!pdata->ndev) in xgene_enet_shutdown()