Home | History | Annotate | Download | only in ic

Lines Matching defs:siop_cmd

79 int	siop_handle_qtag_reject(struct siop_cmd *);
80 void siop_scsicmd_end(struct siop_cmd *);
82 static void siop_start(struct siop_softc *, struct siop_cmd *);
281 siop_cmd->cmd_c.dsa, \
298 struct siop_cmd *siop_cmd;
325 /* use DSA to find the current siop_cmd */
326 siop_cmd = NULL;
332 siop_cmd = &cbdp->cmds[dsa / sizeof(struct siop_xfer)];
333 siop_table_sync(siop_cmd,
338 if (siop_cmd) {
339 xs = siop_cmd->cmd_c.xs;
340 siop_target = (struct siop_target *)siop_cmd->cmd_c.siop_target;
341 target = siop_cmd->cmd_c.xs->xs_periph->periph_target;
342 lun = siop_cmd->cmd_c.xs->xs_periph->periph_lun;
343 tag = siop_cmd->cmd_c.tag;
346 if (siop_cmd->cmd_c.status != CMDST_ACTIVE) {
347 printf("siop_cmd (lun %d) for DSA 0x%x "
349 siop_cmd->cmd_c.status);
356 siop_cmd = NULL;
357 } else if (siop_lun->siop_tag[tag].active != siop_cmd) {
358 printf("siop_cmd (lun %d tag %d) not in siop_lun "
359 "active (%p != %p)\n", lun, tag, siop_cmd,
413 if (siop_cmd)
415 siop_cmd->cmd_tables->msg_in[0],
417 siop_cmd->cmd_tables->status));
451 if (siop_cmd)
459 if (siop_cmd) {
469 SIOP_DSA, siop_cmd->cmd_c.dsa);
483 siop_ma(&siop_cmd->cmd_c);
496 siop_ma(&siop_cmd->cmd_c);
516 if (siop_cmd)
525 if (siop_cmd) {
526 siop_cmd->cmd_c.status = CMDST_DONE;
542 if (siop_cmd) {
543 siop_cmd->cmd_tables->status =
582 if (siop_cmd) {
583 siop_cmd->cmd_c.status = CMDST_DONE;
609 if (siop_cmd == NULL) {
616 if (siop_cmd->cmd_c.status != CMDST_ACTIVE) {
620 irqcode, siop_cmd->cmd_c.status);
669 siop_cmd = siop_lun->siop_tag[tag].active;
671 SIOP_DSP, siop_cmd->cmd_c.dsa +
674 siop_table_sync(siop_cmd, BUS_DMASYNC_PREWRITE);
687 if (siop_cmd->cmd_tables->msg_out[0] & 0x80) {
694 siop_cmd->cmd_tables->msg_out[1];
696 siop_cmd->cmd_tables->msg_out[3];
698 msg = siop_cmd->cmd_tables->msg_out[0];
700 siop_cmd->cmd_tables->msg_out[2];
728 siop_sdtr_msg(&siop_cmd->cmd_c, 0,
731 siop_table_sync(siop_cmd,
751 siop_cmd) == -1)
774 siop_cmd->cmd_tables->t_extmsgdata.count =
776 siop_table_sync(siop_cmd,
786 siop_cmd->cmd_tables->msg_in[0]);
787 siop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
788 siop_cmd->cmd_tables->t_msgout.count =
790 siop_table_sync(siop_cmd,
798 siop_cmd->cmd_tables->msg_in[2],
799 siop_cmd->cmd_tables->msg_in[1]);
801 if (siop_cmd->cmd_tables->msg_in[1] >
802 sizeof(siop_cmd->cmd_tables->msg_in) - 2)
805 siop_cmd->cmd_tables->msg_in[1]);
806 siop_cmd->cmd_tables->t_extmsgdata.count =
808 siop_cmd->cmd_tables->msg_in[1] - 1);
809 siop_table_sync(siop_cmd,
818 siop_cmd->cmd_tables->msg_in[2]);
819 for (i = 3; i < 2 + siop_cmd->cmd_tables->msg_in[1];
822 siop_cmd->cmd_tables->msg_in[i]);
826 if (siop_cmd->cmd_tables->msg_in[0] ==
829 if (siop_cmd->cmd_tables->msg_in[3] != 1)
832 siop_cmd->cmd_tables->msg_in[3]);
833 switch (siop_iwr(&siop_cmd->cmd_c)) {
835 siop_table_sync(siop_cmd,
849 if (siop_cmd->cmd_tables->msg_in[2] == MSG_EXT_WDTR) {
850 switch (siop_wdtr_neg(&siop_cmd->cmd_c)) {
853 siop_cmd->cmd_c.siop_target);
854 siop_table_sync(siop_cmd,
861 siop_cmd->cmd_c.siop_target);
870 if (siop_cmd->cmd_tables->msg_in[2] == MSG_EXT_SDTR) {
871 switch (siop_sdtr_neg(&siop_cmd->cmd_c)) {
874 siop_cmd->cmd_c.siop_target);
875 siop_table_sync(siop_cmd,
882 siop_cmd->cmd_c.siop_target);
892 siop_cmd->cmd_tables->msg_out[0] = MSG_MESSAGE_REJECT;
893 siop_cmd->cmd_tables->t_msgout.count =
895 siop_table_sync(siop_cmd,
906 siop_sdp(&siop_cmd->cmd_c, offset);
908 siop_cmd->saved_offset = SIOP_NOOFFSET;
909 siop_table_sync(siop_cmd,
920 siop_cmd->saved_offset = offset;
931 (u_long)siop_cmd->cmd_c.dsa);
932 siop_cmd->cmd_c.status = CMDST_FREE;
939 (u_long)siop_cmd->cmd_c.dsa,
940 siop_ctoh32(&sc->sc_c, siop_cmd->cmd_tables->id),
941 siop_cmd->cmd_tables->msg_in[0],
943 siop_cmd->cmd_tables->status));
952 * case, siop_cmd->saved_offset will have the proper
956 siop_cmd->saved_offset != SIOP_NOOFFSET)
957 offset = siop_cmd->saved_offset;
958 siop_update_resid(&siop_cmd->cmd_c, offset);
959 siop_cmd->cmd_c.status = CMDST_DONE;
984 xs->status = siop_ctoh32(&sc->sc_c, siop_cmd->cmd_tables->status);
990 siop_scsicmd_end(siop_cmd);
1005 siop_scsicmd_end(struct siop_cmd *siop_cmd)
1007 struct scsipi_xfer *xs = siop_cmd->cmd_c.xs;
1008 struct siop_softc *sc = (struct siop_softc *)siop_cmd->cmd_c.siop_sc;
1029 xs->xs_periph->periph_lun, siop_cmd->cmd_c.tag);
1051 bus_dmamap_sync(sc->sc_c.sc_dmat, siop_cmd->cmd_c.dmamap_data,
1052 0, siop_cmd->cmd_c.dmamap_data->dm_mapsize,
1056 siop_cmd->cmd_c.dmamap_data);
1058 bus_dmamap_unload(sc->sc_c.sc_dmat, siop_cmd->cmd_c.dmamap_cmd);
1061 siop_cmd->cmd_c.status = CMDST_FREE;
1062 TAILQ_INSERT_TAIL(&sc->free_list, siop_cmd, next);
1074 struct siop_cmd *siop_cmd;
1085 siop_cmd = siop_lun->siop_tag[tag].active;
1089 siop_cmd->cmd_c.dsa +
1103 siop_cmd->cmd_c.xs->error = XS_REQUEUE;
1104 siop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1106 siop_scsicmd_end(siop_cmd);
1122 siop_handle_qtag_reject(struct siop_cmd *siop_cmd)
1124 struct siop_softc *sc = (struct siop_softc *)siop_cmd->cmd_c.siop_sc;
1125 int target = siop_cmd->cmd_c.xs->xs_periph->periph_target;
1126 int lun = siop_cmd->cmd_c.xs->xs_periph->periph_lun;
1127 int tag = siop_cmd->cmd_tables->msg_out[2];
1134 siop_cmd->cmd_c.tag,
1135 siop_cmd->cmd_c.status);
1147 siop_lun->siop_tag[0].active = siop_cmd;
1148 siop_cmd->cmd_c.tag = 0;
1153 siop_cmd->cmd_c.dsa + sizeof(struct siop_common_xfer) +
1155 siop_table_sync(siop_cmd, BUS_DMASYNC_PREWRITE);
1169 struct siop_cmd *siop_cmd;
1202 siop_cmd = siop_lun->siop_tag[tag].active;
1203 if (siop_cmd == NULL)
1205 scsipi_printaddr(siop_cmd->cmd_c.xs->xs_periph);
1207 siop_cmd->cmd_c.xs->error =
1208 (siop_cmd->cmd_c.flags & CMDFL_TIMEOUT) ?
1210 siop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1212 siop_cmd->cmd_c.status = CMDST_DONE;
1213 siop_scsicmd_end(siop_cmd);
1233 struct siop_cmd *siop_cmd;
1250 siop_cmd = TAILQ_FIRST(&sc->free_list);
1251 if (siop_cmd == NULL) {
1257 TAILQ_REMOVE(&sc->free_list, siop_cmd, next);
1259 if (siop_cmd->cmd_c.status != CMDST_FREE)
1278 siop_cmd, next);
1300 siop_cmd, next);
1320 siop_cmd, next);
1325 siop_cmd->cmd_c.siop_target = sc->sc_c.targets[target];
1326 siop_cmd->cmd_c.xs = xs;
1327 siop_cmd->cmd_c.flags = 0;
1328 siop_cmd->cmd_c.status = CMDST_READY;
1332 siop_cmd->cmd_c.dmamap_cmd,
1341 siop_cmd->cmd_c.status = CMDST_FREE;
1342 TAILQ_INSERT_TAIL(&sc->free_list, siop_cmd, next);
1348 siop_cmd->cmd_c.dmamap_data, xs->data, xs->datalen,
1360 siop_cmd->cmd_c.dmamap_cmd);
1361 siop_cmd->cmd_c.status = CMDST_FREE;
1363 siop_cmd, next);
1368 siop_cmd->cmd_c.dmamap_data, 0,
1369 siop_cmd->cmd_c.dmamap_data->dm_mapsize,
1373 bus_dmamap_sync(sc->sc_c.sc_dmat, siop_cmd->cmd_c.dmamap_cmd, 0,
1374 siop_cmd->cmd_c.dmamap_cmd->dm_mapsize,
1379 siop_cmd->cmd_c.tag = xs->xs_tag_id + 1;
1381 siop_cmd->cmd_c.tag = 0;
1383 siop_setuptables(&siop_cmd->cmd_c);
1384 siop_cmd->saved_offset = SIOP_NOOFFSET;
1385 siop_table_sync(siop_cmd,
1387 siop_start(sc, siop_cmd);
1439 siop_start(struct siop_softc *sc, struct siop_cmd *siop_cmd)
1475 target = siop_cmd->cmd_c.xs->xs_periph->periph_target;
1476 lun = siop_cmd->cmd_c.xs->xs_periph->periph_lun;
1485 if (siop_cmd->cmd_c.flags & CMDFL_TAG) {
1486 if (siop_lun->siop_tag[siop_cmd->cmd_c.tag].active != NULL)
1488 if (siop_cmd->cmd_c.tag >= SIOP_NTAG) {
1489 scsipi_printaddr(siop_cmd->cmd_c.xs->xs_periph);
1490 printf(": tag id %d\n", siop_cmd->cmd_c.tag);
1514 siop_cmd->cmd_c.xs->error = XS_REQUEUE;
1515 siop_cmd->cmd_c.xs->status = SCSI_SIOP_NOCHECK;
1516 siop_scsicmd_end(siop_cmd);
1521 (u_long)siop_cmd->cmd_c.dsa);
1524 if (siop_cmd->cmd_c.status == CMDST_READY)
1525 siop_cmd->cmd_c.status = CMDST_ACTIVE;
1528 siop_lun->siop_tag[siop_cmd->cmd_c.tag].active = siop_cmd;
1530 dsa = siop_cmd->cmd_c.dsa;
1532 if (siop_lun->siop_tag[siop_cmd->cmd_c.tag].reseloff > 0)
1534 siop_lun->siop_tag[siop_cmd->cmd_c.tag].reseloff + 1,
1538 siop_xfer = (struct siop_xfer*)siop_cmd->cmd_tables;
1542 siop_table_sync(siop_cmd, BUS_DMASYNC_PREWRITE);
1548 if ((siop_cmd->cmd_c.xs->xs_control & XS_CTL_POLL) == 0) {
1550 timeout = mstohz(siop_cmd->cmd_c.xs->timeout);
1553 callout_reset( &siop_cmd->cmd_c.xs->xs_callout,
1554 timeout, siop_timeout, siop_cmd);
1574 struct siop_cmd *siop_cmd = v;
1575 struct siop_softc *sc = (struct siop_softc *)siop_cmd->cmd_c.siop_sc;
1578 scsipi_printaddr(siop_cmd->cmd_c.xs->xs_periph);
1580 scsipi_print_cdb(siop_cmd->cmd_c.xs->cmd);
1588 callout_stop(&siop_cmd->cmd_c.xs->xs_callout);
1595 siop_cmd->cmd_c.flags |= CMDFL_TIMEOUT;
1636 newcbd->cmds = malloc(sizeof(struct siop_cmd) * SIOP_NCMDPB,