Lines Matching refs:cmd

156 static void SdhciSetTransferMode(struct SdhciHost *host, struct MmcCmd *cmd)
160 if (cmd->data == NULL) {
167 if (cmd->cmdCode == WRITE_MULTIPLE_BLOCK || cmd->cmdCode == READ_MULTIPLE_BLOCK || cmd->data->blockNum > 1) {
175 SdhciWritel(host, cmd->data->blockNum, SDHCI_ARGUMENT2);
182 if ((cmd->data->dataFlags & DATA_READ) > 0) {
193 struct MmcCmd *cmd = host->cmd;
196 ((cmd->returnError != 0) || (cmd->data != NULL && cmd->data->returnError != 0))) {
201 host->cmd = NULL;
205 static uint32_t SdhciGenerateCmdFlag(struct MmcCmd *cmd)
209 if ((cmd->respType & RESP_PRESENT) == 0) {
211 } else if ((cmd->respType & RESP_136) > 0) {
213 } else if ((cmd->respType & RESP_BUSY) > 0) {
219 if ((cmd->respType & RESP_CRC) > 0) {
222 if ((cmd->respType & RESP_CMDCODE) > 0) {
227 if (cmd->data != NULL || cmd->cmdCode == SD_CMD_SEND_TUNING_BLOCK || cmd->cmdCode == SEND_TUNING_BLOCK_HS200) {
284 static void SdhciSetAdmaDesc(struct SdhciHost *host, char *desc, dma_addr_t addr, uint16_t len, uint16_t cmd)
288 cmdlen[0] = (cmd);
365 struct MmcCmd *cmd = host->cmd;
366 struct MmcData *data = cmd->data;
370 if (data != NULL || (cmd->respType & RESP_BUSY) > 0) {
403 static void SdhciExecCmd(struct SdhciHost *host, struct MmcCmd *cmd)
409 if ((cmd->data != NULL) || ((cmd->respType & RESP_BUSY) > 0)) {
413 if ((cmd->data != NULL) && (cmd->data->sendStopCmd == true)) {
420 HDF_LOGE("exec cmd %u timeout!\n", cmd->cmdCode);
422 cmd->returnError = HDF_ERR_IO;
430 host->cmd = cmd;
432 SdhciWritel(host, cmd->argument, ARGUMENT_R);
433 SdhciSetTransferMode(host, cmd);
435 if ((cmd->respType & RESP_136) && (cmd->respType & RESP_BUSY)) {
437 cmd->returnError = HDF_FAILURE;
442 flags = SdhciGenerateCmdFlag(cmd);
443 SdhciWritew(host, SDHCI_GEN_CMD(cmd->cmdCode, flags), CMD_R);
468 struct MmcData *data = host->cmd->data;
541 static int32_t SdhciDoRequest(struct MmcCntlr *cntlr, struct MmcCmd *cmd)
550 host->cmd = cmd;
551 if (cmd->data != NULL) {
559 cmd->returnError = HDF_ERR_IO;
565 SdhciExecCmd(host, cmd);
572 if (cmd->data == NULL && host->quirks.bits.forceSWDetect > 0) {
584 cmd->returnError = HDF_ERR_TIMEOUT;
586 cmd->returnError = HDF_ERR_IO;
590 host->cmd = NULL;
591 } else if (cmd->data != NULL) {
592 SdhciDataSync(host, cmd->data);
596 SdhciClearDmaSg(host, cmd->data);
1804 static void SdhciSaveCommandResp(struct SdhciHost *host, struct MmcCmd *cmd)
1809 cmd->resp[i] = SdhciReadl(host, RESP01_R + (3 - i) * 4) << 8;
1811 cmd->resp[i] |= SdhciReadb(host, RESP01_R + (3 - i) * 4 - 1);
1818 struct MmcCmd *cmd = host->cmd;
1820 if (cmd == NULL) {
1824 if (cmd->respType & RESP_PRESENT) {
1825 if (cmd->respType & RESP_136) {
1826 SdhciSaveCommandResp(host, cmd);
1828 cmd->resp[0] = SdhciReadl(host, RESP01_R);
1832 if (cmd->data == NULL || cmd->cmdCode == STOP_TRANSMISSION) {
1839 if (host->cmd == NULL) {
1844 host->cmd->returnError = HDF_ERR_TIMEOUT;
1846 host->cmd->returnError = HDF_MMC_ERR_ILLEGAL_SEQ;
1849 if (host->cmd->data == NULL && host->cmd->returnError != HDF_SUCCESS) {
1854 if (host->cmd->respType & RESP_BUSY) {
1865 struct MmcData *data = host->cmd->data;
1881 struct MmcCmd *cmd = host->cmd;
1883 if (cmd->data == NULL || (cmd->cmdCode == STOP_TRANSMISSION)) {
1884 if ((cmd->respType & RESP_BUSY)) {
1886 cmd->returnError = HDF_ERR_TIMEOUT;
1896 if (cmd->data == NULL) {
1901 cmd->data->returnError = HDF_ERR_TIMEOUT;
1903 cmd->data->returnError = HDF_MMC_ERR_ILLEGAL_SEQ;
1905 cmd->data->returnError = HDF_MMC_ERR_ILLEGAL_SEQ;
1907 cmd->data->returnError = HDF_ERR_IO;
1910 if (cmd->data->returnError != HDF_SUCCESS) {
1913 HDF_LOGE("err = 0x%x, cmd = %u, interrupt = 0x%x.", cmd->data->returnError, command, intMask);