Lines Matching refs:ha
16 qla4xxx_space_in_req_ring(struct scsi_qla_host *ha, uint16_t req_cnt) in qla4xxx_space_in_req_ring() argument
21 if ((req_cnt + 2) >= ha->req_q_count) { in qla4xxx_space_in_req_ring()
22 cnt = (uint16_t) ha->isp_ops->rd_shdw_req_q_out(ha); in qla4xxx_space_in_req_ring()
23 if (ha->request_in < cnt) in qla4xxx_space_in_req_ring()
24 ha->req_q_count = cnt - ha->request_in; in qla4xxx_space_in_req_ring()
26 ha->req_q_count = REQUEST_QUEUE_DEPTH - in qla4xxx_space_in_req_ring()
27 (ha->request_in - cnt); in qla4xxx_space_in_req_ring()
31 if ((req_cnt + 2) < ha->req_q_count) in qla4xxx_space_in_req_ring()
37 static void qla4xxx_advance_req_ring_ptr(struct scsi_qla_host *ha) in qla4xxx_advance_req_ring_ptr() argument
40 if (ha->request_in == (REQUEST_QUEUE_DEPTH - 1)) { in qla4xxx_advance_req_ring_ptr()
41 ha->request_in = 0; in qla4xxx_advance_req_ring_ptr()
42 ha->request_ptr = ha->request_ring; in qla4xxx_advance_req_ring_ptr()
44 ha->request_in++; in qla4xxx_advance_req_ring_ptr()
45 ha->request_ptr++; in qla4xxx_advance_req_ring_ptr()
59 static int qla4xxx_get_req_pkt(struct scsi_qla_host *ha, in qla4xxx_get_req_pkt() argument
64 if (qla4xxx_space_in_req_ring(ha, req_cnt)) { in qla4xxx_get_req_pkt()
65 *queue_entry = ha->request_ptr; in qla4xxx_get_req_pkt()
68 qla4xxx_advance_req_ring_ptr(ha); in qla4xxx_get_req_pkt()
69 ha->req_q_count -= req_cnt; in qla4xxx_get_req_pkt()
85 int qla4xxx_send_marker_iocb(struct scsi_qla_host *ha, in qla4xxx_send_marker_iocb() argument
93 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_send_marker_iocb()
96 if (qla4xxx_get_req_pkt(ha, (struct queue_entry **) &marker_entry) != in qla4xxx_send_marker_iocb()
111 ha->isp_ops->queue_iocb(ha); in qla4xxx_send_marker_iocb()
114 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_send_marker_iocb()
119 qla4xxx_alloc_cont_entry(struct scsi_qla_host *ha) in qla4xxx_alloc_cont_entry() argument
123 cont_entry = (struct continuation_t1_entry *)ha->request_ptr; in qla4xxx_alloc_cont_entry()
125 qla4xxx_advance_req_ring_ptr(ha); in qla4xxx_alloc_cont_entry()
130 cont_entry->hdr.systemDefined = (uint8_t) cpu_to_le16(ha->request_in); in qla4xxx_alloc_cont_entry()
152 struct scsi_qla_host *ha; in qla4xxx_build_scsi_iocbs() local
160 ha = srb->ha; in qla4xxx_build_scsi_iocbs()
178 cont_entry = qla4xxx_alloc_cont_entry(ha); in qla4xxx_build_scsi_iocbs()
195 void qla4_83xx_queue_iocb(struct scsi_qla_host *ha) in qla4_83xx_queue_iocb() argument
197 writel(ha->request_in, &ha->qla4_83xx_reg->req_q_in); in qla4_83xx_queue_iocb()
198 readl(&ha->qla4_83xx_reg->req_q_in); in qla4_83xx_queue_iocb()
201 void qla4_83xx_complete_iocb(struct scsi_qla_host *ha) in qla4_83xx_complete_iocb() argument
203 writel(ha->response_out, &ha->qla4_83xx_reg->rsp_q_out); in qla4_83xx_complete_iocb()
204 readl(&ha->qla4_83xx_reg->rsp_q_out); in qla4_83xx_complete_iocb()
214 void qla4_82xx_queue_iocb(struct scsi_qla_host *ha) in qla4_82xx_queue_iocb() argument
218 dbval = 0x14 | (ha->func_num << 5); in qla4_82xx_queue_iocb()
219 dbval = dbval | (0 << 8) | (ha->request_in << 16); in qla4_82xx_queue_iocb()
221 qla4_82xx_wr_32(ha, ha->nx_db_wr_ptr, ha->request_in); in qla4_82xx_queue_iocb()
232 void qla4_82xx_complete_iocb(struct scsi_qla_host *ha) in qla4_82xx_complete_iocb() argument
234 writel(ha->response_out, &ha->qla4_82xx_reg->rsp_q_out); in qla4_82xx_complete_iocb()
235 readl(&ha->qla4_82xx_reg->rsp_q_out); in qla4_82xx_complete_iocb()
245 void qla4xxx_queue_iocb(struct scsi_qla_host *ha) in qla4xxx_queue_iocb() argument
247 writel(ha->request_in, &ha->reg->req_q_in); in qla4xxx_queue_iocb()
248 readl(&ha->reg->req_q_in); in qla4xxx_queue_iocb()
259 void qla4xxx_complete_iocb(struct scsi_qla_host *ha) in qla4xxx_complete_iocb() argument
261 writel(ha->response_out, &ha->reg->rsp_q_out); in qla4xxx_complete_iocb()
262 readl(&ha->reg->rsp_q_out); in qla4xxx_complete_iocb()
273 int qla4xxx_send_command_to_isp(struct scsi_qla_host *ha, struct srb * srb) in qla4xxx_send_command_to_isp() argument
290 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_send_command_to_isp()
300 if (!test_bit(AF_ONLINE, &ha->flags)) { in qla4xxx_send_command_to_isp()
303 ha->host_no, __func__)); in qla4xxx_send_command_to_isp()
314 if (!qla4xxx_space_in_req_ring(ha, req_cnt)) in qla4xxx_send_command_to_isp()
318 if ((ha->iocb_cnt + req_cnt) >= ha->iocb_hiwat) in qla4xxx_send_command_to_isp()
322 cmd_entry = (struct command_t3_entry *) ha->request_ptr; in qla4xxx_send_command_to_isp()
345 ha->bytes_xfered += scsi_bufflen(cmd); in qla4xxx_send_command_to_isp()
346 if (ha->bytes_xfered & ~0xFFFFF){ in qla4xxx_send_command_to_isp()
347 ha->total_mbytes_xferred += ha->bytes_xfered >> 20; in qla4xxx_send_command_to_isp()
348 ha->bytes_xfered &= 0xFFFFF; in qla4xxx_send_command_to_isp()
355 qla4xxx_advance_req_ring_ptr(ha); in qla4xxx_send_command_to_isp()
366 ha->iocb_cnt += req_cnt; in qla4xxx_send_command_to_isp()
368 ha->req_q_count -= req_cnt; in qla4xxx_send_command_to_isp()
370 ha->isp_ops->queue_iocb(ha); in qla4xxx_send_command_to_isp()
371 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_send_command_to_isp()
379 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_send_command_to_isp()
389 struct scsi_qla_host *ha = ddb_entry->ha; in qla4xxx_send_passthru0() local
395 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_send_passthru0()
398 if (!qla4xxx_space_in_req_ring(ha, task_data->iocb_req_cnt)) in qla4xxx_send_passthru0()
401 passthru_iocb = (struct passthru0 *) ha->request_ptr; in qla4xxx_send_passthru0()
437 qla4xxx_advance_req_ring_ptr(ha); in qla4xxx_send_passthru0()
441 ha->iocb_cnt += task_data->iocb_req_cnt; in qla4xxx_send_passthru0()
442 ha->req_q_count -= task_data->iocb_req_cnt; in qla4xxx_send_passthru0()
443 ha->isp_ops->queue_iocb(ha); in qla4xxx_send_passthru0()
447 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_send_passthru0()
451 static struct mrb *qla4xxx_get_new_mrb(struct scsi_qla_host *ha) in qla4xxx_get_new_mrb() argument
459 mrb->ha = ha; in qla4xxx_get_new_mrb()
463 static int qla4xxx_send_mbox_iocb(struct scsi_qla_host *ha, struct mrb *mrb, in qla4xxx_send_mbox_iocb() argument
472 spin_lock_irqsave(&ha->hardware_lock, flags); in qla4xxx_send_mbox_iocb()
475 rval = qla4xxx_get_req_pkt(ha, (struct queue_entry **) &(mrb->mbox)); in qla4xxx_send_mbox_iocb()
479 index = ha->mrb_index; in qla4xxx_send_mbox_iocb()
485 if (ha->active_mrb_array[index] == NULL) { in qla4xxx_send_mbox_iocb()
486 ha->mrb_index = index; in qla4xxx_send_mbox_iocb()
492 ha->active_mrb_array[index] = mrb; in qla4xxx_send_mbox_iocb()
500 ha->iocb_cnt += mrb->iocb_cnt; in qla4xxx_send_mbox_iocb()
501 ha->isp_ops->queue_iocb(ha); in qla4xxx_send_mbox_iocb()
503 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla4xxx_send_mbox_iocb()
507 int qla4xxx_ping_iocb(struct scsi_qla_host *ha, uint32_t options, in qla4xxx_ping_iocb() argument
516 mrb = qla4xxx_get_new_mrb(ha); in qla4xxx_ping_iocb()
518 DEBUG2(ql4_printk(KERN_WARNING, ha, "%s: fail to get new mrb\n", in qla4xxx_ping_iocb()
533 rval = qla4xxx_send_mbox_iocb(ha, mrb, in_mbox); in qla4xxx_ping_iocb()