Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Aug 2000 12:46:39 +0900
From:      Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
To:        Peter Jeremy <peter.jeremy@alcatel.com.au>
Cc:        freebsd-current@freebsd.org, Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
Subject:   Re: Newbusifying ed broke it
Message-ID:  <86wvhga6sg.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 11:13:25 %2B1000" <00Aug17.111332est.115207@border.alcanet.com.au>
References:  <00Aug17.111332est.115207@border.alcanet.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help
--Multipart_Thu_Aug_17_12:46:38_2000-1
Content-Type: text/plain; charset=US-ASCII

On Thu, 17 Aug 2000 11:13:25 +1000,
  Peter Jeremy <peter.jeremy@alcatel.com.au> said:

peter.jeremy> I have an SMC8016 NIC which should probe as:
peter.jeremy> ed0 at port 0x300-0x31f iomem 0xcc000-0xcffff irq 7 on isa0
peter.jeremy> ed0: address 00:00:c0:57:99:47, type WD8013EPC (16 bit) 

peter.jeremy> After the following commit:
(snip)

peter.jeremy> a verbose boot shows:
peter.jeremy> ed0: failed to clear shared memory at cc000 - check configuration
peter.jeremy> ed0 failed to probe at port 0x300-0x31f iomem 0xcc000-0xcffff irq 7 on isa0

Newbusification in the last commit was not done completely because
resource tags and handles were not used proplerly. Could you please
apply the following patch and see if your card works?


--Multipart_Thu_Aug_17_12:46:38_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 03:38:36
@@ -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->port_res), rman_get_bushandle(sc->port_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,7 +622,7 @@
 	/*
 	 * 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) {
@@ -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,7 +938,7 @@
 	/*
 	 * 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) {
@@ -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 03:38:37
@@ -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 03:38:37
@@ -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_12:46:38_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_12:46:38_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?86wvhga6sg.wl>