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

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


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

Reply via email to