Lines Matching refs:cp

869 #define CCB_DONE_VALID(cp)  (((u_long) cp) != CCB_DONE_EMPTY)  argument
873 #define CCB_DONE_VALID(cp) \ argument
874 ((((u_long) cp) & 0xffffffff00000000ul) && \
875 (((u_long) cp) & 0xfffffffful) != CCB_DONE_EMPTY)
1392 struct ccb * cp; member
1588 #define CCB_PHYS(cp,lbl) (cp->p_ccb + offsetof(struct ccb, lbl)) argument
1920 static void ncr_complete (struct ncb *np, struct ccb *cp);
1922 static void ncr_free_ccb (struct ncb *np, struct ccb *cp);
1923 static void ncr_init_ccb (struct ncb *np, struct ccb *cp);
1938 static int ncr_prepare_nego(struct ncb *np, struct ccb *cp, u_char *msgptr);
1943 static int ncr_scatter (struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd);
1945 static void ncr_setsync (struct ncb *np, struct ccb *cp, u_char scntl3, u_char sxfer);
1947 static void ncr_setwide (struct ncb *np, struct ccb *cp, u_char wide, u_char ack);
1953 static void ncr_put_start_queue(struct ncb *np, struct ccb *cp);
3463 *p++ =NADDR (header.cp); in ncr_script_fill()
3679 static void ncr_print_msg(struct ccb *cp, char *label, u_char *msg) in ncr_print_msg() argument
3681 PRINT_ADDR(cp->cmd, "%s: ", label); in ncr_print_msg()
4060 static int ncr_prepare_nego(struct ncb *np, struct ccb *cp, u_char *msgptr) in ncr_prepare_nego() argument
4062 struct tcb *tp = &np->target[cp->target]; in ncr_prepare_nego()
4095 cp->nego_status = nego; in ncr_prepare_nego()
4098 tp->nego_cp = cp; in ncr_prepare_nego()
4100 ncr_print_msg(cp, nego == NS_WIDE ? in ncr_prepare_nego()
4124 struct ccb *cp; in ncr_queue_command() local
4179 if (np->settle_time || !(cp=ncr_get_ccb (np, cmd))) { in ncr_queue_command()
4183 cp->cmd = cmd; in ncr_queue_command()
4194 if (cp ->tag != NO_TAG || in ncr_queue_command()
4195 (cp != np->ccb && np->disc && !(tp->usrflag & UF_NODISC))) in ncr_queue_command()
4198 msgptr = cp->scsi_smsg; in ncr_queue_command()
4202 if (cp->tag != NO_TAG) { in ncr_queue_command()
4241 msgptr[msglen++] = (cp->tag << 1) + 1; in ncr_queue_command()
4253 segments = ncr_scatter(np, cp, cp->cmd); in ncr_queue_command()
4255 ncr_free_ccb(np, cp); in ncr_queue_command()
4260 cp->data_len = 0; in ncr_queue_command()
4273 cp->nego_status = 0; in ncr_queue_command()
4276 msglen += ncr_prepare_nego (np, cp, msgptr + msglen); in ncr_queue_command()
4285 if (!cp->data_len) in ncr_queue_command()
4306 cp->phys.header.wgoalp = cpu_to_scr(goalp); in ncr_queue_command()
4307 cp->phys.header.wlastp = cpu_to_scr(lastp); in ncr_queue_command()
4328 cp->phys.header.lastp = cpu_to_scr(lastp); in ncr_queue_command()
4329 cp->phys.header.goalp = cpu_to_scr(goalp); in ncr_queue_command()
4332 cp->phys.header.savep = in ncr_queue_command()
4335 cp->phys.header.savep= cpu_to_scr(lastp); in ncr_queue_command()
4341 cp->startp = cp->phys.header.savep; in ncr_queue_command()
4357 cp->start.schedule.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, select)); in ncr_queue_command()
4358 cp->restart.schedule.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, resel_dsa)); in ncr_queue_command()
4362 cp->phys.select.sel_id = sdev_id(sdev); in ncr_queue_command()
4363 cp->phys.select.sel_scntl3 = tp->wval; in ncr_queue_command()
4364 cp->phys.select.sel_sxfer = tp->sval; in ncr_queue_command()
4368 cp->phys.smsg.addr = cpu_to_scr(CCB_PHYS (cp, scsi_smsg)); in ncr_queue_command()
4369 cp->phys.smsg.size = cpu_to_scr(msglen); in ncr_queue_command()
4374 memcpy(cp->cdb_buf, cmd->cmnd, min_t(int, cmd->cmd_len, sizeof(cp->cdb_buf))); in ncr_queue_command()
4375 cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, cdb_buf[0])); in ncr_queue_command()
4376 cp->phys.cmd.size = cpu_to_scr(cmd->cmd_len); in ncr_queue_command()
4381 cp->actualquirks = 0; in ncr_queue_command()
4382 cp->host_status = cp->nego_status ? HS_NEGOTIATE : HS_BUSY; in ncr_queue_command()
4383 cp->scsi_status = S_ILLEGAL; in ncr_queue_command()
4384 cp->parity_status = 0; in ncr_queue_command()
4386 cp->xerr_status = XE_OK; in ncr_queue_command()
4388 cp->sync_status = tp->sval; in ncr_queue_command()
4389 cp->wide_status = tp->wval; in ncr_queue_command()
4400 cp->magic = CCB_MAGIC; in ncr_queue_command()
4406 cp->auto_sense = 0; in ncr_queue_command()
4410 ncr_put_start_queue(np, cp); in ncr_queue_command()
4431 struct ccb *cp; in ncr_start_next_ccb() local
4441 cp = list_entry(qp, struct ccb, link_ccbq); in ncr_start_next_ccb()
4443 lp->jump_ccb[cp->tag == NO_TAG ? 0 : cp->tag] = in ncr_start_next_ccb()
4444 cpu_to_scr(CCB_PHYS (cp, restart)); in ncr_start_next_ccb()
4445 ncr_put_start_queue(np, cp); in ncr_start_next_ccb()
4449 static void ncr_put_start_queue(struct ncb *np, struct ccb *cp) in ncr_put_start_queue() argument
4462 np->scripth->tryloop [np->squeueput] = cpu_to_scr(CCB_PHYS (cp, start)); in ncr_put_start_queue()
4466 cp->queued = 1; in ncr_put_start_queue()
4565 struct ccb *cp; in ncr_reset_bus() local
4584 for (found=0, cp=np->ccb; cp; cp=cp->link_ccb) { in ncr_reset_bus()
4588 if (cp->host_status == HS_IDLE) continue; in ncr_reset_bus()
4589 if (cp->cmd == cmd) { in ncr_reset_bus()
4634 struct ccb *cp;
4650 for (found=0, cp=np->ccb; cp; cp=cp->link_ccb) {
4654 if (cp->host_status == HS_IDLE) continue;
4655 if (cp->cmd == cmd) {
4674 switch(cp->host_status) {
4677 printk ("%s: abort ccb=%p (cancel)\n", ncr_name (np), cp);
4678 cp->start.schedule.l_paddr =
4683 cp->restart.schedule.l_paddr =
4706 struct ccb *cp; in ncr_detach() local
4766 while ((cp=np->ccb->link_ccb) != NULL) { in ncr_detach()
4767 np->ccb->link_ccb = cp->link_ccb; in ncr_detach()
4768 if (cp->host_status) { in ncr_detach()
4770 ncr_name(np), cp->host_status); in ncr_detach()
4773 printk("%s: freeing ccb (%lx)\n", ncr_name(np), (u_long) cp); in ncr_detach()
4775 m_free_dma(cp, sizeof(*cp), "CCB"); in ncr_detach()
4816 void ncr_complete (struct ncb *np, struct ccb *cp) in ncr_complete() argument
4826 if (!cp || cp->magic != CCB_MAGIC || !cp->cmd) in ncr_complete()
4834 printk ("CCB=%lx STAT=%x/%x\n", (unsigned long)cp, in ncr_complete()
4835 cp->host_status,cp->scsi_status); in ncr_complete()
4841 cmd = cp->cmd; in ncr_complete()
4842 cp->cmd = NULL; in ncr_complete()
4852 if (cp == tp->nego_cp) in ncr_complete()
4858 if (cp->auto_sense) { in ncr_complete()
4859 cp->scsi_status = cp->auto_sense; in ncr_complete()
4868 if (cp == lp->held_ccb) { in ncr_complete()
4878 if (cp->parity_status > 1) { in ncr_complete()
4879 PRINT_ADDR(cmd, "%d parity error(s).\n",cp->parity_status); in ncr_complete()
4886 if (cp->xerr_status != XE_OK) { in ncr_complete()
4887 switch (cp->xerr_status) { in ncr_complete()
4896 cp->xerr_status); in ncr_complete()
4899 if (cp->host_status==HS_COMPLETE) in ncr_complete()
4900 cp->host_status = HS_FAIL; in ncr_complete()
4907 if (cp->host_status!=HS_COMPLETE || cp->scsi_status!=S_GOOD) { in ncr_complete()
4910 cp->host_status, cp->scsi_status); in ncr_complete()
4917 if ( (cp->host_status == HS_COMPLETE) in ncr_complete()
4918 && (cp->scsi_status == S_GOOD || in ncr_complete()
4919 cp->scsi_status == S_COND_MET)) { in ncr_complete()
4925 cmd->result = ScsiResult(DID_OK, cp->scsi_status); in ncr_complete()
4940 tp->bytes += cp->data_len; in ncr_complete()
4955 } else if ((cp->host_status == HS_COMPLETE) in ncr_complete()
4956 && (cp->scsi_status == S_CHECK_COND)) { in ncr_complete()
4965 memcpy(cmd->sense_buffer, cp->sense_buf, in ncr_complete()
4967 sizeof(cp->sense_buf))); in ncr_complete()
4976 } else if ((cp->host_status == HS_COMPLETE) in ncr_complete()
4977 && (cp->scsi_status == S_CONFLICT)) { in ncr_complete()
4983 } else if ((cp->host_status == HS_COMPLETE) in ncr_complete()
4984 && (cp->scsi_status == S_BUSY || in ncr_complete()
4985 cp->scsi_status == S_QUEUE_FULL)) { in ncr_complete()
4990 cmd->result = ScsiResult(DID_OK, cp->scsi_status); in ncr_complete()
4992 } else if ((cp->host_status == HS_SEL_TIMEOUT) in ncr_complete()
4993 || (cp->host_status == HS_TIMEOUT)) { in ncr_complete()
4998 cmd->result = ScsiResult(DID_TIME_OUT, cp->scsi_status); in ncr_complete()
5000 } else if (cp->host_status == HS_RESET) { in ncr_complete()
5005 cmd->result = ScsiResult(DID_RESET, cp->scsi_status); in ncr_complete()
5007 } else if (cp->host_status == HS_ABORTED) { in ncr_complete()
5012 cmd->result = ScsiResult(DID_ABORT, cp->scsi_status); in ncr_complete()
5020 cp->host_status, cp->scsi_status, cp); in ncr_complete()
5022 cmd->result = ScsiResult(DID_ERROR, cp->scsi_status); in ncr_complete()
5036 if (cp->host_status==HS_COMPLETE) { in ncr_complete()
5037 switch (cp->scsi_status) { in ncr_complete()
5048 printk (" STAT: %x\n", cp->scsi_status); in ncr_complete()
5051 } else printk (" HOSTERROR: %x", cp->host_status); in ncr_complete()
5058 ncr_free_ccb (np, cp); in ncr_complete()
5092 static void ncr_ccb_skipped(struct ncb *np, struct ccb *cp) in ncr_ccb_skipped() argument
5094 struct tcb *tp = &np->target[cp->target]; in ncr_ccb_skipped()
5095 struct lcb *lp = tp->lp[cp->lun]; in ncr_ccb_skipped()
5097 if (lp && cp != np->ccb) { in ncr_ccb_skipped()
5098 cp->host_status &= ~HS_SKIPMASK; in ncr_ccb_skipped()
5099 cp->start.schedule.l_paddr = in ncr_ccb_skipped()
5101 list_move_tail(&cp->link_ccbq, &lp->skip_ccbq); in ncr_ccb_skipped()
5102 if (cp->queued) { in ncr_ccb_skipped()
5106 if (cp->queued) { in ncr_ccb_skipped()
5108 cp->queued = 0; in ncr_ccb_skipped()
5118 struct ccb *cp; in ncr_wakeup_done() local
5128 cp = np->ccb_done[j]; in ncr_wakeup_done()
5129 if (!CCB_DONE_VALID(cp)) in ncr_wakeup_done()
5139 if (cp->host_status & HS_DONEMASK) in ncr_wakeup_done()
5140 ncr_complete (np, cp); in ncr_wakeup_done()
5141 else if (cp->host_status & HS_SKIPMASK) in ncr_wakeup_done()
5142 ncr_ccb_skipped (np, cp); in ncr_wakeup_done()
5148 cp = np->ccb; in ncr_wakeup_done()
5149 while (cp) { in ncr_wakeup_done()
5150 if (cp->host_status & HS_DONEMASK) in ncr_wakeup_done()
5151 ncr_complete (np, cp); in ncr_wakeup_done()
5152 else if (cp->host_status & HS_SKIPMASK) in ncr_wakeup_done()
5153 ncr_ccb_skipped (np, cp); in ncr_wakeup_done()
5154 cp = cp->link_ccb; in ncr_wakeup_done()
5164 struct ccb *cp = np->ccb; in ncr_wakeup() local
5166 while (cp) { in ncr_wakeup()
5167 if (cp->host_status != HS_IDLE) { in ncr_wakeup()
5168 cp->host_status = code; in ncr_wakeup()
5169 ncr_complete (np, cp); in ncr_wakeup()
5171 cp = cp->link_ccb; in ncr_wakeup()
5497 struct ccb *cp; in ncr_set_sync_wide_status() local
5511 for (cp = np->ccb; cp; cp = cp->link_ccb) { in ncr_set_sync_wide_status()
5512 if (!cp->cmd) continue; in ncr_set_sync_wide_status()
5513 if (scmd_id(cp->cmd) != target) continue; in ncr_set_sync_wide_status()
5515 cp->sync_status = tp->sval; in ncr_set_sync_wide_status()
5516 cp->wide_status = tp->wval; in ncr_set_sync_wide_status()
5518 cp->phys.select.sel_scntl3 = tp->wval; in ncr_set_sync_wide_status()
5519 cp->phys.select.sel_sxfer = tp->sval; in ncr_set_sync_wide_status()
5530 static void ncr_setsync (struct ncb *np, struct ccb *cp, u_char scntl3, u_char sxfer) in ncr_setsync() argument
5532 struct scsi_cmnd *cmd = cp->cmd; in ncr_setsync()
5587 static void ncr_setwide (struct ncb *np, struct ccb *cp, u_char wide, u_char ack) in ncr_setwide() argument
5589 struct scsi_cmnd *cmd = cp->cmd; in ncr_setwide()
6089 struct ccb *cp; in ncr_int_sto() local
6097 cp = np->ccb; in ncr_int_sto()
6098 while (cp && (CCB_PHYS (cp, phys) != dsa)) in ncr_int_sto()
6099 cp = cp->link_ccb; in ncr_int_sto()
6101 if (cp) { in ncr_int_sto()
6102 cp-> host_status = HS_SEL_TIMEOUT; in ncr_int_sto()
6103 ncr_complete (np, cp); in ncr_int_sto()
6256 struct ccb *cp; in ncr_int_ma() local
6319 cp = np->header.cp; in ncr_int_ma()
6320 if (CCB_PHYS(cp, phys) != dsa) in ncr_int_ma()
6321 cp = NULL; in ncr_int_ma()
6323 cp = np->ccb; in ncr_int_ma()
6324 while (cp && (CCB_PHYS (cp, phys) != dsa)) in ncr_int_ma()
6325 cp = cp->link_ccb; in ncr_int_ma()
6344 else if (cp) { in ncr_int_ma()
6345 if (dsp == CCB_PHYS (cp, patch[2])) { in ncr_int_ma()
6346 vdsp = &cp->patch[0]; in ncr_int_ma()
6349 else if (dsp == CCB_PHYS (cp, patch[6])) { in ncr_int_ma()
6350 vdsp = &cp->patch[4]; in ncr_int_ma()
6361 cp, np->header.cp, in ncr_int_ma()
6372 if (!cp) { in ncr_int_ma()
6375 ncr_name (np), (u_long) np->header.cp); in ncr_int_ma()
6386 tblp = (u32 *) ((char*) &cp->phys + oadr); in ncr_int_ma()
6407 PRINT_ADDR(cp->cmd, "internal error: cmd=%02x != %02x=(vdsp[0] " in ncr_int_ma()
6419 if (cp != np->header.cp) { in ncr_int_ma()
6422 ncr_name (np), (u_long) cp, (u_long) np->header.cp); in ncr_int_ma()
6430 PRINT_ADDR(cp->cmd, "phase change %x-%x %d@%08x resid=%d.\n", in ncr_int_ma()
6441 newcmd = cp->patch; in ncr_int_ma()
6442 newtmp = CCB_PHYS (cp, patch); in ncr_int_ma()
6443 if (newtmp == scr_to_cpu(cp->phys.header.savep)) { in ncr_int_ma()
6444 newcmd = &cp->patch[4]; in ncr_int_ma()
6445 newtmp = CCB_PHYS (cp, patch[4]); in ncr_int_ma()
6458 PRINT_ADDR(cp->cmd, "newcmd[%d] %x %x %x %x.\n", in ncr_int_ma()
6459 (int) (newcmd - cp->patch), in ncr_int_ma()
6516 cp->host_status = HS_BUSY; in ncr_int_ma()
6541 static void ncr_sir_to_redo(struct ncb *np, int num, struct ccb *cp) in ncr_sir_to_redo() argument
6543 struct scsi_cmnd *cmd = cp->cmd; in ncr_sir_to_redo()
6565 if (cp2 == cp) in ncr_sir_to_redo()
6570 lp->held_ccb = cp; /* Requeue when this one completes */ in ncr_sir_to_redo()
6598 cp->phys.header.savep = cp->startp; in ncr_sir_to_redo()
6599 cp->host_status = HS_BUSY; in ncr_sir_to_redo()
6600 cp->scsi_status = S_ILLEGAL; in ncr_sir_to_redo()
6602 ncr_put_start_queue(np, cp); in ncr_sir_to_redo()
6612 if (cp->auto_sense) in ncr_sir_to_redo()
6622 cp->scsi_smsg2[0] = IDENTIFY(0, cmd->device->lun); in ncr_sir_to_redo()
6623 cp->phys.smsg.addr = cpu_to_scr(CCB_PHYS (cp, scsi_smsg2)); in ncr_sir_to_redo()
6624 cp->phys.smsg.size = cpu_to_scr(1); in ncr_sir_to_redo()
6629 cp->phys.cmd.addr = cpu_to_scr(CCB_PHYS (cp, sensecmd)); in ncr_sir_to_redo()
6630 cp->phys.cmd.size = cpu_to_scr(6); in ncr_sir_to_redo()
6635 cp->sensecmd[0] = 0x03; in ncr_sir_to_redo()
6636 cp->sensecmd[1] = (cmd->device->lun & 0x7) << 5; in ncr_sir_to_redo()
6637 cp->sensecmd[4] = sizeof(cp->sense_buf); in ncr_sir_to_redo()
6642 memset(cp->sense_buf, 0, sizeof(cp->sense_buf)); in ncr_sir_to_redo()
6643 cp->phys.sense.addr = cpu_to_scr(CCB_PHYS(cp,sense_buf[0])); in ncr_sir_to_redo()
6644 cp->phys.sense.size = cpu_to_scr(sizeof(cp->sense_buf)); in ncr_sir_to_redo()
6651 cp->phys.header.savep = startp; in ncr_sir_to_redo()
6652 cp->phys.header.goalp = startp + 24; in ncr_sir_to_redo()
6653 cp->phys.header.lastp = startp; in ncr_sir_to_redo()
6654 cp->phys.header.wgoalp = startp + 24; in ncr_sir_to_redo()
6655 cp->phys.header.wlastp = startp; in ncr_sir_to_redo()
6657 cp->host_status = HS_BUSY; in ncr_sir_to_redo()
6658 cp->scsi_status = S_ILLEGAL; in ncr_sir_to_redo()
6659 cp->auto_sense = s_status; in ncr_sir_to_redo()
6661 cp->start.schedule.l_paddr = in ncr_sir_to_redo()
6668 cp->start.schedule.l_paddr = in ncr_sir_to_redo()
6671 ncr_put_start_queue(np, cp); in ncr_sir_to_redo()
6697 struct ccb *cp=NULL; in ncr_int_sir() local
6743 cp = np->header.cp; in ncr_int_sir()
6744 if (!cp || CCB_PHYS (cp, phys) != dsa) in ncr_int_sir()
6746 ncr_sir_to_redo(np, num, cp); in ncr_int_sir()
6752 cp = np->ccb; in ncr_int_sir()
6753 while (cp && (CCB_PHYS (cp, phys) != dsa)) in ncr_int_sir()
6754 cp = cp->link_ccb; in ncr_int_sir()
6756 BUG_ON(!cp); in ncr_int_sir()
6757 BUG_ON(cp != np->header.cp); in ncr_int_sir()
6759 if (!cp || cp != np->header.cp) in ncr_int_sir()
6848 PRINT_ADDR(cp->cmd, "negotiation failed sir=%x " in ncr_int_sir()
6849 "status=%x.\n", num, cp->nego_status); in ncr_int_sir()
6856 switch (cp->nego_status) { in ncr_int_sir()
6861 ncr_setsync (np, cp, 0, 0xe0); in ncr_int_sir()
6866 ncr_setwide (np, cp, 0, 0); in ncr_int_sir()
6872 cp->nego_status = 0; in ncr_int_sir()
6877 ncr_print_msg(cp, "sync msgin", np->msgin); in ncr_int_sir()
6924 PRINT_ADDR(cp->cmd, "sync: per=%d scntl3=0x%x ofs=%d " in ncr_int_sir()
6930 switch (cp->nego_status) { in ncr_int_sir()
6938 ncr_setsync(np, cp, 0, 0xe0); in ncr_int_sir()
6944 ncr_setsync(np, cp, scntl3, (fak<<5)|ofs); in ncr_int_sir()
6951 ncr_setwide(np, cp, 0, 0); in ncr_int_sir()
6963 ncr_setsync(np, cp, scntl3, (fak<<5)|ofs); in ncr_int_sir()
6966 cp->nego_status = NS_SYNC; in ncr_int_sir()
6969 ncr_print_msg(cp, "sync msgout", np->msgout); in ncr_int_sir()
6985 ncr_print_msg(cp, "wide msgin", np->msgin); in ncr_int_sir()
7011 PRINT_ADDR(cp->cmd, "wide: wide=%d chg=%d.\n", wide, in ncr_int_sir()
7017 switch (cp->nego_status) { in ncr_int_sir()
7026 ncr_setwide(np, cp, 0, 1); in ncr_int_sir()
7031 ncr_setwide(np, cp, wide, 1); in ncr_int_sir()
7039 ncr_setsync(np, cp, 0, 0xe0); in ncr_int_sir()
7050 ncr_setwide(np, cp, wide, 1); in ncr_int_sir()
7055 cp->nego_status = NS_WIDE; in ncr_int_sir()
7058 ncr_print_msg(cp, "wide msgout", np->msgin); in ncr_int_sir()
7077 PRINT_ADDR(cp->cmd, "MESSAGE_REJECT received (%x:%x).\n", in ncr_int_sir()
7089 ncr_print_msg(cp, "MESSAGE_REJECT sent for", np->msgin); in ncr_int_sir()
7108 PRINT_ADDR(cp->cmd, "IGNORE_WIDE_RESIDUE received, but not yet " in ncr_int_sir()
7121 PRINT_ADDR(cp->cmd, "DISCONNECT received, but datapointer " in ncr_int_sir()
7150 struct ccb *cp = NULL; in ncr_get_ccb() local
7174 cp = list_entry(qp, struct ccb, link_ccbq); in ncr_get_ccb()
7175 if (cp->magic) { in ncr_get_ccb()
7177 "(@%p)\n", cp); in ncr_get_ccb()
7178 cp = NULL; in ncr_get_ccb()
7189 if (cp) { in ncr_get_ccb()
7200 if (!cp) in ncr_get_ccb()
7201 cp = np->ccb; in ncr_get_ccb()
7207 while (cp->magic) { in ncr_get_ccb()
7209 if (tsleep ((caddr_t)cp, PRIBIO|PCATCH, "ncr", 0)) in ncr_get_ccb()
7214 if (cp->magic) in ncr_get_ccb()
7217 cp->magic = 1; in ncr_get_ccb()
7234 cp->tag = tag; in ncr_get_ccb()
7235 cp->target = tn; in ncr_get_ccb()
7236 cp->lun = ln; in ncr_get_ccb()
7239 PRINT_ADDR(cmd, "ccb @%p using tag %d.\n", cp, tag); in ncr_get_ccb()
7242 return cp; in ncr_get_ccb()
7254 static void ncr_free_ccb (struct ncb *np, struct ccb *cp) in ncr_free_ccb() argument
7256 struct tcb *tp = &np->target[cp->target]; in ncr_free_ccb()
7257 struct lcb *lp = tp->lp[cp->lun]; in ncr_free_ccb()
7260 PRINT_ADDR(cp->cmd, "ccb @%p freeing tag %d.\n", cp, cp->tag); in ncr_free_ccb()
7269 if (cp->tag != NO_TAG) { in ncr_free_ccb()
7270 lp->cb_tags[lp->if_tag++] = cp->tag; in ncr_free_ccb()
7273 lp->tags_umap &= ~(((tagmap_t) 1) << cp->tag); in ncr_free_ccb()
7275 lp->jump_ccb[cp->tag] = in ncr_free_ccb()
7288 if (cp != np->ccb) in ncr_free_ccb()
7289 list_move(&cp->link_ccbq, &lp->free_ccbq); in ncr_free_ccb()
7291 if (cp->queued) { in ncr_free_ccb()
7295 cp -> host_status = HS_IDLE; in ncr_free_ccb()
7296 cp -> magic = 0; in ncr_free_ccb()
7297 if (cp->queued) { in ncr_free_ccb()
7299 cp->queued = 0; in ncr_free_ccb()
7303 if (cp == np->ccb) in ncr_free_ccb()
7304 wakeup ((caddr_t) cp); in ncr_free_ccb()
7316 static void ncr_init_ccb(struct ncb *np, struct ccb *cp) in ncr_init_ccb() argument
7323 cp->p_ccb = vtobus(cp); in ncr_init_ccb()
7324 cp->phys.header.cp = cp; in ncr_init_ccb()
7329 INIT_LIST_HEAD(&cp->link_ccbq); in ncr_init_ccb()
7337 cp->start.setup_dsa[0] = cpu_to_scr(copy_4); in ncr_init_ccb()
7338 cp->start.setup_dsa[1] = cpu_to_scr(CCB_PHYS(cp, start.p_phys)); in ncr_init_ccb()
7339 cp->start.setup_dsa[2] = cpu_to_scr(ncr_reg_bus_addr(nc_dsa)); in ncr_init_ccb()
7340 cp->start.schedule.l_cmd = cpu_to_scr(SCR_JUMP); in ncr_init_ccb()
7341 cp->start.p_phys = cpu_to_scr(CCB_PHYS(cp, phys)); in ncr_init_ccb()
7343 memcpy(&cp->restart, &cp->start, sizeof(cp->restart)); in ncr_init_ccb()
7345 cp->start.schedule.l_paddr = cpu_to_scr(NCB_SCRIPT_PHYS (np, idle)); in ncr_init_ccb()
7346 cp->restart.schedule.l_paddr = cpu_to_scr(NCB_SCRIPTH_PHYS (np, abort)); in ncr_init_ccb()
7359 struct ccb *cp = NULL; in ncr_alloc_ccb() local
7364 cp = m_calloc_dma(sizeof(struct ccb), "CCB"); in ncr_alloc_ccb()
7365 if (!cp) in ncr_alloc_ccb()
7373 memset(cp, 0, sizeof (*cp)); in ncr_alloc_ccb()
7374 ncr_init_ccb(np, cp); in ncr_alloc_ccb()
7380 cp->link_ccb = np->ccb->link_ccb; in ncr_alloc_ccb()
7381 np->ccb->link_ccb = cp; in ncr_alloc_ccb()
7383 list_add(&cp->link_ccbq, &lp->free_ccbq); in ncr_alloc_ccb()
7647 static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd) in ncr_scatter() argument
7652 cp->data_len = 0; in ncr_scatter()
7664 data = &cp->phys.data[MAX_SCATTER - use_sg]; in ncr_scatter()
7671 cp->data_len += len; in ncr_scatter()