Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v4.14-rc6 86 lines 2.1 kB view raw
1#ifndef MMC_QUEUE_H 2#define MMC_QUEUE_H 3 4#include <linux/types.h> 5#include <linux/blkdev.h> 6#include <linux/blk-mq.h> 7#include <linux/mmc/core.h> 8#include <linux/mmc/host.h> 9 10static inline struct mmc_queue_req *req_to_mmc_queue_req(struct request *rq) 11{ 12 return blk_mq_rq_to_pdu(rq); 13} 14 15struct mmc_queue_req; 16 17static inline struct request *mmc_queue_req_to_req(struct mmc_queue_req *mqr) 18{ 19 return blk_mq_rq_from_pdu(mqr); 20} 21 22struct task_struct; 23struct mmc_blk_data; 24struct mmc_blk_ioc_data; 25 26struct mmc_blk_request { 27 struct mmc_request mrq; 28 struct mmc_command sbc; 29 struct mmc_command cmd; 30 struct mmc_command stop; 31 struct mmc_data data; 32 int retune_retry_done; 33}; 34 35/** 36 * enum mmc_drv_op - enumerates the operations in the mmc_queue_req 37 * @MMC_DRV_OP_IOCTL: ioctl operation 38 * @MMC_DRV_OP_BOOT_WP: write protect boot partitions 39 * @MMC_DRV_OP_GET_CARD_STATUS: get card status 40 * @MMC_DRV_OP_GET_EXT_CSD: get the EXT CSD from an eMMC card 41 */ 42enum mmc_drv_op { 43 MMC_DRV_OP_IOCTL, 44 MMC_DRV_OP_BOOT_WP, 45 MMC_DRV_OP_GET_CARD_STATUS, 46 MMC_DRV_OP_GET_EXT_CSD, 47}; 48 49struct mmc_queue_req { 50 struct mmc_blk_request brq; 51 struct scatterlist *sg; 52 struct mmc_async_req areq; 53 enum mmc_drv_op drv_op; 54 int drv_op_result; 55 void *drv_op_data; 56 unsigned int ioc_count; 57}; 58 59struct mmc_queue { 60 struct mmc_card *card; 61 struct task_struct *thread; 62 struct semaphore thread_sem; 63 bool suspended; 64 bool asleep; 65 struct mmc_blk_data *blkdata; 66 struct request_queue *queue; 67 /* 68 * FIXME: this counter is not a very reliable way of keeping 69 * track of how many requests that are ongoing. Switch to just 70 * letting the block core keep track of requests and per-request 71 * associated mmc_queue_req data. 72 */ 73 int qcnt; 74}; 75 76extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, 77 const char *); 78extern void mmc_cleanup_queue(struct mmc_queue *); 79extern void mmc_queue_suspend(struct mmc_queue *); 80extern void mmc_queue_resume(struct mmc_queue *); 81extern unsigned int mmc_queue_map_sg(struct mmc_queue *, 82 struct mmc_queue_req *); 83 84extern int mmc_access_rpmb(struct mmc_queue *); 85 86#endif