summaryrefslogtreecommitdiffstats
path: root/target/linux/ixp4xx
diff options
context:
space:
mode:
authorrwhitby <rwhitby@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-01-11 07:35:43 +0000
committerrwhitby <rwhitby@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-01-11 07:35:43 +0000
commitaa00d4ee30c5a55834e891f77476489b539036b6 (patch)
tree397181dc696610b02244f52d832388ac7b4bb522 /target/linux/ixp4xx
parent4807a9e4a2ad99b2ce82f0a2fe7d83af662138d0 (diff)
Updated ixp4xx ethernet driver to latest upstream patch for 2.6.23 from upstream's git repository
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10170 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/ixp4xx')
-rw-r--r--target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch490
1 files changed, 276 insertions, 214 deletions
diff --git a/target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch b/target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch
index 88886c35d..8be7af7b5 100644
--- a/target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch
+++ b/target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch
@@ -1,7 +1,8 @@
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/kernel/setup.c ixp4xx-nep.git/arch/arm/kernel/setup.c
---- linux-2.6.23/arch/arm/kernel/setup.c 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/arch/arm/kernel/setup.c 2007-10-22 19:19:41.000000000 +0200
-@@ -61,6 +61,7 @@
+diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
+index 4de432e..c4c810b 100644
+--- a/arch/arm/kernel/setup.c
++++ b/arch/arm/kernel/setup.c
+@@ -61,6 +61,7 @@ extern int root_mountflags;
extern void _stext, _text, _etext, __data_start, _edata, _end;
unsigned int processor_id;
@@ -9,10 +10,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/kernel/setup.c ixp4xx-nep.
unsigned int __machine_arch_type;
EXPORT_SYMBOL(__machine_arch_type);
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/Kconfig ixp4xx-nep.git/arch/arm/mach-ixp4xx/Kconfig
---- linux-2.6.23/arch/arm/mach-ixp4xx/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/arch/arm/mach-ixp4xx/Kconfig 2007-10-22 19:19:41.000000000 +0200
-@@ -189,6 +189,20 @@
+diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig
+index 61b2dfc..e774447 100644
+--- a/arch/arm/mach-ixp4xx/Kconfig
++++ b/arch/arm/mach-ixp4xx/Kconfig
+@@ -189,6 +189,20 @@ config IXP4XX_INDIRECT_PCI
need to use the indirect method instead. If you don't know
what you need, leave this option unselected.
@@ -33,19 +35,21 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/Kconfig ixp4xx
endmenu
endif
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/Makefile ixp4xx-nep.git/arch/arm/mach-ixp4xx/Makefile
---- linux-2.6.23/arch/arm/mach-ixp4xx/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/arch/arm/mach-ixp4xx/Makefile 2007-10-22 19:19:41.000000000 +0200
-@@ -30,3 +30,5 @@
+diff --git a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile
+index 77e00ad..4bb97e1 100644
+--- a/arch/arm/mach-ixp4xx/Makefile
++++ b/arch/arm/mach-ixp4xx/Makefile
+@@ -30,3 +30,5 @@ obj-$(CONFIG_MACH_GATEWAY7001) += gateway7001-setup.o
obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o
obj-$(CONFIG_PCI) += $(obj-pci-$(CONFIG_PCI)) common-pci.o
+obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o
+obj-$(CONFIG_IXP4XX_NPE) += ixp4xx_npe.o
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixdp425-setup.c ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixdp425-setup.c
---- linux-2.6.23/arch/arm/mach-ixp4xx/ixdp425-setup.c 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixdp425-setup.c 2007-10-22 19:19:41.000000000 +0200
-@@ -177,6 +177,31 @@
+diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c
+index d5008d8..10b41c6 100644
+--- a/arch/arm/mach-ixp4xx/ixdp425-setup.c
++++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c
+@@ -177,6 +177,31 @@ static struct platform_device ixdp425_uart = {
.resource = ixdp425_uart_resources
};
@@ -77,7 +81,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixdp425-setup.
static struct platform_device *ixdp425_devices[] __initdata = {
&ixdp425_i2c_controller,
&ixdp425_flash,
-@@ -184,7 +209,9 @@
+@@ -184,7 +209,9 @@ static struct platform_device *ixdp425_devices[] __initdata = {
defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
&ixdp425_flash_nand,
#endif
@@ -88,10 +92,12 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixdp425-setup.
};
static void __init ixdp425_init(void)
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixp4xx_npe.c
---- linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixp4xx_npe.c 2007-10-22 19:19:41.000000000 +0200
-@@ -0,0 +1,737 @@
+diff --git a/arch/arm/mach-ixp4xx/ixp4xx_npe.c b/arch/arm/mach-ixp4xx/ixp4xx_npe.c
+new file mode 100644
+index 0000000..83c137e
+--- /dev/null
++++ b/arch/arm/mach-ixp4xx/ixp4xx_npe.c
+@@ -0,0 +1,741 @@
+/*
+ * Intel IXP4xx Network Processor Engine driver for Linux
+ *
@@ -108,13 +114,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+ * Thanks, Christian.
+ */
+
++#include <linux/delay.h>
+#include <linux/dma-mapping.h>
+#include <linux/firmware.h>
++#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
-+#include <asm/delay.h>
-+#include <asm/io.h>
+#include <asm/arch/npe.h>
+
+#define DEBUG_MSG 0
@@ -225,7 +231,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+
+static struct {
+ u32 reg, val;
-+}ecs_reset[] = {
++} ecs_reset[] = {
+ { ECS_BG_CTXT_REG_0, 0xA0000000 },
+ { ECS_BG_CTXT_REG_1, 0x01000000 },
+ { ECS_BG_CTXT_REG_2, 0x00008000 },
@@ -476,12 +482,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+ __raw_writel(0, &npe->regs->action_points[3]);
+ __raw_writel(0, &npe->regs->watch_count);
+
-+ val = ixp4xx_read_fuses();
++ val = ixp4xx_read_feature_bits();
+ /* reset the NPE */
-+ ixp4xx_write_fuses(val & ~(IXP4XX_FUSE_RESET_NPEA << npe->id));
++ ixp4xx_write_feature_bits(val &
++ ~(IXP4XX_FEATURE_RESET_NPEA << npe->id));
+ for (i = 0; i < MAX_RETRIES; i++) {
-+ if (!(ixp4xx_read_fuses() &
-+ (IXP4XX_FUSE_RESET_NPEA << npe->id)))
++ if (!(ixp4xx_read_feature_bits() &
++ (IXP4XX_FEATURE_RESET_NPEA << npe->id)))
+ break; /* reset completed */
+ udelay(1);
+ }
@@ -489,9 +496,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+ return -ETIMEDOUT;
+
+ /* deassert reset */
-+ ixp4xx_write_fuses(val | (IXP4XX_FUSE_RESET_NPEA << npe->id));
++ ixp4xx_write_feature_bits(val |
++ (IXP4XX_FEATURE_RESET_NPEA << npe->id));
+ for (i = 0; i < MAX_RETRIES; i++) {
-+ if (ixp4xx_read_fuses() & (IXP4XX_FUSE_RESET_NPEA << npe->id))
++ if (ixp4xx_read_feature_bits() &
++ (IXP4XX_FEATURE_RESET_NPEA << npe->id))
+ break; /* NPE is back alive */
+ udelay(1);
+ }
@@ -783,7 +792,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+
+ for (i = 0; i < NPE_COUNT; i++) {
+ struct npe *npe = &npe_tab[i];
-+ if (!(ixp4xx_read_fuses() & (IXP4XX_FUSE_RESET_NPEA << i)))
++ if (!(ixp4xx_read_feature_bits() &
++ (IXP4XX_FEATURE_RESET_NPEA << i)))
+ continue; /* NPE already disabled or not present */
+ if (!(npe->mem_res = request_mem_region(npe->regs_phys,
+ REGS_SIZE,
@@ -829,9 +839,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i
+EXPORT_SYMBOL(npe_send_message);
+EXPORT_SYMBOL(npe_recv_message);
+EXPORT_SYMBOL(npe_send_recv_message);
-diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
---- linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c 2007-10-22 19:19:41.000000000 +0200
+diff --git a/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
+new file mode 100644
+index 0000000..e833013
+--- /dev/null
++++ b/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
@@ -0,0 +1,274 @@
+/*
+ * Intel IXP4xx Queue Manager driver for Linux
@@ -1083,7 +1095,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
+error_irq:
+ iounmap(qmgr_regs);
+error_map:
-+ release_resource(mem_res);
++ release_mem_region(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE);
+ return err;
+}
+
@@ -1092,7 +1104,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
+ free_irq(IRQ_IXP4XX_QM1, NULL);
+ synchronize_irq(IRQ_IXP4XX_QM1);
+ iounmap(qmgr_regs);
-+ release_resource(mem_res);
++ release_mem_region(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE);
+}
+
+module_init(qmgr_init);
@@ -1107,10 +1119,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
+EXPORT_SYMBOL(qmgr_disable_irq);
+EXPORT_SYMBOL(qmgr_request_queue);
+EXPORT_SYMBOL(qmgr_release_queue);
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/Kconfig ixp4xx-nep.git/drivers/net/arm/Kconfig
---- linux-2.6.23/drivers/net/arm/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/drivers/net/arm/Kconfig 2007-10-22 19:20:02.000000000 +0200
-@@ -47,3 +47,13 @@
+diff --git a/drivers/net/arm/Kconfig b/drivers/net/arm/Kconfig
+index f9cc2b6..9274d3f 100644
+--- a/drivers/net/arm/Kconfig
++++ b/drivers/net/arm/Kconfig
+@@ -47,3 +47,13 @@ config EP93XX_ETH
help
This is a driver for the ethernet hardware included in EP93xx CPUs.
Say Y if you are building a kernel for EP93xx based devices.
@@ -1124,18 +1137,21 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/Kconfig ixp4xx-nep.
+ help
+ Say Y here if you want to use built-in Ethernet ports
+ on IXP4xx processor.
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/Makefile ixp4xx-nep.git/drivers/net/arm/Makefile
---- linux-2.6.23/drivers/net/arm/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/drivers/net/arm/Makefile 2007-10-22 19:20:02.000000000 +0200
-@@ -9,3 +9,4 @@
+diff --git a/drivers/net/arm/Makefile b/drivers/net/arm/Makefile
+index a4c8682..7c812ac 100644
+--- a/drivers/net/arm/Makefile
++++ b/drivers/net/arm/Makefile
+@@ -9,3 +9,4 @@ obj-$(CONFIG_ARM_ETHER3) += ether3.o
obj-$(CONFIG_ARM_ETHER1) += ether1.o
obj-$(CONFIG_ARM_AT91_ETHER) += at91_ether.o
obj-$(CONFIG_EP93XX_ETH) += ep93xx_eth.o
+obj-$(CONFIG_IXP4XX_ETH) += ixp4xx_eth.o
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/ixp4xx_eth.c ixp4xx-nep.git/drivers/net/arm/ixp4xx_eth.c
---- linux-2.6.23/drivers/net/arm/ixp4xx_eth.c 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/drivers/net/arm/ixp4xx_eth.c 2007-10-22 19:20:02.000000000 +0200
-@@ -0,0 +1,1258 @@
+diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c
+new file mode 100644
+index 0000000..2c23f50
+--- /dev/null
++++ b/drivers/net/arm/ixp4xx_eth.c
+@@ -0,0 +1,1259 @@
+/*
+ * Intel IXP4xx Ethernet driver for Linux
+ *
@@ -1165,10 +1181,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/ixp4xx_eth.c ixp4xx
+#include <linux/delay.h>
+#include <linux/dma-mapping.h>
+#include <linux/dmapool.h>
++#include <linux/etherdevice.h>
++#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/mii.h>
+#include <linux/platform_device.h>
-+#include <asm/io.h>
+#include <asm/arch/npe.h>
+#include <asm/arch/qmgr.h>
+
@@ -2373,7 +2390,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/ixp4xx_eth.c ixp4xx
+
+static int __init eth_init_module(void)
+{
-+ if (!(ixp4xx_read_fuses() & IXP4XX_FUSE_NPEB_ETH0))
++ if (!(ixp4xx_read_feature_bits() & IXP4XX_FEATURE_NPEB_ETH0))
+ return -ENOSYS;
+
+ /* All MII PHY accesses use NPE-B Ethernet registers */
@@ -2394,10 +2411,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/ixp4xx_eth.c ixp4xx
+MODULE_LICENSE("GPL v2");
+module_init(eth_init_module);
+module_exit(eth_cleanup_module);
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/Kconfig ixp4xx-nep.git/drivers/net/wan/Kconfig
---- linux-2.6.23/drivers/net/wan/Kconfig 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/drivers/net/wan/Kconfig 2007-10-22 19:20:05.000000000 +0200
-@@ -334,6 +334,15 @@
+diff --git a/drivers/net/wan/Kconfig b/drivers/net/wan/Kconfig
+index a3df09e..94e7aa7 100644
+--- a/drivers/net/wan/Kconfig
++++ b/drivers/net/wan/Kconfig
+@@ -334,6 +334,15 @@ config DSCC4_PCI_RST
Say Y if your card supports this feature.
@@ -2413,10 +2431,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/Kconfig ixp4xx-nep.
config DLCI
tristate "Frame Relay DLCI support"
---help---
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/Makefile ixp4xx-nep.git/drivers/net/wan/Makefile
---- linux-2.6.23/drivers/net/wan/Makefile 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/drivers/net/wan/Makefile 2007-10-22 19:20:05.000000000 +0200
-@@ -42,6 +42,7 @@
+diff --git a/drivers/net/wan/Makefile b/drivers/net/wan/Makefile
+index d61fef3..1b1d116 100644
+--- a/drivers/net/wan/Makefile
++++ b/drivers/net/wan/Makefile
+@@ -42,6 +42,7 @@ obj-$(CONFIG_C101) += c101.o
obj-$(CONFIG_WANXL) += wanxl.o
obj-$(CONFIG_PCI200SYN) += pci200syn.o
obj-$(CONFIG_PC300TOO) += pc300too.o
@@ -2424,10 +2443,12 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/Makefile ixp4xx-nep
clean-files := wanxlfw.inc
$(obj)/wanxl.o: $(obj)/wanxlfw.inc
-diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx-nep.git/drivers/net/wan/ixp4xx_hss.c
---- linux-2.6.23/drivers/net/wan/ixp4xx_hss.c 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/drivers/net/wan/ixp4xx_hss.c 2007-10-22 19:20:05.000000000 +0200
-@@ -0,0 +1,1248 @@
+diff --git a/drivers/net/wan/ixp4xx_hss.c b/drivers/net/wan/ixp4xx_hss.c
+new file mode 100644
+index 0000000..c4cdace
+--- /dev/null
++++ b/drivers/net/wan/ixp4xx_hss.c
+@@ -0,0 +1,1270 @@
+/*
+ * Intel IXP4xx HSS (synchronous serial port) driver for Linux
+ *
@@ -2440,10 +2461,10 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+
+#include <linux/dma-mapping.h>
+#include <linux/dmapool.h>
++#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/hdlc.h>
+#include <linux/platform_device.h>
-+#include <asm/io.h>
+#include <asm/arch/npe.h>
+#include <asm/arch/qmgr.h>
+
@@ -2590,10 +2611,24 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+#define CLK46X_SPEED_8192KHZ (( 8 << 22) | (280 << 12) | 2047)
+
+
-+/* hss_config, LUTs: default = unassigned */
-+#define TDMMAP_HDLC 1 /* HDLC - packetised */
-+#define TDMMAP_VOICE56K 2 /* Voice56K - channelised */
-+#define TDMMAP_VOICE64K 3 /* Voice64K - channelised */
++/* hss_config, LUT entries */
++#define TDMMAP_UNASSIGNED 0
++#define TDMMAP_HDLC 1 /* HDLC - packetized */
++#define TDMMAP_VOICE56K 2 /* Voice56K - 7-bit channelized */
++#define TDMMAP_VOICE64K 3 /* Voice64K - 8-bit channelized */
++
++#define TIMESLOTS 128
++#define LUT_BITS 2
++
++/* offsets into HSS config */
++#define HSS_CONFIG_TX_PCR 0x00
++#define HSS_CONFIG_RX_PCR 0x04
++#define HSS_CONFIG_CORE_CR 0x08
++#define HSS_CONFIG_CLOCK_CR 0x0C
++#define HSS_CONFIG_TX_FCR 0x10
++#define HSS_CONFIG_RX_FCR 0x14
++#define HSS_CONFIG_TX_LUT 0x18
++#define HSS_CONFIG_RX_LUT 0x38
+
+
+/* NPE command codes */
@@ -2634,10 +2669,6 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+#define PKT_PIPE_RX_SIZE_WRITE 0x56
+#define PKT_PIPE_MODE_WRITE 0x57
+
-+
-+#define HSS_TIMESLOTS 128
-+#define HSS_LUT_BITS 2
-+
+/* HDLC packet status values - desc->status */
+#define ERR_SHUTDOWN 1 /* stop or shutdown occurrance */
+#define ERR_HDLC_ALIGN 2 /* HDLC alignment error */
@@ -2666,8 +2697,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ buffer_t *rx_buff_tab[RX_DESCS], *tx_buff_tab[TX_DESCS];
+ struct desc *desc_tab; /* coherent */
+ u32 desc_tab_phys;
-+ sync_serial_settings settings;
+ int id;
++ unsigned int clock_type, clock_rate, loopback;
+ u8 hdlc_cfg;
+};
+
@@ -2721,19 +2752,14 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ ((n) + RX_DESCS) * sizeof(struct desc))
+#define tx_desc_ptr(port, n) (&(port)->desc_tab[(n) + RX_DESCS])
+
-+#ifndef __ARMEB__
-+static inline void memcpy_swab32(u32 *dest, u32 *src, int cnt)
-+{
-+ int i;
-+ for (i = 0; i < cnt; i++)
-+ dest[i] = swab32(src[i]);
-+}
-+#endif
++/*****************************************************************************
++ * global variables
++ ****************************************************************************/
+
+static int ports_open;
+static struct dma_pool *dma_pool;
+
-+static struct {
++static const struct {
+ int tx, txdone, rx, rxfree;
+}queue_ids[2] = {{ HSS0_PKT_TX0_QUEUE, HSS0_PKT_TXDONE_QUEUE,
+ HSS0_PKT_RX_QUEUE, HSS0_PKT_RXFREE0_QUEUE },
@@ -2741,12 +2767,23 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ HSS1_PKT_RX_QUEUE, HSS1_PKT_RXFREE0_QUEUE },
+};
+
++/*****************************************************************************
++ * utility functions
++ ****************************************************************************/
+
+static inline struct port* dev_to_port(struct net_device *dev)
+{
+ return dev_to_hdlc(dev)->priv;
+}
+
++#ifndef __ARMEB__
++static inline void memcpy_swab32(u32 *dest, u32 *src, int cnt)
++{
++ int i;
++ for (i = 0; i < cnt; i++)
++ dest[i] = swab32(src[i]);
++}
++#endif
+
+static inline void debug_pkt(struct net_device *dev, const char *func,
+ u8 *data, int len)
@@ -2852,7 +2889,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+}
+
+
-+static void hss_set_carrier(void *pdev, int carrier)
++static void hss_hdlc_set_carrier(void *pdev, int carrier)
+{
+ struct net_device *dev = pdev;
+ if (carrier)
@@ -2861,19 +2898,19 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ netif_carrier_off(dev);
+}
+
-+static void hss_rx_irq(void *pdev)
++static void hss_hdlc_rx_irq(void *pdev)
+{
+ struct net_device *dev = pdev;
+ struct port *port = dev_to_port(dev);
+
+#if DEBUG_RX
-+ printk(KERN_DEBUG "%s: hss_rx_irq\n", dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_rx_irq\n", dev->name);
+#endif
+ qmgr_disable_irq(queue_ids[port->id].rx);
+ netif_rx_schedule(dev);
+}
+
-+static int hss_poll(struct net_device *dev, int *budget)
++static int hss_hdlc_poll(struct net_device *dev, int *budget)
+{
+ struct port *port = dev_to_port(dev);
+ unsigned int rxq = queue_ids[port->id].rx;
@@ -2882,7 +2919,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ int quota = dev->quota, received = 0;
+
+#if DEBUG_RX
-+ printk(KERN_DEBUG "%s: hss_poll\n", dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_poll\n", dev->name);
+#endif
+
+ while (quota) {
@@ -2899,15 +2936,15 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ *budget -= received;
+ received = 0;
+#if DEBUG_RX
-+ printk(KERN_DEBUG "%s: hss_poll netif_rx_complete\n",
-+ dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_poll"
++ " netif_rx_complete\n", dev->name);
+#endif
+ netif_rx_complete(dev);
+ qmgr_enable_irq(rxq);
+ if (!qmgr_stat_empty(rxq) &&
+ netif_rx_reschedule(dev, 0)) {
+#if DEBUG_RX
-+ printk(KERN_DEBUG "%s: hss_poll"
++ printk(KERN_DEBUG "%s: hss_hdlc_poll"
+ " netif_rx_reschedule successed\n",
+ dev->name);
+#endif
@@ -2915,7 +2952,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ continue;
+ }
+#if DEBUG_RX
-+ printk(KERN_DEBUG "%s: hss_poll all done\n",
++ printk(KERN_DEBUG "%s: hss_hdlc_poll all done\n",
+ dev->name);
+#endif
+ return 0; /* all work done */
@@ -2924,8 +2961,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ desc = rx_desc_ptr(port, n);
+
+ if (desc->error_count) /* FIXME - remove printk */
-+ printk(KERN_DEBUG "%s: hss_poll status 0x%02X errors"
-+ " %u\n", dev->name, desc->status,
++ printk(KERN_DEBUG "%s: hss_hdlc_poll status 0x%02X"
++ " errors %u\n", dev->name, desc->status,
+ desc->error_count);
+
+ skb = NULL;
@@ -2961,8 +2998,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ stats->rx_errors++;
+ break;
+ default: /* FIXME - remove printk */
-+ printk(KERN_ERR "%s: hss_poll(): status 0x%02X errors"
-+ " %u\n", dev->name, desc->status,
++ printk(KERN_ERR "%s: hss_hdlc_poll: status 0x%02X"
++ " errors %u\n", dev->name, desc->status,
+ desc->error_count);
+ stats->rx_errors++;
+ }
@@ -2989,7 +3026,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+#endif
+ skb_put(skb, desc->pkt_len);
+
-+ debug_pkt(dev, "hss_poll", skb->data, skb->len);
++ debug_pkt(dev, "hss_hdlc_poll", skb->data, skb->len);
+
+ skb->protocol = hdlc_type_trans(skb, dev);
+ dev->last_rx = jiffies;
@@ -3011,13 +3048,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ dev->quota -= received;
+ *budget -= received;
+#if DEBUG_RX
-+ printk(KERN_DEBUG "hss_poll(): end, not all work done\n");
++ printk(KERN_DEBUG "hss_hdlc_poll: end, not all work done\n");
+#endif
+ return 1; /* not all work done */
+}
+
+
-+static void hss_txdone_irq(void *pdev)
++static void hss_hdlc_txdone_irq(void *pdev)
+{
+ struct net_device *dev = pdev;
+ struct port *port = dev_to_port(dev);
@@ -3025,7 +3062,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ int n_desc;
+
+#if DEBUG_TX
-+ printk(KERN_DEBUG DRV_NAME ": hss_txdone_irq\n");
++ printk(KERN_DEBUG DRV_NAME ": hss_hdlc_txdone_irq\n");
+#endif
+ while ((n_desc = queue_get_desc(queue_ids[port->id].txdone,
+ port, 1)) >= 0) {
@@ -3039,7 +3076,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+
+ dma_unmap_tx(port, desc);
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_txdone_irq free %p\n",
++ printk(KERN_DEBUG "%s: hss_hdlc_txdone_irq free %p\n",
+ port->netdev->name, port->tx_buff_tab[n_desc]);
+#endif
+ free_buffer_irq(port->tx_buff_tab[n_desc]);
@@ -3050,15 +3087,15 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ tx_desc_phys(port, n_desc), desc);
+ if (start) {
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_txdone_irq xmit ready\n",
-+ port->netdev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_txdone_irq xmit"
++ " ready\n", port->netdev->name);
+#endif
+ netif_wake_queue(port->netdev);
+ }
+ }
+}
+
-+static int hss_xmit(struct sk_buff *skb, struct net_device *dev)
++static int hss_hdlc_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+ struct port *port = dev_to_port(dev);
+ struct net_device_stats *stats = hdlc_stats(dev);
@@ -3069,7 +3106,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ struct desc *desc;
+
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_xmit\n", dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_xmit\n", dev->name);
+#endif
+
+ if (unlikely(skb->len > HDLC_MAX_MRU)) {
@@ -3078,7 +3115,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ return NETDEV_TX_OK;
+ }
+
-+ debug_pkt(dev, "hss_xmit", skb->data, skb->len);
++ debug_pkt(dev, "hss_hdlc_xmit", skb->data, skb->len);
+
+ len = skb->len;
+#ifdef __ARMEB__
@@ -3126,13 +3163,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+
+ if (qmgr_stat_empty(txreadyq)) {
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_xmit queue full\n", dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_xmit queue full\n", dev->name);
+#endif
+ netif_stop_queue(dev);
+ /* we could miss TX ready interrupt */
+ if (!qmgr_stat_empty(txreadyq)) {
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_xmit ready again\n",
++ printk(KERN_DEBUG "%s: hss_hdlc_xmit ready again\n",
+ dev->name);
+#endif
+ netif_wake_queue(dev);
@@ -3140,13 +3177,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ }
+
+#if DEBUG_TX
-+ printk(KERN_DEBUG "%s: hss_xmit end\n", dev->name);
++ printk(KERN_DEBUG "%s: hss_hdlc_xmit end\n", dev->name);
+#endif
+ return NETDEV_TX_OK;
+}
+
+
-+static int request_queues(struct port *port)
++static int request_hdlc_queues(struct port *port)
+{
+ int err;
+
@@ -3184,7 +3221,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ return err;
+}
+
-+static void release_queues(struct port *port)
++static void release_hdlc_queues(struct port *port)
+{
+ qmgr_release_queue(queue_ids[port->id].rxfree);
+ qmgr_release_queue(queue_ids[port->id].rx);
@@ -3193,7 +3230,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ qmgr_release_queue(port->plat->txreadyq);
+}
+
-+static int init_queues(struct port *port)
++static int init_hdlc_queues(struct port *port)
+{
+ int i;
+
@@ -3236,7 +3273,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ return 0;
+}
+
-+static void destroy_queues(struct port *port)
++static void destroy_hdlc_queues(struct port *port)
+{
+ int i;
+
@@ -3269,7 +3306,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ }
+}
+
-+static int hss_open(struct net_device *dev)
++static int hss_hdlc_open(struct net_device *dev)
+{
+ struct port *port = dev_to_port(dev);
+ struct npe *npe = port->npe;
@@ -3287,7 +3324,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+
+ if (port->plat->open)
+ if ((err = port->plat->open(port->id, port->netdev,
-+ hss_set_carrier)) != 0)
++ hss_hdlc_set_carrier)) != 0)
+ goto err_hdlc_close;
+
+ /* HSS main configuration */
@@ -3301,7 +3338,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ PCR_MSB_ENDIAN |
+ PCR_TX_DATA_ENABLE;
+
-+ if (port->settings.clock_type == CLOCK_INT)
++ if (port->clock_type == CLOCK_INT)
+ msg.data32 |= PCR_SYNC_CLK_DIR_OUTPUT;
+
+ if ((err = npe_send_message(npe, &msg, "HSS_SET_TX_PCR") != 0))
@@ -3313,7 +3350,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ goto err_plat_close; /* 4: RX PCR */
+
+ msg.index = 8;
-+ msg.data32 = (port->settings.loopback ? CCR_LOOPBACK : 0) |
++ msg.data32 = (port->loopback ? CCR_LOOPBACK : 0) |
+ (port->id ? CCR_SECOND_HSS : 0);
+ if ((err = npe_send_message(npe, &msg, "HSS_SET_CORE_CR") != 0))
+ goto err_plat_close; /* 8: Core CR */
@@ -3333,11 +3370,10 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ goto err_plat_close; /* 20: RX FCR */
+
+ msg.data32 = 0; /* Fill LUT with HDLC timeslots */
-+ for (i = 0; i < 32 / HSS_LUT_BITS; i++)
-+ msg.data32 |= TDMMAP_HDLC << (HSS_LUT_BITS * i);
++ for (i = 0; i < 32 / LUT_BITS; i++)
++ msg.data32 |= TDMMAP_HDLC << (LUT_BITS * i);
+
-+ for (i = 0; i < 2 /* TX and RX */ * HSS_TIMESLOTS * HSS_LUT_BITS / 8;
-+ i += 4) {
++ for (i = 0; i < 2 /* TX and RX */ * TIMESLOTS * LUT_BITS / 8; i += 4) {
+ msg.index = 24 + i; /* 24 - 55: TX LUT, 56 - 87: RX LUT */
+ if ((err = npe_send_message(npe, &msg, "HSS_SET_LUT") != 0))
+ goto err_plat_close;
@@ -3405,10 +3441,10 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ if ((err = npe_send_message(npe, &msg, "HSS_SET_PKT_RX_SIZE") != 0))
+ goto err_plat_close;
+
-+ if ((err = request_queues(port)) != 0)
++ if ((err = request_hdlc_queues(port)) != 0)
+ goto err_plat_close;
+
-+ if ((err = init_queues(port)) != 0)
++ if ((err = init_hdlc_queues(port)) != 0)
+ goto err_destroy_queues;
+
+ memset(&msg, 0, sizeof(msg));
@@ -3429,10 +3465,10 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ netif_start_queue(dev);
+
+ qmgr_set_irq(queue_ids[port->id].rx, QUEUE_IRQ_SRC_NOT_EMPTY,
-+ hss_rx_irq, dev);
++ hss_hdlc_rx_irq, dev);
+
+ qmgr_set_irq(queue_ids[port->id].txdone, QUEUE_IRQ_SRC_NOT_EMPTY,
-+ hss_txdone_irq, dev);
++ hss_hdlc_txdone_irq, dev);
+ qmgr_enable_irq(queue_ids[port->id].txdone);
+
+ ports_open++;
@@ -3440,8 +3476,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ return 0;
+
+err_destroy_queues:
-+ destroy_queues(port);
-+ release_queues(port);
++ destroy_hdlc_queues(port);
++ release_hdlc_queues(port);
+err_plat_close:
+ if (port->plat->close)
+ port->plat->close(port->id, port->netdev);
@@ -3450,7 +3486,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ return err;
+}
+
-+static int hss_close(struct net_device *dev)
++static int hss_hdlc_close(struct net_device *dev)
+{
+ struct port *port = dev_to_port(dev);
+ struct npe *npe = port->npe;
@@ -3500,8 +3536,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ printk(KERN_DEBUG "Draining TX queues took %i cycles\n", i);
+#endif
+ qmgr_disable_irq(queue_ids[port->id].txdone);
-+ destroy_queues(port);
-+ release_queues(port);
++ destroy_hdlc_queues(port);
++ release_hdlc_queues(port);
+
+ if (port->plat->close)
+ port->plat->close(port->id, port->netdev);
@@ -3510,8 +3546,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+}
+
+
-+static int hss_attach(struct net_device *dev, unsigned short encoding,
-+ unsigned short parity)
++static int hss_hdlc_attach(struct net_device *dev, unsigned short encoding,
++ unsigned short parity)
+{
+ struct port *port = dev_to_port(dev);
+
@@ -3533,7 +3569,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+}
+
+
-+static int hss_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
++static int hss_hdlc_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
+{
+ const size_t size = sizeof(sync_serial_settings);
+ sync_serial_settings new_line;
@@ -3551,7 +3587,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ ifr->ifr_settings.size = size; /* data size wanted */
+ return -ENOBUFS;
+ }
-+ if (copy_to_user(line, &port->settings, size))
++ memset(&new_line, 0, sizeof(new_line));
++ new_line.clock_type = port->clock_type;
++ new_line.clock_rate = port->clock_rate;
++ new_line.loopback = port->loopback;
++ if (copy_to_user(line, &new_line, size))
+ return -EFAULT;
+ return 0;
+
@@ -3575,7 +3615,9 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ if (new_line.loopback != 0 && new_line.loopback != 1)
+ return -EINVAL;
+
-+ memcpy(&port->settings, &new_line, size); /* Update settings */
++ port->clock_type = clk; /* Update settings */
++ port->clock_rate = new_line.clock_rate;
++ port->loopback = new_line.loopback;
+ return 0;
+
+ default:
@@ -3610,16 +3652,16 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+ SET_MODULE_OWNER(net);
+ SET_NETDEV_DEV(dev, &pdev->dev);
+ hdlc = dev_to_hdlc(dev);
-+ hdlc->attach = hss_attach;
-+ hdlc->xmit = hss_xmit;
-+ dev->open = hss_open;
-+ dev->poll = hss_poll;
-+ dev->stop = hss_close;
-+ dev->do_ioctl = hss_ioctl;
++ hdlc->attach = hss_hdlc_attach;
++ hdlc->xmit = hss_hdlc_xmit;
++ dev->open = hss_hdlc_open;
++ dev->poll = hss_hdlc_poll;
++ dev->stop = hss_hdlc_close;
++ dev->do_ioctl = hss_hdlc_ioctl;
+ dev->weight = 16;
+ dev->tx_queue_len = 100;
-+ port->settings.clock_type = CLOCK_EXT;
-+ port->settings.clock_rate = 2048000;
++ port->clock_type = CLOCK_EXT;
++ port->clock_rate = 2048000;
+
+ if (register_hdlc_device(dev)) {
+ printk(KERN_ERR "HSS-%i: unable to register HDLC device\n",
@@ -3660,8 +3702,9 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+
+static int __init hss_init_module(void)
+{
-+ if ((ixp4xx_read_fuses() & (IXP4XX_FUSE_HDLC | IXP4XX_FUSE_HSS)) !=
-+ (IXP4XX_FUSE_HDLC | IXP4XX_FUSE_HSS))
++ if ((ixp4xx_read_feature_bits() &
++ (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS)) !=
++ (IXP4XX_FEATURE_HDLC | IXP4XX_FEATURE_HSS))
+ return -ENOSYS;
+ return platform_driver_register(&drv);
+}
@@ -3676,32 +3719,34 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx
+MODULE_LICENSE("GPL v2");
+module_init(hss_init_module);
+module_exit(hss_cleanup_module);
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/cpu.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/cpu.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/cpu.h 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/cpu.h 2007-10-22 19:20:22.000000000 +0200
-@@ -28,4 +28,19 @@
+diff --git a/include/asm-arm/arch-ixp4xx/cpu.h b/include/asm-arm/arch-ixp4xx/cpu.h
+index d2523b3..2fa3d6b 100644
+--- a/include/asm-arm/arch-ixp4xx/cpu.h
++++ b/include/asm-arm/arch-ixp4xx/cpu.h
+@@ -28,4 +28,19 @@ extern unsigned int processor_id;
#define cpu_is_ixp46x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \
IXP465_PROCESSOR_ID_VALUE)
-+static inline u32 ixp4xx_read_fuses(void)
++static inline u32 ixp4xx_read_feature_bits(void)
+{
-+ unsigned int fuses = ~*IXP4XX_EXP_CFG2;
-+ fuses &= ~IXP4XX_FUSE_RESERVED;
++ unsigned int val = ~*IXP4XX_EXP_CFG2;
++ val &= ~IXP4XX_FEATURE_RESERVED;
+ if (!cpu_is_ixp46x())
-+ fuses &= ~IXP4XX_FUSE_IXP46X_ONLY;
++ val &= ~IXP4XX_FEATURE_IXP46X_ONLY;
+
-+ return fuses;
++ return val;
+}
+
-+static inline void ixp4xx_write_fuses(u32 value)
++static inline void ixp4xx_write_feature_bits(u32 value)
+{
+ *IXP4XX_EXP_CFG2 = ~value;
+}
+
#endif /* _ASM_ARCH_CPU_H */
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/hardware.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/hardware.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/hardware.h 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/hardware.h 2007-10-22 19:20:22.000000000 +0200
+diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h
+index 297ceda..73e8dc3 100644
+--- a/include/asm-arm/arch-ixp4xx/hardware.h
++++ b/include/asm-arm/arch-ixp4xx/hardware.h
@@ -27,13 +27,13 @@
#define pcibios_assign_all_busses() 1
@@ -3719,56 +3764,68 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/hardwar
/* Platform helper functions and definitions */
#include "platform.h"
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h 2007-10-22 19:20:22.000000000 +0200
-@@ -607,4 +607,36 @@
+diff --git a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
+index 5d949d7..c704fe8 100644
+--- a/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
++++ b/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
+@@ -15,10 +15,6 @@
+ *
+ */
+
+-#ifndef __ASM_ARCH_HARDWARE_H__
+-#error "Do not include this directly, instead #include <asm/hardware.h>"
+-#endif
+-
+ #ifndef _ASM_ARM_IXP4XX_H_
+ #define _ASM_ARM_IXP4XX_H_
+
+@@ -607,4 +603,36 @@
#define DCMD_LENGTH 0x01fff /* length mask (max = 8K - 1) */
-+/* Fuse Bits of IXP_EXP_CFG2 */
-+#define IXP4XX_FUSE_RCOMP (1 << 0)
-+#define IXP4XX_FUSE_USB_DEVICE (1 << 1)
-+#define IXP4XX_FUSE_HASH (1 << 2)
-+#define IXP4XX_FUSE_AES (1 << 3)
-+#define IXP4XX_FUSE_DES (1 << 4)
-+#define IXP4XX_FUSE_HDLC (1 << 5)
-+#define IXP4XX_FUSE_AAL (1 << 6)
-+#define IXP4XX_FUSE_HSS (1 << 7)
-+#define IXP4XX_FUSE_UTOPIA (1 << 8)
-+#define IXP4XX_FUSE_NPEB_ETH0 (1 << 9)
-+#define IXP4XX_FUSE_NPEC_ETH (1 << 10)
-+#define IXP4XX_FUSE_RESET_NPEA (1 << 11)
-+#define IXP4XX_FUSE_RESET_NPEB (1 << 12)
-+#define IXP4XX_FUSE_RESET_NPEC (1 << 13)
-+#define IXP4XX_FUSE_PCI (1 << 14)
-+#define IXP4XX_FUSE_ECC_TIMESYNC (1 << 15)
-+#define IXP4XX_FUSE_UTOPIA_PHY_LIMIT (3 << 16)
-+#define IXP4XX_FUSE_USB_HOST (1 << 18)
-+#define IXP4XX_FUSE_NPEA_ETH (1 << 19)
-+#define IXP4XX_FUSE_NPEB_ETH_1_TO_3 (1 << 20)
-+#define IXP4XX_FUSE_RSA (1 << 21)
-+#define IXP4XX_FUSE_XSCALE_MAX_FREQ (3 << 22)
-+#define IXP4XX_FUSE_RESERVED (0xFF << 24)
-+
-+#define IXP4XX_FUSE_IXP46X_ONLY (IXP4XX_FUSE_ECC_TIMESYNC | \
-+ IXP4XX_FUSE_USB_HOST | \
-+ IXP4XX_FUSE_NPEA_ETH | \
-+ IXP4XX_FUSE_NPEB_ETH_1_TO_3 | \
-+ IXP4XX_FUSE_RSA | \
-+ IXP4XX_FUSE_XSCALE_MAX_FREQ)
++/* "fuse" bits of IXP_EXP_CFG2 */
++#define IXP4XX_FEATURE_RCOMP (1 << 0)
++#define IXP4XX_FEATURE_USB_DEVICE (1 << 1)
++#define IXP4XX_FEATURE_HASH (1 << 2)
++#define IXP4XX_FEATURE_AES (1 << 3)
++#define IXP4XX_FEATURE_DES (1 << 4)
++#define IXP4XX_FEATURE_HDLC (1 << 5)
++#define IXP4XX_FEATURE_AAL (1 << 6)
++#define IXP4XX_FEATURE_HSS (1 << 7)
++#define IXP4XX_FEATURE_UTOPIA (1 << 8)
++#define IXP4XX_FEATURE_NPEB_ETH0 (1 << 9)
++#define IXP4XX_FEATURE_NPEC_ETH (1 << 10)
++#define IXP4XX_FEATURE_RESET_NPEA (1 << 11)
++#define IXP4XX_FEATURE_RESET_NPEB (1 << 12)
++#define IXP4XX_FEATURE_RESET_NPEC (1 << 13)
++#define IXP4XX_FEATURE_PCI (1 << 14)
++#define IXP4XX_FEATURE_ECC_TIMESYNC (1 << 15)
++#define IXP4XX_FEATURE_UTOPIA_PHY_LIMIT (3 << 16)
++#define IXP4XX_FEATURE_USB_HOST (1 << 18)
++#define IXP4XX_FEATURE_NPEA_ETH (1 << 19)
++#define IXP4XX_FEATURE_NPEB_ETH_1_TO_3 (1 << 20)
++#define IXP4XX_FEATURE_RSA (1 << 21)
++#define IXP4XX_FEATURE_XSCALE_MAX_FREQ (3 << 22)
++#define IXP4XX_FEATURE_RESERVED (0xFF << 24)
++
++#define IXP4XX_FEATURE_IXP46X_ONLY (IXP4XX_FEATURE_ECC_TIMESYNC | \
++ IXP4XX_FEATURE_USB_HOST | \
++ IXP4XX_FEATURE_NPEA_ETH | \
++ IXP4XX_FEATURE_NPEB_ETH_1_TO_3 | \
++ IXP4XX_FEATURE_RSA | \
++ IXP4XX_FEATURE_XSCALE_MAX_FREQ)
+
#endif
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/npe.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/npe.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/npe.h 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/npe.h 2007-10-22 19:20:22.000000000 +0200
-@@ -0,0 +1,41 @@
+diff --git a/include/asm-arm/arch-ixp4xx/npe.h b/include/asm-arm/arch-ixp4xx/npe.h
+new file mode 100644
+index 0000000..37d0511
+--- /dev/null
++++ b/include/asm-arm/arch-ixp4xx/npe.h
+@@ -0,0 +1,39 @@
+#ifndef __IXP4XX_NPE_H
+#define __IXP4XX_NPE_H
+
-+#include <linux/etherdevice.h>
+#include <linux/kernel.h>
-+#include <asm/io.h>
+
+extern const char *npe_names[];
+
@@ -3804,10 +3861,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/npe.h i
+void npe_release(struct npe *npe);
+
+#endif /* __IXP4XX_NPE_H */
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/platform.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/platform.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/platform.h 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/platform.h 2007-10-22 19:20:22.000000000 +0200
-@@ -77,8 +77,7 @@
+diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h
+index 2a44d3d..695b9c4 100644
+--- a/include/asm-arm/arch-ixp4xx/platform.h
++++ b/include/asm-arm/arch-ixp4xx/platform.h
+@@ -77,8 +77,7 @@ extern unsigned long ixp4xx_exp_bus_size;
/*
* The IXP4xx chips do not have an I2C unit, so GPIO lines are just
@@ -3817,7 +3875,7 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/platfor
* I2C driver.
*/
struct ixp4xx_i2c_pins {
-@@ -86,6 +85,27 @@
+@@ -86,6 +85,27 @@ struct ixp4xx_i2c_pins {
unsigned long scl_pin;
};
@@ -3845,10 +3903,12 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/platfor
/*
* This structure provide a means for the board setup code
* to give information to th pata_ixp4xx driver. It is
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/qmgr.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h 1970-01-01 01:00:00.000000000 +0100
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/qmgr.h 2007-10-22 19:20:22.000000000 +0200
-@@ -0,0 +1,124 @@
+diff --git a/include/asm-arm/arch-ixp4xx/qmgr.h b/include/asm-arm/arch-ixp4xx/qmgr.h
+new file mode 100644
+index 0000000..1e52b95
+--- /dev/null
++++ b/include/asm-arm/arch-ixp4xx/qmgr.h
+@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl>
+ *
@@ -3860,8 +3920,8 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h
+#ifndef IXP4XX_QMGR_H
+#define IXP4XX_QMGR_H
+
++#include <linux/io.h>
+#include <linux/kernel.h>
-+#include <asm/io.h>
+
+#define HALF_QUEUES 32
+#define QUEUES 64 /* only 32 lower queues currently supported */
@@ -3906,8 +3966,6 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h
+ u32 sram[2048]; /* 0x2000 - 0x3FFF - config and buffer */
+};
+
-+extern struct qmgr_regs __iomem *qmgr_regs;
-+
+void qmgr_set_irq(unsigned int queue, int src,
+ void (*handler)(void *pdev), void *pdev);
+void qmgr_enable_irq(unsigned int queue);
@@ -3922,22 +3980,26 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h
+
+static inline void qmgr_put_entry(unsigned int queue, u32 val)
+{
++ extern struct qmgr_regs __iomem *qmgr_regs;
+ __raw_writel(val, &qmgr_regs->acc[queue][0]);
+}
+
+static inline u32 qmgr_get_entry(unsigned int queue)
+{
++ extern struct qmgr_regs __iomem *qmgr_regs;
+ return __raw_readl(&qmgr_regs->acc[queue][0]);
+}
+
+static inline int qmgr_get_stat1(unsigned int queue)
+{
++ extern struct qmgr_regs __iomem *qmgr_regs;
+ return (__raw_readl(&qmgr_regs->stat1[queue >> 3])
+ >> ((queue & 7) << 2)) & 0xF;
+}
+
+static inline int qmgr_get_stat2(unsigned int queue)
+{
++ extern struct qmgr_regs __iomem *qmgr_regs;
+ return (__raw_readl(&qmgr_regs->stat2[queue >> 4])
+ >> ((queue & 0xF) << 1)) & 0x3;
+}
@@ -3973,15 +4035,15 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/qmgr.h
+}
+
+#endif
-diff -Nur -x .git -x .gitignore linux-2.6.23/include/asm-arm/arch-ixp4xx/uncompress.h ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/uncompress.h
---- linux-2.6.23/include/asm-arm/arch-ixp4xx/uncompress.h 2007-10-09 22:31:38.000000000 +0200
-+++ ixp4xx-nep.git/include/asm-arm/arch-ixp4xx/uncompress.h 2007-10-22 19:20:22.000000000 +0200
-@@ -13,7 +13,8 @@
+diff --git a/include/asm-arm/arch-ixp4xx/uncompress.h b/include/asm-arm/arch-ixp4xx/uncompress.h
+index f7a35b7..34ef48f 100644
+--- a/include/asm-arm/arch-ixp4xx/uncompress.h
++++ b/include/asm-arm/arch-ixp4xx/uncompress.h
+@@ -13,7 +13,7 @@
#ifndef _ARCH_UNCOMPRESS_H_
#define _ARCH_UNCOMPRESS_H_
-#include <asm/hardware.h>
-+#define __ASM_ARCH_HARDWARE_H__
+#include "ixp4xx-regs.h"
#include <asm/mach-types.h>
#include <linux/serial_reg.h>