Lines Matching refs: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);
822 struct aac_command *cm; in aac_new_intr() local
868 cm = sc->aac_commands + (index >> 2); in aac_new_intr()
869 fib = cm->cm_fib; in aac_new_intr()
874 aac_remove_busy(cm); in aac_new_intr()
875 aac_unmap_command(cm); in aac_new_intr()
876 cm->cm_flags |= AAC_CMD_COMPLETED; in aac_new_intr()
879 if (cm->cm_complete != NULL) { in aac_new_intr()
880 cm->cm_complete(cm); in aac_new_intr()
885 wakeup(cm); in aac_new_intr()
954 struct aac_command *cm; in aac_startio() local
971 cm = aac_dequeue_ready(sc); in aac_startio()
977 if (cm == NULL) in aac_startio()
978 aac_bio_command(sc, &cm); in aac_startio()
981 if (cm == NULL) in aac_startio()
985 if (cm->cm_flags & AAC_CMD_MAPPED) in aac_startio()
986 panic("aac: command %p already mapped", cm); in aac_startio()
993 if (cm->cm_datalen != 0) { in aac_startio()
994 if (cm->cm_flags & AAC_REQ_BIO) in aac_startio()
996 sc->aac_buffer_dmat, cm->cm_datamap, in aac_startio()
997 (struct bio *)cm->cm_private, in aac_startio()
998 aac_map_command_sg, cm, 0); in aac_startio()
1001 cm->cm_datamap, cm->cm_data, in aac_startio()
1002 cm->cm_datalen, aac_map_command_sg, cm, 0); in aac_startio()
1010 aac_map_command_sg(cm, NULL, 0, 0); in aac_startio()
1121 struct aac_command *cm; in aac_complete() local
1138 cm = sc->aac_commands + fib->Header.SenderData; in aac_complete()
1139 if (cm == NULL) { in aac_complete()
1143 if ((cm->cm_flags & AAC_CMD_TIMEDOUT) != 0) in aac_complete()
1146 cm, (int)(time_uptime-cm->cm_timestamp)); in aac_complete()
1148 aac_remove_busy(cm); in aac_complete()
1150 aac_unmap_command(cm); in aac_complete()
1151 cm->cm_flags |= AAC_CMD_COMPLETED; in aac_complete()
1154 if (cm->cm_complete != NULL) { in aac_complete()
1155 cm->cm_complete(cm); in aac_complete()
1158 wakeup(cm); in aac_complete()
1193 struct aac_command *cm; in aac_bio_command() local
1201 cm = NULL; in aac_bio_command()
1203 if (aac_alloc_command(sc, &cm)) /* get a command */ in aac_bio_command()
1209 cm->cm_datalen = bp->bio_bcount; in aac_bio_command()
1210 cm->cm_complete = aac_bio_complete; in aac_bio_command()
1211 cm->cm_flags = AAC_REQ_BIO; in aac_bio_command()
1212 cm->cm_private = bp; in aac_bio_command()
1213 cm->cm_timestamp = time_uptime; in aac_bio_command()
1216 fib = cm->cm_fib; in aac_bio_command()
1241 cm->cm_sgtable = (struct aac_sg_table *)&raw->SgMapRaw; in aac_bio_command()
1244 cm->cm_flags |= AAC_CMD_DATAIN; in aac_bio_command()
1247 cm->cm_flags |= AAC_CMD_DATAOUT; in aac_bio_command()
1259 cm->cm_sgtable = &br->SgMap; in aac_bio_command()
1260 cm->cm_flags |= AAC_CMD_DATAIN; in aac_bio_command()
1270 cm->cm_flags |= AAC_CMD_DATAOUT; in aac_bio_command()
1271 cm->cm_sgtable = &bw->SgMap; in aac_bio_command()
1285 cm->cm_flags |= AAC_CMD_DATAIN; in aac_bio_command()
1286 cm->cm_sgtable = (struct aac_sg_table *)&br->SgMap64; in aac_bio_command()
1297 cm->cm_flags |= AAC_CMD_DATAOUT; in aac_bio_command()
1298 cm->cm_sgtable = (struct aac_sg_table *)&bw->SgMap64; in aac_bio_command()
1302 *cmp = cm; in aac_bio_command()
1308 if (cm != NULL) in aac_bio_command()
1309 aac_release_command(cm); in aac_bio_command()
1317 aac_bio_complete(struct aac_command *cm) in aac_bio_complete() argument
1325 bp = (struct bio *)cm->cm_private; in aac_bio_complete()
1327 brr = (struct aac_blockread_response *)&cm->cm_fib->data[0]; in aac_bio_complete()
1330 bwr = (struct aac_blockwrite_response *)&cm->cm_fib->data[0]; in aac_bio_complete()
1333 aac_release_command(cm); in aac_bio_complete()
1356 aac_wait_command(struct aac_command *cm) in aac_wait_command() argument
1361 sc = cm->cm_sc; in aac_wait_command()
1365 aac_enqueue_ready(cm); in aac_wait_command()
1367 error = msleep(cm, &sc->aac_io_lock, PRIBIO, "aacwait", 0); in aac_wait_command()
1381 struct aac_command *cm; in aac_alloc_command() local
1385 if ((cm = aac_dequeue_free(sc)) == NULL) { in aac_alloc_command()
1395 *cmp = cm; in aac_alloc_command()
1403 aac_release_command(struct aac_command *cm) in aac_release_command() argument
1408 sc = cm->cm_sc; in aac_release_command()
1412 cm->cm_datalen = 0; in aac_release_command()
1413 cm->cm_sgtable = NULL; in aac_release_command()
1414 cm->cm_flags = 0; in aac_release_command()
1415 cm->cm_complete = NULL; in aac_release_command()
1416 cm->cm_private = NULL; in aac_release_command()
1417 cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE; in aac_release_command()
1418 cm->cm_fib->Header.XferState = AAC_FIBSTATE_EMPTY; in aac_release_command()
1419 cm->cm_fib->Header.StructType = AAC_FIBTYPE_TFIB; in aac_release_command()
1420 cm->cm_fib->Header.Flags = 0; in aac_release_command()
1421 cm->cm_fib->Header.SenderSize = cm->cm_sc->aac_max_fib_size; in aac_release_command()
1428 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys; in aac_release_command()
1429 cm->cm_fib->Header.SenderData = 0; in aac_release_command()
1431 aac_enqueue_free(cm); in aac_release_command()
1458 struct aac_command *cm; in aac_alloc_commands() local
1489 cm = sc->aac_commands + sc->total_fibs; in aac_alloc_commands()
1490 fm->aac_commands = cm; in aac_alloc_commands()
1491 cm->cm_sc = sc; in aac_alloc_commands()
1492 cm->cm_fib = (struct aac_fib *) in aac_alloc_commands()
1494 cm->cm_fibphys = fibphys + i*sc->aac_max_fib_size; in aac_alloc_commands()
1495 cm->cm_index = sc->total_fibs; in aac_alloc_commands()
1498 &cm->cm_datamap)) != 0) in aac_alloc_commands()
1501 aac_release_command(cm); in aac_alloc_commands()
1527 struct aac_command *cm; in aac_free_commands() local
1539 cm = fm->aac_commands + i; in aac_free_commands()
1540 bus_dmamap_destroy(sc->aac_buffer_dmat, cm->cm_datamap); in aac_free_commands()
1555 struct aac_command *cm; in aac_map_command_sg() local
1559 cm = (struct aac_command *)arg; in aac_map_command_sg()
1560 sc = cm->cm_sc; in aac_map_command_sg()
1561 fib = cm->cm_fib; in aac_map_command_sg()
1565 if (cm->cm_sgtable != NULL) { in aac_map_command_sg()
1568 sg = (struct aac_sg_tableraw *)cm->cm_sgtable; in aac_map_command_sg()
1579 } else if ((cm->cm_sc->flags & AAC_FLAGS_SG_64BIT) == 0) { in aac_map_command_sg()
1581 sg = cm->cm_sgtable; in aac_map_command_sg()
1591 sg = (struct aac_sg_table64 *)cm->cm_sgtable; in aac_map_command_sg()
1607 cm->cm_fib->Header.SenderFibAddress = (cm->cm_index << 2); in aac_map_command_sg()
1608 cm->cm_fib->Header.ReceiverFibAddress = (u_int32_t)cm->cm_fibphys; in aac_map_command_sg()
1611 cm->cm_fib->Header.SenderData = cm->cm_index; in aac_map_command_sg()
1613 if (cm->cm_flags & AAC_CMD_DATAIN) in aac_map_command_sg()
1614 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap, in aac_map_command_sg()
1616 if (cm->cm_flags & AAC_CMD_DATAOUT) in aac_map_command_sg()
1617 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap, in aac_map_command_sg()
1619 cm->cm_flags |= AAC_CMD_MAPPED; in aac_map_command_sg()
1623 while (AAC_SEND_COMMAND(sc, cm) != 0) { in aac_map_command_sg()
1625 aac_unmap_command(cm); in aac_map_command_sg()
1627 aac_requeue_ready(cm); in aac_map_command_sg()
1633 if (aac_enqueue_fib(sc, cm->cm_queue, cm) == EBUSY) { in aac_map_command_sg()
1634 aac_unmap_command(cm); in aac_map_command_sg()
1636 aac_requeue_ready(cm); in aac_map_command_sg()
1645 aac_unmap_command(struct aac_command *cm) in aac_unmap_command() argument
1649 sc = cm->cm_sc; in aac_unmap_command()
1652 if (!(cm->cm_flags & AAC_CMD_MAPPED)) in aac_unmap_command()
1655 if (cm->cm_datalen != 0) { in aac_unmap_command()
1656 if (cm->cm_flags & AAC_CMD_DATAIN) in aac_unmap_command()
1657 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap, in aac_unmap_command()
1659 if (cm->cm_flags & AAC_CMD_DATAOUT) in aac_unmap_command()
1660 bus_dmamap_sync(sc->aac_buffer_dmat, cm->cm_datamap, in aac_unmap_command()
1663 bus_dmamap_unload(sc->aac_buffer_dmat, cm->cm_datamap); in aac_unmap_command()
1665 cm->cm_flags &= ~AAC_CMD_MAPPED; in aac_unmap_command()
2136 aac_enqueue_fib(struct aac_softc *sc, int queue, struct aac_command *cm) in aac_enqueue_fib() argument
2145 fib_size = cm->cm_fib->Header.Size; in aac_enqueue_fib()
2146 fib_addr = cm->cm_fib->Header.ReceiverFibAddress; in aac_enqueue_fib()
2166 aac_enqueue_busy(cm); in aac_enqueue_fib()
2242 struct aac_command *cm; in aac_dequeue_fib() local
2252 cm = sc->aac_commands + (fib_index >> 2); in aac_dequeue_fib()
2253 *fib_addr = cm->cm_fib; in aac_dequeue_fib()
2338 struct aac_command *cm; in aac_timeout() local
2348 TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) { in aac_timeout()
2349 if ((cm->cm_timestamp < deadline) in aac_timeout()
2350 && !(cm->cm_flags & AAC_CMD_TIMEDOUT)) { in aac_timeout()
2351 cm->cm_flags |= AAC_CMD_TIMEDOUT; in aac_timeout()
2354 cm, cm->cm_fib->Header.Command, in aac_timeout()
2355 (int)(time_uptime-cm->cm_timestamp)); in aac_timeout()
2356 AAC_PRINT_FIB(sc, cm->cm_fib); in aac_timeout()
2603 aac_rx_send_command(struct aac_softc *sc, struct aac_command *cm) in aac_rx_send_command() argument
2614 aac_enqueue_busy(cm); in aac_rx_send_command()
2616 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL)); in aac_rx_send_command()
2618 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32)); in aac_rx_send_command()
2620 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size); in aac_rx_send_command()
2626 aac_rkt_send_command(struct aac_softc *sc, struct aac_command *cm) in aac_rkt_send_command() argument
2637 aac_enqueue_busy(cm); in aac_rkt_send_command()
2639 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys & 0xffffffffUL)); in aac_rkt_send_command()
2641 AAC_MEM1_SETREG4(sc, device, (u_int32_t)(cm->cm_fibphys >> 32)); in aac_rkt_send_command()
2643 AAC_MEM1_SETREG4(sc, device, cm->cm_fib->Header.Size); in aac_rkt_send_command()
2965 struct aac_command *cm; in aac_ioctl_sendfib() local
2970 cm = NULL; in aac_ioctl_sendfib()
2976 if (aac_alloc_command(sc, &cm)) { in aac_ioctl_sendfib()
2988 event->ev_arg = &cm; in aac_ioctl_sendfib()
2990 msleep(&cm, &sc->aac_io_lock, 0, "sendfib", 0); in aac_ioctl_sendfib()
2997 if ((error = copyin(ufib, cm->cm_fib, in aac_ioctl_sendfib()
3000 size = cm->cm_fib->Header.Size + sizeof(struct aac_fib_header); in aac_ioctl_sendfib()
3006 if ((error = copyin(ufib, cm->cm_fib, size)) != 0) in aac_ioctl_sendfib()
3008 cm->cm_fib->Header.Size = size; in aac_ioctl_sendfib()
3009 cm->cm_timestamp = time_uptime; in aac_ioctl_sendfib()
3015 error = aac_wait_command(cm); in aac_ioctl_sendfib()
3026 size = cm->cm_fib->Header.Size; in aac_ioctl_sendfib()
3032 error = copyout(cm->cm_fib, ufib, size); in aac_ioctl_sendfib()
3035 if (cm != NULL) { in aac_ioctl_sendfib()
3037 aac_release_command(cm); in aac_ioctl_sendfib()
3049 struct aac_command *cm; in aac_ioctl_send_raw_srb() local
3060 cm = NULL; in aac_ioctl_send_raw_srb()
3066 if (aac_alloc_command(sc, &cm)) { in aac_ioctl_send_raw_srb()
3076 event->ev_arg = &cm; in aac_ioctl_send_raw_srb()
3078 msleep(cm, &sc->aac_io_lock, 0, "aacraw", 0); in aac_ioctl_send_raw_srb()
3082 cm->cm_data = NULL; in aac_ioctl_send_raw_srb()
3083 fib = cm->cm_fib; in aac_ioctl_send_raw_srb()
3145 cm->cm_sgtable = (struct aac_sg_table *)&srbcmd->sg_map; in aac_ioctl_send_raw_srb()
3147 cm->cm_datalen = srb_sg_bytecount; in aac_ioctl_send_raw_srb()
3148 cm->cm_data = malloc(cm->cm_datalen, M_AACBUF, M_NOWAIT); in aac_ioctl_send_raw_srb()
3149 if (cm->cm_data == NULL) { in aac_ioctl_send_raw_srb()
3154 cm->cm_flags |= AAC_CMD_DATAIN; in aac_ioctl_send_raw_srb()
3156 cm->cm_flags |= AAC_CMD_DATAOUT; in aac_ioctl_send_raw_srb()
3157 error = copyin(srb_sg_address, cm->cm_data, in aac_ioctl_send_raw_srb()
3158 cm->cm_datalen); in aac_ioctl_send_raw_srb()
3179 aac_wait_command(cm); in aac_ioctl_send_raw_srb()
3183 error = copyout(cm->cm_data, srb_sg_address, cm->cm_datalen); in aac_ioctl_send_raw_srb()
3189 if (cm != NULL) { in aac_ioctl_send_raw_srb()
3190 if (cm->cm_data != NULL) in aac_ioctl_send_raw_srb()
3191 free(cm->cm_data, M_AACBUF); in aac_ioctl_send_raw_srb()
3193 aac_release_command(cm); in aac_ioctl_send_raw_srb()