Lines Matching defs:acb

218 	struct siop_acb *acb;
240 acb = sc->free_list.tqh_first;
241 if (acb) {
242 TAILQ_REMOVE(&sc->free_list, acb, chain);
251 if (acb == NULL) {
253 printf("unable to allocate acb\n");
257 acb->flags = ACB_ACTIVE;
258 acb->xs = xs;
259 memcpy(&acb->cmd, xs->cmd, xs->cmdlen);
260 acb->clen = xs->cmdlen;
261 acb->daddr = xs->data;
262 acb->dleft = xs->datalen;
265 TAILQ_INSERT_TAIL(&sc->ready_list, acb, chain);
273 siopng_poll(sc, acb);
285 siopng_poll(struct siop_softc *sc, struct siop_acb *acb)
288 struct scsipi_xfer *xs = acb->xs;
311 xs->xs_periph->periph_target, acb->cmd.opcode,
314 *((volatile long *)&rp->siop_dcmd), &acb->ds, acb->xs->timeout);
328 if (acb != sc->sc_nexus)
351 struct siop_acb *acb;
364 for (acb = sc->ready_list.tqh_first; acb; acb = acb->chain.tqe_next) {
365 periph = acb->xs->xs_periph;
370 TAILQ_REMOVE(&sc->ready_list, acb, chain);
371 sc->sc_nexus = acb;
372 periph = acb->xs->xs_periph;
379 if (acb == NULL) {
387 if (acb->xs->xs_control & XS_CTL_RESET)
391 acb->cmd.bytes[0] |= periph->periph_lun << 5; /* XXXX */
398 siopng_scsidone(struct siop_acb *acb, int stat)
405 if (acb == NULL || (xs = acb->xs) == NULL) {
407 printf("siopng_scsidone: NULL acb or scsipi_xfer\n");
435 if (acb == sc->sc_nexus) {
443 } else if (sc->ready_list.tqh_last == &acb->chain.tqe_next) {
444 TAILQ_REMOVE(&sc->ready_list, acb, chain);
450 if (acb2 == acb) {
451 TAILQ_REMOVE(&sc->nexus_list, acb, chain);
459 else if (acb->chain.tqe_next) {
460 TAILQ_REMOVE(&sc->ready_list, acb, chain);
463 printf("%s: can't find matching acb\n",
472 acb->flags = ACB_FREE;
473 TAILQ_INSERT_HEAD(&sc->free_list, acb, chain);
599 struct siop_acb *acb;
604 acb = arg;
605 periph = acb->xs->xs_periph;
612 acb->xs->error = XS_TIMEOUT;
624 struct siop_acb *acb;
724 acb = sc->sc_acb;
725 memset(acb, 0, sizeof(struct siop_acb) * SIOP_NACB);
727 TAILQ_INSERT_TAIL(&sc->free_list, acb, chain);
728 acb++;
736 while ((acb = sc->nexus_list.tqh_first) > 0) {
737 acb->xs->error = XS_RESET;
738 siopng_scsidone(acb, acb->stat[0]);
767 struct siop_acb *acb = sc->sc_nexus;
775 rp, &siopng_scripts, &acb->ds, sc->sc_active);
784 acb->msgout[0] = MSG_IDENTIFY | lun;
787 acb->msgout[0] = MSG_IDENTIFY_DR | lun;
788 acb->status = 0;
789 acb->stat[0] = -1;
790 acb->msg[0] = -1;
791 acb->ds.scsi_addr = (target << 16) | (sc->sc_sync[target].sxfer << 8) |
793 acb->ds.idlen = 1;
794 acb->ds.idbuf = (char *) kvtop(&acb->msgout[0]);
795 acb->ds.cmdlen = clen;
796 acb->ds.cmdbuf = (char *) kvtop(cbuf);
797 acb->ds.stslen = 1;
798 acb->ds.stsbuf = (char *) kvtop(&acb->stat[0]);
799 acb->ds.msglen = 1;
800 acb->ds.msgbuf = (char *) kvtop(&acb->msg[0]);
801 acb->msg[1] = -1;
802 acb->ds.msginlen = 1;
803 acb->ds.extmsglen = 1;
804 acb->ds.synmsglen = 3;
805 acb->ds.msginbuf = acb->ds.msgbuf + 1;
806 acb->ds.extmsgbuf = acb->ds.msginbuf + 1;
807 acb->ds.synmsgbuf = acb->ds.extmsgbuf + 1;
808 memset(&acb->ds.chain, 0, sizeof (acb->ds.chain));
822 acb->msg[2] = -1;
823 acb->msgout[1] = MSG_EXT_MESSAGE;
824 acb->msgout[2] = 2;
825 acb->msgout[3] = MSG_WIDE_REQ;
826 acb->msgout[4] = 1;
827 acb->ds.idlen = 5;
828 acb->ds.synmsglen = 2;
850 acb->msg[2] = -1;
851 acb->msgout[1] = MSG_EXT_MESSAGE;
852 acb->msgout[2] = 3;
853 acb->msgout[3] = MSG_SYNC_REQ;
855 acb->msgout[4] = 50 / 4; /* ask for ridiculous period */
857 acb->msgout[4] = sc->sc_minsync;
859 acb->msgout[5] = SIOP_MAX_OFFSET;
860 acb->ds.idlen = 6;
872 acb->iob_buf = buf;
873 acb->iob_len = len;
874 acb->iob_curbuf = acb->iob_curlen = 0;
880 acb->ds.chain[nchain].databuf = (char *) kvtop (addr);
887 acb->ds.chain[nchain].databuf);
889 acb->ds.chain[nchain].datalen = tcount;
892 if (acb->ds.chain[nchain].databuf == dmaend) {
893 dmaend += acb->ds.chain[nchain].datalen;
894 acb->ds.chain[nchain].datalen = 0;
895 acb->ds.chain[--nchain].datalen += tcount;
901 dmaend = acb->ds.chain[nchain].databuf +
902 acb->ds.chain[nchain].datalen;
903 acb->ds.chain[nchain].datalen = tcount;
915 printf (" [%d] %8p %lx\n", i, acb->ds.chain[i].databuf,
916 acb->ds.chain[i].datalen);
922 dma_cachectl ((void *)acb, sizeof (struct siop_acb));
929 rp, &siopng_scripts, &acb->ds, sc->sc_active);
936 callout_reset(&acb->xs->xs_callout,
937 mstohz(acb->xs->timeout) + 1, siopng_timeout, acb);
946 rp->siop_dsa = kvtop((void *)&acb->ds);
974 struct siop_acb *acb = sc->sc_nexus;
992 DCIAS(&acb->stat[0]); /* XXX */
994 istat, dstat, sist, rp->siop_dsps, rp->siop_sbcl, acb->stat[0], acb->msg[0]);
996 acb->msg[0], acb->msg[1], acb->msg[2],
997 acb->msg[3], acb->msg[4], acb->msg[5]);
1016 if (rp->siop_dsa != kvtop((void *)&acb->ds)) {
1018 (unsigned)kvtop((void *)&acb->ds));
1022 target = acb->xs->xs_periph->periph_target;
1024 if (acb->msg[1] == 0xff)
1027 else if (acb->msg[1] == MSG_REJECT)
1032 device_xname(sc->sc_dev), target, acb->msg[1],
1033 acb->msg[2], acb->msg[3], acb->msg[4]);
1034 if (acb->msg[1] == MSG_EXT_MESSAGE &&
1035 acb->msg[2] == 2 &&
1036 acb->msg[3] == MSG_WIDE_REQ)
1037 sc->sc_sync[target].scntl3 = acb->msg[4] ?
1044 if (acb->msg[1] == 0xff)
1047 else if (acb->msg[1] == MSG_REJECT)
1053 device_xname(sc->sc_dev), target, acb->msg[1],
1054 acb->msg[2], acb->msg[3]);
1057 dma_cachectl(&acb->stat[0], 1);
1058 *status = acb->stat[0];
1062 rp, &siopng_scripts, &acb->ds);*/
1067 if (acb->msg[0] != 0x00)
1069 device_xname(sc->sc_dev), acb->msg[0]);
1076 target = acb->xs->xs_periph->periph_target;
1077 if (acb->msg[1] == MSG_EXT_MESSAGE && acb->msg[2] == 2 &&
1078 acb->msg[3] == MSG_WIDE_REQ) {
1082 acb->msg[0], acb->msg[1], acb->msg[2],
1083 acb->msg[3], acb->msg[4], acb->msg[5]);
1086 if (acb->msg[2] == 2 &&
1087 acb->msg[3] == MSG_WIDE_REQ &&
1088 acb->msg[4] != 0) {
1092 acb->msg[4]);
1107 if (acb->msg[1] == MSG_EXT_MESSAGE && acb->msg[2] == 3 &&
1108 acb->msg[3] == MSG_SYNC_REQ) {
1112 acb->msg[0], acb->msg[1], acb->msg[2],
1113 acb->msg[3], acb->msg[4], acb->msg[5]);
1118 if (acb->msg[2] == 3 &&
1119 acb->msg[3] == MSG_SYNC_REQ &&
1120 acb->msg[5] != 0) {
1131 if (acb->msg[4] && acb->msg[4] < 100 / 4) {
1135 acb->msg[4] * 4);
1137 if (acb->msg[4] == 50 / 4)
1138 acb->msg[4] = 208 / 4;
1140 acb->msg[4] = 100 / 4;
1145 (acb->msg[4] == 12) ? 50 : acb->msg[4] * 4,
1146 acb->msg[5]);
1168 if (acb == NULL)
1172 if (acb->iob_len) {
1183 acb->iob_curlen =
1185 acb->iob_curlen += adjust;
1186 acb->iob_curbuf =
1191 printf ("Phase mismatch: curbuf %lx curlen %lx dfifo %x dbc %x sstat1 %x adjust %x sbcl %x starts %d acb %p\n",
1192 acb->iob_curbuf, acb->iob_curlen, dfifo,
1193 dbc, sstat1, adjust, rp->siop_sbcl, siopngstarts, acb);
1194 if (acb->ds.chain[1].datalen) {
1195 for (i = 0; acb->ds.chain[i].datalen; ++i)
1197 i, acb->ds.chain[i].databuf,
1198 acb->ds.chain[i].datalen);
1202 dma_cachectl ((void *)acb, sizeof(*acb));
1236 if (acb == NULL)
1241 rp, &siopng_scripts, &acb->ds);
1260 acb->xs->error = XS_SELTIMEOUT;
1267 if (acb)
1268 target = acb->xs->xs_periph->periph_target;
1273 if (acb == NULL)
1289 return (acb != NULL);
1295 printf ("%s: ID %02x disconnected TEMP %lx (+%lx) curbuf %lx curlen %lx buf %p len %lx dfifo %x dbc %x sstat1 %x starts %d acb %p\n",
1298 acb->iob_curbuf, acb->iob_curlen,
1299 acb->ds.chain[0].databuf, acb->ds.chain[0].datalen, dfifo, dbc, sstat1, siopngstarts, acb);
1301 if (acb == NULL) {
1314 if (acb->iob_len && rp->siop_temp) {
1317 if (acb->iob_curlen && acb->iob_curlen != acb->ds.chain[0].datalen)
1319 device_xname(sc->sc_dev), n, acb->iob_curbuf, acb->iob_curlen,
1320 acb->ds.chain[0].databuf, acb->ds.chain[0].datalen);
1328 acb->iob_curbuf = (u_long)acb->ds.chain[n].databuf;
1329 acb->iob_curlen = acb->ds.chain[n].datalen;
1334 printf(" curbuf %lx curlen %lx\n", acb->iob_curbuf,
1335 acb->iob_curlen);
1346 if (acb->iob_curlen) {
1358 if (acb->ds.chain[i].datalen == 0)
1360 if (acb->iob_curbuf >= (long)acb->ds.chain[i].databuf &&
1361 acb->iob_curbuf < (long)(acb->ds.chain[i].databuf +
1362 acb->ds.chain[i].datalen))
1365 if (i >= DMAMAXIO || acb->ds.chain[i].datalen == 0) {
1368 acb->iob_curbuf, acb->iob_curlen, i);
1376 acb->ds.chain[0].databuf,
1377 acb->ds.chain[0].datalen,
1378 acb->iob_curbuf,
1379 acb->iob_curlen);
1381 acb->ds.chain[0].databuf = (char *)acb->iob_curbuf;
1382 acb->ds.chain[0].datalen = acb->iob_curlen;
1383 for (j = 1, ++i; i < DMAMAXIO && acb->ds.chain[i].datalen; ++i, ++j) {
1387 acb->ds.chain[j].databuf,
1388 acb->ds.chain[j].datalen,
1389 acb->ds.chain[i].databuf,
1390 acb->ds.chain[i].datalen);
1392 acb->ds.chain[j].databuf = acb->ds.chain[i].databuf;
1393 acb->ds.chain[j].datalen = acb->ds.chain[i].datalen;
1396 acb->ds.chain[j].datalen = 0;
1397 DCIAS(kvtop((void *)&acb->ds.chain));
1405 acb->status = sc->sc_flags & SIOP_INTSOFF;
1406 TAILQ_INSERT_HEAD(&sc->nexus_list, acb, chain);
1448 * locate acb of reselecting device
1449 * set sc->sc_nexus to acb
1451 for (acb = sc->nexus_list.tqh_first; acb;
1452 acb = acb->chain.tqe_next) {
1453 if (reselid != ((acb->ds.scsi_addr >> 16) & 0xff) ||
1454 reselun != (acb->msgout[0] & 0x07))
1456 TAILQ_REMOVE(&sc->nexus_list, acb, chain);
1457 sc->sc_nexus = acb;
1458 sc->sc_flags |= acb->status;
1459 acb->status = 0;
1460 DCIAS(kvtop(&acb->stat[0]));
1461 rp->siop_dsa = kvtop((void *)&acb->ds);
1464 sc->sc_sync[acb->xs->xs_periph->periph_target].sxfer;
1467 sc->sc_sync[acb->xs->xs_periph->periph_target].scntl3;
1472 if (acb == NULL) {
1478 dma_cachectl ((void *)acb, sizeof(*acb));
1524 if (acb == NULL)
1528 dma_cachectl (&acb->msg[1],1);
1530 device_xname(sc->sc_dev), rp->siop_sfbr, acb->msg[1], rp->siop_sbcl);
1532 DCIAS(kvtop(&acb->msg[1]));
1548 dma_cachectl (&acb->stat[0], 1);
1549 dma_cachectl (&acb->msg[0], 1);
1551 rp->siop_dsps, acb->stat[0], acb->msg[0], acb->msg[1],
1570 printf ("siopngchkintr: target %x ds %p\n", target, &acb->ds);
1572 sc->sc_scriptspa, (unsigned)kvtop((void *)&acb->ds),
1577 rp->siop_sbcl, acb->stat[0], acb->msg[0], acb->msg[1], rp->siop_sfbr);
1594 struct siop_acb *acb = sc->sc_nexus;
1602 if (acb->xs->xs_control & XS_CTL_POLL || siopng_no_dma) {
1621 acb->xs->xs_periph->periph_target, acb->cmd.opcode,
1625 siopng_start(sc, acb->xs->xs_periph->periph_target,
1626 acb->xs->xs_periph->periph_lun,
1627 (u_char *)&acb->cmd, acb->clen, acb->daddr, acb->dleft);
1820 siopng_dump_acb(struct siop_acb *acb)
1822 u_char *b = (u_char *) &acb->cmd;
1825 printf("acb@%p ", acb);
1826 if (acb->xs == NULL) {
1831 acb->xs->xs_periph->periph_target,
1832 acb->xs->xs_periph->periph_lun, acb->flags, acb->clen);
1833 for (i = acb->clen; i; --i)
1836 printf(" xs: %p data %p:%04x ", acb->xs, acb->xs->data,
1837 acb->xs->datalen);
1838 printf("va %p:%lx ", acb->iob_buf, acb->iob_len);
1839 printf("cur %lx:%lx\n", acb->iob_curbuf, acb->iob_curlen);
1845 struct siop_acb *acb;
1856 if ((acb = sc->free_list.tqh_first) > 0) {
1858 while (acb) {
1859 siopng_dump_acb(acb);
1860 acb = acb->chain.tqe_next;
1863 if ((acb = sc->ready_list.tqh_first) > 0) {
1865 while (acb) {
1866 siopng_dump_acb(acb);
1867 acb = acb->chain.tqe_next;
1870 if ((acb = sc->nexus_list.tqh_first) > 0) {
1872 while (acb) {
1873 siopng_dump_acb(acb);
1874 acb = acb->chain.tqe_next;