Lines Matching refs:cm
464 struct aac_command *cm;
480 cm = aac_dequeue_ready(sc);
486 if (cm == NULL) {
488 aac_bio_command(sc, &cm);
494 if (cm == NULL)
501 if (aac_map_command(cm) != 0)
502 panic("aac: error mapping command %p", cm);
516 aac_map_command(struct aac_command *cm)
518 struct aac_softc *sc = cm->cm_sc;
524 if (cm->cm_flags & AAC_CMD_MAPPED)
525 panic("aac: command %p already mapped", cm);
527 if (cm->cm_datalen != 0) {
528 error = bus_dmamap_load(sc->aac_dmat, cm->cm_datamap,
529 cm->cm_data, cm->cm_datalen, NULL,
534 aac_map_command_sg(cm, cm->cm_datamap->dm_segs,
535 cm->cm_datamap->dm_nsegs, 0);
537 aac_map_command_sg(cm, NULL, 0, 0);
651 struct aac_command *cm;
665 cm = sc->aac_commands + fib->Header.SenderData;
666 if (cm == NULL) {
671 aac_remove_busy(cm);
672 aac_unmap_command(cm);
673 cm->cm_flags |= AAC_CMD_COMPLETED;
676 if (cm->cm_complete != NULL) {
677 cm->cm_complete(cm);
680 wakeup(cm);
696 struct aac_command *cm;
704 if ((cm = aac_dequeue_bio(sc)) == NULL)
706 xs = cm->cm_private;
709 fib = cm->cm_fib;
743 br->BlockNumber = cm->cm_blkno;
744 br->ByteCount = cm->cm_bcount * AAC_BLOCK_SIZE;
746 cm->cm_sgtable = &br->SgMap;
747 cm->cm_flags |= AAC_CMD_DATAIN;
753 bw->BlockNumber = cm->cm_blkno;
754 bw->ByteCount = cm->cm_bcount * AAC_BLOCK_SIZE;
757 cm->cm_flags |= AAC_CMD_DATAOUT;
758 cm->cm_sgtable = &bw->SgMap;
767 br->BlockNumber = cm->cm_blkno;
768 br->SectorCount = cm->cm_bcount;
772 cm->cm_flags |= AAC_CMD_DATAOUT;
773 cm->cm_sgtable = (struct aac_sg_table *)&br->SgMap64;
779 bw->BlockNumber = cm->cm_blkno;
780 bw->SectorCount = cm->cm_bcount;
784 cm->cm_flags |= AAC_CMD_DATAIN;
785 cm->cm_sgtable = (struct aac_sg_table *)&bw->SgMap64;
789 *cmp = cm;
802 aac_bio_complete(struct aac_command *cm)
806 struct scsi_xfer *xs = (struct scsi_xfer *)cm->cm_private;
811 ("%s: bio complete\n", cm->cm_sc->aac_dev.dv_xname));
815 brr = (struct aac_blockread_response *)&cm->cm_fib->data[0];
818 bwr = (struct aac_blockwrite_response *)&cm->cm_fib->data[0];
842 aac_wait_command(struct aac_command *cm, int msecs)
844 struct aac_softc *sc = cm->cm_sc;
850 cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE;
851 aac_enqueue_ready(cm);
854 while (!(cm->cm_flags & AAC_CMD_COMPLETED) && (error != EWOULDBLOCK)) {
858 error = tsleep_nsec(cm, PRIBIO, "aacwait", MSEC_TO_NSEC(msecs));
875 struct aac_command *cm;
879 cm = aac_dequeue_free(sc);
882 return (cm);
886 aac_scrub_command(struct aac_command *cm)
888 cm->cm_sgtable = NULL;
889 cm->cm_flags = 0;
890 cm->cm_complete = NULL;
891 cm->cm_private = NULL;
892 cm->cm_fib->Header.XferState = AAC_FIBSTATE_EMPTY;
893 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB;
894 cm->cm_fib->Header.Flags = 0;
895 cm->cm_fib->Header.SenderSize = sizeof(struct aac_fib);
905 struct aac_command *cm = xcm;
909 aac_enqueue_free(cm);
919 struct aac_command *cm;
962 cm = sc->aac_commands + sc->total_fibs;
963 fm->aac_commands = cm;
964 cm->cm_sc = sc;
965 cm->cm_fib = fm->aac_fibs + i;
966 cm->cm_fibphys = fm->aac_fibmap->dm_segs[0].ds_addr +
968 cm->cm_index = sc->total_fibs;
971 MAXPHYS, 0, BUS_DMA_NOWAIT, &cm->cm_datamap)) {
974 aac_release_command(sc, cm);
1007 struct aac_command *cm;
1019 cm = fm->aac_commands + i;
1020 bus_dmamap_destroy(sc->aac_dmat, cm->cm_datamap);
1039 struct aac_command *cm = arg;
1040 struct aac_softc *sc = cm->cm_sc;
1041 struct aac_fib *fib = cm->cm_fib;
1045 if (cm->cm_sgtable != NULL) {
1046 if ((cm->cm_sc->flags & AAC_FLAGS_SG_64BIT) == 0) {
1047 struct aac_sg_table *sg = cm->cm_sgtable;
1057 sg = (struct aac_sg_table64 *)cm->cm_sgtable;
1072 cm->cm_fib->Header.SenderFibAddress = (cm->cm_index << 1);
1073 cm->cm_fib->Header.ReceiverFibAddress = cm->cm_fibphys;
1076 cm->cm_fib->Header.SenderData = cm->cm_index;
1078 if (cm->cm_flags & AAC_CMD_DATAIN)
1079 bus_dmamap_sync(sc->aac_dmat, cm->cm_datamap, 0,
1080 cm->cm_datamap->dm_mapsize,
1082 if (cm->cm_flags & AAC_CMD_DATAOUT)
1083 bus_dmamap_sync(sc->aac_dmat, cm->cm_datamap, 0,
1084 cm->cm_datamap->dm_mapsize,
1086 cm->cm_flags |= AAC_CMD_MAPPED;
1089 if (aac_enqueue_fib(sc, cm->cm_queue, cm) == EBUSY) {
1090 aac_remove_busy(cm);
1091 aac_unmap_command(cm);
1092 aac_requeue_ready(cm);
1100 aac_unmap_command(struct aac_command *cm)
1102 struct aac_softc *sc = cm->cm_sc;
1104 if (!(cm->cm_flags & AAC_CMD_MAPPED))
1107 if (cm->cm_datalen != 0) {
1108 if (cm->cm_flags & AAC_CMD_DATAIN)
1109 bus_dmamap_sync(sc->aac_dmat, cm->cm_datamap, 0,
1110 cm->cm_datamap->dm_mapsize,
1112 if (cm->cm_flags & AAC_CMD_DATAOUT)
1113 bus_dmamap_sync(sc->aac_dmat, cm->cm_datamap, 0,
1114 cm->cm_datamap->dm_mapsize,
1117 bus_dmamap_unload(sc->aac_dmat, cm->cm_datamap);
1119 cm->cm_flags &= ~AAC_CMD_MAPPED;
1592 aac_enqueue_fib(struct aac_softc *sc, int queue, struct aac_command *cm)
1599 fib_size = cm->cm_fib->Header.Size;
1600 fib_addr = cm->cm_fib->Header.ReceiverFibAddress;
1627 aac_enqueue_busy(cm);
1694 struct aac_command *cm;
1704 cm = sc->aac_commands + (fib_index >> 1);
1705 *fib_addr = cm->cm_fib;
1783 aac_command_timeout(struct aac_command *cm)
1785 struct aac_softc *sc = cm->cm_sc;
1788 sc->aac_dev.dv_xname, cm, cm->cm_flags,
1789 (int)(getuptime() - cm->cm_timestamp));
1791 if (cm->cm_flags & AAC_CMD_TIMEDOUT)
1794 cm->cm_flags |= AAC_CMD_TIMEDOUT;
1796 AAC_PRINT_FIB(sc, cm->cm_fib);
1798 if (cm->cm_flags & AAC_ON_AACQ_BIO) {
1799 struct scsi_xfer *xs = cm->cm_private;
1805 aac_remove_bio(cm);
1806 aac_unmap_command(cm);
1813 struct aac_command *cm;
1821 TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) {
1822 if (cm->cm_timestamp < deadline)
1823 aac_command_timeout(cm);
2175 struct aac_command *cm;
2200 cm = NULL;
2275 cm = xs->io;
2276 aac_scrub_command(cm);
2279 cm->cm_data = (void *)xs->data;
2280 cm->cm_datalen = xs->datalen;
2281 cm->cm_complete = aac_bio_complete;
2282 cm->cm_private = xs;
2283 cm->cm_timestamp = getuptime();
2284 cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE;
2285 cm->cm_blkno = blockno;
2286 cm->cm_bcount = blockcnt;
2289 aac_enqueue_bio(cm);
2294 if (!aac_wait_command(cm, xs->timeout))