[Top][All Lists]
[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);
}