Lines Matching refs:p_spq

212 				  struct qed_spq *p_spq)  in qed_spq_hw_initialize()  argument
219 cxt_info.iid = p_spq->cid; in qed_spq_hw_initialize()
225 p_spq->cid); in qed_spq_hw_initialize()
243 DMA_LO_LE(p_spq->chain.p_phys_addr); in qed_spq_hw_initialize()
245 DMA_HI_LE(p_spq->chain.p_phys_addr); in qed_spq_hw_initialize()
252 struct qed_spq *p_spq, struct qed_spq_entry *p_ent) in qed_spq_hw_post() argument
254 struct qed_chain *p_chain = &p_hwfn->p_spq->chain; in qed_spq_hw_post()
255 struct core_db_data *p_db_data = &p_spq->db_data; in qed_spq_hw_post()
274 DOORBELL(p_hwfn, p_spq->db_addr_offset, *(u32 *)p_db_data); in qed_spq_hw_post()
281 p_spq->db_addr_offset, in qed_spq_hw_post()
282 p_spq->cid, in qed_spq_hw_post()
298 if (!p_hwfn->p_spq || (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE)) in qed_async_event_completion()
301 cb = p_hwfn->p_spq->async_comp_cb[p_eqe->protocol_id]; in qed_async_event_completion()
318 if (!p_hwfn->p_spq || (protocol_id >= MAX_PROTOCOL_TYPE)) in qed_spq_register_async_cb()
321 p_hwfn->p_spq->async_comp_cb[protocol_id] = cb; in qed_spq_register_async_cb()
329 if (!p_hwfn->p_spq || (protocol_id >= MAX_PROTOCOL_TYPE)) in qed_spq_unregister_async_cb()
332 p_hwfn->p_spq->async_comp_cb[protocol_id] = NULL; in qed_spq_unregister_async_cb()
398 spin_lock_bh(&p_hwfn->p_spq->lock); in qed_eq_completion()
400 spin_unlock_bh(&p_hwfn->p_spq->lock); in qed_eq_completion()
488 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_setup() local
496 INIT_LIST_HEAD(&p_spq->pending); in qed_spq_setup()
497 INIT_LIST_HEAD(&p_spq->completion_pending); in qed_spq_setup()
498 INIT_LIST_HEAD(&p_spq->free_pool); in qed_spq_setup()
499 INIT_LIST_HEAD(&p_spq->unlimited_pending); in qed_spq_setup()
500 spin_lock_init(&p_spq->lock); in qed_spq_setup()
503 p_phys = p_spq->p_phys + offsetof(struct qed_spq_entry, ramrod); in qed_spq_setup()
504 p_virt = p_spq->p_virt; in qed_spq_setup()
506 capacity = qed_chain_get_capacity(&p_spq->chain); in qed_spq_setup()
510 list_add_tail(&p_virt->list, &p_spq->free_pool); in qed_spq_setup()
517 p_spq->normal_count = 0; in qed_spq_setup()
518 p_spq->comp_count = 0; in qed_spq_setup()
519 p_spq->comp_sent_count = 0; in qed_spq_setup()
520 p_spq->unlimited_pending_count = 0; in qed_spq_setup()
522 bitmap_zero(p_spq->p_comp_bitmap, SPQ_RING_SIZE); in qed_spq_setup()
523 p_spq->comp_bitmap_idx = 0; in qed_spq_setup()
526 qed_cxt_acquire_cid(p_hwfn, PROTOCOLID_CORE, &p_spq->cid); in qed_spq_setup()
527 qed_spq_hw_initialize(p_hwfn, p_spq); in qed_spq_setup()
530 qed_chain_reset(&p_spq->chain); in qed_spq_setup()
533 p_spq->db_addr_offset = qed_db_addr(p_spq->cid, DQ_DEMS_LEGACY); in qed_spq_setup()
534 p_db_data = &p_spq->db_data; in qed_spq_setup()
544 p_spq->db_addr_offset); in qed_spq_setup()
545 rc = qed_db_recovery_add(p_hwfn->cdev, db_addr, &p_spq->db_data, in qed_spq_setup()
555 struct qed_spq *p_spq = NULL; in qed_spq_alloc() local
560 p_spq = kzalloc(sizeof(struct qed_spq), GFP_KERNEL); in qed_spq_alloc()
561 if (!p_spq) in qed_spq_alloc()
571 &p_spq->chain, NULL)) in qed_spq_alloc()
575 capacity = qed_chain_get_capacity(&p_spq->chain); in qed_spq_alloc()
582 p_spq->p_virt = p_virt; in qed_spq_alloc()
583 p_spq->p_phys = p_phys; in qed_spq_alloc()
584 p_hwfn->p_spq = p_spq; in qed_spq_alloc()
589 qed_chain_free(p_hwfn->cdev, &p_spq->chain); in qed_spq_alloc()
590 kfree(p_spq); in qed_spq_alloc()
596 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_free() local
600 if (!p_spq) in qed_spq_free()
605 p_spq->db_addr_offset); in qed_spq_free()
606 qed_db_recovery_del(p_hwfn->cdev, db_addr, &p_spq->db_data); in qed_spq_free()
608 if (p_spq->p_virt) { in qed_spq_free()
609 capacity = qed_chain_get_capacity(&p_spq->chain); in qed_spq_free()
613 p_spq->p_virt, p_spq->p_phys); in qed_spq_free()
616 qed_chain_free(p_hwfn->cdev, &p_spq->chain); in qed_spq_free()
617 kfree(p_spq); in qed_spq_free()
618 p_hwfn->p_spq = NULL; in qed_spq_free()
623 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_get_entry() local
627 spin_lock_bh(&p_spq->lock); in qed_spq_get_entry()
629 if (list_empty(&p_spq->free_pool)) { in qed_spq_get_entry()
637 p_ent->queue = &p_spq->unlimited_pending; in qed_spq_get_entry()
639 p_ent = list_first_entry(&p_spq->free_pool, in qed_spq_get_entry()
642 p_ent->queue = &p_spq->pending; in qed_spq_get_entry()
648 spin_unlock_bh(&p_spq->lock); in qed_spq_get_entry()
656 list_add_tail(&p_ent->list, &p_hwfn->p_spq->free_pool); in __qed_spq_return_entry()
661 spin_lock_bh(&p_hwfn->p_spq->lock); in qed_spq_return_entry()
663 spin_unlock_bh(&p_hwfn->p_spq->lock); in qed_spq_return_entry()
684 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_add_entry() local
686 if (p_ent->queue == &p_spq->unlimited_pending) { in qed_spq_add_entry()
688 if (list_empty(&p_spq->free_pool)) { in qed_spq_add_entry()
689 list_add_tail(&p_ent->list, &p_spq->unlimited_pending); in qed_spq_add_entry()
690 p_spq->unlimited_pending_count++; in qed_spq_add_entry()
696 p_en2 = list_first_entry(&p_spq->free_pool, in qed_spq_add_entry()
721 list_add_tail(&p_ent->list, &p_spq->pending); in qed_spq_add_entry()
722 p_spq->normal_count++; in qed_spq_add_entry()
725 list_add(&p_ent->list, &p_spq->pending); in qed_spq_add_entry()
726 p_spq->high_count++; in qed_spq_add_entry()
740 if (!p_hwfn->p_spq) in qed_spq_get_cid()
742 return p_hwfn->p_spq->cid; in qed_spq_get_cid()
751 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_post_list() local
754 while (qed_chain_get_elem_left(&p_spq->chain) > keep_reserve && in qed_spq_post_list()
758 list_move_tail(&p_ent->list, &p_spq->completion_pending); in qed_spq_post_list()
759 p_spq->comp_sent_count++; in qed_spq_post_list()
761 rc = qed_spq_hw_post(p_hwfn, p_spq, p_ent); in qed_spq_post_list()
774 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_pend_post() local
777 while (!list_empty(&p_spq->free_pool)) { in qed_spq_pend_post()
778 if (list_empty(&p_spq->unlimited_pending)) in qed_spq_pend_post()
781 p_ent = list_first_entry(&p_spq->unlimited_pending, in qed_spq_pend_post()
791 return qed_spq_post_list(p_hwfn, &p_spq->pending, in qed_spq_pend_post()
813 struct qed_spq *p_spq = p_hwfn->p_spq; in qed_spq_comp_bmap_update() local
815 __set_bit(pos, p_spq->p_comp_bitmap); in qed_spq_comp_bmap_update()
816 while (test_bit(p_spq->comp_bitmap_idx, in qed_spq_comp_bmap_update()
817 p_spq->p_comp_bitmap)) { in qed_spq_comp_bmap_update()
818 __clear_bit(p_spq->comp_bitmap_idx, in qed_spq_comp_bmap_update()
819 p_spq->p_comp_bitmap); in qed_spq_comp_bmap_update()
820 p_spq->comp_bitmap_idx++; in qed_spq_comp_bmap_update()
821 qed_chain_return_produced(&p_spq->chain); in qed_spq_comp_bmap_update()
829 struct qed_spq *p_spq = p_hwfn ? p_hwfn->p_spq : NULL; in qed_spq_post() local
855 spin_lock_bh(&p_spq->lock); in qed_spq_post()
881 spin_unlock_bh(&p_spq->lock); in qed_spq_post()
890 p_ent->queue == &p_spq->unlimited_pending); in qed_spq_post()
892 if (p_ent->queue == &p_spq->unlimited_pending) { in qed_spq_post()
910 spin_lock_bh(&p_spq->lock); in qed_spq_post()
918 spin_unlock_bh(&p_spq->lock); in qed_spq_post()
928 struct qed_spq *p_spq; in qed_spq_completion() local
936 p_spq = p_hwfn->p_spq; in qed_spq_completion()
937 if (!p_spq) in qed_spq_completion()
940 spin_lock_bh(&p_spq->lock); in qed_spq_completion()
941 list_for_each_entry_safe(p_ent, tmp, &p_spq->completion_pending, list) { in qed_spq_completion()
945 p_spq->comp_count++; in qed_spq_completion()
962 spin_unlock_bh(&p_spq->lock); in qed_spq_completion()