Loading drivers/net/tlan.c +77 −134 Original line number Diff line number Diff line Loading @@ -163,6 +163,11 @@ * v1.15 Apr 4, 2002 - Correct operation when aui=1 to be * 10T half duplex no loopback * Thanks to Gunnar Eikman * * Sakari Ailus <sakari.ailus@iki.fi>: * * v1.15a Dec 15 2008 - Remove bbuf support, it doesn't work anyway. * *******************************************************************************/ #include <linux/module.h> Loading Loading @@ -213,12 +218,8 @@ static int debug; module_param(debug, int, 0); MODULE_PARM_DESC(debug, "ThunderLAN debug mask"); static int bbuf; module_param(bbuf, int, 0); MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)"); static const char TLanSignature[] = "TLAN"; static const char tlan_banner[] = "ThunderLAN driver v1.15\n"; static const char tlan_banner[] = "ThunderLAN driver v1.15a\n"; static int tlan_have_pci; static int tlan_have_eisa; Loading Loading @@ -859,13 +860,8 @@ static int TLan_Init( struct net_device *dev ) priv = netdev_priv(dev); if ( bbuf ) { dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE ); } else { dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) * ( sizeof(TLanList) ); } priv->dmaStorage = pci_alloc_consistent(priv->pciDev, dma_size, &priv->dmaStorageDMA); priv->dmaSize = dma_size; Loading @@ -881,16 +877,6 @@ static int TLan_Init( struct net_device *dev ) priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; priv->txListDMA = priv->rxListDMA + sizeof(TLanList) * TLAN_NUM_RX_LISTS; if ( bbuf ) { priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS ); priv->rxBufferDMA =priv->txListDMA + sizeof(TLanList) * TLAN_NUM_TX_LISTS; priv->txBuffer = priv->rxBuffer + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE ); priv->txBufferDMA = priv->rxBufferDMA + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE ); } err = 0; for ( i = 0; i < 6 ; i++ ) err |= TLan_EeReadByte( dev, Loading Loading @@ -1094,9 +1080,8 @@ static void TLan_tx_timeout_work(struct work_struct *work) static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) { TLanPrivateInfo *priv = netdev_priv(dev); TLanList *tail_list; dma_addr_t tail_list_phys; u8 *tail_buffer; TLanList *tail_list; unsigned long flags; unsigned int txlen; Loading Loading @@ -1125,15 +1110,10 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) tail_list->forward = 0; if ( bbuf ) { tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); skb_copy_from_linear_data(skb, tail_buffer, txlen); } else { tail_list->buffer[0].address = pci_map_single(priv->pciDev, skb->data, txlen, PCI_DMA_TODEVICE); TLan_StoreSKB(tail_list, skb); } tail_list->frameSize = (u16) txlen; tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen; Loading Loading @@ -1163,9 +1143,6 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS ); if ( bbuf ) dev_kfree_skb_any(skb); dev->trans_start = jiffies; return 0; Loading Loading @@ -1429,9 +1406,9 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) head_list = priv->txList + priv->txHead; while (((tmpCStat = head_list->cStat ) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { ack++; if ( ! bbuf ) { struct sk_buff *skb = TLan_GetSKB(head_list); ack++; pci_unmap_single(priv->pciDev, head_list->buffer[0].address, max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE), Loading @@ -1439,7 +1416,6 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) dev_kfree_skb_any(skb); head_list->buffer[8].address = 0; head_list->buffer[9].address = 0; } if ( tmpCStat & TLAN_CSTAT_EOC ) eoc = 1; Loading Loading @@ -1549,7 +1525,6 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) TLanPrivateInfo *priv = netdev_priv(dev); u32 ack = 0; int eoc = 0; u8 *head_buffer; TLanList *head_list; struct sk_buff *skb; TLanList *tail_list; Loading @@ -1564,30 +1539,12 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { dma_addr_t frameDma = head_list->buffer[0].address; u32 frameSize = head_list->frameSize; struct sk_buff *new_skb; ack++; if (tmpCStat & TLAN_CSTAT_EOC) eoc = 1; if (bbuf) { skb = netdev_alloc_skb(dev, frameSize + 7); if ( !skb ) goto drop_and_reuse; head_buffer = priv->rxBuffer + (priv->rxHead * TLAN_MAX_FRAME_SIZE); skb_reserve(skb, 2); pci_dma_sync_single_for_cpu(priv->pciDev, frameDma, frameSize, PCI_DMA_FROMDEVICE); skb_copy_from_linear_data(skb, head_buffer, frameSize); skb_put(skb, frameSize); dev->stats.rx_bytes += frameSize; skb->protocol = eth_type_trans( skb, dev ); netif_rx( skb ); } else { struct sk_buff *new_skb; new_skb = netdev_alloc_skb(dev, TLAN_MAX_FRAME_SIZE + 7 ); if ( !new_skb ) goto drop_and_reuse; Loading @@ -1609,8 +1566,6 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) PCI_DMA_FROMDEVICE); TLan_StoreSKB(head_list, new_skb); } drop_and_reuse: head_list->forward = 0; head_list->cStat = 0; Loading Loading @@ -1993,12 +1948,7 @@ static void TLan_ResetLists( struct net_device *dev ) for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { list = priv->txList + i; list->cStat = TLAN_CSTAT_UNUSED; if ( bbuf ) { list->buffer[0].address = priv->txBufferDMA + ( i * TLAN_MAX_FRAME_SIZE ); } else { list->buffer[0].address = 0; } list->buffer[2].count = 0; list->buffer[2].address = 0; list->buffer[8].address = 0; Loading @@ -2013,10 +1963,6 @@ static void TLan_ResetLists( struct net_device *dev ) list->cStat = TLAN_CSTAT_READY; list->frameSize = TLAN_MAX_FRAME_SIZE; list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER; if ( bbuf ) { list->buffer[0].address = priv->rxBufferDMA + ( i * TLAN_MAX_FRAME_SIZE ); } else { skb = netdev_alloc_skb(dev, TLAN_MAX_FRAME_SIZE + 7 ); if ( !skb ) { pr_err("TLAN: out of memory for received data.\n" ); Loading @@ -2029,7 +1975,6 @@ static void TLan_ResetLists( struct net_device *dev ) TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); TLan_StoreSKB(list, skb); } list->buffer[1].count = 0; list->buffer[1].address = 0; list->forward = list_phys + sizeof(TLanList); Loading @@ -2052,7 +1997,6 @@ static void TLan_FreeLists( struct net_device *dev ) TLanList *list; struct sk_buff *skb; if ( ! bbuf ) { for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { list = priv->txList + i; skb = TLan_GetSKB(list); Loading Loading @@ -2082,7 +2026,6 @@ static void TLan_FreeLists( struct net_device *dev ) list->buffer[9].address = 0; } } } } /* TLan_FreeLists */ Loading Loading
drivers/net/tlan.c +77 −134 Original line number Diff line number Diff line Loading @@ -163,6 +163,11 @@ * v1.15 Apr 4, 2002 - Correct operation when aui=1 to be * 10T half duplex no loopback * Thanks to Gunnar Eikman * * Sakari Ailus <sakari.ailus@iki.fi>: * * v1.15a Dec 15 2008 - Remove bbuf support, it doesn't work anyway. * *******************************************************************************/ #include <linux/module.h> Loading Loading @@ -213,12 +218,8 @@ static int debug; module_param(debug, int, 0); MODULE_PARM_DESC(debug, "ThunderLAN debug mask"); static int bbuf; module_param(bbuf, int, 0); MODULE_PARM_DESC(bbuf, "ThunderLAN use big buffer (0-1)"); static const char TLanSignature[] = "TLAN"; static const char tlan_banner[] = "ThunderLAN driver v1.15\n"; static const char tlan_banner[] = "ThunderLAN driver v1.15a\n"; static int tlan_have_pci; static int tlan_have_eisa; Loading Loading @@ -859,13 +860,8 @@ static int TLan_Init( struct net_device *dev ) priv = netdev_priv(dev); if ( bbuf ) { dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) * ( sizeof(TLanList) + TLAN_MAX_FRAME_SIZE ); } else { dma_size = ( TLAN_NUM_RX_LISTS + TLAN_NUM_TX_LISTS ) * ( sizeof(TLanList) ); } priv->dmaStorage = pci_alloc_consistent(priv->pciDev, dma_size, &priv->dmaStorageDMA); priv->dmaSize = dma_size; Loading @@ -881,16 +877,6 @@ static int TLan_Init( struct net_device *dev ) priv->txList = priv->rxList + TLAN_NUM_RX_LISTS; priv->txListDMA = priv->rxListDMA + sizeof(TLanList) * TLAN_NUM_RX_LISTS; if ( bbuf ) { priv->rxBuffer = (u8 *) ( priv->txList + TLAN_NUM_TX_LISTS ); priv->rxBufferDMA =priv->txListDMA + sizeof(TLanList) * TLAN_NUM_TX_LISTS; priv->txBuffer = priv->rxBuffer + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE ); priv->txBufferDMA = priv->rxBufferDMA + ( TLAN_NUM_RX_LISTS * TLAN_MAX_FRAME_SIZE ); } err = 0; for ( i = 0; i < 6 ; i++ ) err |= TLan_EeReadByte( dev, Loading Loading @@ -1094,9 +1080,8 @@ static void TLan_tx_timeout_work(struct work_struct *work) static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) { TLanPrivateInfo *priv = netdev_priv(dev); TLanList *tail_list; dma_addr_t tail_list_phys; u8 *tail_buffer; TLanList *tail_list; unsigned long flags; unsigned int txlen; Loading Loading @@ -1125,15 +1110,10 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) tail_list->forward = 0; if ( bbuf ) { tail_buffer = priv->txBuffer + ( priv->txTail * TLAN_MAX_FRAME_SIZE ); skb_copy_from_linear_data(skb, tail_buffer, txlen); } else { tail_list->buffer[0].address = pci_map_single(priv->pciDev, skb->data, txlen, PCI_DMA_TODEVICE); TLan_StoreSKB(tail_list, skb); } tail_list->frameSize = (u16) txlen; tail_list->buffer[0].count = TLAN_LAST_BUFFER | (u32) txlen; Loading Loading @@ -1163,9 +1143,6 @@ static int TLan_StartTx( struct sk_buff *skb, struct net_device *dev ) CIRC_INC( priv->txTail, TLAN_NUM_TX_LISTS ); if ( bbuf ) dev_kfree_skb_any(skb); dev->trans_start = jiffies; return 0; Loading Loading @@ -1429,9 +1406,9 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) head_list = priv->txList + priv->txHead; while (((tmpCStat = head_list->cStat ) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { ack++; if ( ! bbuf ) { struct sk_buff *skb = TLan_GetSKB(head_list); ack++; pci_unmap_single(priv->pciDev, head_list->buffer[0].address, max(skb->len, (unsigned int)TLAN_MIN_FRAME_SIZE), Loading @@ -1439,7 +1416,6 @@ static u32 TLan_HandleTxEOF( struct net_device *dev, u16 host_int ) dev_kfree_skb_any(skb); head_list->buffer[8].address = 0; head_list->buffer[9].address = 0; } if ( tmpCStat & TLAN_CSTAT_EOC ) eoc = 1; Loading Loading @@ -1549,7 +1525,6 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) TLanPrivateInfo *priv = netdev_priv(dev); u32 ack = 0; int eoc = 0; u8 *head_buffer; TLanList *head_list; struct sk_buff *skb; TLanList *tail_list; Loading @@ -1564,30 +1539,12 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) while (((tmpCStat = head_list->cStat) & TLAN_CSTAT_FRM_CMP) && (ack < 255)) { dma_addr_t frameDma = head_list->buffer[0].address; u32 frameSize = head_list->frameSize; struct sk_buff *new_skb; ack++; if (tmpCStat & TLAN_CSTAT_EOC) eoc = 1; if (bbuf) { skb = netdev_alloc_skb(dev, frameSize + 7); if ( !skb ) goto drop_and_reuse; head_buffer = priv->rxBuffer + (priv->rxHead * TLAN_MAX_FRAME_SIZE); skb_reserve(skb, 2); pci_dma_sync_single_for_cpu(priv->pciDev, frameDma, frameSize, PCI_DMA_FROMDEVICE); skb_copy_from_linear_data(skb, head_buffer, frameSize); skb_put(skb, frameSize); dev->stats.rx_bytes += frameSize; skb->protocol = eth_type_trans( skb, dev ); netif_rx( skb ); } else { struct sk_buff *new_skb; new_skb = netdev_alloc_skb(dev, TLAN_MAX_FRAME_SIZE + 7 ); if ( !new_skb ) goto drop_and_reuse; Loading @@ -1609,8 +1566,6 @@ static u32 TLan_HandleRxEOF( struct net_device *dev, u16 host_int ) PCI_DMA_FROMDEVICE); TLan_StoreSKB(head_list, new_skb); } drop_and_reuse: head_list->forward = 0; head_list->cStat = 0; Loading Loading @@ -1993,12 +1948,7 @@ static void TLan_ResetLists( struct net_device *dev ) for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { list = priv->txList + i; list->cStat = TLAN_CSTAT_UNUSED; if ( bbuf ) { list->buffer[0].address = priv->txBufferDMA + ( i * TLAN_MAX_FRAME_SIZE ); } else { list->buffer[0].address = 0; } list->buffer[2].count = 0; list->buffer[2].address = 0; list->buffer[8].address = 0; Loading @@ -2013,10 +1963,6 @@ static void TLan_ResetLists( struct net_device *dev ) list->cStat = TLAN_CSTAT_READY; list->frameSize = TLAN_MAX_FRAME_SIZE; list->buffer[0].count = TLAN_MAX_FRAME_SIZE | TLAN_LAST_BUFFER; if ( bbuf ) { list->buffer[0].address = priv->rxBufferDMA + ( i * TLAN_MAX_FRAME_SIZE ); } else { skb = netdev_alloc_skb(dev, TLAN_MAX_FRAME_SIZE + 7 ); if ( !skb ) { pr_err("TLAN: out of memory for received data.\n" ); Loading @@ -2029,7 +1975,6 @@ static void TLan_ResetLists( struct net_device *dev ) TLAN_MAX_FRAME_SIZE, PCI_DMA_FROMDEVICE); TLan_StoreSKB(list, skb); } list->buffer[1].count = 0; list->buffer[1].address = 0; list->forward = list_phys + sizeof(TLanList); Loading @@ -2052,7 +1997,6 @@ static void TLan_FreeLists( struct net_device *dev ) TLanList *list; struct sk_buff *skb; if ( ! bbuf ) { for ( i = 0; i < TLAN_NUM_TX_LISTS; i++ ) { list = priv->txList + i; skb = TLan_GetSKB(list); Loading Loading @@ -2082,7 +2026,6 @@ static void TLan_FreeLists( struct net_device *dev ) list->buffer[9].address = 0; } } } } /* TLan_FreeLists */ Loading