droq 631 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c struct octeon_droq *droq = oct->droq[oq_no]; droq 639 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c droq->desc_ring_dma); droq 640 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c octeon_write_csr(oct, CN23XX_SLI_OQ_SIZE(oq_no), droq->max_count); droq 643 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c droq->buffer_size); droq 646 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c droq->pkts_sent_reg = droq 648 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c droq->pkts_credit_reg = droq 948 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c struct octeon_droq *droq = oct->droq[ioq_vector->droq_index]; droq 952 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c if (!droq) { droq 958 drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c pkts_sent = readq(droq->pkts_sent_reg); droq 247 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c struct octeon_droq *droq = oct->droq[oq_no]; droq 250 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c droq->desc_ring_dma); droq 251 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c octeon_write_csr(oct, CN23XX_VF_SLI_OQ_SIZE(oq_no), droq->max_count); droq 254 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c droq->buffer_size); droq 257 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c droq->pkts_sent_reg = droq 259 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c droq->pkts_credit_reg = droq 491 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c struct octeon_droq *droq = oct->droq[ioq_vector->droq_index]; droq 496 drivers/net/ethernet/cavium/liquidio/cn23xx_vf_device.c pkts_sent = readq(droq->pkts_sent_reg); droq 304 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c struct octeon_droq *droq = oct->droq[oq_no]; droq 307 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c droq->desc_ring_dma); droq 308 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c octeon_write_csr(oct, CN6XXX_SLI_OQ_SIZE(oq_no), droq->max_count); droq 311 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c droq->buffer_size); droq 314 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c droq->pkts_sent_reg = droq 316 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c droq->pkts_credit_reg = droq 508 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c struct octeon_droq *droq; droq 529 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c droq = oct->droq[oq_no]; droq 530 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c pkt_count = octeon_droq_check_hw_for_pkts(droq); droq 533 drivers/net/ethernet/cavium/liquidio/cn66xx_device.c if (droq->ops.poll_mode) { droq 429 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq) droq 433 drivers/net/ethernet/cavium/liquidio/lio_core.c struct cavium_wq *wq = &lio->rxq_status_wq[droq->q_no]; droq 445 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq = oct->droq[q_no]; droq 447 drivers/net/ethernet/cavium/liquidio/lio_core.c if (!ifstate_check(lio, LIO_IFSTATE_RUNNING) || !droq) droq 450 drivers/net/ethernet/cavium/liquidio/lio_core.c if (octeon_retry_droq_refill(droq)) droq 451 drivers/net/ethernet/cavium/liquidio/lio_core.c octeon_schedule_rxq_oom_work(oct, droq); droq 553 drivers/net/ethernet/cavium/liquidio/lio_core.c writel(oct->droq[q_no]->max_count, oct->droq[q_no]->pkts_credit_reg); droq 575 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq = droq 591 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->stats.rx_dropped++; droq 597 drivers/net/ethernet/cavium/liquidio/lio_core.c skb_record_rx_queue(skb, droq->q_no); droq 677 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->stats.rx_vxlan++; droq 692 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->stats.rx_bytes_received += len - droq 694 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->stats.rx_pkts_received++; droq 720 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq = arg; droq 723 drivers/net/ethernet/cavium/liquidio/lio_core.c oct = droq->oct_dev; droq 726 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->cpu_id == this_cpu) { droq 727 drivers/net/ethernet/cavium/liquidio/lio_core.c napi_schedule_irqoff(&droq->napi); droq 729 drivers/net/ethernet/cavium/liquidio/lio_core.c call_single_data_t *csd = &droq->csd; droq 732 drivers/net/ethernet/cavium/liquidio/lio_core.c csd->info = &droq->napi; droq 735 drivers/net/ethernet/cavium/liquidio/lio_core.c smp_call_function_single_async(droq->cpu_id, csd); droq 748 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq; droq 752 drivers/net/ethernet/cavium/liquidio/lio_core.c droq = container_of(napi, struct octeon_droq, napi); droq 753 drivers/net/ethernet/cavium/liquidio/lio_core.c oct = droq->oct_dev; droq 754 drivers/net/ethernet/cavium/liquidio/lio_core.c iq_no = droq->q_no; droq 757 drivers/net/ethernet/cavium/liquidio/lio_core.c work_done = octeon_droq_process_poll_pkts(oct, droq, budget); droq 784 drivers/net/ethernet/cavium/liquidio/lio_core.c (droq->pkt_count >= MAX_REG_CNT)) { droq 788 drivers/net/ethernet/cavium/liquidio/lio_core.c octeon_enable_irq(droq->oct_dev, droq->q_no); droq 809 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq; droq 852 drivers/net/ethernet/cavium/liquidio/lio_core.c droq = octeon_dev->droq[q_no]; droq 853 drivers/net/ethernet/cavium/liquidio/lio_core.c napi = &droq->napi; droq 859 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->cpu_id = cpu_id; droq 873 drivers/net/ethernet/cavium/liquidio/lio_core.c octeon_dev->droq[0]->ops.poll_mode = 0; droq 906 drivers/net/ethernet/cavium/liquidio/lio_core.c int liquidio_schedule_msix_droq_pkt_handler(struct octeon_droq *droq, u64 ret) droq 908 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_device *oct = droq->oct_dev; droq 912 drivers/net/ethernet/cavium/liquidio/lio_core.c if (droq->ops.poll_mode) { droq 913 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->ops.napi_fn(droq); droq 935 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq = oct->droq[ioq_vector->droq_index]; droq 941 drivers/net/ethernet/cavium/liquidio/lio_core.c liquidio_schedule_msix_droq_pkt_handler(droq, ret); droq 954 drivers/net/ethernet/cavium/liquidio/lio_core.c struct octeon_droq *droq; droq 963 drivers/net/ethernet/cavium/liquidio/lio_core.c droq = oct->droq[oq_no]; droq 965 drivers/net/ethernet/cavium/liquidio/lio_core.c if (droq->ops.poll_mode) { droq 966 drivers/net/ethernet/cavium/liquidio/lio_core.c droq->ops.napi_fn(droq); droq 1273 drivers/net/ethernet/cavium/liquidio/lio_core.c atomic_read(&oct->droq[idx]->pkts_pending); droq 971 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c rx_pending = oct->droq[0]->max_count; droq 1215 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c writel(oct->droq[i]->max_count, droq 1216 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct->droq[i]->pkts_credit_reg); droq 1275 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c rx_count_old = oct->droq[0]->max_count; droq 1683 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_pkts_received); droq 1686 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_bytes_received); droq 1688 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.dropped_nomem + droq 1689 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.dropped_toomany + droq 1690 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.rx_dropped); droq 1692 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.dropped_nomem); droq 1694 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.dropped_toomany); droq 1696 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_dropped); droq 1700 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.pkts_received); droq 1702 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.bytes_received); droq 1704 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.dropped_nodispatch); droq 1707 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_vxlan); droq 1709 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_alloc_failure); droq 1803 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.rx_pkts_received); droq 1806 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.rx_bytes_received); droq 1807 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.dropped_nomem + droq 1808 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.dropped_toomany + droq 1809 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c oct_dev->droq[j]->stats.rx_dropped); droq 1810 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.dropped_nomem); droq 1811 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.dropped_toomany); droq 1812 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.rx_dropped); droq 1815 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.pkts_received); droq 1816 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.bytes_received); droq 1818 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.dropped_nodispatch); droq 1820 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c data[i++] = CVM_CAST64(oct_dev->droq[j]->stats.rx_vxlan); droq 1822 drivers/net/ethernet/cavium/liquidio/lio_ethtool.c CVM_CAST64(oct_dev->droq[j]->stats.rx_alloc_failure); droq 176 drivers/net/ethernet/cavium/liquidio/lio_main.c reschedule |= octeon_droq_process_packets(oct, oct->droq[q_no], droq 178 drivers/net/ethernet/cavium/liquidio/lio_main.c lio_enable_irq(oct->droq[q_no], NULL); droq 211 drivers/net/ethernet/cavium/liquidio/lio_main.c pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); droq 1271 drivers/net/ethernet/cavium/liquidio/lio_main.c oct->droq[0]->ops.poll_mode = 0; droq 1829 drivers/net/ethernet/cavium/liquidio/lio_main.c oct->droq[0]->ops.poll_mode = 1; droq 1923 drivers/net/ethernet/cavium/liquidio/lio_main.c oct->droq[0]->ops.poll_mode = 0; droq 2095 drivers/net/ethernet/cavium/liquidio/lio_main.c oq_stats = &oct->droq[oq_no]->stats; droq 4247 drivers/net/ethernet/cavium/liquidio/lio_main.c writel(octeon_dev->droq[j]->max_count, droq 4248 drivers/net/ethernet/cavium/liquidio/lio_main.c octeon_dev->droq[j]->pkts_credit_reg); droq 88 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c pkt_cnt += octeon_droq_check_hw_for_pkts(oct->droq[i]); droq 683 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c oct->droq[0]->ops.poll_mode = 0; droq 921 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c oct->droq[0]->ops.poll_mode = 1; droq 983 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c oct->droq[0]->ops.poll_mode = 0; droq 1200 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c oq_stats = &oct->droq[oq_no]->stats; droq 2399 drivers/net/ethernet/cavium/liquidio/lio_vf_main.c writel(oct->droq[j]->max_count, oct->droq[j]->pkts_credit_reg); droq 651 drivers/net/ethernet/cavium/liquidio/octeon_device.c vfree(oct->droq[i]); droq 929 drivers/net/ethernet/cavium/liquidio/octeon_device.c oct->droq[0] = vzalloc_node(sizeof(*oct->droq[0]), numa_node); droq 930 drivers/net/ethernet/cavium/liquidio/octeon_device.c if (!oct->droq[0]) droq 931 drivers/net/ethernet/cavium/liquidio/octeon_device.c oct->droq[0] = vzalloc(sizeof(*oct->droq[0])); droq 932 drivers/net/ethernet/cavium/liquidio/octeon_device.c if (!oct->droq[0]) droq 936 drivers/net/ethernet/cavium/liquidio/octeon_device.c vfree(oct->droq[oq_no]); droq 937 drivers/net/ethernet/cavium/liquidio/octeon_device.c oct->droq[oq_no] = NULL; droq 1284 drivers/net/ethernet/cavium/liquidio/octeon_device.c return oct->droq[q_no]->max_count; droq 1433 drivers/net/ethernet/cavium/liquidio/octeon_device.c void lio_enable_irq(struct octeon_droq *droq, struct octeon_instr_queue *iq) droq 1440 drivers/net/ethernet/cavium/liquidio/octeon_device.c if (droq) { droq 1441 drivers/net/ethernet/cavium/liquidio/octeon_device.c pkts_pend = (u32)atomic_read(&droq->pkts_pending); droq 1442 drivers/net/ethernet/cavium/liquidio/octeon_device.c writel(droq->pkt_count - pkts_pend, droq->pkts_sent_reg); droq 1443 drivers/net/ethernet/cavium/liquidio/octeon_device.c droq->pkt_count = pkts_pend; droq 1444 drivers/net/ethernet/cavium/liquidio/octeon_device.c oct = droq->oct_dev; droq 1459 drivers/net/ethernet/cavium/liquidio/octeon_device.c if (droq) droq 1460 drivers/net/ethernet/cavium/liquidio/octeon_device.c writeq(CN23XX_INTR_RESEND, droq->pkts_sent_reg); droq 495 drivers/net/ethernet/cavium/liquidio/octeon_device.h struct octeon_droq *droq[MAX_POSSIBLE_OCTEON_OUTPUT_QUEUES]; droq 901 drivers/net/ethernet/cavium/liquidio/octeon_device.h void lio_enable_irq(struct octeon_droq *droq, struct octeon_instr_queue *iq); droq 94 drivers/net/ethernet/cavium/liquidio/octeon_droq.c u32 octeon_droq_check_hw_for_pkts(struct octeon_droq *droq) droq 99 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pkt_count = readl(droq->pkts_sent_reg); droq 101 drivers/net/ethernet/cavium/liquidio/octeon_droq.c last_count = pkt_count - droq->pkt_count; droq 102 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->pkt_count = pkt_count; droq 106 drivers/net/ethernet/cavium/liquidio/octeon_droq.c atomic_add(last_count, &droq->pkts_pending); droq 111 drivers/net/ethernet/cavium/liquidio/octeon_droq.c static void octeon_droq_compute_max_packet_bufs(struct octeon_droq *droq) droq 120 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_empty_descs = 0; droq 123 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_empty_descs++; droq 124 drivers/net/ethernet/cavium/liquidio/octeon_droq.c count += droq->buffer_size; droq 127 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_empty_descs = droq->max_count - droq->max_empty_descs; droq 130 drivers/net/ethernet/cavium/liquidio/octeon_droq.c static void octeon_droq_reset_indices(struct octeon_droq *droq) droq 132 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx = 0; droq 133 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->write_idx = 0; droq 134 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_idx = 0; droq 135 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count = 0; droq 136 drivers/net/ethernet/cavium/liquidio/octeon_droq.c atomic_set(&droq->pkts_pending, 0); droq 141 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq) droq 146 drivers/net/ethernet/cavium/liquidio/octeon_droq.c for (i = 0; i < droq->max_count; i++) { droq 147 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pg_info = &droq->recv_buf_list[i].pg_info; droq 157 drivers/net/ethernet/cavium/liquidio/octeon_droq.c recv_buffer_destroy(droq->recv_buf_list[i].buffer, droq 160 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[i].buffer = NULL; droq 163 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_reset_indices(droq); droq 168 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq) droq 172 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq_desc *desc_ring = droq->desc_ring; droq 174 drivers/net/ethernet/cavium/liquidio/octeon_droq.c for (i = 0; i < droq->max_count; i++) { droq 175 drivers/net/ethernet/cavium/liquidio/octeon_droq.c buf = recv_buffer_alloc(oct, &droq->recv_buf_list[i].pg_info); droq 180 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.rx_alloc_failure++; droq 184 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[i].buffer = buf; droq 185 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[i].data = get_rbd(buf); droq 188 drivers/net/ethernet/cavium/liquidio/octeon_droq.c lio_map_ring(droq->recv_buf_list[i].buffer); droq 191 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_reset_indices(droq); droq 193 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_compute_max_packet_bufs(droq); droq 200 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq = oct->droq[q_no]; droq 204 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_destroy_ring_buffers(oct, droq); droq 205 drivers/net/ethernet/cavium/liquidio/octeon_droq.c vfree(droq->recv_buf_list); droq 207 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->desc_ring) droq 208 drivers/net/ethernet/cavium/liquidio/octeon_droq.c lio_dma_free(oct, (droq->max_count * OCT_DROQ_DESC_SIZE), droq 209 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->desc_ring, droq->desc_ring_dma); droq 211 drivers/net/ethernet/cavium/liquidio/octeon_droq.c memset(droq, 0, OCT_DROQ_SIZE); droq 213 drivers/net/ethernet/cavium/liquidio/octeon_droq.c vfree(oct->droq[q_no]); droq 214 drivers/net/ethernet/cavium/liquidio/octeon_droq.c oct->droq[q_no] = NULL; droq 226 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq; droq 233 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq = oct->droq[q_no]; droq 234 drivers/net/ethernet/cavium/liquidio/octeon_droq.c memset(droq, 0, OCT_DROQ_SIZE); droq 236 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->oct_dev = oct; droq 237 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->q_no = q_no; droq 239 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->app_ctx = app_ctx; droq 241 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->app_ctx = (void *)(size_t)q_no; droq 265 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count = c_num_descs; droq 266 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->buffer_size = c_buf_size; droq 268 drivers/net/ethernet/cavium/liquidio/octeon_droq.c desc_ring_size = droq->max_count * OCT_DROQ_DESC_SIZE; droq 269 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->desc_ring = lio_dma_alloc(oct, desc_ring_size, droq 270 drivers/net/ethernet/cavium/liquidio/octeon_droq.c (dma_addr_t *)&droq->desc_ring_dma); droq 272 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq->desc_ring) { droq 279 drivers/net/ethernet/cavium/liquidio/octeon_droq.c q_no, droq->desc_ring, droq->desc_ring_dma); droq 281 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 283 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list = (struct octeon_recv_buffer *) droq 284 drivers/net/ethernet/cavium/liquidio/octeon_droq.c vzalloc_node(array_size(droq->max_count, OCT_DROQ_RECVBUF_SIZE), droq 286 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq->recv_buf_list) droq 287 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list = (struct octeon_recv_buffer *) droq 288 drivers/net/ethernet/cavium/liquidio/octeon_droq.c vzalloc(array_size(droq->max_count, droq 290 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq->recv_buf_list) { droq 295 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (octeon_droq_setup_ring_buffers(oct, droq)) droq 298 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->pkts_per_intr = c_pkts_per_intr; droq 299 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_threshold = c_refill_threshold; droq 302 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_empty_descs); droq 304 drivers/net/ethernet/cavium/liquidio/octeon_droq.c INIT_LIST_HEAD(&droq->dispatch_list); droq 337 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, droq 347 drivers/net/ethernet/cavium/liquidio/octeon_droq.c info = (struct octeon_droq_info *)droq->recv_buf_list[idx].data; droq 364 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pg_info = &droq->recv_buf_list[idx].pg_info; droq 374 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->buffer_size) ? droq->buffer_size : bytes_left; droq 376 drivers/net/ethernet/cavium/liquidio/octeon_droq.c recv_pkt->buffer_ptr[i] = droq->recv_buf_list[idx].buffer; droq 377 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[idx].buffer = NULL; droq 379 drivers/net/ethernet/cavium/liquidio/octeon_droq.c idx = incr_index(idx, 1, droq->max_count); droq 380 drivers/net/ethernet/cavium/liquidio/octeon_droq.c bytes_left -= droq->buffer_size; droq 392 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_refill_pullup_descs(struct octeon_droq *droq, droq 397 drivers/net/ethernet/cavium/liquidio/octeon_droq.c u32 refill_index = droq->refill_idx; droq 399 drivers/net/ethernet/cavium/liquidio/octeon_droq.c while (refill_index != droq->read_idx) { droq 400 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->recv_buf_list[refill_index].buffer) { droq 401 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->refill_idx].buffer = droq 402 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[refill_index].buffer; droq 403 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->refill_idx].data = droq 404 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[refill_index].data; droq 405 drivers/net/ethernet/cavium/liquidio/octeon_droq.c desc_ring[droq->refill_idx].buffer_ptr = droq 407 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[refill_index].buffer = NULL; droq 410 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_idx = incr_index(droq->refill_idx, droq 412 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 414 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count--; droq 415 drivers/net/ethernet/cavium/liquidio/octeon_droq.c } while (droq->recv_buf_list[droq->refill_idx].buffer); droq 417 drivers/net/ethernet/cavium/liquidio/octeon_droq.c refill_index = incr_index(refill_index, 1, droq->max_count); droq 434 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_refill(struct octeon_device *octeon_dev, struct octeon_droq *droq) droq 442 drivers/net/ethernet/cavium/liquidio/octeon_droq.c desc_ring = droq->desc_ring; droq 444 drivers/net/ethernet/cavium/liquidio/octeon_droq.c while (droq->refill_count && (desc_refilled < droq->max_count)) { droq 448 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq->recv_buf_list[droq->refill_idx].buffer) { droq 450 drivers/net/ethernet/cavium/liquidio/octeon_droq.c &droq->recv_buf_list[droq->refill_idx].pg_info; droq 462 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.rx_alloc_failure++; droq 465 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->refill_idx].buffer = droq 469 drivers/net/ethernet/cavium/liquidio/octeon_droq.c data = get_rbd(droq->recv_buf_list droq 470 drivers/net/ethernet/cavium/liquidio/octeon_droq.c [droq->refill_idx].buffer); droq 473 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->refill_idx].data = data; droq 475 drivers/net/ethernet/cavium/liquidio/octeon_droq.c desc_ring[droq->refill_idx].buffer_ptr = droq 476 drivers/net/ethernet/cavium/liquidio/octeon_droq.c lio_map_ring(droq->recv_buf_list[ droq 477 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_idx].buffer); droq 479 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_idx = incr_index(droq->refill_idx, 1, droq 480 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 482 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count--; droq 485 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->refill_count) droq 487 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_refill_pullup_descs(droq, desc_ring); droq 501 drivers/net/ethernet/cavium/liquidio/octeon_droq.c int octeon_retry_droq_refill(struct octeon_droq *droq) droq 503 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_device *oct = droq->oct_dev; droq 507 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pkts_credit = readl(droq->pkts_credit_reg); droq 508 drivers/net/ethernet/cavium/liquidio/octeon_droq.c desc_refilled = octeon_droq_refill(oct, droq); droq 515 drivers/net/ethernet/cavium/liquidio/octeon_droq.c writel(desc_refilled, droq->pkts_credit_reg); droq 532 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, droq 540 drivers/net/ethernet/cavium/liquidio/octeon_droq.c cnt = octeon_droq_get_bufcount(droq->buffer_size, (u32)info->length); droq 545 drivers/net/ethernet/cavium/liquidio/octeon_droq.c rinfo = octeon_create_recv_info(oct, droq, cnt, droq->read_idx); droq 553 drivers/net/ethernet/cavium/liquidio/octeon_droq.c &droq->dispatch_list); droq 555 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.dropped_nomem++; droq 561 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.dropped_nodispatch++; droq 568 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, droq 576 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->read_idx].data; droq 581 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.bytes_received += info->length; droq 582 drivers/net/ethernet/cavium/liquidio/octeon_droq.c buf_cnt = octeon_droq_get_bufcount(droq->buffer_size, droq 589 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx = incr_index(droq->read_idx, buf_cnt, droq 590 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 591 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count += buf_cnt; droq 597 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, droq 613 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->read_idx].data; droq 619 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->q_no, droq->read_idx, pkt_count); droq 635 drivers/net/ethernet/cavium/liquidio/octeon_droq.c buf_cnt = octeon_droq_dispatch_pkt(oct, droq, rh, info); droq 636 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx = incr_index(droq->read_idx, droq 637 drivers/net/ethernet/cavium/liquidio/octeon_droq.c buf_cnt, droq->max_count); droq 638 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count += buf_cnt; droq 640 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (info->length <= droq->buffer_size) { droq 642 drivers/net/ethernet/cavium/liquidio/octeon_droq.c nicbuf = droq->recv_buf_list[ droq 643 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx].buffer; droq 644 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pg_info = &droq->recv_buf_list[ droq 645 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx].pg_info; droq 648 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[droq->read_idx].buffer = droq 651 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx = incr_index(droq->read_idx, 1, droq 652 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 653 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count++; droq 662 drivers/net/ethernet/cavium/liquidio/octeon_droq.c int cpy_len, idx = droq->read_idx; droq 664 drivers/net/ethernet/cavium/liquidio/octeon_droq.c cpy_len = ((pkt_len + droq->buffer_size) droq 667 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->buffer_size; droq 670 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_fast_packet_next(droq, droq 674 drivers/net/ethernet/cavium/liquidio/octeon_droq.c buf = droq->recv_buf_list[ droq 677 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->recv_buf_list[idx].buffer droq 680 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.rx_alloc_failure++; droq 684 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->read_idx = droq 685 drivers/net/ethernet/cavium/liquidio/octeon_droq.c incr_index(droq->read_idx, 1, droq 686 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->max_count); droq 687 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->refill_count++; droq 692 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->ops.fptr) { droq 693 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->ops.fptr(oct->octeon_id, droq 695 drivers/net/ethernet/cavium/liquidio/octeon_droq.c rh, &droq->napi, droq 696 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->ops.farg); droq 703 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->refill_count >= droq->refill_threshold) { droq 704 drivers/net/ethernet/cavium/liquidio/octeon_droq.c int desc_refilled = octeon_droq_refill(oct, droq); droq 712 drivers/net/ethernet/cavium/liquidio/octeon_droq.c writel(desc_refilled, droq->pkts_credit_reg); droq 718 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.pkts_received += pkt; droq 719 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.bytes_received += total_len; droq 722 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if ((droq->ops.drop_on_max) && (pkts_to_process - pkt)) { droq 723 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_drop_packets(oct, droq, (pkts_to_process - pkt)); droq 725 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->stats.dropped_toomany += (pkts_to_process - pkt); droq 729 drivers/net/ethernet/cavium/liquidio/octeon_droq.c atomic_sub(retval, &droq->pkts_pending); droq 731 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (droq->refill_count >= droq->refill_threshold && droq 732 drivers/net/ethernet/cavium/liquidio/octeon_droq.c readl(droq->pkts_credit_reg) < CN23XX_SLI_DEF_BP) { droq 733 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_check_hw_for_pkts(droq); droq 736 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!atomic_read(&droq->pkts_pending)) droq 737 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_schedule_rxq_oom_work(oct, droq); droq 745 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, droq 751 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_check_hw_for_pkts(droq); droq 752 drivers/net/ethernet/cavium/liquidio/octeon_droq.c pkt_count = atomic_read(&droq->pkts_pending); droq 760 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_fast_process_packets(oct, droq, pkt_count); droq 762 drivers/net/ethernet/cavium/liquidio/octeon_droq.c list_for_each_safe(tmp, tmp2, &droq->dispatch_list) { droq 774 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (atomic_read(&droq->pkts_pending)) droq 787 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq, u32 budget) droq 793 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (budget > droq->max_count) droq 794 drivers/net/ethernet/cavium/liquidio/octeon_droq.c budget = droq->max_count; droq 797 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_check_hw_for_pkts(droq); droq 800 drivers/net/ethernet/cavium/liquidio/octeon_droq.c (u32)(atomic_read(&droq->pkts_pending))); droq 806 drivers/net/ethernet/cavium/liquidio/octeon_droq.c octeon_droq_fast_process_packets(oct, droq, droq 812 drivers/net/ethernet/cavium/liquidio/octeon_droq.c list_for_each_safe(tmp, tmp2, &droq->dispatch_list) { droq 854 drivers/net/ethernet/cavium/liquidio/octeon_droq.c lio_enable_irq(oct->droq[q_no], oct->instr_queue[q_no]); droq 858 drivers/net/ethernet/cavium/liquidio/octeon_droq.c lio_enable_irq(oct->droq[q_no], oct->instr_queue[q_no]); droq 872 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq; droq 891 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq = oct->droq[q_no]; droq 892 drivers/net/ethernet/cavium/liquidio/octeon_droq.c memcpy(&droq->ops, ops, sizeof(struct octeon_droq_ops)); droq 900 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq; droq 913 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq = oct->droq[q_no]; droq 915 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq) { droq 921 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->ops.fptr = NULL; droq 922 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->ops.farg = NULL; droq 923 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq->ops.drop_on_max = 0; droq 932 drivers/net/ethernet/cavium/liquidio/octeon_droq.c struct octeon_droq *droq; droq 935 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (oct->droq[q_no]) { droq 942 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq = vmalloc_node(sizeof(*droq), numa_node); droq 943 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq) droq 944 drivers/net/ethernet/cavium/liquidio/octeon_droq.c droq = vmalloc(sizeof(*droq)); droq 945 drivers/net/ethernet/cavium/liquidio/octeon_droq.c if (!droq) droq 948 drivers/net/ethernet/cavium/liquidio/octeon_droq.c memset(droq, 0, sizeof(struct octeon_droq)); droq 952 drivers/net/ethernet/cavium/liquidio/octeon_droq.c oct->droq[q_no] = droq; droq 956 drivers/net/ethernet/cavium/liquidio/octeon_droq.c vfree(oct->droq[q_no]); droq 957 drivers/net/ethernet/cavium/liquidio/octeon_droq.c oct->droq[q_no] = NULL; droq 400 drivers/net/ethernet/cavium/liquidio/octeon_droq.h u32 octeon_droq_check_hw_for_pkts(struct octeon_droq *droq); droq 406 drivers/net/ethernet/cavium/liquidio/octeon_droq.h struct octeon_droq *droq, droq 410 drivers/net/ethernet/cavium/liquidio/octeon_droq.h struct octeon_droq *droq, u32 budget); droq 414 drivers/net/ethernet/cavium/liquidio/octeon_droq.h int octeon_retry_droq_refill(struct octeon_droq *droq); droq 222 drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c if (!oct->droq[i]) droq 224 drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c stats->rx_packets += oct->droq[i]->stats.rx_pkts_received; droq 225 drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c stats->rx_bytes += oct->droq[i]->stats.rx_bytes_received; droq 75 drivers/net/ethernet/cavium/liquidio/octeon_main.h struct octeon_droq *droq); droq 490 drivers/net/ethernet/cavium/liquidio/octeon_network.h static inline void octeon_fast_packet_next(struct octeon_droq *droq, droq 495 drivers/net/ethernet/cavium/liquidio/octeon_network.h skb_put_data(nicbuf, get_rbd(droq->recv_buf_list[idx].buffer),