From owner-freebsd-current Wed Aug 16 21:11:35 2000 Delivered-To: freebsd-current@freebsd.org Received: from rina.r.dl.itc.u-tokyo.ac.jp (rina.r.dl.itc.u-tokyo.ac.jp [133.11.199.247]) by hub.freebsd.org (Postfix) with ESMTP id 328B437B65B for ; Wed, 16 Aug 2000 21:11:24 -0700 (PDT) (envelope-from tanimura@r.dl.itc.u-tokyo.ac.jp) Received: (from uucp@localhost) by rina.r.dl.itc.u-tokyo.ac.jp (8.9.3+3.2W/3.7W-rina.r-0.1-11.01.2000) with UUCP id NAA89723; Thu, 17 Aug 2000 13:11:16 +0900 (JST) Received: (from uucp@localhost) by silver.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (8.9.3+3.2W/3.7W) with UUCP id MAA04148; Thu, 17 Aug 2000 12:52:43 +0900 (JST) Received: from bunko.carrots.uucp.r.dl.itc.u-tokyo.ac.jp.nkth.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (localhost [127.0.0.1]) by bunko.carrots.uucp.r.dl.itc.u-tokyo.ac.jp (8.9.3+3.2W/3.7W) with ESMTP/IPv4 id MAA01167; Thu, 17 Aug 2000 12:46:39 +0900 (JST) Date: Thu, 17 Aug 2000 12:46:39 +0900 Message-ID: <86wvhga6sg.wl@bunko.carrots.uucp.r.dl.itc.u-tokyo.ac.jp.nkth.carrots.uucp.r.dl.itc.u-tokyo.ac.jp> From: Seigo Tanimura To: Peter Jeremy Cc: freebsd-current@freebsd.org, Seigo Tanimura Subject: Re: Newbusifying ed broke it In-Reply-To: In your message of "Thu, 17 Aug 2000 11:13:25 +1000" <00Aug17.111332est.115207@border.alcanet.com.au> References: <00Aug17.111332est.115207@border.alcanet.com.au> User-Agent: Wanderlust/1.1.0 (Overjoyed) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) MULE XEmacs/21.1 (patch 10) (Capitol Reef) (i386--freebsd) Organization: Carrots MIME-Version: 1.0 (generated by SEMI 1.13.7 - "Awazu") Content-Type: multipart/mixed; boundary="Multipart_Thu_Aug_17_12:46:38_2000-1" Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG --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 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 --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