...
This commit is contained in:
parent
695ca0da4f
commit
a5b402b1f5
2 changed files with 32 additions and 38 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue