Lines Matching defs:cm

96 static void	aac_unmap_command(struct aac_command *cm);
119 static int aac_src_send_command(struct aac_softc *sc, struct aac_command *cm);
358 struct aac_command *cm;
370 if (!aacraid_alloc_command(sc, &cm)) {
371 fib = cm->cm_fib;
372 cm->cm_timestamp = time_uptime;
373 cm->cm_datalen = 0;
374 cm->cm_flags |= AAC_CMD_WAIT;
390 aacraid_map_command_sg(cm, NULL, 0, 0);
391 aacraid_release_command(cm);
421 struct aac_command *cm;
428 if (aacraid_alloc_command(sc, &cm)) {
433 fib = cm->cm_fib;
457 cm->cm_timestamp = time_uptime;
458 cm->cm_datalen = 0;
472 if (aacraid_wait_command(cm) != 0) {
474 aacraid_release_command(cm);
517 rval = aacraid_wait_command(cm);
523 aacraid_release_command(cm);
869 struct aac_command *cm;
910 cm = sc->aac_sync_cm;
911 aac_unmap_command(cm);
912 cm->cm_flags |= AAC_CMD_COMPLETED;
913 aac_fib_header_toh(&cm->cm_fib->Header);
916 if (cm->cm_complete != NULL) {
917 cm->cm_complete(cm);
920 wakeup(cm);
959 cm = sc->aac_commands + (handle - 1);
960 fib = cm->cm_fib;
967 aac_remove_busy(cm);
968 aacraid_release_command(cm);
973 cm->cm_flags |= AAC_CMD_FASTRESP;
975 aac_remove_busy(cm);
976 aac_unmap_command(cm);
977 cm->cm_flags |= AAC_CMD_COMPLETED;
980 if (cm->cm_complete != NULL) {
981 cm->cm_complete(cm);
984 wakeup(cm);
1069 aacraid_wait_command(struct aac_command *cm)
1074 sc = cm->cm_sc;
1079 aac_enqueue_ready(cm);
1081 error = msleep(cm, &sc->aac_io_lock, PRIBIO, "aacraid_wait", 0);
1095 struct aac_command *cm;
1099 if ((cm = aac_dequeue_free(sc)) == NULL) {
1107 *cmp = cm;
1115 aacraid_release_command(struct aac_command *cm)
1120 sc = cm->cm_sc;
1125 cm->cm_sgtable = NULL;
1126 cm->cm_flags = 0;
1127 cm->cm_complete = NULL;
1128 cm->cm_ccb = NULL;
1129 cm->cm_passthr_dmat = 0;
1130 cm->cm_fib->Header.XferState = AAC_FIBSTATE_EMPTY;
1131 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB;
1132 cm->cm_fib->Header.Unused = 0;
1133 cm->cm_fib->Header.SenderSize = cm->cm_sc->aac_max_fib_size;
1140 cm->cm_fib->Header.u.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1141 cm->cm_fib->Header.Handle = 0;
1143 aac_enqueue_free(cm);
1174 struct aac_command *cm;
1213 cm = sc->aac_commands + sc->total_fibs;
1214 fm->aac_commands = cm;
1215 cm->cm_sc = sc;
1216 cm->cm_fib = (struct aac_fib *)
1218 cm->cm_fibphys = fibphys + i * maxsize;
1222 (cm->cm_fibphys + sizeof(struct aac_fib_xporthdr) + 31) & ~31;
1223 cm->cm_fib = (struct aac_fib *)
1224 ((u_int8_t *)cm->cm_fib + (fibphys_aligned - cm->cm_fibphys));
1225 cm->cm_fibphys = fibphys_aligned;
1228 fibphys_aligned = (cm->cm_fibphys + 31) & ~31;
1229 cm->cm_fib = (struct aac_fib *)
1230 ((u_int8_t *)cm->cm_fib + (fibphys_aligned - cm->cm_fibphys));
1231 cm->cm_fibphys = fibphys_aligned;
1233 cm->cm_index = sc->total_fibs;
1236 &cm->cm_datamap)) != 0)
1239 aacraid_release_command(cm);
1262 struct aac_command *cm;
1274 cm = fm->aac_commands + i;
1275 bus_dmamap_destroy(sc->aac_buffer_dmat, cm->cm_datamap);
1290 struct aac_command *cm;
1294 cm = (struct aac_command *)arg;
1295 sc = cm->cm_sc;
1296 fib = cm->cm_fib;
1304 if (cm->cm_sgtable != NULL) {
1312 sg = (struct aac_sge_ieee1212 *)cm->cm_sgtable;
1368 sg = (struct aac_sg_tableraw *)cm->cm_sgtable;
1381 } else if ((cm->cm_sc->flags & AAC_FLAGS_SG_64BIT) == 0) {
1383 sg = cm->cm_sgtable;
1394 sg = (struct aac_sg_table64 *)cm->cm_sgtable;
1411 cm->cm_fib->Header.SenderFibAddress = (cm->cm_index << 2);
1412 cm->cm_fib->Header.u.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys;
1415 cm->cm_fib->Header.Handle += cm->cm_index + 1;
1417 if (cm->cm_passthr_dmat == 0) {
1418 if (cm->cm_flags & AAC_CMD_DATAIN)
1419 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1421 if (cm->cm_flags & AAC_CMD_DATAOUT)
1422 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1426 cm->cm_flags |= AAC_CMD_MAPPED;
1428 if (cm->cm_flags & AAC_CMD_WAIT) {
1431 cm->cm_fibphys, 0, 0, 0, NULL, NULL);
1434 sc->aac_sync_cm = cm;
1437 cm->cm_fibphys, 0, 0, 0, &wait, NULL);
1440 while (AAC_SEND_COMMAND(sc, cm) != 0) {
1442 aac_unmap_command(cm);
1444 aac_requeue_ready(cm);
1491 aac_unmap_command(struct aac_command *cm)
1495 sc = cm->cm_sc;
1498 if (!(cm->cm_flags & AAC_CMD_MAPPED))
1501 if (cm->cm_datalen != 0 && cm->cm_passthr_dmat == 0) {
1502 if (cm->cm_flags & AAC_CMD_DATAIN)
1503 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1505 if (cm->cm_flags & AAC_CMD_DATAOUT)
1506 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap,
1509 bus_dmamap_unload(sc->aac_buffer_dmat, cm->cm_datamap);
1511 cm->cm_flags &= ~AAC_CMD_MAPPED;
2165 struct aac_command *cm;
2176 TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) {
2177 if (cm->cm_timestamp < deadline) {
2180 cm, (int)(time_uptime-cm->cm_timestamp));
2181 AAC_PRINT_FIB(sc, cm->cm_fib);
2385 aac_src_send_command(struct aac_softc *sc, struct aac_command *cm)
2393 if (sc->msi_enabled && cm->cm_fib->Header.Command != AifRequest &&
2418 cm->cm_fib->Header.Handle += (vector_no << 16);
2423 fibsize = (cm->cm_fib->Header.Size + 127) / 128 - 1;
2425 address = cm->cm_fibphys;
2428 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB2;
2429 cm->cm_fib->Header.u.TimeStamp = 0L;
2431 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB2_64;
2432 cm->cm_fib->Header.u.SenderFibAddressHigh = high_addr;
2434 cm->cm_fib->Header.SenderFibAddress = (u_int32_t)address;
2438 cm->cm_fib->Header.Size + 127) / 128 - 1;
2441 ((unsigned char *)cm->cm_fib - sizeof(struct aac_fib_xporthdr));
2442 pFibX->Handle = cm->cm_fib->Header.Handle;
2443 pFibX->HostAddress = cm->cm_fibphys;
2444 pFibX->Size = cm->cm_fib->Header.Size;
2446 address = cm->cm_fibphys - sizeof(struct aac_fib_xporthdr);
2450 aac_fib_header_tole(&cm->cm_fib->Header);
2454 aac_enqueue_busy(cm);
2778 struct aac_command *cm;
2783 cm = NULL;
2789 if (aacraid_alloc_command(sc, &cm)) {
2801 event->ev_arg = &cm;
2803 msleep(cm, &sc->aac_io_lock, 0, "aacraid_ctlsfib", 0);
2810 if ((error = copyin(ufib, cm->cm_fib,
2813 size = cm->cm_fib->Header.Size + sizeof(struct aac_fib_header);
2819 if ((error = copyin(ufib, cm->cm_fib, size)) != 0)
2821 cm->cm_fib->Header.Size = size;
2822 cm->cm_timestamp = time_uptime;
2823 cm->cm_datalen = 0;
2829 error = aacraid_wait_command(cm);
2840 size = cm->cm_fib->Header.Size;
2846 error = copyout(cm->cm_fib, ufib, size);
2849 if (cm != NULL) {
2851 aacraid_release_command(cm);
2863 struct aac_command *cm;
2876 cm = NULL;
2879 if (aacraid_alloc_command(sc, &cm)) {
2891 event->ev_arg = &cm;
2893 msleep(cm, &sc->aac_io_lock, 0, "aacraid_ctlsraw", 0);
2897 cm->cm_data = NULL;
2899 orig_map = cm->cm_datamap;
2901 fib = cm->cm_fib;
2973 &cm->cm_passthr_dmat)) {
2977 if (bus_dmamem_alloc(cm->cm_passthr_dmat, (void **)&cm->cm_data,
2978 BUS_DMA_NOWAIT, &cm->cm_datamap)) {
2982 /* fill some cm variables */
2983 cm->cm_datalen = srb_sg_bytecount;
2985 cm->cm_flags |= AAC_CMD_DATAIN;
2987 cm->cm_flags |= AAC_CMD_DATAOUT;
2991 cm->cm_data, cm->cm_datalen)) != 0)
2994 bus_dmamap_sync(cm->cm_passthr_dmat, cm->cm_datamap,
3013 cm->cm_sgtable = (struct aac_sg_table *)&srbcmd->sg_map;
3019 bus_dmamap_load(cm->cm_passthr_dmat,
3020 cm->cm_datamap, cm->cm_data,
3021 cm->cm_datalen,
3022 aacraid_map_command_sg, cm, 0);
3024 aacraid_map_command_sg(cm, NULL, 0, 0);
3029 while (!(cm->cm_flags & AAC_CMD_COMPLETED))
3030 msleep(cm, &sc->aac_io_lock, 0, "aacraid_ctlsrw2", 0);
3035 if ((error = copyout(cm->cm_data,
3037 cm->cm_datalen)) != 0)
3040 bus_dmamap_sync(cm->cm_passthr_dmat, cm->cm_datamap,
3049 if (cm && cm->cm_data) {
3051 bus_dmamap_unload(cm->cm_passthr_dmat, cm->cm_datamap);
3052 bus_dmamem_free(cm->cm_passthr_dmat, cm->cm_data, cm->cm_datamap);
3053 cm->cm_datamap = orig_map;
3055 if (cm && cm->cm_passthr_dmat)
3056 bus_dma_tag_destroy(cm->cm_passthr_dmat);
3057 if (cm) {
3059 aacraid_release_command(cm);
3071 struct aac_command *cm;
3076 if (aacraid_alloc_command(sc, &cm)) {
3083 fib = cm->cm_fib;
3098 aacraid_map_command_sg(cm, NULL, 0, 0);
3781 struct aac_command *cm;
3803 while ((cm = aac_dequeue_busy(sc)) != NULL) {
3804 cm->cm_flags |= AAC_CMD_RESET;
3807 if (cm->cm_complete != NULL) {
3808 cm->cm_complete(cm);
3813 wakeup(cm);
3818 while ((cm = aac_dequeue_ready(sc)) != NULL) {
3819 cm->cm_flags |= AAC_CMD_RESET;
3822 if (cm->cm_complete != NULL) {
3823 cm->cm_complete(cm);
3828 wakeup(cm);