Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 16743
b: refs/heads/master
c: 7cdad48
h: refs/heads/master
i:
  16741: 3335b1d
  16739: cd02055
  16735: 54e15f3
v: v3
  • Loading branch information
Russell King authored and Russell King committed Jan 4, 2006
1 parent e0f6d05 commit 7ef5083
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 29 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 333c9624b728a9e83b741ea75836aa114ec35272
refs/heads/master: 7cdad482974792419cfe4b0affca689170116f49
22 changes: 13 additions & 9 deletions trunk/arch/arm/kernel/dma-isa.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
*/
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>

#include <asm/dma.h>
#include <asm/io.h>
Expand Down Expand Up @@ -65,37 +65,41 @@ static void isa_enable_dma(dmach_t channel, dma_t *dma)
{
if (dma->invalid) {
unsigned long address, length;
unsigned int mode, direction;
unsigned int mode;
enum dma_data_direction direction;

mode = channel & 3;
switch (dma->dma_mode & DMA_MODE_MASK) {
case DMA_MODE_READ:
mode |= ISA_DMA_MODE_READ;
direction = PCI_DMA_FROMDEVICE;
direction = DMA_FROM_DEVICE;
break;

case DMA_MODE_WRITE:
mode |= ISA_DMA_MODE_WRITE;
direction = PCI_DMA_TODEVICE;
direction = DMA_TO_DEVICE;
break;

case DMA_MODE_CASCADE:
mode |= ISA_DMA_MODE_CASCADE;
direction = PCI_DMA_BIDIRECTIONAL;
direction = DMA_BIDIRECTIONAL;
break;

default:
direction = PCI_DMA_NONE;
direction = DMA_NONE;
break;
}

if (!dma->using_sg) {
if (!dma->sg) {
/*
* Cope with ISA-style drivers which expect cache
* coherence.
*/
dma->buf.dma_address = pci_map_single(NULL,
dma->buf.__address, dma->buf.length,
dma->sg = &dma->buf;
dma->sgcount = 1;
dma->buf.length = dma->count;
dma->buf.dma_address = dma_map_single(NULL,
dma->addr, dma->count,
direction);
}

Expand Down
13 changes: 4 additions & 9 deletions trunk/arch/arm/kernel/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ void set_dma_sg (dmach_t channel, struct scatterlist *sg, int nr_sg)

dma->sg = sg;
dma->sgcount = nr_sg;
dma->using_sg = 1;
dma->invalid = 1;
}

Expand All @@ -139,10 +138,8 @@ void __set_dma_addr (dmach_t channel, void *addr)
printk(KERN_ERR "dma%d: altering DMA address while "
"DMA active\n", channel);

dma->sg = &dma->buf;
dma->sgcount = 1;
dma->buf.__address = addr;
dma->using_sg = 0;
dma->sg = NULL;
dma->addr = addr;
dma->invalid = 1;
}

Expand All @@ -158,10 +155,8 @@ void set_dma_count (dmach_t channel, unsigned long count)
printk(KERN_ERR "dma%d: altering DMA count while "
"DMA active\n", channel);

dma->sg = &dma->buf;
dma->sgcount = 1;
dma->buf.length = count;
dma->using_sg = 0;
dma->sg = NULL;
dma->count = count;
dma->invalid = 1;
}

Expand Down
19 changes: 11 additions & 8 deletions trunk/arch/arm/mach-rpc/dma.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include <linux/mman.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/pci.h>
#include <linux/dma-mapping.h>

#include <asm/page.h>
#include <asm/dma.h>
Expand Down Expand Up @@ -148,11 +148,14 @@ static void iomd_enable_dma(dmach_t channel, dma_t *dma)
* Cope with ISA-style drivers which expect cache
* coherence.
*/
if (!dma->using_sg) {
dma->buf.dma_address = pci_map_single(NULL,
dma->buf.__address, dma->buf.length,
if (!dma->sg) {
dma->sg = &dma->buf;
dma->sgcount = 1;
dma->buf.length = dma->count;
dma->buf.dma_address = dma_map_single(NULL,
dma->addr, dma->count,
dma->dma_mode == DMA_MODE_READ ?
PCI_DMA_FROMDEVICE : PCI_DMA_TODEVICE);
DMA_FROM_DEVICE : DMA_TO_DEVICE);
}

iomd_writeb(DMA_CR_C, dma_base + CR);
Expand Down Expand Up @@ -239,7 +242,7 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma)
unsigned int fiqhandler_length;
struct pt_regs regs;

if (dma->using_sg)
if (dma->sg)
BUG();

if (dma->dma_mode == DMA_MODE_READ) {
Expand All @@ -252,8 +255,8 @@ static void floppy_enable_dma(dmach_t channel, dma_t *dma)
fiqhandler_length = &floppy_fiqout_end - &floppy_fiqout_start;
}

regs.ARM_r9 = dma->buf.length;
regs.ARM_r10 = (unsigned long)dma->buf.__address;
regs.ARM_r9 = dma->count;
regs.ARM_r10 = (unsigned long)dma->addr;
regs.ARM_fp = (unsigned long)FLOPPYDMA_BASE;

if (claim_fiq(&fh)) {
Expand Down
4 changes: 3 additions & 1 deletion trunk/include/asm-arm/mach/dma.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,15 @@ struct dma_ops {
};

struct dma_struct {
void *addr; /* single DMA address */
unsigned long count; /* single DMA size */
struct scatterlist buf; /* single DMA */
int sgcount; /* number of DMA SG */
struct scatterlist *sg; /* DMA Scatter-Gather List */

unsigned int active:1; /* Transfer active */
unsigned int invalid:1; /* Address/Count changed */
unsigned int using_sg:1; /* using scatter list? */

dmamode_t dma_mode; /* DMA mode */
int speed; /* DMA speed */

Expand Down
1 change: 0 additions & 1 deletion trunk/include/asm-arm/scatterlist.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ struct scatterlist {
unsigned int offset; /* buffer offset */
dma_addr_t dma_address; /* dma address */
unsigned int length; /* length */
char *__address; /* for set_dma_addr */
};

/*
Expand Down

0 comments on commit 7ef5083

Please sign in to comment.