-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 @@
+Index: linux-2.6.23.17/arch/arm/kernel/setup.c
+===================================================================
+--- linux-2.6.23.17.orig/arch/arm/kernel/setup.c
++++ linux-2.6.23.17/arch/arm/kernel/setup.c
+@@ -62,6 +62,7 @@ extern int root_mountflags;
extern void _stext, _text, _etext, __data_start, _edata, _end;
unsigned int processor_id;
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 @@
+Index: linux-2.6.23.17/arch/arm/mach-ixp4xx/Kconfig
+===================================================================
+--- linux-2.6.23.17.orig/arch/arm/mach-ixp4xx/Kconfig
++++ linux-2.6.23.17/arch/arm/mach-ixp4xx/Kconfig
+@@ -246,6 +246,20 @@ config IXP4XX_INDIRECT_PCI
need to use the indirect method instead. If you don't know
what you need, leave this option unselected.
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 @@
- obj-$(CONFIG_MACH_WG302V2) += wg302v2-setup.o
+Index: linux-2.6.23.17/arch/arm/mach-ixp4xx/Makefile
+===================================================================
+--- linux-2.6.23.17.orig/arch/arm/mach-ixp4xx/Makefile
++++ linux-2.6.23.17/arch/arm/mach-ixp4xx/Makefile
+@@ -44,3 +44,5 @@ obj-$(CONFIG_MACH_SIDEWINDER) += sidewin
+ obj-$(CONFIG_MACH_AP1000) += ap1000-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 @@
+Index: linux-2.6.23.17/arch/arm/mach-ixp4xx/ixdp425-setup.c
+===================================================================
+--- linux-2.6.23.17.orig/arch/arm/mach-ixp4xx/ixdp425-setup.c
++++ linux-2.6.23.17/arch/arm/mach-ixp4xx/ixdp425-setup.c
+@@ -177,6 +177,31 @@ static struct platform_device ixdp425_ua
.resource = ixdp425_uart_resources
};
+};
+
static struct platform_device *ixdp425_devices[] __initdata = {
- &ixdp425_i2c_controller,
+ &ixdp425_i2c_gpio,
&ixdp425_flash,
-@@ -184,7 +209,9 @@
+@@ -184,7 +209,9 @@ static struct platform_device *ixdp425_d
defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
&ixdp425_flash_nand,
#endif
};
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 @@
+Index: linux-2.6.23.17/arch/arm/mach-ixp4xx/ixp4xx_npe.c
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/arch/arm/mach-ixp4xx/ixp4xx_npe.c
+@@ -0,0 +1,741 @@
+/*
+ * Intel IXP4xx Network Processor Engine driver for Linux
+ *
+ * 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
+
+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 },
+ __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);
+ }
+ 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);
+ }
+
+ 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,
+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
+Index: linux-2.6.23.17/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/arch/arm/mach-ixp4xx/ixp4xx_qmgr.c
@@ -0,0 +1,274 @@
+/*
+ * Intel IXP4xx Queue Manager driver for Linux
+error_irq:
+ iounmap(qmgr_regs);
+error_map:
-+ release_resource(mem_res);
++ release_mem_region(IXP4XX_QMGR_BASE_PHYS, IXP4XX_QMGR_REGION_SIZE);
+ return err;
+}
+
+ 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);
+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 @@
+Index: linux-2.6.23.17/drivers/net/arm/Kconfig
+===================================================================
+--- linux-2.6.23.17.orig/drivers/net/arm/Kconfig
++++ linux-2.6.23.17/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.
+ 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 @@
+Index: linux-2.6.23.17/drivers/net/arm/Makefile
+===================================================================
+--- linux-2.6.23.17.orig/drivers/net/arm/Makefile
++++ linux-2.6.23.17/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 @@
+Index: linux-2.6.23.17/drivers/net/arm/ixp4xx_eth.c
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/drivers/net/arm/ixp4xx_eth.c
+@@ -0,0 +1,1259 @@
+/*
+ * Intel IXP4xx Ethernet driver for Linux
+ *
+#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>
+
+
+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 */
+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 @@
+Index: linux-2.6.23.17/drivers/net/wan/Kconfig
+===================================================================
+--- linux-2.6.23.17.orig/drivers/net/wan/Kconfig
++++ linux-2.6.23.17/drivers/net/wan/Kconfig
+@@ -334,6 +334,15 @@ config DSCC4_PCI_RST
Say Y if your card supports this feature.
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 @@
+Index: linux-2.6.23.17/drivers/net/wan/Makefile
+===================================================================
+--- linux-2.6.23.17.orig/drivers/net/wan/Makefile
++++ linux-2.6.23.17/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
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 @@
+Index: linux-2.6.23.17/drivers/net/wan/ixp4xx_hss.c
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/drivers/net/wan/ixp4xx_hss.c
+@@ -0,0 +1,1270 @@
+/*
+ * Intel IXP4xx HSS (synchronous serial port) driver for Linux
+ *
+
+#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>
+
+#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 */
+#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 */
+ 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;
+};
+
+ ((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 },
+ 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)
+}
+
+
-+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)
+ 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;
+ 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) {
+ *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
+ 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 */
+ 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;
+ 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++;
+ }
+#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;
+ 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);
+ 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) {
+
+ 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]);
+ 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);
+ 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)) {
+ 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__
+
+ 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);
+ }
+
+#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;
+
+ 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);
+ qmgr_release_queue(port->plat->txreadyq);
+}
+
-+static int init_queues(struct port *port)
++static int init_hdlc_queues(struct port *port)
+{
+ int i;
+
+ return 0;
+}
+
-+static void destroy_queues(struct port *port)
++static void destroy_hdlc_queues(struct port *port)
+{
+ int i;
+
+ }
+}
+
-+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;
+
+ 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 */
+ 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))
+ 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 */
+ 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;
+ 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));
+ 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++;
+ 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);
+ 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;
+ 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);
+}
+
+
-+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);
+
+}
+
+
-+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;
+ 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;
+
+ 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:
+ 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",
+
+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);
+}
+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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/cpu.h
+===================================================================
+--- linux-2.6.23.17.orig/include/asm-arm/arch-ixp4xx/cpu.h
++++ linux-2.6.23.17/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
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/hardware.h
+===================================================================
+--- linux-2.6.23.17.orig/include/asm-arm/arch-ixp4xx/hardware.h
++++ linux-2.6.23.17/include/asm-arm/arch-ixp4xx/hardware.h
@@ -27,13 +27,13 @@
#define pcibios_assign_all_busses() 1
/* 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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
+===================================================================
+--- linux-2.6.23.17.orig/include/asm-arm/arch-ixp4xx/ixp4xx-regs.h
++++ linux-2.6.23.17/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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/npe.h
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/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[];
+
+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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/platform.h
+===================================================================
+--- linux-2.6.23.17.orig/include/asm-arm/arch-ixp4xx/platform.h
++++ linux-2.6.23.17/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
* I2C driver.
*/
struct ixp4xx_i2c_pins {
-@@ -86,6 +85,27 @@
+@@ -86,6 +85,27 @@ struct ixp4xx_i2c_pins {
unsigned long scl_pin;
};
/*
* 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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/qmgr.h
+===================================================================
+--- /dev/null
++++ linux-2.6.23.17/include/asm-arm/arch-ixp4xx/qmgr.h
+@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2007 Krzysztof Halasa <khc@pm.waw.pl>
+ *
+#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 */
+ 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);
+
+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;
+}
+}
+
+#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 @@
+Index: linux-2.6.23.17/include/asm-arm/arch-ixp4xx/uncompress.h
+===================================================================
+--- linux-2.6.23.17.orig/include/asm-arm/arch-ixp4xx/uncompress.h
++++ linux-2.6.23.17/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>