[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] Re: playing with qemu's 8139 nic and FreeBSD (loopback mode

From: Igor Kovalenko
Subject: [Qemu-devel] Re: playing with qemu's 8139 nic and FreeBSD (loopback mode missing?)
Date: Sat, 29 Apr 2006 06:48:53 -0000
User-agent: Mail/News 1.5 (X11/20060319)

Juergen Lock wrote:
> On Fri, Apr 28, 2006 at 08:25:02PM +0400, Igor Kovalenko wrote:
>> Juergen Lock wrote:
>>> I played with
>>>     qemu -monitor stdio -m 256 -cdrom 6.1-RC1-i386-disc1.iso -usb -soundhw 
>>> es1370 -kernel-kqemu -net nic,model=rtl8139 -net user
>>> and got it as far as
>>>     re0: diagnostic failed, failed to receive packet in loopback mode
>>> (followed by a panic :) with the (experimental) patches below.
>>>  Anyone in the mood to implement loopback mode for this nic?
>>>  Hmm actually...  I just found the original posting in the archive,
>>> is C+ mode implemented now?  If not re is probably not what I want,
>> The rtl8139 is set up with PCI rev ID 0x20 which should be enough for OS 
>> driver
>> to detect C+ mode features. C+ mode is OK, tested with Linux driver.
> Cool, so I want FreeBSD's re driver.  That one checks TxConfig
> tho, as changed in my patch (inside #if 0).  And when changed,
> it still doesn't work as mentioned above because the driver expects
> loopback mode to be working.
>>> but the rl driver that it attaches without that #if 0'd (now) hunk
>>> below doesnt seem to be able to get data thru either and I get
>>>     rl0: watchdog timeout
>>> in dmesg, which usually means the driver doesnt receive interrupts.
>>>  What the heck, I'll append a log of a run just doing in fixit->cdrom:
>>>     ifconfig rl0
>>> and then exiting (which is enough to trigger the watchdog timeout...)
>> I'm too lasy to test with fresh freebsd installation :)
>  No need to install FreeBSD, you can get away by just using
> fixit mode of an install iso, i.e. disc1.  (which actually is
> what I did above. :)
>  You can look at 6.1RC's re driver here:
> http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/dev/re/if_re.c?annotate=
>  which includes:
> http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/pci/if_rlreg.h?annotate=
>  And 6.1RC disc1 iso is e.g. here:
> ftp://ftp.ru.freebsd.org:/pub/FreeBSD/ISO-IMAGES-i386/6.1/6.1-RC1-i386-disc1.iso

Thanks, that iso pointer made it.

Please try the following on top of your patch, at least ping should now work:

--- hw/rtl8139.c.freebsd        2006-04-29 10:44:43.000000000 +0400
+++ hw/rtl8139.c        2006-04-29 10:45:37.000000000 +0400
@@ -1979,6 +1979,18 @@
     return ret;

+static uint32_t rtl8139_RxBufAddr_read(RTL8139State *s)
+    /* this value is NOT off by 16 */
+    uint32_t ret = s->RxBufAddr;
+#ifdef DEBUG_RTL8139
+    printf("RTL8139: RxBufAddr read val=0x%04x\n", ret);
+    return ret;
 static void rtl8139_RxBuf_write(RTL8139State *s, uint32_t val)
 #ifdef DEBUG_RTL8139
@@ -2441,6 +2453,10 @@
             ret = rtl8139_RxBufPtr_read(s);

+        case RxBufAddr:
+            ret = rtl8139_RxBufAddr_read(s);
+            break;
         case BasicModeCtrl:
             ret = rtl8139_BasicModeCtrl_read(s);

Kind regards,
Igor V. Kovalenko

reply via email to

[Prev in Thread] Current Thread [Next in Thread]