From owner-freebsd-emulation@FreeBSD.ORG Mon Aug 1 21:56:42 2005 Return-Path: X-Original-To: freebsd-emulation@freebsd.org Delivered-To: freebsd-emulation@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id EB6A916A41F; Mon, 1 Aug 2005 21:56:41 +0000 (GMT) (envelope-from qemu-l@saturn.kn-bremen.de) Received: from gwyn.kn-bremen.de (gwyn.kn-bremen.de [212.63.36.242]) by mx1.FreeBSD.org (Postfix) with ESMTP id 39CBA43D45; Mon, 1 Aug 2005 21:56:39 +0000 (GMT) (envelope-from qemu-l@saturn.kn-bremen.de) Received: from gwyn.kn-bremen.de (gwyn [127.0.0.1]) by gwyn.kn-bremen.de (8.13.4/8.13.4/Debian-3) with ESMTP id j71Lubqd000985; Mon, 1 Aug 2005 23:56:37 +0200 Received: from saturn.kn-bremen.de (uucp@localhost) by gwyn.kn-bremen.de (8.13.4/8.13.4/Submit) with UUCP id j71LubOC000983; Mon, 1 Aug 2005 23:56:37 +0200 Received: from saturn.kn-bremen.de (localhost [127.0.0.1]) by saturn.kn-bremen.de (8.13.1/8.13.1) with ESMTP id j71LsDHH011493; Mon, 1 Aug 2005 23:54:13 +0200 (CEST) (envelope-from nox@saturn.kn-bremen.de) Received: (from nox@localhost) by saturn.kn-bremen.de (8.13.1/8.13.1/Submit) id j71LsCHM011492; Mon, 1 Aug 2005 23:54:12 +0200 (CEST) (envelope-from nox) From: Juergen Lock Date: Mon, 1 Aug 2005 23:54:10 +0200 To: "Mars G. Miro" Message-ID: <20050801215410.GA10633@saturn.kn-bremen.de> Mail-Followup-To: "Mars G. Miro" , Jung-uk Kim , freebsd-emulation@freebsd.org, qemu-devel@nongnu.org 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> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <28edec3c0508010230226b4ae@mail.gmail.com> User-Agent: Mutt/1.4.2.1i Cc: freebsd-emulation@freebsd.org, qemu-devel@nongnu.org, Jung-uk Kim Subject: Re: ata devices on emulated amd64 on qemu X-BeenThere: freebsd-emulation@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Development of Emulators of other operating systems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Aug 2005 21:56:42 -0000 On Mon, Aug 01, 2005 at 05:30:47PM +0800, Mars G. Miro wrote: > On 8/1/05, Mars G. Miro wrote: > > On 8/1/05, Mars G. Miro wrote: > > > On 7/30/05, Mars G. Miro wrote: > > > > On 7/30/05, Jung-uk Kim 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); }