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: Mars G. Miro
Subject: [Qemu-devel] Re: ata devices on emulated amd64 on qemu
Date: Tue, 2 Aug 2005 14:53:22 +0800

On 8/2/05, Juergen Lock <address@hidden> wrote:
> 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...)
>

Tried this patch. It does seem to work.

But there are other problems in emulated amd64 --- such as segfaults
here and there --- they seem to occur at random. This is for
{5.4/6.01-Beta} AMD64.

Thanks.


> 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]