{ /* SuperSocket RE450T */ 0x0110, 0x00, 0xe0, 0x98, 0 },
        { /* Volktek NPL-402CT */ 0x0060, 0x00, 0x40, 0x05, 0 },
        { /* NEC PC-9801N-J12 */ 0x0ff0, 0x00, 0x00, 0x4c, 0 },
-       { /* PCMCIA Technology OEM */ 0x01c8, 0x00, 0xa0, 0x0c, 0 }
+       { /* PCMCIA Technology OEM */ 0x01c8, 0x00, 0xa0, 0x0c, 0 },
+       { /* Qemu */ 0x0, 0x52, 0x54, 0x00, 0 }
 };
 
 #define NR_INFO                (sizeof(hw_info)/sizeof(hw_info_t))
 
 /* U-boot specific routines */
 
-#define NB 5
 
 static unsigned char *pbuf = NULL;
-static int plen[NB];
-static int nrx = 0;
 
 static int pkey = -1;
 static int initialized=0;
 
 void uboot_push_packet_len(int len) {
-       PRINTK("pushed len = %d, nrx = %d\n", len, nrx);
+       PRINTK("pushed len = %d\n", len);
        if (len>=2000) {
                printf("NE2000: packet too big\n");
                return;
        }
-       if (nrx >= NB) {
-               printf("losing packets in rx\n");
-               return;
-       }
-       plen[nrx] = len;
-       dp83902a_recv(&pbuf[nrx*2000], len);
+       dp83902a_recv(&pbuf[0], len);
 
        /*Just pass it to the upper layer*/
-       NetReceive(&pbuf[nrx*2000], plen[nrx]);
+       NetReceive(&pbuf[0], len);
 }
 
 void uboot_push_tx_done(int key, int val) {
        PRINTK("### eth_init\n");
 
        if (!pbuf) {
-               pbuf = malloc(NB*2000);
+               pbuf = malloc(2000);
                if (!pbuf) {
-                       printf("Cannot allocate rx buffers\n");
+                       printf("Cannot allocate rx buffer\n");
                        return -1;
                }
        }