X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/58f98ac38244ed93bb01dcf377937f1aec45202b..10afdbcd6a9b0db2531f5a039d63cda95fe70ef4:/target/linux/ixp4xx/patches-2.6.23/200-npe_driver.patch 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..6e9aaa97a 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 @@ +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; @@ -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 @@ +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. @@ -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 @@ - 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 }; @@ -75,9 +79,9 @@ 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_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 @@ -88,10 +92,11 @@ 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 @@ +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 + * @@ -108,13 +113,13 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/arch/arm/mach-ixp4xx/ixp4xx_npe.c i + * Thanks, Christian. + */ + ++#include +#include +#include ++#include +#include +#include +#include -+#include -+#include +#include + +#define DEBUG_MSG 0 @@ -225,7 +230,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 +481,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 +495,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 +791,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 +838,10 @@ 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 +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 @@ -1083,7 +1093,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 +1102,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 +1117,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 @@ +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. @@ -1124,18 +1135,20 @@ 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 @@ +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 + * @@ -1165,10 +1178,11 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/arm/ixp4xx_eth.c ixp4xx +#include +#include +#include ++#include ++#include +#include +#include +#include -+#include +#include +#include + @@ -2373,7 +2387,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 +2408,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 @@ +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. @@ -2413,10 +2428,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 @@ +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 @@ -2424,10 +2440,11 @@ 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 @@ +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 + * @@ -2440,10 +2457,10 @@ diff -Nur -x .git -x .gitignore linux-2.6.23/drivers/net/wan/ixp4xx_hss.c ixp4xx + +#include +#include ++#include +#include +#include +#include -+#include +#include +#include + @@ -2590,10 +2607,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 +2665,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 +2693,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 +2748,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 +2763,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 +2885,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 +2894,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 +2915,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 +2932,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 +2948,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 +2957,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 +2994,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 +3022,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 +3044,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 +3058,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 +3072,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 +3083,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 +3102,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 +3111,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 +3159,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 +3173,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 +3217,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 +3226,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 +3269,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 +3302,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 +3320,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 +3334,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 +3346,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 +3366,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 +3437,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 +3461,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 +3472,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 +3482,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 +3532,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 +3542,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 +3565,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 +3583,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 +3611,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 +3648,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 +3698,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 +3715,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 @@ +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 @@ -3719,56 +3760,67 @@ 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 @@ +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 " +-#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 +#include -+#include + +extern const char *npe_names[]; + @@ -3804,10 +3856,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 @@ +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 @@ -3817,7 +3870,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 +3898,11 @@ 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 @@ +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 + * @@ -3860,8 +3914,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 +#include -+#include + +#define HALF_QUEUES 32 +#define QUEUES 64 /* only 32 lower queues currently supported */ @@ -3906,8 +3960,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 +3974,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 +4029,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 @@ +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 -+#define __ASM_ARCH_HARDWARE_H__ +#include "ixp4xx-regs.h" #include #include