mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
[SG] Update drivers to use sg helpers
Signed-off-by: Jens Axboe <[email protected]>
This commit is contained in:
parent
78c2f0b8c2
commit
45711f1af6
82 changed files with 278 additions and 275 deletions
|
|
@ -13,6 +13,7 @@
|
|||
#include <linux/blkdev.h>
|
||||
#include <linux/freezer.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <linux/mmc/card.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
|
@ -153,19 +154,21 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, spinlock_t *lock
|
|||
blk_queue_max_hw_segments(mq->queue, bouncesz / 512);
|
||||
blk_queue_max_segment_size(mq->queue, bouncesz);
|
||||
|
||||
mq->sg = kzalloc(sizeof(struct scatterlist),
|
||||
mq->sg = kmalloc(sizeof(struct scatterlist),
|
||||
GFP_KERNEL);
|
||||
if (!mq->sg) {
|
||||
ret = -ENOMEM;
|
||||
goto cleanup_queue;
|
||||
}
|
||||
sg_init_table(mq->sg, 1);
|
||||
|
||||
mq->bounce_sg = kzalloc(sizeof(struct scatterlist) *
|
||||
mq->bounce_sg = kmalloc(sizeof(struct scatterlist) *
|
||||
bouncesz / 512, GFP_KERNEL);
|
||||
if (!mq->bounce_sg) {
|
||||
ret = -ENOMEM;
|
||||
goto cleanup_queue;
|
||||
}
|
||||
sg_init_table(mq->bounce_sg, bouncesz / 512);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -302,12 +305,12 @@ static void copy_sg(struct scatterlist *dst, unsigned int dst_len,
|
|||
BUG_ON(dst_len == 0);
|
||||
|
||||
if (dst_size == 0) {
|
||||
dst_buf = page_address(dst->page) + dst->offset;
|
||||
dst_buf = sg_virt(dst);
|
||||
dst_size = dst->length;
|
||||
}
|
||||
|
||||
if (src_size == 0) {
|
||||
src_buf = page_address(src->page) + src->offset;
|
||||
src_buf = sg_virt(dst);
|
||||
src_size = src->length;
|
||||
}
|
||||
|
||||
|
|
@ -353,9 +356,7 @@ unsigned int mmc_queue_map_sg(struct mmc_queue *mq)
|
|||
return 1;
|
||||
}
|
||||
|
||||
mq->sg[0].page = virt_to_page(mq->bounce_buf);
|
||||
mq->sg[0].offset = offset_in_page(mq->bounce_buf);
|
||||
mq->sg[0].length = 0;
|
||||
sg_init_one(mq->sg, mq->bounce_buf, 0);
|
||||
|
||||
while (sg_len) {
|
||||
mq->sg[0].length += mq->bounce_sg[sg_len - 1].length;
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ static inline void at91_mci_sg_to_dma(struct at91mci_host *host, struct mmc_data
|
|||
|
||||
sg = &data->sg[i];
|
||||
|
||||
sgbuffer = kmap_atomic(sg->page, KM_BIO_SRC_IRQ) + sg->offset;
|
||||
sgbuffer = kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
|
||||
amount = min(size, sg->length);
|
||||
size -= amount;
|
||||
|
||||
|
|
@ -226,7 +226,7 @@ static void at91_mci_pre_dma_read(struct at91mci_host *host)
|
|||
sg = &data->sg[host->transfer_index++];
|
||||
pr_debug("sg = %p\n", sg);
|
||||
|
||||
sg->dma_address = dma_map_page(NULL, sg->page, sg->offset, sg->length, DMA_FROM_DEVICE);
|
||||
sg->dma_address = dma_map_page(NULL, sg_page(sg), sg->offset, sg->length, DMA_FROM_DEVICE);
|
||||
|
||||
pr_debug("dma address = %08X, length = %d\n", sg->dma_address, sg->length);
|
||||
|
||||
|
|
@ -283,7 +283,7 @@ static void at91_mci_post_dma_read(struct at91mci_host *host)
|
|||
int index;
|
||||
|
||||
/* Swap the contents of the buffer */
|
||||
buffer = kmap_atomic(sg->page, KM_BIO_SRC_IRQ) + sg->offset;
|
||||
buffer = kmap_atomic(sg_page(sg), KM_BIO_SRC_IRQ) + sg->offset;
|
||||
pr_debug("buffer = %p, length = %d\n", buffer, sg->length);
|
||||
|
||||
for (index = 0; index < (sg->length / 4); index++)
|
||||
|
|
@ -292,7 +292,7 @@ static void at91_mci_post_dma_read(struct at91mci_host *host)
|
|||
kunmap_atomic(buffer, KM_BIO_SRC_IRQ);
|
||||
}
|
||||
|
||||
flush_dcache_page(sg->page);
|
||||
flush_dcache_page(sg_page(sg));
|
||||
}
|
||||
|
||||
/* Is there another transfer to trigger? */
|
||||
|
|
|
|||
|
|
@ -340,7 +340,7 @@ static void au1xmmc_send_pio(struct au1xmmc_host *host)
|
|||
|
||||
/* This is the pointer to the data buffer */
|
||||
sg = &data->sg[host->pio.index];
|
||||
sg_ptr = page_address(sg->page) + sg->offset + host->pio.offset;
|
||||
sg_ptr = sg_virt(sg) + host->pio.offset;
|
||||
|
||||
/* This is the space left inside the buffer */
|
||||
sg_len = data->sg[host->pio.index].length - host->pio.offset;
|
||||
|
|
@ -400,7 +400,7 @@ static void au1xmmc_receive_pio(struct au1xmmc_host *host)
|
|||
|
||||
if (host->pio.index < host->dma.len) {
|
||||
sg = &data->sg[host->pio.index];
|
||||
sg_ptr = page_address(sg->page) + sg->offset + host->pio.offset;
|
||||
sg_ptr = sg_virt(sg) + host->pio.offset;
|
||||
|
||||
/* This is the space left inside the buffer */
|
||||
sg_len = sg_dma_len(&data->sg[host->pio.index]) - host->pio.offset;
|
||||
|
|
@ -613,14 +613,11 @@ au1xmmc_prepare_data(struct au1xmmc_host *host, struct mmc_data *data)
|
|||
|
||||
if (host->flags & HOST_F_XMIT){
|
||||
ret = au1xxx_dbdma_put_source_flags(channel,
|
||||
(void *) (page_address(sg->page) +
|
||||
sg->offset),
|
||||
len, flags);
|
||||
(void *) sg_virt(sg), len, flags);
|
||||
}
|
||||
else {
|
||||
ret = au1xxx_dbdma_put_dest_flags(channel,
|
||||
(void *) (page_address(sg->page) +
|
||||
sg->offset),
|
||||
(void *) sg_virt(sg),
|
||||
len, flags);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -262,7 +262,7 @@ static void imxmci_setup_data(struct imxmci_host *host, struct mmc_data *data)
|
|||
}
|
||||
|
||||
/* Convert back to virtual address */
|
||||
host->data_ptr = (u16*)(page_address(data->sg->page) + data->sg->offset);
|
||||
host->data_ptr = (u16*)sg_virt(sg);
|
||||
host->data_cnt = 0;
|
||||
|
||||
clear_bit(IMXMCI_PEND_DMA_DATA_b, &host->pending_events);
|
||||
|
|
|
|||
|
|
@ -813,7 +813,7 @@ mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
|
|||
&& dir == DMA_FROM_DEVICE)
|
||||
dir = DMA_BIDIRECTIONAL;
|
||||
|
||||
dma_addr = dma_map_page(dma_dev, sg->page, 0,
|
||||
dma_addr = dma_map_page(dma_dev, sg_page(sg), 0,
|
||||
PAGE_SIZE, dir);
|
||||
if (direction == DMA_TO_DEVICE)
|
||||
t->tx_dma = dma_addr + sg->offset;
|
||||
|
|
@ -822,7 +822,7 @@ mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
|
|||
}
|
||||
|
||||
/* allow pio too; we don't allow highmem */
|
||||
kmap_addr = kmap(sg->page);
|
||||
kmap_addr = kmap(sg_page(sg));
|
||||
if (direction == DMA_TO_DEVICE)
|
||||
t->tx_buf = kmap_addr + sg->offset;
|
||||
else
|
||||
|
|
@ -855,8 +855,8 @@ mmc_spi_data_do(struct mmc_spi_host *host, struct mmc_command *cmd,
|
|||
|
||||
/* discard mappings */
|
||||
if (direction == DMA_FROM_DEVICE)
|
||||
flush_kernel_dcache_page(sg->page);
|
||||
kunmap(sg->page);
|
||||
flush_kernel_dcache_page(sg_page(sg));
|
||||
kunmap(sg_page(sg));
|
||||
if (dma_dev)
|
||||
dma_unmap_page(dma_dev, dma_addr, PAGE_SIZE, dir);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,10 +24,10 @@
|
|||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/card.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/scatterlist.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/scatterlist.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/arch/board.h>
|
||||
|
|
@ -383,7 +383,7 @@ mmc_omap_sg_to_buf(struct mmc_omap_host *host)
|
|||
|
||||
sg = host->data->sg + host->sg_idx;
|
||||
host->buffer_bytes_left = sg->length;
|
||||
host->buffer = page_address(sg->page) + sg->offset;
|
||||
host->buffer = sg_virt(sg);
|
||||
if (host->buffer_bytes_left > host->total_bytes_left)
|
||||
host->buffer_bytes_left = host->total_bytes_left;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ static void sdhci_deactivate_led(struct sdhci_host *host)
|
|||
|
||||
static inline char* sdhci_sg_to_buffer(struct sdhci_host* host)
|
||||
{
|
||||
return page_address(host->cur_sg->page) + host->cur_sg->offset;
|
||||
return sg_virt(host->cur_sg);
|
||||
}
|
||||
|
||||
static inline int sdhci_next_sg(struct sdhci_host* host)
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ static void tifm_sd_transfer_data(struct tifm_sd *host)
|
|||
}
|
||||
off = sg[host->sg_pos].offset + host->block_pos;
|
||||
|
||||
pg = nth_page(sg[host->sg_pos].page, off >> PAGE_SHIFT);
|
||||
pg = nth_page(sg_page(&sg[host->sg_pos]), off >> PAGE_SHIFT);
|
||||
p_off = offset_in_page(off);
|
||||
p_cnt = PAGE_SIZE - p_off;
|
||||
p_cnt = min(p_cnt, cnt);
|
||||
|
|
@ -241,18 +241,18 @@ static void tifm_sd_bounce_block(struct tifm_sd *host, struct mmc_data *r_data)
|
|||
}
|
||||
off = sg[host->sg_pos].offset + host->block_pos;
|
||||
|
||||
pg = nth_page(sg[host->sg_pos].page, off >> PAGE_SHIFT);
|
||||
pg = nth_page(sg_page(&sg[host->sg_pos]), off >> PAGE_SHIFT);
|
||||
p_off = offset_in_page(off);
|
||||
p_cnt = PAGE_SIZE - p_off;
|
||||
p_cnt = min(p_cnt, cnt);
|
||||
p_cnt = min(p_cnt, t_size);
|
||||
|
||||
if (r_data->flags & MMC_DATA_WRITE)
|
||||
tifm_sd_copy_page(host->bounce_buf.page,
|
||||
tifm_sd_copy_page(sg_page(&host->bounce_buf),
|
||||
r_data->blksz - t_size,
|
||||
pg, p_off, p_cnt);
|
||||
else if (r_data->flags & MMC_DATA_READ)
|
||||
tifm_sd_copy_page(pg, p_off, host->bounce_buf.page,
|
||||
tifm_sd_copy_page(pg, p_off, sg_page(&host->bounce_buf),
|
||||
r_data->blksz - t_size, p_cnt);
|
||||
|
||||
t_size -= p_cnt;
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ static inline int wbsd_next_sg(struct wbsd_host *host)
|
|||
|
||||
static inline char *wbsd_sg_to_buffer(struct wbsd_host *host)
|
||||
{
|
||||
return page_address(host->cur_sg->page) + host->cur_sg->offset;
|
||||
return sg_virt(host->cur_sg);
|
||||
}
|
||||
|
||||
static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data)
|
||||
|
|
@ -283,7 +283,7 @@ static inline void wbsd_sg_to_dma(struct wbsd_host *host, struct mmc_data *data)
|
|||
len = data->sg_len;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
sgbuf = page_address(sg[i].page) + sg[i].offset;
|
||||
sgbuf = sg_virt(&sg[i]);
|
||||
memcpy(dmabuf, sgbuf, sg[i].length);
|
||||
dmabuf += sg[i].length;
|
||||
}
|
||||
|
|
@ -300,7 +300,7 @@ static inline void wbsd_dma_to_sg(struct wbsd_host *host, struct mmc_data *data)
|
|||
len = data->sg_len;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
sgbuf = page_address(sg[i].page) + sg[i].offset;
|
||||
sgbuf = sg_virt(&sg[i]);
|
||||
memcpy(sgbuf, dmabuf, sg[i].length);
|
||||
dmabuf += sg[i].length;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue