qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] Re: ata devices on emulated amd64 on qemu


From: Juergen Lock
Subject: [Qemu-devel] Re: ata devices on emulated amd64 on qemu
Date: Mon, 1 Aug 2005 23:54:10 +0200
User-agent: Mutt/1.4.2.1i

On Mon, Aug 01, 2005 at 05:30:47PM +0800, Mars G. Miro wrote:
> On 8/1/05, Mars G. Miro <address@hidden> wrote:
> > On 8/1/05, Mars G. Miro <address@hidden> wrote:
> > > On 7/30/05, Mars G. Miro <address@hidden> wrote:
> > > > On 7/30/05, Jung-uk Kim <address@hidden> wrote:
> > > > > Okay.  I finally found a fix.  It was actually quite simple.  Newer 
> > > > > FreeBSD and Linux ATA drivers check whether the PCI ATA controller is
> > 
> > > > > in legacy ATA mode (aka PATA mode).  The test failed and it was 
> > > > > treated like a SATA controller.  Of course, IRQ failed to map. ;-)  
> > > > > Try the attached patch.  Tested with FreeBSD/amd64 6.0-BETA1 guest on
> > 
> > > > > FreeBSD/amd64 host.
> > > > > 
> > > > 
> > > > 
> > > > You rock dude! This  patch fixes it. FreeBSD54/amd64 Guest on
> > > > FreeBSD54/amd64 Host.
> > > > 
> > > > Any thoughts of including this patch in the ports?
> > > > 
> > > > 
> > > 
> > > 
> > > Oops. I noticed only now that this time, it's the emulated NE2000 NIC
> > > that's not detected. This is for a FreeBSD/amd64 guest on
> > > FreeBSD/amd64 Host.
> > > 
> > 
> > 
> > Scratch that. 
> > 
> > This is only because there's no ed in the GENERIC kernel for AMD64.
> > 
> 
> because we dropped support for it?
> 
> cc -c -O2 -frename-registers -pipe -fno-strict-aliasing  -Wall
> -Wredundant-decls -Wnested-externs -Wstrict-prototypes 
> -Wmissing-prototypes -Wpointer-
> arith -Winline -Wcast-qual  -fformat-extensions -std=c99  -nostdinc
> -I-  -I. -I/usr/src/sys -I/usr/src/sys/contrib/dev/acpica
> -I/usr/src/sys/contrib/a
> ltq -I/usr/src/sys/contrib/ipfilter -I/usr/src/sys/contrib/pf
> -I/usr/src/sys/contrib/dev/ath -I/usr/src/sys/contrib/dev/ath/freebsd
> -I/usr/src/sys/con
> trib/ngatm -D_KERNEL -include opt_global.h -fno-common
> -finline-limit=8000 --param inline-unit-growth=100 --param
> large-function-growth=1000  -mcmodel
> =kernel -mno-red-zone  -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx
> -mno-3dnow  -msoft-float -fno-asynchronous-unwind-tables
> -ffreestanding -Werror  /usr/
> src/sys/dev/ed/if_ed.c
> /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_WD80x3_generic':
> /usr/src/sys/dev/ed/if_ed.c:508: warning: implicit declaration of
> function `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:521: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c:532: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c:539: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c:547: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c:570: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_3Com':
> /usr/src/sys/dev/ed/if_ed.c:905: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_SIC':
> /usr/src/sys/dev/ed/if_ed.c:998: warning: nested extern declaration of `kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of 'kvtop'
> /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> declaration of 'kvtop' was here
> *** Error code 1
> 
> ugh :-(

Aha, amd64 doesnt have kvtop anymore.  Try the following patch:
(compiles on i386, it should fix amd64 if you are lucky - as long as
kvtop is the only problem...)

Index: if_ed.c
@@ -205,7 +205,7 @@
        int     i;
        u_int   memsize, maddr;
        u_char  iptr, isa16bit, sum, totalsum;
-       u_long  conf_maddr, conf_msize, irq, junk;
+       u_long  conf_maddr, conf_msize, irq, junk, mphys;
 
        sc->chip_type = ED_CHIP_TYPE_DP8390;
 
@@ -474,6 +474,7 @@
                return (error);
        }
        sc->mem_start = (caddr_t) rman_get_virtual(sc->mem_res);
+       mphys = rman_get_start(sc->mem_res);
 
        /*
         * allocate one xmit buffer if < 16k, two buffers otherwise
@@ -505,7 +506,7 @@
                        sc->wd_laar_proto = ed_asic_inb(sc, ED_WD_LAAR);
                } else {
                        sc->wd_laar_proto = ED_WD_LAAR_L16EN |
-                           ((kvtop(sc->mem_start) >> 19) & ED_WD_LAAR_ADDRHI);
+                           ((mphys >> 19) & ED_WD_LAAR_ADDRHI);
                }
                /*
                 * Enable 16bit access
@@ -518,7 +519,7 @@
                     (sc->type == ED_TYPE_TOSHIBA4) ||
                     (sc->type == ED_TYPE_WD8013EBT)) &&
                    (sc->chip_type != ED_CHIP_TYPE_WD790)) {
-                       sc->wd_laar_proto = (kvtop(sc->mem_start) >> 19) &
+                       sc->wd_laar_proto = (mphys >> 19) &
                            ED_WD_LAAR_ADDRHI;
                        ed_asic_outb(sc, ED_WD_LAAR, sc->wd_laar_proto);
                }
@@ -530,22 +531,22 @@
        if (sc->chip_type != ED_CHIP_TYPE_WD790) {
                if (ED_FLAGS_GETTYPE(flags) == ED_FLAGS_TOSH_ETHER) {
                        ed_asic_outb(sc, ED_WD_MSR + 1,
-                                    ((kvtop(sc->mem_start) >> 8) & 0xe0) | 4);
+                                    ((mphys >> 8) & 0xe0) | 4);
                        ed_asic_outb(sc, ED_WD_MSR + 2,
-                                    ((kvtop(sc->mem_start) >> 16) & 0x0f));
+                                    ((mphys >> 16) & 0x0f));
                        ed_asic_outb(sc, ED_WD_MSR,
                                     ED_WD_MSR_MENB | ED_WD_MSR_POW);
                } else {
                        ed_asic_outb(sc, ED_WD_MSR,
-                                    ((kvtop(sc->mem_start) >> 13) &
+                                    ((mphys >> 13) &
                                      ED_WD_MSR_ADDR) | ED_WD_MSR_MENB);
                }
                sc->cr_proto = ED_CR_RD2;
        } else {
                ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB);
                ed_asic_outb(sc, ED_WD790_HWR, (ed_asic_inb(sc, ED_WD790_HWR) | 
ED_WD790_HWR_SWH));
-               ed_asic_outb(sc, ED_WD790_RAR, ((kvtop(sc->mem_start) >> 13) & 
0x0f) |
-                    ((kvtop(sc->mem_start) >> 11) & 0x40) |
+               ed_asic_outb(sc, ED_WD790_RAR, ((mphys >> 13) & 0x0f) |
+                    ((mphys >> 11) & 0x40) |
                     (ed_asic_inb(sc, ED_WD790_RAR) & 0xb0));
                ed_asic_outb(sc, ED_WD790_HWR, (ed_asic_inb(sc, ED_WD790_HWR) & 
~ED_WD790_HWR_SWH));
                sc->cr_proto = 0;
@@ -567,7 +568,7 @@
        for (i = 0; i < memsize; ++i) {
                if (sc->mem_start[i]) {
                        device_printf(dev, "failed to clear shared memory at 
%jx - check configuration\n",
-                                     (uintmax_t)kvtop(sc->mem_start + i));
+                                     (uintmax_t)mphys + i);
 
                        /*
                         * Disable 16 bit access to shared memory
@@ -902,7 +903,7 @@
        for (i = 0; i < memsize; ++i)
                if (sc->mem_start[i]) {
                        device_printf(dev, "failed to clear shared memory at 
%jx - check configuration\n",
-                                     (uintmax_t)kvtop(sc->mem_start + i));
+                                     (uintmax_t)rman_get_start(sc->mem_res) + 
i);
                        return (ENXIO);
                }
        return (0);
@@ -995,7 +996,7 @@
                if (sc->mem_start[i]) {
                        device_printf(dev, "failed to clear shared memory "
                                "at %jx - check configuration\n",
-                               (uintmax_t)kvtop(sc->mem_start + i));
+                               (uintmax_t)rman_get_start(sc->mem_res) + i);
 
                        return (ENXIO);
                }




reply via email to

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