4 #define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH)
9 struct mmc_blk_request
{
10 struct mmc_request mrq
;
11 struct mmc_command sbc
;
12 struct mmc_command cmd
;
13 struct mmc_command stop
;
17 enum mmc_packed_type
{
22 #define mmc_packed_cmd(type) ((type) != MMC_PACKED_NONE)
23 #define mmc_packed_wr(type) ((type) == MMC_PACKED_WRITE)
26 struct list_head list
;
34 struct mmc_queue_req
{
36 struct mmc_blk_request brq
;
37 struct scatterlist
*sg
;
39 struct scatterlist
*bounce_sg
;
40 unsigned int bounce_sg_len
;
41 struct mmc_async_req mmc_active
;
42 enum mmc_packed_type cmd_type
;
43 struct mmc_packed
*packed
;
47 struct mmc_card
*card
;
48 struct task_struct
*thread
;
49 struct semaphore thread_sem
;
51 #define MMC_QUEUE_SUSPENDED (1 << 0)
52 #define MMC_QUEUE_NEW_REQUEST (1 << 1)
54 int (*issue_fn
)(struct mmc_queue
*, struct request
*);
56 struct request_queue
*queue
;
57 struct mmc_queue_req mqrq
[2];
58 struct mmc_queue_req
*mqrq_cur
;
59 struct mmc_queue_req
*mqrq_prev
;
62 extern int mmc_init_queue(struct mmc_queue
*, struct mmc_card
*, spinlock_t
*,
64 extern void mmc_cleanup_queue(struct mmc_queue
*);
65 extern void mmc_queue_suspend(struct mmc_queue
*);
66 extern void mmc_queue_resume(struct mmc_queue
*);
68 extern unsigned int mmc_queue_map_sg(struct mmc_queue
*,
69 struct mmc_queue_req
*);
70 extern void mmc_queue_bounce_pre(struct mmc_queue_req
*);
71 extern void mmc_queue_bounce_post(struct mmc_queue_req
*);
73 extern int mmc_packed_init(struct mmc_queue
*, struct mmc_card
*);
74 extern void mmc_packed_clean(struct mmc_queue
*);