+
diff -urN linux.old/drivers/net/avalanche_cpmac/cpmac.c linux.dev/drivers/net/avalanche_cpmac/cpmac.c
--- linux.old/drivers/net/avalanche_cpmac/cpmac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/drivers/net/avalanche_cpmac/cpmac.c 2005-07-12 03:21:00.298934472 +0200
-@@ -0,0 +1,2509 @@
++++ linux.dev/drivers/net/avalanche_cpmac/cpmac.c 2005-07-22 01:03:12.609318544 +0200
+@@ -0,0 +1,2504 @@
+/******************************************************************************
+ * FILE PURPOSE: CPMAC Linux Network Device Driver Source
+ ******************************************************************************
+ /* OS Needs to supply CORRECT frequency */
+ if(cpmac_ci_strcmp(action, "Get") == 0 && value != NULL)
+ {
-+ *(unsigned int *)value = CONFIG_AR7_SYS_FREQUENCY * 1000 * 1000;
++ *(unsigned int *)value = CONFIG_AR7_SYS * 1000 * 1000;
+ ret_val = 0;
+ }
+ }
+ /* For Sangam MdioBusFreq is off the PBUS */
+ if(cpmac_ci_strcmp(action, "Get") == 0 && value != NULL)
+ {
-+ *(unsigned int *)value = CONFIG_AR7_SYS_FREQUENCY * 1000 * 1000;
++ *(unsigned int *)value = CONFIG_AR7_SYS * 1000 * 1000;
+ ret_val = 0;
+ }
+ }
+ skb_trim(p_skb, packet_size);
+#endif
+
-+#ifndef TI_SLOW_PATH
-+ /* TI Optimization: This is NOT required if the ethernet resides below the bridge. But is
-+ * required only if the ethernet is directly connected to the IP stack. */
-+ if (p_dev->br_port == NULL)
-+#endif
-+ p_skb->protocol = eth_type_trans(p_skb, p_dev);
++ p_skb->protocol = eth_type_trans(p_skb, p_dev);
+
+ netif_rx(p_skb);
+
+ int instance_count = CONFIG_MIPS_CPMAC_PORTS;
+
+ //cpmac_cpu_freq = avalanche_clkc_get_freq(CLKC_MIPS);
-+ cpmac_cpu_freq = CONFIG_AR7_CPU_FREQUENCY * 1000 * 1000;
++ cpmac_cpu_freq = CONFIG_AR7_CPU * 1000 * 1000;
+
+ build_psp_config();
+
+#include <asm/io.h>
+#include <linux/string.h>
+
++#include <asm/ar7/avalanche_intc.h>
++
+#include "cpmacHalLx.h"
+#include "cpmac.h"
+
+#include "psp_config_parse.h"
+#include "psp_config_mgr.h"
+
-+/* Probe Debug Section*/
-+
+/* debug */
+extern int cpmac_debug_mode;
+#define dbgPrint if (cpmac_debug_mode) printk
+ unsigned int j= 0, detected_phy_map = 0, auto_select = SELECT_INT_PHY_MAC;
+
+ *reset_cntl |= (1 << AVALANCHE_MDIO_RESET_BIT) | (1 << AVALANCHE_LOW_CPMAC_RESET_BIT) | (1 << AVALANCHE_HIGH_CPMAC_RESET_BIT) | (1 << AVALANCHE_LOW_EPHY_RESET_BIT);
-+ *mdio_cntl = (1 << 30) | ((CONFIG_AR7_SYS_FREQUENCY * 1000)/2200);
++ *mdio_cntl = (1 << 30) | ((CONFIG_AR7_SYS * 1000)/2200);
+
+ for(j=0;j < 300000; j++)
+ {
# link order important here
#
obj-$(CONFIG_PLIP) += plip.o
+--- linux.old/drivers/net/avalanche_cpmac/cpmac.c 2005-08-25 10:56:33.702931008 +0200
++++ linux.dev/drivers/net/avalanche_cpmac/cpmac.c 2005-08-25 11:08:45.027451520 +0200
+@@ -2158,17 +2158,16 @@
+ CPMAC_PRIVATE_INFO_T *p_cpmac_priv = p_dev->priv;
+ CPMAC_DRV_HAL_INFO_T *p_drv_hal = p_cpmac_priv->drv_hal;
+ struct sk_buff *p_skb = fragList[0].OsInfo;
+- p_skb->len = fragList[0].len;
+
+ /* invalidate the cache. */
+ dma_cache_inv((unsigned long)p_skb->data, fragList[0].len);
+ #ifdef CPMAC_TEST
+- xdump(p_skb->data, p_skb->len, "recv");
++ xdump(p_skb->data, fragList[0].len, "recv");
+ #endif
+ #ifdef CPMAC_8021Q_SUPPORT
+ /* 802.1q stuff, just does the basic checking here. */
+ if(!p_cpmac_priv->enable_802_1q &&
+- p_skb->len > TCI_END_OFFSET &&
++ fragList[0].len > TCI_END_OFFSET &&
+ IS_802_1Q_FRAME(p_skb->data + TPID_START_OFFSET))
+ {
+ goto cpmac_hal_recv_frame_mismatch;