From 6205ab74fea5123a745dcd9dd7315afc92c51913 Mon Sep 17 00:00:00 2001 From: Stefan Lankes Date: Tue, 4 Oct 2011 08:36:46 -0700 Subject: [PATCH] remove (obsolete) TX buffer --- drivers/net/mmnif.c | 91 +++++++++++++++++---------------------------- 1 file changed, 34 insertions(+), 57 deletions(-) diff --git a/drivers/net/mmnif.c b/drivers/net/mmnif.c index 540b4a07..1abb68fb 100644 --- a/drivers/net/mmnif.c +++ b/drivers/net/mmnif.c @@ -85,8 +85,8 @@ * regarding the driver & its configuration */ -#define MMNIF_TX_BUFFERLEN 2048 -#define MMNIF_TX_QUEUELEN 4 +//#define MMNIF_TX_BUFFERLEN 2048 +//#define MMNIF_TX_QUEUELEN 4 #define MMNIF_RX_BUFFERLEN 7*1024 #define MMNIF_MAX_DESCRIPTORS 64 @@ -259,8 +259,8 @@ typedef struct mmnif { * - pointer to transmit buffer * - pointer to recive buffer */ - uint8_t tx_queue; - uint8_t *tx_buff[MMNIF_TX_QUEUELEN]; + //uint8_t tx_queue; + //uint8_t *tx_buff[MMNIF_TX_QUEUELEN]; mm_rx_buffer_t *rx_buff; uint8_t *rx_heap; @@ -600,54 +600,33 @@ static void mmnif_rxbuff_free(void) static err_t mmnif_tx(struct netif *netif, struct pbuf *p) { mmnif_t *mmnif = netif->state; - uint8_t slot = mmnif->tx_queue; - uint32_t write_address; + //uint8_t slot = mmnif->tx_queue; + size_t write_address; uint32_t i; struct pbuf *q; /* interator */ - uint8_t build_buff = TRUE; uint32_t dest_ip = mmnif_get_destination(netif, p); //uint8_t chances = 20; //mm_rx_buffer_t *rb = (mm_rx_buffer_t *) ((char *)header_start_address + (dest_ip - 1) * header_size); - spinlock_lock(&mmnif->lock); - mmnif->tx_queue++; - spinlock_unlock(&mmnif->lock); + //spinlock_lock(&mmnif->lock); + //mmnif->tx_queue++; + //spinlock_unlock(&mmnif->lock); /* Perform serveral sanity checks on the packet and the buffers: * - is the queue full? * - is the output packet to big? */ - if (mmnif->tx_queue > MMNIF_TX_QUEUELEN) + /*if (mmnif->tx_queue > MMNIF_TX_QUEUELEN) { DEBUGPRINTF("mmnif_tx(): too many packets at once for tx_queue\n"); goto drop_packet; - } + }*/ - if (p->tot_len > MMNIF_TX_BUFFERLEN) + /*if (p->tot_len > MMNIF_TX_BUFFERLEN) { DEBUGPRINTF("mmnif_tx(): packet is longer than %d bytes\n", MMNIF_TX_BUFFERLEN); goto drop_packet; - } - - /* check if the pbuf consists only of one element - * if that is the case it would be much overhead - * copying that packet again - */ - if (!p->next) - build_buff = FALSE; - - if (build_buff) - { - - /* build the payload out of the p's - * ensure that the packet is in one memory chunk stored in the transmid buffer - */ - for (q = p, i = 0; q != 0; q = q->next) - { - memcpy(mmnif->tx_buff[slot] + i, q->payload, q->len); - i += q->len; - } - } + }*/ /* allocate memory for the packet in the remote buffer */ realloc: @@ -682,18 +661,16 @@ realloc: asm volatile (".byte 0x0f; .byte 0x0a;\n"); #endif - if (build_buff) + + for (q = p, i = 0; q != 0; q = q->next) + { #if MMNIF_USE_MPB - memcpy_put(write_address, mmnif->tx_buff[slot], CLINE_ALIGN(p->tot_len)); + memcpy_put((char*) write_address + i, q->payload, q->len); #else - memcpy((void*)write_address, mmnif->tx_buff[slot], CLINE_ALIGN(p->tot_len)); -#endif - else -#if MMNIF_USE_MPB - memcpy_put(write_address, p->payload, CLINE_ALIGN(p->tot_len)); -#else - memcpy((void*)write_address, p->payload, CLINE_ALIGN(p->tot_len)); + memcpy((char*)write_address+ i, q->payload, q->len); #endif + i += q->len; + } *((int *)RCCE_fool_write_combine_buffer) = 1; #if USE_CACHE @@ -712,9 +689,9 @@ realloc: #endif /* release the tx_queue because it's finished */ - spinlock_lock(&mmnif->lock); - mmnif->tx_queue--; - spinlock_unlock(&mmnif->lock); + //spinlock_lock(&mmnif->lock); + //mmnif->tx_queue--; + //spinlock_unlock(&mmnif->lock); /* just gather some stats */ LINK_STATS_INC(link.xmit); @@ -731,9 +708,9 @@ drop_packet: DEBUGPRINTF("mmnif_tx(): packet dropped"); #endif - spinlock_lock(&mmnif->lock); - mmnif->tx_queue--; - spinlock_unlock(&mmnif->lock); + //spinlock_lock(&mmnif->lock); + //mmnif->tx_queue--; + //spinlock_unlock(&mmnif->lock); LINK_STATS_INC(link.drop); mmnif->stats.tx_err++; @@ -1080,17 +1057,17 @@ err_t mmnif_init(struct netif *netif) /* Alloc and clear internal memory for tx_buff */ - mmnif->tx_buff[0] = kmalloc(MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); + /*mmnif->tx_buff[0] = kmalloc(MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); if (!(mmnif->tx_buff[0])) { DEBUGPRINTF("mmnif init: out of memory tx\n"); return ERR_MEM; - } - mmnif->tx_queue = 0; - memset(mmnif->tx_buff[0], 0x00, MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); + }*/ + //mmnif->tx_queue = 0; + //memset(mmnif->tx_buff[0], 0x00, MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); - for (i=0; itx_buff[i + 1] = mmnif->tx_buff[i] + MMNIF_TX_BUFFERLEN; + //for (i=0; itx_buff[i + 1] = mmnif->tx_buff[i] + MMNIF_TX_BUFFERLEN; for (i=0; ilinkoutput = mmnif_tx; /* maximum transfer unit */ - netif->mtu = MMNIF_TX_BUFFERLEN; + netif->mtu = 1500; //MMNIF_TX_BUFFERLEN; /* broadcast capability, keep all default flags */ netif->flags |= NETIF_FLAG_BROADCAST; @@ -1704,7 +1681,7 @@ err_t mmnif_shutdown(void) err = netifapi_netif_set_down(mmnif_dev); - kfree(mmnif->tx_buff[0], MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); + //kfree(mmnif->tx_buff[0], MMNIF_TX_QUEUELEN * MMNIF_TX_BUFFERLEN); //RCCE_shfree(mpb_start_address); mmnif_dev = NULL;