Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5eeabf51 authored by Sakari Ailus's avatar Sakari Ailus Committed by David S. Miller
Browse files

tlan: Remove broken support for big buffers



The big rx/tx buffer support is broken and unlikely to be very useful
as such. Remove it.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 354ade90
Loading
Loading
Loading
Loading
+77 −134
Original line number Diff line number Diff line
@@ -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>
@@ -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;

@@ -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;
@@ -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,
@@ -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;

@@ -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;
@@ -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;

@@ -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),
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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" );
@@ -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);
@@ -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);
@@ -2082,7 +2026,6 @@ static void TLan_FreeLists( struct net_device *dev )
			list->buffer[9].address = 0;
		}
	}
	}
} /* TLan_FreeLists */