Lines Matching defs:cm
80 static void aac_bio_complete(struct aac_command *cm);
81 static int aac_wait_command(struct aac_command *cm);
91 static void aac_unmap_command(struct aac_command *cm);
104 struct aac_command *cm);
142 static int aac_rx_send_command(struct aac_softc *sc, struct aac_command *cm);
169 static int aac_rkt_send_command(struct aac_softc *sc, struct aac_command *cm);
819 struct aac_command *cm;
865 cm = sc->aac_commands + (index >> 2);
866 fib = cm->cm_fib;
871 aac_remove_busy(cm);
872 aac_unmap_command(cm);
873 cm->cm_flags |= AAC_CMD_COMPLETED;
876 if (cm->cm_complete != NULL) {
877 cm->cm_complete(cm);
882 wakeup(cm);
951 struct aac_command *cm;
968 cm = aac_dequeue_ready(sc);
974 if (cm == NULL)
975 aac_bio_command(sc, &cm);
978 if (cm == NULL)
982 if (cm->cm_flags & AAC_CMD_MAPPED)
983 panic("aac: command %p already mapped", cm);
990 if (cm->cm_datalen != 0) {
991 if (cm->cm_flags & AAC_REQ_BIO)
993 sc->aac_buffer_dmat, cm->cm_datamap,
994 (struct bio *)cm->cm_private,
995 aac_map_command_sg, cm, 0);
998 cm->cm_datamap, cm->cm_data,
999 cm->cm_datalen, aac_map_command_sg, cm, 0);
1007 aac_map_command_sg(cm, NULL, 0, 0);
1118 struct aac_command *cm;
1135 cm = sc->aac_commands + fib->Header.SenderData;
1136 if (cm == NULL) {
1140 if ((cm->cm_flags & AAC_CMD_TIMEDOUT) != 0)
1143 cm, (int)(time_uptime-cm->cm_timestamp));
1145 aac_remove_busy(cm);
1147 aac_unmap_command(cm);
1148 cm->cm_flags |= AAC_CMD_COMPLETED;
1151 if (cm->cm_complete != NULL) {
1152 cm->cm_complete(cm);
1155 wakeup(cm);
1190 struct aac_command *cm;
1198 cm = NULL;
1200 if (aac_alloc_command(sc, &cm)) /* get a command */
1206 cm->cm_datalen = bp->bio_bcount;
1207 cm->cm_complete = aac_bio_complete;
1208 cm->cm_flags = AAC_REQ_BIO;
1209 cm->cm_private = bp;
1210 cm->cm_timestamp = time_uptime;
1213 fib = cm->cm_fib;
1238 cm->cm_sgtable = (struct aac_sg_table *)&raw->SgMapRaw;
1241 cm->cm_flags |= AAC_CMD_DATAIN;
1244 cm->cm_flags |= AAC_CMD_DATAOUT;
1256 cm->cm_sgtable = &br->SgMap;
1257 cm->cm_flags |= AAC_CMD_DATAIN;
1267 cm->cm_flags |= AAC_CMD_DATAOUT;
1268 cm->cm_sgtable = &bw->SgMap;
1282 cm->cm_flags |= AAC_CMD_DATAIN;
1283 cm->cm_sgtable = (struct aac_sg_table *)&br->SgMap64;
1294 cm->cm_flags |= AAC_CMD_DATAOUT;
1295 cm->cm_sgtable = (struct aac_sg_table *)&bw->SgMap64;
1299 *cmp = cm;
1305 if (cm != NULL)
1306 aac_release_command(cm);
1314 aac_bio_complete(struct aac_command *cm)
1322 bp = (struct bio *)cm->cm_private;
1324 brr = (struct aac_blockread_response *)&cm->cm_fib->data[0];
1327 bwr = (struct aac_blockwrite_response *)&cm->cm_fib->data[0];
1330 aac_release_command(cm);
1353 aac_wait_command(struct aac_command *cm)
1358 sc = cm->cm_sc;
1362 aac_enqueue_ready(cm);
1364 error = msleep(cm, &sc->aac_io_lock, PRIBIO, "aacwait", 0);
1378 struct aac_command *cm;
1382 if ((cm = aac_dequeue_free(sc)) == NULL) {
1392 *cmp = cm;
1400 aac_release_command(struct aac_command *cm)
1405 sc = cm->cm_sc;
1409 cm->cm_datalen = 0;
1410 cm->cm_sgtable = NULL;
1411 cm->cm_flags = 0;
1412 cm->cm_complete = NULL;
1413 cm->cm_private = NULL;
1414 cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE;
1415 cm->cm_fib->Header.XferState = AAC_FIBSTATE_EMPTY;
1416 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB;
1417 cm->cm_fib->Header.Flags = 0;
1418 cm->cm_fib->Header.SenderSize = cm->cm_sc->aac_max_fib_size;
1425 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1426 cm->cm_fib->Header.SenderData = 0;
1428 aac_enqueue_free(cm);
1455 struct aac_command *cm;
1486 cm = sc->aac_commands + sc->total_fibs;
1487 fm->aac_commands = cm;
1488 cm->cm_sc = sc;
1489 cm->cm_fib = (struct aac_fib *)
1491 cm->cm_fibphys = fibphys + i*sc->aac_max_fib_size;
1492 cm->cm_index = sc->total_fibs;
1495 &cm->cm_datamap)) != 0)
1498 aac_release_command(cm);
1524 struct aac_command *cm;
1536 cm = fm->aac_commands + i;
1537 bus_dmamap_destroy(sc->aac_buffer_dmat, cm->cm_datamap);
1552 struct aac_command *cm;
1556 cm = (struct aac_command *)arg;
1557 sc = cm->cm_sc;
1558 fib = cm->cm_fib;
1562 if (cm->cm_sgtable != NULL) {
1565 sg = (struct aac_sg_tableraw *)cm->cm_sgtable;
1576 } else if ((cm->cm_sc->flags & AAC_FLAGS_SG_64BIT) == 0) {
1578 sg = cm->cm_sgtable;
1588 sg = (struct aac_sg_table64 *)cm->cm_sgtable;
1604 cm->cm_fib->Header.SenderFibAddress = (cm->cm_index << 2);
1605 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1608 cm->cm_fib->Header.SenderData = cm->cm_index;
1610 if (cm->cm_flags & AAC_CMD_DATAIN)
1611 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1613 if (cm->cm_flags & AAC_CMD_DATAOUT)
1614 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1616 cm->cm_flags |= AAC_CMD_MAPPED;
1620 while (AAC_SEND_COMMAND(sc, cm) != 0) {
1622 aac_unmap_command(cm);
1624 aac_requeue_ready(cm);
1630 if (aac_enqueue_fib(sc, cm->cm_queue, cm) == EBUSY) {
1631 aac_unmap_command(cm);
1633 aac_requeue_ready(cm);
1642 aac_unmap_command(struct aac_command *cm)
1646 sc = cm->cm_sc;
1649 if (!(cm->cm_flags & AAC_CMD_MAPPED))
1652 if (cm->cm_datalen != 0) {
1653 if (cm->cm_flags & AAC_CMD_DATAIN)
1654 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1656 if (cm->cm_flags & AAC_CMD_DATAOUT)
1657 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1660 bus_dmamap_unload(sc->aac_buffer_dmat, cm->cm_datamap);
1662 cm->cm_flags &= ~AAC_CMD_MAPPED;
2133 aac_enqueue_fib(struct aac_softc *sc, int queue, struct aac_command *cm)
2142 fib_size = cm->cm_fib->Header.Size;
2143 fib_addr = cm->cm_fib->Header.ReceiverFibAddress;
2163 aac_enqueue_busy(cm);
2239 struct aac_command *cm;
2249 cm = sc->aac_commands + (fib_index >> 2);
2250 *fib_addr = cm->cm_fib;
2335 struct aac_command *cm;
2345 TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) {
2346 if ((cm->cm_timestamp < deadline)
2347 && !(cm->cm_flags & AAC_CMD_TIMEDOUT)) {
2348 cm->cm_flags |= AAC_CMD_TIMEDOUT;
2351 cm, cm->cm_fib->Header.Command,
2352 (int)(time_uptime-cm->cm_timestamp));
2353 AAC_PRINT_FIB(sc, cm->cm_fib);
2600 aac_rx_send_command(struct aac_softc *sc, struct aac_command *cm)
2611 aac_enqueue_busy(cm);
2613 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL));
2615 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32));
2617 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size);
2623 aac_rkt_send_command(struct aac_softc *sc, struct aac_command *cm)
2634 aac_enqueue_busy(cm);
2636 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL));
2638 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32));
2640 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size);
2962 struct aac_command *cm;
2967 cm = NULL;
2973 if (aac_alloc_command(sc, &cm)) {
2985 event->ev_arg = &cm;
2987 msleep(&cm, &sc->aac_io_lock, 0, "sendfib", 0);
2994 if ((error = copyin(ufib, cm->cm_fib,
2997 size = cm->cm_fib->Header.Size + sizeof(struct aac_fib_header);
3003 if ((error = copyin(ufib, cm->cm_fib, size)) != 0)
3005 cm->cm_fib->Header.Size = size;
3006 cm->cm_timestamp = time_uptime;
3012 error = aac_wait_command(cm);
3023 size = cm->cm_fib->Header.Size;
3029 error = copyout(cm->cm_fib, ufib, size);
3032 if (cm != NULL) {
3034 aac_release_command(cm);
3046 struct aac_command *cm;
3057 cm = NULL;
3063 if (aac_alloc_command(sc, &cm)) {
3073 event->ev_arg = &cm;
3075 msleep(cm, &sc->aac_io_lock, 0, "aacraw", 0);
3079 cm->cm_data = NULL;
3080 fib = cm->cm_fib;
3142 cm->cm_sgtable = (struct aac_sg_table *)&srbcmd->sg_map;
3144 cm->cm_datalen = srb_sg_bytecount;
3145 cm->cm_data = malloc(cm->cm_datalen, M_AACBUF, M_NOWAIT);
3146 if (cm->cm_data == NULL) {
3151 cm->cm_flags |= AAC_CMD_DATAIN;
3153 cm->cm_flags |= AAC_CMD_DATAOUT;
3154 error = copyin(srb_sg_address, cm->cm_data,
3155 cm->cm_datalen);
3176 aac_wait_command(cm);
3180 error = copyout(cm->cm_data, srb_sg_address, cm->cm_datalen);
3186 if (cm != NULL) {
3187 if (cm->cm_data != NULL)
3188 free(cm->cm_data, M_AACBUF);
3190 aac_release_command(cm);