From a5b402b1f5d4303107d2fd548646809276abd465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Benedikt=20Kr=C3=BCger?= Date: Thu, 4 Aug 2011 15:02:23 +0200 Subject: [PATCH] ... --- drivers/net/mmnif.c | 66 +++++++++++++++++++++------------------------ kernel/tests.c | 4 +-- 2 files changed, 32 insertions(+), 38 deletions(-) diff --git a/drivers/net/mmnif.c b/drivers/net/mmnif.c index 8c45fad4..bb723a35 100644 --- a/drivers/net/mmnif.c +++ b/drivers/net/mmnif.c @@ -76,8 +76,6 @@ extern HANDLE hProc; * regarding the driver & its configuration */ -/* - */ #define MMNIF_TX_BUFFERLEN 1792 #define MMNIF_TX_QUEUELEN 4 @@ -128,9 +126,6 @@ static unsigned int router_ip_address = 0xC0A80001; /* 192.168.0.1 */ char* mpb_start_address = NULL; unsigned int mpb_size = NULL; -/* just set and reset the irq */ -static int pulse_irq = 0; - /* * the memory mapped network device */ @@ -184,19 +179,18 @@ typedef struct rx_desc /* receive ring buffer structure */ typedef struct mm_rx_buffer { - /* - * + /* iv_intr: inform via interrupt + * states whether the interface wants to recieve an interrupt for + * incoming packet + */ + uint16_t iv_intr; + /* memory "pseudo-ring/heap" + * packets are always in one single chunk of memory + * head : head of allocated memory region + * tail : tail of allocated memory region */ - uint16_t iv_intr; - uint16_t roffset; - uint16_t woffset; - uint32_t head; - uint32_t tail; - uint16_t tot_bytes; - uint16_t free_bytes; - uint16_t free_bytes_head; - uint16_t free_bytes_tail; - spinlock_t wlock; + uint16_t head; + uint16_t tail; spinlock_t rlock; /* * @@ -429,22 +423,22 @@ uint32_t mmnif_rxbuff_alloc(uint8_t dest,uint16_t len) if (rb->dcount) { - if (rb->woffset > rb->roffset) + if (rb->tail > rb->head) { - if (MMNIF_RX_BUFFERLEN - rb->woffset > len) + if (MMNIF_RX_BUFFERLEN - rb->tail > len) { rb->desc_table[rb->dwrite].stat = MMNIF_STATUS_PENDING; - ret = memblock + rb->woffset; + ret = memblock + rb->tail; rb->desc_table[rb->dwrite].addr = ret; rb->desc_table[rb->dwrite].len = len; rb->dcount--; rb->dwrite = (++rb->dwrite)%MMNIF_MAX_DESCRIPTORS; - rb->woffset = (rb->woffset + len); + rb->tail = (rb->tail + len); spinlock_unlock(&rb->dlock); return ret; } - else if (rb->roffset > len) + else if (rb->head > len) { rb->desc_table[rb->dwrite].stat = MMNIF_STATUS_PENDING; ret = memblock; @@ -453,7 +447,7 @@ uint32_t mmnif_rxbuff_alloc(uint8_t dest,uint16_t len) rb->dcount--; rb->dwrite = (++rb->dwrite)%MMNIF_MAX_DESCRIPTORS; - rb->woffset = len; + rb->tail = len; spinlock_unlock(&rb->dlock); return ret; } @@ -465,36 +459,36 @@ uint32_t mmnif_rxbuff_alloc(uint8_t dest,uint16_t len) } else { - if (rb->roffset - rb->woffset > len) + if (rb->head - rb->tail > len) { rb->desc_table[rb->dwrite].stat = MMNIF_STATUS_PENDING; - ret = memblock + rb->woffset; + ret = memblock + rb->tail; rb->desc_table[rb->dwrite].addr = ret; rb->desc_table[rb->dwrite].len = len; rb->dcount--; rb->dwrite = (++rb->dwrite)%MMNIF_MAX_DESCRIPTORS; - rb->woffset = (rb->woffset + len); + rb->tail = (rb->tail + len); spinlock_unlock(&rb->dlock); return ret; } - else if (rb->woffset == rb->roffset) + else if (rb->tail == rb->head) { - if (MMNIF_RX_BUFFERLEN - rb->woffset < len) + if (MMNIF_RX_BUFFERLEN - rb->tail < len) { - rb->woffset = 0; + rb->tail = 0; if (rb->dread == rb->dwrite) - rb->roffset = 0; + rb->head = 0; } rb->desc_table[rb->dwrite].stat = MMNIF_STATUS_PENDING; - ret = memblock + rb->woffset; + ret = memblock + rb->tail; rb->desc_table[rb->dwrite].addr = ret; rb->desc_table[rb->dwrite].len = len; rb->dcount--; rb->dwrite = (++rb->dwrite)%MMNIF_MAX_DESCRIPTORS; - rb->woffset = (rb->woffset + len); + rb->tail = (rb->tail + len); spinlock_unlock(&rb->dlock); return ret; } @@ -555,21 +549,21 @@ void mmnif_rxbuff_free() b->dread = (b->dread +1)%MMNIF_MAX_DESCRIPTORS; b->desc_table[j].stat = MMNIF_STATUS_FREE; - if (b->woffset > b->roffset) + if (b->tail > b->head) { - b->roffset += b->desc_table[j].len; + b->head += b->desc_table[j].len; } else { if ( (b->desc_table[(j+1)%MMNIF_MAX_DESCRIPTORS].stat != MMNIF_STATUS_FREE ) && ( b->desc_table[j].addr > b->desc_table[(j+1)%MMNIF_MAX_DESCRIPTORS].addr)) { - b->roffset = 0; + b->head = 0; } else { - b->roffset += b->desc_table[j].len; + b->head += b->desc_table[j].len; } } } diff --git a/kernel/tests.c b/kernel/tests.c index 27f4aafd..09555c4d 100644 --- a/kernel/tests.c +++ b/kernel/tests.c @@ -158,7 +158,7 @@ void srv_on_conn(ServerEventArgs* e) { int i = 0, err = 0; int tmp1,tmp2; - char buff[256]; + char buff[1024]; SHELLDEBUGPRINTF("someone finally connected\n"); @@ -180,7 +180,7 @@ void srv_on_conn(ServerEventArgs* e) tmp2 = get_clock_tick(); // SHELLDEBUGPRINTF("send with %f kb/s",((float)i*sizeof(buff))/(tmp2-tmp1)); - SHELLDEBUGPRINTF("send %d kb in %d ticks",i*sizeof(buff),(tmp2-tmp1)); + SHELLDEBUGPRINTF("send %d bytes in %d ticks",i*sizeof(buff),(tmp2-tmp1)); } void* server_task(void* e)