Home | History | Annotate | Download | only in pci

Lines Matching refs:mc

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