Lines Matching refs:mc
642 struct mly_ccb *mc; in mly_scan_btl() local
656 if ((rv = mly_ccb_alloc(mly, &mc)) != 0) in mly_scan_btl()
660 mc->mc_data = malloc(sizeof(union mly_devinfo), in mly_scan_btl()
663 mc->mc_flags |= MLY_CCB_DATAIN; in mly_scan_btl()
664 mc->mc_complete = mly_complete_rescan; in mly_scan_btl()
669 mci = (struct mly_cmd_ioctl *)&mc->mc_packet->ioctl; in mly_scan_btl()
675 mc->mc_length = sizeof(struct mly_ioctl_getlogdevinfovalid); in mly_scan_btl()
676 mci->data_size = htole32(mc->mc_length); in mly_scan_btl()
681 mc->mc_length = sizeof(struct mly_ioctl_getphysdevinfovalid); in mly_scan_btl()
682 mci->data_size = htole32(mc->mc_length); in mly_scan_btl()
690 if ((rv = mly_ccb_map(mly, mc)) != 0) { in mly_scan_btl()
691 free(mc->mc_data, M_DEVBUF); in mly_scan_btl()
692 mly_ccb_free(mly, mc); in mly_scan_btl()
697 mly_ccb_enqueue(mly, mc); in mly_scan_btl()
705 mly_complete_rescan(struct mly_softc *mly, struct mly_ccb *mc) in mly_complete_rescan() argument
715 mly_ccb_unmap(mly, mc); in mly_complete_rescan()
721 mci = (struct mly_cmd_ioctl *)&mc->mc_packet->ioctl; in mly_complete_rescan()
740 if (mc->mc_status != 0) in mly_complete_rescan()
743 if (mc->mc_length == sizeof(*ldi)) { in mly_complete_rescan()
744 ldi = (struct mly_ioctl_getlogdevinfovalid *)mc->mc_data; in mly_complete_rescan()
762 } else if (mc->mc_length == sizeof(*pdi)) { in mly_complete_rescan()
763 pdi = (struct mly_ioctl_getphysdevinfovalid *)mc->mc_data; in mly_complete_rescan()
808 free(mc->mc_data, M_DEVBUF); in mly_complete_rescan()
809 mly_ccb_free(mly, mc); in mly_complete_rescan()
918 struct mly_ccb *mc; in mly_ioctl() local
923 mc = NULL; in mly_ioctl()
924 if ((rv = mly_ccb_alloc(mly, &mc)) != 0) in mly_ioctl()
931 mci = &mc->mc_packet->ioctl; in mly_ioctl()
942 mc->mc_data = malloc(datasize, M_DEVBUF, M_NOWAIT); in mly_ioctl()
943 mc->mc_flags |= MLY_CCB_DATAIN; in mly_ioctl()
945 mc->mc_data = *data; in mly_ioctl()
946 mc->mc_flags |= MLY_CCB_DATAOUT; in mly_ioctl()
948 mc->mc_length = datasize; in mly_ioctl()
949 mc->mc_packet->generic.data_size = htole32(datasize); in mly_ioctl()
954 if ((rv = mly_ccb_map(mly, mc)) != 0) in mly_ioctl()
956 rv = mly_ccb_poll(mly, mc, 30000); in mly_ioctl()
958 mly_ccb_unmap(mly, mc); in mly_ioctl()
963 status = mc->mc_status; in mly_ioctl()
968 if (mc->mc_sense > 0 && sense_buffer != NULL) { in mly_ioctl()
969 memcpy(sense_buffer, mc->mc_packet, mc->mc_sense); in mly_ioctl()
970 *sense_length = mc->mc_sense; in mly_ioctl()
976 *data = mc->mc_data; in mly_ioctl()
982 if (mc != NULL) { in mly_ioctl()
984 if (rv != 0 && mc->mc_data != NULL && in mly_ioctl()
986 free(mc->mc_data, M_DEVBUF); in mly_ioctl()
987 mly_ccb_free(mly, mc); in mly_ioctl()
1038 struct mly_ccb *mc; in mly_fetch_event() local
1044 if (mly_ccb_alloc(mly, &mc)) in mly_fetch_event()
1048 mc->mc_data = malloc(sizeof(struct mly_event), M_DEVBUF, in mly_fetch_event()
1051 mc->mc_length = sizeof(struct mly_event); in mly_fetch_event()
1052 mc->mc_flags |= MLY_CCB_DATAIN; in mly_fetch_event()
1053 mc->mc_complete = mly_complete_event; in mly_fetch_event()
1063 free(mc->mc_data, M_DEVBUF); in mly_fetch_event()
1064 mly_ccb_free(mly, mc); in mly_fetch_event()
1077 mci = (struct mly_cmd_ioctl *)&mc->mc_packet->ioctl; in mly_fetch_event()
1089 if (mly_ccb_map(mly, mc) != 0) in mly_fetch_event()
1091 mly_ccb_enqueue(mly, mc); in mly_fetch_event()
1096 free(mc->mc_data, M_DEVBUF); in mly_fetch_event()
1097 mly_ccb_free(mly, mc); in mly_fetch_event()
1104 mly_complete_event(struct mly_softc *mly, struct mly_ccb *mc) in mly_complete_event() argument
1108 me = (struct mly_event *)mc->mc_data; in mly_complete_event()
1109 mly_ccb_unmap(mly, mc); in mly_complete_event()
1110 mly_ccb_free(mly, mc); in mly_complete_event()
1113 if (mc->mc_status == SCSI_OK) in mly_complete_event()
1117 mc->mc_status); in mly_complete_event()
1293 mly_ccb_poll(struct mly_softc *mly, struct mly_ccb *mc, int timo) in mly_ccb_poll() argument
1297 if ((rv = mly_ccb_submit(mly, mc)) != 0) in mly_ccb_poll()
1301 if ((mc->mc_flags & MLY_CCB_COMPLETE) != 0) in mly_ccb_poll()
1315 mly_ccb_wait(struct mly_softc *mly, struct mly_ccb *mc, int timo) in mly_ccb_wait() argument
1319 mly_ccb_enqueue(mly, mc); in mly_ccb_wait()
1322 if ((mc->mc_flags & MLY_CCB_COMPLETE) != 0) { in mly_ccb_wait()
1326 rv = tsleep(mc, PRIBIO, "mlywccb", timo * hz / 1000); in mly_ccb_wait()
1338 mly_ccb_enqueue(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_enqueue() argument
1344 if (mc != NULL) in mly_ccb_enqueue()
1345 SIMPLEQ_INSERT_TAIL(&mly->mly_ccb_queue, mc, mc_link.simpleq); in mly_ccb_enqueue()
1347 while ((mc = SIMPLEQ_FIRST(&mly->mly_ccb_queue)) != NULL) { in mly_ccb_enqueue()
1348 if (mly_ccb_submit(mly, mc)) in mly_ccb_enqueue()
1360 mly_ccb_submit(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_submit() argument
1365 mc->mc_packet->generic.command_id = htole16(mc->mc_slot); in mly_ccb_submit()
1368 mc->mc_packetphys - mly->mly_pkt_busaddr, in mly_ccb_submit()
1390 (u_int64_t)mc->mc_packetphys & 0xffffffff); in mly_ccb_submit()
1392 (u_int64_t)mc->mc_packetphys >> 32); in mly_ccb_submit()
1409 memcpy(pkt->mmbox.data, mc->mc_packet->mmbox.data, in mly_ccb_submit()
1413 pkt->mmbox.flag = mc->mc_packet->mmbox.flag; in mly_ccb_submit()
1435 struct mly_ccb *mc; in mly_intr() local
1451 mc = mly->mly_ccbs + (slot - MLY_SLOT_START); in mly_intr()
1452 mc->mc_status = in mly_intr()
1454 mc->mc_sense = in mly_intr()
1456 mc->mc_resid = in mly_intr()
1459 mly_ccb_complete(mly, mc); in mly_intr()
1491 mc = mly->mly_ccbs + (slot - MLY_SLOT_START); in mly_intr()
1492 mc->mc_status = sp->status.status; in mly_intr()
1493 mc->mc_sense = sp->status.sense_length; in mly_intr()
1494 mc->mc_resid = le32toh(sp->status.residue); in mly_intr()
1495 mly_ccb_complete(mly, mc); in mly_intr()
1530 mly_ccb_complete(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_complete() argument
1535 mc->mc_packetphys - mly->mly_pkt_busaddr, in mly_ccb_complete()
1539 complete = mc->mc_complete; in mly_ccb_complete()
1540 mc->mc_flags |= MLY_CCB_COMPLETE; in mly_ccb_complete()
1546 (*complete)(mly, mc); in mly_ccb_complete()
1548 wakeup(mc); in mly_ccb_complete()
1557 struct mly_ccb *mc; in mly_ccb_alloc() local
1561 mc = SLIST_FIRST(&mly->mly_ccb_free); in mly_ccb_alloc()
1562 if (mc != NULL) in mly_ccb_alloc()
1566 *mcp = mc; in mly_ccb_alloc()
1567 return (mc == NULL ? EAGAIN : 0); in mly_ccb_alloc()
1574 mly_ccb_free(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_free() argument
1582 mc->mc_data = NULL; in mly_ccb_free()
1583 mc->mc_flags = 0; in mly_ccb_free()
1584 mc->mc_complete = NULL; in mly_ccb_free()
1585 mc->mc_private = NULL; in mly_ccb_free()
1586 mc->mc_packet->generic.command_control = 0; in mly_ccb_free()
1592 mc->mc_packet->generic.sense_buffer_address = in mly_ccb_free()
1593 htole64(mc->mc_packetphys); in mly_ccb_free()
1594 mc->mc_packet->generic.maximum_sense_size = in mly_ccb_free()
1598 SLIST_INSERT_HEAD(&mly->mly_ccb_free, mc, mc_link.slist); in mly_ccb_free()
1613 struct mly_ccb *mc; in mly_alloc_ccbs() local
1638 mc = mly->mly_ccbs + i; in mly_alloc_ccbs()
1639 mc->mc_slot = MLY_SLOT_START + i; in mly_alloc_ccbs()
1640 mc->mc_packet = mly->mly_pkt + i; in mly_alloc_ccbs()
1641 mc->mc_packetphys = mly->mly_pkt_busaddr + in mly_alloc_ccbs()
1647 &mc->mc_datamap); in mly_alloc_ccbs()
1653 mly_ccb_free(mly, mc); in mly_alloc_ccbs()
1667 struct mly_ccb *mc; in mly_release_ccbs() local
1670 while (mly_ccb_alloc(mly, &mc) == 0) in mly_release_ccbs()
1671 bus_dmamap_destroy(mly->mly_dmat, mc->mc_datamap); in mly_release_ccbs()
1685 mly_ccb_map(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_map() argument
1694 if ((mc->mc_flags & MLY_CCB_MAPPED) != 0) in mly_ccb_map()
1696 mc->mc_flags |= MLY_CCB_MAPPED; in mly_ccb_map()
1699 if (mc->mc_data == NULL) in mly_ccb_map()
1703 rv = bus_dmamap_load(mly->mly_dmat, mc->mc_datamap, mc->mc_data, in mly_ccb_map()
1704 mc->mc_length, NULL, BUS_DMA_NOWAIT | BUS_DMA_STREAMING | in mly_ccb_map()
1705 ((mc->mc_flags & MLY_CCB_DATAIN) != 0 ? in mly_ccb_map()
1710 gen = &mc->mc_packet->generic; in mly_ccb_map()
1715 if ((nseg = mc->mc_datamap->dm_nsegs) <= 2) { in mly_ccb_map()
1716 mc->mc_sgoff = -1; in mly_ccb_map()
1719 mc->mc_sgoff = (mc->mc_slot - MLY_SLOT_START) * in mly_ccb_map()
1721 sg = mly->mly_sg + mc->mc_sgoff; in mly_ccb_map()
1726 (mc->mc_sgoff * sizeof(struct mly_sg_entry))); in mly_ccb_map()
1732 for (ds = mc->mc_datamap->dm_segs; nseg != 0; nseg--, sg++, ds++) { in mly_ccb_map()
1740 if ((mc->mc_flags & MLY_CCB_DATAIN) != 0) in mly_ccb_map()
1747 bus_dmamap_sync(mly->mly_dmat, mc->mc_datamap, 0, mc->mc_length, flg); in mly_ccb_map()
1752 if (mc->mc_sgoff == -1) in mly_ccb_map()
1755 bus_dmamap_sync(mly->mly_dmat, mly->mly_sg_dmamap, mc->mc_sgoff, in mly_ccb_map()
1765 mly_ccb_unmap(struct mly_softc *mly, struct mly_ccb *mc) in mly_ccb_unmap() argument
1770 if ((mc->mc_flags & MLY_CCB_MAPPED) == 0) in mly_ccb_unmap()
1772 mc->mc_flags &= ~MLY_CCB_MAPPED; in mly_ccb_unmap()
1775 if ((mc->mc_flags & MLY_CCB_DATAIN) != 0) in mly_ccb_unmap()
1780 bus_dmamap_sync(mly->mly_dmat, mc->mc_datamap, 0, mc->mc_length, flg); in mly_ccb_unmap()
1781 bus_dmamap_unload(mly->mly_dmat, mc->mc_datamap); in mly_ccb_unmap()
1783 if (mc->mc_sgoff == -1) in mly_ccb_unmap()
1786 bus_dmamap_sync(mly->mly_dmat, mly->mly_sg_dmamap, mc->mc_sgoff, in mly_ccb_unmap()
1809 struct mly_ccb *mc; in mly_scsipi_request() local
1848 if (mly_ccb_alloc(mly, &mc)) { in mly_scsipi_request()
1855 mc->mc_data = xs->data; in mly_scsipi_request()
1856 mc->mc_length = xs->datalen; in mly_scsipi_request()
1857 mc->mc_complete = mly_scsipi_complete; in mly_scsipi_request()
1858 mc->mc_private = xs; in mly_scsipi_request()
1861 ss = &mc->mc_packet->scsi_small; in mly_scsipi_request()
1889 if (mc->mc_length != 0) { in mly_scsipi_request()
1891 mc->mc_flags |= MLY_CCB_DATAOUT; in mly_scsipi_request()
1893 mc->mc_flags |= MLY_CCB_DATAIN; in mly_scsipi_request()
1895 if (mly_ccb_map(mly, mc) != 0) { in mly_scsipi_request()
1897 mly_ccb_free(mly, mc); in mly_scsipi_request()
1907 if (mly_ccb_poll(mly, mc, xs->timeout + 5000)) { in mly_scsipi_request()
1909 if (mc->mc_length != 0) in mly_scsipi_request()
1910 mly_ccb_unmap(mly, mc); in mly_scsipi_request()
1911 mly_ccb_free(mly, mc); in mly_scsipi_request()
1915 mly_ccb_enqueue(mly, mc); in mly_scsipi_request()
1939 mly_scsipi_complete(struct mly_softc *mly, struct mly_ccb *mc) in mly_scsipi_complete() argument
1948 xs = mc->mc_private; in mly_scsipi_complete()
1949 xs->status = mc->mc_status; in mly_scsipi_complete()
1958 if (mc->mc_length != 0) in mly_scsipi_complete()
1959 mly_ccb_unmap(mly, mc); in mly_scsipi_complete()
1961 switch (mc->mc_status) { in mly_scsipi_complete()
1991 sl = mc->mc_sense; in mly_scsipi_complete()
1994 memcpy(&xs->sense.scsi_sense, mc->mc_packet, sl); in mly_scsipi_complete()
2010 mly_ccb_free(mly, mc); in mly_scsipi_complete()
2327 struct mly_ccb *mc; in mly_user_command() local
2330 if ((rv = mly_ccb_alloc(mly, &mc)) != 0) in mly_user_command()
2334 mc->mc_data = NULL; in mly_user_command()
2339 if ((mc->mc_length = abs(uc->DataTransferLength)) != 0) { in mly_user_command()
2340 if (mc->mc_length > MAXPHYS) { in mly_user_command()
2345 mc->mc_data = malloc(mc->mc_length, M_DEVBUF, M_WAITOK); in mly_user_command()
2346 if (mc->mc_data == NULL) { in mly_user_command()
2352 mc->mc_flags |= MLY_CCB_DATAIN; in mly_user_command()
2353 memset(mc->mc_data, 0, mc->mc_length); in mly_user_command()
2357 mc->mc_flags |= MLY_CCB_DATAOUT; in mly_user_command()
2358 rv = copyin(uc->DataTransferBuffer, mc->mc_data, in mly_user_command()
2359 mc->mc_length); in mly_user_command()
2364 if ((rv = mly_ccb_map(mly, mc)) != 0) in mly_user_command()
2370 memcpy(mc->mc_packet, &uc->CommandMailbox, sizeof(uc->CommandMailbox)); in mly_user_command()
2372 if ((rv = mly_ccb_wait(mly, mc, 60000)) != 0) in mly_user_command()
2377 rv = copyout(mc->mc_data, uc->DataTransferBuffer, in mly_user_command()
2378 mc->mc_length); in mly_user_command()
2384 if (uc->RequestSenseLength > 0 && mc->mc_sense > 0) { in mly_user_command()
2385 rv = copyout(mc->mc_packet, uc->RequestSenseBuffer, in mly_user_command()
2386 uimin(uc->RequestSenseLength, mc->mc_sense)); in mly_user_command()
2392 uc->DataTransferLength = mc->mc_resid; in mly_user_command()
2393 uc->RequestSenseLength = uimin(uc->RequestSenseLength, mc->mc_sense); in mly_user_command()
2394 uc->CommandStatus = mc->mc_status; in mly_user_command()
2399 mly_ccb_unmap(mly, mc); in mly_user_command()
2400 if (mc->mc_data != NULL) in mly_user_command()
2401 free(mc->mc_data, M_DEVBUF); in mly_user_command()
2402 mly_ccb_free(mly, mc); in mly_user_command()