1 #ifndef MMC_QUEUE_H 2 #define MMC_QUEUE_H 3 4 struct request; 5 struct task_struct; 6 7 struct 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 15 struct 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 25 struct 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 38 extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, 39 const char *); 40 extern void mmc_cleanup_queue(struct mmc_queue *); 41 extern void mmc_queue_suspend(struct mmc_queue *); 42 extern void mmc_queue_resume(struct mmc_queue *); 43 44 extern unsigned int mmc_queue_map_sg(struct mmc_queue *, 45 struct mmc_queue_req *); 46 extern void mmc_queue_bounce_pre(struct mmc_queue_req *); 47 extern void mmc_queue_bounce_post(struct mmc_queue_req *); 48 49 #endif 50