Lines Matching refs:qpti
139 static inline void qlogicpti_enable_irqs(struct qlogicpti *qpti) in qlogicpti_enable_irqs() argument
142 qpti->qregs + SBUS_CTRL); in qlogicpti_enable_irqs()
145 static inline void qlogicpti_disable_irqs(struct qlogicpti *qpti) in qlogicpti_disable_irqs() argument
147 sbus_writew(0, qpti->qregs + SBUS_CTRL); in qlogicpti_disable_irqs()
150 static inline void set_sbus_cfg1(struct qlogicpti *qpti) in set_sbus_cfg1() argument
153 u8 bursts = qpti->bursts; in set_sbus_cfg1()
173 sbus_writew(val, qpti->qregs + SBUS_CFG1); in set_sbus_cfg1()
176 static int qlogicpti_mbox_command(struct qlogicpti *qpti, u_short param[], int force) in qlogicpti_mbox_command() argument
185 tmp = sbus_readw(qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
187 sbus_writew(tmp, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
191 while (--loop_count && (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_HIRQ)) { in qlogicpti_mbox_command()
197 qpti->qpti_id); in qlogicpti_mbox_command()
201 case 6: sbus_writew(param[5], qpti->qregs + MBOX5); in qlogicpti_mbox_command()
202 case 5: sbus_writew(param[4], qpti->qregs + MBOX4); in qlogicpti_mbox_command()
203 case 4: sbus_writew(param[3], qpti->qregs + MBOX3); in qlogicpti_mbox_command()
204 case 3: sbus_writew(param[2], qpti->qregs + MBOX2); in qlogicpti_mbox_command()
205 case 2: sbus_writew(param[1], qpti->qregs + MBOX1); in qlogicpti_mbox_command()
206 case 1: sbus_writew(param[0], qpti->qregs + MBOX0); in qlogicpti_mbox_command()
210 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
212 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
215 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
218 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
220 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
225 (sbus_readw(qpti->qregs + HCCTRL) & HCCTRL_CRIRQ)) in qlogicpti_mbox_command()
229 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
234 !(sbus_readw(qpti->qregs + SBUS_SEMAPHORE) & SBUS_SEMAPHORE_LCK)) { in qlogicpti_mbox_command()
238 if (sbus_readw(qpti->qregs + MBOX0) & 0x4000) in qlogicpti_mbox_command()
243 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
247 while (--loop_count && (sbus_readw(qpti->qregs + MBOX0) == 0x04)) in qlogicpti_mbox_command()
251 qpti->qpti_id, param[0]); in qlogicpti_mbox_command()
255 case 6: param[5] = sbus_readw(qpti->qregs + MBOX5); in qlogicpti_mbox_command()
256 case 5: param[4] = sbus_readw(qpti->qregs + MBOX4); in qlogicpti_mbox_command()
257 case 4: param[3] = sbus_readw(qpti->qregs + MBOX3); in qlogicpti_mbox_command()
258 case 3: param[2] = sbus_readw(qpti->qregs + MBOX2); in qlogicpti_mbox_command()
259 case 2: param[1] = sbus_readw(qpti->qregs + MBOX1); in qlogicpti_mbox_command()
260 case 1: param[0] = sbus_readw(qpti->qregs + MBOX0); in qlogicpti_mbox_command()
264 tmp = sbus_readw(qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
266 sbus_writew(tmp, qpti->qregs + HCCTRL); in qlogicpti_mbox_command()
269 tmp = sbus_readw(qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
271 sbus_writew(tmp, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_mbox_command()
277 static inline void qlogicpti_set_hostdev_defaults(struct qlogicpti *qpti) in qlogicpti_set_hostdev_defaults() argument
281 qpti->host_param.initiator_scsi_id = qpti->scsi_id; in qlogicpti_set_hostdev_defaults()
282 qpti->host_param.bus_reset_delay = 3; in qlogicpti_set_hostdev_defaults()
283 qpti->host_param.retry_count = 0; in qlogicpti_set_hostdev_defaults()
284 qpti->host_param.retry_delay = 5; in qlogicpti_set_hostdev_defaults()
285 qpti->host_param.async_data_setup_time = 3; in qlogicpti_set_hostdev_defaults()
286 qpti->host_param.req_ack_active_negation = 1; in qlogicpti_set_hostdev_defaults()
287 qpti->host_param.data_line_active_negation = 1; in qlogicpti_set_hostdev_defaults()
288 qpti->host_param.data_dma_burst_enable = 1; in qlogicpti_set_hostdev_defaults()
289 qpti->host_param.command_dma_burst_enable = 1; in qlogicpti_set_hostdev_defaults()
290 qpti->host_param.tag_aging = 8; in qlogicpti_set_hostdev_defaults()
291 qpti->host_param.selection_timeout = 250; in qlogicpti_set_hostdev_defaults()
292 qpti->host_param.max_queue_depth = 256; in qlogicpti_set_hostdev_defaults()
302 qpti->dev_param[i].device_flags = 0xcd; in qlogicpti_set_hostdev_defaults()
303 qpti->dev_param[i].execution_throttle = 16; in qlogicpti_set_hostdev_defaults()
304 if (qpti->ultra) { in qlogicpti_set_hostdev_defaults()
305 qpti->dev_param[i].synchronous_period = 12; in qlogicpti_set_hostdev_defaults()
306 qpti->dev_param[i].synchronous_offset = 8; in qlogicpti_set_hostdev_defaults()
308 qpti->dev_param[i].synchronous_period = 25; in qlogicpti_set_hostdev_defaults()
309 qpti->dev_param[i].synchronous_offset = 12; in qlogicpti_set_hostdev_defaults()
311 qpti->dev_param[i].device_enable = 1; in qlogicpti_set_hostdev_defaults()
317 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_reset_hardware() local
327 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
330 if (sbus_readw(qpti->qregs + CPU_PCTRL) & CPU_PCTRL_BSY) { in qlogicpti_reset_hardware()
331 sbus_writew(CPU_ORIDE_RMOD, qpti->qregs + CPU_ORIDE); in qlogicpti_reset_hardware()
332 sbus_writew(CPU_CMD_BRESET, qpti->qregs + CPU_CMD); in qlogicpti_reset_hardware()
336 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); in qlogicpti_reset_hardware()
337 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); in qlogicpti_reset_hardware()
338 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + DATA_DMA_CTRL); in qlogicpti_reset_hardware()
341 while (--loop_count && ((sbus_readw(qpti->qregs + MBOX0) & 0xff) == 0x04)) in qlogicpti_reset_hardware()
345 qpti->qpti_id); in qlogicpti_reset_hardware()
347 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
348 set_sbus_cfg1(qpti); in qlogicpti_reset_hardware()
349 qlogicpti_enable_irqs(qpti); in qlogicpti_reset_hardware()
351 if (sbus_readw(qpti->qregs + RISC_PSR) & RISC_PSR_ULTRA) { in qlogicpti_reset_hardware()
352 qpti->ultra = 1; in qlogicpti_reset_hardware()
354 qpti->qregs + RISC_MTREG); in qlogicpti_reset_hardware()
356 qpti->ultra = 0; in qlogicpti_reset_hardware()
358 qpti->qregs + RISC_MTREG); in qlogicpti_reset_hardware()
363 qlogicpti_set_hostdev_defaults(qpti); in qlogicpti_reset_hardware()
366 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_reset_hardware()
371 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
373 qpti->qpti_id); in qlogicpti_reset_hardware()
380 param[1] = qpti->host_param.initiator_scsi_id; in qlogicpti_reset_hardware()
381 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_reset_hardware()
384 qpti->qpti_id); in qlogicpti_reset_hardware()
390 qpti->req_in_ptr = qpti->res_out_ptr = 0; in qlogicpti_reset_hardware()
394 param[2] = (u_short) (qpti->res_dvma >> 16); in qlogicpti_reset_hardware()
395 param[3] = (u_short) (qpti->res_dvma & 0xffff); in qlogicpti_reset_hardware()
397 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
399 qpti->qpti_id); in qlogicpti_reset_hardware()
406 param[2] = (u_short) (qpti->req_dvma >> 16); in qlogicpti_reset_hardware()
407 param[3] = (u_short) (qpti->req_dvma & 0xffff); in qlogicpti_reset_hardware()
409 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_reset_hardware()
411 qpti->qpti_id); in qlogicpti_reset_hardware()
417 param[1] = qpti->host_param.retry_count; in qlogicpti_reset_hardware()
418 param[2] = qpti->host_param.retry_delay; in qlogicpti_reset_hardware()
419 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
422 param[1] = qpti->host_param.tag_aging; in qlogicpti_reset_hardware()
423 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
428 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
432 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
435 param[1] = qpti->host_param.selection_timeout; in qlogicpti_reset_hardware()
436 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
441 param[2] = (qpti->dev_param[i].device_flags << 8); in qlogicpti_reset_hardware()
447 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
454 param[1] = qpti->host_param.bus_reset_delay; in qlogicpti_reset_hardware()
455 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_reset_hardware()
456 qpti->send_marker = 1; in qlogicpti_reset_hardware()
464 static int qlogicpti_load_firmware(struct qlogicpti *qpti) in qlogicpti_load_firmware() argument
469 struct Scsi_Host *host = qpti->qhost; in qlogicpti_load_firmware()
477 err = request_firmware(&fw, fwname, &qpti->op->dev); in qlogicpti_load_firmware()
502 qpti->qpti_id); in qlogicpti_load_firmware()
506 sbus_writew(SBUS_CTRL_RESET, qpti->qregs + SBUS_CTRL); in qlogicpti_load_firmware()
507 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + CMD_DMA_CTRL); in qlogicpti_load_firmware()
508 sbus_writew((DMA_CTRL_CCLEAR | DMA_CTRL_CIRQ), qpti->qregs + DATA_DMA_CTRL); in qlogicpti_load_firmware()
510 while (--timeout && (sbus_readw(qpti->qregs + SBUS_CTRL) & SBUS_CTRL_RESET)) in qlogicpti_load_firmware()
513 printk(KERN_EMERG "qlogicpti%d: Cannot reset the ISP.", qpti->qpti_id); in qlogicpti_load_firmware()
518 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
521 sbus_writew((SBUS_CTRL_GENAB | SBUS_CTRL_ERIRQ), qpti->qregs + SBUS_CTRL); in qlogicpti_load_firmware()
522 set_sbus_cfg1(qpti); in qlogicpti_load_firmware()
523 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_load_firmware()
525 if (sbus_readw(qpti->qregs + RISC_PSR) & RISC_PSR_ULTRA) { in qlogicpti_load_firmware()
526 qpti->ultra = 1; in qlogicpti_load_firmware()
528 qpti->qregs + RISC_MTREG); in qlogicpti_load_firmware()
530 qpti->ultra = 0; in qlogicpti_load_firmware()
532 qpti->qregs + RISC_MTREG); in qlogicpti_load_firmware()
535 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
538 sbus_writew(HCCTRL_PAUSE, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
539 if (sbus_readw(qpti->qregs + CPU_PDIFF) & CPU_PDIFF_MODE) in qlogicpti_load_firmware()
540 qpti->differential = 1; in qlogicpti_load_firmware()
542 qpti->differential = 0; in qlogicpti_load_firmware()
543 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
550 if (qlogicpti_mbox_command(qpti, param, 1)) { in qlogicpti_load_firmware()
552 qpti->qpti_id); in qlogicpti_load_firmware()
562 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
565 qpti->qpti_id); in qlogicpti_load_firmware()
572 sbus_writew(HCCTRL_RESET, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
575 qlogicpti_enable_irqs(qpti); in qlogicpti_load_firmware()
576 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_load_firmware()
577 sbus_writew(HCCTRL_REL, qpti->qregs + HCCTRL); in qlogicpti_load_firmware()
582 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
585 qpti->qpti_id); in qlogicpti_load_firmware()
593 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
596 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
599 qpti->qpti_id); in qlogicpti_load_firmware()
605 qpti->fware_majrev = param[1]; in qlogicpti_load_firmware()
606 qpti->fware_minrev = param[2]; in qlogicpti_load_firmware()
607 qpti->fware_micrev = param[3]; in qlogicpti_load_firmware()
611 param[1] = qpti->clock; in qlogicpti_load_firmware()
612 if (qlogicpti_mbox_command(qpti, param, 1) || in qlogicpti_load_firmware()
615 qpti->qpti_id); in qlogicpti_load_firmware()
620 if (qpti->is_pti != 0) { in qlogicpti_load_firmware()
624 param[2] = (unsigned short) qpti->scsi_id; in qlogicpti_load_firmware()
625 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
630 qlogicpti_mbox_command(qpti, param, 1); in qlogicpti_load_firmware()
640 static int qlogicpti_verify_tmon(struct qlogicpti *qpti) in qlogicpti_verify_tmon() argument
642 int curstat = sbus_readb(qpti->sreg); in qlogicpti_verify_tmon()
645 if (!(curstat & SREG_FUSE) && (qpti->swsreg & SREG_FUSE)) in qlogicpti_verify_tmon()
646 printk("qlogicpti%d: Fuse returned to normal state.\n", qpti->qpti_id); in qlogicpti_verify_tmon()
647 if (!(curstat & SREG_TPOWER) && (qpti->swsreg & SREG_TPOWER)) in qlogicpti_verify_tmon()
648 printk("qlogicpti%d: termpwr back to normal state.\n", qpti->qpti_id); in qlogicpti_verify_tmon()
649 if (curstat != qpti->swsreg) { in qlogicpti_verify_tmon()
653 printk("qlogicpti%d: Fuse is open!\n", qpti->qpti_id); in qlogicpti_verify_tmon()
657 printk("qlogicpti%d: termpwr failure\n", qpti->qpti_id); in qlogicpti_verify_tmon()
659 if (qpti->differential && in qlogicpti_verify_tmon()
663 "differential bus! Please fix!\n", qpti->qpti_id); in qlogicpti_verify_tmon()
665 qpti->swsreg = curstat; in qlogicpti_verify_tmon()
673 static void qpti_chain_add(struct qlogicpti *qpti) in qpti_chain_add() argument
681 qlink->next = qpti; in qpti_chain_add()
683 qptichain = qpti; in qpti_chain_add()
685 qpti->next = NULL; in qpti_chain_add()
689 static void qpti_chain_del(struct qlogicpti *qpti) in qpti_chain_del() argument
692 if (qptichain == qpti) { in qpti_chain_del()
693 qptichain = qpti->next; in qpti_chain_del()
696 while(qlink->next != qpti) in qpti_chain_del()
698 qlink->next = qpti->next; in qpti_chain_del()
700 qpti->next = NULL; in qpti_chain_del()
704 static int qpti_map_regs(struct qlogicpti *qpti) in qpti_map_regs() argument
706 struct platform_device *op = qpti->op; in qpti_map_regs()
708 qpti->qregs = of_ioremap(&op->resource[0], 0, in qpti_map_regs()
711 if (!qpti->qregs) { in qpti_map_regs()
715 if (qpti->is_pti) { in qpti_map_regs()
716 qpti->sreg = of_ioremap(&op->resource[0], (16 * 4096), in qpti_map_regs()
719 if (!qpti->sreg) { in qpti_map_regs()
727 static int qpti_register_irq(struct qlogicpti *qpti) in qpti_register_irq() argument
729 struct platform_device *op = qpti->op; in qpti_register_irq()
731 qpti->qhost->irq = qpti->irq = op->archdata.irqs[0]; in qpti_register_irq()
739 if (request_irq(qpti->irq, qpti_intr, in qpti_register_irq()
740 IRQF_SHARED, "QlogicPTI", qpti)) in qpti_register_irq()
743 printk("qlogicpti%d: IRQ %d ", qpti->qpti_id, qpti->irq); in qpti_register_irq()
748 printk("qlogicpti%d: Cannot acquire irq line\n", qpti->qpti_id); in qpti_register_irq()
752 static void qpti_get_scsi_id(struct qlogicpti *qpti) in qpti_get_scsi_id() argument
754 struct platform_device *op = qpti->op; in qpti_get_scsi_id()
759 qpti->scsi_id = of_getintprop_default(dp, "initiator-id", -1); in qpti_get_scsi_id()
760 if (qpti->scsi_id == -1) in qpti_get_scsi_id()
761 qpti->scsi_id = of_getintprop_default(dp, "scsi-initiator-id", in qpti_get_scsi_id()
763 if (qpti->scsi_id == -1) in qpti_get_scsi_id()
764 qpti->scsi_id = in qpti_get_scsi_id()
767 qpti->qhost->this_id = qpti->scsi_id; in qpti_get_scsi_id()
768 qpti->qhost->max_sectors = 64; in qpti_get_scsi_id()
770 printk("SCSI ID %d ", qpti->scsi_id); in qpti_get_scsi_id()
773 static void qpti_get_bursts(struct qlogicpti *qpti) in qpti_get_bursts() argument
775 struct platform_device *op = qpti->op; in qpti_get_bursts()
787 qpti->bursts = bursts; in qpti_get_bursts()
790 static void qpti_get_clock(struct qlogicpti *qpti) in qpti_get_clock() argument
797 cfreq = prom_getintdefault(qpti->prom_node,"clock-frequency",40000000); in qpti_get_clock()
798 qpti->clock = (cfreq + 500000)/1000000; in qpti_get_clock()
799 if (qpti->clock == 0) /* bullshit */ in qpti_get_clock()
800 qpti->clock = 40; in qpti_get_clock()
806 static int qpti_map_queues(struct qlogicpti *qpti) in qpti_map_queues() argument
808 struct platform_device *op = qpti->op; in qpti_map_queues()
811 qpti->res_cpu = dma_alloc_coherent(&op->dev, in qpti_map_queues()
813 &qpti->res_dvma, GFP_ATOMIC); in qpti_map_queues()
814 if (qpti->res_cpu == NULL || in qpti_map_queues()
815 qpti->res_dvma == 0) { in qpti_map_queues()
820 qpti->req_cpu = dma_alloc_coherent(&op->dev, in qpti_map_queues()
822 &qpti->req_dvma, GFP_ATOMIC); in qpti_map_queues()
823 if (qpti->req_cpu == NULL || in qpti_map_queues()
824 qpti->req_dvma == 0) { in qpti_map_queues()
826 qpti->res_cpu, qpti->res_dvma); in qpti_map_queues()
830 memset(qpti->res_cpu, 0, QSIZE(RES_QUEUE_LEN)); in qpti_map_queues()
831 memset(qpti->req_cpu, 0, QSIZE(QLOGICPTI_REQ_QUEUE_LEN)); in qpti_map_queues()
838 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_info() local
841 qpti->qhost->irq, qpti->qregs); in qlogicpti_info()
858 struct qlogicpti *qpti) in cmd_frob() argument
868 if (qpti->cmd_count[Cmnd->device->id] == 0) in cmd_frob()
869 qpti->tag_ages[Cmnd->device->id] = jiffies; in cmd_frob()
870 if (time_after(jiffies, qpti->tag_ages[Cmnd->device->id] + (5*HZ))) { in cmd_frob()
872 qpti->tag_ages[Cmnd->device->id] = jiffies; in cmd_frob()
888 struct qlogicpti *qpti, u_int in_ptr, u_int out_ptr) in load_cmd() argument
898 sg_count = dma_map_sg(&qpti->op->dev, sg, in load_cmd()
919 cont = (struct Continuation_Entry *) &qpti->req_cpu[in_ptr]; in load_cmd()
948 qpti->cmd_slots[in_ptr] = Cmnd; in load_cmd()
950 qpti->cmd_count[Cmnd->device->id]++; in load_cmd()
951 sbus_writew(in_ptr, qpti->qregs + MBOX4); in load_cmd()
952 qpti->req_in_ptr = in_ptr; in load_cmd()
968 struct qlogicpti *qpti = shost_priv(sdev->host); in qlogicpti_slave_configure() local
975 qpti->dev_param[tgt].device_flags |= 0x10; in qlogicpti_slave_configure()
977 qpti->dev_param[tgt].synchronous_offset = 0; in qlogicpti_slave_configure()
978 qpti->dev_param[tgt].synchronous_period = 0; in qlogicpti_slave_configure()
982 qpti->dev_param[tgt].device_flags |= 0x20; in qlogicpti_slave_configure()
986 param[2] = (qpti->dev_param[tgt].device_flags << 8); in qlogicpti_slave_configure()
987 if (qpti->dev_param[tgt].device_flags & 0x10) { in qlogicpti_slave_configure()
988 param[3] = (qpti->dev_param[tgt].synchronous_offset << 8) | in qlogicpti_slave_configure()
989 qpti->dev_param[tgt].synchronous_period; in qlogicpti_slave_configure()
993 qlogicpti_mbox_command(qpti, param, 0); in qlogicpti_slave_configure()
1008 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_queuecommand_lck() local
1015 in_ptr = qpti->req_in_ptr; in qlogicpti_queuecommand_lck()
1016 cmd = (struct Command_Entry *) &qpti->req_cpu[in_ptr]; in qlogicpti_queuecommand_lck()
1017 out_ptr = sbus_readw(qpti->qregs + MBOX4); in qlogicpti_queuecommand_lck()
1022 if (qpti->send_marker) { in qlogicpti_queuecommand_lck()
1024 qpti->send_marker = 0; in qlogicpti_queuecommand_lck()
1026 sbus_writew(in_ptr, qpti->qregs + MBOX4); in qlogicpti_queuecommand_lck()
1027 qpti->req_in_ptr = in_ptr; in qlogicpti_queuecommand_lck()
1030 cmd = (struct Command_Entry *) &qpti->req_cpu[in_ptr]; in qlogicpti_queuecommand_lck()
1033 cmd_frob(cmd, Cmnd, qpti); in qlogicpti_queuecommand_lck()
1034 if ((in_ptr = load_cmd(Cmnd, cmd, qpti, in_ptr, out_ptr)) == -1) in qlogicpti_queuecommand_lck()
1043 qpti->qpti_id); in qlogicpti_queuecommand_lck()
1120 static struct scsi_cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti) in qlogicpti_intr_handler() argument
1126 if (!(sbus_readw(qpti->qregs + SBUS_STAT) & SBUS_STAT_RINT)) in qlogicpti_intr_handler()
1129 in_ptr = sbus_readw(qpti->qregs + MBOX5); in qlogicpti_intr_handler()
1130 sbus_writew(HCCTRL_CRIRQ, qpti->qregs + HCCTRL); in qlogicpti_intr_handler()
1131 if (sbus_readw(qpti->qregs + SBUS_SEMAPHORE) & SBUS_SEMAPHORE_LCK) { in qlogicpti_intr_handler()
1132 switch (sbus_readw(qpti->qregs + MBOX0)) { in qlogicpti_intr_handler()
1135 qpti->send_marker = 1; in qlogicpti_intr_handler()
1143 sbus_writew(0, qpti->qregs + SBUS_SEMAPHORE); in qlogicpti_intr_handler()
1147 out_ptr = qpti->res_out_ptr; in qlogicpti_intr_handler()
1151 sts = (struct Status_Entry *) &qpti->res_cpu[out_ptr]; in qlogicpti_intr_handler()
1159 Cmnd = qpti->cmd_slots[cmd_slot]; in qlogicpti_intr_handler()
1160 qpti->cmd_slots[cmd_slot] = NULL; in qlogicpti_intr_handler()
1165 qpti->send_marker = 1; in qlogicpti_intr_handler()
1173 qlogicpti_return_status(sts, qpti->qpti_id); in qlogicpti_intr_handler()
1178 dma_unmap_sg(&qpti->op->dev, in qlogicpti_intr_handler()
1182 qpti->cmd_count[Cmnd->device->id]--; in qlogicpti_intr_handler()
1183 sbus_writew(out_ptr, qpti->qregs + MBOX5); in qlogicpti_intr_handler()
1187 qpti->res_out_ptr = out_ptr; in qlogicpti_intr_handler()
1194 struct qlogicpti *qpti = dev_id; in qpti_intr() local
1198 spin_lock_irqsave(qpti->qhost->host_lock, flags); in qpti_intr()
1199 dq = qlogicpti_intr_handler(qpti); in qpti_intr()
1210 spin_unlock_irqrestore(qpti->qhost->host_lock, flags); in qpti_intr()
1219 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_abort() local
1225 qpti->qpti_id, (int)Cmnd->device->id, (int)Cmnd->device->lun); in qlogicpti_abort()
1227 qlogicpti_disable_irqs(qpti); in qlogicpti_abort()
1233 if (qpti->cmd_slots[i] == Cmnd) in qlogicpti_abort()
1241 if (qlogicpti_mbox_command(qpti, param, 0) || in qlogicpti_abort()
1244 qpti->qpti_id, param[0]); in qlogicpti_abort()
1248 qlogicpti_enable_irqs(qpti); in qlogicpti_abort()
1257 struct qlogicpti *qpti = (struct qlogicpti *) host->hostdata; in qlogicpti_reset() local
1261 qpti->qpti_id); in qlogicpti_reset()
1263 qlogicpti_disable_irqs(qpti); in qlogicpti_reset()
1266 param[1] = qpti->host_param.bus_reset_delay; in qlogicpti_reset()
1267 if (qlogicpti_mbox_command(qpti, param, 0) || in qlogicpti_reset()
1270 qpti->qpti_id, param[0]); in qlogicpti_reset()
1274 qlogicpti_enable_irqs(qpti); in qlogicpti_reset()
1299 struct qlogicpti *qpti; in qpti_sbus_probe() local
1313 qpti = shost_priv(host); in qpti_sbus_probe()
1316 qpti->qhost = host; in qpti_sbus_probe()
1317 qpti->op = op; in qpti_sbus_probe()
1318 qpti->qpti_id = nqptis; in qpti_sbus_probe()
1319 strcpy(qpti->prom_name, op->dev.of_node->name); in qpti_sbus_probe()
1320 qpti->is_pti = strcmp(qpti->prom_name, "QLGC,isp"); in qpti_sbus_probe()
1322 if (qpti_map_regs(qpti) < 0) in qpti_sbus_probe()
1325 if (qpti_register_irq(qpti) < 0) in qpti_sbus_probe()
1328 qpti_get_scsi_id(qpti); in qpti_sbus_probe()
1329 qpti_get_bursts(qpti); in qpti_sbus_probe()
1330 qpti_get_clock(qpti); in qpti_sbus_probe()
1333 memset(qpti->cmd_slots, 0, sizeof(qpti->cmd_slots)); in qpti_sbus_probe()
1335 if (qpti_map_queues(qpti) < 0) in qpti_sbus_probe()
1339 if (qlogicpti_load_firmware(qpti)) in qpti_sbus_probe()
1341 if (qpti->is_pti) { in qpti_sbus_probe()
1343 if (qlogicpti_verify_tmon(qpti)) in qpti_sbus_probe()
1351 printk("(Firmware v%d.%d.%d)", qpti->fware_majrev, in qpti_sbus_probe()
1352 qpti->fware_minrev, qpti->fware_micrev); in qpti_sbus_probe()
1358 qpti->differential = 1; in qpti_sbus_probe()
1361 qpti->qpti_id, in qpti_sbus_probe()
1362 (qpti->ultra ? "Ultra" : "Fast"), in qpti_sbus_probe()
1363 (qpti->differential ? "differential" : "single ended")); in qpti_sbus_probe()
1366 printk("qlogicpti%d: Failed scsi_add_host\n", qpti->qpti_id); in qpti_sbus_probe()
1370 dev_set_drvdata(&op->dev, qpti); in qpti_sbus_probe()
1372 qpti_chain_add(qpti); in qpti_sbus_probe()
1383 qpti->res_cpu, qpti->res_dvma); in qpti_sbus_probe()
1386 qpti->req_cpu, qpti->req_dvma); in qpti_sbus_probe()
1390 of_iounmap(&op->resource[0], qpti->qregs, in qpti_sbus_probe()
1392 if (qpti->is_pti) in qpti_sbus_probe()
1393 of_iounmap(&op->resource[0], qpti->sreg, in qpti_sbus_probe()
1397 free_irq(qpti->irq, qpti); in qpti_sbus_probe()
1407 struct qlogicpti *qpti = dev_get_drvdata(&op->dev); in qpti_sbus_remove() local
1409 qpti_chain_del(qpti); in qpti_sbus_remove()
1411 scsi_remove_host(qpti->qhost); in qpti_sbus_remove()
1414 sbus_writew(0, qpti->qregs + SBUS_CTRL); in qpti_sbus_remove()
1417 free_irq(qpti->irq, qpti); in qpti_sbus_remove()
1422 qpti->res_cpu, qpti->res_dvma); in qpti_sbus_remove()
1425 qpti->req_cpu, qpti->req_dvma); in qpti_sbus_remove()
1428 of_iounmap(&op->resource[0], qpti->qregs, in qpti_sbus_remove()
1430 if (qpti->is_pti) in qpti_sbus_remove()
1431 of_iounmap(&op->resource[0], qpti->sreg, sizeof(unsigned char)); in qpti_sbus_remove()
1433 scsi_host_put(qpti->qhost); in qpti_sbus_remove()