linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / net / sb1250-mac.c
index 9ab1618..aa4ca18 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001,2002,2003,2004 Broadcom Corporation
+ * Copyright (C) 2001,2002,2003 Broadcom Corporation
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -31,6 +31,7 @@
 #include <linux/etherdevice.h>
 #include <linux/skbuff.h>
 #include <linux/init.h>
+#include <linux/config.h>
 #include <linux/bitops.h>
 #include <asm/processor.h>             /* Processor type for cache alignment. */
 #include <asm/io.h>
@@ -42,7 +43,6 @@
 #define SBMAC_ETH0_HWADDR "40:00:00:00:01:00"
 #define SBMAC_ETH1_HWADDR "40:00:00:00:01:01"
 #define SBMAC_ETH2_HWADDR "40:00:00:00:01:02"
-#define SBMAC_ETH3_HWADDR "40:00:00:00:01:03"
 #endif
 
 
@@ -57,7 +57,7 @@ static char version1[] __devinitdata =
 
 #define CONFIG_SBMAC_COALESCE
 
-#define MAX_UNITS 4            /* More are supported, limit only on options */
+#define MAX_UNITS 3            /* More are supported, limit only on options */
 
 /* Time in jiffies before concluding the transmitter is hung. */
 #define TX_TIMEOUT  (2*HZ)
@@ -85,11 +85,11 @@ MODULE_PARM_DESC(noisy_mii, "MII status messages");
    The media type is usually passed in 'options[]'.
 */
 #ifdef MODULE
-static int options[MAX_UNITS] = {-1, -1, -1, -1};
+static int options[MAX_UNITS] = {-1, -1, -1};
 module_param_array(options, int, NULL, S_IRUGO);
 MODULE_PARM_DESC(options, "1-" __MODULE_STRING(MAX_UNITS));
 
-static int full_duplex[MAX_UNITS] = {-1, -1, -1, -1};
+static int full_duplex[MAX_UNITS] = {-1, -1, -1};
 module_param_array(full_duplex, int, NULL, S_IRUGO);
 MODULE_PARM_DESC(full_duplex, "1-" __MODULE_STRING(MAX_UNITS));
 #endif
@@ -105,26 +105,13 @@ MODULE_PARM_DESC(int_timeout, "Timeout value");
 #endif
 
 #include <asm/sibyte/sb1250.h>
-#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
-#include <asm/sibyte/bcm1480_regs.h>
-#include <asm/sibyte/bcm1480_int.h>
-#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
+#include <asm/sibyte/sb1250_defs.h>
 #include <asm/sibyte/sb1250_regs.h>
-#include <asm/sibyte/sb1250_int.h>
-#else
-#error invalid SiByte MAC configuation
-#endif
-#include <asm/sibyte/sb1250_scd.h>
 #include <asm/sibyte/sb1250_mac.h>
 #include <asm/sibyte/sb1250_dma.h>
+#include <asm/sibyte/sb1250_int.h>
+#include <asm/sibyte/sb1250_scd.h>
 
-#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
-#define UNIT_INT(n)            (K_BCM1480_INT_MAC_0 + ((n) * 2))
-#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
-#define UNIT_INT(n)            (K_INT_MAC_0 + (n))
-#else
-#error invalid SiByte MAC configuation
-#endif
 
 /**********************************************************************
  *  Simple types
@@ -1489,10 +1476,10 @@ static void sbmac_channel_start(struct sbmac_softc *s)
         * and make sure that RD_THRSH + WR_THRSH <=128 for pass2 and above
         * Use a larger RD_THRSH for gigabit
         */
-       if (soc_type == K_SYS_SOC_TYPE_BCM1250 && periph_rev < 2)
-               th_value = 28;
-       else
+       if (periph_rev >= 2)
                th_value = 64;
+       else
+               th_value = 28;
 
        fifo = V_MAC_TX_WR_THRSH(4) |   /* Must be '4' or '8' */
                ((s->sbm_speed == sbmac_speed_1000)
@@ -1602,17 +1589,13 @@ static void sbmac_channel_start(struct sbmac_softc *s)
         * Turn on the rest of the bits in the enable register
         */
 
-#if defined(CONFIG_SIBYTE_BCM1x55) || defined(CONFIG_SIBYTE_BCM1x80)
-       __raw_writeq(M_MAC_RXDMA_EN0 |
-                      M_MAC_TXDMA_EN0, s->sbm_macenable);
-#elif defined(CONFIG_SIBYTE_SB1250) || defined(CONFIG_SIBYTE_BCM112X)
        __raw_writeq(M_MAC_RXDMA_EN0 |
                       M_MAC_TXDMA_EN0 |
                       M_MAC_RX_ENABLE |
                       M_MAC_TX_ENABLE, s->sbm_macenable);
-#else
-#error invalid SiByte MAC configuation
-#endif
+
+
+
 
 #ifdef CONFIG_SBMAC_COALESCE
        /*
@@ -1803,12 +1786,11 @@ static void sbmac_set_iphdr_offset(struct sbmac_softc *sc)
        reg &= ~M_MAC_IPHDR_OFFSET | V_MAC_IPHDR_OFFSET(15);
        __raw_writeq(reg, sc->sbm_rxfilter);
 
-       /* BCM1250 pass1 didn't have hardware checksum.  Everything
-          later does.  */
-       if (soc_type == K_SYS_SOC_TYPE_BCM1250 && periph_rev < 2) {
-               sc->rx_hw_checksum = DISABLE;
-       } else {
+       /* read system identification to determine revision */
+       if (periph_rev >= 2) {
                sc->rx_hw_checksum = ENABLE;
+       } else {
+               sc->rx_hw_checksum = DISABLE;
        }
 }
 
@@ -2238,7 +2220,7 @@ static void sbmac_setmulti(struct sbmac_softc *sc)
 
 
 
-#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR) || defined(SBMAC_ETH3_HWADDR)
+#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR)
 /**********************************************************************
  *  SBMAC_PARSE_XDIGIT(str)
  *
@@ -2450,7 +2432,7 @@ static int sbmac_open(struct net_device *dev)
         */
 
        __raw_readq(sc->sbm_isr);
-       if (request_irq(dev->irq, &sbmac_intr, IRQF_SHARED, dev->name, dev))
+       if (request_irq(dev->irq, &sbmac_intr, SA_SHIRQ, dev->name, dev))
                return -EBUSY;
 
        /*
@@ -2810,7 +2792,7 @@ static int sbmac_close(struct net_device *dev)
 
 
 
-#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR) || defined(SBMAC_ETH3_HWADDR)
+#if defined(SBMAC_ETH0_HWADDR) || defined(SBMAC_ETH1_HWADDR) || defined(SBMAC_ETH2_HWADDR)
 static void
 sbmac_setup_hwaddr(int chan,char *addr)
 {
@@ -2836,7 +2818,25 @@ sbmac_init_module(void)
        unsigned long port;
        int chip_max_units;
 
-       /* Set the number of available units based on the SOC type.  */
+       /*
+        * For bringup when not using the firmware, we can pre-fill
+        * the MAC addresses using the environment variables
+        * specified in this file (or maybe from the config file?)
+        */
+#ifdef SBMAC_ETH0_HWADDR
+       sbmac_setup_hwaddr(0,SBMAC_ETH0_HWADDR);
+#endif
+#ifdef SBMAC_ETH1_HWADDR
+       sbmac_setup_hwaddr(1,SBMAC_ETH1_HWADDR);
+#endif
+#ifdef SBMAC_ETH2_HWADDR
+       sbmac_setup_hwaddr(2,SBMAC_ETH2_HWADDR);
+#endif
+
+       /*
+        * Walk through the Ethernet controllers and find
+        * those who have their MAC addresses set.
+        */
        switch (soc_type) {
        case K_SYS_SOC_TYPE_BCM1250:
        case K_SYS_SOC_TYPE_BCM1250_ALT:
@@ -2848,10 +2848,6 @@ sbmac_init_module(void)
        case K_SYS_SOC_TYPE_BCM1250_ALT2: /* Hybrid */
                chip_max_units = 2;
                break;
-       case K_SYS_SOC_TYPE_BCM1x55:
-       case K_SYS_SOC_TYPE_BCM1x80:
-               chip_max_units = 4;
-               break;
        default:
                chip_max_units = 0;
                break;
@@ -2859,32 +2855,6 @@ sbmac_init_module(void)
        if (chip_max_units > MAX_UNITS)
                chip_max_units = MAX_UNITS;
 
-       /*
-        * For bringup when not using the firmware, we can pre-fill
-        * the MAC addresses using the environment variables
-        * specified in this file (or maybe from the config file?)
-        */
-#ifdef SBMAC_ETH0_HWADDR
-       if (chip_max_units > 0)
-         sbmac_setup_hwaddr(0,SBMAC_ETH0_HWADDR);
-#endif
-#ifdef SBMAC_ETH1_HWADDR
-       if (chip_max_units > 1)
-         sbmac_setup_hwaddr(1,SBMAC_ETH1_HWADDR);
-#endif
-#ifdef SBMAC_ETH2_HWADDR
-       if (chip_max_units > 2)
-         sbmac_setup_hwaddr(2,SBMAC_ETH2_HWADDR);
-#endif
-#ifdef SBMAC_ETH3_HWADDR
-       if (chip_max_units > 3)
-         sbmac_setup_hwaddr(3,SBMAC_ETH3_HWADDR);
-#endif
-
-       /*
-        * Walk through the Ethernet controllers and find
-        * those who have their MAC addresses set.
-        */
        for (idx = 0; idx < chip_max_units; idx++) {
 
                /*
@@ -2916,7 +2886,7 @@ sbmac_init_module(void)
 
                printk(KERN_DEBUG "sbmac: configuring MAC at %lx\n", port);
 
-               dev->irq = UNIT_INT(idx);
+               dev->irq = K_INT_MAC_0 + idx;
                dev->base_addr = port;
                dev->mem_end = 0;
                if (sbmac_init(dev, idx)) {