Skip site navigation (1)Skip section navigation (2)
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>