Lines Matching full:rx

197 	struct lan743x_rx *rx = context;  in lan743x_rx_isr()  local
198 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_isr()
203 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
206 if (int_sts & INT_BIT_DMA_RX_(rx->channel_number)) { in lan743x_rx_isr()
207 u32 rx_frame_bit = DMAC_INT_BIT_RXFRM_(rx->channel_number); in lan743x_rx_isr()
224 napi_schedule(&rx->napi); in lan743x_rx_isr()
232 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_isr()
247 lan743x_rx_isr(&adapter->rx[channel], in lan743x_intr_shared_isr()
642 /* map RX interrupt to vector */ in lan743x_intr_open()
652 /* Remove RX interrupt from shared mask */ in lan743x_intr_open()
656 &adapter->rx[index]); in lan743x_intr_open()
1892 static int lan743x_rx_next_index(struct lan743x_rx *rx, int index) in lan743x_rx_next_index() argument
1894 return ((++index) % rx->ring_size); in lan743x_rx_next_index()
1897 static struct sk_buff *lan743x_rx_allocate_skb(struct lan743x_rx *rx) in lan743x_rx_allocate_skb() argument
1902 return __netdev_alloc_skb(rx->adapter->netdev, in lan743x_rx_allocate_skb()
1906 static int lan743x_rx_init_ring_element(struct lan743x_rx *rx, int index, in lan743x_rx_init_ring_element() argument
1914 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_init_ring_element()
1915 buffer_info = &rx->buffer_info[index]; in lan743x_rx_init_ring_element()
1919 buffer_info->dma_ptr = dma_map_single(&rx->adapter->pdev->dev, in lan743x_rx_init_ring_element()
1923 if (dma_mapping_error(&rx->adapter->pdev->dev, in lan743x_rx_init_ring_element()
1940 static void lan743x_rx_reuse_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_reuse_ring_element() argument
1945 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_reuse_ring_element()
1946 buffer_info = &rx->buffer_info[index]; in lan743x_rx_reuse_ring_element()
1956 static void lan743x_rx_release_ring_element(struct lan743x_rx *rx, int index) in lan743x_rx_release_ring_element() argument
1961 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_release_ring_element()
1962 buffer_info = &rx->buffer_info[index]; in lan743x_rx_release_ring_element()
1967 dma_unmap_single(&rx->adapter->pdev->dev, in lan743x_rx_release_ring_element()
1982 static int lan743x_rx_process_packet(struct lan743x_rx *rx) in lan743x_rx_process_packet() argument
1993 current_head_index = *rx->head_cpu_ptr; in lan743x_rx_process_packet()
1994 if (current_head_index < 0 || current_head_index >= rx->ring_size) in lan743x_rx_process_packet()
1997 if (rx->last_head < 0 || rx->last_head >= rx->ring_size) in lan743x_rx_process_packet()
2000 if (rx->last_head != current_head_index) { in lan743x_rx_process_packet()
2001 descriptor = &rx->ring_cpu_ptr[rx->last_head]; in lan743x_rx_process_packet()
2008 first_index = rx->last_head; in lan743x_rx_process_packet()
2010 last_index = rx->last_head; in lan743x_rx_process_packet()
2014 index = lan743x_rx_next_index(rx, first_index); in lan743x_rx_process_packet()
2016 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_process_packet()
2024 index = lan743x_rx_next_index(rx, index); in lan743x_rx_process_packet()
2028 descriptor = &rx->ring_cpu_ptr[last_index]; in lan743x_rx_process_packet()
2031 int index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2034 descriptor = &rx->ring_cpu_ptr[index]; in lan743x_rx_process_packet()
2066 new_skb = lan743x_rx_allocate_skb(rx); in lan743x_rx_process_packet()
2072 lan743x_rx_reuse_ring_element(rx, first_index); in lan743x_rx_process_packet()
2076 buffer_info = &rx->buffer_info[first_index]; in lan743x_rx_process_packet()
2078 descriptor = &rx->ring_cpu_ptr[first_index]; in lan743x_rx_process_packet()
2082 dma_unmap_single(&rx->adapter->pdev->dev, in lan743x_rx_process_packet()
2094 rx->adapter->netdev); in lan743x_rx_process_packet()
2095 lan743x_rx_init_ring_element(rx, first_index, new_skb); in lan743x_rx_process_packet()
2108 lan743x_rx_reuse_ring_element(rx, in lan743x_rx_process_packet()
2110 index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2116 lan743x_rx_reuse_ring_element(rx, in lan743x_rx_process_packet()
2118 index = lan743x_rx_next_index(rx, in lan743x_rx_process_packet()
2126 descriptor = &rx->ring_cpu_ptr[extension_index]; in lan743x_rx_process_packet()
2127 buffer_info = &rx->buffer_info[extension_index]; in lan743x_rx_process_packet()
2132 lan743x_rx_reuse_ring_element(rx, extension_index); in lan743x_rx_process_packet()
2149 napi_gro_receive(&rx->napi, skb); in lan743x_rx_process_packet()
2154 rx->last_tail = real_last_index; in lan743x_rx_process_packet()
2155 rx->last_head = lan743x_rx_next_index(rx, real_last_index); in lan743x_rx_process_packet()
2163 struct lan743x_rx *rx = container_of(napi, struct lan743x_rx, napi); in lan743x_rx_napi_poll() local
2164 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_napi_poll()
2168 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_W2C) { in lan743x_rx_napi_poll()
2171 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_napi_poll()
2175 int rx_process_result = lan743x_rx_process_packet(rx); in lan743x_rx_napi_poll()
2187 rx->frame_count += count; in lan743x_rx_napi_poll()
2194 if (rx->vector_flags & LAN743X_VECTOR_FLAG_VECTOR_ENABLE_AUTO_SET) in lan743x_rx_napi_poll()
2196 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_SET) { in lan743x_rx_napi_poll()
2200 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_napi_poll()
2204 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_napi_poll()
2205 rx_tail_flags | rx->last_tail); in lan743x_rx_napi_poll()
2210 static void lan743x_rx_ring_cleanup(struct lan743x_rx *rx) in lan743x_rx_ring_cleanup() argument
2212 if (rx->buffer_info && rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2215 for (index = 0; index < rx->ring_size; index++) in lan743x_rx_ring_cleanup()
2216 lan743x_rx_release_ring_element(rx, index); in lan743x_rx_ring_cleanup()
2219 if (rx->head_cpu_ptr) { in lan743x_rx_ring_cleanup()
2220 pci_free_consistent(rx->adapter->pdev, in lan743x_rx_ring_cleanup()
2221 sizeof(*rx->head_cpu_ptr), in lan743x_rx_ring_cleanup()
2222 rx->head_cpu_ptr, in lan743x_rx_ring_cleanup()
2223 rx->head_dma_ptr); in lan743x_rx_ring_cleanup()
2224 rx->head_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2225 rx->head_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2228 kfree(rx->buffer_info); in lan743x_rx_ring_cleanup()
2229 rx->buffer_info = NULL; in lan743x_rx_ring_cleanup()
2231 if (rx->ring_cpu_ptr) { in lan743x_rx_ring_cleanup()
2232 pci_free_consistent(rx->adapter->pdev, in lan743x_rx_ring_cleanup()
2233 rx->ring_allocation_size, in lan743x_rx_ring_cleanup()
2234 rx->ring_cpu_ptr, in lan743x_rx_ring_cleanup()
2235 rx->ring_dma_ptr); in lan743x_rx_ring_cleanup()
2236 rx->ring_allocation_size = 0; in lan743x_rx_ring_cleanup()
2237 rx->ring_cpu_ptr = NULL; in lan743x_rx_ring_cleanup()
2238 rx->ring_dma_ptr = 0; in lan743x_rx_ring_cleanup()
2241 rx->ring_size = 0; in lan743x_rx_ring_cleanup()
2242 rx->last_head = 0; in lan743x_rx_ring_cleanup()
2245 static int lan743x_rx_ring_init(struct lan743x_rx *rx) in lan743x_rx_ring_init() argument
2253 rx->ring_size = LAN743X_RX_RING_SIZE; in lan743x_rx_ring_init()
2254 if (rx->ring_size <= 1) { in lan743x_rx_ring_init()
2258 if (rx->ring_size & ~RX_CFG_B_RX_RING_LEN_MASK_) { in lan743x_rx_ring_init()
2262 ring_allocation_size = ALIGN(rx->ring_size * in lan743x_rx_ring_init()
2266 cpu_ptr = pci_zalloc_consistent(rx->adapter->pdev, in lan743x_rx_ring_init()
2272 rx->ring_allocation_size = ring_allocation_size; in lan743x_rx_ring_init()
2273 rx->ring_cpu_ptr = (struct lan743x_rx_descriptor *)cpu_ptr; in lan743x_rx_ring_init()
2274 rx->ring_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2276 cpu_ptr = kcalloc(rx->ring_size, sizeof(*rx->buffer_info), in lan743x_rx_ring_init()
2282 rx->buffer_info = (struct lan743x_rx_buffer_info *)cpu_ptr; in lan743x_rx_ring_init()
2284 cpu_ptr = pci_zalloc_consistent(rx->adapter->pdev, in lan743x_rx_ring_init()
2285 sizeof(*rx->head_cpu_ptr), &dma_ptr); in lan743x_rx_ring_init()
2291 rx->head_cpu_ptr = cpu_ptr; in lan743x_rx_ring_init()
2292 rx->head_dma_ptr = dma_ptr; in lan743x_rx_ring_init()
2293 if (rx->head_dma_ptr & 0x3) { in lan743x_rx_ring_init()
2298 rx->last_head = 0; in lan743x_rx_ring_init()
2299 for (index = 0; index < rx->ring_size; index++) { in lan743x_rx_ring_init()
2300 struct sk_buff *new_skb = lan743x_rx_allocate_skb(rx); in lan743x_rx_ring_init()
2302 ret = lan743x_rx_init_ring_element(rx, index, new_skb); in lan743x_rx_ring_init()
2309 lan743x_rx_ring_cleanup(rx); in lan743x_rx_ring_init()
2313 static void lan743x_rx_close(struct lan743x_rx *rx) in lan743x_rx_close() argument
2315 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_close()
2318 FCT_RX_CTL_DIS_(rx->channel_number)); in lan743x_rx_close()
2320 FCT_RX_CTL_EN_(rx->channel_number), in lan743x_rx_close()
2324 DMAC_CMD_STOP_R_(rx->channel_number)); in lan743x_rx_close()
2325 lan743x_dmac_rx_wait_till_stopped(adapter, rx->channel_number); in lan743x_rx_close()
2328 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_close()
2330 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_close()
2331 napi_disable(&rx->napi); in lan743x_rx_close()
2333 netif_napi_del(&rx->napi); in lan743x_rx_close()
2335 lan743x_rx_ring_cleanup(rx); in lan743x_rx_close()
2338 static int lan743x_rx_open(struct lan743x_rx *rx) in lan743x_rx_open() argument
2340 struct lan743x_adapter *adapter = rx->adapter; in lan743x_rx_open()
2344 rx->frame_count = 0; in lan743x_rx_open()
2345 ret = lan743x_rx_ring_init(rx); in lan743x_rx_open()
2350 &rx->napi, lan743x_rx_napi_poll, in lan743x_rx_open()
2351 rx->ring_size - 1); in lan743x_rx_open()
2354 DMAC_CMD_RX_SWR_(rx->channel_number)); in lan743x_rx_open()
2356 DMAC_CMD_RX_SWR_(rx->channel_number), in lan743x_rx_open()
2361 RX_BASE_ADDRH(rx->channel_number), in lan743x_rx_open()
2362 DMA_ADDR_HIGH32(rx->ring_dma_ptr)); in lan743x_rx_open()
2364 RX_BASE_ADDRL(rx->channel_number), in lan743x_rx_open()
2365 DMA_ADDR_LOW32(rx->ring_dma_ptr)); in lan743x_rx_open()
2367 /* set rx write back address */ in lan743x_rx_open()
2369 RX_HEAD_WRITEBACK_ADDRH(rx->channel_number), in lan743x_rx_open()
2370 DMA_ADDR_HIGH32(rx->head_dma_ptr)); in lan743x_rx_open()
2372 RX_HEAD_WRITEBACK_ADDRL(rx->channel_number), in lan743x_rx_open()
2373 DMA_ADDR_LOW32(rx->head_dma_ptr)); in lan743x_rx_open()
2384 RX_CFG_A(rx->channel_number), data); in lan743x_rx_open()
2387 data = lan743x_csr_read(adapter, RX_CFG_B(rx->channel_number)); in lan743x_rx_open()
2394 data |= ((rx->ring_size) & RX_CFG_B_RX_RING_LEN_MASK_); in lan743x_rx_open()
2399 lan743x_csr_write(adapter, RX_CFG_B(rx->channel_number), data); in lan743x_rx_open()
2400 rx->vector_flags = lan743x_intr_get_vector_flags(adapter, in lan743x_rx_open()
2402 (rx->channel_number)); in lan743x_rx_open()
2406 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_AUTO_CLEAR) in lan743x_rx_open()
2408 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_AUTO_CLEAR) in lan743x_rx_open()
2410 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_STATUS_R2C) in lan743x_rx_open()
2412 if (rx->vector_flags & LAN743X_VECTOR_FLAG_SOURCE_ENABLE_R2C) in lan743x_rx_open()
2414 lan743x_csr_write(adapter, RX_CFG_C(rx->channel_number), data); in lan743x_rx_open()
2416 rx->last_tail = ((u32)(rx->ring_size - 1)); in lan743x_rx_open()
2417 lan743x_csr_write(adapter, RX_TAIL(rx->channel_number), in lan743x_rx_open()
2418 rx->last_tail); in lan743x_rx_open()
2419 rx->last_head = lan743x_csr_read(adapter, RX_HEAD(rx->channel_number)); in lan743x_rx_open()
2420 if (rx->last_head) { in lan743x_rx_open()
2425 napi_enable(&rx->napi); in lan743x_rx_open()
2428 INT_BIT_DMA_RX_(rx->channel_number)); in lan743x_rx_open()
2430 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2432 DMAC_INT_BIT_RXFRM_(rx->channel_number)); in lan743x_rx_open()
2434 DMAC_CMD_START_R_(rx->channel_number)); in lan743x_rx_open()
2438 FCT_RX_CTL_RESET_(rx->channel_number)); in lan743x_rx_open()
2440 FCT_RX_CTL_RESET_(rx->channel_number), in lan743x_rx_open()
2442 lan743x_csr_write(adapter, FCT_FLOW(rx->channel_number), in lan743x_rx_open()
2449 FCT_RX_CTL_EN_(rx->channel_number)); in lan743x_rx_open()
2453 netif_napi_del(&rx->napi); in lan743x_rx_open()
2454 lan743x_rx_ring_cleanup(rx); in lan743x_rx_open()
2468 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_close()
2506 ret = lan743x_rx_open(&adapter->rx[index]); in lan743x_netdev_open()
2519 if (adapter->rx[index].ring_cpu_ptr) in lan743x_netdev_open()
2520 lan743x_rx_close(&adapter->rx[index]); in lan743x_netdev_open()
2702 adapter->rx[index].adapter = adapter; in lan743x_hardware_init()
2703 adapter->rx[index].channel_number = index; in lan743x_hardware_init()