[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: Paul Fulghum <paulkf@microgate.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
ab4eb43ce7
commit
0ff1b2c8ce
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* 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 @@
|
|||||||
#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
|
|||||||
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 {
|
|||||||
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);
|
|||||||
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 )
|
|||||||
/* 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. */
|
||||||
@@ -3883,7 +3885,7 @@ 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 )
|
|||||||
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
|
|||||||
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
|
|||||||
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user