Date: Thu, 17 Aug 2000 16:55:57 +0900 From: Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> To: Peter Jeremy <peter.jeremy@alcatel.com.au> Cc: tanimura@r.dl.itc.u-tokyo.ac.jp, freebsd-current@freebsd.org Subject: Re: Newbusifying ed broke it Message-ID: <86vgx09v8y.wl@bunko.carrots.uucp.r.dl.itc.u-tokyo.ac.jp.nkth.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> In-Reply-To: In your message of "Thu, 17 Aug 2000 15:35:59 %2B1000" <00Aug17.153605est.115251@border.alcanet.com.au> References: <00Aug17.111332est.115207@border.alcanet.com.au> <86wvhga6sg.wl@bunko.carrots.uucp.r.dl.itc.u-tokyo.ac.jp.nkth.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> <00Aug17.153605est.115251@border.alcanet.com.au>
next in thread | previous in thread | raw e-mail | index | archive | help
--Multipart_Thu_Aug_17_16:55:57_2000-1
Content-Type: text/plain; charset=US-ASCII
On Thu, 17 Aug 2000 15:35:59 +1000,
Peter Jeremy <peter.jeremy@alcatel.com.au> said:
peter.jeremy> Still not working. It now reports:
peter.jeremy> ed0: failed to clear shared memory at 0 - check configuration
The probe routine cleared and tested IO port instead of memory. Does
the following patch work?
--Multipart_Thu_Aug_17_16:55:57_2000-1
Content-Type: text/plain; type=patch; charset=US-ASCII
Content-Disposition: attachment; filename="if_ed-2.diff"
Content-Transfer-Encoding: 7bit
Index: if_ed.c
===================================================================
RCS file: /home/naklab/tanimura/rina2/CVS/FreeBSD/sys/dev/ed/if_ed.c,v
retrieving revision 1.1.1.4.6.8
diff -u -r1.1.1.4.6.8 if_ed.c
--- if_ed.c 2000/08/16 07:38:31 1.1.1.4.6.8
+++ if_ed.c 2000/08/17 07:21:34
@@ -164,7 +164,7 @@
static void
ed_writeb(struct ed_softc *sc, int regno, u_char data)
{
- bus_space_write_1(sc->bst, sc->bsh, regno, data);
+ bus_space_write_1(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res), regno, data);
}
/*
@@ -173,7 +173,7 @@
static u_char
ed_readb(struct ed_softc *sc, int regno)
{
- return bus_space_read_1(sc->bst, sc->bsh, regno);
+ return bus_space_read_1(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res), regno);
}
/*
@@ -182,7 +182,7 @@
static void
ed_writew(struct ed_softc *sc, int regno, u_int16_t data)
{
- bus_space_write_2(sc->bst, sc->bsh, regno, data);
+ bus_space_write_2(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res), regno, data);
}
/*
@@ -191,7 +191,7 @@
static u_int16_t
ed_readw(struct ed_softc *sc, int regno)
{
- return bus_space_read_2(sc->bst, sc->bsh, regno);
+ return bus_space_read_2(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res), regno);
}
/*
@@ -200,7 +200,7 @@
static void
ed_writesw(struct ed_softc *sc, int regno, const u_int16_t *addr, size_t cnt)
{
- bus_space_write_multi_2(sc->bst, sc->bsh, regno,
+ bus_space_write_multi_2(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res), regno,
addr, cnt);
}
@@ -210,7 +210,7 @@
static void
ed_bcopy_from(struct ed_softc *sc, caddr_t dst, int regno, size_t cnt)
{
- bus_space_read_multi_1(sc->bst, sc->bsh, regno,
+ bus_space_read_multi_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), regno,
dst, cnt);
}
@@ -270,8 +270,8 @@
if (error)
return (error);
- sc->asic_addr = rman_get_start(sc->port_res);
- sc->nic_addr = sc->asic_addr + ED_WD_NIC_OFFSET;
+ sc->asic_addr = 0;
+ sc->nic_addr = ED_WD_NIC_OFFSET;
sc->chip_type = ED_CHIP_TYPE_DP8390;
if (ED_FLAGS_GETTYPE(flags) == ED_FLAGS_TOSH_ETHER) {
@@ -534,7 +534,7 @@
printf("*** ed_alloc_memory() failed! (%d)\n", error);
return (error);
}
- sc->mem_start = rman_get_start(sc->mem_res);
+ sc->mem_start = 0;
/*
* allocate one xmit buffer if < 16k, two buffers otherwise
@@ -614,7 +614,7 @@
printf("starting memory performance test at 0x%x, size %d...\n",
sc->mem_start, memsize*16384);
for (i = 0; i < 16384; i++)
- bus_space_set_multi_1(sc->bst, sc->bsh, sc->mem_start,
+ bus_space_set_multi_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), sc->mem_start,
0x0, memsize);
printf("***DONE***\n");
#endif
@@ -622,11 +622,11 @@
/*
* Now zero memory and verify that it is clear
*/
- bus_space_set_multi_1(sc->bst, sc->bsh, sc->mem_start,
+ bus_space_set_multi_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), sc->mem_start,
0x0, memsize);
for (i = 0; i < memsize; ++i) {
- if (ed_readb(sc, sc->mem_start + i) != 0) {
+ if (bus_space_read_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), sc->mem_start + i) != 0) {
device_printf(dev, "failed to clear shared memory at %lx - check configuration\n",
sc->mem_start + i);
@@ -681,8 +681,8 @@
if (error)
return (error);
- sc->asic_addr = rman_get_start(sc->port_res) + ED_3COM_ASIC_OFFSET;
- sc->nic_addr = rman_get_start(sc->port_res) + ED_3COM_NIC_OFFSET;
+ sc->asic_addr = ED_3COM_ASIC_OFFSET;
+ sc->nic_addr = ED_3COM_NIC_OFFSET;
/*
* Verify that the kernel configured I/O address matches the board
@@ -848,7 +848,7 @@
if (error)
return (error);
- sc->mem_start = rman_get_start(sc->mem_res);
+ sc->mem_start = 0;
sc->mem_size = memsize;
sc->mem_end = sc->mem_start + memsize;
@@ -938,10 +938,10 @@
/*
* Zero memory and verify that it is clear
*/
- bus_space_set_multi_1(sc->bst, sc->bsh, sc->mem_start, 0x0, memsize);
+ bus_space_set_multi_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), sc->mem_start, 0x0, memsize);
for (i = 0; i < memsize; ++i)
- if (ed_readb(sc, sc->mem_start + i) != 0) {
+ if (bus_space_read_1(rman_get_bustag(sc->mem_res), rman_get_bushandle(sc->mem_res), sc->mem_start + i) != 0) {
device_printf(dev, "failed to clear shared memory at %lx - check configuration\n",
sc->mem_start + i);
return (ENXIO);
@@ -1006,8 +1006,8 @@
if (error)
return (error);
- sc->asic_addr = rman_get_start(sc->port_res) + ED_NOVELL_ASIC_OFFSET;
- sc->nic_addr = rman_get_start(sc->port_res) + ED_NOVELL_NIC_OFFSET;
+ sc->asic_addr = ED_NOVELL_ASIC_OFFSET;
+ sc->nic_addr = ED_NOVELL_NIC_OFFSET;
/* XXX - do Novell-specific probe here */
@@ -1259,8 +1259,8 @@
return (error);
/* Fill in basic information */
- sc->asic_addr = rman_get_start(sc->port_res) + ED_HPP_ASIC_OFFSET;
- sc->nic_addr = rman_get_start(sc->port_res) + ED_HPP_NIC_OFFSET;
+ sc->asic_addr = ED_HPP_ASIC_OFFSET;
+ sc->nic_addr = ED_HPP_NIC_OFFSET;
sc->chip_type = ED_CHIP_TYPE_DP8390;
sc->isa16bit = 0; /* the 8390 core needs to be in byte mode */
@@ -1409,7 +1409,7 @@
if (error)
return (error);
- sc->hpp_mem_start = rman_get_start(sc->mem_res);
+ sc->hpp_mem_start = 0;
}
/*
@@ -2793,11 +2793,11 @@
ed_writeb(sc, sc->nic_addr + ED_P0_CR, ED_CR_RD0 | ED_CR_STA);
if (sc->isa16bit)
- bus_space_read_multi_2(sc->bst, sc->bsh,
+ bus_space_read_multi_2(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_NOVELL_DATA,
(u_int16_t *) dst, amount / 2);
else
- bus_space_read_multi_1(sc->bst, sc->bsh,
+ bus_space_read_multi_1(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_NOVELL_DATA,
(u_int8_t *) dst, amount);
@@ -2840,7 +2840,7 @@
ed_writesw(sc, sc->asic_addr + ED_NOVELL_DATA,
(u_int16_t *) src, len / 2);
else
- bus_space_write_multi_1(sc->bst, sc->bsh,
+ bus_space_write_multi_1(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_NOVELL_DATA,
src, len);
@@ -2957,7 +2957,7 @@
/* NE1000s are easy */
while (m) {
if (m->m_len)
- bus_space_write_multi_1(sc->bst, sc->bsh,
+ bus_space_write_multi_1(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_NOVELL_DATA,
m->m_data, m->m_len);
m = m->m_next;
@@ -3115,14 +3115,14 @@
} else {
/* Read in data using the I/O port */
if (use_32bit_access && (amount > 3)) {
- bus_space_read_multi_4(sc->bst, sc->bsh,
+ bus_space_read_multi_4(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_HPP_PAGE_4,
(u_int32_t *) dst, amount >> 2);
dst += (amount & ~3);
amount &= 3;
}
if (amount > 1) {
- bus_space_read_multi_2(sc->bst, sc->bsh,
+ bus_space_read_multi_2(rman_get_bustag(sc->port_res), rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_HPP_PAGE_4,
(u_int16_t *) dst, amount >> 1);
dst += (amount & ~1);
@@ -3229,8 +3229,8 @@
}
/* output contiguous words */
if ((len > 3) && use_32bit_accesses) {
- bus_space_write_multi_4(sc->bst,
- sc->bsh,
+ bus_space_write_multi_4(rman_get_bustag(sc->port_res),
+ rman_get_bushandle(sc->port_res),
sc->asic_addr + ED_HPP_PAGE_4,
(u_int32_t *) data, len);
data += (len & ~3);
@@ -3364,8 +3364,8 @@
};
/* Default Set */
- sc->asic_addr = rman_get_start(sc->port_res) + ED_NOVELL_ASIC_OFFSET;
- sc->nic_addr = rman_get_start(sc->port_res) + ED_NOVELL_NIC_OFFSET;
+ sc->asic_addr = ED_NOVELL_ASIC_OFFSET;
+ sc->nic_addr = ED_NOVELL_NIC_OFFSET;
/* Reset Card */
tmp = ed_readb(sc, sc->asic_addr + ED_NOVELL_RESET);
ed_writeb(sc, sc->asic_addr + ED_NOVELL_RESET, tmp);
Index: if_ed_pccard.c
===================================================================
RCS file: /home/naklab/tanimura/rina2/CVS/FreeBSD/sys/dev/ed/if_ed_pccard.c,v
retrieving revision 1.1.1.3.6.4
diff -u -r1.1.1.3.6.4 if_ed_pccard.c
--- if_ed_pccard.c 2000/08/16 07:38:31 1.1.1.3.6.4
+++ if_ed_pccard.c 2000/08/17 07:21:35
@@ -144,9 +144,7 @@
attr_ioport = rdbuf[2] << 8 | rdbuf[0];
iobase = rman_get_start(sc->port_res);
if (attr_ioport != iobase) {
-#if notdef
- printf("AX88190 IOBASE MISMATCH %04x -> %04x Setting\n",attr_ioport,iobase);
-#endif /* notdef */
+ /* Write the IO port address to the chip. */
ed_pccard_memwrite(dev,ED_AX88190_IOBASE0,iobase & 0xff);
ed_pccard_memwrite(dev,ED_AX88190_IOBASE1,(iobase >> 8) & 0xff);
}
Index: if_edvar.h
===================================================================
RCS file: /home/naklab/tanimura/rina2/CVS/FreeBSD/sys/dev/ed/if_edvar.h,v
retrieving revision 1.1.1.1.24.3
diff -u -r1.1.1.1.24.3 if_edvar.h
--- if_edvar.h 2000/08/16 07:38:31 1.1.1.1.24.3
+++ if_edvar.h 2000/08/17 07:21:35
@@ -48,9 +48,6 @@
struct resource* irq_res; /* resource for irq */
void* irq_handle; /* handle for irq handler */
- bus_space_tag_t bst; /* Bus Space tag */
- bus_space_handle_t bsh; /* Bus Space handle */
-
#ifdef __alpha__
u_int asic_addr; /* ASIC I/O bus address */
u_int nic_addr; /* NIC (DS8390) I/O bus address */
--Multipart_Thu_Aug_17_16:55:57_2000-1
Content-Type: text/plain; charset=US-ASCII
--
Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> <tanimura@FreeBSD.org>
--Multipart_Thu_Aug_17_16:55:57_2000-1--
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86vgx09v8y.wl>
