aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mmc/mmc.c
diff options
context:
space:
mode:
authorPierre Ossman <drzeus@drzeus.cx>2006-11-21 11:55:45 -0500
committerPierre Ossman <drzeus@drzeus.cx>2007-02-04 14:54:10 -0500
commit55db890a838c7b37256241b1fc53d6344aa79cc0 (patch)
tree02d5868f69a15eea69aaf517b67bc9cbdffe2ff8 /drivers/mmc/mmc.c
parentfe4a3c7a20f14d86022a8132adbf6ddb98e7197c (diff)
mmc: Allow host drivers to specify max block count
Many controllers have an upper limit on the number of blocks that can be transferred in one request. Allow the host drivers to specify this and make sure we avoid hitting this limit. Also change the max_sectors field to avoid confusion. This makes it map less directly to the block layer limits, but as they didn't apply directly on MMC cards anyway, this isn't a great loss. Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>
Diffstat (limited to 'drivers/mmc/mmc.c')
-rw-r--r--drivers/mmc/mmc.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 9bda3fddad17..fb04bdd26c36 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -109,6 +109,9 @@ mmc_start_request(struct mmc_host *host, struct mmc_request *mrq)
109 mrq->cmd->mrq = mrq; 109 mrq->cmd->mrq = mrq;
110 if (mrq->data) { 110 if (mrq->data) {
111 BUG_ON(mrq->data->blksz > host->max_blk_size); 111 BUG_ON(mrq->data->blksz > host->max_blk_size);
112 BUG_ON(mrq->data->blocks > host->max_blk_count);
113 BUG_ON(mrq->data->blocks * mrq->data->blksz >
114 host->max_req_size);
112 115
113 mrq->cmd->data = mrq->data; 116 mrq->cmd->data = mrq->data;
114 mrq->data->error = 0; 117 mrq->data->error = 0;
@@ -1605,10 +1608,11 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
1605 */ 1608 */
1606 host->max_hw_segs = 1; 1609 host->max_hw_segs = 1;
1607 host->max_phys_segs = 1; 1610 host->max_phys_segs = 1;
1608 host->max_sectors = 1 << (PAGE_CACHE_SHIFT - 9);
1609 host->max_seg_size = PAGE_CACHE_SIZE; 1611 host->max_seg_size = PAGE_CACHE_SIZE;
1610 1612
1613 host->max_req_size = PAGE_CACHE_SIZE;
1611 host->max_blk_size = 512; 1614 host->max_blk_size = 512;
1615 host->max_blk_count = PAGE_CACHE_SIZE / 512;
1612 } 1616 }
1613 1617
1614 return host; 1618 return host;