Lines Matching defs:esiop_cmd
77 void esiop_scsicmd_end(struct esiop_cmd *, int);
79 int esiop_handle_qtag_reject(struct esiop_cmd *);
80 static void esiop_start(struct esiop_softc *, struct esiop_cmd *);
384 esiop_cmd->cmd_c.dsa, \
401 struct esiop_cmd *esiop_cmd;
464 esiop_cmd =
466 if (esiop_cmd == NULL) {
467 printf("esiop_cmd (target %d lun %d tag %d)"
472 xs = esiop_cmd->cmd_c.xs;
474 if (esiop_cmd->cmd_c.status != CMDST_ACTIVE) {
475 printf("esiop_cmd (target %d lun %d) "
477 esiop_cmd->cmd_c.status);
481 esiop_table_sync(esiop_cmd,
488 esiop_cmd = NULL;
532 if (esiop_cmd)
534 target, lun, tag, esiop_cmd->cmd_tables->msg_in[0],
535 le32toh(esiop_cmd->cmd_tables->status));
566 if (esiop_cmd)
594 if (esiop_cmd) {
604 SIOP_DSA, esiop_cmd->cmd_c.dsa);
618 siop_ma(&esiop_cmd->cmd_c);
631 siop_ma(&esiop_cmd->cmd_c);
651 if (esiop_cmd)
695 if (esiop_cmd) {
696 esiop_cmd->cmd_c.status = CMDST_DONE;
715 if (esiop_cmd) {
716 esiop_cmd->cmd_tables->status =
754 if (esiop_cmd) {
755 esiop_cmd->cmd_c.status = CMDST_DONE;
781 if (esiop_cmd == NULL) {
787 if (esiop_cmd->cmd_c.status != CMDST_ACTIVE) {
791 irqcode, esiop_cmd->cmd_c.status);
813 if (esiop_cmd->cmd_tables->msg_out[0] & 0x80) {
820 esiop_cmd->cmd_tables->msg_out[1];
822 esiop_cmd->cmd_tables->msg_out[3];
825 esiop_cmd->cmd_tables->msg_out[0];
827 esiop_cmd->cmd_tables->msg_out[2];
855 siop_sdtr_msg(&esiop_cmd->cmd_c, 0,
858 esiop_table_sync(esiop_cmd,
891 esiop_cmd) == -1)
914 esiop_cmd->cmd_tables->t_extmsgdata.count =
916 esiop_table_sync(esiop_cmd,
926 esiop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
927 esiop_cmd->cmd_tables->t_msgout.count= htole32(1);
928 esiop_table_sync(esiop_cmd,
936 esiop_cmd->cmd_tables->msg_in[2],
937 esiop_cmd->cmd_tables->msg_in[1]);
939 if (esiop_cmd->cmd_tables->msg_in[1] >
940 sizeof(esiop_cmd->cmd_tables->msg_in) - 2)
943 esiop_cmd->cmd_tables->msg_in[1]);
944 esiop_cmd->cmd_tables->t_extmsgdata.count =
945 htole32(esiop_cmd->cmd_tables->msg_in[1] - 1);
946 esiop_table_sync(esiop_cmd,
955 esiop_cmd->cmd_tables->msg_in[2]);
956 for (i = 3; i < 2 + esiop_cmd->cmd_tables->msg_in[1];
959 esiop_cmd->cmd_tables->msg_in[i]);
963 if (esiop_cmd->cmd_tables->msg_in[0] ==
966 if (esiop_cmd->cmd_tables->msg_in[3] != 1)
969 esiop_cmd->cmd_tables->msg_in[3]);
970 switch (siop_iwr(&esiop_cmd->cmd_c)) {
972 esiop_table_sync(esiop_cmd,
986 if (esiop_cmd->cmd_tables->msg_in[2] == MSG_EXT_PPR) {
987 switch (siop_ppr_neg(&esiop_cmd->cmd_c)) {
990 esiop_cmd->cmd_c.siop_target);
991 esiop_table_sync(esiop_cmd,
998 esiop_cmd->cmd_c.siop_target);
1007 if (esiop_cmd->cmd_tables->msg_in[2] == MSG_EXT_WDTR) {
1008 switch (siop_wdtr_neg(&esiop_cmd->cmd_c)) {
1011 esiop_cmd->cmd_c.siop_target);
1012 esiop_table_sync(esiop_cmd,
1019 esiop_cmd->cmd_c.siop_target);
1028 if (esiop_cmd->cmd_tables->msg_in[2] == MSG_EXT_SDTR) {
1029 switch (siop_sdtr_neg(&esiop_cmd->cmd_c)) {
1032 esiop_cmd->cmd_c.siop_target);
1033 esiop_table_sync(esiop_cmd,
1040 esiop_cmd->cmd_c.siop_target);
1050 esiop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
1051 esiop_cmd->cmd_tables->t_msgout.count = htole32(1);
1052 esiop_table_sync(esiop_cmd,
1063 siop_sdp(&esiop_cmd->cmd_c, offset);
1065 ESIOP_XFER(esiop_cmd, saved_offset) =
1067 esiop_table_sync(esiop_cmd,
1085 (u_long)esiop_cmd->cmd_c.dsa,
1086 le32toh(esiop_cmd->cmd_tables->id),
1087 esiop_cmd->cmd_tables->msg_in[0],
1088 le32toh(esiop_cmd->cmd_tables->status));
1091 esiop_cmd->cmd_c.status = CMDST_DONE;
1116 xs->status = le32toh(esiop_cmd->cmd_tables->status);
1133 ESIOP_XFER(esiop_cmd, saved_offset) != htole32(SIOP_NOOFFSET))
1135 (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff;
1137 esiop_scsicmd_end(esiop_cmd, offset);
1145 esiop_scsicmd_end(struct esiop_cmd *esiop_cmd, int offset)
1147 struct scsipi_xfer *xs = esiop_cmd->cmd_c.xs;
1148 struct esiop_softc *sc = (struct esiop_softc *)esiop_cmd->cmd_c.siop_sc;
1150 siop_update_resid(&esiop_cmd->cmd_c, offset);
1171 xs->xs_periph->periph_lun, esiop_cmd->cmd_c.tag);
1194 esiop_cmd->cmd_c.dmamap_data, 0,
1195 esiop_cmd->cmd_c.dmamap_data->dm_mapsize,
1199 esiop_cmd->cmd_c.dmamap_data);
1201 bus_dmamap_unload(sc->sc_c.sc_dmat, esiop_cmd->cmd_c.dmamap_cmd);
1204 esiop_cmd->cmd_c.status = CMDST_FREE;
1205 TAILQ_INSERT_TAIL(&sc->free_list, esiop_cmd, next);
1219 struct esiop_cmd *esiop_cmd;
1280 esiop_cmd = (tag >= 0) ? esiop_lun->tactive[tag] : esiop_lun->active;
1281 if (esiop_cmd == NULL) {
1282 printf("esiop_cmd (target %d lun %d tag %d) not valid\n",
1287 esiop_table_sync(esiop_cmd,
1289 status = le32toh(esiop_cmd->cmd_tables->status);
1299 esiop_cmd->cmd_c.xs->status = status;
1309 if (ESIOP_XFER(esiop_cmd, saved_offset) != htole32(SIOP_NOOFFSET))
1311 (le32toh(ESIOP_XFER(esiop_cmd, saved_offset)) >> 8) & 0xff;
1312 esiop_scsicmd_end(esiop_cmd, offset);
1321 struct esiop_cmd *esiop_cmd;
1332 esiop_cmd = esiop_lun->tactive[tag];
1337 if (slotdsa == esiop_cmd->cmd_c.dsa) { /* found it */
1341 esiop_cmd->cmd_c.dsa | A_f_cmd_ignore);
1343 esiop_cmd->cmd_c.xs->error = XS_REQUEUE;
1344 esiop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1346 esiop_scsicmd_end(esiop_cmd, 0);
1361 esiop_handle_qtag_reject(struct esiop_cmd *esiop_cmd)
1363 struct esiop_softc *sc = (struct esiop_softc *)esiop_cmd->cmd_c.siop_sc;
1364 int target = esiop_cmd->cmd_c.xs->xs_periph->periph_target;
1365 int lun = esiop_cmd->cmd_c.xs->xs_periph->periph_lun;
1366 int tag = esiop_cmd->cmd_tables->msg_out[2];
1374 esiop_cmd->cmd_c.tag, esiop_cmd->cmd_c.status);
1387 esiop_lun->active = esiop_cmd;
1388 esiop_cmd->cmd_c.flags &= ~CMDFL_TAG;
1389 esiop_cmd->cmd_c.tag = -1;
1393 esiop_cmd->cmd_c.dsa);
1407 struct esiop_cmd *esiop_cmd;
1442 esiop_cmd = esiop_lun->tactive[tag];
1444 esiop_cmd = esiop_lun->active;
1445 if (esiop_cmd == NULL)
1448 esiop_cmd->cmd_c.xs->xs_periph);
1450 esiop_cmd->cmd_c.xs->error =
1451 (esiop_cmd->cmd_c.flags & CMDFL_TIMEOUT) ?
1453 esiop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1458 esiop_cmd->cmd_c.status = CMDST_DONE;
1459 esiop_scsicmd_end(esiop_cmd, 0);
1479 struct esiop_cmd *esiop_cmd;
1507 esiop_cmd = TAILQ_FIRST(&sc->free_list);
1508 if (esiop_cmd == NULL) {
1514 TAILQ_REMOVE(&sc->free_list, esiop_cmd, next);
1516 if (esiop_cmd->cmd_c.status != CMDST_FREE)
1536 esiop_cmd, next);
1565 esiop_cmd, next);
1570 esiop_cmd->cmd_c.siop_target = sc->sc_c.targets[target];
1571 esiop_cmd->cmd_c.xs = xs;
1572 esiop_cmd->cmd_c.flags = 0;
1573 esiop_cmd->cmd_c.status = CMDST_READY;
1577 esiop_cmd->cmd_c.dmamap_cmd,
1586 esiop_cmd->cmd_c.status = CMDST_FREE;
1587 TAILQ_INSERT_TAIL(&sc->free_list, esiop_cmd, next);
1593 esiop_cmd->cmd_c.dmamap_data, xs->data, xs->datalen,
1605 esiop_cmd->cmd_c.dmamap_cmd);
1606 esiop_cmd->cmd_c.status = CMDST_FREE;
1608 esiop_cmd, next);
1613 esiop_cmd
1614 esiop_cmd->cmd_c.dmamap_data->dm_mapsize,
1618 bus_dmamap_sync(sc->sc_c.sc_dmat, esiop_cmd->cmd_c.dmamap_cmd,
1619 0, esiop_cmd->cmd_c.dmamap_cmd->dm_mapsize,
1623 esiop_cmd->cmd_c.tag = xs->xs_tag_id;
1625 esiop_cmd->cmd_c.tag = -1;
1626 siop_setuptables(&esiop_cmd->cmd_c);
1627 ESIOP_XFER(esiop_cmd, saved_offset) = htole32(SIOP_NOOFFSET);
1628 ESIOP_XFER(esiop_cmd, tlq) = htole32(A_f_c_target | A_f_c_lun);
1629 ESIOP_XFER(esiop_cmd, tlq) |=
1631 if (esiop_cmd->cmd_c.flags & CMDFL_TAG) {
1632 ESIOP_XFER(esiop_cmd, tlq) |= htole32(A_f_c_tag);
1633 ESIOP_XFER(esiop_cmd, tlq) |=
1634 htole32(esiop_cmd->cmd_c.tag << 24);
1637 esiop_table_sync(esiop_cmd,
1639 esiop_start(sc, esiop_cmd);
1694 esiop_start(struct esiop_softc *sc, struct esiop_cmd *esiop_cmd)
1723 esiop_cmd->cmd_c.xs->error = XS_REQUEUE;
1724 esiop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1725 esiop_scsicmd_end(esiop_cmd, 0);
1730 target = esiop_cmd->cmd_c.xs->xs_periph->periph_target;
1731 lun = esiop_cmd->cmd_c.xs->xs_periph->periph_lun;
1740 if (esiop_cmd->cmd_c.flags & CMDFL_TAG) {
1741 if (esiop_cmd->cmd_c.tag >= ESIOP_NTAG ||
1742 esiop_cmd->cmd_c.tag < 0) {
1743 scsipi_printaddr(esiop_cmd->cmd_c.xs->xs_periph);
1744 printf(": tag id %d\n", esiop_cmd->cmd_c.tag);
1747 if (esiop_lun->tactive[esiop_cmd->cmd_c.tag] != NULL)
1753 (u_long)esiop_cmd->cmd_c.dsa);
1756 if (esiop_cmd->cmd_c.status == CMDST_READY)
1757 esiop_cmd->cmd_c.status = CMDST_ACTIVE;
1761 if (esiop_cmd->cmd_c.flags & CMDFL_TAG) {
1762 esiop_lun->tactive[esiop_cmd->cmd_c.tag] = esiop_cmd;
1764 esiop_lun->lun_tagtbl->tbl[esiop_cmd->cmd_c.tag] =
1765 htole32(esiop_cmd->cmd_c.dsa);
1771 esiop_lun->active = esiop_cmd;
1775 esiop_cmd->cmd_c.dsa);
1779 esiop_cmd->cmd_c.dsa);
1783 if ((esiop_cmd->cmd_c.xs->xs_control & XS_CTL_POLL) == 0) {
1785 timeout = mstohz(esiop_cmd->cmd_c.xs->timeout);
1788 callout_reset( &esiop_cmd->cmd_c.xs->xs_callout,
1789 timeout, esiop_timeout, esiop_cmd);
1803 struct esiop_cmd *esiop_cmd = v;
1805 (struct esiop_softc *)esiop_cmd->cmd_c.siop_sc;
1812 esiop_table_sync(esiop_cmd,
1814 scsipi_printaddr(esiop_cmd->cmd_c.xs->xs_periph);
1817 le32toh(esiop_cmd->cmd_tables->status));
1837 scsipi_print_cdb(esiop_cmd->cmd_c.xs->cmd);
1844 callout_stop(&esiop_cmd->cmd_c.xs->xs_callout);
1850 esiop_cmd->cmd_c.flags |= CMDFL_TIMEOUT;
1891 newcbd->cmds = malloc(sizeof(struct esiop_cmd) * SIOP_NCMDPB,