Lines Matching refs:pdata
93 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_dst_ring_num() local
95 return ((u16)pdata->rm << 10) | ring->num; in xgene_enet_dst_ring_num()
261 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_start_xmit() local
262 struct xgene_enet_desc_ring *tx_ring = pdata->tx_ring; in xgene_enet_start_xmit()
268 if (unlikely(tx_level > pdata->tx_qcnt_hi || in xgene_enet_start_xmit()
269 cq_level > pdata->cp_qcnt_hi)) { in xgene_enet_start_xmit()
283 pdata->stats.tx_packets++; in xgene_enet_start_xmit()
284 pdata->stats.tx_bytes += skb->len; in xgene_enet_start_xmit()
303 struct xgene_enet_pdata *pdata; in xgene_enet_rx_frame() local
312 pdata = netdev_priv(ndev); in xgene_enet_rx_frame()
327 pdata->stats.rx_dropped++; in xgene_enet_rx_frame()
345 pdata->stats.rx_packets++; in xgene_enet_rx_frame()
346 pdata->stats.rx_bytes += datalen; in xgene_enet_rx_frame()
365 struct xgene_enet_pdata *pdata = netdev_priv(ring->ndev); in xgene_enet_process_ring() local
396 if (xgene_enet_ring_len(ring) < pdata->cp_qcnt_low) in xgene_enet_process_ring()
422 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_timeout() local
424 pdata->mac_ops->reset(pdata); in xgene_enet_timeout()
429 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_register_irq() local
434 ring = pdata->rx_ring; in xgene_enet_register_irq()
440 if (pdata->cq_cnt) { in xgene_enet_register_irq()
441 ring = pdata->tx_ring->cp_ring; in xgene_enet_register_irq()
455 struct xgene_enet_pdata *pdata; in xgene_enet_free_irq() local
458 pdata = netdev_priv(ndev); in xgene_enet_free_irq()
460 devm_free_irq(dev, pdata->rx_ring->irq, pdata->rx_ring); in xgene_enet_free_irq()
462 if (pdata->cq_cnt) { in xgene_enet_free_irq()
463 devm_free_irq(dev, pdata->tx_ring->cp_ring->irq, in xgene_enet_free_irq()
464 pdata->tx_ring->cp_ring); in xgene_enet_free_irq()
468 static void xgene_enet_napi_enable(struct xgene_enet_pdata *pdata) in xgene_enet_napi_enable() argument
472 napi = &pdata->rx_ring->napi; in xgene_enet_napi_enable()
475 if (pdata->cq_cnt) { in xgene_enet_napi_enable()
476 napi = &pdata->tx_ring->cp_ring->napi; in xgene_enet_napi_enable()
481 static void xgene_enet_napi_disable(struct xgene_enet_pdata *pdata) in xgene_enet_napi_disable() argument
485 napi = &pdata->rx_ring->napi; in xgene_enet_napi_disable()
488 if (pdata->cq_cnt) { in xgene_enet_napi_disable()
489 napi = &pdata->tx_ring->cp_ring->napi; in xgene_enet_napi_disable()
496 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_open() local
497 struct xgene_mac_ops *mac_ops = pdata->mac_ops; in xgene_enet_open()
500 mac_ops->tx_enable(pdata); in xgene_enet_open()
501 mac_ops->rx_enable(pdata); in xgene_enet_open()
506 xgene_enet_napi_enable(pdata); in xgene_enet_open()
508 if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII) in xgene_enet_open()
509 phy_start(pdata->phy_dev); in xgene_enet_open()
511 schedule_delayed_work(&pdata->link_work, PHY_POLL_LINK_OFF); in xgene_enet_open()
520 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_close() local
521 struct xgene_mac_ops *mac_ops = pdata->mac_ops; in xgene_enet_close()
525 if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII) in xgene_enet_close()
526 phy_stop(pdata->phy_dev); in xgene_enet_close()
528 cancel_delayed_work_sync(&pdata->link_work); in xgene_enet_close()
530 xgene_enet_napi_disable(pdata); in xgene_enet_close()
532 xgene_enet_process_ring(pdata->rx_ring, -1); in xgene_enet_close()
534 mac_ops->tx_disable(pdata); in xgene_enet_close()
535 mac_ops->rx_disable(pdata); in xgene_enet_close()
542 struct xgene_enet_pdata *pdata; in xgene_enet_delete_ring() local
545 pdata = netdev_priv(ring->ndev); in xgene_enet_delete_ring()
552 static void xgene_enet_delete_desc_rings(struct xgene_enet_pdata *pdata) in xgene_enet_delete_desc_rings() argument
556 if (pdata->tx_ring) { in xgene_enet_delete_desc_rings()
557 xgene_enet_delete_ring(pdata->tx_ring); in xgene_enet_delete_desc_rings()
558 pdata->tx_ring = NULL; in xgene_enet_delete_desc_rings()
561 if (pdata->rx_ring) { in xgene_enet_delete_desc_rings()
562 buf_pool = pdata->rx_ring->buf_pool; in xgene_enet_delete_desc_rings()
565 xgene_enet_delete_ring(pdata->rx_ring); in xgene_enet_delete_desc_rings()
566 pdata->rx_ring = NULL; in xgene_enet_delete_desc_rings()
615 static void xgene_enet_free_desc_rings(struct xgene_enet_pdata *pdata) in xgene_enet_free_desc_rings() argument
617 struct device *dev = &pdata->pdev->dev; in xgene_enet_free_desc_rings()
620 ring = pdata->tx_ring; in xgene_enet_free_desc_rings()
624 if (ring->cp_ring && pdata->cq_cnt) in xgene_enet_free_desc_rings()
629 ring = pdata->rx_ring; in xgene_enet_free_desc_rings()
645 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_create_desc_ring() local
671 ring->cmd_base = pdata->ring_cmd_addr + (ring->num << 6); in xgene_enet_create_desc_ring()
687 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_create_desc_rings() local
691 u8 cpu_bufnum = pdata->cpu_bufnum; in xgene_enet_create_desc_rings()
692 u8 eth_bufnum = pdata->eth_bufnum; in xgene_enet_create_desc_rings()
693 u8 bp_bufnum = pdata->bp_bufnum; in xgene_enet_create_desc_rings()
694 u16 ring_num = pdata->ring_num; in xgene_enet_create_desc_rings()
718 rx_ring->irq = pdata->rx_irq; in xgene_enet_create_desc_rings()
719 if (!pdata->cq_cnt) { in xgene_enet_create_desc_rings()
734 pdata->rx_ring = rx_ring; in xgene_enet_create_desc_rings()
744 pdata->tx_ring = tx_ring; in xgene_enet_create_desc_rings()
746 if (!pdata->cq_cnt) { in xgene_enet_create_desc_rings()
747 cp_ring = pdata->rx_ring; in xgene_enet_create_desc_rings()
758 cp_ring->irq = pdata->txc_irq; in xgene_enet_create_desc_rings()
768 pdata->tx_ring->cp_ring = cp_ring; in xgene_enet_create_desc_rings()
769 pdata->tx_ring->dst_ring_num = xgene_enet_dst_ring_num(cp_ring); in xgene_enet_create_desc_rings()
771 pdata->tx_qcnt_hi = pdata->tx_ring->slots / 2; in xgene_enet_create_desc_rings()
772 pdata->cp_qcnt_hi = pdata->rx_ring->slots / 2; in xgene_enet_create_desc_rings()
773 pdata->cp_qcnt_low = pdata->cp_qcnt_hi / 2; in xgene_enet_create_desc_rings()
778 xgene_enet_free_desc_rings(pdata); in xgene_enet_create_desc_rings()
786 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_get_stats64() local
787 struct rtnl_link_stats64 *stats = &pdata->stats; in xgene_enet_get_stats64()
793 memcpy(storage, &pdata->stats, sizeof(struct rtnl_link_stats64)); in xgene_enet_get_stats64()
800 struct xgene_enet_pdata *pdata = netdev_priv(ndev); in xgene_enet_set_mac_address() local
806 pdata->mac_ops->set_mac_addr(pdata); in xgene_enet_set_mac_address()
821 static int xgene_get_port_id(struct device *dev, struct xgene_enet_pdata *pdata) in xgene_get_port_id() argument
832 pdata->port_id = id; in xgene_get_port_id()
872 static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata) in xgene_enet_get_resources() argument
881 pdev = pdata->pdev; in xgene_enet_get_resources()
883 ndev = pdata->ndev; in xgene_enet_get_resources()
890 pdata->base_addr = devm_ioremap(dev, res->start, resource_size(res)); in xgene_enet_get_resources()
891 if (!pdata->base_addr) { in xgene_enet_get_resources()
901 pdata->ring_csr_addr = devm_ioremap(dev, res->start, in xgene_enet_get_resources()
903 if (!pdata->ring_csr_addr) { in xgene_enet_get_resources()
913 pdata->ring_cmd_addr = devm_ioremap(dev, res->start, in xgene_enet_get_resources()
915 if (!pdata->ring_cmd_addr) { in xgene_enet_get_resources()
920 ret = xgene_get_port_id(dev, pdata); in xgene_enet_get_resources()
929 pdata->phy_mode = xgene_get_phy_mode(dev); in xgene_enet_get_resources()
930 if (pdata->phy_mode < 0) { in xgene_enet_get_resources()
932 return pdata->phy_mode; in xgene_enet_get_resources()
934 if (pdata->phy_mode != PHY_INTERFACE_MODE_RGMII && in xgene_enet_get_resources()
935 pdata->phy_mode != PHY_INTERFACE_MODE_SGMII && in xgene_enet_get_resources()
936 pdata->phy_mode != PHY_INTERFACE_MODE_XGMII) { in xgene_enet_get_resources()
947 pdata->rx_irq = ret; in xgene_enet_get_resources()
949 if (pdata->phy_mode != PHY_INTERFACE_MODE_RGMII) { in xgene_enet_get_resources()
956 pdata->txc_irq = ret; in xgene_enet_get_resources()
959 pdata->clk = devm_clk_get(&pdev->dev, NULL); in xgene_enet_get_resources()
960 if (IS_ERR(pdata->clk)) { in xgene_enet_get_resources()
962 pdata->clk = NULL; in xgene_enet_get_resources()
965 base_addr = pdata->base_addr - (pdata->port_id * MAC_OFFSET); in xgene_enet_get_resources()
966 pdata->eth_csr_addr = base_addr + BLOCK_ETH_CSR_OFFSET; in xgene_enet_get_resources()
967 pdata->eth_ring_if_addr = base_addr + BLOCK_ETH_RING_IF_OFFSET; in xgene_enet_get_resources()
968 pdata->eth_diag_csr_addr = base_addr + BLOCK_ETH_DIAG_CSR_OFFSET; in xgene_enet_get_resources()
969 if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII || in xgene_enet_get_resources()
970 pdata->phy_mode == PHY_INTERFACE_MODE_SGMII) { in xgene_enet_get_resources()
971 pdata->mcx_mac_addr = pdata->base_addr + BLOCK_ETH_MAC_OFFSET; in xgene_enet_get_resources()
972 pdata->mcx_mac_csr_addr = base_addr + BLOCK_ETH_MAC_CSR_OFFSET; in xgene_enet_get_resources()
974 pdata->mcx_mac_addr = base_addr + BLOCK_AXG_MAC_OFFSET; in xgene_enet_get_resources()
975 pdata->mcx_mac_csr_addr = base_addr + BLOCK_AXG_MAC_CSR_OFFSET; in xgene_enet_get_resources()
977 pdata->rx_buff_cnt = NUM_PKT_BUF; in xgene_enet_get_resources()
982 static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata) in xgene_enet_init_hw() argument
984 struct net_device *ndev = pdata->ndev; in xgene_enet_init_hw()
989 ret = pdata->port_ops->reset(pdata); in xgene_enet_init_hw()
1000 buf_pool = pdata->rx_ring->buf_pool; in xgene_enet_init_hw()
1002 ret = xgene_enet_refill_bufpool(buf_pool, pdata->rx_buff_cnt); in xgene_enet_init_hw()
1004 xgene_enet_delete_desc_rings(pdata); in xgene_enet_init_hw()
1008 dst_ring_num = xgene_enet_dst_ring_num(pdata->rx_ring); in xgene_enet_init_hw()
1009 pdata->port_ops->cle_bypass(pdata, dst_ring_num, buf_pool->id); in xgene_enet_init_hw()
1010 pdata->mac_ops->init(pdata); in xgene_enet_init_hw()
1015 static void xgene_enet_setup_ops(struct xgene_enet_pdata *pdata) in xgene_enet_setup_ops() argument
1017 switch (pdata->phy_mode) { in xgene_enet_setup_ops()
1019 pdata->mac_ops = &xgene_gmac_ops; in xgene_enet_setup_ops()
1020 pdata->port_ops = &xgene_gport_ops; in xgene_enet_setup_ops()
1021 pdata->rm = RM3; in xgene_enet_setup_ops()
1024 pdata->mac_ops = &xgene_sgmac_ops; in xgene_enet_setup_ops()
1025 pdata->port_ops = &xgene_sgport_ops; in xgene_enet_setup_ops()
1026 pdata->rm = RM1; in xgene_enet_setup_ops()
1027 pdata->cq_cnt = XGENE_MAX_TXC_RINGS; in xgene_enet_setup_ops()
1030 pdata->mac_ops = &xgene_xgmac_ops; in xgene_enet_setup_ops()
1031 pdata->port_ops = &xgene_xgport_ops; in xgene_enet_setup_ops()
1032 pdata->rm = RM0; in xgene_enet_setup_ops()
1033 pdata->cq_cnt = XGENE_MAX_TXC_RINGS; in xgene_enet_setup_ops()
1037 switch (pdata->port_id) { in xgene_enet_setup_ops()
1039 pdata->cpu_bufnum = START_CPU_BUFNUM_0; in xgene_enet_setup_ops()
1040 pdata->eth_bufnum = START_ETH_BUFNUM_0; in xgene_enet_setup_ops()
1041 pdata->bp_bufnum = START_BP_BUFNUM_0; in xgene_enet_setup_ops()
1042 pdata->ring_num = START_RING_NUM_0; in xgene_enet_setup_ops()
1045 pdata->cpu_bufnum = START_CPU_BUFNUM_1; in xgene_enet_setup_ops()
1046 pdata->eth_bufnum = START_ETH_BUFNUM_1; in xgene_enet_setup_ops()
1047 pdata->bp_bufnum = START_BP_BUFNUM_1; in xgene_enet_setup_ops()
1048 pdata->ring_num = START_RING_NUM_1; in xgene_enet_setup_ops()
1056 static void xgene_enet_napi_add(struct xgene_enet_pdata *pdata) in xgene_enet_napi_add() argument
1060 napi = &pdata->rx_ring->napi; in xgene_enet_napi_add()
1061 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, NAPI_POLL_WEIGHT); in xgene_enet_napi_add()
1063 if (pdata->cq_cnt) { in xgene_enet_napi_add()
1064 napi = &pdata->tx_ring->cp_ring->napi; in xgene_enet_napi_add()
1065 netif_napi_add(pdata->ndev, napi, xgene_enet_napi, in xgene_enet_napi_add()
1070 static void xgene_enet_napi_del(struct xgene_enet_pdata *pdata) in xgene_enet_napi_del() argument
1074 napi = &pdata->rx_ring->napi; in xgene_enet_napi_del()
1077 if (pdata->cq_cnt) { in xgene_enet_napi_del()
1078 napi = &pdata->tx_ring->cp_ring->napi; in xgene_enet_napi_del()
1086 struct xgene_enet_pdata *pdata; in xgene_enet_probe() local
1095 pdata = netdev_priv(ndev); in xgene_enet_probe()
1097 pdata->pdev = pdev; in xgene_enet_probe()
1098 pdata->ndev = ndev; in xgene_enet_probe()
1100 platform_set_drvdata(pdev, pdata); in xgene_enet_probe()
1107 ret = xgene_enet_get_resources(pdata); in xgene_enet_probe()
1111 xgene_enet_setup_ops(pdata); in xgene_enet_probe()
1125 ret = xgene_enet_init_hw(pdata); in xgene_enet_probe()
1129 xgene_enet_napi_add(pdata); in xgene_enet_probe()
1130 mac_ops = pdata->mac_ops; in xgene_enet_probe()
1131 if (pdata->phy_mode == PHY_INTERFACE_MODE_RGMII) in xgene_enet_probe()
1132 ret = xgene_enet_mdio_config(pdata); in xgene_enet_probe()
1134 INIT_DELAYED_WORK(&pdata->link_work, mac_ops->link_state); in xgene_enet_probe()
1145 struct xgene_enet_pdata *pdata; in xgene_enet_remove() local
1149 pdata = platform_get_drvdata(pdev); in xgene_enet_remove()
1150 mac_ops = pdata->mac_ops; in xgene_enet_remove()
1151 ndev = pdata->ndev; in xgene_enet_remove()
1153 mac_ops->rx_disable(pdata); in xgene_enet_remove()
1154 mac_ops->tx_disable(pdata); in xgene_enet_remove()
1156 xgene_enet_napi_del(pdata); in xgene_enet_remove()
1157 xgene_enet_mdio_remove(pdata); in xgene_enet_remove()
1158 xgene_enet_delete_desc_rings(pdata); in xgene_enet_remove()
1160 pdata->port_ops->shutdown(pdata); in xgene_enet_remove()