#include <linux/module.h>
#include <linux/blkdev.h>
#include <linux/freezer.h>
#include <linux/kthread.h>
#include <linux/scatterlist.h>
#include <linux/dma-mapping.h>
#include <linux/mmc/card.h>
#include <linux/mmc/host.h>
static inline bool mmc_cqe_dcmd_busy(struct mmc_queue *mq)
return mq->in_flight[MMC_ISSUE_DCMD];
void mmc_cqe_check_busy(struct mmc_queue *mq)
if ((mq->cqe_busy & MMC_CQE_DCMD_BUSY) && !mmc_cqe_dcmd_busy(mq))
mq->cqe_busy &= ~MMC_CQE_DCMD_BUSY;
mq->cqe_busy &= ~MMC_CQE_QUEUE_FULL;
static inline bool mmc_cqe_can_dcmd(struct mmc_host *host)
return host->caps2 & MMC_CAP2_CQE_DCMD;
static enum mmc_issue_type mmc_cqe_issue_type(struct mmc_host *host,
case REQ_OP_SECURE_ERASE:
return mmc_cqe_can_dcmd(host) ? MMC_ISSUE_DCMD : MMC_ISSUE_SYNC;
enum mmc_issue_type mmc_issue_type(struct mmc_queue *mq, struct request *req)