• Home
  • Raw
  • Download

Lines Matching refs:qcq

49 	struct ionic_qcq *qcq;  in ionic_dim_work()  local
54 qcq = container_of(dim, struct ionic_qcq, dim); in ionic_dim_work()
55 lif = qcq->q.lif; in ionic_dim_work()
59 intr = &qcq->intr; in ionic_dim_work()
211 static int ionic_request_irq(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_request_irq() argument
213 struct ionic_intr_info *intr = &qcq->intr; in ionic_request_irq()
215 struct ionic_queue *q = &qcq->q; in ionic_request_irq()
227 0, intr->name, &qcq->napi); in ionic_request_irq()
254 static int ionic_qcq_enable(struct ionic_qcq *qcq) in ionic_qcq_enable() argument
256 struct ionic_queue *q = &qcq->q; in ionic_qcq_enable()
279 if (qcq->flags & IONIC_QCQ_F_INTR) in ionic_qcq_enable()
280 ionic_intr_clean(idev->intr_ctrl, qcq->intr.index); in ionic_qcq_enable()
286 if (qcq->napi.poll) in ionic_qcq_enable()
287 napi_enable(&qcq->napi); in ionic_qcq_enable()
289 if (qcq->flags & IONIC_QCQ_F_INTR) { in ionic_qcq_enable()
290 irq_set_affinity_hint(qcq->intr.vector, in ionic_qcq_enable()
291 &qcq->intr.affinity_mask); in ionic_qcq_enable()
292 ionic_intr_mask(idev->intr_ctrl, qcq->intr.index, in ionic_qcq_enable()
299 static int ionic_qcq_disable(struct ionic_qcq *qcq, bool send_to_hw) in ionic_qcq_disable() argument
313 if (!qcq) in ionic_qcq_disable()
316 q = &qcq->q; in ionic_qcq_disable()
319 if (qcq->flags & IONIC_QCQ_F_INTR) { in ionic_qcq_disable()
322 cancel_work_sync(&qcq->dim.work); in ionic_qcq_disable()
323 ionic_intr_mask(idev->intr_ctrl, qcq->intr.index, in ionic_qcq_disable()
325 synchronize_irq(qcq->intr.vector); in ionic_qcq_disable()
326 irq_set_affinity_hint(qcq->intr.vector, NULL); in ionic_qcq_disable()
327 napi_disable(&qcq->napi); in ionic_qcq_disable()
343 static void ionic_lif_qcq_deinit(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_lif_qcq_deinit() argument
347 if (!qcq) in ionic_lif_qcq_deinit()
350 if (!(qcq->flags & IONIC_QCQ_F_INITED)) in ionic_lif_qcq_deinit()
353 if (qcq->flags & IONIC_QCQ_F_INTR) { in ionic_lif_qcq_deinit()
354 ionic_intr_mask(idev->intr_ctrl, qcq->intr.index, in ionic_lif_qcq_deinit()
356 netif_napi_del(&qcq->napi); in ionic_lif_qcq_deinit()
359 qcq->flags &= ~IONIC_QCQ_F_INITED; in ionic_lif_qcq_deinit()
362 static void ionic_qcq_intr_free(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_qcq_intr_free() argument
364 if (!(qcq->flags & IONIC_QCQ_F_INTR) || qcq->intr.vector == 0) in ionic_qcq_intr_free()
367 irq_set_affinity_hint(qcq->intr.vector, NULL); in ionic_qcq_intr_free()
368 devm_free_irq(lif->ionic->dev, qcq->intr.vector, &qcq->napi); in ionic_qcq_intr_free()
369 qcq->intr.vector = 0; in ionic_qcq_intr_free()
370 ionic_intr_free(lif->ionic, qcq->intr.index); in ionic_qcq_intr_free()
371 qcq->intr.index = IONIC_INTR_INDEX_NOT_ASSIGNED; in ionic_qcq_intr_free()
374 static void ionic_qcq_free(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_qcq_free() argument
378 if (!qcq) in ionic_qcq_free()
381 ionic_debugfs_del_qcq(qcq); in ionic_qcq_free()
383 if (qcq->q_base) { in ionic_qcq_free()
384 dma_free_coherent(dev, qcq->q_size, qcq->q_base, qcq->q_base_pa); in ionic_qcq_free()
385 qcq->q_base = NULL; in ionic_qcq_free()
386 qcq->q_base_pa = 0; in ionic_qcq_free()
389 if (qcq->cq_base) { in ionic_qcq_free()
390 dma_free_coherent(dev, qcq->cq_size, qcq->cq_base, qcq->cq_base_pa); in ionic_qcq_free()
391 qcq->cq_base = NULL; in ionic_qcq_free()
392 qcq->cq_base_pa = 0; in ionic_qcq_free()
395 if (qcq->sg_base) { in ionic_qcq_free()
396 dma_free_coherent(dev, qcq->sg_size, qcq->sg_base, qcq->sg_base_pa); in ionic_qcq_free()
397 qcq->sg_base = NULL; in ionic_qcq_free()
398 qcq->sg_base_pa = 0; in ionic_qcq_free()
401 ionic_qcq_intr_free(lif, qcq); in ionic_qcq_free()
403 if (qcq->cq.info) { in ionic_qcq_free()
404 devm_kfree(dev, qcq->cq.info); in ionic_qcq_free()
405 qcq->cq.info = NULL; in ionic_qcq_free()
407 if (qcq->q.info) { in ionic_qcq_free()
408 devm_kfree(dev, qcq->q.info); in ionic_qcq_free()
409 qcq->q.info = NULL; in ionic_qcq_free()
458 static int ionic_alloc_qcq_interrupt(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_alloc_qcq_interrupt() argument
462 if (!(qcq->flags & IONIC_QCQ_F_INTR)) { in ionic_alloc_qcq_interrupt()
463 qcq->intr.index = IONIC_INTR_INDEX_NOT_ASSIGNED; in ionic_alloc_qcq_interrupt()
467 err = ionic_intr_alloc(lif, &qcq->intr); in ionic_alloc_qcq_interrupt()
470 qcq->q.name, err); in ionic_alloc_qcq_interrupt()
474 err = ionic_bus_get_irq(lif->ionic, qcq->intr.index); in ionic_alloc_qcq_interrupt()
477 qcq->q.name, err); in ionic_alloc_qcq_interrupt()
480 qcq->intr.vector = err; in ionic_alloc_qcq_interrupt()
481 ionic_intr_mask_assert(lif->ionic->idev.intr_ctrl, qcq->intr.index, in ionic_alloc_qcq_interrupt()
484 err = ionic_request_irq(lif, qcq); in ionic_alloc_qcq_interrupt()
491 qcq->intr.cpu = cpumask_local_spread(qcq->intr.index, in ionic_alloc_qcq_interrupt()
493 if (qcq->intr.cpu != -1) in ionic_alloc_qcq_interrupt()
494 cpumask_set_cpu(qcq->intr.cpu, &qcq->intr.affinity_mask); in ionic_alloc_qcq_interrupt()
496 netdev_dbg(lif->netdev, "%s: Interrupt index %d\n", qcq->q.name, qcq->intr.index); in ionic_alloc_qcq_interrupt()
500 ionic_intr_free(lif->ionic, qcq->intr.index); in ionic_alloc_qcq_interrupt()
511 unsigned int pid, struct ionic_qcq **qcq) in ionic_qcq_alloc() argument
522 *qcq = NULL; in ionic_qcq_alloc()
637 *qcq = new; in ionic_qcq_alloc()
718 static void ionic_qcq_sanitize(struct ionic_qcq *qcq) in ionic_qcq_sanitize() argument
720 qcq->q.tail_idx = 0; in ionic_qcq_sanitize()
721 qcq->q.head_idx = 0; in ionic_qcq_sanitize()
722 qcq->cq.tail_idx = 0; in ionic_qcq_sanitize()
723 qcq->cq.done_color = 1; in ionic_qcq_sanitize()
724 memset(qcq->q_base, 0, qcq->q_size); in ionic_qcq_sanitize()
725 memset(qcq->cq_base, 0, qcq->cq_size); in ionic_qcq_sanitize()
726 memset(qcq->sg_base, 0, qcq->sg_size); in ionic_qcq_sanitize()
729 static int ionic_lif_txq_init(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_lif_txq_init() argument
732 struct ionic_queue *q = &qcq->q; in ionic_lif_txq_init()
733 struct ionic_cq *cq = &qcq->cq; in ionic_lif_txq_init()
755 intr_index = qcq->intr.index; in ionic_lif_txq_init()
767 ionic_qcq_sanitize(qcq); in ionic_lif_txq_init()
781 netif_napi_add(lif->netdev, &qcq->napi, ionic_tx_napi, in ionic_lif_txq_init()
784 qcq->flags |= IONIC_QCQ_F_INITED; in ionic_lif_txq_init()
789 static int ionic_lif_rxq_init(struct ionic_lif *lif, struct ionic_qcq *qcq) in ionic_lif_rxq_init() argument
792 struct ionic_queue *q = &qcq->q; in ionic_lif_rxq_init()
793 struct ionic_cq *cq = &qcq->cq; in ionic_lif_rxq_init()
823 ionic_qcq_sanitize(qcq); in ionic_lif_rxq_init()
837 netif_napi_add(lif->netdev, &qcq->napi, ionic_rx_napi, in ionic_lif_rxq_init()
840 netif_napi_add(lif->netdev, &qcq->napi, ionic_txrx_napi, in ionic_lif_rxq_init()
843 qcq->flags |= IONIC_QCQ_F_INITED; in ionic_lif_rxq_init()
3205 struct ionic_qcq *qcq; in ionic_lif_adminq_init() local
3210 qcq = lif->adminqcq; in ionic_lif_adminq_init()
3211 q = &qcq->q; in ionic_lif_adminq_init()
3214 ionic_dev_cmd_adminq_init(idev, qcq, lif->index, qcq->intr.index); in ionic_lif_adminq_init()
3230 netif_napi_add(lif->netdev, &qcq->napi, ionic_adminq_napi, in ionic_lif_adminq_init()
3233 napi_enable(&qcq->napi); in ionic_lif_adminq_init()
3235 if (qcq->flags & IONIC_QCQ_F_INTR) in ionic_lif_adminq_init()
3236 ionic_intr_mask(idev->intr_ctrl, qcq->intr.index, in ionic_lif_adminq_init()
3239 qcq->flags |= IONIC_QCQ_F_INITED; in ionic_lif_adminq_init()
3246 struct ionic_qcq *qcq = lif->notifyqcq; in ionic_lif_notifyq_init() local
3248 struct ionic_queue *q = &qcq->q; in ionic_lif_notifyq_init()
3288 qcq->flags |= IONIC_QCQ_F_INITED; in ionic_lif_notifyq_init()