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