Date: Mon, 1 Aug 2005 23:54:10 +0200 From: Juergen Lock <qemu-l@jelal.kn-bremen.de> To: "Mars G. Miro" <marsgmiro@gmail.com> Cc: freebsd-emulation@freebsd.org, qemu-devel@nongnu.org, Jung-uk Kim <jkim@freebsd.org> Subject: Re: ata devices on emulated amd64 on qemu Message-ID: <20050801215410.GA10633@saturn.kn-bremen.de> In-Reply-To: <28edec3c0508010230226b4ae@mail.gmail.com> References: <28edec3c0507290000415a350d@mail.gmail.com> <200507291540.52889.jkim@niksun.com> <200507291647.49230.jkim@niksun.com> <200507292022.38135.jkim@FreeBSD.org> <28edec3c050730045765b5262b@mail.gmail.com> <28edec3c05073119576445ec92@mail.gmail.com> <28edec3c050731203069f7c4a8@mail.gmail.com> <28edec3c0508010230226b4ae@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, Aug 01, 2005 at 05:30:47PM +0800, Mars G. Miro wrote: > On 8/1/05, Mars G. Miro <marsgmiro@gmail.com> wrote: > > On 8/1/05, Mars G. Miro <marsgmiro@gmail.com> wrote: > > > On 7/30/05, Mars G. Miro <marsgmiro@gmail.com> wrote: > > > > On 7/30/05, Jung-uk Kim <jkim@freebsd.org> 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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050801215410.GA10633>