Esempio n. 1
0
int
ae_eth_sendv(struct ae_recv *outgoing, int netcardno)
{
   int ret = 0;
   int sz, i;
   char filler[ETHER_MIN_LEN];
   volatile uint pending = 1;

   assert (netcardno < XOKNET_MAXNETS);

   /* make sure size is >= ETHER_MIN_LEN */
   for (sz = 0, i = 0; i < outgoing->n; i++) {
      sz += outgoing->r[i].sz;
   }

   if (sz < ETHER_MIN_LEN) {
      outgoing->r[outgoing->n].sz = ETHER_MIN_LEN - sz;
      outgoing->r[outgoing->n].data = &filler[0];
      outgoing->n++;
   }

   ret = sys_net_xmit (netcardno, outgoing, (uint *) &pending, 1);
   assert ((ret == 0) || (ret == -1));

   while ((ret == 0) && pending > 0) 
   { 
     sys_geteid(); 
     asm volatile ("" : : : "memory");
   }

   return (ret);
}
Esempio n. 2
0
int
ae_eth_send(void *d, int sz, int netcardno)
{
   int ret = 0;
   volatile uint pending = 1;
   char filler[ETHER_MIN_LEN];
   struct ae_recv recv;

   recv.r[0].data = d;
   recv.r[0].sz = sz;
   recv.n = 1;

   assert (netcardno < XOKNET_MAXNETS);

   if (sz < ETHER_MIN_LEN) {
      recv.r[1].data = filler;
      recv.r[1].sz = ETHER_MIN_LEN - sz;
      recv.n = 2;
   }

   ret = sys_net_xmit (netcardno, &recv, (uint *) &pending, 1);
   assert ((ret == 0) || (ret == -1));

   while ((ret == 0) && (pending > 0)) 
   { 
     sys_geteid(); 
     asm volatile ("" : : : "memory");
   }

   return (ret);
}
Esempio n. 3
0
void send_packet (int netcardno, struct ae_recv *outpkt)
{
#ifdef DIRECT_XMIT
   int ret = 0;
   while (sys_net_xmit (netcardno, outpkt, NULL, 0) != 0) ;
#else
   int ret = xio_net_wrap_send ((netcardno + 1), outpkt, 64);
#endif
   assert (ret == 0);
}
Esempio n. 4
0
static int send_pkt(char *pkt, int len)
{
  struct ae_recv recv;
  int ret;

  recv.n = 1;
  recv.r[0].sz = len;
  recv.r[0].data = pkt;

  do {
    ret = sys_net_xmit (0, 1, &recv, NULL, 0);
    if (ret < 0) {
      DBG(printf ("SYS_ED0XMIT FAILED! ret=%d\n", ret));
      edintr(0); 
    }
  } while (ret < 0);


  DBG(printf("SENT>\n");)
  return 1;