minor changes

This commit is contained in:
Carl-Benedikt Krger 2011-06-20 12:04:34 +02:00
parent 2fede9cba7
commit 2a9d8b243f

View file

@ -49,6 +49,11 @@ extern HANDLE hProc;
#include <metalsvm/semaphore.h>
#include <asm/RCCE_lib.h>
#include <asm/iRCCE.h>
#include <asm/iRCCE_lib.h>
#endif
#define MMNIF_TX_QUEUELEN 4
@ -380,7 +385,7 @@ __inline int mmnif_write_rx_pending(uint32_t dest_ip,uint8_t pending)
return nr_of_bytes_written;
#else
memcpy((char*)mpb_start_address + ( dest_ip -1 ) * mpb_size ,&pending,1);
memcpy((char*)mpb_start_address + ( dest_ip -1 ) * mpb_size ,&queue,1);
return 1;
#endif
@ -408,7 +413,7 @@ __inline int mmnif_trigger_irq(dest_ip)
/**/
value = inportl((void*)irq_address);
if ((!pulse_irq) && (value & RCK_INTR_MASK))
if (!pulse_irq) && (value & RCK_INTR_MASK))
{
value &= (~(RCK_INTR_MASK|RCK_NMI_MASK));
outportl((void*)irq_address,value);
@ -420,7 +425,7 @@ __inline int mmnif_trigger_irq(dest_ip)
/**/
if (pulse_irq)
{
value &= (~(RCK_INTR_MASK|RCK_NMI_MASK));
value &= (~(RCK_INTR_MASK|NMI_MASK));
outportl((void*)irq_address,value);
}
@ -435,12 +440,9 @@ __inline int mmnif_trigger_irq(dest_ip)
__inline int mmnif_device_schedule()
{
#ifdef WIN32
bthread_t polling_thread;
bthread_create(&polling_thread,NULL,mmnif_poll,NULL);
return NULL;
#else
tid_t polling_thread;
create_kernel_task(&polling_thread,mmnif_poll,NULL);
return NULL;
#endif
@ -477,7 +479,7 @@ __inline void* mmnif_shmalloc()
mpb_size = sizeof(mm_rx_buffer_t) + MMNIF_RX_QUEUELEN* MMNIF_RX_BUFFERLEN;
mpb_start_address = VirtualAlloc((char*)0x41000000 /*+
(mpb_size) * (own_ip_address - router_ip_address)*/,
mpb_size *2,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
mpb_size *MMNIF_CORES,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);
return (char*)0x41000000 + (mpb_size) * (own_ip_address - router_ip_address);
#else
@ -485,35 +487,48 @@ __inline void* mmnif_shmalloc()
/* We choose a arbitrary address first
* until i know how to properly allocate shared memory
*/
mpb_start_address = 0x8000000+ mpb_size * (own_ip_address - router_ip_address);
return mpb_start_address;
mpb_start_address = RCCE_shmalloc(mpb_size*MMNIF_CORES);
//mpb_start_address = 0x8000000+ mpb_size * (own_ip_address - router_ip_address);
return mpb_start_address + (mpb_size) * (own_ip_address - router_ip_address);
#endif
}
/* mmnif_lock_rx_hdr(): lock the header of mm_rx_buffer
* so there is no race condition on the variables
*/
__inline void mmnif_lock_rx_hdr(int dest_ip)
{
#ifdef WIN32
mm_rx_buffer_t hdr;
if(disable_locking) return;
while(!ReadProcessMemory(hProc,(char*)mpb_start_address + ( dest_ip -1 ) * mpb_size,&hdr,sizeof(hdr),NULL));
sem_wait(&hdr.lock);
#else
if(disable_locking) return;
mm_rx_buffer_t* hdr = (char*)mpb_start_address + ( dest_ip -1 ) * mpb_size;
sem_wait(&hdr->lock);
#endif
}
/* mmnif_unlock_rx_hdr(): unlock the header
* again
*/
__inline void mmnif_unlock_rx_hdr(int dest_ip)
{
#ifdef WIN32
mm_rx_buffer_t hdr;
if(disable_locking) return;
while(!ReadProcessMemory(hProc,(char*)mpb_start_address + ( dest_ip -1 ) * mpb_size,&hdr,sizeof(hdr),NULL));
sem_post(&hdr.lock);
#else
if(disable_locking) return;
mm_rx_buffer_t* hdr = (char*)mpb_start_address + ( dest_ip -1 ) * mpb_size;
sem_post(&hdr->lock);
#endif
}
/* mmnif_timestamp(): genereate a timestamp for the
* packets
*/
__inline int mmnif_timestamp()
{
#ifdef WIN32
@ -882,10 +897,11 @@ err_t mmnif_init(struct netif* netif)
num++;
/* downward functions */
netif->output = mmnif_link_layer;
/* there is no special link layer just the ip layer */
netif->linkoutput = mmnif_tx;
/* maximum transfer unit */
netif->mtu = 1500;
/* broadcast capability */
/* broadcast capability, keep all default flags*/
netif->flags |= NETIF_FLAG_BROADCAST /*| NETIF_FLAG_ETHARP*/ | NETIF_FLAG_LINK_UP;
/* hardware address length */
netif->hwaddr_len = 6;
@ -987,10 +1003,10 @@ static void mmnif_rx(struct netif* netif)
mmnif->stats.rx_bytes += p->tot_len;
if (no_irq)
mmnif->stats.rx_poll++;
else
if (mmnif->rx_buff->iv_intr)
mmnif->stats.rx_intr++;
else
mmnif->stats.rx_poll++;
return;