Commit 93e16847 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by Jeff Garzik

tlan: 64bit conversion

Make this driver compile cleanly on 64 bit platforms.
Compile tested only.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 92cee9f6
...@@ -1670,7 +1670,7 @@ config SUNDANCE_MMIO ...@@ -1670,7 +1670,7 @@ config SUNDANCE_MMIO
config TLAN config TLAN
tristate "TI ThunderLAN support" tristate "TI ThunderLAN support"
depends on NET_PCI && (PCI || EISA) && !64BIT depends on NET_PCI && (PCI || EISA)
---help--- ---help---
If you have a PCI Ethernet network card based on the ThunderLAN chip If you have a PCI Ethernet network card based on the ThunderLAN chip
which is supported by this driver, say Y and read the which is supported by this driver, say Y and read the
......
...@@ -346,23 +346,21 @@ static void TLan_EeReceiveByte( u16, u8 *, int ); ...@@ -346,23 +346,21 @@ static void TLan_EeReceiveByte( u16, u8 *, int );
static int TLan_EeReadByte( struct net_device *, u8, u8 * ); static int TLan_EeReadByte( struct net_device *, u8, u8 * );
static void static inline void
TLan_StoreSKB( struct tlan_list_tag *tag, struct sk_buff *skb) TLan_StoreSKB( struct tlan_list_tag *tag, struct sk_buff *skb)
{ {
unsigned long addr = (unsigned long)skb; unsigned long addr = (unsigned long)skb;
tag->buffer[9].address = (u32)addr; tag->buffer[9].address = addr;
addr >>= 31; /* >>= 32 is undefined for 32bit arch, stupid C */ tag->buffer[8].address = upper_32_bits(addr);
addr >>= 1;
tag->buffer[8].address = (u32)addr;
} }
static struct sk_buff * static inline struct sk_buff *
TLan_GetSKB( struct tlan_list_tag *tag) TLan_GetSKB( const struct tlan_list_tag *tag)
{ {
unsigned long addr = tag->buffer[8].address; unsigned long addr;
addr <<= 31;
addr <<= 1; addr = tag->buffer[8].address;
addr |= tag->buffer[9].address; addr |= (tag->buffer[9].address << 16) << 16;
return (struct sk_buff *) addr; return (struct sk_buff *) addr;
} }
...@@ -858,7 +856,8 @@ static int TLan_Init( struct net_device *dev ) ...@@ -858,7 +856,8 @@ static int TLan_Init( struct net_device *dev )
dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS )
* ( sizeof(TLanList) ); * ( sizeof(TLanList) );
} }
priv->dmaStorage = pci_alloc_consistent(priv->pciDev, dma_size, &priv->dmaStorageDMA); priv->dmaStorage = pci_alloc_consistent(priv->pciDev,
dma_size, &priv->dmaStorageDMA);
priv->dmaSize = dma_size; priv->dmaSize = dma_size;
if ( priv->dmaStorage == NULL ) { if ( priv->dmaStorage == NULL ) {
...@@ -867,11 +866,11 @@ static int TLan_Init( struct net_device *dev ) ...@@ -867,11 +866,11 @@ static int TLan_Init( struct net_device *dev )
return -ENOMEM; return -ENOMEM;
} }
memset( priv->dmaStorage, 0, dma_size ); memset( priv->dmaStorage, 0, dma_size );
priv->rxList = (TLanList *) priv->rxList = (TLanList *) ALIGN((unsigned long)priv->dmaStorage, 8);
( ( ( (u32) priv->dmaStorage ) + 7 ) & 0xFFFFFFF8 ); priv->rxListDMA = ALIGN(priv->dmaStorageDMA, 8);
priv->rxListDMA = ( ( ( (u32) priv->dmaStorageDMA ) + 7 ) & 0xFFFFFFF8 );
priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; priv->txList = priv->rxList + TLAN_NUM_RX_LISTS;
priv->txListDMA = priv->rxListDMA + sizeof(TLanList) * TLAN_NUM_RX_LISTS; priv->txListDMA = priv->rxListDMA + sizeof(TLanList) * TLAN_NUM_RX_LISTS;
if ( bbuf ) { if ( bbuf ) {
priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS ); priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS );
priv->rxBufferDMA =priv->txListDMA + sizeof(TLanList) * TLAN_NUM_TX_LISTS; priv->rxBufferDMA =priv->txListDMA + sizeof(TLanList) * TLAN_NUM_TX_LISTS;
...@@ -1584,7 +1583,7 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) ...@@ -1584,7 +1583,7 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int )
if ( new_skb != NULL ) { if ( new_skb != NULL ) {
skb = TLan_GetSKB(head_list); skb = TLan_GetSKB(head_list);
pci_unmap_single(priv->pciDev, head_list->buffer[0].address, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); pci_unmap_single(priv->pciDev, head_list->buffer[0].address, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
skb_trim( skb, frameSize ); skb_put( skb, frameSize );
dev->stats.rx_bytes += frameSize; dev->stats.rx_bytes += frameSize;
...@@ -1592,9 +1591,8 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) ...@@ -1592,9 +1591,8 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int )
netif_rx( skb ); netif_rx( skb );
skb_reserve( new_skb, 2 ); skb_reserve( new_skb, 2 );
t = (void *) skb_put( new_skb, TLAN_MAX_FRAME_SIZE );
head_list->buffer[0].address = pci_map_single(priv->pciDev, new_skb->data, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); head_list->buffer[0].address = pci_map_single(priv->pciDev, new_skb->data, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
head_list->buffer[8].address = (u32) t;
TLan_StoreSKB(head_list, new_skb); TLan_StoreSKB(head_list, new_skb);
} else } else
printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" ); printk(KERN_WARNING "TLAN: Couldn't allocate memory for received data.\n" );
...@@ -2003,10 +2001,8 @@ static void TLan_ResetLists( struct net_device *dev ) ...@@ -2003,10 +2001,8 @@ static void TLan_ResetLists( struct net_device *dev )
} else { } else {
skb->dev = dev; skb->dev = dev;
skb_reserve( skb, 2 ); skb_reserve( skb, 2 );
t = (void *) skb_put( skb, TLAN_MAX_FRAME_SIZE );
} }
list->buffer[0].address = pci_map_single(priv->pciDev, t, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); list->buffer[0].address = pci_map_single(priv->pciDev, t, TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE);
list->buffer[8].address = (u32) t;
TLan_StoreSKB(list, skb); TLan_StoreSKB(list, skb);
} }
list->buffer[1].count = 0; list->buffer[1].count = 0;
...@@ -2108,7 +2104,7 @@ static void TLan_PrintList( TLanList *list, char *type, int num) ...@@ -2108,7 +2104,7 @@ static void TLan_PrintList( TLanList *list, char *type, int num)
{ {
int i; int i;
printk( "TLAN: %s List %d at 0x%08x\n", type, num, (u32) list ); printk( "TLAN: %s List %d at %p\n", type, num, list );
printk( "TLAN: Forward = 0x%08x\n", list->forward ); printk( "TLAN: Forward = 0x%08x\n", list->forward );
printk( "TLAN: CSTAT = 0x%04hx\n", list->cStat ); printk( "TLAN: CSTAT = 0x%04hx\n", list->cStat );
printk( "TLAN: Frame Size = 0x%04hx\n", list->frameSize ); printk( "TLAN: Frame Size = 0x%04hx\n", list->frameSize );
......
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