Lines Matching full:rx

262 	struct lan743x_rx *rx = context;
263 struct lan743x_adapter *adapter = rx->adapter;
268 INT_BIT_DMA_RX_(rx->channel_number));
271 if (int_sts & INT_BIT_DMA_RX_(rx->channel_number)) {
272 u32 rx_frame_bit = DMAC_INT_BIT_RXFRM_(rx->channel_number);
289 napi_schedule(&rx->napi);
297 INT_BIT_DMA_RX_(rx->channel_number));
312 lan743x_rx_isr(&adapter->rx[channel],
718 /* map RX interrupt to vector */
728 /* Remove RX interrupt from shared mask */
732 &adapter->rx[index]);
1699 channel_number = adapter->rx[index].channel_number;
2304 static int lan743x_rx_next_index(struct lan743x_rx *rx, int index)
2306 return ((++index) % rx->ring_size);
2309 static void lan743x_rx_update_tail(struct lan743x_rx *rx, int index)
2313 lan743x_csr_write(rx->adapter, RX_TAIL(rx->channel_number),
2317 static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index,
2320 struct net_device *netdev = rx->adapter->netdev;
2321 struct device *dev = &rx->adapter->pdev->dev;
2330 descriptor = &rx->ring_cpu_ptr[index];
2331 buffer_info = &rx->buffer_info[index];
2369 lan743x_rx_update_tail(rx, index);
2374 static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index)
2379 descriptor = &rx->ring_cpu_ptr[index];
2380 buffer_info = &rx->buffer_info[index];
2388 lan743x_rx_update_tail(rx, index);
2391 static void lan743x_rx_release_ring_element(struct lan743x_rx *rx, int index)
2396 descriptor = &rx->ring_cpu_ptr[index];
2397 buffer_info = &rx->buffer_info[index];
2402 dma_unmap_single(&rx->adapter->pdev->dev,
2432 static int lan743x_rx_process_buffer(struct lan743x_rx *rx)
2434 int current_head_index = le32_to_cpu(*rx->head_cpu_ptr);
2436 struct net_device *netdev = rx->adapter->netdev;
2445 if (current_head_index < 0 || current_head_index >= rx->ring_size)
2448 if (rx->last_head < 0 || rx->last_head >= rx->ring_size)
2451 if (rx->last_head == current_head_index)
2454 descriptor = &rx->ring_cpu_ptr[rx->last_head];
2457 buffer_info = &rx->buffer_info[rx->last_head];
2464 int index = lan743x_rx_next_index(rx, rx->last_head);
2469 desc_ext = &rx->ring_cpu_ptr[index];
2498 if (lan743x_rx_init_ring_element(rx, rx->last_head,
2504 lan743x_rx_reuse_ring_element(rx, rx->last_head);
2506 dev_kfree_skb_irq(rx->skb_head);
2507 rx->skb_head = NULL;
2515 if (rx->skb_head)
2516 dev_kfree_skb_irq(rx->skb_head);
2517 rx->skb_head = skb;
2518 } else if (rx->skb_head) {
2520 if (skb_shinfo(rx->skb_head)->frag_list)
2521 rx->skb_tail->next = skb;
2523 skb_shinfo(rx->skb_head)->frag_list = skb;
2524 rx->skb_tail = skb;
2525 rx->skb_head->len += skb->len;
2526 rx->skb_head->data_len += skb->len;
2527 rx->skb_head->truesize += skb->truesize;
2544 if (rx->skb_head)
2545 skb_hwtstamps(rx->skb_head)->hwtstamp =
2547 lan743x_rx_reuse_ring_element(rx, extension_index);
2548 rx->last_head = extension_index;
2552 if (is_last && rx->skb_head)
2553 rx->skb_head = lan743x_rx_trim_skb(rx->skb_head, frame_length);
2555 if (is_last && rx->skb_head) {
2556 rx->skb_head->protocol = eth_type_trans(rx->skb_head,
2557 rx->adapter->netdev);
2558 if (rx->adapter->netdev->features & NETIF_F_RXCSUM) {
2563 rx->skb_head->len);
2564 napi_gro_receive(&rx->napi, rx->skb_head);
2565 rx->skb_head = NULL;
2570 rx->last_tail = rx->last_head;
2571 rx->last_head = lan743x_rx_next_index(rx, rx->last_head);
2579 struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi);
2580 struct lan743x_adapter *adapter = rx->adapter;
2585 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) {
2588 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2591 result = lan743x_rx_process_buffer(rx);
2595 rx->frame_count += count;
2602 /* re-arm interrupts, must write to rx tail on some chip variants */
2603 if (rx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET)
2605 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) {
2609 INT_BIT_DMA_RX_(rx->channel_number));
2613 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2614 rx_tail_flags | rx->last_tail);
2619 static void lan743x_rx_ring_cleanup(struct lan743x_rx *rx)
2621 if (rx->buffer_info && rx->ring_cpu_ptr) {
2624 for (index = 0; index < rx->ring_size; index++)
2625 lan743x_rx_release_ring_element(rx, index);
2628 if (rx->head_cpu_ptr) {
2629 dma_free_coherent(&rx->adapter->pdev->dev,
2630 sizeof(*rx->head_cpu_ptr), rx->head_cpu_ptr,
2631 rx->head_dma_ptr);
2632 rx->head_cpu_ptr = NULL;
2633 rx->head_dma_ptr = 0;
2636 kfree(rx->buffer_info);
2637 rx->buffer_info = NULL;
2639 if (rx->ring_cpu_ptr) {
2640 dma_free_coherent(&rx->adapter->pdev->dev,
2641 rx->ring_allocation_size, rx->ring_cpu_ptr,
2642 rx->ring_dma_ptr);
2643 rx->ring_allocation_size = 0;
2644 rx->ring_cpu_ptr = NULL;
2645 rx->ring_dma_ptr = 0;
2648 rx->ring_size = 0;
2649 rx->last_head = 0;
2652 static int lan743x_rx_ring_init(struct lan743x_rx *rx)
2660 rx->ring_size = LAN743X_RX_RING_SIZE;
2661 if (rx->ring_size <= 1) {
2665 if (rx->ring_size & ~RX_CFG_B_RX_RING_LEN_MASK_) {
2669 if (dma_set_mask_and_coherent(&rx->adapter->pdev->dev,
2671 dev_warn(&rx->adapter->pdev->dev,
2676 ring_allocation_size = ALIGN(rx->ring_size *
2680 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev,
2686 rx->ring_allocation_size = ring_allocation_size;
2687 rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr;
2688 rx->ring_dma_ptr = dma_ptr;
2690 cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info),
2696 rx->buffer_info = (struct lan743x_rx_buffer_info *)cpu_ptr;
2698 cpu_ptr = dma_alloc_coherent(&rx->adapter->pdev->dev,
2699 sizeof(*rx->head_cpu_ptr), &dma_ptr,
2706 rx->head_cpu_ptr = cpu_ptr;
2707 rx->head_dma_ptr = dma_ptr;
2708 if (rx->head_dma_ptr & 0x3) {
2713 rx->last_head = 0;
2714 for (index = 0; index < rx->ring_size; index++) {
2715 ret = lan743x_rx_init_ring_element(rx, index, GFP_KERNEL);
2722 netif_warn(rx->adapter, ifup, rx->adapter->netdev,
2725 lan743x_rx_ring_cleanup(rx);
2729 static void lan743x_rx_close(struct lan743x_rx *rx)
2731 struct lan743x_adapter *adapter = rx->adapter;
2734 FCT_RX_CTL_DIS_(rx->channel_number));
2736 FCT_RX_CTL_EN_(rx->channel_number),
2740 DMAC_CMD_STOP_R_(rx->channel_number));
2741 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number);
2744 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2746 INT_BIT_DMA_RX_(rx->channel_number));
2747 napi_disable(&rx->napi);
2749 netif_napi_del(&rx->napi);
2751 lan743x_rx_ring_cleanup(rx);
2754 static int lan743x_rx_open(struct lan743x_rx *rx)
2756 struct lan743x_adapter *adapter = rx->adapter;
2760 rx->frame_count = 0;
2761 ret = lan743x_rx_ring_init(rx);
2765 netif_napi_add(adapter->netdev, &rx->napi, lan743x_rx_napi_poll);
2768 DMAC_CMD_RX_SWR_(rx->channel_number));
2770 DMAC_CMD_RX_SWR_(rx->channel_number),
2775 RX_BASE_ADDRH(rx->channel_number),
2776 DMA_ADDR_HIGH32(rx->ring_dma_ptr));
2778 RX_BASE_ADDRL(rx->channel_number),
2779 DMA_ADDR_LOW32(rx->ring_dma_ptr));
2781 /* set rx write back address */
2783 RX_HEAD_WRITEBACK_ADDRH(rx->channel_number),
2784 DMA_ADDR_HIGH32(rx->head_dma_ptr));
2786 RX_HEAD_WRITEBACK_ADDRL(rx->channel_number),
2787 DMA_ADDR_LOW32(rx->head_dma_ptr));
2798 RX_CFG_A(rx->channel_number), data);
2801 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number));
2808 data |= ((rx->ring_size) & RX_CFG_B_RX_RING_LEN_MASK_);
2812 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data);
2813 rx->vector_flags = lan743x_intr_get_vector_flags(adapter,
2815 (rx->channel_number));
2819 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR)
2821 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR)
2823 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C)
2825 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C)
2827 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data);
2829 rx->last_tail = ((u32)(rx->ring_size - 1));
2830 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number),
2831 rx->last_tail);
2832 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number));
2833 if (rx->last_head) {
2838 napi_enable(&rx->napi);
2841 INT_BIT_DMA_RX_(rx->channel_number));
2843 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2845 DMAC_INT_BIT_RXFRM_(rx->channel_number));
2847 DMAC_CMD_START_R_(rx->channel_number));
2851 FCT_RX_CTL_RESET_(rx->channel_number));
2853 FCT_RX_CTL_RESET_(rx->channel_number),
2855 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number),
2862 FCT_RX_CTL_EN_(rx->channel_number));
2866 netif_napi_del(&rx->napi);
2867 lan743x_rx_ring_cleanup(rx);
3241 lan743x_rx_close(&adapter->rx[index]);
3279 ret = lan743x_rx_open(&adapter->rx[index]);
3313 if (adapter->rx[index].ring_cpu_ptr)
3314 lan743x_rx_close(&adapter->rx[index]);
3538 adapter->rx[index].adapter = adapter;
3539 adapter->rx[index].channel_number = index;