Commit 0ff1b2c8 authored by Paul Fulghum's avatar Paul Fulghum Committed by Linus Torvalds

[PATCH] synclink: update to use DMA mapping API

Update synclink to use DMA mapping API.  This removes warning about
isa_virt_to_bus() usage on architectures other than i386
Signed-off-by: default avatarPaul Fulghum <paulkf@microgate.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ab4eb43c
/* /*
* linux/drivers/char/synclink.c * linux/drivers/char/synclink.c
* *
* $Id: synclink.c,v 4.37 2005/09/07 13:13:19 paulkf Exp $ * $Id: synclink.c,v 4.38 2005/11/07 16:30:34 paulkf Exp $
* *
* Device driver for Microgate SyncLink ISA and PCI * Device driver for Microgate SyncLink ISA and PCI
* high speed multiprotocol serial adapters. * high speed multiprotocol serial adapters.
...@@ -101,6 +101,7 @@ ...@@ -101,6 +101,7 @@
#include <linux/termios.h> #include <linux/termios.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/hdlc.h> #include <linux/hdlc.h>
#include <linux/dma-mapping.h>
#ifdef CONFIG_HDLC_MODULE #ifdef CONFIG_HDLC_MODULE
#define CONFIG_HDLC 1 #define CONFIG_HDLC 1
...@@ -148,6 +149,7 @@ typedef struct _DMABUFFERENTRY ...@@ -148,6 +149,7 @@ typedef struct _DMABUFFERENTRY
u32 link; /* 32-bit flat link to next buffer entry */ u32 link; /* 32-bit flat link to next buffer entry */
char *virt_addr; /* virtual address of data buffer */ char *virt_addr; /* virtual address of data buffer */
u32 phys_entry; /* physical address of this buffer entry */ u32 phys_entry; /* physical address of this buffer entry */
dma_addr_t dma_addr;
} DMABUFFERENTRY, *DMAPBUFFERENTRY; } DMABUFFERENTRY, *DMAPBUFFERENTRY;
/* The queue of BH actions to be performed */ /* The queue of BH actions to be performed */
...@@ -233,7 +235,8 @@ struct mgsl_struct { ...@@ -233,7 +235,8 @@ struct mgsl_struct {
int ri_chkcount; int ri_chkcount;
char *buffer_list; /* virtual address of Rx & Tx buffer lists */ char *buffer_list; /* virtual address of Rx & Tx buffer lists */
unsigned long buffer_list_phys; u32 buffer_list_phys;
dma_addr_t buffer_list_dma_addr;
unsigned int rx_buffer_count; /* count of total allocated Rx buffers */ unsigned int rx_buffer_count; /* count of total allocated Rx buffers */
DMABUFFERENTRY *rx_buffer_list; /* list of receive buffer entries */ DMABUFFERENTRY *rx_buffer_list; /* list of receive buffer entries */
...@@ -896,7 +899,7 @@ module_param_array(txdmabufs, int, NULL, 0); ...@@ -896,7 +899,7 @@ module_param_array(txdmabufs, int, NULL, 0);
module_param_array(txholdbufs, int, NULL, 0); module_param_array(txholdbufs, int, NULL, 0);
static char *driver_name = "SyncLink serial driver"; static char *driver_name = "SyncLink serial driver";
static char *driver_version = "$Revision: 4.37 $"; static char *driver_version = "$Revision: 4.38 $";
static int synclink_init_one (struct pci_dev *dev, static int synclink_init_one (struct pci_dev *dev,
const struct pci_device_id *ent); const struct pci_device_id *ent);
...@@ -3811,11 +3814,10 @@ static int mgsl_alloc_buffer_list_memory( struct mgsl_struct *info ) ...@@ -3811,11 +3814,10 @@ static int mgsl_alloc_buffer_list_memory( struct mgsl_struct *info )
/* inspect portions of the buffer while other portions are being */ /* inspect portions of the buffer while other portions are being */
/* updated by the adapter using Bus Master DMA. */ /* updated by the adapter using Bus Master DMA. */
info->buffer_list = kmalloc(BUFFERLISTSIZE, GFP_KERNEL | GFP_DMA); info->buffer_list = dma_alloc_coherent(NULL, BUFFERLISTSIZE, &info->buffer_list_dma_addr, GFP_KERNEL);
if ( info->buffer_list == NULL ) if (info->buffer_list == NULL)
return -ENOMEM; return -ENOMEM;
info->buffer_list_phys = (u32)(info->buffer_list_dma_addr);
info->buffer_list_phys = isa_virt_to_bus(info->buffer_list);
} }
/* We got the memory for the buffer entry lists. */ /* We got the memory for the buffer entry lists. */
...@@ -3882,8 +3884,8 @@ static int mgsl_alloc_buffer_list_memory( struct mgsl_struct *info ) ...@@ -3882,8 +3884,8 @@ static int mgsl_alloc_buffer_list_memory( struct mgsl_struct *info )
*/ */
static void mgsl_free_buffer_list_memory( struct mgsl_struct *info ) static void mgsl_free_buffer_list_memory( struct mgsl_struct *info )
{ {
if ( info->buffer_list && info->bus_type != MGSL_BUS_TYPE_PCI ) if (info->buffer_list && info->bus_type != MGSL_BUS_TYPE_PCI)
kfree(info->buffer_list); dma_free_coherent(NULL, BUFFERLISTSIZE, info->buffer_list, info->buffer_list_dma_addr);
info->buffer_list = NULL; info->buffer_list = NULL;
info->rx_buffer_list = NULL; info->rx_buffer_list = NULL;
...@@ -3910,7 +3912,7 @@ static void mgsl_free_buffer_list_memory( struct mgsl_struct *info ) ...@@ -3910,7 +3912,7 @@ static void mgsl_free_buffer_list_memory( struct mgsl_struct *info )
static int mgsl_alloc_frame_memory(struct mgsl_struct *info,DMABUFFERENTRY *BufferList,int Buffercount) static int mgsl_alloc_frame_memory(struct mgsl_struct *info,DMABUFFERENTRY *BufferList,int Buffercount)
{ {
int i; int i;
unsigned long phys_addr; u32 phys_addr;
/* Allocate page sized buffers for the receive buffer list */ /* Allocate page sized buffers for the receive buffer list */
...@@ -3922,11 +3924,10 @@ static int mgsl_alloc_frame_memory(struct mgsl_struct *info,DMABUFFERENTRY *Buff ...@@ -3922,11 +3924,10 @@ static int mgsl_alloc_frame_memory(struct mgsl_struct *info,DMABUFFERENTRY *Buff
info->last_mem_alloc += DMABUFFERSIZE; info->last_mem_alloc += DMABUFFERSIZE;
} else { } else {
/* ISA adapter uses system memory. */ /* ISA adapter uses system memory. */
BufferList[i].virt_addr = BufferList[i].virt_addr = dma_alloc_coherent(NULL, DMABUFFERSIZE, &BufferList[i].dma_addr, GFP_KERNEL);
kmalloc(DMABUFFERSIZE, GFP_KERNEL | GFP_DMA); if (BufferList[i].virt_addr == NULL)
if ( BufferList[i].virt_addr == NULL )
return -ENOMEM; return -ENOMEM;
phys_addr = isa_virt_to_bus(BufferList[i].virt_addr); phys_addr = (u32)(BufferList[i].dma_addr);
} }
BufferList[i].phys_addr = phys_addr; BufferList[i].phys_addr = phys_addr;
} }
...@@ -3957,7 +3958,7 @@ static void mgsl_free_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *Buf ...@@ -3957,7 +3958,7 @@ static void mgsl_free_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *Buf
for ( i = 0 ; i < Buffercount ; i++ ) { for ( i = 0 ; i < Buffercount ; i++ ) {
if ( BufferList[i].virt_addr ) { if ( BufferList[i].virt_addr ) {
if ( info->bus_type != MGSL_BUS_TYPE_PCI ) if ( info->bus_type != MGSL_BUS_TYPE_PCI )
kfree(BufferList[i].virt_addr); dma_free_coherent(NULL, DMABUFFERSIZE, BufferList[i].virt_addr, BufferList[i].dma_addr);
BufferList[i].virt_addr = NULL; BufferList[i].virt_addr = NULL;
} }
} }
......
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