Lines Matching refs:cmd

339 	uint32_t cmd;  in dwc_mmc_update_clock()  local
346 cmd = DWC_MMC_CMD_START | in dwc_mmc_update_clock()
350 cmd |= DWC_MMC_CMD_USE_HOLD_REG; in dwc_mmc_update_clock()
352 MMC_WRITE(sc, DWC_MMC_CMD, cmd); in dwc_mmc_update_clock()
470 dwc_mmc_dma_prepare(struct dwc_mmc_softc *sc, struct sdmmc_command *cmd) in dwc_mmc_dma_prepare() argument
483 if (cmd->c_dmamap) { in dwc_mmc_dma_prepare()
484 map = cmd->c_dmamap; in dwc_mmc_dma_prepare()
486 if (cmd->c_datalen > sc->sc_dmabounce_buflen) in dwc_mmc_dma_prepare()
490 if (ISSET(cmd->c_flags, SCF_CMD_READ)) { in dwc_mmc_dma_prepare()
491 memset(sc->sc_dmabounce_buf, 0, cmd->c_datalen); in dwc_mmc_dma_prepare()
493 0, cmd->c_datalen, BUS_DMASYNC_PREREAD); in dwc_mmc_dma_prepare()
495 memcpy(sc->sc_dmabounce_buf, cmd->c_data, in dwc_mmc_dma_prepare()
496 cmd->c_datalen); in dwc_mmc_dma_prepare()
498 0, cmd->c_datalen, BUS_DMASYNC_PREWRITE); in dwc_mmc_dma_prepare()
506 resid = uimin(len, cmd->c_resid); in dwc_mmc_dma_prepare()
517 cmd->c_resid -= len; in dwc_mmc_dma_prepare()
524 if (cmd->c_resid == 0) { in dwc_mmc_dma_prepare()
543 cmd->c_datalen); in dwc_mmc_dma_prepare()
558 if (cmd->c_flags & SCF_CMD_READ) in dwc_mmc_dma_prepare()
570 dwc_mmc_dma_complete(struct dwc_mmc_softc *sc, struct sdmmc_command *cmd) in dwc_mmc_dma_complete() argument
578 if (cmd->c_dmamap == NULL) { in dwc_mmc_dma_complete()
579 if (ISSET(cmd->c_flags, SCF_CMD_READ)) { in dwc_mmc_dma_complete()
581 0, cmd->c_datalen, BUS_DMASYNC_POSTREAD); in dwc_mmc_dma_complete()
582 memcpy(cmd->c_data, sc->sc_dmabounce_buf, in dwc_mmc_dma_complete()
583 cmd->c_datalen); in dwc_mmc_dma_complete()
586 0, cmd->c_datalen, BUS_DMASYNC_POSTWRITE); in dwc_mmc_dma_complete()
592 dwc_mmc_exec_command(sdmmc_chipset_handle_t sch, struct sdmmc_command *cmd) in dwc_mmc_exec_command() argument
603 cmd->c_opcode, cmd->c_flags, cmd->c_data, cmd->c_datalen, in dwc_mmc_exec_command()
604 cmd->c_blklen); in dwc_mmc_exec_command()
611 cmd->c_error = EBUSY; in dwc_mmc_exec_command()
612 SET(cmd->c_flags, SCF_ITSDONE); in dwc_mmc_exec_command()
616 sc->sc_curcmd = cmd; in dwc_mmc_exec_command()
628 switch (cmd->c_opcode) { in dwc_mmc_exec_command()
630 reg = (cmd->c_arg >> SD_ARG_CMD52_REG_SHIFT) & in dwc_mmc_exec_command()
642 if (cmd->c_flags & SCF_RSP_PRESENT) in dwc_mmc_exec_command()
644 if (cmd->c_flags & SCF_RSP_136) in dwc_mmc_exec_command()
646 if (cmd->c_flags & SCF_RSP_CRC) in dwc_mmc_exec_command()
651 if (cmd->c_datalen > 0) { in dwc_mmc_exec_command()
663 if (!ISSET(cmd->c_flags, SCF_CMD_READ)) { in dwc_mmc_exec_command()
667 nblks = cmd->c_datalen / cmd->c_blklen; in dwc_mmc_exec_command()
668 if (nblks == 0 || (cmd->c_datalen % cmd->c_blklen) != 0) in dwc_mmc_exec_command()
671 if (nblks > 1 && cmd->c_opcode != SD_IO_RW_EXTENDED) { in dwc_mmc_exec_command()
679 MMC_WRITE(sc, DWC_MMC_BLKSZ, cmd->c_blklen); in dwc_mmc_exec_command()
681 nblks > 1 ? nblks * cmd->c_blklen : cmd->c_datalen); in dwc_mmc_exec_command()
691 if (ISSET(cmd->c_flags, SCF_CMD_READ)) { in dwc_mmc_exec_command()
693 __SHIFTIN(cmd->c_blklen, DWC_MMC_CARDTHRCTL_RDTHR) | in dwc_mmc_exec_command()
702 MMC_WRITE(sc, DWC_MMC_ARG, cmd->c_arg); in dwc_mmc_exec_command()
708 cmd->c_resid = cmd->c_datalen; in dwc_mmc_exec_command()
709 if (cmd->c_datalen > 0) { in dwc_mmc_exec_command()
711 cmd->c_error = dwc_mmc_dma_prepare(sc, cmd); in dwc_mmc_exec_command()
712 if (cmd->c_error != 0) { in dwc_mmc_exec_command()
713 SET(cmd->c_flags, SCF_ITSDONE); in dwc_mmc_exec_command()
716 sc->sc_wait_dma = ISSET(cmd->c_flags, SCF_CMD_READ); in dwc_mmc_exec_command()
734 MMC_WRITE(sc, DWC_MMC_CMD, cmdval | cmd->c_opcode); in dwc_mmc_exec_command()
741 while (!ISSET(cmd->c_flags, SCF_ITSDONE)) { in dwc_mmc_exec_command()
745 cmd->c_error = error; in dwc_mmc_exec_command()
746 SET(cmd->c_flags, SCF_ITSDONE); in dwc_mmc_exec_command()
754 if (cmd->c_error == 0 && cmd->c_datalen > 0) in dwc_mmc_exec_command()
755 dwc_mmc_dma_complete(sc, cmd); in dwc_mmc_exec_command()
757 if (cmd->c_datalen > 0) in dwc_mmc_exec_command()
760 if (cmd->c_flags & SCF_RSP_PRESENT) { in dwc_mmc_exec_command()
761 if (cmd->c_flags & SCF_RSP_136) { in dwc_mmc_exec_command()
762 cmd->c_resp[0] = MMC_READ(sc, DWC_MMC_RESP0); in dwc_mmc_exec_command()
763 cmd->c_resp[1] = MMC_READ(sc, DWC_MMC_RESP1); in dwc_mmc_exec_command()
764 cmd->c_resp[2] = MMC_READ(sc, DWC_MMC_RESP2); in dwc_mmc_exec_command()
765 cmd->c_resp[3] = MMC_READ(sc, DWC_MMC_RESP3); in dwc_mmc_exec_command()
766 if (cmd->c_flags & SCF_RSP_CRC) { in dwc_mmc_exec_command()
767 cmd->c_resp[0] = (cmd->c_resp[0] >> 8) | in dwc_mmc_exec_command()
768 (cmd->c_resp[1] << 24); in dwc_mmc_exec_command()
769 cmd->c_resp[1] = (cmd->c_resp[1] >> 8) | in dwc_mmc_exec_command()
770 (cmd->c_resp[2] << 24); in dwc_mmc_exec_command()
771 cmd->c_resp[2] = (cmd->c_resp[2] >> 8) | in dwc_mmc_exec_command()
772 (cmd->c_resp[3] << 24); in dwc_mmc_exec_command()
773 cmd->c_resp[3] = (cmd->c_resp[3] >> 8); in dwc_mmc_exec_command()
776 cmd->c_resp[0] = MMC_READ(sc, DWC_MMC_RESP0); in dwc_mmc_exec_command()
781 KASSERT(ISSET(cmd->c_flags, SCF_ITSDONE)); in dwc_mmc_exec_command()
787 if (cmd->c_error) { in dwc_mmc_exec_command()
789 aprint_error_dev(sc->sc_dev, "i/o error %d\n", cmd->c_error); in dwc_mmc_exec_command()
874 struct sdmmc_command *cmd; in dwc_mmc_intr() local
887 cmd = sc->sc_curcmd; in dwc_mmc_intr()
902 if (cmd != NULL && (mint & DWC_MMC_INT_ERROR) != 0) { in dwc_mmc_intr()
906 cmd->c_error = ETIMEDOUT; in dwc_mmc_intr()
909 if (cmd->c_opcode != SD_IO_SEND_OP_COND && in dwc_mmc_intr()
910 cmd->c_opcode != SD_IO_RW_DIRECT && in dwc_mmc_intr()
911 !ISSET(cmd->c_flags, SCF_TOUT_OK)) in dwc_mmc_intr()
915 cmd->c_error = EIO; in dwc_mmc_intr()
916 SET(cmd->c_flags, SCF_ITSDONE); in dwc_mmc_intr()
921 if (cmd != NULL && (idst & DWC_MMC_IDST_RECEIVE_INT) != 0) { in dwc_mmc_intr()
928 if (cmd != NULL && (mint & DWC_MMC_INT_CMD_DONE) != 0) { in dwc_mmc_intr()
937 if (cmd != NULL && (mint & dmadone_mask) != 0) { in dwc_mmc_intr()
945 if (cmd != NULL && in dwc_mmc_intr()
949 SET(cmd->c_flags, SCF_ITSDONE); in dwc_mmc_intr()
953 if (cmd != NULL && ISSET(cmd->c_flags, SCF_ITSDONE)) { in dwc_mmc_intr()