Lines Matching refs:scrq
3805 static int ibmvfc_toggle_scrq_irq(struct ibmvfc_queue *scrq, int enable) in ibmvfc_toggle_scrq_irq() argument
3807 struct device *dev = scrq->vhost->dev; in ibmvfc_toggle_scrq_irq()
3816 scrq->hw_irq, 0, 0); in ibmvfc_toggle_scrq_irq()
3820 enable ? "enable" : "disable", scrq->hwq_id, rc); in ibmvfc_toggle_scrq_irq()
3861 static struct ibmvfc_crq *ibmvfc_next_scrq(struct ibmvfc_queue *scrq) in ibmvfc_next_scrq() argument
3865 crq = &scrq->msgs.scrq[scrq->cur].crq; in ibmvfc_next_scrq()
3867 if (++scrq->cur == scrq->size) in ibmvfc_next_scrq()
3868 scrq->cur = 0; in ibmvfc_next_scrq()
3876 static void ibmvfc_drain_sub_crq(struct ibmvfc_queue *scrq) in ibmvfc_drain_sub_crq() argument
3884 spin_lock_irqsave(scrq->q_lock, flags); in ibmvfc_drain_sub_crq()
3886 while ((crq = ibmvfc_next_scrq(scrq)) != NULL) { in ibmvfc_drain_sub_crq()
3887 ibmvfc_handle_scrq(crq, scrq->vhost, &evt_doneq); in ibmvfc_drain_sub_crq()
3892 ibmvfc_toggle_scrq_irq(scrq, 1); in ibmvfc_drain_sub_crq()
3893 if ((crq = ibmvfc_next_scrq(scrq)) != NULL) { in ibmvfc_drain_sub_crq()
3894 ibmvfc_toggle_scrq_irq(scrq, 0); in ibmvfc_drain_sub_crq()
3895 ibmvfc_handle_scrq(crq, scrq->vhost, &evt_doneq); in ibmvfc_drain_sub_crq()
3901 spin_unlock_irqrestore(scrq->q_lock, flags); in ibmvfc_drain_sub_crq()
3913 struct ibmvfc_queue *scrq = (struct ibmvfc_queue *)scrq_instance; in ibmvfc_interrupt_scsi() local
3915 ibmvfc_toggle_scrq_irq(scrq, 0); in ibmvfc_interrupt_scsi()
3916 ibmvfc_drain_sub_crq(scrq); in ibmvfc_interrupt_scsi()
5782 fmt_size = sizeof(*queue->msgs.scrq); in ibmvfc_alloc_queue()
5884 struct ibmvfc_queue *scrq = &vhost->scsi_scrqs.scrqs[index]; in ibmvfc_register_scsi_channel() local
5889 rc = h_reg_sub_crq(vdev->unit_address, scrq->msg_token, PAGE_SIZE, in ibmvfc_register_scsi_channel()
5890 &scrq->cookie, &scrq->hw_irq); in ibmvfc_register_scsi_channel()
5900 scrq->irq = irq_create_mapping(NULL, scrq->hw_irq); in ibmvfc_register_scsi_channel()
5902 if (!scrq->irq) { in ibmvfc_register_scsi_channel()
5908 snprintf(scrq->name, sizeof(scrq->name), "ibmvfc-%x-scsi%d", in ibmvfc_register_scsi_channel()
5910 rc = request_irq(scrq->irq, ibmvfc_interrupt_scsi, 0, scrq->name, scrq); in ibmvfc_register_scsi_channel()
5914 irq_dispose_mapping(scrq->irq); in ibmvfc_register_scsi_channel()
5918 scrq->hwq_id = index; in ibmvfc_register_scsi_channel()
5925 rc = plpar_hcall_norets(H_FREE_SUB_CRQ, vdev->unit_address, scrq->cookie); in ibmvfc_register_scsi_channel()
5936 struct ibmvfc_queue *scrq = &vhost->scsi_scrqs.scrqs[index]; in ibmvfc_deregister_scsi_channel() local
5941 free_irq(scrq->irq, scrq); in ibmvfc_deregister_scsi_channel()
5942 irq_dispose_mapping(scrq->irq); in ibmvfc_deregister_scsi_channel()
5943 scrq->irq = 0; in ibmvfc_deregister_scsi_channel()
5947 scrq->cookie); in ibmvfc_deregister_scsi_channel()
5954 memset(scrq->msgs.crq, 0, PAGE_SIZE); in ibmvfc_deregister_scsi_channel()
5955 scrq->cur = 0; in ibmvfc_deregister_scsi_channel()
5996 struct ibmvfc_queue *scrq; in ibmvfc_init_sub_crqs() local
6012 scrq = &vhost->scsi_scrqs.scrqs[i]; in ibmvfc_init_sub_crqs()
6013 if (ibmvfc_alloc_queue(vhost, scrq, IBMVFC_SUB_CRQ_FMT)) { in ibmvfc_init_sub_crqs()
6015 scrq = &vhost->scsi_scrqs.scrqs[j - 1]; in ibmvfc_init_sub_crqs()
6016 ibmvfc_free_queue(vhost, scrq); in ibmvfc_init_sub_crqs()
6034 struct ibmvfc_queue *scrq; in ibmvfc_release_sub_crqs() local
6044 scrq = &vhost->scsi_scrqs.scrqs[i]; in ibmvfc_release_sub_crqs()
6045 ibmvfc_free_queue(vhost, scrq); in ibmvfc_release_sub_crqs()