On Thu, 17 Aug 2000 11:13:25 +1000,
  Peter Jeremy <[EMAIL PROTECTED]> 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?

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 */


-- 
Seigo Tanimura <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>

Reply via email to