• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7800-V1.0.2.28/package/qca-nss-gmac/src/ipq806x/

Lines Matching refs:gmacdev

148  * should for gmacdev->tx_desc_count to see how many descriptors are there in
153 static int32_t nss_gmac_setup_tx_desc_queue(struct nss_gmac_dev *gmacdev,
161 gmacdev->tx_desc_count = 0;
166 netdev_dbg(gmacdev->netdev, "Total size of memory required for Tx Descriptors in Ring Mode = 0x%08x\n"
172 netdev_dbg(gmacdev->netdev,
177 gmacdev->tx_desc_count = no_of_desc;
178 gmacdev->tx_desc = first_desc;
179 gmacdev->tx_desc_dma = dma_addr;
180 netdev_dbg(gmacdev->netdev, "Tx Descriptors in Ring Mode: No. of descriptors = %d base = 0x%08x dma = 0x%08x\n"
183 nss_gmac_tx_desc_init_ring(gmacdev->tx_desc, gmacdev->tx_desc_count);
185 gmacdev->tx_next = 0;
186 gmacdev->tx_busy = 0;
187 gmacdev->tx_next_desc = gmacdev->tx_desc;
188 gmacdev->tx_busy_desc = gmacdev->tx_desc;
189 gmacdev->busy_tx_desc = 0;
219 * should for gmacdev->rx_desc_count to see how many descriptors are there in
224 static int32_t nss_gmac_setup_rx_desc_queue(struct nss_gmac_dev *gmacdev,
232 gmacdev->rx_desc_count = 0;
237 netdev_dbg(gmacdev->netdev, "total size of memory required for Rx Descriptors in Ring Mode = 0x%08x\n"
243 netdev_dbg(gmacdev->netdev, "Error in Rx Descriptor Memory allocation in Ring mode\n");
247 gmacdev->rx_desc_count = no_of_desc;
248 gmacdev->rx_desc = first_desc;
249 gmacdev->rx_desc_dma = dma_addr;
250 netdev_dbg(gmacdev->netdev, "Rx Descriptors in Ring Mode: No. of descriptors = %d base = 0x%08x dma = 0x%08x\n",
253 nss_gmac_rx_desc_init_ring(gmacdev->rx_desc, no_of_desc);
255 gmacdev->rx_next = 0;
256 gmacdev->rx_busy = 0;
257 gmacdev->rx_next_desc = gmacdev->rx_desc;
258 gmacdev->rx_busy_desc = gmacdev->rx_desc;
259 gmacdev->busy_rx_desc = 0;
268 static inline void nss_gmac_rx_refill(struct nss_gmac_dev *gmacdev)
270 int count = NSS_GMAC_RX_DESC_SIZE - gmacdev->busy_rx_desc;
276 skb = __netdev_alloc_skb(gmacdev->netdev,
279 netdev_dbg(gmacdev->netdev, "Unable to allocate skb, will try next time\n");
283 dma_addr = dma_map_single(&gmacdev->netdev->dev, skb->data,
285 nss_gmac_set_rx_qptr(gmacdev, dma_addr,
294 static inline int nss_gmac_rx(struct nss_gmac_dev *gmacdev, int budget)
301 if (!gmacdev->busy_rx_desc) {
306 busy = gmacdev->busy_rx_desc;
311 desc = gmacdev->rx_busy_desc;
319 dma_unmap_single(&gmacdev->netdev->dev, desc->buffer1,
329 gmacdev->stats.rx_packets++;
330 gmacdev->stats.rx_bytes += frame_length;
334 rx_skb->protocol = eth_type_trans(rx_skb, gmacdev->netdev);
336 napi_gro_receive(&gmacdev->napi, rx_skb);
339 gmacdev->stats.rx_errors++;
345 gmacdev->stats.rx_crc_errors += (status & desc_rx_crc) ? 1 : 0;
346 gmacdev->stats.collisions += (status & desc_rx_collision) ? 1 : 0;
347 gmacdev->stats.rx_over_errors += (status & desc_rx_damaged) ? 1 : 0;
348 gmacdev->stats.rx_frame_errors += (status & desc_rx_dribbling) ? 1 : 0;
349 gmacdev->stats.rx_length_errors += (status & desc_rx_length_error) ? 1 : 0;
353 nss_gmac_reset_rx_qptr(gmacdev);
363 static inline void nss_gmac_process_tx_complete(struct nss_gmac_dev *gmacdev)
370 spin_lock(&gmacdev->slock);
371 busy = gmacdev->busy_tx_desc;
375 spin_unlock(&gmacdev->slock);
380 desc = gmacdev->tx_busy_desc;
386 dma_unmap_single(&gmacdev->netdev->dev, desc->buffer1, len,
398 gmacdev->stats.tx_errors++;
399 gmacdev->stats.tx_carrier_errors += (status & desc_tx_lost_carrier) ? 1 : 0;
400 gmacdev->stats.tx_carrier_errors += (status & desc_tx_no_carrier) ? 1 : 0;
401 gmacdev->stats.tx_window_errors += (status & desc_tx_late_collision) ? 1 : 0;
402 gmacdev->stats.tx_fifo_errors += (status & desc_tx_underflow) ? 1 : 0;
407 gmacdev->stats.tx_packets++;
408 gmacdev->stats.collisions += nss_gmac_get_tx_collision_count(status);
409 gmacdev->stats.tx_bytes += len;
412 nss_gmac_reset_tx_qptr(gmacdev);
415 spin_unlock(&gmacdev->slock);
424 struct nss_gmac_dev *gmacdev = container_of(napi,
428 nss_gmac_process_tx_complete(gmacdev);
429 work_done = nss_gmac_rx(gmacdev, budget);
430 nss_gmac_rx_refill(gmacdev);
434 nss_gmac_enable_interrupt(gmacdev, dma_int_enable);
445 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)ctx;
447 nss_gmac_clear_interrupt(gmacdev);
448 nss_gmac_disable_interrupt(gmacdev, dma_int_enable);
449 napi_schedule(&gmacdev->napi);
471 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
474 napi_enable(&gmacdev->napi);
475 nss_gmac_enable_dma_rx(gmacdev);
476 nss_gmac_enable_dma_tx(gmacdev);
477 nss_gmac_enable_interrupt(gmacdev, dma_int_enable);
478 } else if (gmacdev->link_state == LINKUP) {
479 nss_gmac_disable_interrupt(gmacdev, dma_int_enable);
480 napi_disable(&gmacdev->napi);
497 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
505 if ((NSS_GMAC_TX_DESC_SIZE - gmacdev->busy_tx_desc) < nfrags + 1)
514 spin_lock_bh(&gmacdev->slock);
515 nss_gmac_set_tx_qptr(gmacdev, dma_addr, len, (uint32_t)skb,
519 gmacdev->busy_tx_desc++;
520 spin_unlock_bh(&gmacdev->slock);
521 nss_gmac_resume_dma_tx(gmacdev);
561 static void nss_gmac_copy_stats(struct nss_gmac_dev *gmacdev,
564 BUG_ON(!spin_is_locked(&gmacdev->stats_lock));
566 gmacdev->nss_stats.rx_bytes += gstat->rx_bytes;
567 gmacdev->nss_stats.rx_packets += gstat->rx_packets;
568 gmacdev->nss_stats.rx_errors += gstat->rx_errors;
569 gmacdev->nss_stats.rx_receive_errors += gstat->rx_receive_errors;
570 gmacdev->nss_stats.rx_overflow_errors += gstat->rx_overflow_errors;
571 gmacdev->nss_stats.rx_descriptor_errors += gstat->rx_descriptor_errors;
572 gmacdev->nss_stats.rx_watchdog_timeout_errors +=
574 gmacdev->nss_stats.rx_crc_errors += gstat->rx_crc_errors;
575 gmacdev->nss_stats.rx_late_collision_errors +=
577 gmacdev->nss_stats.rx_dribble_bit_errors += gstat->rx_dribble_bit_errors;
578 gmacdev->nss_stats.rx_length_errors += gstat->rx_length_errors;
579 gmacdev->nss_stats.rx_ip_header_errors += gstat->rx_ip_header_errors;
580 gmacdev->nss_stats.rx_ip_payload_errors += gstat->rx_ip_payload_errors;
581 gmacdev->nss_stats.rx_no_buffer_errors += gstat->rx_no_buffer_errors;
582 gmacdev->nss_stats.rx_transport_csum_bypassed +=
584 gmacdev->nss_stats.tx_bytes += gstat->tx_bytes;
585 gmacdev->nss_stats.tx_packets += gstat->tx_packets;
586 gmacdev->nss_stats.tx_collisions += gstat->tx_collisions;
587 gmacdev->nss_stats.tx_errors += gstat->tx_errors;
588 gmacdev->nss_stats.tx_jabber_timeout_errors +=
590 gmacdev->nss_stats.tx_frame_flushed_errors +=
592 gmacdev->nss_stats.tx_loss_of_carrier_errors +=
594 gmacdev->nss_stats.tx_no_carrier_errors += gstat->tx_no_carrier_errors;
595 gmacdev->nss_stats.tx_late_collision_errors +=
597 gmacdev->nss_stats.tx_excessive_collision_errors +=
599 gmacdev->nss_stats.tx_excessive_deferral_errors +=
601 gmacdev->nss_stats.tx_underflow_errors += gstat->tx_underflow_errors;
602 gmacdev->nss_stats.tx_ip_header_errors += gstat->tx_ip_header_errors;
603 gmacdev->nss_stats.tx_ip_payload_errors += gstat->tx_ip_payload_errors;
604 gmacdev->nss_stats.tx_dropped += gstat->tx_dropped;
605 gmacdev->nss_stats.hw_errs[0] += gstat->hw_errs[0];
606 gmacdev->nss_stats.hw_errs[1] += gstat->hw_errs[1];
607 gmacdev->nss_stats.hw_errs[2] += gstat->hw_errs[2];
608 gmacdev->nss_stats.hw_errs[3] += gstat->hw_errs[3];
609 gmacdev->nss_stats.hw_errs[4] += gstat->hw_errs[4];
610 gmacdev->nss_stats.hw_errs[5] += gstat->hw_errs[5];
611 gmacdev->nss_stats.hw_errs[6] += gstat->hw_errs[6];
612 gmacdev->nss_stats.hw_errs[7] += gstat->hw_errs[7];
613 gmacdev->nss_stats.hw_errs[8] += gstat->hw_errs[8];
614 gmacdev->nss_stats.hw_errs[9] += gstat->hw_errs[9];
615 gmacdev->nss_stats.rx_missed += gstat->rx_missed;
616 gmacdev->nss_stats.fifo_overflows += gstat->fifo_overflows;
617 gmacdev->nss_stats.rx_scatter_errors += gstat->rx_scatter_errors;
618 gmacdev->nss_stats.gmac_total_ticks += gstat->gmac_total_ticks;
619 gmacdev->nss_stats.gmac_worst_case_ticks += gstat->gmac_worst_case_ticks;
620 gmacdev->nss_stats.gmac_iterations += gstat->gmac_iterations;
636 static void nss_gmac_stats_receive(struct nss_gmac_dev *gmacdev,
641 netdev = (struct net_device *)gmacdev->netdev;
643 if (!test_bit(__NSS_GMAC_UP, &gmacdev->flags))
646 if (need_blink_wan_led && gmacdev->phy_base == 4 && (gstat->rx_bytes != 0 || gstat->tx_bytes != 0))
650 if (gmacdev->phy_base == 4) {
655 spin_lock(&gmacdev->stats_lock);
657 nss_gmac_copy_stats(gmacdev, gstat);
659 gmacdev->stats.rx_packets += gstat->rx_packets;
660 gmacdev->stats.rx_bytes += gstat->rx_bytes;
661 gmacdev->stats.rx_errors += gstat->rx_errors;
662 gmacdev->stats.rx_dropped += gstat->rx_errors;
663 gmacdev->stats.rx_length_errors += gstat->rx_length_errors;
664 gmacdev->stats.rx_over_errors += gstat->rx_overflow_errors;
665 gmacdev->stats.rx_crc_errors += gstat->rx_crc_errors;
666 gmacdev->stats.rx_frame_errors += gstat->rx_dribble_bit_errors;
667 gmacdev->stats.rx_fifo_errors += gstat->fifo_overflows;
668 gmacdev->stats.rx_missed_errors += gstat->rx_missed;
669 gmacdev->stats.collisions += gstat->tx_collisions
671 gmacdev->stats.tx_packets += gstat->tx_packets;
672 gmacdev->stats.tx_bytes += gstat->tx_bytes;
673 gmacdev->stats.tx_errors += gstat->tx_errors;
674 gmacdev->stats.tx_dropped += gstat->tx_dropped;
675 gmacdev->stats.tx_carrier_errors += gstat->tx_loss_of_carrier_errors
677 gmacdev->stats.tx_fifo_errors += gstat->tx_underflow_errors;
678 gmacdev->stats.tx_window_errors += gstat->tx_late_collision_errors;
680 spin_unlock(&gmacdev->stats_lock);
697 struct nss_gmac_dev *gmacdev;
707 gmacdev = netdev_priv(netdev);
709 BUG_ON(gmacdev->netdev != netdev);
715 __func__, gmacdev->macid, skb->len, skb->ip_summed);
717 if (need_blink_wan_led && gmacdev->phy_base == 4)
721 if (gmacdev->phy_base != 4)
827 struct nss_gmac_dev *gmacdev = NULL;
830 gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
831 BUG_ON(!gmacdev);
835 nss_gmac_stats_receive(gmacdev,
851 static void nss_notify_linkup(struct nss_gmac_dev *gmacdev)
855 if (!test_bit(__NSS_GMAC_UP, &gmacdev->flags))
859 if (gmacdev->speed == SPEED_1000)
861 else if (gmacdev->speed == SPEED_100)
864 gmacdev->data_plane_ops->link_state(gmacdev->data_plane_ctx, link);
874 void nss_gmac_linkup(struct nss_gmac_dev *gmacdev)
876 struct net_device *netdev = gmacdev->netdev;
881 nss_gmac_spare_ctl(gmacdev);
884 if (nss_gmac_check_phy_init(gmacdev) != 0) {
885 gmacdev->link_state = LINKDOWN;
889 gmacdev->link_state = LINKUP;
890 if (nss_gmac_dev_set_speed(gmacdev) != 0)
893 if (gmacdev->first_linkup_done == 0) {
894 nss_gmac_reset(gmacdev);
895 nss_gmac_disable_interrupt_all(gmacdev);
896 nss_gmac_clear_interrupt(gmacdev);
899 nss_gmac_init_tx_desc_base(gmacdev);
900 nss_gmac_init_rx_desc_base(gmacdev);
901 nss_gmac_dma_bus_mode_init(gmacdev, dma_bus_mode_val);
902 nss_gmac_dma_axi_bus_mode_init(gmacdev, dma_axi_bus_mode_val);
903 nss_gmac_dma_control_init(gmacdev, dma_omr);
904 nss_gmac_disable_mmc_tx_interrupt(gmacdev, 0xFFFFFFFF);
905 nss_gmac_disable_mmc_rx_interrupt(gmacdev, 0xFFFFFFFF);
906 nss_gmac_disable_mmc_ipc_rx_interrupt(gmacdev, 0xFFFFFFFF);
911 nss_gmac_change_mtu(gmacdev->netdev, gmacdev->netdev->mtu);
912 gmacdev->first_linkup_done = 1;
915 nss_gmac_mac_init(gmacdev);
917 if (gmacdev->data_plane_ops->open(gmacdev->data_plane_ctx, gmac_tx_desc,
921 gmacdev->link_state = LINKDOWN;
927 nss_notify_linkup(gmacdev);
939 void nss_gmac_linkdown(struct nss_gmac_dev *gmacdev)
941 struct net_device *netdev = gmacdev->netdev;
945 if (test_bit(__NSS_GMAC_UP, &gmacdev->flags)) {
948 gmacdev->data_plane_ops->link_state(gmacdev->data_plane_ctx, 0);
950 gmacdev->link_state = LINKDOWN;
951 gmacdev->duplex_mode = 0;
952 gmacdev->speed = 0;
964 struct nss_gmac_dev *gmacdev = NULL;
966 gmacdev = netdev_priv(netdev);
968 if (!test_bit(__NSS_GMAC_UP, &gmacdev->flags))
971 status = nss_gmac_check_link(gmacdev);
972 mutex_lock(&gmacdev->link_mutex);
973 if (status == LINKUP && gmacdev->link_state == LINKDOWN)
974 nss_gmac_linkup(gmacdev);
975 else if (status == LINKDOWN && gmacdev->link_state == LINKUP) {
980 if (gmacdev->drv_flags & NSS_GMAC_PRIV_FLAG(LINKPOLL)) {
981 nss_gmac_linkdown(gmacdev);
984 mutex_unlock(&gmacdev->link_mutex);
987 void nss_gmac_start_up(struct nss_gmac_dev *gmacdev)
989 if (test_bit(__NSS_GMAC_LINKPOLL, &gmacdev->flags)) {
990 if (!IS_ERR(gmacdev->phydev)) {
991 netdev_dbg(gmacdev->netdev, "%s: start phy 0x%x\n",
992 __func__, gmacdev->phydev->phy_id);
993 phy_start(gmacdev->phydev);
994 phy_start_aneg(gmacdev->phydev);
996 netdev_dbg(gmacdev->netdev, "%s: Invalid PHY device for a link polled interface\n",
1001 netdev_dbg(gmacdev->netdev, "%s: Force link up\n", __func__);
1005 mutex_lock(&gmacdev->link_mutex);
1006 nss_gmac_linkup(gmacdev);
1007 mutex_unlock(&gmacdev->link_mutex);
1024 struct nss_gmac_dev *gmacdev = NULL;
1032 gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1033 BUG_ON(gmacdev == NULL);
1034 BUG_ON(gmacdev->netdev != netdev);
1039 if (need_blink_wan_led && gmacdev->phy_base == 4)
1043 if (gmacdev->phy_base != 4)
1054 msg_status = gmacdev->data_plane_ops->xmit(gmacdev->data_plane_ctx, skb);
1084 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1088 if (!gmacdev)
1092 ctx = gmacdev->ctx;
1097 nss_gmac_disable_interrupt_all(gmacdev);
1099 if (!gmacdev->data_plane_ops) {
1103 netif_napi_add(netdev, &gmacdev->napi, nss_gmac_poll,
1107 nss_gmac_setup_rx_desc_queue(gmacdev, dev,
1109 nss_gmac_setup_tx_desc_queue(gmacdev, dev,
1111 nss_gmac_rx_refill(gmacdev);
1115 IRQF_DISABLED, "nss-gmac", gmacdev);
1118 gmacdev->macid, netdev->irq);
1122 gmacdev->data_plane_ops = &nss_gmac_slowpath_ops;
1123 gmacdev->data_plane_ctx = gmacdev->netdev;
1129 gmacdev->speed = SPEED_100;
1130 gmacdev->duplex_mode = DUPLEX_FULL;
1135 nss_gmac_read_version(gmacdev);
1142 gmacdev->data_plane_ops->set_features(netdev);
1147 set_bit(__NSS_GMAC_UP, &gmacdev->flags);
1150 gmacdev->link_state = LINKDOWN;
1152 nss_gmac_start_up(gmacdev);
1154 gmacdev->data_plane_ops->mac_addr(gmacdev->data_plane_ctx,
1155 (uint8_t *)gmacdev->netdev->dev_addr);
1176 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1178 if (!gmacdev)
1181 WARN_ON(!test_bit(__NSS_GMAC_UP, &gmacdev->flags));
1183 set_bit(__NSS_GMAC_CLOSING, &gmacdev->flags);
1188 nss_gmac_rx_disable(gmacdev);
1189 nss_gmac_tx_disable(gmacdev);
1191 nss_gmac_disable_interrupt_all(gmacdev);
1192 gmacdev->data_plane_ops->link_state(gmacdev->data_plane_ctx, 0);
1194 if (!IS_ERR(gmacdev->phydev))
1195 phy_stop(gmacdev->phydev);
1197 clear_bit(__NSS_GMAC_UP, &gmacdev->flags);
1198 clear_bit(__NSS_GMAC_CLOSING, &gmacdev->flags);
1200 gmacdev->data_plane_ops->close(gmacdev->data_plane_ctx);
1213 struct nss_gmac_dev *gmacdev = NULL;
1215 gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1216 BUG_ON(gmacdev == NULL);
1219 nss_gmac_disable_dma_tx(gmacdev);
1220 nss_gmac_flush_tx_fifo(gmacdev);
1221 nss_gmac_enable_dma_tx(gmacdev);
1235 struct nss_gmac_dev *gmacdev = NULL;
1237 gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1238 if (!gmacdev)
1244 if (gmacdev->data_plane_ops->change_mtu(gmacdev->data_plane_ctx, newmtu)
1249 nss_gmac_jumbo_frame_disable(gmacdev);
1250 nss_gmac_twokpe_frame_disable(gmacdev);
1252 nss_gmac_jumbo_frame_disable(gmacdev);
1253 nss_gmac_twokpe_frame_enable(gmacdev);
1255 nss_gmac_jumbo_frame_enable(gmacdev);
1268 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1270 if (test_bit(__NSS_GMAC_UP, &gmacdev->flags))
1300 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1302 BUG_ON(!gmacdev);
1314 if (test_bit(__NSS_GMAC_UP, &gmacdev->flags)) {
1320 gmacdev->data_plane_ctx = ctx;
1321 gmacdev->data_plane_ops = dp_ops;
1322 gmacdev->first_linkup_done = 0;
1336 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1337 struct nss_gmac_global_ctx *global_ctx = gmacdev->ctx;
1339 if (test_bit(__NSS_GMAC_UP, &gmacdev->flags)) {
1343 if (gmacdev->data_plane_ctx == ctx) {
1346 &gmacdev->gmacwork, NSS_GMAC_LINK_CHECK_TIME);
1358 struct nss_gmac_dev *gmacdev = (struct nss_gmac_dev *)netdev_priv(netdev);
1363 if (test_bit(__NSS_GMAC_UP, &gmacdev->flags)) {
1367 gmacdev->data_plane_ctx = netdev;
1368 gmacdev->data_plane_ops = &nss_gmac_slowpath_ops;
1378 struct nss_gmac_dev *gmacdev = ctx.nss_gmac[macid];
1380 if (!gmacdev)
1382 return gmacdev->netdev;
1392 struct nss_gmac_dev *gmacdev = container_of(to_delayed_work(work),
1395 netdev_dbg(gmacdev->netdev, "Do the network up in delayed queue %s\n",
1396 gmacdev->netdev->name);
1397 nss_gmac_open(gmacdev->netdev);