Merge from FreeBSD:
authorHiten Pandya <hmp@dragonflybsd.org>
Sun, 8 Feb 2004 06:47:35 +0000 (06:47 +0000)
committerHiten Pandya <hmp@dragonflybsd.org>
Sun, 8 Feb 2004 06:47:35 +0000 (06:47 +0000)
Add support for `Allied Telesis SIC-AT' boards.

sys/dev/netif/ed/if_ed.c
sys/dev/netif/ed/if_ed_cbus.c
sys/dev/netif/ed/if_ed_isa.c
sys/dev/netif/ed/if_edreg.h
sys/dev/netif/ed/if_edvar.h

index 9443937..c8f6544 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/ed/if_ed.c,v 1.173.2.13 2001/11/03 00:36:07 luigi Exp $
- * $DragonFly: src/sys/dev/netif/ed/if_ed.c,v 1.8 2004/01/08 18:48:07 asmodai Exp $
+ * $FreeBSD: src/sys/dev/ed/if_ed.c,v 1.173.2.14 2003/12/24 17:02:00 shiba Exp $
+ * $DragonFly: src/sys/dev/netif/ed/if_ed.c,v 1.9 2004/02/08 06:47:35 hmp Exp $
  */
 
 /*
@@ -568,7 +568,7 @@ ed_probe_WD80x3_generic(dev, flags, intr_vals)
 
        for (i = 0; i < memsize; ++i) {
                if (sc->mem_start[i]) {
-                       device_printf(dev, "failed to clear shared memory at %lx - check configuration\n",
+                       device_printf(dev, "failed to clear shared memory at %llx - check configuration\n",
                                      kvtop(sc->mem_start + i));
 
                        /*
@@ -910,6 +910,120 @@ ed_probe_3Com(dev, port_rid, flags)
        return (0);
 }
 
+/*
+ * Probe and vendor-specific initialization routine for SIC boards
+ */
+int
+ed_probe_SIC(dev, port_rid, flags)
+       device_t dev;
+       int port_rid;
+       int flags;
+{
+       struct ed_softc *sc = device_get_softc(dev);
+       int     error;
+       int     i;
+       u_int   memsize;
+       u_long  conf_maddr, conf_msize;
+       u_char  sum;
+
+       error = ed_alloc_port(dev, 0, ED_SIC_IO_PORTS);
+       if (error)
+               return (error);
+
+       sc->asic_offset = ED_SIC_ASIC_OFFSET;
+       sc->nic_offset  = ED_SIC_NIC_OFFSET;
+
+       error = bus_get_resource(dev, SYS_RES_MEMORY, 0,
+                                &conf_maddr, &conf_msize);
+       if (error)
+               return (error);
+
+       memsize = 16384;
+       if (conf_msize > 1)
+               memsize = conf_msize;
+
+       error = ed_alloc_memory(dev, 0, memsize);
+       if (error)
+               return (error);
+
+       sc->mem_start = (caddr_t) rman_get_virtual(sc->mem_res);
+       sc->mem_size  = memsize;
+
+       /* Reset card to force it into a known state. */
+       ed_asic_outb(sc, 0, 0x00);
+       DELAY(100);
+
+       /*
+        * Here we check the card ROM, if the checksum passes, and the
+        * type code and ethernet address check out, then we know we have
+        * an SIC card.
+        */
+       ed_asic_outb(sc, 0, 0x81);
+       DELAY(100);
+
+       sum = sc->mem_start[6];
+       for (i = 0; i < ETHER_ADDR_LEN; i++) {
+               sum ^= (sc->arpcom.ac_enaddr[i] = sc->mem_start[i]);
+       }
+#ifdef ED_DEBUG
+       device_printf(dev, "ed_probe_sic: got address %6D\n",
+                     sc->arpcom.ac_enaddr, ":");
+#endif
+       if (sum != 0) {
+               return (ENXIO);
+       }
+       if ((sc->arpcom.ac_enaddr[0] | sc->arpcom.ac_enaddr[1] |
+            sc->arpcom.ac_enaddr[2]) == 0) {
+               return (ENXIO);
+       }
+
+       sc->vendor   = ED_VENDOR_SIC;
+       sc->type_str = "SIC";
+       sc->isa16bit = 0;
+       sc->cr_proto = 0;
+
+       /*
+        * SIC RAM page 0x0000-0x3fff(or 0x7fff)
+        */
+       ed_asic_outb(sc, 0, 0x80);
+       DELAY(100);
+
+       /*
+        * Now zero memory and verify that it is clear
+        */
+       bzero(sc->mem_start, sc->mem_size);
+
+       for (i = 0; i < sc->mem_size; i++) {
+               if (sc->mem_start[i]) {
+                       device_printf(dev, "failed to clear shared memory "
+                               "at %llx - check configuration\n",
+                               kvtop(sc->mem_start + i));
+
+                       return (ENXIO);
+               }
+       }
+
+       sc->mem_shared = 1;
+       sc->mem_end = sc->mem_start + sc->mem_size;
+
+       /*
+        * allocate one xmit buffer if < 16k, two buffers otherwise
+        */
+       if ((sc->mem_size < 16384) || (flags & ED_FLAGS_NO_MULTI_BUFFERING)) {
+               sc->txb_cnt = 1;
+       } else {
+               sc->txb_cnt = 2;
+       }
+       sc->tx_page_start = 0;
+
+       sc->rec_page_start = sc->tx_page_start + ED_TXBUF_SIZE * sc->txb_cnt;
+       sc->rec_page_stop = sc->tx_page_start + sc->mem_size / ED_PAGE_SIZE;
+
+       sc->mem_ring = sc->mem_start + sc->txb_cnt * ED_PAGE_SIZE * ED_TXBUF_SIZE;
+
+       return (0);
+}
+
 /*
  * Probe and vendor-specific initialization routine for NE1000/2000 boards
  */
index 566edb3..bd2927e 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/ed/if_ed_cbus.c,v 1.1.2.1 2000/09/10 08:45:11 nyan Exp $
- * $DragonFly: src/sys/dev/netif/ed/Attic/if_ed_cbus.c,v 1.5 2003/11/20 22:07:27 dillon Exp $
+ * $FreeBSD: src/sys/dev/ed/if_ed_cbus.c,v 1.1.2.3 2003/12/24 17:02:00 shiba Exp $
+ * $DragonFly: src/sys/dev/netif/ed/Attic/if_ed_cbus.c,v 1.6 2004/02/08 06:47:35 hmp Exp $
  */
 
 #include <sys/param.h>
@@ -889,8 +889,8 @@ ed_probe_SIC98(dev, port_rid, flags)
                return (error);
        }
 
-       sc->asic_offset = ED_NOVELL_ASIC_OFFSET;
-       sc->nic_offset  = ED_NOVELL_NIC_OFFSET;
+       sc->asic_offset = ED_SIC_ASIC_OFFSET;
+       sc->nic_offset  = ED_SIC_NIC_OFFSET;
 
        error = ed98_alloc_memory(dev, 0);
        if (error) {
@@ -936,7 +936,7 @@ ed_probe_SIC98(dev, port_rid, flags)
                return (ENXIO);
        }
 
-       sc->vendor   = ED_VENDOR_MISC;
+       sc->vendor   = ED_VENDOR_SIC;
        sc->type_str = "SIC98";
        sc->isa16bit = 1;
        sc->cr_proto = 0;
index d55e2ce..3a5493e 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/ed/if_ed_isa.c,v 1.5.2.2 2002/07/29 07:52:57 takawata Exp $
- * $DragonFly: src/sys/dev/netif/ed/if_ed_isa.c,v 1.5 2003/11/20 22:07:27 dillon Exp $
+ * $FreeBSD: src/sys/dev/ed/if_ed_isa.c,v 1.5.2.4 2003/12/24 17:02:00 shiba Exp $
+ * $DragonFly: src/sys/dev/netif/ed/if_ed_isa.c,v 1.6 2004/02/08 06:47:35 hmp Exp $
  */
 
 #include <sys/param.h>
@@ -98,6 +98,11 @@ ed_isa_probe(dev)
                goto end;
        ed_release_resources(dev);
 
+       error = ed_probe_SIC(dev, 0, flags);
+       if (error == 0)
+               goto end;
+       ed_release_resources(dev);
+
        error = ed_probe_Novell(dev, 0, flags);
        if (error == 0)
                goto end;
index 53ebd4a..4840380 100644 (file)
@@ -6,8 +6,8 @@
  *   of this software, nor does the author assume any responsibility
  *   for damages incurred with its use.
  *
- * $FreeBSD: src/sys/dev/ed/if_edreg.h,v 1.27.2.3 2001/07/25 18:06:01 iedowse Exp $
- * $DragonFly: src/sys/dev/netif/ed/if_edreg.h,v 1.2 2003/06/17 04:28:24 dillon Exp $
+ * $FreeBSD: src/sys/dev/ed/if_edreg.h,v 1.27.2.4 2003/12/24 17:02:00 shiba Exp $
+ * $DragonFly: src/sys/dev/netif/ed/if_edreg.h,v 1.3 2004/02/08 06:47:35 hmp Exp $
  */
 /*
  * National Semiconductor DS8390 NIC register definitions
@@ -579,6 +579,7 @@ struct ed_ring      {
 #define ED_VENDOR_PCCARD       0x03            /* PCMCIA/PCCARD */
 #define ED_VENDOR_HP           0x04            /* Hewlett Packard */
 #define ED_VENDOR_LINKSYS      0x05            /* Linksys (Dlink) */
+#define ED_VENDOR_SIC          0x06            /* Allied-Telesis SIC */
 
 /*
  * Compile-time config flags
@@ -1101,6 +1102,14 @@ struct ed_ring   {
 
 #define ED_TYPE_HP_PCLANPLUS   0x00
 
+/*
+ *                     Definitions for Allied-Telesis SIC
+ */
+#define ED_SIC_NIC_OFFSET      0
+#define ED_SIC_ASIC_OFFSET     0x10            /* offset to nic i/o regs */
+
+#define ED_SIC_IO_PORTS                17              /* # of i/o addresses used */
+
 /*
  * Chip types.
  */
index b4628d2..2951803 100644 (file)
@@ -24,8 +24,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/dev/ed/if_edvar.h,v 1.4.2.4 2001/07/25 18:06:01 iedowse Exp $
- * $DragonFly: src/sys/dev/netif/ed/if_edvar.h,v 1.3 2003/08/27 09:38:30 rob Exp $
+ * $FreeBSD: src/sys/dev/ed/if_edvar.h,v 1.4.2.5 2003/12/24 17:02:00 shiba Exp $
+ * $DragonFly: src/sys/dev/netif/ed/if_edvar.h,v 1.4 2004/02/08 06:47:35 hmp Exp $
  */
 
 /*
@@ -198,6 +198,7 @@ int ed_probe_generic8390    (struct ed_softc *);
 int    ed_probe_WD80x3         (device_t, int, int);
 int    ed_probe_WD80x3_generic (device_t, int, unsigned short *[]);
 int    ed_probe_3Com           (device_t, int, int);
+int    ed_probe_SIC            (device_t, int, int);
 int    ed_probe_Novell         (device_t, int, int);
 int    ed_probe_Novell_generic (device_t, int);
 int    ed_probe_HP_pclanp      (device_t, int, int);