Reduce amount of casting in drivers/tty/goldfish.c.
Change-Id: I8be0ff52a4c3a5bfcc72971f79df8d1c0b5a0eec Signed-off-by: Roman Kiryanov <rkir@google.com>
This commit is contained in:
parent
d6bbe8be6b
commit
c758d68c86
1 changed files with 16 additions and 16 deletions
|
@ -87,32 +87,35 @@ static void do_rw_io(struct goldfish_tty *qtty,
|
|||
}
|
||||
|
||||
static void goldfish_tty_rw(struct goldfish_tty *qtty,
|
||||
unsigned long addr,
|
||||
const void *address_ptr,
|
||||
unsigned int count,
|
||||
int is_write)
|
||||
{
|
||||
dma_addr_t dma_handle;
|
||||
enum dma_data_direction dma_dir;
|
||||
uintptr_t address;
|
||||
|
||||
address = (uintptr_t)address_ptr;
|
||||
dma_dir = (is_write ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
|
||||
|
||||
if (qtty->version > 0) {
|
||||
/*
|
||||
* Goldfish TTY for Ranchu platform uses
|
||||
* physical addresses and DMA for read/write operations
|
||||
*/
|
||||
unsigned long addr_end = addr + count;
|
||||
uintptr_t address_end = address + count;
|
||||
|
||||
while (addr < addr_end) {
|
||||
unsigned long pg_end = (addr & PAGE_MASK) + PAGE_SIZE;
|
||||
unsigned long next =
|
||||
pg_end < addr_end ? pg_end : addr_end;
|
||||
unsigned long avail = next - addr;
|
||||
while (address < address_end) {
|
||||
uintptr_t page_end = (address & PAGE_MASK) + PAGE_SIZE;
|
||||
uintptr_t next = page_end < address_end ?
|
||||
page_end : address_end;
|
||||
uintptr_t avail = next - address;
|
||||
|
||||
/*
|
||||
* Map the buffer's virtual address to the DMA address
|
||||
* so the buffer can be accessed by the device.
|
||||
*/
|
||||
dma_handle = dma_map_single(qtty->dev, (void *)addr,
|
||||
dma_handle = dma_map_single(qtty->dev, (void *)address,
|
||||
avail, dma_dir);
|
||||
|
||||
if (dma_mapping_error(qtty->dev, dma_handle)) {
|
||||
|
@ -127,31 +130,30 @@ static void goldfish_tty_rw(struct goldfish_tty *qtty,
|
|||
*/
|
||||
dma_unmap_single(qtty->dev, dma_handle, avail, dma_dir);
|
||||
|
||||
addr += avail;
|
||||
address += avail;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Old style Goldfish TTY used on the Goldfish platform
|
||||
* uses virtual addresses.
|
||||
*/
|
||||
do_rw_io(qtty, addr, count, is_write);
|
||||
do_rw_io(qtty, address, count, is_write);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void goldfish_tty_do_write(int line, const char *buf,
|
||||
unsigned int count)
|
||||
{
|
||||
struct goldfish_tty *qtty = &goldfish_ttys[line];
|
||||
unsigned long address = (unsigned long)(void *)buf;
|
||||
|
||||
goldfish_tty_rw(qtty, address, count, 1);
|
||||
goldfish_tty_rw(qtty, buf, count, 1);
|
||||
}
|
||||
|
||||
static irqreturn_t goldfish_tty_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
struct goldfish_tty *qtty = dev_id;
|
||||
void __iomem *base = qtty->base;
|
||||
unsigned long address;
|
||||
unsigned char *buf;
|
||||
u32 count;
|
||||
|
||||
|
@ -160,9 +162,7 @@ static irqreturn_t goldfish_tty_interrupt(int irq, void *dev_id)
|
|||
return IRQ_NONE;
|
||||
|
||||
count = tty_prepare_flip_string(&qtty->port, &buf, count);
|
||||
|
||||
address = (unsigned long)(void *)buf;
|
||||
goldfish_tty_rw(qtty, address, count, 0);
|
||||
goldfish_tty_rw(qtty, buf, count, 0);
|
||||
|
||||
tty_schedule_flip(&qtty->port);
|
||||
return IRQ_HANDLED;
|
||||
|
|
Loading…
Add table
Reference in a new issue