aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/card/queue.h
diff options
context:
space:
mode:
authorPer Forlin <per.forlin@linaro.org>2011-07-09 17:12:36 -0400
committerChris Ball <cjb@laptop.org>2011-07-20 17:21:13 -0400
commit97868a2bdfc2fc79a987b64f1611034b56a3f8c4 (patch)
treee2d76b7706ae6a4d999265e225654b814fa35ad3 /drivers/mmc/card/queue.h
parentbf043330362b1ccb0c0611b8fc394e06ba8498b0 (diff)
mmc: block: add member in mmc queue struct to hold request data
The way the request data is organized in the mmc queue struct, it only allows processing of one request at a time. This patch adds a new struct to hold mmc queue request data such as sg list, request, blk request and bounce buffers, and updates any functions depending on the mmc queue struct. This prepares for using multiple active requests in one mmc queue. Signed-off-by: Per Forlin <per.forlin@linaro.org> Acked-by: Kyungmin Park <kyungmin.park@samsung.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Venkatraman S <svenkatr@ti.com> Tested-by: Sourav Poddar <sourav.poddar@ti.com> Tested-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Chris Ball <cjb@laptop.org>
Diffstat (limited to 'drivers/mmc/card/queue.h')
-rw-r--r--drivers/mmc/card/queue.h31
1 files changed, 23 insertions, 8 deletions
diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h
index 6223ef8dc9cd..c1a69ac6fff0 100644
--- a/drivers/mmc/card/queue.h
+++ b/drivers/mmc/card/queue.h
@@ -4,19 +4,33 @@
4struct request; 4struct request;
5struct task_struct; 5struct task_struct;
6 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};
23
7struct mmc_queue { 24struct mmc_queue {
8 struct mmc_card *card; 25 struct mmc_card *card;
9 struct task_struct *thread; 26 struct task_struct *thread;
10 struct semaphore thread_sem; 27 struct semaphore thread_sem;
11 unsigned int flags; 28 unsigned int flags;
12 struct request *req;
13 int (*issue_fn)(struct mmc_queue *, struct request *); 29 int (*issue_fn)(struct mmc_queue *, struct request *);
14 void *data; 30 void *data;
15 struct request_queue *queue; 31 struct request_queue *queue;
16 struct scatterlist *sg; 32 struct mmc_queue_req mqrq[1];
17 char *bounce_buf; 33 struct mmc_queue_req *mqrq_cur;
18 struct scatterlist *bounce_sg;
19 unsigned int bounce_sg_len;
20}; 34};
21 35
22extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, 36extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *,
@@ -25,8 +39,9 @@ extern void mmc_cleanup_queue(struct mmc_queue *);
25extern void mmc_queue_suspend(struct mmc_queue *); 39extern void mmc_queue_suspend(struct mmc_queue *);
26extern void mmc_queue_resume(struct mmc_queue *); 40extern void mmc_queue_resume(struct mmc_queue *);
27 41
28extern unsigned int mmc_queue_map_sg(struct mmc_queue *); 42extern unsigned int mmc_queue_map_sg(struct mmc_queue *,
29extern void mmc_queue_bounce_pre(struct mmc_queue *); 43 struct mmc_queue_req *);
30extern void mmc_queue_bounce_post(struct mmc_queue *); 44extern void mmc_queue_bounce_pre(struct mmc_queue_req *);
45extern void mmc_queue_bounce_post(struct mmc_queue_req *);
31 46
32#endif 47#endif