1#ifndef MMC_QUEUE_H 2#define MMC_QUEUE_H 3 4struct request; 5struct task_struct; 6 7struct mmc_blk_request { 8 struct mmc_request mrq; 9 struct mmc_command sbc; 10 struct mmc_command cmd; 11 struct mmc_command stop; 12 struct mmc_data data; 13}; 14 15struct mmc_queue_req { 16 struct request *req; 17 struct mmc_blk_request brq; 18 struct scatterlist *sg; 19 char *bounce_buf; 20 struct scatterlist *bounce_sg; 21 unsigned int bounce_sg_len; 22 struct mmc_async_req mmc_active; 23}; 24 25struct mmc_queue { 26 struct mmc_card *card; 27 struct task_struct *thread; 28 struct semaphore thread_sem; 29 unsigned int flags; 30 int (*issue_fn)(struct mmc_queue *, struct request *); 31 void *data; 32 struct request_queue *queue; 33 struct mmc_queue_req mqrq[2]; 34 struct mmc_queue_req *mqrq_cur; 35 struct mmc_queue_req *mqrq_prev; 36}; 37 38extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, 39 const char *); 40extern void mmc_cleanup_queue(struct mmc_queue *); 41extern void mmc_queue_suspend(struct mmc_queue *); 42extern void mmc_queue_resume(struct mmc_queue *); 43 44extern unsigned int mmc_queue_map_sg(struct mmc_queue *, 45 struct mmc_queue_req *); 46extern void mmc_queue_bounce_pre(struct mmc_queue_req *); 47extern void mmc_queue_bounce_post(struct mmc_queue_req *); 48 49#endif 50