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); }
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); }
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); }
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;