Lines Matching refs:qpti

140 static inline void qlogicpti_enable_irqs(struct qlogicpti *qpti)  in qlogicpti_enable_irqs()  argument
143 qpti->qregs + SBUS_CTRL); in qlogicpti_enable_irqs()
146 static inline void qlogicpti_disable_irqs(struct qlogicpti *qpti) in qlogicpti_disable_irqs() argument
148 sbus_writew(0, qpti->qregs + SBUS_CTRL); in qlogicpti_disable_irqs()
151 static inline void set_sbus_cfg1(struct qlogicpti *qpti) in set_sbus_cfg1() argument
154 u8 bursts = qpti->bursts; in set_sbus_cfg1()
174 sbus_writew(val, qpti->qregs + SBUS_CFG1); in set_sbus_cfg1()
177 static int qlogicpti_mbox_command(struct qlogicpti *qpti, u_short param[], int force) in qlogicpti_mbox_command() argument
186 tmp = sbus_readw(qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
188 sbus_writew(tmp, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
192 while (--loop_count && (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_HIRQ)) { in qlogicpti_mbox_command()
198 qpti->qpti_id); in qlogicpti_mbox_command()
202 case 6: sbus_writew(param[5], qpti->qregs + MBOX5); in qlogicpti_mbox_command()
204 case 5: sbus_writew(param[4], qpti->qregs + MBOX4); in qlogicpti_mbox_command()
206 case 4: sbus_writew(param[3], qpti->qregs + MBOX3); in qlogicpti_mbox_command()
208 case 3: sbus_writew(param[2], qpti->qregs + MBOX2); in qlogicpti_mbox_command()
210 case 2: sbus_writew(param[1], qpti->qregs + MBOX1); in qlogicpti_mbox_command()
212 case 1: sbus_writew(param[0], qpti->qregs + MBOX0); in qlogicpti_mbox_command()
216 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
218 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
221 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
224 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
226 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
231 (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_CRIRQ)) in qlogicpti_mbox_command()
235 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
240 !(sbus_readw(qpti->qregs + SBUS_SEMAPHORE) & SBUS_SEMAPHORE_LCK)) { in qlogicpti_mbox_command()
244 if (sbus_readw(qpti->qregs + MBOX0) & 0x4000) in qlogicpti_mbox_command()
249 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
253 while (--loop_count && (sbus_readw(qpti->qregs + MBOX0) == 0x04)) in qlogicpti_mbox_command()
257 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
261 case 6: param[5] = sbus_readw(qpti->qregs + MBOX5); in qlogicpti_mbox_command()
263 case 5: param[4] = sbus_readw(qpti->qregs + MBOX4); in qlogicpti_mbox_command()
265 case 4: param[3] = sbus_readw(qpti->qregs + MBOX3); in qlogicpti_mbox_command()
267 case 3: param[2] = sbus_readw(qpti->qregs + MBOX2); in qlogicpti_mbox_command()
269 case 2: param[1] = sbus_readw(qpti->qregs + MBOX1); in qlogicpti_mbox_command()
271 case 1: param[0] = sbus_readw(qpti->qregs + MBOX0); in qlogicpti_mbox_command()
275 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
277 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
280 tmp = sbus_readw(qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
282 sbus_writew(tmp, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
288 static inline void qlogicpti_set_hostdev_defaults(struct qlogicpti *qpti) in qlogicpti_set_hostdev_defaults() argument
292 qpti->host_param.initiator_scsi_id = qpti->scsi_id; in qlogicpti_set_hostdev_defaults()
293 qpti->host_param.bus_reset_delay = 3; in qlogicpti_set_hostdev_defaults()
294 qpti->host_param.retry_count = 0; in qlogicpti_set_hostdev_defaults()
295 qpti->host_param.retry_delay = 5; in qlogicpti_set_hostdev_defaults()
296 qpti->host_param.async_data_setup_time = 3; in qlogicpti_set_hostdev_defaults()
297 qpti->host_param.req_ack_active_negation = 1; in qlogicpti_set_hostdev_defaults()
298 qpti->host_param.data_line_active_negation = 1; in qlogicpti_set_hostdev_defaults()
299 qpti->host_param.data_dma_burst_enable = 1; in qlogicpti_set_hostdev_defaults()
300 qpti->host_param.command_dma_burst_enable = 1; in qlogicpti_set_hostdev_defaults()
301 qpti->host_param.tag_aging = 8; in qlogicpti_set_hostdev_defaults()
302 qpti->host_param.selection_timeout = 250; in qlogicpti_set_hostdev_defaults()
303 qpti->host_param.max_queue_depth = 256; in qlogicpti_set_hostdev_defaults()
313 qpti->dev_param[i].device_flags = 0xcd; in qlogicpti_set_hostdev_defaults()
314 qpti->dev_param[i].execution_throttle = 16; in qlogicpti_set_hostdev_defaults()
315 if (qpti->ultra) { in qlogicpti_set_hostdev_defaults()
316 qpti->dev_param[i].synchronous_period = 12; in qlogicpti_set_hostdev_defaults()
317 qpti->dev_param[i].synchronous_offset = 8; in qlogicpti_set_hostdev_defaults()
319 qpti->dev_param[i].synchronous_period = 25; in qlogicpti_set_hostdev_defaults()
320 qpti->dev_param[i].synchronous_offset = 12; in qlogicpti_set_hostdev_defaults()
322 qpti->dev_param[i].device_enable = 1; in qlogicpti_set_hostdev_defaults()
328 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_reset_hardware() local
338 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
341 if (sbus_readw(qpti->qregs + CPU_PCTRL) & CPU_PCTRL_BSY) { in qlogicpti_reset_hardware()
342 sbus_writew(CPU_ORIDE_RMOD, qpti->qregs + CPU_ORIDE); in qlogicpti_reset_hardware()
343 sbus_writew(CPU_CMD_BRESET, qpti->qregs + CPU_CMD); in qlogicpti_reset_hardware()
347 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); in qlogicpti_reset_hardware()
348 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); in qlogicpti_reset_hardware()
349 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + DATA_DMA_CTRL); in qlogicpti_reset_hardware()
352 while (--loop_count && ((sbus_readw(qpti->qregs + MBOX0) & 0xff) == 0x04)) in qlogicpti_reset_hardware()
356 qpti->qpti_id); in qlogicpti_reset_hardware()
358 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
359 set_sbus_cfg1(qpti); in qlogicpti_reset_hardware()
360 qlogicpti_enable_irqs(qpti); in qlogicpti_reset_hardware()
362 if (sbus_readw(qpti->qregs + RISC_PSR) & RISC_PSR_ULTRA) { in qlogicpti_reset_hardware()
363 qpti->ultra = 1; in qlogicpti_reset_hardware()
365 qpti->qregs + RISC_MTREG); in qlogicpti_reset_hardware()
367 qpti->ultra = 0; in qlogicpti_reset_hardware()
369 qpti->qregs + RISC_MTREG); in qlogicpti_reset_hardware()
374 qlogicpti_set_hostdev_defaults(qpti); in qlogicpti_reset_hardware()
377 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
382 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
384 qpti->qpti_id); in qlogicpti_reset_hardware()
391 param[1] = qpti->host_param.initiator_scsi_id; in qlogicpti_reset_hardware()
392 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_reset_hardware()
395 qpti->qpti_id); in qlogicpti_reset_hardware()
401 qpti->req_in_ptr = qpti->res_out_ptr = 0; in qlogicpti_reset_hardware()
405 param[2] = (u_short) (qpti->res_dvma >> 16); in qlogicpti_reset_hardware()
406 param[3] = (u_short) (qpti->res_dvma & 0xffff); in qlogicpti_reset_hardware()
408 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
410 qpti->qpti_id); in qlogicpti_reset_hardware()
417 param[2] = (u_short) (qpti->req_dvma >> 16); in qlogicpti_reset_hardware()
418 param[3] = (u_short) (qpti->req_dvma & 0xffff); in qlogicpti_reset_hardware()
420 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
422 qpti->qpti_id); in qlogicpti_reset_hardware()
428 param[1] = qpti->host_param.retry_count; in qlogicpti_reset_hardware()
429 param[2] = qpti->host_param.retry_delay; in qlogicpti_reset_hardware()
430 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
433 param[1] = qpti->host_param.tag_aging; in qlogicpti_reset_hardware()
434 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
439 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
443 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
446 param[1] = qpti->host_param.selection_timeout; in qlogicpti_reset_hardware()
447 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
452 param[2] = (qpti->dev_param[i].device_flags << 8); in qlogicpti_reset_hardware()
458 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
465 param[1] = qpti->host_param.bus_reset_delay; in qlogicpti_reset_hardware()
466 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
467 qpti->send_marker = 1; in qlogicpti_reset_hardware()
475 static int qlogicpti_load_firmware(struct qlogicpti *qpti) in qlogicpti_load_firmware() argument
480 struct Scsi_Host *host = qpti->qhost; in qlogicpti_load_firmware()
488 err = request_firmware(&fw, fwname, &qpti->op->dev); in qlogicpti_load_firmware()
513 qpti->qpti_id); in qlogicpti_load_firmware()
517 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); in qlogicpti_load_firmware()
518 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); in qlogicpti_load_firmware()
519 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + DATA_DMA_CTRL); in qlogicpti_load_firmware()
521 while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET)) in qlogicpti_load_firmware()
524 printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id); in qlogicpti_load_firmware()
529 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
532 sbus_writew((SBUS_CTRL_GENAB | SBUS_CTRL_ERIRQ), qpti->qregs + SBUS_CTRL); in qlogicpti_load_firmware()
533 set_sbus_cfg1(qpti); in qlogicpti_load_firmware()
534 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_load_firmware()
536 if (sbus_readw(qpti->qregs + RISC_PSR) & RISC_PSR_ULTRA) { in qlogicpti_load_firmware()
537 qpti->ultra = 1; in qlogicpti_load_firmware()
539 qpti->qregs + RISC_MTREG); in qlogicpti_load_firmware()
541 qpti->ultra = 0; in qlogicpti_load_firmware()
543 qpti->qregs + RISC_MTREG); in qlogicpti_load_firmware()
546 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
549 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
550 if (sbus_readw(qpti->qregs + CPU_PDIFF) & CPU_PDIFF_MODE) in qlogicpti_load_firmware()
551 qpti->differential = 1; in qlogicpti_load_firmware()
553 qpti->differential = 0; in qlogicpti_load_firmware()
554 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
561 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_load_firmware()
563 qpti->qpti_id); in qlogicpti_load_firmware()
573 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
576 qpti->qpti_id); in qlogicpti_load_firmware()
583 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
586 qlogicpti_enable_irqs(qpti); in qlogicpti_load_firmware()
587 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_load_firmware()
588 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
593 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
596 qpti->qpti_id); in qlogicpti_load_firmware()
604 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
607 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
610 qpti->qpti_id); in qlogicpti_load_firmware()
616 qpti->fware_majrev = param[1]; in qlogicpti_load_firmware()
617 qpti->fware_minrev = param[2]; in qlogicpti_load_firmware()
618 qpti->fware_micrev = param[3]; in qlogicpti_load_firmware()
622 param[1] = qpti->clock; in qlogicpti_load_firmware()
623 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
626 qpti->qpti_id); in qlogicpti_load_firmware()
631 if (qpti->is_pti != 0) { in qlogicpti_load_firmware()
635 param[2] = (unsigned short) qpti->scsi_id; in qlogicpti_load_firmware()
636 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
641 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
651 static int qlogicpti_verify_tmon(struct qlogicpti *qpti) in qlogicpti_verify_tmon() argument
653 int curstat = sbus_readb(qpti->sreg); in qlogicpti_verify_tmon()
656 if (!(curstat & SREG_FUSE) && (qpti->swsreg & SREG_FUSE)) in qlogicpti_verify_tmon()
657 printk("qlogicpti%d: Fuse returned to normal state.\n", qpti->qpti_id); in qlogicpti_verify_tmon()
658 if (!(curstat & SREG_TPOWER) && (qpti->swsreg & SREG_TPOWER)) in qlogicpti_verify_tmon()
659 printk("qlogicpti%d: termpwr back to normal state.\n", qpti->qpti_id); in qlogicpti_verify_tmon()
660 if (curstat != qpti->swsreg) { in qlogicpti_verify_tmon()
664 printk("qlogicpti%d: Fuse is open!\n", qpti->qpti_id); in qlogicpti_verify_tmon()
668 printk("qlogicpti%d: termpwr failure\n", qpti->qpti_id); in qlogicpti_verify_tmon()
670 if (qpti->differential && in qlogicpti_verify_tmon()
674 "differential bus! Please fix!\n", qpti->qpti_id); in qlogicpti_verify_tmon()
676 qpti->swsreg = curstat; in qlogicpti_verify_tmon()
684 static void qpti_chain_add(struct qlogicpti *qpti) in qpti_chain_add() argument
692 qlink->next = qpti; in qpti_chain_add()
694 qptichain = qpti; in qpti_chain_add()
696 qpti->next = NULL; in qpti_chain_add()
700 static void qpti_chain_del(struct qlogicpti *qpti) in qpti_chain_del() argument
703 if (qptichain == qpti) { in qpti_chain_del()
704 qptichain = qpti->next; in qpti_chain_del()
707 while(qlink->next != qpti) in qpti_chain_del()
709 qlink->next = qpti->next; in qpti_chain_del()
711 qpti->next = NULL; in qpti_chain_del()
715 static int qpti_map_regs(struct qlogicpti *qpti) in qpti_map_regs() argument
717 struct platform_device *op = qpti->op; in qpti_map_regs()
719 qpti->qregs = of_ioremap(&op->resource[0], 0, in qpti_map_regs()
722 if (!qpti->qregs) { in qpti_map_regs()
726 if (qpti->is_pti) { in qpti_map_regs()
727 qpti->sreg = of_ioremap(&op->resource[0], (16 * 4096), in qpti_map_regs()
730 if (!qpti->sreg) { in qpti_map_regs()
738 static int qpti_register_irq(struct qlogicpti *qpti) in qpti_register_irq() argument
740 struct platform_device *op = qpti->op; in qpti_register_irq()
742 qpti->qhost->irq = qpti->irq = op->archdata.irqs[0]; in qpti_register_irq()
750 if (request_irq(qpti->irq, qpti_intr, in qpti_register_irq()
751 IRQF_SHARED, "QlogicPTI", qpti)) in qpti_register_irq()
754 printk("qlogicpti%d: IRQ %d ", qpti->qpti_id, qpti->irq); in qpti_register_irq()
759 printk("qlogicpti%d: Cannot acquire irq line\n", qpti->qpti_id); in qpti_register_irq()
763 static void qpti_get_scsi_id(struct qlogicpti *qpti) in qpti_get_scsi_id() argument
765 struct platform_device *op = qpti->op; in qpti_get_scsi_id()
770 qpti->scsi_id = of_getintprop_default(dp, "initiator-id", -1); in qpti_get_scsi_id()
771 if (qpti->scsi_id == -1) in qpti_get_scsi_id()
772 qpti->scsi_id = of_getintprop_default(dp, "scsi-initiator-id", in qpti_get_scsi_id()
774 if (qpti->scsi_id == -1) in qpti_get_scsi_id()
775 qpti->scsi_id = in qpti_get_scsi_id()
778 qpti->qhost->this_id = qpti->scsi_id; in qpti_get_scsi_id()
779 qpti->qhost->max_sectors = 64; in qpti_get_scsi_id()
781 printk("SCSI ID %d ", qpti->scsi_id); in qpti_get_scsi_id()
784 static void qpti_get_bursts(struct qlogicpti *qpti) in qpti_get_bursts() argument
786 struct platform_device *op = qpti->op; in qpti_get_bursts()
798 qpti->bursts = bursts; in qpti_get_bursts()
801 static void qpti_get_clock(struct qlogicpti *qpti) in qpti_get_clock() argument
808 cfreq = prom_getintdefault(qpti->prom_node,"clock-frequency",40000000); in qpti_get_clock()
809 qpti->clock = (cfreq + 500000)/1000000; in qpti_get_clock()
810 if (qpti->clock == 0) /* bullshit */ in qpti_get_clock()
811 qpti->clock = 40; in qpti_get_clock()
817 static int qpti_map_queues(struct qlogicpti *qpti) in qpti_map_queues() argument
819 struct platform_device *op = qpti->op; in qpti_map_queues()
822 qpti->res_cpu = dma_alloc_coherent(&op->dev, in qpti_map_queues()
824 &qpti->res_dvma, GFP_ATOMIC); in qpti_map_queues()
825 if (qpti->res_cpu == NULL || in qpti_map_queues()
826 qpti->res_dvma == 0) { in qpti_map_queues()
831 qpti->req_cpu = dma_alloc_coherent(&op->dev, in qpti_map_queues()
833 &qpti->req_dvma, GFP_ATOMIC); in qpti_map_queues()
834 if (qpti->req_cpu == NULL || in qpti_map_queues()
835 qpti->req_dvma == 0) { in qpti_map_queues()
837 qpti->res_cpu, qpti->res_dvma); in qpti_map_queues()
841 memset(qpti->res_cpu, 0, QSIZE(RES_QUEUE_LEN)); in qpti_map_queues()
842 memset(qpti->req_cpu, 0, QSIZE(QLOGICPTI_REQ_QUEUE_LEN)); in qpti_map_queues()
849 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_info() local
852 qpti->qhost->irq, qpti->qregs); in qlogicpti_info()
869 struct qlogicpti *qpti) in cmd_frob() argument
879 if (qpti->cmd_count[Cmnd->device->id] == 0) in cmd_frob()
880 qpti->tag_ages[Cmnd->device->id] = jiffies; in cmd_frob()
881 if (time_after(jiffies, qpti->tag_ages[Cmnd->device->id] + (5*HZ))) { in cmd_frob()
883 qpti->tag_ages[Cmnd->device->id] = jiffies; in cmd_frob()
899 struct qlogicpti *qpti, u_int in_ptr, u_int out_ptr) in load_cmd() argument
909 sg_count = dma_map_sg(&qpti->op->dev, sg, in load_cmd()
931 cont = (struct Continuation_Entry *) &qpti->req_cpu[in_ptr]; in load_cmd()
960 qpti->cmd_slots[in_ptr] = Cmnd; in load_cmd()
962 qpti->cmd_count[Cmnd->device->id]++; in load_cmd()
963 sbus_writew(in_ptr, qpti->qregs + MBOX4); in load_cmd()
964 qpti->req_in_ptr = in_ptr; in load_cmd()
980 struct qlogicpti *qpti = shost_priv(sdev->host); in qlogicpti_slave_configure() local
987 qpti->dev_param[tgt].device_flags |= 0x10; in qlogicpti_slave_configure()
989 qpti->dev_param[tgt].synchronous_offset = 0; in qlogicpti_slave_configure()
990 qpti->dev_param[tgt].synchronous_period = 0; in qlogicpti_slave_configure()
994 qpti->dev_param[tgt].device_flags |= 0x20; in qlogicpti_slave_configure()
998 param[2] = (qpti->dev_param[tgt].device_flags << 8); in qlogicpti_slave_configure()
999 if (qpti->dev_param[tgt].device_flags & 0x10) { in qlogicpti_slave_configure()
1000 param[3] = (qpti->dev_param[tgt].synchronous_offset << 8) | in qlogicpti_slave_configure()
1001 qpti->dev_param[tgt].synchronous_period; in qlogicpti_slave_configure()
1005 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_slave_configure()
1021 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_queuecommand_lck() local
1026 in_ptr = qpti->req_in_ptr; in qlogicpti_queuecommand_lck()
1027 cmd = (struct Command_Entry *) &qpti->req_cpu[in_ptr]; in qlogicpti_queuecommand_lck()
1028 out_ptr = sbus_readw(qpti->qregs + MBOX4); in qlogicpti_queuecommand_lck()
1033 if (qpti->send_marker) { in qlogicpti_queuecommand_lck()
1035 qpti->send_marker = 0; in qlogicpti_queuecommand_lck()
1037 sbus_writew(in_ptr, qpti->qregs + MBOX4); in qlogicpti_queuecommand_lck()
1038 qpti->req_in_ptr = in_ptr; in qlogicpti_queuecommand_lck()
1041 cmd = (struct Command_Entry *) &qpti->req_cpu[in_ptr]; in qlogicpti_queuecommand_lck()
1044 cmd_frob(cmd, Cmnd, qpti); in qlogicpti_queuecommand_lck()
1045 if ((in_ptr = load_cmd(Cmnd, cmd, qpti, in_ptr, out_ptr)) == -1) in qlogicpti_queuecommand_lck()
1054 qpti->qpti_id); in qlogicpti_queuecommand_lck()
1131 static struct scsi_cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti) in qlogicpti_intr_handler() argument
1137 if (!(sbus_readw(qpti->qregs + SBUS_STAT) & SBUS_STAT_RINT)) in qlogicpti_intr_handler()
1140 in_ptr = sbus_readw(qpti->qregs + MBOX5); in qlogicpti_intr_handler()
1141 sbus_writew(HCCTRL_CRIRQ, qpti->qregs + HCCTRL); in qlogicpti_intr_handler()
1142 if (sbus_readw(qpti->qregs + SBUS_SEMAPHORE) & SBUS_SEMAPHORE_LCK) { in qlogicpti_intr_handler()
1143 switch (sbus_readw(qpti->qregs + MBOX0)) { in qlogicpti_intr_handler()
1146 qpti->send_marker = 1; in qlogicpti_intr_handler()
1154 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_intr_handler()
1158 out_ptr = qpti->res_out_ptr; in qlogicpti_intr_handler()
1162 sts = (struct Status_Entry *) &qpti->res_cpu[out_ptr]; in qlogicpti_intr_handler()
1170 Cmnd = qpti->cmd_slots[cmd_slot]; in qlogicpti_intr_handler()
1171 qpti->cmd_slots[cmd_slot] = NULL; in qlogicpti_intr_handler()
1176 qpti->send_marker = 1; in qlogicpti_intr_handler()
1184 qlogicpti_return_status(sts, qpti->qpti_id); in qlogicpti_intr_handler()
1189 dma_unmap_sg(&qpti->op->dev, in qlogicpti_intr_handler()
1193 qpti->cmd_count[Cmnd->device->id]--; in qlogicpti_intr_handler()
1194 sbus_writew(out_ptr, qpti->qregs + MBOX5); in qlogicpti_intr_handler()
1198 qpti->res_out_ptr = out_ptr; in qlogicpti_intr_handler()
1205 struct qlogicpti *qpti = dev_id; in qpti_intr() local
1209 spin_lock_irqsave(qpti->qhost->host_lock, flags); in qpti_intr()
1210 dq = qlogicpti_intr_handler(qpti); in qpti_intr()
1221 spin_unlock_irqrestore(qpti->qhost->host_lock, flags); in qpti_intr()
1230 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_abort() local
1236 qpti->qpti_id, (int)Cmnd->device->id, (int)Cmnd->device->lun); in qlogicpti_abort()
1238 qlogicpti_disable_irqs(qpti); in qlogicpti_abort()
1244 if (qpti->cmd_slots[i] == Cmnd) in qlogicpti_abort()
1252 if (qlogicpti_mbox_command(qpti, param, 0) || in qlogicpti_abort()
1255 qpti->qpti_id, param[0]); in qlogicpti_abort()
1259 qlogicpti_enable_irqs(qpti); in qlogicpti_abort()
1268 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_reset() local
1272 qpti->qpti_id); in qlogicpti_reset()
1274 qlogicpti_disable_irqs(qpti); in qlogicpti_reset()
1277 param[1] = qpti->host_param.bus_reset_delay; in qlogicpti_reset()
1278 if (qlogicpti_mbox_command(qpti, param, 0) || in qlogicpti_reset()
1281 qpti->qpti_id, param[0]); in qlogicpti_reset()
1285 qlogicpti_enable_irqs(qpti); in qlogicpti_reset()
1308 struct qlogicpti *qpti; in qpti_sbus_probe() local
1322 qpti = shost_priv(host); in qpti_sbus_probe()
1325 qpti->qhost = host; in qpti_sbus_probe()
1326 qpti->op = op; in qpti_sbus_probe()
1327 qpti->qpti_id = nqptis; in qpti_sbus_probe()
1328 qpti->is_pti = !of_node_name_eq(op->dev.of_node, "QLGC,isp"); in qpti_sbus_probe()
1330 if (qpti_map_regs(qpti) < 0) in qpti_sbus_probe()
1333 if (qpti_register_irq(qpti) < 0) in qpti_sbus_probe()
1336 qpti_get_scsi_id(qpti); in qpti_sbus_probe()
1337 qpti_get_bursts(qpti); in qpti_sbus_probe()
1338 qpti_get_clock(qpti); in qpti_sbus_probe()
1341 memset(qpti->cmd_slots, 0, sizeof(qpti->cmd_slots)); in qpti_sbus_probe()
1343 if (qpti_map_queues(qpti) < 0) in qpti_sbus_probe()
1347 if (qlogicpti_load_firmware(qpti)) in qpti_sbus_probe()
1349 if (qpti->is_pti) { in qpti_sbus_probe()
1351 if (qlogicpti_verify_tmon(qpti)) in qpti_sbus_probe()
1359 printk("(Firmware v%d.%d.%d)", qpti->fware_majrev, in qpti_sbus_probe()
1360 qpti->fware_minrev, qpti->fware_micrev); in qpti_sbus_probe()
1365 qpti->differential = of_property_read_bool(dp, "differential"); in qpti_sbus_probe()
1368 qpti->qpti_id, in qpti_sbus_probe()
1369 (qpti->ultra ? "Ultra" : "Fast"), in qpti_sbus_probe()
1370 (qpti->differential ? "differential" : "single ended")); in qpti_sbus_probe()
1373 printk("qlogicpti%d: Failed scsi_add_host\n", qpti->qpti_id); in qpti_sbus_probe()
1377 dev_set_drvdata(&op->dev, qpti); in qpti_sbus_probe()
1379 qpti_chain_add(qpti); in qpti_sbus_probe()
1390 qpti->res_cpu, qpti->res_dvma); in qpti_sbus_probe()
1393 qpti->req_cpu, qpti->req_dvma); in qpti_sbus_probe()
1397 free_irq(qpti->irq, qpti); in qpti_sbus_probe()
1400 of_iounmap(&op->resource[0], qpti->qregs, in qpti_sbus_probe()
1402 if (qpti->is_pti) in qpti_sbus_probe()
1403 of_iounmap(&op->resource[0], qpti->sreg, in qpti_sbus_probe()
1414 struct qlogicpti *qpti = dev_get_drvdata(&op->dev); in qpti_sbus_remove() local
1416 qpti_chain_del(qpti); in qpti_sbus_remove()
1418 scsi_remove_host(qpti->qhost); in qpti_sbus_remove()
1421 sbus_writew(0, qpti->qregs + SBUS_CTRL); in qpti_sbus_remove()
1424 free_irq(qpti->irq, qpti); in qpti_sbus_remove()
1429 qpti->res_cpu, qpti->res_dvma); in qpti_sbus_remove()
1432 qpti->req_cpu, qpti->req_dvma); in qpti_sbus_remove()
1435 of_iounmap(&op->resource[0], qpti->qregs, in qpti_sbus_remove()
1437 if (qpti->is_pti) in qpti_sbus_remove()
1438 of_iounmap(&op->resource[0], qpti->sreg, sizeof(unsigned char)); in qpti_sbus_remove()
1440 scsi_host_put(qpti->qhost); in qpti_sbus_remove()