Commit 4217efa3 authored by Christoph Hellwig's avatar Christoph Hellwig

parport_ip32: pass struct device to DMA API functions

The DMA API generally relies on a struct device to work properly, and
only barely works without one for legacy reasons.  Pass the easily
available struct device from the platform_device to remedy this.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent c13edf81
...@@ -568,6 +568,7 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id) ...@@ -568,6 +568,7 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id)
/** /**
* parport_ip32_dma_start - begins a DMA transfer * parport_ip32_dma_start - begins a DMA transfer
* @p: partport to work on
* @dir: DMA direction: DMA_TO_DEVICE or DMA_FROM_DEVICE * @dir: DMA direction: DMA_TO_DEVICE or DMA_FROM_DEVICE
* @addr: pointer to data buffer * @addr: pointer to data buffer
* @count: buffer size * @count: buffer size
...@@ -575,8 +576,8 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id) ...@@ -575,8 +576,8 @@ static irqreturn_t parport_ip32_merr_interrupt(int irq, void *dev_id)
* Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be
* correctly balanced. * correctly balanced.
*/ */
static int parport_ip32_dma_start(enum dma_data_direction dir, static int parport_ip32_dma_start(struct parport *p,
void *addr, size_t count) enum dma_data_direction dir, void *addr, size_t count)
{ {
unsigned int limit; unsigned int limit;
u64 ctrl; u64 ctrl;
...@@ -601,7 +602,7 @@ static int parport_ip32_dma_start(enum dma_data_direction dir, ...@@ -601,7 +602,7 @@ static int parport_ip32_dma_start(enum dma_data_direction dir,
/* Prepare DMA pointers */ /* Prepare DMA pointers */
parport_ip32_dma.dir = dir; parport_ip32_dma.dir = dir;
parport_ip32_dma.buf = dma_map_single(NULL, addr, count, dir); parport_ip32_dma.buf = dma_map_single(&p->bus_dev, addr, count, dir);
parport_ip32_dma.len = count; parport_ip32_dma.len = count;
parport_ip32_dma.next = parport_ip32_dma.buf; parport_ip32_dma.next = parport_ip32_dma.buf;
parport_ip32_dma.left = parport_ip32_dma.len; parport_ip32_dma.left = parport_ip32_dma.len;
...@@ -625,11 +626,12 @@ static int parport_ip32_dma_start(enum dma_data_direction dir, ...@@ -625,11 +626,12 @@ static int parport_ip32_dma_start(enum dma_data_direction dir,
/** /**
* parport_ip32_dma_stop - ends a running DMA transfer * parport_ip32_dma_stop - ends a running DMA transfer
* @p: partport to work on
* *
* Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be * Calls to parport_ip32_dma_start() and parport_ip32_dma_stop() must be
* correctly balanced. * correctly balanced.
*/ */
static void parport_ip32_dma_stop(void) static void parport_ip32_dma_stop(struct parport *p)
{ {
u64 ctx_a; u64 ctx_a;
u64 ctx_b; u64 ctx_b;
...@@ -685,8 +687,8 @@ static void parport_ip32_dma_stop(void) ...@@ -685,8 +687,8 @@ static void parport_ip32_dma_stop(void)
enable_irq(MACEISA_PAR_CTXB_IRQ); enable_irq(MACEISA_PAR_CTXB_IRQ);
parport_ip32_dma.irq_on = 1; parport_ip32_dma.irq_on = 1;
dma_unmap_single(NULL, parport_ip32_dma.buf, parport_ip32_dma.len, dma_unmap_single(&p->bus_dev, parport_ip32_dma.buf,
parport_ip32_dma.dir); parport_ip32_dma.len, parport_ip32_dma.dir);
} }
/** /**
...@@ -1445,7 +1447,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p, ...@@ -1445,7 +1447,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p,
priv->irq_mode = PARPORT_IP32_IRQ_HERE; priv->irq_mode = PARPORT_IP32_IRQ_HERE;
parport_ip32_dma_start(DMA_TO_DEVICE, (void *)buf, len); parport_ip32_dma_start(p, DMA_TO_DEVICE, (void *)buf, len);
reinit_completion(&priv->irq_complete); reinit_completion(&priv->irq_complete);
parport_ip32_frob_econtrol(p, ECR_DMAEN | ECR_SERVINTR, ECR_DMAEN); parport_ip32_frob_econtrol(p, ECR_DMAEN | ECR_SERVINTR, ECR_DMAEN);
...@@ -1461,7 +1463,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p, ...@@ -1461,7 +1463,7 @@ static size_t parport_ip32_fifo_write_block_dma(struct parport *p,
if (ecr & ECR_SERVINTR) if (ecr & ECR_SERVINTR)
break; /* DMA transfer just finished */ break; /* DMA transfer just finished */
} }
parport_ip32_dma_stop(); parport_ip32_dma_stop(p);
written = len - parport_ip32_dma_get_residue(); written = len - parport_ip32_dma_get_residue();
priv->irq_mode = PARPORT_IP32_IRQ_FWD; priv->irq_mode = PARPORT_IP32_IRQ_FWD;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment