diff options
author | Per Forlin <per.forlin@linaro.org> | 2011-07-09 17:12:36 -0400 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2011-07-20 17:21:13 -0400 |
commit | 97868a2bdfc2fc79a987b64f1611034b56a3f8c4 (patch) | |
tree | e2d76b7706ae6a4d999265e225654b814fa35ad3 /drivers/mmc/card/queue.h | |
parent | bf043330362b1ccb0c0611b8fc394e06ba8498b0 (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.h | 31 |
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 @@ | |||
4 | struct request; | 4 | struct request; |
5 | struct task_struct; | 5 | struct task_struct; |
6 | 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 | }; | ||
23 | |||
7 | struct mmc_queue { | 24 | struct 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 | ||
22 | extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, | 36 | extern int mmc_init_queue(struct mmc_queue *, struct mmc_card *, spinlock_t *, |
@@ -25,8 +39,9 @@ extern void mmc_cleanup_queue(struct mmc_queue *); | |||
25 | extern void mmc_queue_suspend(struct mmc_queue *); | 39 | extern void mmc_queue_suspend(struct mmc_queue *); |
26 | extern void mmc_queue_resume(struct mmc_queue *); | 40 | extern void mmc_queue_resume(struct mmc_queue *); |
27 | 41 | ||
28 | extern unsigned int mmc_queue_map_sg(struct mmc_queue *); | 42 | extern unsigned int mmc_queue_map_sg(struct mmc_queue *, |
29 | extern void mmc_queue_bounce_pre(struct mmc_queue *); | 43 | struct mmc_queue_req *); |
30 | extern void mmc_queue_bounce_post(struct mmc_queue *); | 44 | extern void mmc_queue_bounce_pre(struct mmc_queue_req *); |
45 | extern void mmc_queue_bounce_post(struct mmc_queue_req *); | ||
31 | 46 | ||
32 | #endif | 47 | #endif |