88 lines · 2.1 KB · C
RawDownload
#ifndef MMC_QUEUE_H#define MMC_QUEUE_H #include <linux/types.h>#include <linux/blkdev.h>#include <linux/blk-mq.h>#include <linux/mmc/core.h>#include <linux/mmc/host.h> static inline struct mmc_queue_req *req_to_mmc_queue_req(struct request *rq){	return blk_mq_rq_to_pdu(rq);} struct mmc_queue_req; static inline struct request *mmc_queue_req_to_req(struct mmc_queue_req *mqr){	return blk_mq_rq_from_pdu(mqr);} struct task_struct;struct mmc_blk_data;struct mmc_blk_ioc_data; struct mmc_blk_request {	struct mmc_request	mrq;	struct mmc_command	sbc;	struct mmc_command	cmd;	struct mmc_command	stop;	struct mmc_data		data;	int			retune_retry_done;}; /** * enum mmc_drv_op - enumerates the operations in the mmc_queue_req * @MMC_DRV_OP_IOCTL: ioctl operation * @MMC_DRV_OP_BOOT_WP: write protect boot partitions */enum mmc_drv_op {	MMC_DRV_OP_IOCTL,	MMC_DRV_OP_BOOT_WP,}; struct mmc_queue_req {	struct mmc_blk_request	brq;	struct scatterlist	*sg;	char			*bounce_buf;	struct scatterlist	*bounce_sg;	unsigned int		bounce_sg_len;	struct mmc_async_req	areq;	enum mmc_drv_op		drv_op;	int			drv_op_result;	struct mmc_blk_ioc_data	**idata;	unsigned int		ioc_count;}; struct mmc_queue {	struct mmc_card		*card;	struct task_struct	*thread;	struct semaphore	thread_sem;	bool			suspended;	bool			asleep;	struct mmc_blk_data	*blkdata;	struct request_queue	*queue;	/*	 * FIXME: this counter is not a very reliable way of keeping	 * track of how many requests that are ongoing. Switch to just	 * letting the block core keep track of requests and per-request	 * associated mmc_queue_req data.	 */	int			qcnt;}; extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *,			  const char *);extern void mmc_cleanup_queue(struct mmc_queue *);extern void mmc_queue_suspend(struct mmc_queue *);extern void mmc_queue_resume(struct mmc_queue *); extern unsigned int mmc_queue_map_sg(struct mmc_queue *,				     struct mmc_queue_req *);extern void mmc_queue_bounce_pre(struct mmc_queue_req *);extern void mmc_queue_bounce_post(struct mmc_queue_req *); extern int mmc_access_rpmb(struct mmc_queue *); #endif