Lines Matching refs:oct
141 octeon_droq_destroy_ring_buffers(struct octeon_device *oct, in octeon_droq_destroy_ring_buffers() argument
153 lio_unmap_ring(oct->pci_dev, in octeon_droq_destroy_ring_buffers()
168 octeon_droq_setup_ring_buffers(struct octeon_device *oct, in octeon_droq_setup_ring_buffers() argument
176 buf = recv_buffer_alloc(oct, &droq->recv_buf_list[i].pg_info); in octeon_droq_setup_ring_buffers()
179 dev_err(&oct->pci_dev->dev, "%s buffer alloc failed\n", in octeon_droq_setup_ring_buffers()
199 int octeon_delete_droq(struct octeon_device *oct, u32 q_no) in octeon_delete_droq() argument
201 struct octeon_droq *droq = oct->droq[q_no]; in octeon_delete_droq()
203 dev_dbg(&oct->pci_dev->dev, "%s[%d]\n", __func__, q_no); in octeon_delete_droq()
205 octeon_droq_destroy_ring_buffers(oct, droq); in octeon_delete_droq()
209 lio_dma_free(oct, (droq->max_count * OCT_DROQ_DESC_SIZE), in octeon_delete_droq()
213 oct->io_qmask.oq &= ~(1ULL << q_no); in octeon_delete_droq()
214 vfree(oct->droq[q_no]); in octeon_delete_droq()
215 oct->droq[q_no] = NULL; in octeon_delete_droq()
216 oct->num_oqs--; in octeon_delete_droq()
222 int octeon_init_droq(struct octeon_device *oct, in octeon_init_droq() argument
231 int numa_node = dev_to_node(&oct->pci_dev->dev); in octeon_init_droq()
233 dev_dbg(&oct->pci_dev->dev, "%s[%d]\n", __func__, q_no); in octeon_init_droq()
235 droq = oct->droq[q_no]; in octeon_init_droq()
238 droq->oct_dev = oct; in octeon_init_droq()
247 if (OCTEON_CN6XXX(oct)) { in octeon_init_droq()
248 struct octeon_config *conf6x = CHIP_CONF(oct, cn6xxx); in octeon_init_droq()
253 } else if (OCTEON_CN23XX_PF(oct)) { in octeon_init_droq()
254 struct octeon_config *conf23 = CHIP_CONF(oct, cn23xx_pf); in octeon_init_droq()
258 } else if (OCTEON_CN23XX_VF(oct)) { in octeon_init_droq()
259 struct octeon_config *conf23 = CHIP_CONF(oct, cn23xx_vf); in octeon_init_droq()
271 droq->desc_ring = lio_dma_alloc(oct, desc_ring_size, in octeon_init_droq()
275 dev_err(&oct->pci_dev->dev, in octeon_init_droq()
280 dev_dbg(&oct->pci_dev->dev, "droq[%d]: desc_ring: virt: 0x%p, dma: %lx\n", in octeon_init_droq()
282 dev_dbg(&oct->pci_dev->dev, "droq[%d]: num_desc: %d\n", q_no, in octeon_init_droq()
290 dev_err(&oct->pci_dev->dev, "Output queue recv buf list alloc failed\n"); in octeon_init_droq()
294 if (octeon_droq_setup_ring_buffers(oct, droq)) in octeon_init_droq()
300 dev_dbg(&oct->pci_dev->dev, "DROQ INIT: max_empty_descs: %d\n", in octeon_init_droq()
306 oct->fn_list.setup_oq_regs(oct, q_no); in octeon_init_droq()
308 oct->io_qmask.oq |= BIT_ULL(q_no); in octeon_init_droq()
313 octeon_delete_droq(oct, q_no); in octeon_init_droq()
502 struct octeon_device *oct = droq->oct_dev; in octeon_retry_droq_refill() local
507 desc_refilled = octeon_droq_refill(oct, droq); in octeon_retry_droq_refill()
530 octeon_droq_dispatch_pkt(struct octeon_device *oct, in octeon_droq_dispatch_pkt() argument
541 disp_fn = octeon_get_dispatch(oct, (u16)rh->r.opcode, in octeon_droq_dispatch_pkt()
544 rinfo = octeon_create_recv_info(oct, droq, cnt, droq->read_idx); in octeon_droq_dispatch_pkt()
557 dev_err(&oct->pci_dev->dev, "DROQ: No dispatch function (opcode %u/%u)\n", in octeon_droq_dispatch_pkt()
566 static inline void octeon_droq_drop_packets(struct octeon_device *oct, in octeon_droq_drop_packets() argument
584 dev_err(&oct->pci_dev->dev, "DROQ: In drop: pkt with len 0\n"); in octeon_droq_drop_packets()
595 octeon_droq_fast_process_packets(struct octeon_device *oct, in octeon_droq_fast_process_packets() argument
616 dev_err(&oct->pci_dev->dev, in octeon_droq_fast_process_packets()
634 buf_cnt = octeon_droq_dispatch_pkt(oct, droq, rh, info); in octeon_droq_fast_process_packets()
645 if (recv_buffer_recycle(oct, pg_info)) in octeon_droq_fast_process_packets()
692 droq->ops.fptr(oct->octeon_id, in octeon_droq_fast_process_packets()
703 int desc_refilled = octeon_droq_refill(oct, droq); in octeon_droq_fast_process_packets()
722 octeon_droq_drop_packets(oct, droq, (pkts_to_process - pkt)); in octeon_droq_fast_process_packets()
736 octeon_schedule_rxq_oom_work(oct, droq); in octeon_droq_fast_process_packets()
743 octeon_droq_process_packets(struct octeon_device *oct, in octeon_droq_process_packets() argument
759 octeon_droq_fast_process_packets(oct, droq, pkt_count); in octeon_droq_process_packets()
767 (oct, in octeon_droq_process_packets()
786 octeon_droq_process_poll_pkts(struct octeon_device *oct, in octeon_droq_process_poll_pkts() argument
806 octeon_droq_fast_process_packets(oct, droq, in octeon_droq_process_poll_pkts()
818 (oct, in octeon_droq_process_poll_pkts()
828 octeon_enable_irq(struct octeon_device *oct, u32 q_no) in octeon_enable_irq() argument
830 switch (oct->chip_id) { in octeon_enable_irq()
834 (struct octeon_cn6xxx *)oct->chip; in octeon_enable_irq()
840 value = octeon_read_csr(oct, CN6XXX_SLI_PKT_TIME_INT_ENB); in octeon_enable_irq()
842 octeon_write_csr(oct, CN6XXX_SLI_PKT_TIME_INT_ENB, value); in octeon_enable_irq()
843 value = octeon_read_csr(oct, CN6XXX_SLI_PKT_CNT_INT_ENB); in octeon_enable_irq()
845 octeon_write_csr(oct, CN6XXX_SLI_PKT_CNT_INT_ENB, value); in octeon_enable_irq()
854 lio_enable_irq(oct->droq[q_no], oct->instr_queue[q_no]); in octeon_enable_irq()
858 lio_enable_irq(oct->droq[q_no], oct->instr_queue[q_no]); in octeon_enable_irq()
861 dev_err(&oct->pci_dev->dev, "%s Unknown Chip\n", __func__); in octeon_enable_irq()
868 int octeon_register_droq_ops(struct octeon_device *oct, u32 q_no, in octeon_register_droq_ops() argument
874 oct_cfg = octeon_get_conf(oct); in octeon_register_droq_ops()
880 dev_err(&oct->pci_dev->dev, "%s: droq_ops pointer is NULL\n", in octeon_register_droq_ops()
886 dev_err(&oct->pci_dev->dev, "%s: droq id (%d) exceeds MAX (%d)\n", in octeon_register_droq_ops()
887 __func__, q_no, (oct->num_oqs - 1)); in octeon_register_droq_ops()
891 droq = oct->droq[q_no]; in octeon_register_droq_ops()
897 int octeon_unregister_droq_ops(struct octeon_device *oct, u32 q_no) in octeon_unregister_droq_ops() argument
902 oct_cfg = octeon_get_conf(oct); in octeon_unregister_droq_ops()
908 dev_err(&oct->pci_dev->dev, "%s: droq id (%d) exceeds MAX (%d)\n", in octeon_unregister_droq_ops()
909 __func__, q_no, oct->num_oqs - 1); in octeon_unregister_droq_ops()
913 droq = oct->droq[q_no]; in octeon_unregister_droq_ops()
916 dev_info(&oct->pci_dev->dev, in octeon_unregister_droq_ops()
929 int octeon_create_droq(struct octeon_device *oct, in octeon_create_droq() argument
934 int numa_node = dev_to_node(&oct->pci_dev->dev); in octeon_create_droq()
936 if (oct->droq[q_no]) { in octeon_create_droq()
937 dev_dbg(&oct->pci_dev->dev, "Droq already in use. Cannot create droq %d again\n", in octeon_create_droq()
952 octeon_set_droq_pkt_op(oct, q_no, 0); in octeon_create_droq()
953 oct->droq[q_no] = droq; in octeon_create_droq()
956 if (octeon_init_droq(oct, q_no, num_descs, desc_size, app_ctx)) { in octeon_create_droq()
957 vfree(oct->droq[q_no]); in octeon_create_droq()
958 oct->droq[q_no] = NULL; in octeon_create_droq()
962 oct->num_oqs++; in octeon_create_droq()
964 dev_dbg(&oct->pci_dev->dev, "%s: Total number of OQ: %d\n", __func__, in octeon_create_droq()
965 oct->num_oqs); in octeon_create_droq()