Lines Matching defs:cm

79 static void	aac_bio_complete(struct aac_command *cm);
80 static int aac_wait_command(struct aac_command *cm);
90 static void aac_unmap_command(struct aac_command *cm);
103 struct aac_command *cm);
141 static int aac_rx_send_command(struct aac_softc *sc, struct aac_command *cm);
168 static int aac_rkt_send_command(struct aac_softc *sc, struct aac_command *cm);
820 struct aac_command *cm;
866 cm = sc->aac_commands + (index >> 2);
867 fib = cm->cm_fib;
872 aac_remove_busy(cm);
873 aac_unmap_command(cm);
874 cm->cm_flags |= AAC_CMD_COMPLETED;
877 if (cm->cm_complete != NULL) {
878 cm->cm_complete(cm);
883 wakeup(cm);
952 struct aac_command *cm;
969 cm = aac_dequeue_ready(sc);
975 if (cm == NULL)
976 aac_bio_command(sc, &cm);
979 if (cm == NULL)
983 if (cm->cm_flags & AAC_CMD_MAPPED)
984 panic("aac: command %p already mapped", cm);
991 if (cm->cm_datalen != 0) {
992 if (cm->cm_flags & AAC_REQ_BIO)
994 sc->aac_buffer_dmat, cm->cm_datamap,
995 (struct bio *)cm->cm_private,
996 aac_map_command_sg, cm, 0);
999 cm->cm_datamap, cm->cm_data,
1000 cm->cm_datalen, aac_map_command_sg, cm, 0);
1008 aac_map_command_sg(cm, NULL, 0, 0);
1120 struct aac_command *cm;
1137 cm = sc->aac_commands + fib->Header.SenderData;
1138 if (cm == NULL) {
1142 if ((cm->cm_flags & AAC_CMD_TIMEDOUT) != 0)
1145 cm, (int)(time_uptime-cm->cm_timestamp));
1147 aac_remove_busy(cm);
1149 aac_unmap_command(cm);
1150 cm->cm_flags |= AAC_CMD_COMPLETED;
1153 if (cm->cm_complete != NULL) {
1154 cm->cm_complete(cm);
1157 wakeup(cm);
1192 struct aac_command *cm;
1200 cm = NULL;
1202 if (aac_alloc_command(sc, &cm)) /* get a command */
1208 cm->cm_datalen = bp->bio_bcount;
1209 cm->cm_complete = aac_bio_complete;
1210 cm->cm_flags = AAC_REQ_BIO;
1211 cm->cm_private = bp;
1212 cm->cm_timestamp = time_uptime;
1215 fib = cm->cm_fib;
1240 cm->cm_sgtable = (struct aac_sg_table *)&raw->SgMapRaw;
1243 cm->cm_flags |= AAC_CMD_DATAIN;
1246 cm->cm_flags |= AAC_CMD_DATAOUT;
1258 cm->cm_sgtable = &br->SgMap;
1259 cm->cm_flags |= AAC_CMD_DATAIN;
1269 cm->cm_flags |= AAC_CMD_DATAOUT;
1270 cm->cm_sgtable = &bw->SgMap;
1284 cm->cm_flags |= AAC_CMD_DATAIN;
1285 cm->cm_sgtable = (struct aac_sg_table *)&br->SgMap64;
1296 cm->cm_flags |= AAC_CMD_DATAOUT;
1297 cm->cm_sgtable = (struct aac_sg_table *)&bw->SgMap64;
1301 *cmp = cm;
1307 if (cm != NULL)
1308 aac_release_command(cm);
1316 aac_bio_complete(struct aac_command *cm)
1324 bp = (struct bio *)cm->cm_private;
1326 brr = (struct aac_blockread_response *)&cm->cm_fib->data[0];
1329 bwr = (struct aac_blockwrite_response *)&cm->cm_fib->data[0];
1332 aac_release_command(cm);
1355 aac_wait_command(struct aac_command *cm)
1360 sc = cm->cm_sc;
1364 aac_enqueue_ready(cm);
1366 error = msleep(cm, &sc->aac_io_lock, PRIBIO, "aacwait", 0);
1380 struct aac_command *cm;
1384 if ((cm = aac_dequeue_free(sc)) == NULL) {
1394 *cmp = cm;
1402 aac_release_command(struct aac_command *cm)
1407 sc = cm->cm_sc;
1411 cm->cm_datalen = 0;
1412 cm->cm_sgtable = NULL;
1413 cm->cm_flags = 0;
1414 cm->cm_complete = NULL;
1415 cm->cm_private = NULL;
1416 cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE;
1417 cm->cm_fib->Header.XferState = AAC_FIBSTATE_EMPTY;
1418 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB;
1419 cm->cm_fib->Header.Flags = 0;
1420 cm->cm_fib->Header.SenderSize = cm->cm_sc->aac_max_fib_size;
1427 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1428 cm->cm_fib->Header.SenderData = 0;
1430 aac_enqueue_free(cm);
1457 struct aac_command *cm;
1488 cm = sc->aac_commands + sc->total_fibs;
1489 fm->aac_commands = cm;
1490 cm->cm_sc = sc;
1491 cm->cm_fib = (struct aac_fib *)
1493 cm->cm_fibphys = fibphys + i*sc->aac_max_fib_size;
1494 cm->cm_index = sc->total_fibs;
1497 &cm->cm_datamap)) != 0)
1500 aac_release_command(cm);
1526 struct aac_command *cm;
1539 cm = fm->aac_commands + i;
1540 bus_dmamap_destroy(sc->aac_buffer_dmat, cm->cm_datamap);
1555 struct aac_command *cm;
1559 cm = (struct aac_command *)arg;
1560 sc = cm->cm_sc;
1561 fib = cm->cm_fib;
1565 if (cm->cm_sgtable != NULL) {
1568 sg = (struct aac_sg_tableraw *)cm->cm_sgtable;
1579 } else if ((cm->cm_sc->flags & AAC_FLAGS_SG_64BIT) == 0) {
1581 sg = cm->cm_sgtable;
1591 sg = (struct aac_sg_table64 *)cm->cm_sgtable;
1607 cm->cm_fib->Header.SenderFibAddress = (cm->cm_index << 2);
1608 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1611 cm->cm_fib->Header.SenderData = cm->cm_index;
1613 if (cm->cm_flags & AAC_CMD_DATAIN)
1614 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1616 if (cm->cm_flags & AAC_CMD_DATAOUT)
1617 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1619 cm->cm_flags |= AAC_CMD_MAPPED;
1623 while (AAC_SEND_COMMAND(sc, cm) != 0) {
1625 aac_unmap_command(cm);
1627 aac_requeue_ready(cm);
1633 if (aac_enqueue_fib(sc, cm->cm_queue, cm) == EBUSY) {
1634 aac_unmap_command(cm);
1636 aac_requeue_ready(cm);
1645 aac_unmap_command(struct aac_command *cm)
1649 sc = cm->cm_sc;
1652 if (!(cm->cm_flags & AAC_CMD_MAPPED))
1655 if (cm->cm_datalen != 0) {
1656 if (cm->cm_flags & AAC_CMD_DATAIN)
1657 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1659 if (cm->cm_flags & AAC_CMD_DATAOUT)
1660 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1663 bus_dmamap_unload(sc->aac_buffer_dmat, cm->cm_datamap);
1665 cm->cm_flags &= ~AAC_CMD_MAPPED;
2136 aac_enqueue_fib(struct aac_softc *sc, int queue, struct aac_command *cm)
2145 fib_size = cm->cm_fib->Header.Size;
2146 fib_addr = cm->cm_fib->Header.ReceiverFibAddress;
2166 aac_enqueue_busy(cm);
2242 struct aac_command *cm;
2252 cm = sc->aac_commands + (fib_index >> 2);
2253 *fib_addr = cm->cm_fib;
2338 struct aac_command *cm;
2348 TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) {
2349 if ((cm->cm_timestamp < deadline)
2350 && !(cm->cm_flags & AAC_CMD_TIMEDOUT)) {
2351 cm->cm_flags |= AAC_CMD_TIMEDOUT;
2354 cm, cm->cm_fib->Header.Command,
2355 (int)(time_uptime-cm->cm_timestamp));
2356 AAC_PRINT_FIB(sc, cm->cm_fib);
2603 aac_rx_send_command(struct aac_softc *sc, struct aac_command *cm)
2614 aac_enqueue_busy(cm);
2616 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL));
2618 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32));
2620 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size);
2626 aac_rkt_send_command(struct aac_softc *sc, struct aac_command *cm)
2637 aac_enqueue_busy(cm);
2639 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL));
2641 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32));
2643 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size);
2965 struct aac_command *cm;
2970 cm = NULL;
2976 if (aac_alloc_command(sc, &cm)) {
2988 event->ev_arg = &cm;
2990 msleep(&cm, &sc->aac_io_lock, 0, "sendfib", 0);
2997 if ((error = copyin(ufib, cm->cm_fib,
3000 size = cm->cm_fib->Header.Size + sizeof(struct aac_fib_header);
3006 if ((error = copyin(ufib, cm->cm_fib, size)) != 0)
3008 cm->cm_fib->Header.Size = size;
3009 cm->cm_timestamp = time_uptime;
3015 error = aac_wait_command(cm);
3026 size = cm->cm_fib->Header.Size;
3032 error = copyout(cm->cm_fib, ufib, size);
3035 if (cm != NULL) {
3037 aac_release_command(cm);
3049 struct aac_command *cm;
3061 cm = NULL;
3067 if (aac_alloc_command(sc, &cm)) {
3077 event->ev_arg = &cm;
3079 msleep(cm, &sc->aac_io_lock, 0, "aacraw", 0);
3083 cm->cm_data = NULL;
3084 fib = cm->cm_fib;
3146 cm->cm_sgtable = (struct aac_sg_table *)&srbcmd->sg_map;
3148 cm->cm_datalen = srb_sg_bytecount;
3149 cm->cm_data = malloc(cm->cm_datalen, M_AACBUF, M_NOWAIT);
3150 if (cm->cm_data == NULL) {
3155 cm->cm_flags |= AAC_CMD_DATAIN;
3157 cm->cm_flags |= AAC_CMD_DATAOUT;
3158 error = copyin(srb_sg_address, cm->cm_data,
3159 cm->cm_datalen);
3180 aac_wait_command(cm);
3184 error = copyout(cm->cm_data, srb_sg_address, cm->cm_datalen);
3190 if (cm != NULL) {
3191 if (cm->cm_data != NULL)
3192 free(cm->cm_data, M_AACBUF);
3194 aac_release_command(cm);