aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrea Adami <andrea.adami@gmail.com>2009-01-29 01:08:40 +0100
committerAndrea Adami <andrea.adami@gmail.com>2009-01-29 01:22:27 +0100
commit9e2a3b3c6f9e98c0ba11a1069502c91af3ed9bec (patch)
tree26eb4efd3c3886d07be1da7395c60fd8e7064fbe
parentfc0b46cf92ab34f93ca7937a5da68672f92fcce8 (diff)
downloadopenembedded-9e2a3b3c6f9e98c0ba11a1069502c91af3ed9bec.tar.gz
openembedded-9e2a3b3c6f9e98c0ba11a1069502c91af3ed9bec.tar.bz2
openembedded-9e2a3b3c6f9e98c0ba11a1069502c91af3ed9bec.zip
linux-kexecboot: remove 2.6.23 (for zaurus c700 testing only)
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/akita/defconfig1736
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/arm-dma-coherent.patch361
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/arm_pxa_20070923.patch5877
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/binutils-buildid-arm.patch16
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/bootcdx86/defconfig1579
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/c7x0/defconfig1042
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/collie/defconfig1790
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/connectplus-prevent-oops-HACK.patch17
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/connectplus-remove-ide-HACK.patch12
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/hostap-monitor-mode.patch209
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/hrw-add-wcf11-to-hostap.patch31
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/htcuni-acx.patch33526
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/htcuni.patch8044
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/htcuniversal/defconfig1313
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/hx2000/defconfig1231
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/mtd-module.patch13
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/poodle/defconfig1741
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/pxa-serial-hack.patch90
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/pxa2xx_udc_support_inverse_vbus.patch120
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/pxa_fb_overlay.patch26
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/qemuarm/defconfig1397
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/qemux86/defconfig1756
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/serial-add-support-for-non-standard-xtals-to-16c950-driver.patch155
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/sharpsl-pm-postresume-r1.patch30
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/sharpsl-rc-r1.patch519
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/spitz/defconfig1737
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/squashfs3.0-2.6.15.patch4189
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tmio-fb-r6-fix-r0.patch45
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tmio-nand-r8.patch594
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tmio-ohci-r9.patch585
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tmio-tc6393-r8.patch800
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-bluetooth-r8.patch194
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-keyboard-r19.patch514
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-lcdnoise-r1-fix-r0.patch135
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-lcdnoise-r1.patch158
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-power-r18-fix-r0.patch59
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-power-r18.patch691
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-pxaac97-r6-fix-r0.patch29
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-tmio-lcd-r10-fix-r0.patch35
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa-tmio-lcd-r10.patch464
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa/defconfig1665
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/tosa_udc_use_gpio_vbus.patch100
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/usb-ohci-hooks-r3.patch47
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/uvesafb-0.1-rc3-2.6.22.patch2590
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/versatile-armv6.patch19
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/wm8750-treble.patch11
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/wm9712-reset-loop-r2.patch44
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/wm9712-suspend-cold-res-r2.patch16
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/wm97xx-lg13-r0-fix-r0.patch128
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/wm97xx-lg13-r0.patch2899
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/zylonite-boot.patch45
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/zylonite/defconfig1527
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/zylonite_keypad-r0.patch1187
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/zylonite_mtd-r0.patch4093
-rw-r--r--packages/kexecboot/linux-kexecboot-2.6.23/zylonite_touch-r0.patch1548
-rw-r--r--packages/kexecboot/linux-kexecboot_2.6.23.bb149
56 files changed, 0 insertions, 88928 deletions
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/akita/defconfig b/packages/kexecboot/linux-kexecboot-2.6.23/akita/defconfig
deleted file mode 100644
index 67b8f9ca54..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/akita/defconfig
+++ /dev/null
@@ -1,1736 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Mon May 19 22:50:30 2008
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-# CONFIG_BLK_DEV_INITRD is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-# CONFIG_PXA_SHARPSL_25x is not set
-CONFIG_PXA_SHARPSL_27x=y
-CONFIG_MACH_AKITA=y
-CONFIG_MACH_SPITZ=y
-CONFIG_MACH_BORZOI=y
-CONFIG_PXA27x=y
-CONFIG_PXA_SHARP_Cxx00=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-CONFIG_IWMMXT=y
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=m
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=m
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-CONFIG_PCMCIA_PXA2XX=m
-
-#
-# Kernel Features
-#
-# CONFIG_TICK_ONESHOT is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-CONFIG_OABI_COMPAT=y
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1 dyntick=enable debug"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_KINGSUN_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-# CONFIG_USB_IRDA is not set
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_PXA_FICP=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-# CONFIG_BT_HCIUSB_SCO is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-CONFIG_WIRELESS_EXT=y
-# CONFIG_MAC80211 is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-# CONFIG_DM_MULTIPATH_RDAC is not set
-# CONFIG_DM_DELAY is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_AX88796 is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_SMC911X is not set
-# CONFIG_NETDEV_1000 is not set
-# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
-CONFIG_WLAN_PRE80211=y
-# CONFIG_STRIP is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-CONFIG_WLAN_80211=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_LIBERTAS is not set
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_AIRO_CS=m
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-
-#
-# USB Network Adapters
-#
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_KEYBOARD_CORGI is not set
-CONFIG_KEYBOARD_SPITZ=y
-# CONFIG_KEYBOARD_PXA27x is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_SPITZ=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-CONFIG_USB_DABUSB=m
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-CONFIG_FB_PXA=y
-CONFIG_FB_PXA_LCD_QVGA=y
-# CONFIG_FB_PXA_LCD_VGA is not set
-CONFIG_FB_PXA_OVERLAY=y
-# CONFIG_FB_PXA_PARAMETERS is not set
-# CONFIG_FB_MBX is not set
-# CONFIG_FB_W100 is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-CONFIG_LOGO_LINUX_MONO=y
-CONFIG_LOGO_LINUX_VGA16=y
-CONFIG_LOGO_LINUX_CLUT224=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_HWDEP=m
-CONFIG_SND_RAWMIDI=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-CONFIG_SND_VERBOSE_PRINTK=y
-CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_DETECT is not set
-# CONFIG_SND_PCM_XRUN_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=m
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-CONFIG_SND_PXA2XX_PCM=m
-CONFIG_SND_PXA2XX_AC97=m
-
-#
-# USB devices
-#
-CONFIG_SND_USB_AUDIO=m
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# System on Chip audio support
-#
-CONFIG_SND_SOC=m
-CONFIG_SND_PXA2XX_SOC=m
-CONFIG_SND_PXA2XX_SOC_I2S=m
-CONFIG_SND_PXA2XX_SOC_SPITZ=m
-
-#
-# SoC Audio support for SuperH
-#
-CONFIG_SND_SOC_WM8750=m
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=m
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=m
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_PERSIST is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=m
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-CONFIG_USB_ACM=m
-CONFIG_USB_PRINTER=m
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-# CONFIG_USB_SERIAL_CP2101 is not set
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-CONFIG_USB_SERIAL_OMNINET=m
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-# CONFIG_USB_ADUTUX is not set
-CONFIG_USB_AUERSWALD=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-# CONFIG_USB_BERRY_CHARGE is not set
-CONFIG_USB_LED=m
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-CONFIG_USB_CYTHERM=m
-# CONFIG_USB_PHIDGET is not set
-CONFIG_USB_IDMOUSE=m
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=m
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_M66592 is not set
-CONFIG_USB_GADGET_PXA27X=y
-CONFIG_USB_PXA27X=m
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-CONFIG_USB_ZERO=m
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_RNDIS=y
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FILE_STORAGE=m
-# CONFIG_USB_FILE_STORAGE_TEST is not set
-CONFIG_USB_G_SERIAL=m
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-CONFIG_NFSD=m
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_TCP=y
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=m
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-# CONFIG_SUNRPC_BIND34 is not set
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-CONFIG_CRYPTO_DES=m
-# CONFIG_CRYPTO_FCRYPT is not set
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-# CONFIG_CRYPTO_CAMELLIA is not set
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/arm-dma-coherent.patch b/packages/kexecboot/linux-kexecboot-2.6.23/arm-dma-coherent.patch
deleted file mode 100644
index 2454becf66..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/arm-dma-coherent.patch
+++ /dev/null
@@ -1,361 +0,0 @@
-Patch largely based on the work of Ian Molton (spyro@f2s.com).
-
-Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
-Index: linux-2.6.23/arch/arm/mm/consistent.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/mm/consistent.c 2007-10-10 00:31:38.000000000 +0400
-+++ linux-2.6.23/arch/arm/mm/consistent.c 2007-11-13 01:20:58.281143408 +0300
-@@ -3,6 +3,8 @@
- *
- * Copyright (C) 2000-2004 Russell King
- *
-+ * Device local coherent memory support added by Ian Molton (spyro@f2s.com)
-+ *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
-@@ -20,6 +22,7 @@
-
- #include <asm/memory.h>
- #include <asm/cacheflush.h>
-+#include <asm/io.h>
- #include <asm/tlbflush.h>
- #include <asm/sizes.h>
-
-@@ -35,6 +38,13 @@
- #define CONSISTENT_PTE_INDEX(x) (((unsigned long)(x) - CONSISTENT_BASE) >> PGDIR_SHIFT)
- #define NUM_CONSISTENT_PTES (CONSISTENT_DMA_SIZE >> PGDIR_SHIFT)
-
-+struct dma_coherent_mem {
-+ void *virt_base;
-+ u32 device_base;
-+ int size;
-+ int flags;
-+ unsigned long *bitmap;
-+};
-
- /*
- * These are the page tables (2MB each) covering uncached, DMA consistent allocations
-@@ -153,6 +163,13 @@
- unsigned long order;
- u64 mask = ISA_DMA_THRESHOLD, limit;
-
-+ /* Following is a work-around (a.k.a. hack) to prevent pages
-+ * with __GFP_COMP being passed to split_page() which cannot
-+ * handle them. The real problem is that this flag probably
-+ * should be 0 on ARM as it is not supported on this
-+ * platform--see CONFIG_HUGETLB_PAGE. */
-+ gfp &= ~(__GFP_COMP);
-+
- if (!consistent_pte[0]) {
- printk(KERN_ERR "%s: not initialised\n", __func__);
- dump_stack();
-@@ -160,6 +177,26 @@
- }
-
- if (dev) {
-+
-+ if (dev->dma_mem) {
-+ unsigned long flags;
-+ int page;
-+ void *ret;
-+
-+ spin_lock_irqsave(&consistent_lock, flags);
-+ page = bitmap_find_free_region(dev->dma_mem->bitmap,
-+ dev->dma_mem->size,
-+ get_order(size));
-+ spin_unlock_irqrestore(&consistent_lock, flags);
-+
-+ if (page >= 0) {
-+ *handle = dev->dma_mem->device_base + (page << PAGE_SHIFT);
-+ ret = dev->dma_mem->virt_base + (page << PAGE_SHIFT);
-+ memset(ret, 0, size);
-+ return ret;
-+ }
-+ }
-+
- mask = dev->coherent_dma_mask;
-
- /*
-@@ -177,6 +214,9 @@
- mask, (unsigned long long)ISA_DMA_THRESHOLD);
- goto no_page;
- }
-+
-+ if (dev->dma_mem && dev->dma_mem->flags & DMA_MEMORY_EXCLUSIVE)
-+ return NULL;
- }
-
- /*
-@@ -360,6 +400,8 @@
- pte_t *ptep;
- int idx;
- u32 off;
-+ struct dma_coherent_mem *mem = dev ? dev->dma_mem : NULL;
-+ unsigned long order;
-
- WARN_ON(irqs_disabled());
-
-@@ -369,6 +411,15 @@
- }
-
- size = PAGE_ALIGN(size);
-+ order = get_order(size);
-+
-+ /* What if mem is valid and the range is not? */
-+ if (mem && cpu_addr >= mem->virt_base && cpu_addr < (mem->virt_base + (mem->size << PAGE_SHIFT))) {
-+ int page = (cpu_addr - mem->virt_base) >> PAGE_SHIFT;
-+
-+ bitmap_release_region(mem->bitmap, page, order);
-+ return;
-+ }
-
- spin_lock_irqsave(&consistent_lock, flags);
- c = vm_region_find(&consistent_head, (unsigned long)cpu_addr);
-@@ -438,6 +489,81 @@
- }
- EXPORT_SYMBOL(dma_free_coherent);
-
-+int dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
-+ dma_addr_t device_addr, size_t size, int flags)
-+{
-+ void *mem_base;
-+ int pages = size >> PAGE_SHIFT;
-+ int bitmap_size = (pages + 31)/32;
-+
-+ if ((flags & (DMA_MEMORY_MAP | DMA_MEMORY_IO)) == 0)
-+ goto out;
-+ if (!size)
-+ goto out;
-+ if (dev->dma_mem)
-+ goto out;
-+
-+ /* FIXME: this routine just ignores DMA_MEMORY_INCLUDES_CHILDREN */
-+ mem_base = ioremap_nocache(bus_addr, size);
-+ if (!mem_base)
-+ goto out;
-+
-+ dev->dma_mem = kmalloc(GFP_KERNEL, sizeof(struct dma_coherent_mem));
-+ if (!dev->dma_mem)
-+ goto out;
-+ memset(dev->dma_mem, 0, sizeof(struct dma_coherent_mem));
-+ dev->dma_mem->bitmap = kmalloc(GFP_KERNEL, bitmap_size);
-+ if (!dev->dma_mem->bitmap)
-+ goto free1_out;
-+ memset(dev->dma_mem->bitmap, 0, bitmap_size);
-+
-+ dev->dma_mem->virt_base = mem_base;
-+ dev->dma_mem->device_base = device_addr;
-+ dev->dma_mem->size = pages;
-+ dev->dma_mem->flags = flags;
-+
-+ if (flags & DMA_MEMORY_MAP)
-+ return DMA_MEMORY_MAP;
-+
-+ return DMA_MEMORY_IO;
-+
-+ free1_out:
-+ kfree(dev->dma_mem->bitmap);
-+ out:
-+ return 0;
-+}
-+EXPORT_SYMBOL(dma_declare_coherent_memory);
-+
-+void dma_release_declared_memory(struct device *dev)
-+{
-+ struct dma_coherent_mem *mem = dev->dma_mem;
-+
-+ if (!mem)
-+ return;
-+ dev->dma_mem = NULL;
-+ kfree(mem->bitmap);
-+ kfree(mem);
-+}
-+EXPORT_SYMBOL(dma_release_declared_memory);
-+
-+void *dma_mark_declared_memory_occupied(struct device *dev,
-+ dma_addr_t device_addr, size_t size)
-+{
-+ struct dma_coherent_mem *mem = dev->dma_mem;
-+ int pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
-+ int pos, err;
-+
-+ if (!mem)
-+ return ERR_PTR(-EINVAL);
-+
-+ pos = (device_addr - mem->device_base) >> PAGE_SHIFT;
-+ err = bitmap_allocate_region(mem->bitmap, pos, get_order(pages));
-+ if (err != 0)
-+ return ERR_PTR(err);
-+ return mem->virt_base + (pos << PAGE_SHIFT);
-+}
-+EXPORT_SYMBOL(dma_mark_declared_memory_occupied);
-+
- /*
- * Initialise the consistent memory allocation.
- */
-Index: linux-2.6.23/arch/arm/common/dmabounce.c
-===================================================================
---- linux-2.6.23.orig/arch/arm/common/dmabounce.c 2007-10-10 00:31:38.000000000 +0400
-+++ linux-2.6.23/arch/arm/common/dmabounce.c 2007-11-13 01:23:17.452501736 +0300
-@@ -16,6 +16,7 @@
- *
- * Copyright (C) 2002 Hewlett Packard Company.
- * Copyright (C) 2004 MontaVista Software, Inc.
-+ * Copyright (C) 2007 Dmitry Baryshkov <dbaryshkov@gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
-@@ -29,6 +30,7 @@
- #include <linux/dma-mapping.h>
- #include <linux/dmapool.h>
- #include <linux/list.h>
-+#include <linux/rwsem.h>
-
- #include <asm/cacheflush.h>
-
-@@ -79,6 +81,75 @@
- rwlock_t lock;
- };
-
-+struct dmabounce_check_entry {
-+ struct list_head list;
-+ dmabounce_check checker;
-+ void *data;
-+};
-+
-+static struct list_head checkers = LIST_HEAD_INIT(checkers);
-+static rwlock_t checkers_lock = RW_LOCK_UNLOCKED;
-+
-+int
-+dmabounce_register_checker(dmabounce_check function, void *data)
-+{
-+ unsigned long flags;
-+ struct dmabounce_check_entry *entry =
-+ kzalloc(sizeof(struct dmabounce_check_entry), GFP_ATOMIC);
-+
-+ if (!entry)
-+ return ENOMEM;
-+
-+ INIT_LIST_HEAD(&entry->list);
-+ entry->checker = function;
-+ entry->data = data;
-+
-+ write_lock_irqsave(checkers_lock, flags);
-+ list_add(&entry->list, &checkers);
-+ write_unlock_irqrestore(checkers_lock, flags);
-+
-+ return 0;
-+}
-+
-+void
-+dmabounce_remove_checker(dmabounce_check function, void *data)
-+{
-+ unsigned long flags;
-+ struct list_head *pos;
-+
-+ write_lock_irqsave(checkers_lock, flags);
-+ __list_for_each(pos, &checkers) {
-+ struct dmabounce_check_entry *entry = container_of(pos,
-+ struct dmabounce_check_entry, list);
-+ if (entry->checker == function && entry->data == data) {
-+ list_del(pos);
-+ write_unlock_irqrestore(checkers_lock, flags);
-+ kfree(entry);
-+ return;
-+ }
-+ }
-+
-+ printk(KERN_WARNING "dmabounce checker not found: %p\n", function);
-+}
-+
-+int dma_needs_bounce(struct device *dev, dma_addr_t dma, size_t size)
-+{
-+ unsigned long flags;
-+ struct list_head *pos;
-+
-+ read_lock_irqsave(checkers_lock, flags);
-+ __list_for_each(pos, &checkers) {
-+ struct dmabounce_check_entry *entry = container_of(pos,
-+ struct dmabounce_check_entry, list);
-+ if (entry->checker(dev, dma, size, entry->data)) {
-+ read_unlock_irqrestore(checkers_lock, flags);
-+ return 1;
-+ }
-+ }
-+
-+ read_unlock_irqrestore(checkers_lock, flags);
-+ return 0;
-+}
- #ifdef STATS
- static ssize_t dmabounce_show(struct device *dev, struct device_attribute *attr,
- char *buf)
-@@ -642,7 +713,6 @@
- dev->bus_id, dev->bus->name);
- }
-
--
- EXPORT_SYMBOL(dma_map_single);
- EXPORT_SYMBOL(dma_unmap_single);
- EXPORT_SYMBOL(dma_map_sg);
-@@ -652,6 +722,9 @@
- EXPORT_SYMBOL(dma_sync_sg);
- EXPORT_SYMBOL(dmabounce_register_dev);
- EXPORT_SYMBOL(dmabounce_unregister_dev);
-+EXPORT_SYMBOL(dmabounce_register_checker);
-+EXPORT_SYMBOL(dmabounce_remove_checker);
-+
-
- MODULE_AUTHOR("Christopher Hoover <ch@hpl.hp.com>, Deepak Saxena <dsaxena@plexity.net>");
- MODULE_DESCRIPTION("Special dma_{map/unmap/dma_sync}_* routines for systems with limited DMA windows");
-Index: linux-2.6.23/include/asm-arm/dma-mapping.h
-===================================================================
---- linux-2.6.23.orig/include/asm-arm/dma-mapping.h 2007-10-10 00:31:38.000000000 +0400
-+++ linux-2.6.23/include/asm-arm/dma-mapping.h 2007-11-13 01:24:05.588500474 +0300
-@@ -7,6 +7,18 @@
-
- #include <asm/scatterlist.h>
-
-+#define ARCH_HAS_DMA_DECLARE_COHERENT_MEMORY
-+extern int
-+dma_declare_coherent_memory(struct device *dev, dma_addr_t bus_addr,
-+ dma_addr_t device_addr, size_t size, int flags);
-+
-+extern void
-+dma_release_declared_memory(struct device *dev);
-+
-+extern void *
-+dma_mark_declared_memory_occupied(struct device *dev,
-+ dma_addr_t device_addr, size_t size);
-+
- /*
- * DMA-consistent mapping functions. These allocate/free a region of
- * uncached, unwrite-buffered mapped memory space for use with DMA
-@@ -433,23 +445,10 @@
- */
- extern void dmabounce_unregister_dev(struct device *);
-
--/**
-- * dma_needs_bounce
-- *
-- * @dev: valid struct device pointer
-- * @dma_handle: dma_handle of unbounced buffer
-- * @size: size of region being mapped
-- *
-- * Platforms that utilize the dmabounce mechanism must implement
-- * this function.
-- *
-- * The dmabounce routines call this function whenever a dma-mapping
-- * is requested to determine whether a given buffer needs to be bounced
-- * or not. The function must return 0 if the buffer is OK for
-- * DMA access and 1 if the buffer needs to be bounced.
-- *
-- */
--extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
-+typedef int (*dmabounce_check)(struct device *dev, dma_addr_t dma, size_t size, void *data);
-+extern int dmabounce_register_checker(dmabounce_check, void *data);
-+extern void dmabounce_remove_checker(dmabounce_check, void *data);
-+
- #endif /* CONFIG_DMABOUNCE */
-
- #endif /* __KERNEL__ */
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/arm_pxa_20070923.patch b/packages/kexecboot/linux-kexecboot-2.6.23/arm_pxa_20070923.patch
deleted file mode 100644
index ad4ce996df..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/arm_pxa_20070923.patch
+++ /dev/null
@@ -1,5877 +0,0 @@
-# Base git commit: da8f153e51290e7438ba7da66234a864e5d3e1c1
-# (Revert "x86_64: Quicklist support for x86_64")
-#
-# Author: eric miao (Wed Sep 12 03:13:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:19 BST 2007)
-#
-# [ARM] pxa: PXA3xx base support
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-# arch/arm/Kconfig | 6
-# arch/arm/boot/compressed/head-xscale.S | 4
-# arch/arm/mach-pxa/Kconfig | 30 +
-# arch/arm/mach-pxa/Makefile | 9
-# arch/arm/mach-pxa/clock.c | 79 ++--
-# arch/arm/mach-pxa/clock.h | 43 ++
-# arch/arm/mach-pxa/devices.h | 3
-# arch/arm/mach-pxa/generic.c | 146 ++++---
-# arch/arm/mach-pxa/generic.h | 26 +
-# arch/arm/mach-pxa/irq.c | 80 ----
-# arch/arm/mach-pxa/mfp.c | 235 ++++++++++++
-# arch/arm/mach-pxa/pxa25x.c | 90 ++++
-# arch/arm/mach-pxa/pxa27x.c | 127 ++++++
-# arch/arm/mach-pxa/pxa300.c | 93 +++++
-# arch/arm/mach-pxa/pxa320.c | 88 ++++
-# arch/arm/mach-pxa/pxa3xx.c | 216 +++++++++++
-# arch/arm/mach-pxa/time.c | 53 ++
-# arch/arm/mach-pxa/zylonite.c | 184 +++++++++
-# arch/arm/mach-pxa/zylonite_pxa300.c | 188 ++++++++++
-# arch/arm/mach-pxa/zylonite_pxa320.c | 173 +++++++++
-# arch/arm/mm/Kconfig | 4
-# drivers/i2c/busses/i2c-pxa.c | 45 +-
-# drivers/input/keyboard/pxa27x_keyboard.c | 25 +
-# drivers/mmc/host/pxamci.c | 43 +-
-# drivers/mmc/host/pxamci.h | 14
-# drivers/mtd/maps/lubbock-flash.c | 9
-# drivers/mtd/maps/mainstone-flash.c | 5
-# drivers/net/irda/pxaficp_ir.c | 51 ++
-# drivers/net/smc91x.c | 62 ---
-# drivers/net/smc91x.h | 71 +++
-# drivers/serial/pxa.c | 163 ++++----
-# drivers/serial/serial_core.c | 18
-# drivers/usb/gadget/pxa2xx_udc.c | 68 ++-
-# drivers/usb/gadget/pxa2xx_udc.h | 1
-# drivers/video/pxafb.c | 36 +
-# drivers/video/pxafb.h | 1
-# include/asm-arm/arch-pxa/hardware.h | 72 +++
-# include/asm-arm/arch-pxa/irqs.h | 6
-# include/asm-arm/arch-pxa/mfp-pxa300.h | 574 ++++++++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/mfp-pxa320.h | 446 ++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/mfp.h | 576 +++++++++++++++++++++++++++++++
-# include/asm-arm/arch-pxa/pxa-regs.h | 2
-# include/asm-arm/arch-pxa/pxa3xx-regs.h | 75 ++++
-# include/asm-arm/arch-pxa/timex.h | 2
-# include/asm-arm/arch-pxa/zylonite.h | 35 +
-# 45 files changed, 3825 insertions(+), 452 deletions(-)
-# create mode 100644 arch/arm/mach-pxa/mfp.c
-# create mode 100644 arch/arm/mach-pxa/pxa300.c
-# create mode 100644 arch/arm/mach-pxa/pxa320.c
-# create mode 100644 arch/arm/mach-pxa/pxa3xx.c
-# create mode 100644 arch/arm/mach-pxa/zylonite.c
-# create mode 100644 arch/arm/mach-pxa/zylonite_pxa300.c
-# create mode 100644 arch/arm/mach-pxa/zylonite_pxa320.c
-# create mode 100644 include/asm-arm/arch-pxa/mfp-pxa300.h
-# create mode 100644 include/asm-arm/arch-pxa/mfp-pxa320.h
-# create mode 100644 include/asm-arm/arch-pxa/mfp.h
-# create mode 100644 include/asm-arm/arch-pxa/pxa3xx-regs.h
-# create mode 100644 include/asm-arm/arch-pxa/zylonite.h
-#
-# Author: Russell King (Sat Sep 1 21:27:18 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:17 BST 2007)
-#
-# [NET] smc91x: fix PXA DMA support code
-#
-# The PXA DMA support code for smc91x doesn't pass a struct device to
-# the dma_*map_single() functions, which leads to an oops in the dma
-# bounce code. We have a struct device which was used to probe the
-# SMC chip. Use it.
-#
-# (This patch is slightly larger because it requires struct smc_local
-# to move into the header file.)
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:25:09 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:12 BST 2007)
-#
-# [SERIAL] Fix console initialisation ordering
-#
-# Ensure pm callback is called upon initialisation to place port in
-# correct power saving state. Ensure console is initialised prior
-# to deciding whether to power down the port.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:21:51 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:07 BST 2007)
-#
-# [ARM] pxa: tidy up arch/arm/mach-pxa/Makefile
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:28:55 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:03 BST 2007)
-#
-# [ARM] lubbock, mainstone: only initialise if running on that platform
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:22:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:18:01 BST 2007)
-#
-# [ARM] 4560/1: pxa: move processor specific set_wake logic out of irq.c
-#
-# a function pxa_init_irq_set_wake() was introduced, so that
-# processor specific code could install their own version
-#
-# code setting PFER and PRER registers within pxa_gpio_irq_type
-# are removed, and the edge configuration is postponed to the
-# (*set_wake) and copies the GRER and GFER register, which will
-# always be set up correctly by pxa_gpio_irq_type()
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:18:47 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:59 BST 2007)
-#
-# [ARM] 4559/1: pxa: make PXA_LAST_GPIO a run-time variable
-#
-# This definition produces processor specific code in generic function
-# pxa_gpio_mode(), thus creating inconsistencies for support of pxa25x
-# and pxa27x in a single zImage.
-#
-# As David Brownell suggests, make it a run-time variable and initialize
-# at run-time according to the number of GPIOs on the processor. For now
-# the initialization happens in pxa_init_irq_gpio(), since there is
-# already a parameter for that, besides, this is and MUST be earlier
-# than any subsequent calls to pxa_gpio_mode().
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Aug 29 10:15:41 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:57 BST 2007)
-#
-# [ARM] 4558/1: pxa: remove MACH_TYPE_LUBBOCK assignment and leave it to boot loader
-#
-# since both u-boot and blob support passing MACH_TYPE_LUBBOCK to the
-# kernel, it should be quite safe to remove this
-#
-# Signed-off-by: eric miao
-# Acked-by: Nicolas Pitre
-# Signed-off-by: Russell King
-#
-#
-# Author: eric miao (Wed Sep 12 03:13:17 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:55 BST 2007)
-#
-# [ARM] pxa: add PXA3 cpu_is_xxx() macros
-#
-# Extracted from patch by Eric Miao, this adds the cpu_is_xxx() macros
-# for identifying PXA3 SoCs.
-#
-# Signed-off-by: eric miao
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:38:32 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:51 BST 2007)
-#
-# [ARM] pxa: Make CPU_XSCALE depend on PXA25x or PXA27x
-#
-# PXA3 SoCs are supported by the Xscale3 CPU code rather than the
-# Xscale CPU code.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Wed Sep 19 09:33:55 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:48 BST 2007)
-#
-# [ARM] pxa: mark pxa_set_cken deprecated
-#
-# Allow the generic clock support code to fiddle with the CKEN register
-# and mark pxa_set_cken() deprecated.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:34:37 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:43 BST 2007)
-#
-# [ARM] pxa: remove get_lcdclk_frequency_10khz()
-#
-# get_lcdclk_frequency_10khz() is now redundant, remove it. Hide
-# pxa27x_get_lcdclk_frequency_10khz() from public view.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sun Sep 2 17:09:23 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:39 BST 2007)
-#
-# [ARM] pxa: update pxa irda driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sun Sep 2 17:08:42 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:36 BST 2007)
-#
-# [ARM] pxa: Make STUART and FICP clocks available
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:33:35 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:34 BST 2007)
-#
-# [ARM] pxa: update PXA UDC driver to use clk support
-#
-# Note: this produces a WARN() dump.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:28:15 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:31 BST 2007)
-#
-# [ARM] pxa: update pxa serial driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:20:03 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:27 BST 2007)
-#
-# [ARM] pxa: update PXA MMC interface driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:19:39 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:23 BST 2007)
-#
-# [ARM] pxa: update pxa27x keypad driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:19:10 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:17:19 BST 2007)
-#
-# [ARM] pxa: update pxa i2c driver to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:18:42 BST 2007)
-# Committer: Russell King (Sun Sep 23 14:16:50 BST 2007)
-#
-# [ARM] pxa: update pxafb to use clk support
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:18:02 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:09 BST 2007)
-#
-# [ARM] pxa: introduce clk support for PXA SoC clocks
-#
-# Signed-off-by: Russell King
-#
-# create mode 100644 arch/arm/mach-pxa/clock.h
-#
-# Author: Russell King (Mon Aug 20 10:09:18 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:09 BST 2007)
-#
-# [ARM] pxa: make pxa27x devices globally visible
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 10:07:44 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:08 BST 2007)
-#
-# [ARM] pxa: fix naming of memory/lcd/core clock functions
-#
-# Rename pxa25x and pxa27x memory/lcd/core clock functions, and
-# select the correct version at run time.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Mon Aug 20 09:47:41 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:08 BST 2007)
-#
-# [ARM] pxa: convert PXA serial drivers to use platform resources
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Russell King (Sat Sep 1 21:12:50 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:07 BST 2007)
-#
-# [ARM] pxa: make pxa timer initialisation select clock rate at runtime
-#
-# Rather than using the compile-time constant CLOCK_TICK_RATE, select
-# the clock tick rate at run time. We organise the selection so that
-# PXA3 automatically falls out with the right tick rate.
-#
-# Signed-off-by: Russell King
-#
-#
-# Author: Nicolas Pitre (Fri Aug 17 16:55:22 BST 2007)
-# Committer: Russell King (Sat Sep 22 20:48:05 BST 2007)
-#
-# [ARM] 4550/1: sched_clock on PXA should cope with run time clock rate selection
-#
-# The previous implementation was relying on compile time optimizations
-# based on a constant clock rate. However, support for different PXA
-# flavors in the same kernel binary requires that the clock be selected at
-# run time, so here it is.
-#
-# Let's move this code to a more appropriate location while at it.
-#
-# Signed-off-by: Nicolas Pitre
-# Signed-off-by: Russell King
-#
-#
---- linux-2.6.23.orig/arch/arm/Kconfig
-+++ linux-2.6.23/arch/arm/Kconfig
-@@ -336,14 +336,14 @@
- This enables support for Philips PNX4008 mobile platform.
-
- config ARCH_PXA
-- bool "PXA2xx-based"
-+ bool "PXA2xx/PXA3xx-based"
- depends on MMU
- select ARCH_MTD_XIP
- select GENERIC_GPIO
- select GENERIC_TIME
- select GENERIC_CLOCKEVENTS
- help
-- Support for Intel's PXA2XX processor line.
-+ Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
-
- config ARCH_RPC
- bool "RiscPC"
-@@ -486,7 +486,7 @@
- config IWMMXT
- bool "Enable iWMMXt support"
- depends on CPU_XSCALE || CPU_XSC3
-- default y if PXA27x
-+ default y if PXA27x || PXA3xx
- help
- Enable support for iWMMXt context switching at run time if
- running on a CPU that supports it.
---- linux-2.6.23.orig/arch/arm/boot/compressed/head-xscale.S
-+++ linux-2.6.23/arch/arm/boot/compressed/head-xscale.S
-@@ -33,10 +33,6 @@
- bic r0, r0, #0x1000 @ clear Icache
- mcr p15, 0, r0, c1, c0, 0
-
--#ifdef CONFIG_ARCH_LUBBOCK
-- mov r7, #MACH_TYPE_LUBBOCK
--#endif
--
- #ifdef CONFIG_ARCH_COTULLA_IDP
- mov r7, #MACH_TYPE_COTULLA_IDP
- #endif
---- linux-2.6.23.orig/arch/arm/mach-pxa/Kconfig
-+++ linux-2.6.23/arch/arm/mach-pxa/Kconfig
-@@ -1,6 +1,24 @@
- if ARCH_PXA
-
--menu "Intel PXA2xx Implementations"
-+menu "Intel PXA2xx/PXA3xx Implementations"
-+
-+if PXA3xx
-+
-+menu "Supported PXA3xx Processor Variants"
-+
-+config CPU_PXA300
-+ bool "PXA300 (codename Monahans-L)"
-+
-+config CPU_PXA310
-+ bool "PXA310 (codename Monahans-LV)"
-+ select CPU_PXA300
-+
-+config CPU_PXA320
-+ bool "PXA320 (codename Monahans-P)"
-+
-+endmenu
-+
-+endif
-
- choice
- prompt "Select target board"
-@@ -41,6 +59,11 @@
- bool "CompuLab EM-x270 platform"
- select PXA27x
-
-+
-+config MACH_ZYLONITE
-+ bool "PXA3xx Development Platform"
-+ select PXA3xx
-+
- config MACH_HX2750
- bool "HP iPAQ hx2750"
- select PXA27x
-@@ -228,6 +251,11 @@
- help
- Select code specific to PXA27x variants
-
-+config PXA3xx
-+ bool
-+ help
-+ Select code specific to PXA3xx variants
-+
- config PXA_SHARP_C7xx
- bool
- select PXA_SSP
---- linux-2.6.23.orig/arch/arm/mach-pxa/Makefile
-+++ linux-2.6.23/arch/arm/mach-pxa/Makefile
-@@ -6,6 +6,9 @@
- obj-y += clock.o generic.o irq.o dma.o time.o
- obj-$(CONFIG_PXA25x) += pxa25x.o
- obj-$(CONFIG_PXA27x) += pxa27x.o
-+obj-$(CONFIG_PXA3xx) += pxa3xx.o mfp.o
-+obj-$(CONFIG_CPU_PXA300) += pxa300.o
-+obj-$(CONFIG_CPU_PXA320) += pxa320.o
-
- # Specific board support
- obj-$(CONFIG_ARCH_LUBBOCK) += lubbock.o
-@@ -19,6 +22,12 @@
- obj-$(CONFIG_MACH_POODLE) += poodle.o corgi_ssp.o sharpsl_pm.o poodle_pm.o
- obj-$(CONFIG_MACH_TOSA) += tosa.o
- obj-$(CONFIG_MACH_EM_X270) += em-x270.o
-+ifeq ($(CONFIG_MACH_ZYLONITE),y)
-+ obj-y += zylonite.o
-+ obj-$(CONFIG_CPU_PXA300) += zylonite_pxa300.o
-+ obj-$(CONFIG_CPU_PXA320) += zylonite_pxa320.o
-+endif
-+
- obj-$(CONFIG_MACH_HX2750) += hx2750.o hx2750_test.o
- obj-$(CONFIG_MACH_HTCUNIVERSAL) += htcuniversal/
-
---- linux-2.6.23.orig/arch/arm/mach-pxa/clock.c
-+++ linux-2.6.23/arch/arm/mach-pxa/clock.c
-@@ -9,19 +9,15 @@
- #include <linux/string.h>
- #include <linux/clk.h>
- #include <linux/spinlock.h>
-+#include <linux/platform_device.h>
-+#include <linux/delay.h>
-
- #include <asm/arch/pxa-regs.h>
- #include <asm/hardware.h>
-
--struct clk {
-- struct list_head node;
-- unsigned long rate;
-- struct module *owner;
-- const char *name;
-- unsigned int enabled;
-- void (*enable)(void);
-- void (*disable)(void);
--};
-+#include "devices.h"
-+#include "generic.h"
-+#include "clock.h"
-
- static LIST_HEAD(clocks);
- static DEFINE_MUTEX(clocks_mutex);
-@@ -33,7 +29,8 @@
-
- mutex_lock(&clocks_mutex);
- list_for_each_entry(p, &clocks, node) {
-- if (strcmp(id, p->name) == 0 && try_module_get(p->owner)) {
-+ if (strcmp(id, p->name) == 0 &&
-+ (p->dev == NULL || p->dev == dev)) {
- clk = p;
- break;
- }
-@@ -46,7 +43,6 @@
-
- void clk_put(struct clk *clk)
- {
-- module_put(clk->owner);
- }
- EXPORT_SYMBOL(clk_put);
-
-@@ -56,8 +52,12 @@
-
- spin_lock_irqsave(&clocks_lock, flags);
- if (clk->enabled++ == 0)
-- clk->enable();
-+ clk->ops->enable(clk);
- spin_unlock_irqrestore(&clocks_lock, flags);
-+
-+ if (clk->delay)
-+ udelay(clk->delay);
-+
- return 0;
- }
- EXPORT_SYMBOL(clk_enable);
-@@ -70,54 +70,75 @@
-
- spin_lock_irqsave(&clocks_lock, flags);
- if (--clk->enabled == 0)
-- clk->disable();
-+ clk->ops->disable(clk);
- spin_unlock_irqrestore(&clocks_lock, flags);
- }
- EXPORT_SYMBOL(clk_disable);
-
- unsigned long clk_get_rate(struct clk *clk)
- {
-- return clk->rate;
-+ unsigned long rate;
-+
-+ rate = clk->rate;
-+ if (clk->ops->getrate)
-+ rate = clk->ops->getrate(clk);
-+
-+ return rate;
- }
- EXPORT_SYMBOL(clk_get_rate);
-
-
--static void clk_gpio27_enable(void)
-+static void clk_gpio27_enable(struct clk *clk)
- {
- pxa_gpio_mode(GPIO11_3_6MHz_MD);
- }
-
--static void clk_gpio27_disable(void)
-+static void clk_gpio27_disable(struct clk *clk)
- {
- }
-
--static struct clk clk_gpio27 = {
-- .name = "GPIO27_CLK",
-- .rate = 3686400,
-+static const struct clkops clk_gpio27_ops = {
- .enable = clk_gpio27_enable,
- .disable = clk_gpio27_disable,
- };
-
--int clk_register(struct clk *clk)
-+
-+void clk_cken_enable(struct clk *clk)
- {
-- mutex_lock(&clocks_mutex);
-- list_add(&clk->node, &clocks);
-- mutex_unlock(&clocks_mutex);
-- return 0;
-+ CKEN |= 1 << clk->cken;
- }
--EXPORT_SYMBOL(clk_register);
-
--void clk_unregister(struct clk *clk)
-+void clk_cken_disable(struct clk *clk)
- {
-+ CKEN &= ~(1 << clk->cken);
-+}
-+
-+const struct clkops clk_cken_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+};
-+
-+static struct clk common_clks[] = {
-+ {
-+ .name = "GPIO27_CLK",
-+ .ops = &clk_gpio27_ops,
-+ .rate = 3686400,
-+ },
-+};
-+
-+void clks_register(struct clk *clks, size_t num)
-+{
-+ int i;
-+
- mutex_lock(&clocks_mutex);
-- list_del(&clk->node);
-+ for (i = 0; i < num; i++)
-+ list_add(&clks[i].node, &clocks);
- mutex_unlock(&clocks_mutex);
- }
--EXPORT_SYMBOL(clk_unregister);
-
- static int __init clk_init(void)
- {
-- clk_register(&clk_gpio27);
-+ clks_register(common_clks, ARRAY_SIZE(common_clks));
- return 0;
- }
- arch_initcall(clk_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/clock.h
-@@ -0,0 +1,43 @@
-+struct clk;
-+
-+struct clkops {
-+ void (*enable)(struct clk *);
-+ void (*disable)(struct clk *);
-+ unsigned long (*getrate)(struct clk *);
-+};
-+
-+struct clk {
-+ struct list_head node;
-+ const char *name;
-+ struct device *dev;
-+ const struct clkops *ops;
-+ unsigned long rate;
-+ unsigned int cken;
-+ unsigned int delay;
-+ unsigned int enabled;
-+};
-+
-+#define INIT_CKEN(_name, _cken, _rate, _delay, _dev) \
-+ { \
-+ .name = _name, \
-+ .dev = _dev, \
-+ .ops = &clk_cken_ops, \
-+ .rate = _rate, \
-+ .cken = CKEN_##_cken, \
-+ .delay = _delay, \
-+ }
-+
-+#define INIT_CK(_name, _cken, _ops, _dev) \
-+ { \
-+ .name = _name, \
-+ .dev = _dev, \
-+ .ops = _ops, \
-+ .cken = CKEN_##_cken, \
-+ }
-+
-+extern const struct clkops clk_cken_ops;
-+
-+void clk_cken_enable(struct clk *clk);
-+void clk_cken_disable(struct clk *clk);
-+
-+void clks_register(struct clk *clks, size_t num);
---- linux-2.6.23.orig/arch/arm/mach-pxa/devices.h
-+++ linux-2.6.23/arch/arm/mach-pxa/devices.h
-@@ -9,3 +9,6 @@
- extern struct platform_device pxa_device_i2s;
- extern struct platform_device pxa_device_ficp;
- extern struct platform_device pxa_device_rtc;
-+
-+extern struct platform_device pxa27x_device_i2c_power;
-+extern struct platform_device pxa27x_device_ohci;
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.c
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.c
-@@ -25,10 +25,6 @@
- #include <linux/pm.h>
- #include <linux/string.h>
-
--#include <linux/sched.h>
--#include <asm/cnt32_to_63.h>
--#include <asm/div64.h>
--
- #include <asm/hardware.h>
- #include <asm/irq.h>
- #include <asm/system.h>
-@@ -48,66 +44,39 @@
- #include "generic.h"
-
- /*
-- * This is the PXA2xx sched_clock implementation. This has a resolution
-- * of at least 308ns and a maximum value that depends on the value of
-- * CLOCK_TICK_RATE.
-- *
-- * The return value is guaranteed to be monotonic in that range as
-- * long as there is always less than 582 seconds between successive
-- * calls to this function.
-+ * Get the clock frequency as reflected by CCCR and the turbo flag.
-+ * We assume these values have been applied via a fcs.
-+ * If info is not 0 we also display the current settings.
- */
--unsigned long long sched_clock(void)
-+unsigned int get_clk_frequency_khz(int info)
- {
-- unsigned long long v = cnt32_to_63(OSCR);
-- /* Note: top bit ov v needs cleared unless multiplier is even. */
--
--#if CLOCK_TICK_RATE == 3686400
-- /* 1E9 / 3686400 => 78125 / 288, max value = 32025597s (370 days). */
-- /* The <<1 is used to get rid of tick.hi top bit */
-- v *= 78125<<1;
-- do_div(v, 288<<1);
--#elif CLOCK_TICK_RATE == 3250000
-- /* 1E9 / 3250000 => 4000 / 13, max value = 709490156s (8211 days) */
-- v *= 4000;
-- do_div(v, 13);
--#elif CLOCK_TICK_RATE == 3249600
-- /* 1E9 / 3249600 => 625000 / 2031, max value = 4541295s (52 days) */
-- v *= 625000;
-- do_div(v, 2031);
--#else
--#warning "consider fixing sched_clock for your value of CLOCK_TICK_RATE"
-- /*
-- * 96-bit math to perform tick * NSEC_PER_SEC / CLOCK_TICK_RATE for
-- * any value of CLOCK_TICK_RATE. Max value is in the 80 thousand
-- * years range and truncation to unsigned long long limits it to
-- * sched_clock's max range of ~584 years. This is nice but with
-- * higher computation cost.
-- */
-- {
-- union {
-- unsigned long long val;
-- struct { unsigned long lo, hi; };
-- } x;
-- unsigned long long y;
--
-- x.val = v;
-- x.hi &= 0x7fffffff;
-- y = (unsigned long long)x.lo * NSEC_PER_SEC;
-- x.lo = y;
-- y = (y >> 32) + (unsigned long long)x.hi * NSEC_PER_SEC;
-- x.hi = do_div(y, CLOCK_TICK_RATE);
-- do_div(x.val, CLOCK_TICK_RATE);
-- x.hi += y;
-- v = x.val;
-- }
--#endif
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ return pxa25x_get_clk_frequency_khz(info);
-+ else if (cpu_is_pxa27x())
-+ return pxa27x_get_clk_frequency_khz(info);
-+ else
-+ return pxa3xx_get_clk_frequency_khz(info);
-+}
-+EXPORT_SYMBOL(get_clk_frequency_khz);
-
-- return v;
-+/*
-+ * Return the current memory clock frequency in units of 10kHz
-+ */
-+unsigned int get_memclk_frequency_10khz(void)
-+{
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ return pxa25x_get_memclk_frequency_10khz();
-+ else if (cpu_is_pxa27x())
-+ return pxa27x_get_memclk_frequency_10khz();
-+ else
-+ return pxa3xx_get_memclk_frequency_10khz();
- }
-+EXPORT_SYMBOL(get_memclk_frequency_10khz);
-
- /*
- * Handy function to set GPIO alternate functions
- */
-+int pxa_last_gpio;
-
- int pxa_gpio_mode(int gpio_mode)
- {
-@@ -116,7 +85,7 @@
- int fn = (gpio_mode & GPIO_MD_MASK_FN) >> 8;
- int gafr;
-
-- if (gpio > PXA_LAST_GPIO)
-+ if (gpio > pxa_last_gpio)
- return -EINVAL;
-
- local_irq_save(flags);
-@@ -160,7 +129,7 @@
- /*
- * Routine to safely enable or disable a clock in the CKEN
- */
--void pxa_set_cken(int clock, int enable)
-+void __pxa_set_cken(int clock, int enable)
- {
- unsigned long flags;
- local_irq_save(flags);
-@@ -173,7 +142,7 @@
- local_irq_restore(flags);
- }
-
--EXPORT_SYMBOL(pxa_set_cken);
-+EXPORT_SYMBOL(__pxa_set_cken);
-
- /*
- * Intel PXA2xx internal register mapping.
-@@ -330,21 +299,80 @@
- pxa_device_fb.dev.parent = parent_dev;
- }
-
-+static struct resource pxa_resource_ffuart[] = {
-+ {
-+ .start = __PREG(FFUART),
-+ .end = __PREG(FFUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_FFUART,
-+ .end = IRQ_FFUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
- struct platform_device pxa_device_ffuart= {
- .name = "pxa2xx-uart",
- .id = 0,
-+ .resource = pxa_resource_ffuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_ffuart),
-+};
-+
-+static struct resource pxa_resource_btuart[] = {
-+ {
-+ .start = __PREG(BTUART),
-+ .end = __PREG(BTUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_BTUART,
-+ .end = IRQ_BTUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
- };
-+
- struct platform_device pxa_device_btuart = {
- .name = "pxa2xx-uart",
- .id = 1,
-+ .resource = pxa_resource_btuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_btuart),
- };
-+
-+static struct resource pxa_resource_stuart[] = {
-+ {
-+ .start = __PREG(STUART),
-+ .end = __PREG(STUART) + 35,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_STUART,
-+ .end = IRQ_STUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
- struct platform_device pxa_device_stuart = {
- .name = "pxa2xx-uart",
- .id = 2,
-+ .resource = pxa_resource_stuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_stuart),
-+};
-+
-+static struct resource pxa_resource_hwuart[] = {
-+ {
-+ .start = __PREG(HWUART),
-+ .end = __PREG(HWUART) + 47,
-+ .flags = IORESOURCE_MEM,
-+ }, {
-+ .start = IRQ_HWUART,
-+ .end = IRQ_HWUART,
-+ .flags = IORESOURCE_IRQ,
-+ }
- };
-+
- struct platform_device pxa_device_hwuart = {
- .name = "pxa2xx-uart",
- .id = 3,
-+ .resource = pxa_resource_hwuart,
-+ .num_resources = ARRAY_SIZE(pxa_resource_hwuart),
- };
-
- void __init pxa_set_ffuart_info(struct platform_pxa_serial_funcs *info)
---- linux-2.6.23.orig/arch/arm/mach-pxa/generic.h
-+++ linux-2.6.23/arch/arm/mach-pxa/generic.h
-@@ -15,14 +15,40 @@
- extern void __init pxa_init_irq_low(void);
- extern void __init pxa_init_irq_high(void);
- extern void __init pxa_init_irq_gpio(int gpio_nr);
-+extern void __init pxa_init_irq_set_wake(int (*set_wake)(unsigned int, unsigned int));
- extern void __init pxa25x_init_irq(void);
- extern void __init pxa27x_init_irq(void);
-+extern void __init pxa3xx_init_irq(void);
- extern void __init pxa_map_io(void);
-
- extern unsigned int get_clk_frequency_khz(int info);
-+extern int pxa_last_gpio;
-
- #define SET_BANK(__nr,__start,__size) \
- mi->bank[__nr].start = (__start), \
- mi->bank[__nr].size = (__size), \
- mi->bank[__nr].node = (((unsigned)(__start) - PHYS_OFFSET) >> 27)
-
-+#ifdef CONFIG_PXA25x
-+extern unsigned pxa25x_get_clk_frequency_khz(int);
-+extern unsigned pxa25x_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa25x_get_clk_frequency_khz(x) (0)
-+#define pxa25x_get_memclk_frequency_10khz() (0)
-+#endif
-+
-+#ifdef CONFIG_PXA27x
-+extern unsigned pxa27x_get_clk_frequency_khz(int);
-+extern unsigned pxa27x_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa27x_get_clk_frequency_khz(x) (0)
-+#define pxa27x_get_memclk_frequency_10khz() (0)
-+#endif
-+
-+#ifdef CONFIG_PXA3xx
-+extern unsigned pxa3xx_get_clk_frequency_khz(int);
-+extern unsigned pxa3xx_get_memclk_frequency_10khz(void);
-+#else
-+#define pxa3xx_get_clk_frequency_khz(x) (0)
-+#define pxa3xx_get_memclk_frequency_10khz() (0)
-+#endif
---- linux-2.6.23.orig/arch/arm/mach-pxa/irq.c
-+++ linux-2.6.23/arch/arm/mach-pxa/irq.c
-@@ -38,33 +38,11 @@
- ICMR |= (1 << irq);
- }
-
--static int pxa_set_wake(unsigned int irq, unsigned int on)
--{
-- u32 mask;
--
-- switch (irq) {
-- case IRQ_RTCAlrm:
-- mask = PWER_RTC;
-- break;
--#ifdef CONFIG_PXA27x
-- /* REVISIT can handle USBH1, USBH2, USB, MSL, USIM, ... */
--#endif
-- default:
-- return -EINVAL;
-- }
-- if (on)
-- PWER |= mask;
-- else
-- PWER &= ~mask;
-- return 0;
--}
--
- static struct irq_chip pxa_internal_chip_low = {
- .name = "SC",
- .ack = pxa_mask_low_irq,
- .mask = pxa_mask_low_irq,
- .unmask = pxa_unmask_low_irq,
-- .set_wake = pxa_set_wake,
- };
-
- void __init pxa_init_irq_low(void)
-@@ -87,7 +65,7 @@
- }
- }
-
--#ifdef CONFIG_PXA27x
-+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-
- /*
- * This is for the second set of internal IRQs as found on the PXA27x.
-@@ -125,26 +103,6 @@
- }
- #endif
-
--/* Note that if an input/irq line ever gets changed to an output during
-- * suspend, the relevant PWER, PRER, and PFER bits should be cleared.
-- */
--#ifdef CONFIG_PXA27x
--
--/* PXA27x: Various gpios can issue wakeup events. This logic only
-- * handles the simple cases, not the WEMUX2 and WEMUX3 options
-- */
--#define PXA27x_GPIO_NOWAKE_MASK \
-- ((1 << 8) | (1 << 7) | (1 << 6) | (1 << 5) | (1 << 2))
--#define WAKEMASK(gpio) \
-- (((gpio) <= 15) \
-- ? ((1 << (gpio)) & ~PXA27x_GPIO_NOWAKE_MASK) \
-- : ((gpio == 35) ? (1 << 24) : 0))
--#else
--
--/* pxa 210, 250, 255, 26x: gpios 0..15 can issue wakeups */
--#define WAKEMASK(gpio) (((gpio) <= 15) ? (1 << (gpio)) : 0)
--#endif
--
- /*
- * PXA GPIO edge detection for IRQs:
- * IRQs are generated on Falling-Edge, Rising-Edge, or both.
-@@ -158,11 +116,9 @@
- static int pxa_gpio_irq_type(unsigned int irq, unsigned int type)
- {
- int gpio, idx;
-- u32 mask;
-
- gpio = IRQ_TO_GPIO(irq);
- idx = gpio >> 5;
-- mask = WAKEMASK(gpio);
-
- if (type == IRQT_PROBE) {
- /* Don't mess with enabled GPIOs using preconfigured edges or
-@@ -182,19 +138,15 @@
- if (type & __IRQT_RISEDGE) {
- /* printk("rising "); */
- __set_bit (gpio, GPIO_IRQ_rising_edge);
-- PRER |= mask;
- } else {
- __clear_bit (gpio, GPIO_IRQ_rising_edge);
-- PRER &= ~mask;
- }
-
- if (type & __IRQT_FALEDGE) {
- /* printk("falling "); */
- __set_bit (gpio, GPIO_IRQ_falling_edge);
-- PFER |= mask;
- } else {
- __clear_bit (gpio, GPIO_IRQ_falling_edge);
-- PFER &= ~mask;
- }
-
- /* printk("edges\n"); */
-@@ -213,29 +165,12 @@
- GEDR0 = (1 << (irq - IRQ_GPIO0));
- }
-
--static int pxa_set_gpio_wake(unsigned int irq, unsigned int on)
--{
-- int gpio = IRQ_TO_GPIO(irq);
-- u32 mask = WAKEMASK(gpio);
--
-- if (!mask)
-- return -EINVAL;
--
-- if (on)
-- PWER |= mask;
-- else
-- PWER &= ~mask;
-- return 0;
--}
--
--
- static struct irq_chip pxa_low_gpio_chip = {
- .name = "GPIO-l",
- .ack = pxa_ack_low_gpio,
- .mask = pxa_mask_low_irq,
- .unmask = pxa_unmask_low_irq,
- .set_type = pxa_gpio_irq_type,
-- .set_wake = pxa_set_gpio_wake,
- };
-
- /*
-@@ -342,13 +277,14 @@
- .mask = pxa_mask_muxed_gpio,
- .unmask = pxa_unmask_muxed_gpio,
- .set_type = pxa_gpio_irq_type,
-- .set_wake = pxa_set_gpio_wake,
- };
-
- void __init pxa_init_irq_gpio(int gpio_nr)
- {
- int irq, i;
-
-+ pxa_last_gpio = gpio_nr - 1;
-+
- /* clear all GPIO edge detects */
- for (i = 0; i < gpio_nr; i += 32) {
- GFER(i) = 0;
-@@ -375,3 +311,13 @@
- set_irq_chip(IRQ_GPIO_2_x, &pxa_internal_chip_low);
- set_irq_chained_handler(IRQ_GPIO_2_x, pxa_gpio_demux_handler);
- }
-+
-+void __init pxa_init_irq_set_wake(int (*set_wake)(unsigned int, unsigned int))
-+{
-+ pxa_internal_chip_low.set_wake = set_wake;
-+#ifdef CONFIG_PXA27x
-+ pxa_internal_chip_high.set_wake = set_wake;
-+#endif
-+ pxa_low_gpio_chip.set_wake = set_wake;
-+ pxa_muxed_gpio_chip.set_wake = set_wake;
-+}
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/mfp.c
-@@ -0,0 +1,235 @@
-+/*
-+ * linux/arch/arm/mach-pxa/mfp.c
-+ *
-+ * PXA3xx Multi-Function Pin Support
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/io.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp.h>
-+
-+/* mfp_spin_lock is used to ensure that MFP register configuration
-+ * (most likely a read-modify-write operation) is atomic, and that
-+ * mfp_table[] is consistent
-+ */
-+static DEFINE_SPINLOCK(mfp_spin_lock);
-+
-+static void __iomem *mfpr_mmio_base = (void __iomem *)&__REG(MFPR_BASE);
-+static struct pxa3xx_mfp_pin mfp_table[MFP_PIN_MAX];
-+
-+#define mfpr_readl(off) \
-+ __raw_readl(mfpr_mmio_base + (off))
-+
-+#define mfpr_writel(off, val) \
-+ __raw_writel(val, mfpr_mmio_base + (off))
-+
-+/*
-+ * perform a read-back of any MFPR register to make sure the
-+ * previous writings are finished
-+ */
-+#define mfpr_sync() (void)__raw_readl(mfpr_mmio_base + 0)
-+
-+static inline void __mfp_config(int pin, unsigned long val)
-+{
-+ unsigned long off = mfp_table[pin].mfpr_off;
-+
-+ mfp_table[pin].mfpr_val = val;
-+ mfpr_writel(off, val);
-+}
-+
-+void pxa3xx_mfp_config(mfp_cfg_t *mfp_cfgs, int num)
-+{
-+ int i, pin;
-+ unsigned long val, flags;
-+ mfp_cfg_t *mfp_cfg = mfp_cfgs;
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ for (i = 0; i < num; i++, mfp_cfg++) {
-+ pin = MFP_CFG_PIN(*mfp_cfg);
-+ val = MFP_CFG_VAL(*mfp_cfg);
-+
-+ BUG_ON(pin >= MFP_PIN_MAX);
-+
-+ __mfp_config(pin, val);
-+ }
-+
-+ mfpr_sync();
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+unsigned long pxa3xx_mfp_read(int mfp)
-+{
-+ unsigned long val, flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ val = mfpr_readl(mfp_table[mfp].mfpr_off);
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+
-+ return val;
-+}
-+
-+void pxa3xx_mfp_write(int mfp, unsigned long val)
-+{
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ mfpr_writel(mfp_table[mfp].mfpr_off, val);
-+ mfpr_sync();
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_afds(int mfp, int af, int ds)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~(MFPR_AF_MASK | MFPR_DRV_MASK);
-+ mfpr_val |= (((af & 0x7) << MFPR_ALT_OFFSET) |
-+ ((ds & 0x7) << MFPR_DRV_OFFSET));
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_rdh(int mfp, int rdh)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_RDH_MASK;
-+
-+ if (likely(rdh))
-+ mfpr_val |= (1u << MFPR_SS_OFFSET);
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_lpm(int mfp, int lpm)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_LPM_MASK;
-+
-+ if (lpm & 0x1) mfpr_val |= 1u << MFPR_SON_OFFSET;
-+ if (lpm & 0x2) mfpr_val |= 1u << MFPR_SD_OFFSET;
-+ if (lpm & 0x4) mfpr_val |= 1u << MFPR_PU_OFFSET;
-+ if (lpm & 0x8) mfpr_val |= 1u << MFPR_PD_OFFSET;
-+ if (lpm &0x10) mfpr_val |= 1u << MFPR_PS_OFFSET;
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_pull(int mfp, int pull)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+ mfpr_val &= ~MFPR_PULL_MASK;
-+ mfpr_val |= ((pull & 0x7u) << MFPR_PD_OFFSET);
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void pxa3xx_mfp_set_edge(int mfp, int edge)
-+{
-+ uint32_t mfpr_off, mfpr_val;
-+ unsigned long flags;
-+
-+ BUG_ON(mfp >= MFP_PIN_MAX);
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ mfpr_off = mfp_table[mfp].mfpr_off;
-+ mfpr_val = mfpr_readl(mfpr_off);
-+
-+ mfpr_val &= ~MFPR_EDGE_MASK;
-+ mfpr_val |= (edge & 0x3u) << MFPR_ERE_OFFSET;
-+ mfpr_val |= (!edge & 0x1) << MFPR_EC_OFFSET;
-+
-+ mfpr_writel(mfpr_off, mfpr_val);
-+ mfpr_sync();
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *map)
-+{
-+ struct pxa3xx_mfp_addr_map *p;
-+ unsigned long offset, flags;
-+ int i;
-+
-+ spin_lock_irqsave(&mfp_spin_lock, flags);
-+
-+ for (p = map; p->start != MFP_PIN_INVALID; p++) {
-+ offset = p->offset;
-+ i = p->start;
-+
-+ do {
-+ mfp_table[i].mfpr_off = offset;
-+ mfp_table[i].mfpr_val = 0;
-+ offset += 4; i++;
-+ } while ((i <= p->end) && (p->end != -1));
-+ }
-+
-+ spin_unlock_irqrestore(&mfp_spin_lock, flags);
-+}
-+
-+void __init pxa3xx_init_mfp(void)
-+{
-+ memset(mfp_table, 0, sizeof(mfp_table));
-+}
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa25x.c
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa25x.c
-@@ -30,6 +30,7 @@
-
- #include "generic.h"
- #include "devices.h"
-+#include "clock.h"
-
- /*
- * Various clock factors driven by the CCCR register.
-@@ -53,7 +54,7 @@
- * We assume these values have been applied via a fcs.
- * If info is not 0 we also display the current settings.
- */
--unsigned int get_clk_frequency_khz(int info)
-+unsigned int pxa25x_get_clk_frequency_khz(int info)
- {
- unsigned long cccr, turbo;
- unsigned int l, L, m, M, n2, N;
-@@ -86,27 +87,48 @@
- return (turbo & 1) ? (N/1000) : (M/1000);
- }
-
--EXPORT_SYMBOL(get_clk_frequency_khz);
--
- /*
- * Return the current memory clock frequency in units of 10kHz
- */
--unsigned int get_memclk_frequency_10khz(void)
-+unsigned int pxa25x_get_memclk_frequency_10khz(void)
- {
- return L_clk_mult[(CCCR >> 0) & 0x1f] * BASE_CLK / 10000;
- }
-
--EXPORT_SYMBOL(get_memclk_frequency_10khz);
--
--/*
-- * Return the current LCD clock frequency in units of 10kHz
-- */
--unsigned int get_lcdclk_frequency_10khz(void)
-+static unsigned long clk_pxa25x_lcd_getrate(struct clk *clk)
- {
-- return get_memclk_frequency_10khz();
-+ return pxa25x_get_memclk_frequency_10khz() * 10000;
- }
-
--EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
-+static const struct clkops clk_pxa25x_lcd_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+ .getrate = clk_pxa25x_lcd_getrate,
-+};
-+
-+/*
-+ * 3.6864MHz -> OST, GPIO, SSP, PWM, PLLs (95.842MHz, 147.456MHz)
-+ * 95.842MHz -> MMC 19.169MHz, I2C 31.949MHz, FICP 47.923MHz, USB 47.923MHz
-+ * 147.456MHz -> UART 14.7456MHz, AC97 12.288MHz, I2S 5.672MHz (allegedly)
-+ */
-+static struct clk pxa25x_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa25x_lcd_ops, &pxa_device_fb.dev),
-+ INIT_CKEN("UARTCLK", FFUART, 14745600, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14745600, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14745600, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14745600, 1, NULL),
-+ INIT_CKEN("UDCCLK", USB, 47923000, 5, &pxa_device_udc.dev),
-+ INIT_CKEN("MMCCLK", MMC, 19169000, 0, &pxa_device_mci.dev),
-+ INIT_CKEN("I2CCLK", I2C, 31949000, 0, &pxa_device_i2c.dev),
-+ /*
-+ INIT_CKEN("PWMCLK", PWM0, 3686400, 0, NULL),
-+ INIT_CKEN("PWMCLK", PWM0, 3686400, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP, 3686400, 0, NULL),
-+ INIT_CKEN("I2SCLK", I2S, 14745600, 0, NULL),
-+ INIT_CKEN("NSSPCLK", NSSP, 3686400, 0, NULL),
-+ */
-+ INIT_CKEN("FICPCLK", FICP, 47923000, 0, NULL),
-+};
-
- #ifdef CONFIG_PM
-
-@@ -207,10 +229,52 @@
- }
- #endif
-
-+/* PXA25x: supports wakeup from GPIO0..GPIO15 and RTC alarm
-+ */
-+
-+static int pxa25x_set_wake(unsigned int irq, unsigned int on)
-+{
-+ int gpio = IRQ_TO_GPIO(irq);
-+ uint32_t gpio_bit, mask = 0;
-+
-+ if (gpio >= 0 && gpio <= 15) {
-+ gpio_bit = GPIO_bit(gpio);
-+ mask = gpio_bit;
-+ if (on) {
-+ if (GRER(gpio) | gpio_bit)
-+ PRER |= gpio_bit;
-+ else
-+ PRER &= ~gpio_bit;
-+
-+ if (GFER(gpio) | gpio_bit)
-+ PFER |= gpio_bit;
-+ else
-+ PFER &= ~gpio_bit;
-+ }
-+ goto set_pwer;
-+ }
-+
-+ if (irq == IRQ_RTCAlrm) {
-+ mask = PWER_RTC;
-+ goto set_pwer;
-+ }
-+
-+ return -EINVAL;
-+
-+set_pwer:
-+ if (on)
-+ PWER |= mask;
-+ else
-+ PWER &=~mask;
-+
-+ return 0;
-+}
-+
- void __init pxa25x_init_irq(void)
- {
- pxa_init_irq_low();
- pxa_init_irq_gpio(85);
-+ pxa_init_irq_set_wake(pxa25x_set_wake);
- }
-
- static struct platform_device *pxa25x_devices[] __initdata = {
-@@ -231,6 +295,8 @@
- int ret = 0;
-
- if (cpu_is_pxa21x() || cpu_is_pxa25x()) {
-+ clks_register(pxa25x_clks, ARRAY_SIZE(pxa25x_clks));
-+
- if ((ret = pxa_init_dma(16)))
- return ret;
- #ifdef CONFIG_PM
---- linux-2.6.23.orig/arch/arm/mach-pxa/pxa27x.c
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa27x.c
-@@ -27,6 +27,7 @@
-
- #include "generic.h"
- #include "devices.h"
-+#include "clock.h"
-
- /* Crystal clock: 13MHz */
- #define BASE_CLK 13000000
-@@ -36,7 +37,7 @@
- * We assume these values have been applied via a fcs.
- * If info is not 0 we also display the current settings.
- */
--unsigned int get_clk_frequency_khz( int info)
-+unsigned int pxa27x_get_clk_frequency_khz(int info)
- {
- unsigned long ccsr, clkcfg;
- unsigned int l, L, m, M, n2, N, S;
-@@ -79,7 +80,7 @@
- * Return the current mem clock frequency in units of 10kHz as
- * reflected by CCCR[A], B, and L
- */
--unsigned int get_memclk_frequency_10khz(void)
-+unsigned int pxa27x_get_memclk_frequency_10khz(void)
- {
- unsigned long ccsr, clkcfg;
- unsigned int l, L, m, M;
-@@ -104,7 +105,7 @@
- /*
- * Return the current LCD clock frequency in units of 10kHz as
- */
--unsigned int get_lcdclk_frequency_10khz(void)
-+static unsigned int pxa27x_get_lcdclk_frequency_10khz(void)
- {
- unsigned long ccsr;
- unsigned int l, L, k, K;
-@@ -120,9 +121,47 @@
- return (K / 10000);
- }
-
--EXPORT_SYMBOL(get_clk_frequency_khz);
--EXPORT_SYMBOL(get_memclk_frequency_10khz);
--EXPORT_SYMBOL(get_lcdclk_frequency_10khz);
-+static unsigned long clk_pxa27x_lcd_getrate(struct clk *clk)
-+{
-+ return pxa27x_get_lcdclk_frequency_10khz() * 10000;
-+}
-+
-+static const struct clkops clk_pxa27x_lcd_ops = {
-+ .enable = clk_cken_enable,
-+ .disable = clk_cken_disable,
-+ .getrate = clk_pxa27x_lcd_getrate,
-+};
-+
-+static struct clk pxa27x_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa27x_lcd_ops, &pxa_device_fb.dev),
-+ INIT_CK("CAMCLK", CAMERA, &clk_pxa27x_lcd_ops, NULL),
-+
-+ INIT_CKEN("UARTCLK", FFUART, 14857000, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14857000, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14857000, 1, NULL),
-+
-+ INIT_CKEN("I2SCLK", I2S, 14682000, 0, &pxa_device_i2s.dev),
-+ INIT_CKEN("I2CCLK", I2C, 32842000, 0, &pxa_device_i2c.dev),
-+ INIT_CKEN("UDCCLK", USB, 48000000, 5, &pxa_device_udc.dev),
-+ INIT_CKEN("MMCCLK", MMC, 19500000, 0, &pxa_device_mci.dev),
-+ INIT_CKEN("FICPCLK", FICP, 48000000, 0, &pxa_device_ficp.dev),
-+
-+ INIT_CKEN("USBCLK", USB, 48000000, 0, &pxa27x_device_ohci.dev),
-+ INIT_CKEN("I2CCLK", PWRI2C, 13000000, 0, &pxa27x_device_i2c_power.dev),
-+ INIT_CKEN("KBDCLK", KEYPAD, 32768, 0, NULL),
-+
-+ /*
-+ INIT_CKEN("PWMCLK", PWM0, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP1, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP2, 13000000, 0, NULL),
-+ INIT_CKEN("SSPCLK", SSP3, 13000000, 0, NULL),
-+ INIT_CKEN("MSLCLK", MSL, 48000000, 0, NULL),
-+ INIT_CKEN("USIMCLK", USIM, 48000000, 0, NULL),
-+ INIT_CKEN("MSTKCLK", MEMSTK, 19500000, 0, NULL),
-+ INIT_CKEN("IMCLK", IM, 0, 0, NULL),
-+ INIT_CKEN("MEMCLK", MEMC, 0, 0, NULL),
-+ */
-+};
-
- #ifdef CONFIG_PM
-
-@@ -269,6 +308,69 @@
- }
- #endif
-
-+/* PXA27x: Various gpios can issue wakeup events. This logic only
-+ * handles the simple cases, not the WEMUX2 and WEMUX3 options
-+ */
-+#define PXA27x_GPIO_NOWAKE_MASK \
-+ ((1 << 8) | (1 << 7) | (1 << 6) | (1 << 5) | (1 << 2))
-+#define WAKEMASK(gpio) \
-+ (((gpio) <= 15) \
-+ ? ((1 << (gpio)) & ~PXA27x_GPIO_NOWAKE_MASK) \
-+ : ((gpio == 35) ? (1 << 24) : 0))
-+
-+static int pxa27x_set_wake(unsigned int irq, unsigned int on)
-+{
-+ int gpio = IRQ_TO_GPIO(irq);
-+ uint32_t mask;
-+
-+ if ((gpio >= 0 && gpio <= 15) || (gpio == 35)) {
-+ if (WAKEMASK(gpio) == 0)
-+ return -EINVAL;
-+
-+ mask = WAKEMASK(gpio);
-+
-+ if (on) {
-+ if (GRER(gpio) | GPIO_bit(gpio))
-+ PRER |= mask;
-+ else
-+ PRER &= ~mask;
-+
-+ if (GFER(gpio) | GPIO_bit(gpio))
-+ PFER |= mask;
-+ else
-+ PFER &= ~mask;
-+ }
-+ goto set_pwer;
-+ }
-+
-+ switch (irq) {
-+ case IRQ_RTCAlrm:
-+ mask = PWER_RTC;
-+ break;
-+ case IRQ_USB:
-+ mask = 1u << 26;
-+ break;
-+ default:
-+ return -EINVAL;
-+ }
-+
-+set_pwer:
-+ if (on)
-+ PWER |= mask;
-+ else
-+ PWER &=~mask;
-+
-+ return 0;
-+}
-+
-+void __init pxa27x_init_irq(void)
-+{
-+ pxa_init_irq_low();
-+ pxa_init_irq_high();
-+ pxa_init_irq_gpio(128);
-+ pxa_init_irq_set_wake(pxa27x_set_wake);
-+}
-+
- /*
- * device registration specific to PXA27x.
- */
-@@ -288,7 +390,7 @@
- },
- };
-
--static struct platform_device pxa27x_device_ohci = {
-+struct platform_device pxa27x_device_ohci = {
- .name = "pxa27x-ohci",
- .id = -1,
- .dev = {
-@@ -316,7 +418,7 @@
- },
- };
-
--static struct platform_device pxa27x_device_i2c_power = {
-+struct platform_device pxa27x_device_i2c_power = {
- .name = "pxa2xx-i2c",
- .id = 1,
- .resource = i2c_power_resources,
-@@ -338,17 +440,12 @@
- &pxa27x_device_ohci,
- };
-
--void __init pxa27x_init_irq(void)
--{
-- pxa_init_irq_low();
-- pxa_init_irq_high();
-- pxa_init_irq_gpio(128);
--}
--
- static int __init pxa27x_init(void)
- {
- int ret = 0;
- if (cpu_is_pxa27x()) {
-+ clks_register(pxa27x_clks, ARRAY_SIZE(pxa27x_clks));
-+
- if ((ret = pxa_init_dma(32)))
- return ret;
- #ifdef CONFIG_PM
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa300.c
-@@ -0,0 +1,93 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa300.c
-+ *
-+ * Code specific to PXA300/PXA310
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp-pxa300.h>
-+
-+static struct pxa3xx_mfp_addr_map pxa300_mfp_addr_map[] __initdata = {
-+
-+ MFP_ADDR_X(GPIO0, GPIO2, 0x00b4),
-+ MFP_ADDR_X(GPIO3, GPIO26, 0x027c),
-+ MFP_ADDR_X(GPIO27, GPIO127, 0x0400),
-+ MFP_ADDR_X(GPIO0_2, GPIO6_2, 0x02ec),
-+
-+ MFP_ADDR(nBE0, 0x0204),
-+ MFP_ADDR(nBE1, 0x0208),
-+
-+ MFP_ADDR(nLUA, 0x0244),
-+ MFP_ADDR(nLLA, 0x0254),
-+
-+ MFP_ADDR(DF_CLE_nOE, 0x0240),
-+ MFP_ADDR(DF_nRE_nOE, 0x0200),
-+ MFP_ADDR(DF_ALE_nWE, 0x020C),
-+ MFP_ADDR(DF_INT_RnB, 0x00C8),
-+ MFP_ADDR(DF_nCS0, 0x0248),
-+ MFP_ADDR(DF_nCS1, 0x0278),
-+ MFP_ADDR(DF_nWE, 0x00CC),
-+
-+ MFP_ADDR(DF_ADDR0, 0x0210),
-+ MFP_ADDR(DF_ADDR1, 0x0214),
-+ MFP_ADDR(DF_ADDR2, 0x0218),
-+ MFP_ADDR(DF_ADDR3, 0x021C),
-+
-+ MFP_ADDR(DF_IO0, 0x0220),
-+ MFP_ADDR(DF_IO1, 0x0228),
-+ MFP_ADDR(DF_IO2, 0x0230),
-+ MFP_ADDR(DF_IO3, 0x0238),
-+ MFP_ADDR(DF_IO4, 0x0258),
-+ MFP_ADDR(DF_IO5, 0x0260),
-+ MFP_ADDR(DF_IO6, 0x0268),
-+ MFP_ADDR(DF_IO7, 0x0270),
-+ MFP_ADDR(DF_IO8, 0x0224),
-+ MFP_ADDR(DF_IO9, 0x022C),
-+ MFP_ADDR(DF_IO10, 0x0234),
-+ MFP_ADDR(DF_IO11, 0x023C),
-+ MFP_ADDR(DF_IO12, 0x025C),
-+ MFP_ADDR(DF_IO13, 0x0264),
-+ MFP_ADDR(DF_IO14, 0x026C),
-+ MFP_ADDR(DF_IO15, 0x0274),
-+
-+ MFP_ADDR_END,
-+};
-+
-+/* override pxa300 MFP register addresses */
-+static struct pxa3xx_mfp_addr_map pxa310_mfp_addr_map[] __initdata = {
-+ MFP_ADDR_X(GPIO30, GPIO98, 0x0418),
-+ MFP_ADDR_X(GPIO7_2, GPIO12_2, 0x052C),
-+
-+ MFP_ADDR(ULPI_STP, 0x040C),
-+ MFP_ADDR(ULPI_NXT, 0x0410),
-+ MFP_ADDR(ULPI_DIR, 0x0414),
-+
-+ MFP_ADDR_END,
-+};
-+
-+static int __init pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310()) {
-+ pxa3xx_init_mfp();
-+ pxa3xx_mfp_init_addr(pxa300_mfp_addr_map);
-+ }
-+
-+ if (cpu_is_pxa310())
-+ pxa3xx_mfp_init_addr(pxa310_mfp_addr_map);
-+
-+ return 0;
-+}
-+
-+core_initcall(pxa300_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa320.c
-@@ -0,0 +1,88 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa320.c
-+ *
-+ * Code specific to PXA320
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ *
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/mfp.h>
-+#include <asm/arch/mfp-pxa320.h>
-+
-+static struct pxa3xx_mfp_addr_map pxa320_mfp_addr_map[] __initdata = {
-+
-+ MFP_ADDR_X(GPIO0, GPIO4, 0x0124),
-+ MFP_ADDR_X(GPIO5, GPIO26, 0x028C),
-+ MFP_ADDR_X(GPIO27, GPIO62, 0x0400),
-+ MFP_ADDR_X(GPIO63, GPIO73, 0x04B4),
-+ MFP_ADDR_X(GPIO74, GPIO98, 0x04F0),
-+ MFP_ADDR_X(GPIO99, GPIO127, 0x0600),
-+ MFP_ADDR_X(GPIO0_2, GPIO5_2, 0x0674),
-+ MFP_ADDR_X(GPIO6_2, GPIO13_2, 0x0494),
-+ MFP_ADDR_X(GPIO14_2, GPIO17_2, 0x04E0),
-+
-+ MFP_ADDR(nXCVREN, 0x0138),
-+ MFP_ADDR(DF_CLE_nOE, 0x0204),
-+ MFP_ADDR(DF_nADV1_ALE, 0x0208),
-+ MFP_ADDR(DF_SCLK_S, 0x020C),
-+ MFP_ADDR(DF_SCLK_E, 0x0210),
-+ MFP_ADDR(nBE0, 0x0214),
-+ MFP_ADDR(nBE1, 0x0218),
-+ MFP_ADDR(DF_nADV2_ALE, 0x021C),
-+ MFP_ADDR(DF_INT_RnB, 0x0220),
-+ MFP_ADDR(DF_nCS0, 0x0224),
-+ MFP_ADDR(DF_nCS1, 0x0228),
-+ MFP_ADDR(DF_nWE, 0x022C),
-+ MFP_ADDR(DF_nRE_nOE, 0x0230),
-+ MFP_ADDR(nLUA, 0x0234),
-+ MFP_ADDR(nLLA, 0x0238),
-+ MFP_ADDR(DF_ADDR0, 0x023C),
-+ MFP_ADDR(DF_ADDR1, 0x0240),
-+ MFP_ADDR(DF_ADDR2, 0x0244),
-+ MFP_ADDR(DF_ADDR3, 0x0248),
-+ MFP_ADDR(DF_IO0, 0x024C),
-+ MFP_ADDR(DF_IO8, 0x0250),
-+ MFP_ADDR(DF_IO1, 0x0254),
-+ MFP_ADDR(DF_IO9, 0x0258),
-+ MFP_ADDR(DF_IO2, 0x025C),
-+ MFP_ADDR(DF_IO10, 0x0260),
-+ MFP_ADDR(DF_IO3, 0x0264),
-+ MFP_ADDR(DF_IO11, 0x0268),
-+ MFP_ADDR(DF_IO4, 0x026C),
-+ MFP_ADDR(DF_IO12, 0x0270),
-+ MFP_ADDR(DF_IO5, 0x0274),
-+ MFP_ADDR(DF_IO13, 0x0278),
-+ MFP_ADDR(DF_IO6, 0x027C),
-+ MFP_ADDR(DF_IO14, 0x0280),
-+ MFP_ADDR(DF_IO7, 0x0284),
-+ MFP_ADDR(DF_IO15, 0x0288),
-+
-+ MFP_ADDR_END,
-+};
-+
-+static void __init pxa320_init_mfp(void)
-+{
-+ pxa3xx_init_mfp();
-+ pxa3xx_mfp_init_addr(pxa320_mfp_addr_map);
-+}
-+
-+static int __init pxa320_init(void)
-+{
-+ if (cpu_is_pxa320())
-+ pxa320_init_mfp();
-+
-+ return 0;
-+}
-+
-+core_initcall(pxa320_init);
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/pxa3xx.c
-@@ -0,0 +1,216 @@
-+/*
-+ * linux/arch/arm/mach-pxa/pxa3xx.c
-+ *
-+ * code specific to pxa3xx aka Monahans
-+ *
-+ * Copyright (C) 2006 Marvell International Ltd.
-+ *
-+ * 2007-09-02: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/pm.h>
-+#include <linux/platform_device.h>
-+#include <linux/irq.h>
-+
-+#include <asm/hardware.h>
-+#include <asm/arch/pxa3xx-regs.h>
-+#include <asm/arch/ohci.h>
-+#include <asm/arch/pm.h>
-+#include <asm/arch/dma.h>
-+#include <asm/arch/ssp.h>
-+
-+#include "generic.h"
-+#include "devices.h"
-+#include "clock.h"
-+
-+/* Crystal clock: 13MHz */
-+#define BASE_CLK 13000000
-+
-+/* Ring Oscillator Clock: 60MHz */
-+#define RO_CLK 60000000
-+
-+#define ACCR_D0CS (1 << 26)
-+
-+/* crystal frequency to static memory controller multiplier (SMCFS) */
-+static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
-+
-+/* crystal frequency to HSIO bus frequency multiplier (HSS) */
-+static unsigned char hss_mult[4] = { 8, 12, 16, 0 };
-+
-+/*
-+ * Get the clock frequency as reflected by CCSR and the turbo flag.
-+ * We assume these values have been applied via a fcs.
-+ * If info is not 0 we also display the current settings.
-+ */
-+unsigned int pxa3xx_get_clk_frequency_khz(int info)
-+{
-+ unsigned long acsr, xclkcfg;
-+ unsigned int t, xl, xn, hss, ro, XL, XN, CLK, HSS;
-+
-+ /* Read XCLKCFG register turbo bit */
-+ __asm__ __volatile__("mrc\tp14, 0, %0, c6, c0, 0" : "=r"(xclkcfg));
-+ t = xclkcfg & 0x1;
-+
-+ acsr = ACSR;
-+
-+ xl = acsr & 0x1f;
-+ xn = (acsr >> 8) & 0x7;
-+ hss = (acsr >> 14) & 0x3;
-+
-+ XL = xl * BASE_CLK;
-+ XN = xn * XL;
-+
-+ ro = acsr & ACCR_D0CS;
-+
-+ CLK = (ro) ? RO_CLK : ((t) ? XN : XL);
-+ HSS = (ro) ? RO_CLK : hss_mult[hss] * BASE_CLK;
-+
-+ if (info) {
-+ pr_info("RO Mode clock: %d.%02dMHz (%sactive)\n",
-+ RO_CLK / 1000000, (RO_CLK % 1000000) / 10000,
-+ (ro) ? "" : "in");
-+ pr_info("Run Mode clock: %d.%02dMHz (*%d)\n",
-+ XL / 1000000, (XL % 1000000) / 10000, xl);
-+ pr_info("Turbo Mode clock: %d.%02dMHz (*%d, %sactive)\n",
-+ XN / 1000000, (XN % 1000000) / 10000, xn,
-+ (t) ? "" : "in");
-+ pr_info("HSIO bus clock: %d.%02dMHz\n",
-+ HSS / 1000000, (HSS % 1000000) / 10000);
-+ }
-+
-+ return CLK;
-+}
-+
-+/*
-+ * Return the current static memory controller clock frequency
-+ * in units of 10kHz
-+ */
-+unsigned int pxa3xx_get_memclk_frequency_10khz(void)
-+{
-+ unsigned long acsr;
-+ unsigned int smcfs, clk = 0;
-+
-+ acsr = ACSR;
-+
-+ smcfs = (acsr >> 23) & 0x7;
-+ clk = (acsr & ACCR_D0CS) ? RO_CLK : smcfs_mult[smcfs] * BASE_CLK;
-+
-+ return (clk / 10000);
-+}
-+
-+/*
-+ * Return the current HSIO bus clock frequency
-+ */
-+static unsigned long clk_pxa3xx_hsio_getrate(struct clk *clk)
-+{
-+ unsigned long acsr;
-+ unsigned int hss, hsio_clk;
-+
-+ acsr = ACSR;
-+
-+ hss = (acsr >> 14) & 0x3;
-+ hsio_clk = (acsr & ACCR_D0CS) ? RO_CLK : hss_mult[hss] * BASE_CLK;
-+
-+ return hsio_clk;
-+}
-+
-+static void clk_pxa3xx_cken_enable(struct clk *clk)
-+{
-+ unsigned long mask = 1ul << (clk->cken & 0x1f);
-+
-+ local_irq_disable();
-+
-+ if (clk->cken < 32)
-+ CKENA |= mask;
-+ else
-+ CKENB |= mask;
-+
-+ local_irq_enable();
-+}
-+
-+static void clk_pxa3xx_cken_disable(struct clk *clk)
-+{
-+ unsigned long mask = 1ul << (clk->cken & 0x1f);
-+
-+ local_irq_disable();
-+
-+ if (clk->cken < 32)
-+ CKENA &= ~mask;
-+ else
-+ CKENB &= ~mask;
-+
-+ local_irq_enable();
-+}
-+
-+static const struct clkops clk_pxa3xx_hsio_ops = {
-+ .enable = clk_pxa3xx_cken_enable,
-+ .disable = clk_pxa3xx_cken_disable,
-+ .getrate = clk_pxa3xx_hsio_getrate,
-+};
-+
-+static struct clk pxa3xx_clks[] = {
-+ INIT_CK("LCDCLK", LCD, &clk_pxa3xx_hsio_ops, &pxa_device_fb.dev),
-+ INIT_CK("CAMCLK", CAMERA, &clk_pxa3xx_hsio_ops, NULL),
-+
-+ INIT_CKEN("UARTCLK", FFUART, 14857000, 1, &pxa_device_ffuart.dev),
-+ INIT_CKEN("UARTCLK", BTUART, 14857000, 1, &pxa_device_btuart.dev),
-+ INIT_CKEN("UARTCLK", STUART, 14857000, 1, NULL),
-+
-+ INIT_CKEN("I2CCLK", I2C, 32842000, 0, &pxa_device_i2c.dev),
-+ INIT_CKEN("UDCCLK", UDC, 48000000, 5, &pxa_device_udc.dev),
-+};
-+
-+void __init pxa3xx_init_irq(void)
-+{
-+ /* enable CP6 access */
-+ u32 value;
-+ __asm__ __volatile__("mrc p15, 0, %0, c15, c1, 0\n": "=r"(value));
-+ value |= (1 << 6);
-+ __asm__ __volatile__("mcr p15, 0, %0, c15, c1, 0\n": :"r"(value));
-+
-+ pxa_init_irq_low();
-+ pxa_init_irq_high();
-+ pxa_init_irq_gpio(128);
-+}
-+
-+/*
-+ * device registration specific to PXA3xx.
-+ */
-+
-+static struct platform_device *devices[] __initdata = {
-+ &pxa_device_mci,
-+ &pxa_device_udc,
-+ &pxa_device_fb,
-+ &pxa_device_ffuart,
-+ &pxa_device_btuart,
-+ &pxa_device_stuart,
-+ &pxa_device_i2c,
-+ &pxa_device_i2s,
-+ &pxa_device_ficp,
-+ &pxa_device_rtc,
-+};
-+
-+static int __init pxa3xx_init(void)
-+{
-+ int ret = 0;
-+
-+ if (cpu_is_pxa3xx()) {
-+ clks_register(pxa3xx_clks, ARRAY_SIZE(pxa3xx_clks));
-+
-+ if ((ret = pxa_init_dma(32)))
-+ return ret;
-+
-+ return platform_add_devices(devices, ARRAY_SIZE(devices));
-+ }
-+ return 0;
-+}
-+
-+subsys_initcall(pxa3xx_init);
---- linux-2.6.23.orig/arch/arm/mach-pxa/time.c
-+++ linux-2.6.23/arch/arm/mach-pxa/time.c
-@@ -16,10 +16,48 @@
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/clockchips.h>
-+#include <linux/sched.h>
-
-+#include <asm/div64.h>
-+#include <asm/cnt32_to_63.h>
- #include <asm/mach/irq.h>
- #include <asm/mach/time.h>
- #include <asm/arch/pxa-regs.h>
-+#include <asm/mach-types.h>
-+
-+/*
-+ * This is PXA's sched_clock implementation. This has a resolution
-+ * of at least 308 ns and a maximum value of 208 days.
-+ *
-+ * The return value is guaranteed to be monotonic in that range as
-+ * long as there is always less than 582 seconds between successive
-+ * calls to sched_clock() which should always be the case in practice.
-+ */
-+
-+#define OSCR2NS_SCALE_FACTOR 10
-+
-+static unsigned long oscr2ns_scale;
-+
-+static void __init set_oscr2ns_scale(unsigned long oscr_rate)
-+{
-+ unsigned long long v = 1000000000ULL << OSCR2NS_SCALE_FACTOR;
-+ do_div(v, oscr_rate);
-+ oscr2ns_scale = v;
-+ /*
-+ * We want an even value to automatically clear the top bit
-+ * returned by cnt32_to_63() without an additional run time
-+ * instruction. So if the LSB is 1 then round it up.
-+ */
-+ if (oscr2ns_scale & 1)
-+ oscr2ns_scale++;
-+}
-+
-+unsigned long long sched_clock(void)
-+{
-+ unsigned long long v = cnt32_to_63(OSCR);
-+ return (v * oscr2ns_scale) >> OSCR2NS_SCALE_FACTOR;
-+}
-+
-
- static irqreturn_t
- pxa_ost0_interrupt(int irq, void *dev_id)
-@@ -149,18 +187,29 @@
-
- static void __init pxa_timer_init(void)
- {
-+ unsigned long clock_tick_rate;
-+
- OIER = 0;
- OSSR = OSSR_M0 | OSSR_M1 | OSSR_M2 | OSSR_M3;
-
-+ if (cpu_is_pxa21x() || cpu_is_pxa25x())
-+ clock_tick_rate = 3686400;
-+ else if (machine_is_mainstone())
-+ clock_tick_rate = 3249600;
-+ else
-+ clock_tick_rate = 3250000;
-+
-+ set_oscr2ns_scale(clock_tick_rate);
-+
- ckevt_pxa_osmr0.mult =
-- div_sc(CLOCK_TICK_RATE, NSEC_PER_SEC, ckevt_pxa_osmr0.shift);
-+ div_sc(clock_tick_rate, NSEC_PER_SEC, ckevt_pxa_osmr0.shift);
- ckevt_pxa_osmr0.max_delta_ns =
- clockevent_delta2ns(0x7fffffff, &ckevt_pxa_osmr0);
- ckevt_pxa_osmr0.min_delta_ns =
- clockevent_delta2ns(MIN_OSCR_DELTA, &ckevt_pxa_osmr0) + 1;
-
- cksrc_pxa_oscr0.mult =
-- clocksource_hz2mult(CLOCK_TICK_RATE, cksrc_pxa_oscr0.shift);
-+ clocksource_hz2mult(clock_tick_rate, cksrc_pxa_oscr0.shift);
-
- setup_irq(IRQ_OST0, &pxa_ost0_irq);
-
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite.c
-@@ -0,0 +1,184 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite.c
-+ *
-+ * Support for the PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2006 Marvell International Ltd.
-+ *
-+ * 2007-09-04: eric miao <eric.y.miao@gmail.com>
-+ * rewrite to align with latest kernel
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/interrupt.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/mach-types.h>
-+#include <asm/mach/arch.h>
-+#include <asm/hardware.h>
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/pxafb.h>
-+#include <asm/arch/zylonite.h>
-+
-+#include "generic.h"
-+
-+int gpio_backlight;
-+int gpio_eth_irq;
-+
-+int lcd_id;
-+int lcd_orientation;
-+
-+static struct resource smc91x_resources[] = {
-+ [0] = {
-+ .start = ZYLONITE_ETH_PHYS + 0x300,
-+ .end = ZYLONITE_ETH_PHYS + 0xfffff,
-+ .flags = IORESOURCE_MEM,
-+ },
-+ [1] = {
-+ .start = -1, /* for run-time assignment */
-+ .end = -1,
-+ .flags = IORESOURCE_IRQ,
-+ }
-+};
-+
-+static struct platform_device smc91x_device = {
-+ .name = "smc91x",
-+ .id = 0,
-+ .num_resources = ARRAY_SIZE(smc91x_resources),
-+ .resource = smc91x_resources,
-+};
-+
-+#if defined(CONFIG_FB_PXA) || (CONFIG_FB_PXA_MODULES)
-+static void zylonite_backlight_power(int on)
-+{
-+ gpio_set_value(gpio_backlight, on);
-+}
-+
-+static struct pxafb_mode_info toshiba_ltm035a776c_mode = {
-+ .pixclock = 110000,
-+ .xres = 240,
-+ .yres = 320,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .left_margin = 6,
-+ .right_margin = 4,
-+ .vsync_len = 2,
-+ .upper_margin = 2,
-+ .lower_margin = 3,
-+ .sync = FB_SYNC_VERT_HIGH_ACT,
-+};
-+
-+static struct pxafb_mode_info toshiba_ltm04c380k_mode = {
-+ .pixclock = 50000,
-+ .xres = 640,
-+ .yres = 480,
-+ .bpp = 16,
-+ .hsync_len = 1,
-+ .left_margin = 0x9f,
-+ .right_margin = 1,
-+ .vsync_len = 44,
-+ .upper_margin = 0,
-+ .lower_margin = 0,
-+ .sync = FB_SYNC_HOR_HIGH_ACT|FB_SYNC_VERT_HIGH_ACT,
-+};
-+
-+static struct pxafb_mach_info zylonite_toshiba_lcd_info = {
-+ .num_modes = 1,
-+ .lccr0 = LCCR0_Act,
-+ .lccr3 = LCCR3_PCP,
-+ .pxafb_backlight_power = zylonite_backlight_power,
-+};
-+
-+static struct pxafb_mode_info sharp_ls037_modes[] = {
-+ [0] = {
-+ .pixclock = 158000,
-+ .xres = 240,
-+ .yres = 320,
-+ .bpp = 16,
-+ .hsync_len = 4,
-+ .left_margin = 39,
-+ .right_margin = 39,
-+ .vsync_len = 1,
-+ .upper_margin = 2,
-+ .lower_margin = 3,
-+ .sync = 0,
-+ },
-+ [1] = {
-+ .pixclock = 39700,
-+ .xres = 480,
-+ .yres = 640,
-+ .bpp = 16,
-+ .hsync_len = 8,
-+ .left_margin = 81,
-+ .right_margin = 81,
-+ .vsync_len = 1,
-+ .upper_margin = 2,
-+ .lower_margin = 7,
-+ .sync = 0,
-+ },
-+};
-+
-+static struct pxafb_mach_info zylonite_sharp_lcd_info = {
-+ .modes = sharp_ls037_modes,
-+ .num_modes = 2,
-+ .lccr0 = LCCR0_Act,
-+ .lccr3 = LCCR3_PCP | LCCR3_HSP | LCCR3_VSP,
-+ .pxafb_backlight_power = zylonite_backlight_power,
-+};
-+
-+static void __init zylonite_init_lcd(void)
-+{
-+ /* backlight GPIO: output, default on */
-+ gpio_direction_output(gpio_backlight, 1);
-+
-+ if (lcd_id & 0x20) {
-+ set_pxa_fb_info(&zylonite_sharp_lcd_info);
-+ return;
-+ }
-+
-+ /* legacy LCD panels, it would be handy here if LCD panel type can
-+ * be decided at run-time
-+ */
-+ if (1)
-+ zylonite_toshiba_lcd_info.modes = &toshiba_ltm035a776c_mode;
-+ else
-+ zylonite_toshiba_lcd_info.modes = &toshiba_ltm04c380k_mode;
-+
-+ set_pxa_fb_info(&zylonite_toshiba_lcd_info);
-+}
-+#else
-+static inline void zylonite_init_lcd(void) {}
-+#endif
-+
-+static void __init zylonite_init(void)
-+{
-+ /* board-processor specific initialization */
-+ zylonite_pxa300_init();
-+ zylonite_pxa320_init();
-+
-+ /*
-+ * Note: We depend that the bootloader set
-+ * the correct value to MSC register for SMC91x.
-+ */
-+ smc91x_resources[1].start = gpio_to_irq(gpio_eth_irq);
-+ smc91x_resources[1].end = gpio_to_irq(gpio_eth_irq);
-+ platform_device_register(&smc91x_device);
-+
-+ zylonite_init_lcd();
-+}
-+
-+MACHINE_START(ZYLONITE, "PXA3xx Platform Development Kit (aka Zylonite)")
-+ .phys_io = 0x40000000,
-+ .boot_params = 0xa0000100,
-+ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
-+ .map_io = pxa_map_io,
-+ .init_irq = pxa3xx_init_irq,
-+ .timer = &pxa_timer,
-+ .init_machine = zylonite_init,
-+MACHINE_END
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa300.c
-@@ -0,0 +1,188 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite_pxa300.c
-+ *
-+ * PXA300/PXA310 specific support code for the
-+ * PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+
-+#include <asm/gpio.h>
-+#include <asm/arch/mfp-pxa300.h>
-+#include <asm/arch/zylonite.h>
-+
-+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
-+
-+/* PXA300/PXA310 common configurations */
-+static mfp_cfg_t common_mfp_cfg[] __initdata = {
-+ /* LCD */
-+ GPIO54_LCD_LDD_0,
-+ GPIO55_LCD_LDD_1,
-+ GPIO56_LCD_LDD_2,
-+ GPIO57_LCD_LDD_3,
-+ GPIO58_LCD_LDD_4,
-+ GPIO59_LCD_LDD_5,
-+ GPIO60_LCD_LDD_6,
-+ GPIO61_LCD_LDD_7,
-+ GPIO62_LCD_LDD_8,
-+ GPIO63_LCD_LDD_9,
-+ GPIO64_LCD_LDD_10,
-+ GPIO65_LCD_LDD_11,
-+ GPIO66_LCD_LDD_12,
-+ GPIO67_LCD_LDD_13,
-+ GPIO68_LCD_LDD_14,
-+ GPIO69_LCD_LDD_15,
-+ GPIO70_LCD_LDD_16,
-+ GPIO71_LCD_LDD_17,
-+ GPIO72_LCD_FCLK,
-+ GPIO73_LCD_LCLK,
-+ GPIO74_LCD_PCLK,
-+ GPIO75_LCD_BIAS,
-+ GPIO76_LCD_VSYNC,
-+ GPIO127_LCD_CS_N,
-+
-+ /* BTUART */
-+ GPIO111_UART2_RTS,
-+ GPIO112_UART2_RXD,
-+ GPIO113_UART2_TXD,
-+ GPIO114_UART2_CTS,
-+
-+ /* STUART */
-+ GPIO109_UART3_TXD,
-+ GPIO110_UART3_RXD,
-+
-+ /* AC97 */
-+ GPIO23_AC97_nACRESET,
-+ GPIO24_AC97_SYSCLK,
-+ GPIO29_AC97_BITCLK,
-+ GPIO25_AC97_SDATA_IN_0,
-+ GPIO27_AC97_SDATA_OUT,
-+ GPIO28_AC97_SYNC,
-+
-+ /* Keypad */
-+ GPIO107_KP_DKIN_0,
-+ GPIO108_KP_DKIN_1,
-+ GPIO115_KP_MKIN_0,
-+ GPIO116_KP_MKIN_1,
-+ GPIO117_KP_MKIN_2,
-+ GPIO118_KP_MKIN_3,
-+ GPIO119_KP_MKIN_4,
-+ GPIO120_KP_MKIN_5,
-+ GPIO2_2_KP_MKIN_6,
-+ GPIO3_2_KP_MKIN_7,
-+ GPIO121_KP_MKOUT_0,
-+ GPIO122_KP_MKOUT_1,
-+ GPIO123_KP_MKOUT_2,
-+ GPIO124_KP_MKOUT_3,
-+ GPIO125_KP_MKOUT_4,
-+ GPIO4_2_KP_MKOUT_5,
-+ GPIO5_2_KP_MKOUT_6,
-+ GPIO6_2_KP_MKOUT_7,
-+};
-+
-+static mfp_cfg_t pxa300_mfp_cfg[] __initdata = {
-+ /* FFUART */
-+ GPIO30_UART1_RXD,
-+ GPIO31_UART1_TXD,
-+ GPIO32_UART1_CTS,
-+ GPIO37_UART1_RTS,
-+ GPIO33_UART1_DCD,
-+ GPIO34_UART1_DSR,
-+ GPIO35_UART1_RI,
-+ GPIO36_UART1_DTR,
-+
-+ /* Ethernet */
-+ GPIO2_nCS3,
-+ GPIO99_GPIO,
-+};
-+
-+static mfp_cfg_t pxa310_mfp_cfg[] __initdata = {
-+ /* FFUART */
-+ GPIO99_UART1_RXD,
-+ GPIO100_UART1_TXD,
-+ GPIO101_UART1_CTS,
-+ GPIO106_UART1_RTS,
-+
-+ /* Ethernet */
-+ GPIO2_nCS3,
-+ GPIO102_GPIO,
-+};
-+
-+#define NUM_LCD_DETECT_PINS 7
-+
-+static int lcd_detect_pins[] __initdata = {
-+ MFP_PIN_GPIO71, /* LCD_LDD_17 - ORIENT */
-+ MFP_PIN_GPIO70, /* LCD_LDD_16 - LCDID[5] */
-+ MFP_PIN_GPIO75, /* LCD_BIAS - LCDID[4] */
-+ MFP_PIN_GPIO73, /* LCD_LCLK - LCDID[3] */
-+ MFP_PIN_GPIO72, /* LCD_FCLK - LCDID[2] */
-+ MFP_PIN_GPIO127,/* LCD_CS_N - LCDID[1] */
-+ MFP_PIN_GPIO76, /* LCD_VSYNC - LCDID[0] */
-+};
-+
-+static void __init zylonite_detect_lcd_panel(void)
-+{
-+ unsigned long mfpr_save[NUM_LCD_DETECT_PINS];
-+ int i, gpio, id = 0;
-+
-+ /* save the original MFP settings of these pins and configure
-+ * them as GPIO Input, DS01X, Pull Neither, Edge Clear
-+ */
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ mfpr_save[i] = pxa3xx_mfp_read(lcd_detect_pins[i]);
-+ pxa3xx_mfp_write(lcd_detect_pins[i], 0x8440);
-+ }
-+
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ id = id << 1;
-+ gpio = mfp_to_gpio(lcd_detect_pins[i]);
-+ gpio_direction_input(gpio);
-+
-+ if (gpio_get_value(gpio))
-+ id = id | 0x1;
-+ }
-+
-+ /* lcd id, flush out bit 1 */
-+ lcd_id = id & 0x3d;
-+
-+ /* lcd orientation, portrait or landscape */
-+ lcd_orientation = (id >> 6) & 0x1;
-+
-+ /* restore the original MFP settings */
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++)
-+ pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]);
-+}
-+
-+void __init zylonite_pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310()) {
-+ /* initialize MFP */
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(common_mfp_cfg));
-+
-+ /* detect LCD panel */
-+ zylonite_detect_lcd_panel();
-+
-+ /* GPIO pin assignment */
-+ gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO20);
-+ }
-+
-+ if (cpu_is_pxa300()) {
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa300_mfp_cfg));
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO99);
-+ }
-+
-+ if (cpu_is_pxa310()) {
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(pxa310_mfp_cfg));
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO102);
-+ }
-+}
---- /dev/null
-+++ linux-2.6.23/arch/arm/mach-pxa/zylonite_pxa320.c
-@@ -0,0 +1,173 @@
-+/*
-+ * linux/arch/arm/mach-pxa/zylonite_pxa320.c
-+ *
-+ * PXA320 specific support code for the
-+ * PXA3xx Development Platform (aka Zylonite)
-+ *
-+ * Copyright (C) 2007 Marvell Internation Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+
-+#include <asm/arch/gpio.h>
-+#include <asm/arch/mfp-pxa320.h>
-+#include <asm/arch/zylonite.h>
-+
-+#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
-+
-+static mfp_cfg_t mfp_cfg[] __initdata = {
-+ /* LCD */
-+ GPIO6_2_LCD_LDD_0,
-+ GPIO7_2_LCD_LDD_1,
-+ GPIO8_2_LCD_LDD_2,
-+ GPIO9_2_LCD_LDD_3,
-+ GPIO10_2_LCD_LDD_4,
-+ GPIO11_2_LCD_LDD_5,
-+ GPIO12_2_LCD_LDD_6,
-+ GPIO13_2_LCD_LDD_7,
-+ GPIO63_LCD_LDD_8,
-+ GPIO64_LCD_LDD_9,
-+ GPIO65_LCD_LDD_10,
-+ GPIO66_LCD_LDD_11,
-+ GPIO67_LCD_LDD_12,
-+ GPIO68_LCD_LDD_13,
-+ GPIO69_LCD_LDD_14,
-+ GPIO70_LCD_LDD_15,
-+ GPIO71_LCD_LDD_16,
-+ GPIO72_LCD_LDD_17,
-+ GPIO73_LCD_CS_N,
-+ GPIO74_LCD_VSYNC,
-+ GPIO14_2_LCD_FCLK,
-+ GPIO15_2_LCD_LCLK,
-+ GPIO16_2_LCD_PCLK,
-+ GPIO17_2_LCD_BIAS,
-+
-+ /* FFUART */
-+ GPIO41_UART1_RXD,
-+ GPIO42_UART1_TXD,
-+ GPIO43_UART1_CTS,
-+ GPIO44_UART1_DCD,
-+ GPIO45_UART1_DSR,
-+ GPIO46_UART1_RI,
-+ GPIO47_UART1_DTR,
-+ GPIO48_UART1_RTS,
-+
-+ /* AC97 */
-+ GPIO34_AC97_SYSCLK,
-+ GPIO35_AC97_SDATA_IN_0,
-+ GPIO37_AC97_SDATA_OUT,
-+ GPIO38_AC97_SYNC,
-+ GPIO39_AC97_BITCLK,
-+ GPIO40_AC97_nACRESET,
-+
-+ /* I2C */
-+ GPIO32_I2C_SCL,
-+ GPIO33_I2C_SDA,
-+
-+ /* Keypad */
-+ GPIO105_KP_DKIN_0,
-+ GPIO106_KP_DKIN_1,
-+ GPIO113_KP_MKIN_0,
-+ GPIO114_KP_MKIN_1,
-+ GPIO115_KP_MKIN_2,
-+ GPIO116_KP_MKIN_3,
-+ GPIO117_KP_MKIN_4,
-+ GPIO118_KP_MKIN_5,
-+ GPIO119_KP_MKIN_6,
-+ GPIO120_KP_MKIN_7,
-+ GPIO121_KP_MKOUT_0,
-+ GPIO122_KP_MKOUT_1,
-+ GPIO123_KP_MKOUT_2,
-+ GPIO124_KP_MKOUT_3,
-+ GPIO125_KP_MKOUT_4,
-+ GPIO126_KP_MKOUT_5,
-+ GPIO127_KP_MKOUT_6,
-+ GPIO5_2_KP_MKOUT_7,
-+
-+ /* Ethernet */
-+ GPIO4_nCS3,
-+ GPIO90_GPIO,
-+};
-+
-+#define NUM_LCD_DETECT_PINS 7
-+
-+static int lcd_detect_pins[] __initdata = {
-+ MFP_PIN_GPIO72, /* LCD_LDD_17 - ORIENT */
-+ MFP_PIN_GPIO71, /* LCD_LDD_16 - LCDID[5] */
-+ MFP_PIN_GPIO17_2, /* LCD_BIAS - LCDID[4] */
-+ MFP_PIN_GPIO15_2, /* LCD_LCLK - LCDID[3] */
-+ MFP_PIN_GPIO14_2, /* LCD_FCLK - LCDID[2] */
-+ MFP_PIN_GPIO73, /* LCD_CS_N - LCDID[1] */
-+ MFP_PIN_GPIO74, /* LCD_VSYNC - LCDID[0] */
-+ /*
-+ * set the MFP_PIN_GPIO 14/15/17 to alternate function other than
-+ * GPIO to avoid input level confliction with 14_2, 15_2, 17_2
-+ */
-+ MFP_PIN_GPIO14,
-+ MFP_PIN_GPIO15,
-+ MFP_PIN_GPIO17,
-+};
-+
-+static int lcd_detect_mfpr[] __initdata = {
-+ /* AF0, DS 1X, Pull Neither, Edge Clear */
-+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
-+ 0xc442, /* Backlight, Pull-Up, AF2 */
-+ 0x8445, /* AF5 */
-+ 0x8445, /* AF5 */
-+};
-+
-+static void __init zylonite_detect_lcd_panel(void)
-+{
-+ unsigned long mfpr_save[ARRAY_SIZE(lcd_detect_pins)];
-+ int i, gpio, id = 0;
-+
-+ /* save the original MFP settings of these pins and configure them
-+ * as GPIO Input, DS01X, Pull Neither, Edge Clear
-+ */
-+ for (i = 0; i < ARRAY_SIZE(lcd_detect_pins); i++) {
-+ mfpr_save[i] = pxa3xx_mfp_read(lcd_detect_pins[i]);
-+ pxa3xx_mfp_write(lcd_detect_pins[i], lcd_detect_mfpr[i]);
-+ }
-+
-+ for (i = 0; i < NUM_LCD_DETECT_PINS; i++) {
-+ id = id << 1;
-+ gpio = mfp_to_gpio(lcd_detect_pins[i]);
-+ gpio_direction_input(gpio);
-+
-+ if (gpio_get_value(gpio))
-+ id = id | 0x1;
-+ }
-+
-+ /* lcd id, flush out bit 1 */
-+ lcd_id = id & 0x3d;
-+
-+ /* lcd orientation, portrait or landscape */
-+ lcd_orientation = (id >> 6) & 0x1;
-+
-+ /* restore the original MFP settings */
-+ for (i = 0; i < ARRAY_SIZE(lcd_detect_pins); i++)
-+ pxa3xx_mfp_write(lcd_detect_pins[i], mfpr_save[i]);
-+}
-+
-+void __init zylonite_pxa320_init(void)
-+{
-+ if (cpu_is_pxa320()) {
-+ /* initialize MFP */
-+ pxa3xx_mfp_config(ARRAY_AND_SIZE(mfp_cfg));
-+
-+ /* detect LCD panel */
-+ zylonite_detect_lcd_panel();
-+
-+ /* GPIO pin assignment */
-+ gpio_backlight = mfp_to_gpio(MFP_PIN_GPIO14);
-+ gpio_eth_irq = mfp_to_gpio(MFP_PIN_GPIO9);
-+ }
-+}
---- linux-2.6.23.orig/arch/arm/mm/Kconfig
-+++ linux-2.6.23/arch/arm/mm/Kconfig
-@@ -322,7 +322,7 @@
- # XScale
- config CPU_XSCALE
- bool
-- depends on ARCH_IOP32X || ARCH_IOP33X || ARCH_PXA || ARCH_IXP4XX || ARCH_IXP2000
-+ depends on ARCH_IOP32X || ARCH_IOP33X || PXA25x || PXA27x || ARCH_IXP4XX || ARCH_IXP2000
- default y
- select CPU_32v5
- select CPU_ABRT_EV5T
-@@ -333,7 +333,7 @@
- # XScale Core Version 3
- config CPU_XSC3
- bool
-- depends on ARCH_IXP23XX || ARCH_IOP13XX
-+ depends on ARCH_IXP23XX || ARCH_IOP13XX || PXA3xx
- default y
- select CPU_32v5
- select CPU_ABRT_EV5T
---- linux-2.6.23.orig/drivers/i2c/busses/i2c-pxa.c
-+++ linux-2.6.23/drivers/i2c/busses/i2c-pxa.c
-@@ -31,6 +31,8 @@
- #include <linux/interrupt.h>
- #include <linux/i2c-pxa.h>
- #include <linux/platform_device.h>
-+#include <linux/err.h>
-+#include <linux/clk.h>
-
- #include <asm/hardware.h>
- #include <asm/irq.h>
-@@ -48,6 +50,7 @@
- unsigned int slave_addr;
-
- struct i2c_adapter adap;
-+ struct clk *clk;
- #ifdef CONFIG_I2C_PXA_SLAVE
- struct i2c_slave_client *slave;
- #endif
-@@ -869,6 +872,12 @@
-
- sprintf(i2c->adap.name, "pxa_i2c-i2c.%u", dev->id);
-
-+ i2c->clk = clk_get(&dev->dev, "I2CCLK");
-+ if (IS_ERR(i2c->clk)) {
-+ ret = PTR_ERR(i2c->clk);
-+ goto eclk;
-+ }
-+
- i2c->reg_base = ioremap(res->start, res_len(res));
- if (!i2c->reg_base) {
- ret = -EIO;
-@@ -889,22 +898,19 @@
- }
- #endif
-
-+ clk_enable(i2c->clk);
-+#ifdef CONFIG_PXA27x
- switch (dev->id) {
- case 0:
--#ifdef CONFIG_PXA27x
- pxa_gpio_mode(GPIO117_I2CSCL_MD);
- pxa_gpio_mode(GPIO118_I2CSDA_MD);
--#endif
-- pxa_set_cken(CKEN_I2C, 1);
- break;
--#ifdef CONFIG_PXA27x
- case 1:
- local_irq_disable();
- PCFR |= PCFR_PI2CEN;
- local_irq_enable();
-- pxa_set_cken(CKEN_PWRI2C, 1);
--#endif
- }
-+#endif
-
- ret = request_irq(irq, i2c_pxa_handler, IRQF_DISABLED,
- i2c->adap.name, i2c);
-@@ -948,19 +954,18 @@
- eadapt:
- free_irq(irq, i2c);
- ereqirq:
-- switch (dev->id) {
-- case 0:
-- pxa_set_cken(CKEN_I2C, 0);
-- break;
-+ clk_disable(i2c->clk);
-+
- #ifdef CONFIG_PXA27x
-- case 1:
-- pxa_set_cken(CKEN_PWRI2C, 0);
-+ if (dev->id == 1) {
- local_irq_disable();
- PCFR &= ~PCFR_PI2CEN;
- local_irq_enable();
--#endif
- }
-+#endif
- eremap:
-+ clk_put(i2c->clk);
-+eclk:
- kfree(i2c);
- emalloc:
- release_mem_region(res->start, res_len(res));
-@@ -975,18 +980,18 @@
-
- i2c_del_adapter(&i2c->adap);
- free_irq(i2c->irq, i2c);
-- switch (dev->id) {
-- case 0:
-- pxa_set_cken(CKEN_I2C, 0);
-- break;
-+
-+ clk_disable(i2c->clk);
-+ clk_put(i2c->clk);
-+
- #ifdef CONFIG_PXA27x
-- case 1:
-- pxa_set_cken(CKEN_PWRI2C, 0);
-+ if (dev->id == 1) {
- local_irq_disable();
- PCFR &= ~PCFR_PI2CEN;
- local_irq_enable();
--#endif
- }
-+#endif
-+
- release_mem_region(i2c->iobase, i2c->iosize);
- kfree(i2c);
-
---- linux-2.6.23.orig/drivers/input/keyboard/pxa27x_keyboard.c
-+++ linux-2.6.23/drivers/input/keyboard/pxa27x_keyboard.c
-@@ -23,6 +23,8 @@
- #include <linux/input.h>
- #include <linux/device.h>
- #include <linux/platform_device.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/mach-types.h>
- #include <asm/mach/arch.h>
-@@ -40,6 +42,8 @@
- col/2 == 2 ? KPASMKP2 : KPASMKP3)
- #define KPASMKPx_MKC(row, col) (1 << (row + 16 * (col % 2)))
-
-+static struct clk *pxakbd_clk;
-+
- static irqreturn_t pxakbd_irq_handler(int irq, void *dev_id)
- {
- struct platform_device *pdev = dev_id;
-@@ -104,7 +108,7 @@
- KPREC = 0x7F;
-
- /* Enable unit clock */
-- pxa_set_cken(CKEN_KEYPAD, 1);
-+ clk_enable(pxakbd_clk);
-
- return 0;
- }
-@@ -112,7 +116,7 @@
- static void pxakbd_close(struct input_dev *dev)
- {
- /* Disable clock unit */
-- pxa_set_cken(CKEN_KEYPAD, 0);
-+ clk_disable(pxakbd_clk);
- }
-
- #ifdef CONFIG_PM
-@@ -140,7 +144,8 @@
- KPREC = pdata->reg_kprec;
-
- /* Enable unit clock */
-- pxa_set_cken(CKEN_KEYPAD, 1);
-+ clk_disable(pxakbd_clk);
-+ clk_enable(pxakbd_clk);
- }
-
- mutex_unlock(&input_dev->mutex);
-@@ -158,11 +163,18 @@
- struct input_dev *input_dev;
- int i, row, col, error;
-
-+ pxakbd_clk = clk_get(&pdev->dev, "KBDCLK");
-+ if (IS_ERR(pxakbd_clk)) {
-+ error = PTR_ERR(pxakbd_clk);
-+ goto err_clk;
-+ }
-+
- /* Create and register the input driver. */
- input_dev = input_allocate_device();
- if (!input_dev) {
- printk(KERN_ERR "Cannot request keypad device\n");
-- return -ENOMEM;
-+ error = -ENOMEM;
-+ goto err_alloc;
- }
-
- input_dev->name = DRIVER_NAME;
-@@ -185,7 +197,6 @@
- DRIVER_NAME, pdev);
- if (error) {
- printk(KERN_ERR "Cannot request keypad IRQ\n");
-- pxa_set_cken(CKEN_KEYPAD, 0);
- goto err_free_dev;
- }
-
-@@ -217,6 +228,9 @@
- free_irq(IRQ_KEYPAD, pdev);
- err_free_dev:
- input_free_device(input_dev);
-+ err_alloc:
-+ clk_put(pxakbd_clk);
-+ err_clk:
- return error;
- }
-
-@@ -226,6 +240,7 @@
-
- input_unregister_device(input_dev);
- free_irq(IRQ_KEYPAD, pdev);
-+ clk_put(pxakbd_clk);
- platform_set_drvdata(pdev, NULL);
-
- return 0;
---- linux-2.6.23.orig/drivers/mmc/host/pxamci.c
-+++ linux-2.6.23/drivers/mmc/host/pxamci.c
-@@ -23,6 +23,8 @@
- #include <linux/delay.h>
- #include <linux/interrupt.h>
- #include <linux/dma-mapping.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
- #include <linux/mmc/host.h>
-
- #include <asm/dma.h>
-@@ -44,6 +46,8 @@
- spinlock_t lock;
- struct resource *res;
- void __iomem *base;
-+ struct clk *clk;
-+ unsigned long clkrate;
- int irq;
- int dma;
- unsigned int clkrt;
-@@ -119,7 +123,7 @@
- writel(nob, host->base + MMC_NOB);
- writel(data->blksz, host->base + MMC_BLKLEN);
-
-- clks = (unsigned long long)data->timeout_ns * CLOCKRATE;
-+ clks = (unsigned long long)data->timeout_ns * host->clkrate;
- do_div(clks, 1000000000UL);
- timeout = (unsigned int)clks + (data->timeout_clks << host->clkrt);
- writel((timeout + 255) / 256, host->base + MMC_RDTO);
-@@ -358,18 +362,25 @@
- struct pxamci_host *host = mmc_priv(mmc);
-
- if (ios->clock) {
-- unsigned int clk = CLOCKRATE / ios->clock;
-- if (CLOCKRATE / clk > ios->clock)
-+ unsigned long rate = host->clkrate;
-+ unsigned int clk = rate / ios->clock;
-+
-+ /*
-+ * clk might result in a lower divisor than we
-+ * desire. check for that condition and adjust
-+ * as appropriate.
-+ */
-+ if (rate / clk > ios->clock)
- clk <<= 1;
- host->clkrt = fls(clk) - 1;
-- pxa_set_cken(CKEN_MMC, 1);
-+ clk_enable(host->clk);
-
- /*
- * we write clkrt on the next command
- */
- } else {
- pxamci_stop_clock(host);
-- pxa_set_cken(CKEN_MMC, 0);
-+ clk_disable(host->clk);
- }
-
- if (host->power_mode != ios->power_mode) {
-@@ -429,8 +440,6 @@
- }
-
- mmc->ops = &pxamci_ops;
-- mmc->f_min = CLOCKRATE_MIN;
-- mmc->f_max = CLOCKRATE_MAX;
-
- /*
- * We can do SG-DMA, but we don't because we never know how much
-@@ -457,6 +466,22 @@
- host->mmc = mmc;
- host->dma = -1;
- host->pdata = pdev->dev.platform_data;
-+
-+ host->clk = clk_get(&pdev->dev, "MMCCLK");
-+ if (IS_ERR(host->clk)) {
-+ ret = PTR_ERR(host->clk);
-+ host->clk = NULL;
-+ goto out;
-+ }
-+
-+ host->clkrate = clk_get_rate(host->clk);
-+
-+ /*
-+ * Calculate minimum clock rate, rounding up.
-+ */
-+ mmc->f_min = (host->clkrate + 63) / 64;
-+ mmc->f_max = host->clkrate;
-+
- mmc->ocr_avail = host->pdata ?
- host->pdata->ocr_mask :
- MMC_VDD_32_33|MMC_VDD_33_34;
-@@ -515,6 +540,8 @@
- iounmap(host->base);
- if (host->sg_cpu)
- dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-+ if (host->clk)
-+ clk_put(host->clk);
- }
- if (mmc)
- mmc_free_host(mmc);
-@@ -549,6 +576,8 @@
- iounmap(host->base);
- dma_free_coherent(&pdev->dev, PAGE_SIZE, host->sg_cpu, host->sg_dma);
-
-+ clk_put(host->clk);
-+
- release_resource(host->res);
-
- mmc_free_host(mmc);
---- linux-2.6.23.orig/drivers/mmc/host/pxamci.h
-+++ linux-2.6.23/drivers/mmc/host/pxamci.h
-@@ -86,17 +86,3 @@
- #define MMC_RXFIFO 0x0040 /* 8 bit */
-
- #define MMC_TXFIFO 0x0044 /* 8 bit */
--
--/*
-- * The base MMC clock rate
-- */
--#ifdef CONFIG_PXA27x
--#define CLOCKRATE_MIN 304688
--#define CLOCKRATE_MAX 19500000
--#else
--#define CLOCKRATE_MIN 312500
--#define CLOCKRATE_MAX 20000000
--#endif
--
--#define CLOCKRATE CLOCKRATE_MAX
--
---- linux-2.6.23.orig/drivers/mtd/maps/lubbock-flash.c
-+++ linux-2.6.23/drivers/mtd/maps/lubbock-flash.c
-@@ -22,6 +22,7 @@
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-+#include <asm/mach-types.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/lubbock.h>
- #include <asm/cacheflush.h>
-@@ -71,9 +72,14 @@
-
- static int __init init_lubbock(void)
- {
-- int flashboot = (LUB_CONF_SWITCHES & 1);
-+ int flashboot;
- int ret = 0, i;
-
-+ if (!machine_is_lubbock())
-+ return -ENODEV;
-+
-+ flashboot = (LUB_CONF_SWITCHES & 1);
-+
- lubbock_maps[0].bankwidth = lubbock_maps[1].bankwidth =
- (BOOT_DEF & 1) ? 2 : 4;
-
---- linux-2.6.23.orig/drivers/mtd/maps/mainstone-flash.c
-+++ linux-2.6.23/drivers/mtd/maps/mainstone-flash.c
-@@ -22,6 +22,7 @@
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-+#include <asm/mach-types.h>
- #include <asm/arch/pxa-regs.h>
- #include <asm/arch/mainstone.h>
- #include <asm/cacheflush.h>
-@@ -76,6 +77,9 @@
- int SW7 = 0; /* FIXME: get from SCR (Mst doc section 3.2.1.1) */
- int ret = 0, i;
-
-+ if (!machine_is_mainstone())
-+ return -ENODEV;
-+
- mainstone_maps[0].bankwidth = (BOOT_DEF & 1) ? 2 : 4;
- mainstone_maps[1].bankwidth = 4;
-
---- linux-2.6.23.orig/drivers/net/irda/pxaficp_ir.c
-+++ linux-2.6.23/drivers/net/irda/pxaficp_ir.c
-@@ -23,6 +23,7 @@
- #include <linux/dma-mapping.h>
- #include <linux/platform_device.h>
- #include <linux/pm.h>
-+#include <linux/clk.h>
-
- #include <net/irda/irda.h>
- #include <net/irda/irmod.h>
-@@ -87,8 +88,30 @@
-
- struct device *dev;
- struct pxaficp_platform_data *pdata;
-+ struct clk *fir_clk;
-+ struct clk *sir_clk;
-+ struct clk *cur_clk;
- };
-
-+static inline void pxa_irda_disable_clk(struct pxa_irda *si)
-+{
-+ if (si->cur_clk)
-+ clk_disable(si->cur_clk);
-+ si->cur_clk = NULL;
-+}
-+
-+static inline void pxa_irda_enable_firclk(struct pxa_irda *si)
-+{
-+ si->cur_clk = si->fir_clk;
-+ clk_enable(si->fir_clk);
-+}
-+
-+static inline void pxa_irda_enable_sirclk(struct pxa_irda *si)
-+{
-+ si->cur_clk = si->sir_clk;
-+ clk_enable(si->sir_clk);
-+}
-+
-
- #define IS_FIR(si) ((si)->speed >= 4000000)
- #define IRDA_FRAME_SIZE_LIMIT 2047
-@@ -134,7 +157,7 @@
- DCSR(si->rxdma) &= ~DCSR_RUN;
- /* disable FICP */
- ICCR0 = 0;
-- pxa_set_cken(CKEN_FICP, 0);
-+ pxa_irda_disable_clk(si);
-
- /* set board transceiver to SIR mode */
- si->pdata->transceiver_mode(si->dev, IR_SIRMODE);
-@@ -144,7 +167,7 @@
- pxa_gpio_mode(GPIO47_STTXD_MD);
-
- /* enable the STUART clock */
-- pxa_set_cken(CKEN_STUART, 1);
-+ pxa_irda_enable_sirclk(si);
- }
-
- /* disable STUART first */
-@@ -169,7 +192,7 @@
- /* disable STUART */
- STIER = 0;
- STISR = 0;
-- pxa_set_cken(CKEN_STUART, 0);
-+ pxa_irda_disable_clk(si);
-
- /* disable FICP first */
- ICCR0 = 0;
-@@ -182,7 +205,7 @@
- pxa_gpio_mode(GPIO47_ICPTXD_MD);
-
- /* enable the FICP clock */
-- pxa_set_cken(CKEN_FICP, 1);
-+ pxa_irda_enable_firclk(si);
-
- si->speed = speed;
- pxa_irda_fir_dma_rx_start(si);
-@@ -592,16 +615,15 @@
- STIER = 0;
- /* disable STUART SIR mode */
- STISR = 0;
-- /* disable the STUART clock */
-- pxa_set_cken(CKEN_STUART, 0);
-
- /* disable DMA */
- DCSR(si->txdma) &= ~DCSR_RUN;
- DCSR(si->rxdma) &= ~DCSR_RUN;
- /* disable FICP */
- ICCR0 = 0;
-- /* disable the FICP clock */
-- pxa_set_cken(CKEN_FICP, 0);
-+
-+ /* disable the STUART or FICP clocks */
-+ pxa_irda_disable_clk(si);
-
- DRCMR17 = 0;
- DRCMR18 = 0;
-@@ -792,6 +814,13 @@
- si->dev = &pdev->dev;
- si->pdata = pdev->dev.platform_data;
-
-+ si->sir_clk = clk_get(&pdev->dev, "UARTCLK");
-+ si->fir_clk = clk_get(&pdev->dev, "FICPCLK");
-+ if (IS_ERR(si->sir_clk) || IS_ERR(si->fir_clk)) {
-+ err = PTR_ERR(IS_ERR(si->sir_clk) ? si->sir_clk : si->fir_clk);
-+ goto err_mem_4;
-+ }
-+
- /*
- * Initialise the SIR buffers
- */
-@@ -831,6 +860,10 @@
- err_mem_5:
- kfree(si->rx_buff.head);
- err_mem_4:
-+ if (si->sir_clk && !IS_ERR(si->sir_clk))
-+ clk_put(si->sir_clk);
-+ if (si->fir_clk && !IS_ERR(si->fir_clk))
-+ clk_put(si->fir_clk);
- free_netdev(dev);
- err_mem_3:
- release_mem_region(__PREG(FICP), 0x1c);
-@@ -850,6 +883,8 @@
- unregister_netdev(dev);
- kfree(si->tx_buff.head);
- kfree(si->rx_buff.head);
-+ clk_put(si->fir_clk);
-+ clk_put(si->sir_clk);
- free_netdev(dev);
- }
-
---- linux-2.6.23.orig/drivers/net/smc91x.c
-+++ linux-2.6.23/drivers/net/smc91x.c
-@@ -173,56 +173,6 @@
- */
- #define MII_DELAY 1
-
--/* store this information for the driver.. */
--struct smc_local {
-- /*
-- * If I have to wait until memory is available to send a
-- * packet, I will store the skbuff here, until I get the
-- * desired memory. Then, I'll send it out and free it.
-- */
-- struct sk_buff *pending_tx_skb;
-- struct tasklet_struct tx_task;
--
-- /*
-- * these are things that the kernel wants me to keep, so users
-- * can find out semi-useless statistics of how well the card is
-- * performing
-- */
-- struct net_device_stats stats;
--
-- /* version/revision of the SMC91x chip */
-- int version;
--
-- /* Contains the current active transmission mode */
-- int tcr_cur_mode;
--
-- /* Contains the current active receive mode */
-- int rcr_cur_mode;
--
-- /* Contains the current active receive/phy mode */
-- int rpc_cur_mode;
-- int ctl_rfduplx;
-- int ctl_rspeed;
--
-- u32 msg_enable;
-- u32 phy_type;
-- struct mii_if_info mii;
--
-- /* work queue */
-- struct work_struct phy_configure;
-- struct net_device *dev;
-- int work_pending;
--
-- spinlock_t lock;
--
--#ifdef SMC_USE_PXA_DMA
-- /* DMA needs the physical address of the chip */
-- u_long physaddr;
--#endif
-- void __iomem *base;
-- void __iomem *datacs;
--};
--
- #if SMC_DEBUG > 0
- #define DBG(n, args...) \
- do { \
-@@ -2238,17 +2188,19 @@
- goto out_release_attrib;
- }
-
-- platform_set_drvdata(pdev, ndev);
-- ret = smc_probe(ndev, addr);
-- if (ret != 0)
-- goto out_iounmap;
- #ifdef SMC_USE_PXA_DMA
-- else {
-+ {
- struct smc_local *lp = netdev_priv(ndev);
-+ lp->device = &pdev->dev;
- lp->physaddr = res->start;
- }
- #endif
-
-+ platform_set_drvdata(pdev, ndev);
-+ ret = smc_probe(ndev, addr);
-+ if (ret != 0)
-+ goto out_iounmap;
-+
- smc_request_datacs(pdev, ndev);
-
- return 0;
---- linux-2.6.23.orig/drivers/net/smc91x.h
-+++ linux-2.6.23/drivers/net/smc91x.h
-@@ -461,6 +461,59 @@
-
- #endif
-
-+
-+/* store this information for the driver.. */
-+struct smc_local {
-+ /*
-+ * If I have to wait until memory is available to send a
-+ * packet, I will store the skbuff here, until I get the
-+ * desired memory. Then, I'll send it out and free it.
-+ */
-+ struct sk_buff *pending_tx_skb;
-+ struct tasklet_struct tx_task;
-+
-+ /*
-+ * these are things that the kernel wants me to keep, so users
-+ * can find out semi-useless statistics of how well the card is
-+ * performing
-+ */
-+ struct net_device_stats stats;
-+
-+ /* version/revision of the SMC91x chip */
-+ int version;
-+
-+ /* Contains the current active transmission mode */
-+ int tcr_cur_mode;
-+
-+ /* Contains the current active receive mode */
-+ int rcr_cur_mode;
-+
-+ /* Contains the current active receive/phy mode */
-+ int rpc_cur_mode;
-+ int ctl_rfduplx;
-+ int ctl_rspeed;
-+
-+ u32 msg_enable;
-+ u32 phy_type;
-+ struct mii_if_info mii;
-+
-+ /* work queue */
-+ struct work_struct phy_configure;
-+ struct net_device *dev;
-+ int work_pending;
-+
-+ spinlock_t lock;
-+
-+#ifdef SMC_USE_PXA_DMA
-+ /* DMA needs the physical address of the chip */
-+ u_long physaddr;
-+ struct device *device;
-+#endif
-+ void __iomem *base;
-+ void __iomem *datacs;
-+};
-+
-+
- #ifdef SMC_USE_PXA_DMA
- /*
- * Let's use the DMA engine on the XScale PXA2xx for RX packets. This is
-@@ -475,11 +528,12 @@
- #ifdef SMC_insl
- #undef SMC_insl
- #define SMC_insl(a, r, p, l) \
-- smc_pxa_dma_insl(a, lp->physaddr, r, dev->dma, p, l)
-+ smc_pxa_dma_insl(a, lp, r, dev->dma, p, l)
- static inline void
--smc_pxa_dma_insl(void __iomem *ioaddr, u_long physaddr, int reg, int dma,
-+smc_pxa_dma_insl(void __iomem *ioaddr, struct smc_local *lp, int reg, int dma,
- u_char *buf, int len)
- {
-+ u_long physaddr = lp->physaddr;
- dma_addr_t dmabuf;
-
- /* fallback if no DMA available */
-@@ -496,7 +550,7 @@
- }
-
- len *= 4;
-- dmabuf = dma_map_single(NULL, buf, len, DMA_FROM_DEVICE);
-+ dmabuf = dma_map_single(lp->device, buf, len, DMA_FROM_DEVICE);
- DCSR(dma) = DCSR_NODESC;
- DTADR(dma) = dmabuf;
- DSADR(dma) = physaddr + reg;
-@@ -506,18 +560,19 @@
- while (!(DCSR(dma) & DCSR_STOPSTATE))
- cpu_relax();
- DCSR(dma) = 0;
-- dma_unmap_single(NULL, dmabuf, len, DMA_FROM_DEVICE);
-+ dma_unmap_single(lp->device, dmabuf, len, DMA_FROM_DEVICE);
- }
- #endif
-
- #ifdef SMC_insw
- #undef SMC_insw
- #define SMC_insw(a, r, p, l) \
-- smc_pxa_dma_insw(a, lp->physaddr, r, dev->dma, p, l)
-+ smc_pxa_dma_insw(a, lp, r, dev->dma, p, l)
- static inline void
--smc_pxa_dma_insw(void __iomem *ioaddr, u_long physaddr, int reg, int dma,
-+smc_pxa_dma_insw(void __iomem *ioaddr, struct smc_local *lp, int reg, int dma,
- u_char *buf, int len)
- {
-+ u_long physaddr = lp->physaddr;
- dma_addr_t dmabuf;
-
- /* fallback if no DMA available */
-@@ -534,7 +589,7 @@
- }
-
- len *= 2;
-- dmabuf = dma_map_single(NULL, buf, len, DMA_FROM_DEVICE);
-+ dmabuf = dma_map_single(lp->device, buf, len, DMA_FROM_DEVICE);
- DCSR(dma) = DCSR_NODESC;
- DTADR(dma) = dmabuf;
- DSADR(dma) = physaddr + reg;
-@@ -544,7 +599,7 @@
- while (!(DCSR(dma) & DCSR_STOPSTATE))
- cpu_relax();
- DCSR(dma) = 0;
-- dma_unmap_single(NULL, dmabuf, len, DMA_FROM_DEVICE);
-+ dma_unmap_single(lp->device, dmabuf, len, DMA_FROM_DEVICE);
- }
- #endif
-
---- linux-2.6.23.orig/drivers/serial/pxa.c
-+++ linux-2.6.23/drivers/serial/pxa.c
-@@ -42,6 +42,7 @@
- #include <linux/tty.h>
- #include <linux/tty_flip.h>
- #include <linux/serial_core.h>
-+#include <linux/clk.h>
-
- #include <asm/io.h>
- #include <asm/hardware.h>
-@@ -56,7 +57,7 @@
- unsigned char lcr;
- unsigned char mcr;
- unsigned int lsr_break_flag;
-- unsigned int cken;
-+ struct clk *clk;
- char *name;
- };
-
-@@ -363,6 +364,8 @@
- else
- up->mcr = 0;
-
-+ up->port.uartclk = clk_get_rate(up->clk);
-+
- /*
- * Allocate the IRQ
- */
-@@ -568,9 +571,11 @@
- unsigned int oldstate)
- {
- struct uart_pxa_port *up = (struct uart_pxa_port *)port;
-- pxa_set_cken(up->cken, !state);
-+
- if (!state)
-- udelay(1);
-+ clk_enable(up->clk);
-+ else
-+ clk_disable(up->clk);
- }
-
- static void serial_pxa_release_port(struct uart_port *port)
-@@ -604,7 +609,7 @@
-
- #ifdef CONFIG_SERIAL_PXA_CONSOLE
-
--static struct uart_pxa_port serial_pxa_ports[];
-+static struct uart_pxa_port *serial_pxa_ports[4];
- static struct uart_driver serial_pxa_reg;
-
- #define BOTH_EMPTY (UART_LSR_TEMT | UART_LSR_THRE)
-@@ -654,9 +659,11 @@
- static void
- serial_pxa_console_write(struct console *co, const char *s, unsigned int count)
- {
-- struct uart_pxa_port *up = &serial_pxa_ports[co->index];
-+ struct uart_pxa_port *up = serial_pxa_ports[co->index];
- unsigned int ier;
-
-+ clk_enable(up->clk);
-+
- /*
- * First save the IER then disable the interrupts
- */
-@@ -671,6 +678,8 @@
- */
- wait_for_xmitr(up);
- serial_out(up, UART_IER, ier);
-+
-+ clk_disable(up->clk);
- }
-
- static int __init
-@@ -684,7 +693,9 @@
-
- if (co->index == -1 || co->index >= serial_pxa_reg.nr)
- co->index = 0;
-- up = &serial_pxa_ports[co->index];
-+ up = serial_pxa_ports[co->index];
-+ if (!up)
-+ return -ENODEV;
-
- if (options)
- uart_parse_options(options, &baud, &parity, &bits, &flow);
-@@ -702,15 +713,6 @@
- .data = &serial_pxa_reg,
- };
-
--static int __init
--serial_pxa_console_init(void)
--{
-- register_console(&serial_pxa_console);
-- return 0;
--}
--
--console_initcall(serial_pxa_console_init);
--
- #define PXA_CONSOLE &serial_pxa_console
- #else
- #define PXA_CONSOLE NULL
-@@ -736,73 +738,13 @@
- .verify_port = serial_pxa_verify_port,
- };
-
--static struct uart_pxa_port serial_pxa_ports[] = {
-- { /* FFUART */
-- .name = "FFUART",
-- .cken = CKEN_FFUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&FFUART,
-- .mapbase = __PREG(FFUART),
-- .irq = IRQ_FFUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 0,
-- },
-- }, { /* BTUART */
-- .name = "BTUART",
-- .cken = CKEN_BTUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&BTUART,
-- .mapbase = __PREG(BTUART),
-- .irq = IRQ_BTUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 1,
-- },
-- }, { /* STUART */
-- .name = "STUART",
-- .cken = CKEN_STUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&STUART,
-- .mapbase = __PREG(STUART),
-- .irq = IRQ_STUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 2,
-- },
-- }, { /* HWUART */
-- .name = "HWUART",
-- .cken = CKEN_HWUART,
-- .port = {
-- .type = PORT_PXA,
-- .iotype = UPIO_MEM,
-- .membase = (void *)&HWUART,
-- .mapbase = __PREG(HWUART),
-- .irq = IRQ_HWUART,
-- .uartclk = 921600 * 16,
-- .fifosize = 64,
-- .ops = &serial_pxa_pops,
-- .line = 3,
-- },
-- }
--};
--
- static struct uart_driver serial_pxa_reg = {
- .owner = THIS_MODULE,
- .driver_name = "PXA serial",
- .dev_name = "ttyS",
- .major = TTY_MAJOR,
- .minor = 64,
-- .nr = ARRAY_SIZE(serial_pxa_ports),
-+ .nr = 4,
- .cons = PXA_CONSOLE,
- };
-
-@@ -828,10 +770,68 @@
-
- static int serial_pxa_probe(struct platform_device *dev)
- {
-- serial_pxa_ports[dev->id].port.dev = &dev->dev;
-- uart_add_one_port(&serial_pxa_reg, &serial_pxa_ports[dev->id].port);
-- platform_set_drvdata(dev, &serial_pxa_ports[dev->id]);
-+ struct uart_pxa_port *sport;
-+ struct resource *mmres, *irqres;
-+ int ret;
-+
-+ mmres = platform_get_resource(dev, IORESOURCE_MEM, 0);
-+ irqres = platform_get_resource(dev, IORESOURCE_IRQ, 0);
-+ if (!mmres || !irqres)
-+ return -ENODEV;
-+
-+ sport = kzalloc(sizeof(struct uart_pxa_port), GFP_KERNEL);
-+ if (!sport)
-+ return -ENOMEM;
-+
-+ sport->clk = clk_get(&dev->dev, "UARTCLK");
-+ if (IS_ERR(sport->clk)) {
-+ ret = PTR_ERR(sport->clk);
-+ goto err_free;
-+ }
-+
-+ sport->port.type = PORT_PXA;
-+ sport->port.iotype = UPIO_MEM;
-+ sport->port.mapbase = mmres->start;
-+ sport->port.irq = irqres->start;
-+ sport->port.fifosize = 64;
-+ sport->port.ops = &serial_pxa_pops;
-+ sport->port.line = dev->id;
-+ sport->port.dev = &dev->dev;
-+ sport->port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
-+ sport->port.uartclk = clk_get_rate(sport->clk);
-+
-+ /*
-+ * Is it worth keeping this?
-+ */
-+ if (mmres->start == __PREG(FFUART))
-+ sport->name = "FFUART";
-+ else if (mmres->start == __PREG(BTUART))
-+ sport->name = "BTUART";
-+ else if (mmres->start == __PREG(STUART))
-+ sport->name = "STUART";
-+ else if (mmres->start == __PREG(HWUART))
-+ sport->name = "HWUART";
-+ else
-+ sport->name = "???";
-+
-+ sport->port.membase = ioremap(mmres->start, mmres->end - mmres->start + 1);
-+ if (!sport->port.membase) {
-+ ret = -ENOMEM;
-+ goto err_clk;
-+ }
-+
-+ serial_pxa_ports[dev->id] = sport;
-+
-+ uart_add_one_port(&serial_pxa_reg, &sport->port);
-+ platform_set_drvdata(dev, sport);
-+
- return 0;
-+
-+ err_clk:
-+ clk_put(sport->clk);
-+ err_free:
-+ kfree(sport);
-+ return ret;
- }
-
- static int serial_pxa_remove(struct platform_device *dev)
-@@ -840,8 +840,9 @@
-
- platform_set_drvdata(dev, NULL);
-
-- if (sport)
-- uart_remove_one_port(&serial_pxa_reg, &sport->port);
-+ uart_remove_one_port(&serial_pxa_reg, &sport->port);
-+ clk_put(sport->clk);
-+ kfree(sport);
-
- return 0;
- }
---- linux-2.6.23.orig/drivers/serial/serial_core.c
-+++ linux-2.6.23/drivers/serial/serial_core.c
-@@ -2128,6 +2128,14 @@
- spin_unlock_irqrestore(&port->lock, flags);
-
- /*
-+ * If this driver supports console, and it hasn't been
-+ * successfully registered yet, try to re-register it.
-+ * It may be that the port was not available.
-+ */
-+ if (port->cons && !(port->cons->flags & CON_ENABLED))
-+ register_console(port->cons);
-+
-+ /*
- * Power down all ports by default, except the
- * console if we have one.
- */
-@@ -2288,6 +2296,7 @@
- }
-
- state->port = port;
-+ state->pm_state = -1;
-
- port->cons = drv->cons;
- port->info = state->info;
-@@ -2310,15 +2319,6 @@
- tty_register_device(drv->tty_driver, port->line, port->dev);
-
- /*
-- * If this driver supports console, and it hasn't been
-- * successfully registered yet, try to re-register it.
-- * It may be that the port was not available.
-- */
-- if (port->type != PORT_UNKNOWN &&
-- port->cons && !(port->cons->flags & CON_ENABLED))
-- register_console(port->cons);
--
-- /*
- * Ensure UPF_DEAD is not set.
- */
- port->flags &= ~UPF_DEAD;
---- linux-2.6.23.orig/drivers/usb/gadget/pxa2xx_udc.c
-+++ linux-2.6.23/drivers/usb/gadget/pxa2xx_udc.c
-@@ -43,6 +43,8 @@
- #include <linux/platform_device.h>
- #include <linux/dma-mapping.h>
- #include <linux/irq.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/byteorder.h>
- #include <asm/dma.h>
-@@ -1157,7 +1159,7 @@
-
- #ifdef CONFIG_ARCH_PXA
- /* Disable clock for USB device */
-- pxa_set_cken(CKEN_USB, 0);
-+ clk_disable(dev->clk);
- #endif
-
- ep0_idle (dev);
-@@ -1202,8 +1204,7 @@
-
- #ifdef CONFIG_ARCH_PXA
- /* Enable clock for USB device */
-- pxa_set_cken(CKEN_USB, 1);
-- udelay(5);
-+ clk_enable(dev->clk);
- #endif
-
- /* try to clear these bits before we enable the udc */
-@@ -2137,6 +2138,14 @@
- if (irq < 0)
- return -ENODEV;
-
-+#ifdef CONFIG_ARCH_PXA
-+ dev->clk = clk_get(&pdev->dev, "UDCCLK");
-+ if (IS_ERR(dev->clk)) {
-+ retval = PTR_ERR(dev->clk);
-+ goto err_clk;
-+ }
-+#endif
-+
- pr_debug("%s: IRQ %d%s%s\n", driver_name, irq,
- dev->has_cfr ? "" : " (!cfr)",
- SIZE_STR "(pio)"
-@@ -2152,11 +2161,10 @@
- dev_dbg(&pdev->dev,
- "can't get vbus gpio %d, err: %d\n",
- dev->mach->gpio_vbus, retval);
-- return -EBUSY;
-+ goto err_gpio_vbus;
- }
- gpio_direction_input(dev->mach->gpio_vbus);
- vbus_irq = gpio_to_irq(dev->mach->gpio_vbus);
-- set_irq_type(vbus_irq, IRQT_BOTHEDGE);
- } else
- vbus_irq = 0;
-
-@@ -2166,9 +2174,7 @@
- dev_dbg(&pdev->dev,
- "can't get pullup gpio %d, err: %d\n",
- dev->mach->gpio_pullup, retval);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_gpio_pullup;
- }
- gpio_direction_output(dev->mach->gpio_pullup, 0);
- }
-@@ -2195,11 +2201,7 @@
- if (retval != 0) {
- printk(KERN_ERR "%s: can't get irq %d, err %d\n",
- driver_name, irq, retval);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_irq1;
- }
- dev->got_irq = 1;
-
-@@ -2213,12 +2215,7 @@
- printk(KERN_ERR "%s: can't get irq %i, err %d\n",
- driver_name, LUBBOCK_USB_DISC_IRQ, retval);
- lubbock_fail0:
-- free_irq(irq, dev);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_irq_lub;
- }
- retval = request_irq(LUBBOCK_USB_IRQ,
- lubbock_vbus_irq,
-@@ -2234,22 +2231,37 @@
- #endif
- if (vbus_irq) {
- retval = request_irq(vbus_irq, udc_vbus_irq,
-- IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
-+ IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
-+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
- driver_name, dev);
- if (retval != 0) {
- printk(KERN_ERR "%s: can't get irq %i, err %d\n",
- driver_name, vbus_irq, retval);
-- free_irq(irq, dev);
-- if (dev->mach->gpio_pullup)
-- gpio_free(dev->mach->gpio_pullup);
-- if (dev->mach->gpio_vbus)
-- gpio_free(dev->mach->gpio_vbus);
-- return -EBUSY;
-+ goto err_vbus_irq;
- }
- }
- create_proc_files();
-
- return 0;
-+
-+ err_vbus_irq:
-+#ifdef CONFIG_ARCH_LUBBOCK
-+ free_irq(LUBBOCK_USB_DISC_IRQ, dev);
-+ err_irq_lub:
-+#endif
-+ free_irq(irq, dev);
-+ err_irq1:
-+ if (dev->mach->gpio_pullup)
-+ gpio_free(dev->mach->gpio_pullup);
-+ err_gpio_pullup:
-+ if (dev->mach->gpio_vbus)
-+ gpio_free(dev->mach->gpio_vbus);
-+ err_gpio_vbus:
-+#ifdef CONFIG_ARCH_PXA
-+ clk_put(dev->clk);
-+ err_clk:
-+#endif
-+ return retval;
- }
-
- static void pxa2xx_udc_shutdown(struct platform_device *_dev)
-@@ -2284,6 +2296,10 @@
- if (dev->mach->gpio_pullup)
- gpio_free(dev->mach->gpio_pullup);
-
-+#ifdef CONFIG_ARCH_PXA
-+ clk_put(dev->clk);
-+#endif
-+
- platform_set_drvdata(pdev, NULL);
- the_controller = NULL;
- return 0;
---- linux-2.6.23.orig/drivers/usb/gadget/pxa2xx_udc.h
-+++ linux-2.6.23/drivers/usb/gadget/pxa2xx_udc.h
-@@ -125,6 +125,7 @@
- struct timer_list timer;
-
- struct device *dev;
-+ struct clk *clk;
- struct pxa2xx_udc_mach_info *mach;
- u64 dma_mask;
- struct pxa2xx_ep ep [PXA_UDC_NUM_ENDPOINTS];
---- linux-2.6.23.orig/drivers/video/pxafb.c
-+++ linux-2.6.23/drivers/video/pxafb.c
-@@ -37,6 +37,8 @@
- #include <linux/cpufreq.h>
- #include <linux/platform_device.h>
- #include <linux/dma-mapping.h>
-+#include <linux/clk.h>
-+#include <linux/err.h>
-
- #include <asm/hardware.h>
- #include <asm/io.h>
-@@ -574,15 +576,15 @@
- *
- * Factoring the 10^4 and 10^-12 out gives 10^-8 == 1 / 100000000 as used below.
- */
--static inline unsigned int get_pcd(unsigned int pixclock)
-+static inline unsigned int get_pcd(struct pxafb_info *fbi, unsigned int pixclock)
- {
- unsigned long long pcd;
-
- /* FIXME: Need to take into account Double Pixel Clock mode
-- * (DPC) bit? or perhaps set it based on the various clock
-- * speeds */
--
-- pcd = (unsigned long long)get_lcdclk_frequency_10khz() * pixclock;
-+ * (DPC) bit? or perhaps set it based on the various clock
-+ * speeds */
-+ pcd = (unsigned long long)(clk_get_rate(fbi->clk) / 10000);
-+ pcd *= pixclock;
- do_div(pcd, 100000000 * 2);
- /* no need for this, since we should subtract 1 anyway. they cancel */
- /* pcd += 1; */ /* make up for integer math truncations */
-@@ -591,19 +593,21 @@
-
- /*
- * Some touchscreens need hsync information from the video driver to
-- * function correctly. We export it here.
-+ * function correctly. We export it here. Note that 'hsync_time' and
-+ * the value returned from pxafb_get_hsync_time() is the *reciprocal*
-+ * of the hsync period in seconds.
- */
- static inline void set_hsync_time(struct pxafb_info *fbi, unsigned int pcd)
- {
-- unsigned long long htime;
-+ unsigned long htime;
-
- if ((pcd == 0) || (fbi->fb.var.hsync_len == 0)) {
- fbi->hsync_time=0;
- return;
- }
-
-- htime = (unsigned long long)get_lcdclk_frequency_10khz() * 10000;
-- do_div(htime, pcd * fbi->fb.var.hsync_len);
-+ htime = clk_get_rate(fbi->clk) / (pcd * fbi->fb.var.hsync_len);
-+
- fbi->hsync_time = htime;
- }
-
-@@ -628,7 +632,7 @@
- {
- struct pxafb_lcd_reg new_regs;
- u_long flags;
-- u_int lines_per_panel, pcd = get_pcd(var->pixclock);
-+ u_int lines_per_panel, pcd = get_pcd(fbi, var->pixclock);
-
- pr_debug("pxafb: Configuring PXA LCD\n");
-
-@@ -908,7 +912,7 @@
- pr_debug("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3);
-
- /* enable LCD controller clock */
-- pxa_set_cken(CKEN_LCD, 1);
-+ clk_enable(fbi->clk);
-
- down(&fcs_lcd_sem);
- /* Sequence from 11.7.10 */
-@@ -950,7 +954,7 @@
- up(&fcs_lcd_sem);
-
- /* disable LCD controller clock */
-- pxa_set_cken(CKEN_LCD, 0);
-+ clk_disable(fbi->clk);
- }
-
- /*
-@@ -1161,7 +1165,7 @@
- if ((clkinfo->old == 13000))
- break;
-
-- pcd = get_pcd(fbi->fb.var.pixclock);
-+ pcd = get_pcd(fbi, fbi->fb.var.pixclock);
- lccr3 = fbi->reg_lccr3;
- set_hsync_time(fbi, pcd);
- fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
-@@ -1293,6 +1297,12 @@
- memset(fbi, 0, sizeof(struct pxafb_info));
- fbi->dev = dev;
-
-+ fbi->clk = clk_get(dev, "LCDCLK");
-+ if (IS_ERR(fbi->clk)) {
-+ kfree(fbi);
-+ return NULL;
-+ }
-+
- strcpy(fbi->fb.fix.id, PXA_NAME);
-
- fbi->fb.fix.type = FB_TYPE_PACKED_PIXELS;
---- linux-2.6.23.orig/drivers/video/pxafb.h
-+++ linux-2.6.23/drivers/video/pxafb.h
-@@ -94,6 +94,7 @@
- struct pxafb_info {
- struct fb_info fb;
- struct device *dev;
-+ struct clk *clk;
-
- /*
- * These are the addresses we mapped
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/hardware.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/hardware.h
-@@ -80,6 +80,24 @@
- _id == 0x411; \
- })
-
-+#define __cpu_is_pxa300(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x688; \
-+ })
-+
-+#define __cpu_is_pxa310(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x689; \
-+ })
-+
-+#define __cpu_is_pxa320(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 4 & 0xfff; \
-+ _id == 0x603 || _id == 0x682; \
-+ })
-+
- #define cpu_is_pxa21x() \
- ({ \
- unsigned int id = read_cpuid(CPUID_ID); \
-@@ -98,6 +116,53 @@
- __cpu_is_pxa27x(id); \
- })
-
-+#define cpu_is_pxa300() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa300(id); \
-+ })
-+
-+#define cpu_is_pxa310() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa310(id); \
-+ })
-+
-+#define cpu_is_pxa320() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa320(id); \
-+ })
-+
-+/*
-+ * CPUID Core Generation Bit
-+ * <= 0x2 for pxa21x/pxa25x/pxa26x/pxa27x
-+ * == 0x3 for pxa300/pxa310/pxa320
-+ */
-+#define __cpu_is_pxa2xx(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 13 & 0x7; \
-+ _id <= 0x2; \
-+ })
-+
-+#define __cpu_is_pxa3xx(id) \
-+ ({ \
-+ unsigned int _id = (id) >> 13 & 0x7; \
-+ _id == 0x3; \
-+ })
-+
-+#define cpu_is_pxa2xx() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa2xx(id); \
-+ })
-+
-+#define cpu_is_pxa3xx() \
-+ ({ \
-+ unsigned int id = read_cpuid(CPUID_ID); \
-+ __cpu_is_pxa3xx(id); \
-+ })
-+
- /*
- * Handy routine to set GPIO alternate functions
- */
-@@ -116,13 +181,16 @@
- /*
- * Routine to enable or disable CKEN
- */
--extern void pxa_set_cken(int clock, int enable);
-+static inline void __deprecated pxa_set_cken(int clock, int enable)
-+{
-+ extern void __pxa_set_cken(int clock, int enable);
-+ __pxa_set_cken(clock, enable);
-+}
-
- /*
- * return current memory and LCD clock frequency in units of 10kHz
- */
- extern unsigned int get_memclk_frequency_10khz(void);
--extern unsigned int get_lcdclk_frequency_10khz(void);
-
- #endif
-
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/irqs.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/irqs.h
-@@ -66,12 +66,6 @@
- #define IRQ_TO_GPIO_2_x(i) ((i) - PXA_GPIO_IRQ_BASE)
- #define IRQ_TO_GPIO(i) (((i) < IRQ_GPIO(2)) ? ((i) - IRQ_GPIO0) : IRQ_TO_GPIO_2_x(i))
-
--#if defined(CONFIG_PXA25x)
--#define PXA_LAST_GPIO 84
--#elif defined(CONFIG_PXA27x)
--#define PXA_LAST_GPIO 127
--#endif
--
- /*
- * The next 16 interrupts are for board specific purposes. Since
- * the kernel can only run on one machine at a time, we can re-use
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa300.h
-@@ -0,0 +1,574 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp-pxa300.h
-+ *
-+ * PXA300/PXA310 specific MFP configuration definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_PXA300_H
-+#define __ASM_ARCH_MFP_PXA300_H
-+
-+#include <asm/arch/mfp.h>
-+
-+/* GPIO */
-+#define GPIO46_GPIO MFP_CFG(GPIO46, AF1)
-+#define GPIO49_GPIO MFP_CFG(GPIO49, AF3)
-+#define GPIO50_GPIO MFP_CFG(GPIO50, AF2)
-+#define GPIO51_GPIO MFP_CFG(GPIO51, AF3)
-+#define GPIO52_GPIO MFP_CFG(GPIO52, AF3)
-+#define GPIO56_GPIO MFP_CFG(GPIO56, AF0)
-+#define GPIO58_GPIO MFP_CFG(GPIO58, AF0)
-+#define GPIO59_GPIO MFP_CFG(GPIO59, AF0)
-+#define GPIO60_GPIO MFP_CFG(GPIO60, AF0)
-+#define GPIO61_GPIO MFP_CFG(GPIO61, AF0)
-+#define GPIO62_GPIO MFP_CFG(GPIO62, AF0)
-+
-+#ifdef CONFIG_CPU_PXA310
-+#define GPIO7_2_GPIO MFP_CFG(GPIO7_2, AF0)
-+#define GPIO8_2_GPIO MFP_CFG(GPIO8_2, AF0)
-+#define GPIO9_2_GPIO MFP_CFG(GPIO9_2, AF0)
-+#define GPIO10_2_GPIO MFP_CFG(GPIO10_2, AF0)
-+#define GPIO11_2_GPIO MFP_CFG(GPIO11_2, AF0)
-+#define GPIO12_2_GPIO MFP_CFG(GPIO12_2, AF0)
-+#endif
-+
-+/* Chip Select */
-+#define GPIO2_nCS3 MFP_CFG(GPIO2, AF1)
-+
-+/* AC97 */
-+#define GPIO23_AC97_nACRESET MFP_CFG(GPIO23, AF1)
-+#define GPIO24_AC97_SYSCLK MFP_CFG(GPIO24, AF1)
-+#define GPIO29_AC97_BITCLK MFP_CFG(GPIO29, AF1)
-+#define GPIO25_AC97_SDATA_IN_0 MFP_CFG(GPIO25, AF1)
-+#define GPIO26_AC97_SDATA_IN_1 MFP_CFG(GPIO26, AF1)
-+#define GPIO17_AC97_SDATA_IN_2 MFP_CFG(GPIO17, AF3)
-+#define GPIO21_AC97_SDATA_IN_2 MFP_CFG(GPIO21, AF2)
-+#define GPIO18_AC97_SDATA_IN_3 MFP_CFG(GPIO18, AF3)
-+#define GPIO22_AC97_SDATA_IN_3 MFP_CFG(GPIO22, AF2)
-+#define GPIO27_AC97_SDATA_OUT MFP_CFG(GPIO27, AF1)
-+#define GPIO28_AC97_SYNC MFP_CFG(GPIO28, AF1)
-+
-+/* I2C */
-+#define GPIO21_I2C_SCL MFP_CFG_LPM(GPIO21, AF1, PULL_HIGH)
-+#define GPIO22_I2C_SDA MFP_CFG_LPM(GPIO22, AF1, PULL_HIGH)
-+
-+/* QCI */
-+#define GPIO39_CI_DD_0 MFP_CFG_DRV(GPIO39, AF1, DS04X)
-+#define GPIO40_CI_DD_1 MFP_CFG_DRV(GPIO40, AF1, DS04X)
-+#define GPIO41_CI_DD_2 MFP_CFG_DRV(GPIO41, AF1, DS04X)
-+#define GPIO42_CI_DD_3 MFP_CFG_DRV(GPIO42, AF1, DS04X)
-+#define GPIO43_CI_DD_4 MFP_CFG_DRV(GPIO43, AF1, DS04X)
-+#define GPIO44_CI_DD_5 MFP_CFG_DRV(GPIO44, AF1, DS04X)
-+#define GPIO45_CI_DD_6 MFP_CFG_DRV(GPIO45, AF1, DS04X)
-+#define GPIO46_CI_DD_7 MFP_CFG_DRV(GPIO46, AF0, DS04X)
-+#define GPIO47_CI_DD_8 MFP_CFG_DRV(GPIO47, AF1, DS04X)
-+#define GPIO48_CI_DD_9 MFP_CFG_DRV(GPIO48, AF1, DS04X)
-+#define GPIO52_CI_HSYNC MFP_CFG_DRV(GPIO52, AF0, DS04X)
-+#define GPIO51_CI_VSYNC MFP_CFG_DRV(GPIO51, AF0, DS04X)
-+#define GPIO49_CI_MCLK MFP_CFG_DRV(GPIO49, AF0, DS04X)
-+#define GPIO50_CI_PCLK MFP_CFG_DRV(GPIO50, AF0, DS04X)
-+
-+/* KEYPAD */
-+#define GPIO3_KP_DKIN_6 MFP_CFG_LPM(GPIO3, AF2, FLOAT)
-+#define GPIO4_KP_DKIN_7 MFP_CFG_LPM(GPIO4, AF2, FLOAT)
-+#define GPIO16_KP_DKIN_6 MFP_CFG_LPM(GPIO16, AF6, FLOAT)
-+#define GPIO83_KP_DKIN_2 MFP_CFG_LPM(GPIO83, AF5, FLOAT)
-+#define GPIO84_KP_DKIN_1 MFP_CFG_LPM(GPIO84, AF5, FLOAT)
-+#define GPIO85_KP_DKIN_0 MFP_CFG_LPM(GPIO85, AF3, FLOAT)
-+#define GPIO86_KP_DKIN_1 MFP_CFG_LPM(GPIO86, AF3, FLOAT)
-+#define GPIO87_KP_DKIN_2 MFP_CFG_LPM(GPIO87, AF3, FLOAT)
-+#define GPIO88_KP_DKIN_3 MFP_CFG_LPM(GPIO88, AF3, FLOAT)
-+#define GPIO89_KP_DKIN_3 MFP_CFG_LPM(GPIO89, AF3, FLOAT)
-+#define GPIO107_KP_DKIN_0 MFP_CFG_LPM(GPIO107, AF2, FLOAT)
-+#define GPIO108_KP_DKIN_1 MFP_CFG_LPM(GPIO108, AF2, FLOAT)
-+#define GPIO109_KP_DKIN_2 MFP_CFG_LPM(GPIO109, AF2, FLOAT)
-+#define GPIO110_KP_DKIN_3 MFP_CFG_LPM(GPIO110, AF2, FLOAT)
-+#define GPIO111_KP_DKIN_4 MFP_CFG_LPM(GPIO111, AF2, FLOAT)
-+#define GPIO112_KP_DKIN_5 MFP_CFG_LPM(GPIO112, AF2, FLOAT)
-+#define GPIO113_KP_DKIN_6 MFP_CFG_LPM(GPIO113, AF2, FLOAT)
-+#define GPIO114_KP_DKIN_7 MFP_CFG_LPM(GPIO114, AF2, FLOAT)
-+#define GPIO115_KP_DKIN_0 MFP_CFG_LPM(GPIO115, AF2, FLOAT)
-+#define GPIO116_KP_DKIN_1 MFP_CFG_LPM(GPIO116, AF2, FLOAT)
-+#define GPIO117_KP_DKIN_2 MFP_CFG_LPM(GPIO117, AF2, FLOAT)
-+#define GPIO118_KP_DKIN_3 MFP_CFG_LPM(GPIO118, AF2, FLOAT)
-+#define GPIO119_KP_DKIN_4 MFP_CFG_LPM(GPIO119, AF2, FLOAT)
-+#define GPIO120_KP_DKIN_5 MFP_CFG_LPM(GPIO120, AF2, FLOAT)
-+#define GPIO121_KP_DKIN_6 MFP_CFG_LPM(GPIO121, AF2, FLOAT)
-+#define GPIO122_KP_DKIN_5 MFP_CFG_LPM(GPIO122, AF2, FLOAT)
-+#define GPIO123_KP_DKIN_4 MFP_CFG_LPM(GPIO123, AF2, FLOAT)
-+#define GPIO124_KP_DKIN_3 MFP_CFG_LPM(GPIO124, AF2, FLOAT)
-+#define GPIO127_KP_DKIN_0 MFP_CFG_LPM(GPIO127, AF5, FLOAT)
-+#define GPIO0_2_KP_DKIN_0 MFP_CFG_LPM(GPIO0_2, AF2, FLOAT)
-+#define GPIO1_2_KP_DKIN_1 MFP_CFG_LPM(GPIO1_2, AF2, FLOAT)
-+#define GPIO2_2_KP_DKIN_6 MFP_CFG_LPM(GPIO2_2, AF2, FLOAT)
-+#define GPIO3_2_KP_DKIN_7 MFP_CFG_LPM(GPIO3_2, AF2, FLOAT)
-+#define GPIO4_2_KP_DKIN_1 MFP_CFG_LPM(GPIO4_2, AF2, FLOAT)
-+#define GPIO5_2_KP_DKIN_0 MFP_CFG_LPM(GPIO5_2, AF2, FLOAT)
-+
-+#define GPIO5_KP_MKIN_0 MFP_CFG_LPM(GPIO5, AF2, FLOAT)
-+#define GPIO6_KP_MKIN_1 MFP_CFG_LPM(GPIO6, AF2, FLOAT)
-+#define GPIO9_KP_MKIN_6 MFP_CFG_LPM(GPIO9, AF3, FLOAT)
-+#define GPIO10_KP_MKIN_7 MFP_CFG_LPM(GPIO10, AF3, FLOAT)
-+#define GPIO70_KP_MKIN_6 MFP_CFG_LPM(GPIO70, AF3, FLOAT)
-+#define GPIO71_KP_MKIN_7 MFP_CFG_LPM(GPIO71, AF3, FLOAT)
-+#define GPIO100_KP_MKIN_6 MFP_CFG_LPM(GPIO100, AF7, FLOAT)
-+#define GPIO101_KP_MKIN_7 MFP_CFG_LPM(GPIO101, AF7, FLOAT)
-+#define GPIO112_KP_MKIN_6 MFP_CFG_LPM(GPIO112, AF4, FLOAT)
-+#define GPIO113_KP_MKIN_7 MFP_CFG_LPM(GPIO113, AF4, FLOAT)
-+#define GPIO115_KP_MKIN_0 MFP_CFG_LPM(GPIO115, AF1, FLOAT)
-+#define GPIO116_KP_MKIN_1 MFP_CFG_LPM(GPIO116, AF1, FLOAT)
-+#define GPIO117_KP_MKIN_2 MFP_CFG_LPM(GPIO117, AF1, FLOAT)
-+#define GPIO118_KP_MKIN_3 MFP_CFG_LPM(GPIO118, AF1, FLOAT)
-+#define GPIO119_KP_MKIN_4 MFP_CFG_LPM(GPIO119, AF1, FLOAT)
-+#define GPIO120_KP_MKIN_5 MFP_CFG_LPM(GPIO120, AF1, FLOAT)
-+#define GPIO125_KP_MKIN_2 MFP_CFG_LPM(GPIO125, AF2, FLOAT)
-+#define GPIO2_2_KP_MKIN_6 MFP_CFG_LPM(GPIO2_2, AF1, FLOAT)
-+#define GPIO3_2_KP_MKIN_7 MFP_CFG_LPM(GPIO3_2, AF1, FLOAT)
-+
-+#define GPIO7_KP_MKOUT_5 MFP_CFG_LPM(GPIO7, AF1, DRIVE_HIGH)
-+#define GPIO11_KP_MKOUT_5 MFP_CFG_LPM(GPIO11, AF3, DRIVE_HIGH)
-+#define GPIO12_KP_MKOUT_6 MFP_CFG_LPM(GPIO12, AF3, DRIVE_HIGH)
-+#define GPIO13_KP_MKOUT_7 MFP_CFG_LPM(GPIO13, AF3, DRIVE_HIGH)
-+#define GPIO19_KP_MKOUT_4 MFP_CFG_LPM(GPIO19, AF3, DRIVE_HIGH)
-+#define GPIO20_KP_MKOUT_5 MFP_CFG_LPM(GPIO20, AF3, DRIVE_HIGH)
-+#define GPIO38_KP_MKOUT_5 MFP_CFG_LPM(GPIO38, AF5, DRIVE_HIGH)
-+#define GPIO53_KP_MKOUT_6 MFP_CFG_LPM(GPIO53, AF5, DRIVE_HIGH)
-+#define GPIO78_KP_MKOUT_7 MFP_CFG_LPM(GPIO78, AF5, DRIVE_HIGH)
-+#define GPIO85_KP_MKOUT_0 MFP_CFG_LPM(GPIO85, AF2, DRIVE_HIGH)
-+#define GPIO86_KP_MKOUT_1 MFP_CFG_LPM(GPIO86, AF2, DRIVE_HIGH)
-+#define GPIO87_KP_MKOUT_2 MFP_CFG_LPM(GPIO87, AF2, DRIVE_HIGH)
-+#define GPIO88_KP_MKOUT_3 MFP_CFG_LPM(GPIO88, AF2, DRIVE_HIGH)
-+#define GPIO104_KP_MKOUT_6 MFP_CFG_LPM(GPIO104, AF5, DRIVE_HIGH)
-+#define GPIO105_KP_MKOUT_7 MFP_CFG_LPM(GPIO105, AF5, DRIVE_HIGH)
-+#define GPIO121_KP_MKOUT_0 MFP_CFG_LPM(GPIO121, AF1, DRIVE_HIGH)
-+#define GPIO122_KP_MKOUT_1 MFP_CFG_LPM(GPIO122, AF1, DRIVE_HIGH)
-+#define GPIO123_KP_MKOUT_2 MFP_CFG_LPM(GPIO123, AF1, DRIVE_HIGH)
-+#define GPIO124_KP_MKOUT_3 MFP_CFG_LPM(GPIO124, AF1, DRIVE_HIGH)
-+#define GPIO125_KP_MKOUT_4 MFP_CFG_LPM(GPIO125, AF1, DRIVE_HIGH)
-+#define GPIO126_KP_MKOUT_7 MFP_CFG_LPM(GPIO126, AF4, DRIVE_HIGH)
-+#define GPIO5_2_KP_MKOUT_6 MFP_CFG_LPM(GPIO5_2, AF1, DRIVE_HIGH)
-+#define GPIO4_2_KP_MKOUT_5 MFP_CFG_LPM(GPIO4_2, AF1, DRIVE_HIGH)
-+#define GPIO6_2_KP_MKOUT_7 MFP_CFG_LPM(GPIO6_2, AF1, DRIVE_HIGH)
-+
-+/* LCD */
-+#define GPIO54_LCD_LDD_0 MFP_CFG_DRV(GPIO54, AF1, DS01X)
-+#define GPIO55_LCD_LDD_1 MFP_CFG_DRV(GPIO55, AF1, DS01X)
-+#define GPIO56_LCD_LDD_2 MFP_CFG_DRV(GPIO56, AF1, DS01X)
-+#define GPIO57_LCD_LDD_3 MFP_CFG_DRV(GPIO57, AF1, DS01X)
-+#define GPIO58_LCD_LDD_4 MFP_CFG_DRV(GPIO58, AF1, DS01X)
-+#define GPIO59_LCD_LDD_5 MFP_CFG_DRV(GPIO59, AF1, DS01X)
-+#define GPIO60_LCD_LDD_6 MFP_CFG_DRV(GPIO60, AF1, DS01X)
-+#define GPIO61_LCD_LDD_7 MFP_CFG_DRV(GPIO61, AF1, DS01X)
-+#define GPIO62_LCD_LDD_8 MFP_CFG_DRV(GPIO62, AF1, DS01X)
-+#define GPIO63_LCD_LDD_9 MFP_CFG_DRV(GPIO63, AF1, DS01X)
-+#define GPIO64_LCD_LDD_10 MFP_CFG_DRV(GPIO64, AF1, DS01X)
-+#define GPIO65_LCD_LDD_11 MFP_CFG_DRV(GPIO65, AF1, DS01X)
-+#define GPIO66_LCD_LDD_12 MFP_CFG_DRV(GPIO66, AF1, DS01X)
-+#define GPIO67_LCD_LDD_13 MFP_CFG_DRV(GPIO67, AF1, DS01X)
-+#define GPIO68_LCD_LDD_14 MFP_CFG_DRV(GPIO68, AF1, DS01X)
-+#define GPIO69_LCD_LDD_15 MFP_CFG_DRV(GPIO69, AF1, DS01X)
-+#define GPIO70_LCD_LDD_16 MFP_CFG_DRV(GPIO70, AF1, DS01X)
-+#define GPIO71_LCD_LDD_17 MFP_CFG_DRV(GPIO71, AF1, DS01X)
-+#define GPIO62_LCD_CS_N MFP_CFG_DRV(GPIO62, AF2, DS01X)
-+#define GPIO72_LCD_FCLK MFP_CFG_DRV(GPIO72, AF1, DS01X)
-+#define GPIO73_LCD_LCLK MFP_CFG_DRV(GPIO73, AF1, DS01X)
-+#define GPIO74_LCD_PCLK MFP_CFG_DRV(GPIO74, AF1, DS01X)
-+#define GPIO75_LCD_BIAS MFP_CFG_DRV(GPIO75, AF1, DS01X)
-+#define GPIO76_LCD_VSYNC MFP_CFG_DRV(GPIO76, AF2, DS01X)
-+
-+#define GPIO15_LCD_CS_N MFP_CFG_DRV(GPIO15, AF2, DS01X)
-+#define GPIO127_LCD_CS_N MFP_CFG_DRV(GPIO127, AF1, DS01X)
-+#define GPIO63_LCD_VSYNC MFP_CFG_DRV(GPIO63, AF2, DS01X)
-+
-+/* Mini-LCD */
-+#define GPIO72_MLCD_FCLK MFP_CFG_DRV(GPIO72, AF7, DS08X)
-+#define GPIO73_MLCD_LCLK MFP_CFG_DRV(GPIO73, AF7, DS08X)
-+#define GPIO54_MLCD_LDD_0 MFP_CFG_DRV(GPIO54, AF7, DS08X)
-+#define GPIO55_MLCD_LDD_1 MFP_CFG_DRV(GPIO55, AF7, DS08X)
-+#define GPIO56_MLCD_LDD_2 MFP_CFG_DRV(GPIO56, AF7, DS08X)
-+#define GPIO57_MLCD_LDD_3 MFP_CFG_DRV(GPIO57, AF7, DS08X)
-+#define GPIO58_MLCD_LDD_4 MFP_CFG_DRV(GPIO58, AF7, DS08X)
-+#define GPIO59_MLCD_LDD_5 MFP_CFG_DRV(GPIO59, AF7, DS08X)
-+#define GPIO60_MLCD_LDD_6 MFP_CFG_DRV(GPIO60, AF7, DS08X)
-+#define GPIO61_MLCD_LDD_7 MFP_CFG_DRV(GPIO61, AF7, DS08X)
-+#define GPIO62_MLCD_LDD_8 MFP_CFG_DRV(GPIO62, AF7, DS08X)
-+#define GPIO63_MLCD_LDD_9 MFP_CFG_DRV(GPIO63, AF7, DS08X)
-+#define GPIO64_MLCD_LDD_10 MFP_CFG_DRV(GPIO64, AF7, DS08X)
-+#define GPIO65_MLCD_LDD_11 MFP_CFG_DRV(GPIO65, AF7, DS08X)
-+#define GPIO66_MLCD_LDD_12 MFP_CFG_DRV(GPIO66, AF7, DS08X)
-+#define GPIO67_MLCD_LDD_13 MFP_CFG_DRV(GPIO67, AF7, DS08X)
-+#define GPIO68_MLCD_LDD_14 MFP_CFG_DRV(GPIO68, AF7, DS08X)
-+#define GPIO69_MLCD_LDD_15 MFP_CFG_DRV(GPIO69, AF7, DS08X)
-+#define GPIO74_MLCD_PCLK MFP_CFG_DRV(GPIO74, AF7, DS08X)
-+#define GPIO75_MLCD_BIAS MFP_CFG_DRV(GPIO75, AF2, DS08X)
-+
-+/* MMC1 */
-+#define GPIO7_MMC1_CLK MFP_CFG_LPM(GPIO7, AF4, DRIVE_HIGH)
-+#define GPIO8_MMC1_CMD MFP_CFG_LPM(GPIO8, AF4, DRIVE_HIGH)
-+#define GPIO14_MMC1_CMD MFP_CFG_LPM(GPIO14, AF5, DRIVE_HIGH)
-+#define GPIO15_MMC1_CMD MFP_CFG_LPM(GPIO15, AF5, DRIVE_HIGH)
-+#define GPIO3_MMC1_DAT0 MFP_CFG_LPM(GPIO3, AF4, DRIVE_HIGH)
-+#define GPIO4_MMC1_DAT1 MFP_CFG_LPM(GPIO4, AF4, DRIVE_HIGH)
-+#define GPIO5_MMC1_DAT2 MFP_CFG_LPM(GPIO5, AF4, DRIVE_HIGH)
-+#define GPIO6_MMC1_DAT3 MFP_CFG_LPM(GPIO6, AF4, DRIVE_HIGH)
-+
-+/* MMC2 */
-+#define GPIO9_MMC2_DAT0 MFP_CFG_LPM(GPIO9, AF4, PULL_HIGH)
-+#define GPIO10_MMC2_DAT1 MFP_CFG_LPM(GPIO10, AF4, PULL_HIGH)
-+#define GPIO11_MMC2_DAT2 MFP_CFG_LPM(GPIO11, AF4, PULL_HIGH)
-+#define GPIO12_MMC2_DAT3 MFP_CFG_LPM(GPIO12, AF4, PULL_HIGH)
-+#define GPIO13_MMC2_CLK MFP_CFG_LPM(GPIO13, AF4, PULL_HIGH)
-+#define GPIO14_MMC2_CMD MFP_CFG_LPM(GPIO14, AF4, PULL_HIGH)
-+#define GPIO77_MMC2_DAT0 MFP_CFG_LPM(GPIO77, AF4, PULL_HIGH)
-+#define GPIO78_MMC2_DAT1 MFP_CFG_LPM(GPIO78, AF4, PULL_HIGH)
-+#define GPIO79_MMC2_DAT2 MFP_CFG_LPM(GPIO79, AF4, PULL_HIGH)
-+#define GPIO80_MMC2_DAT3 MFP_CFG_LPM(GPIO80, AF4, PULL_HIGH)
-+#define GPIO81_MMC2_CLK MFP_CFG_LPM(GPIO81, AF4, PULL_HIGH)
-+#define GPIO82_MMC2_CMD MFP_CFG_LPM(GPIO82, AF4, PULL_HIGH)
-+
-+/* SSP1 */
-+#define GPIO89_SSP1_EXTCLK MFP_CFG(GPIO89, AF1)
-+#define GPIO90_SSP1_SYSCLK MFP_CFG(GPIO90, AF1)
-+#define GPIO15_SSP1_SCLK MFP_CFG(GPIO15, AF6)
-+#define GPIO16_SSP1_FRM MFP_CFG(GPIO16, AF2)
-+#define GPIO33_SSP1_SCLK MFP_CFG(GPIO33, AF5)
-+#define GPIO34_SSP1_FRM MFP_CFG(GPIO34, AF5)
-+#define GPIO85_SSP1_SCLK MFP_CFG(GPIO85, AF1)
-+#define GPIO86_SSP1_FRM MFP_CFG(GPIO86, AF1)
-+#define GPIO18_SSP1_TXD MFP_CFG(GPIO18, AF7)
-+#define GPIO18_SSP1_RXD MFP_CFG(GPIO18, AF2)
-+#define GPIO20_SSP1_TXD MFP_CFG(GPIO20, AF2)
-+#define GPIO20_SSP1_RXD MFP_CFG(GPIO20, AF7)
-+#define GPIO35_SSP1_TXD MFP_CFG(GPIO35, AF5)
-+#define GPIO35_SSP1_RXD MFP_CFG(GPIO35, AF4)
-+#define GPIO36_SSP1_TXD MFP_CFG(GPIO36, AF5)
-+#define GPIO36_SSP1_RXD MFP_CFG(GPIO36, AF6)
-+#define GPIO87_SSP1_TXD MFP_CFG(GPIO87, AF1)
-+#define GPIO87_SSP1_RXD MFP_CFG(GPIO87, AF6)
-+#define GPIO88_SSP1_TXD MFP_CFG(GPIO88, AF6)
-+#define GPIO88_SSP1_RXD MFP_CFG(GPIO88, AF1)
-+
-+/* SSP2 */
-+#define GPIO29_SSP2_EXTCLK MFP_CFG(GPIO29, AF2)
-+#define GPIO23_SSP2_SCLK MFP_CFG(GPIO23, AF2)
-+#define GPIO17_SSP2_FRM MFP_CFG(GPIO17, AF2)
-+#define GPIO25_SSP2_SCLK MFP_CFG(GPIO25, AF2)
-+#define GPIO26_SSP2_FRM MFP_CFG(GPIO26, AF2)
-+#define GPIO33_SSP2_SCLK MFP_CFG(GPIO33, AF6)
-+#define GPIO34_SSP2_FRM MFP_CFG(GPIO34, AF6)
-+#define GPIO64_SSP2_SCLK MFP_CFG(GPIO64, AF2)
-+#define GPIO65_SSP2_FRM MFP_CFG(GPIO65, AF2)
-+#define GPIO19_SSP2_TXD MFP_CFG(GPIO19, AF2)
-+#define GPIO19_SSP2_RXD MFP_CFG(GPIO19, AF7)
-+#define GPIO24_SSP2_TXD MFP_CFG(GPIO24, AF5)
-+#define GPIO24_SSP2_RXD MFP_CFG(GPIO24, AF4)
-+#define GPIO27_SSP2_TXD MFP_CFG(GPIO27, AF2)
-+#define GPIO27_SSP2_RXD MFP_CFG(GPIO27, AF5)
-+#define GPIO28_SSP2_TXD MFP_CFG(GPIO28, AF5)
-+#define GPIO28_SSP2_RXD MFP_CFG(GPIO28, AF2)
-+#define GPIO35_SSP2_TXD MFP_CFG(GPIO35, AF7)
-+#define GPIO35_SSP2_RXD MFP_CFG(GPIO35, AF6)
-+#define GPIO66_SSP2_TXD MFP_CFG(GPIO66, AF4)
-+#define GPIO66_SSP2_RXD MFP_CFG(GPIO66, AF2)
-+#define GPIO67_SSP2_TXD MFP_CFG(GPIO67, AF2)
-+#define GPIO67_SSP2_RXD MFP_CFG(GPIO67, AF4)
-+#define GPIO36_SSP2_TXD MFP_CFG(GPIO36, AF7)
-+
-+/* SSP3 */
-+#define GPIO69_SSP3_FRM MFP_CFG_X(GPIO69, AF2, DS08X, DRIVE_LOW)
-+#define GPIO68_SSP3_SCLK MFP_CFG_X(GPIO68, AF2, DS08X, FLOAT)
-+#define GPIO92_SSP3_FRM MFP_CFG_X(GPIO92, AF1, DS08X, DRIVE_LOW)
-+#define GPIO91_SSP3_SCLK MFP_CFG_X(GPIO91, AF1, DS08X, FLOAT)
-+#define GPIO70_SSP3_TXD MFP_CFG_X(GPIO70, AF2, DS08X, DRIVE_LOW)
-+#define GPIO70_SSP3_RXD MFP_CFG_X(GPIO70, AF5, DS08X, FLOAT)
-+#define GPIO71_SSP3_TXD MFP_CFG_X(GPIO71, AF5, DS08X, DRIVE_LOW)
-+#define GPIO71_SSP3_RXD MFP_CFG_X(GPIO71, AF2, DS08X, FLOAT)
-+#define GPIO93_SSP3_TXD MFP_CFG_X(GPIO93, AF1, DS08X, DRIVE_LOW)
-+#define GPIO93_SSP3_RXD MFP_CFG_X(GPIO93, AF5, DS08X, FLOAT)
-+#define GPIO94_SSP3_TXD MFP_CFG_X(GPIO94, AF5, DS08X, DRIVE_LOW)
-+#define GPIO94_SSP3_RXD MFP_CFG_X(GPIO94, AF1, DS08X, FLOAT)
-+
-+/* SSP4 */
-+#define GPIO95_SSP4_SCLK MFP_CFG_LPM(GPIO95, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_FRM MFP_CFG_LPM(GPIO96, AF1, PULL_HIGH)
-+#define GPIO97_SSP4_TXD MFP_CFG_LPM(GPIO97, AF1, PULL_HIGH)
-+#define GPIO97_SSP4_RXD MFP_CFG_LPM(GPIO97, AF5, PULL_HIGH)
-+#define GPIO98_SSP4_TXD MFP_CFG_LPM(GPIO98, AF5, PULL_HIGH)
-+#define GPIO98_SSP4_RXD MFP_CFG_LPM(GPIO98, AF1, PULL_HIGH)
-+
-+/* UART1 */
-+#define GPIO32_UART1_CTS MFP_CFG_LPM(GPIO32, AF2, FLOAT)
-+#define GPIO37_UART1_CTS MFP_CFG_LPM(GPIO37, AF4, FLOAT)
-+#define GPIO79_UART1_CTS MFP_CFG_LPM(GPIO79, AF1, FLOAT)
-+#define GPIO84_UART1_CTS MFP_CFG_LPM(GPIO84, AF3, FLOAT)
-+#define GPIO101_UART1_CTS MFP_CFG_LPM(GPIO101, AF1, FLOAT)
-+#define GPIO106_UART1_CTS MFP_CFG_LPM(GPIO106, AF6, FLOAT)
-+
-+#define GPIO32_UART1_RTS MFP_CFG_LPM(GPIO32, AF4, FLOAT)
-+#define GPIO37_UART1_RTS MFP_CFG_LPM(GPIO37, AF2, FLOAT)
-+#define GPIO79_UART1_RTS MFP_CFG_LPM(GPIO79, AF3, FLOAT)
-+#define GPIO84_UART1_RTS MFP_CFG_LPM(GPIO84, AF1, FLOAT)
-+#define GPIO101_UART1_RTS MFP_CFG_LPM(GPIO101, AF6, FLOAT)
-+#define GPIO106_UART1_RTS MFP_CFG_LPM(GPIO106, AF1, FLOAT)
-+
-+#define GPIO34_UART1_DSR MFP_CFG_LPM(GPIO34, AF2, FLOAT)
-+#define GPIO36_UART1_DSR MFP_CFG_LPM(GPIO36, AF4, FLOAT)
-+#define GPIO81_UART1_DSR MFP_CFG_LPM(GPIO81, AF1, FLOAT)
-+#define GPIO83_UART1_DSR MFP_CFG_LPM(GPIO83, AF3, FLOAT)
-+#define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF1, FLOAT)
-+#define GPIO105_UART1_DSR MFP_CFG_LPM(GPIO105, AF6, FLOAT)
-+
-+#define GPIO34_UART1_DTR MFP_CFG_LPM(GPIO34, AF4, FLOAT)
-+#define GPIO36_UART1_DTR MFP_CFG_LPM(GPIO36, AF2, FLOAT)
-+#define GPIO81_UART1_DTR MFP_CFG_LPM(GPIO81, AF3, FLOAT)
-+#define GPIO83_UART1_DTR MFP_CFG_LPM(GPIO83, AF1, FLOAT)
-+#define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF6, FLOAT)
-+#define GPIO105_UART1_DTR MFP_CFG_LPM(GPIO105, AF1, FLOAT)
-+
-+#define GPIO35_UART1_RI MFP_CFG_LPM(GPIO35, AF2, FLOAT)
-+#define GPIO82_UART1_RI MFP_CFG_LPM(GPIO82, AF1, FLOAT)
-+#define GPIO104_UART1_RI MFP_CFG_LPM(GPIO104, AF1, FLOAT)
-+
-+#define GPIO33_UART1_DCD MFP_CFG_LPM(GPIO33, AF2, FLOAT)
-+#define GPIO80_UART1_DCD MFP_CFG_LPM(GPIO80, AF1, FLOAT)
-+#define GPIO102_UART1_DCD MFP_CFG_LPM(GPIO102, AF1, FLOAT)
-+
-+#define GPIO30_UART1_RXD MFP_CFG_LPM(GPIO30, AF2, FLOAT)
-+#define GPIO31_UART1_RXD MFP_CFG_LPM(GPIO31, AF4, FLOAT)
-+#define GPIO77_UART1_RXD MFP_CFG_LPM(GPIO77, AF1, FLOAT)
-+#define GPIO78_UART1_RXD MFP_CFG_LPM(GPIO78, AF3, FLOAT)
-+#define GPIO99_UART1_RXD MFP_CFG_LPM(GPIO99, AF1, FLOAT)
-+#define GPIO100_UART1_RXD MFP_CFG_LPM(GPIO100, AF6, FLOAT)
-+#define GPIO102_UART1_RXD MFP_CFG_LPM(GPIO102, AF6, FLOAT)
-+#define GPIO104_UART1_RXD MFP_CFG_LPM(GPIO104, AF4, FLOAT)
-+
-+#define GPIO30_UART1_TXD MFP_CFG_LPM(GPIO30, AF4, FLOAT)
-+#define GPIO31_UART1_TXD MFP_CFG_LPM(GPIO31, AF2, FLOAT)
-+#define GPIO77_UART1_TXD MFP_CFG_LPM(GPIO77, AF3, FLOAT)
-+#define GPIO78_UART1_TXD MFP_CFG_LPM(GPIO78, AF1, FLOAT)
-+#define GPIO99_UART1_TXD MFP_CFG_LPM(GPIO99, AF6, FLOAT)
-+#define GPIO100_UART1_TXD MFP_CFG_LPM(GPIO100, AF1, FLOAT)
-+#define GPIO102_UART1_TXD MFP_CFG_LPM(GPIO102, AF4, FLOAT)
-+
-+/* UART2 */
-+#define GPIO15_UART2_CTS MFP_CFG_LPM(GPIO15, AF3, FLOAT)
-+#define GPIO16_UART2_CTS MFP_CFG_LPM(GPIO16, AF5, FLOAT)
-+#define GPIO111_UART2_CTS MFP_CFG_LPM(GPIO111, AF3, FLOAT)
-+#define GPIO114_UART2_CTS MFP_CFG_LPM(GPIO114, AF1, FLOAT)
-+
-+#define GPIO15_UART2_RTS MFP_CFG_LPM(GPIO15, AF4, FLOAT)
-+#define GPIO16_UART2_RTS MFP_CFG_LPM(GPIO16, AF4, FLOAT)
-+#define GPIO114_UART2_RTS MFP_CFG_LPM(GPIO114, AF3, FLOAT)
-+#define GPIO111_UART2_RTS MFP_CFG_LPM(GPIO111, AF1, FLOAT)
-+
-+#define GPIO18_UART2_RXD MFP_CFG_LPM(GPIO18, AF5, FLOAT)
-+#define GPIO19_UART2_RXD MFP_CFG_LPM(GPIO19, AF4, FLOAT)
-+#define GPIO112_UART2_RXD MFP_CFG_LPM(GPIO112, AF1, FLOAT)
-+#define GPIO113_UART2_RXD MFP_CFG_LPM(GPIO113, AF3, FLOAT)
-+
-+#define GPIO18_UART2_TXD MFP_CFG_LPM(GPIO18, AF4, FLOAT)
-+#define GPIO19_UART2_TXD MFP_CFG_LPM(GPIO19, AF5, FLOAT)
-+#define GPIO112_UART2_TXD MFP_CFG_LPM(GPIO112, AF3, FLOAT)
-+#define GPIO113_UART2_TXD MFP_CFG_LPM(GPIO113, AF1, FLOAT)
-+
-+/* UART3 */
-+#define GPIO91_UART3_CTS MFP_CFG_LPM(GPIO91, AF2, FLOAT)
-+#define GPIO92_UART3_CTS MFP_CFG_LPM(GPIO92, AF4, FLOAT)
-+#define GPIO107_UART3_CTS MFP_CFG_LPM(GPIO107, AF1, FLOAT)
-+#define GPIO108_UART3_CTS MFP_CFG_LPM(GPIO108, AF3, FLOAT)
-+
-+#define GPIO91_UART3_RTS MFP_CFG_LPM(GPIO91, AF4, FLOAT)
-+#define GPIO92_UART3_RTS MFP_CFG_LPM(GPIO92, AF2, FLOAT)
-+#define GPIO107_UART3_RTS MFP_CFG_LPM(GPIO107, AF3, FLOAT)
-+#define GPIO108_UART3_RTS MFP_CFG_LPM(GPIO108, AF1, FLOAT)
-+
-+#define GPIO7_UART3_RXD MFP_CFG_LPM(GPIO7, AF2, FLOAT)
-+#define GPIO8_UART3_RXD MFP_CFG_LPM(GPIO8, AF6, FLOAT)
-+#define GPIO93_UART3_RXD MFP_CFG_LPM(GPIO93, AF4, FLOAT)
-+#define GPIO94_UART3_RXD MFP_CFG_LPM(GPIO94, AF2, FLOAT)
-+#define GPIO109_UART3_RXD MFP_CFG_LPM(GPIO109, AF3, FLOAT)
-+#define GPIO110_UART3_RXD MFP_CFG_LPM(GPIO110, AF1, FLOAT)
-+
-+#define GPIO7_UART3_TXD MFP_CFG_LPM(GPIO7, AF6, FLOAT)
-+#define GPIO8_UART3_TXD MFP_CFG_LPM(GPIO8, AF2, FLOAT)
-+#define GPIO93_UART3_TXD MFP_CFG_LPM(GPIO93, AF2, FLOAT)
-+#define GPIO94_UART3_TXD MFP_CFG_LPM(GPIO94, AF4, FLOAT)
-+#define GPIO109_UART3_TXD MFP_CFG_LPM(GPIO109, AF1, FLOAT)
-+#define GPIO110_UART3_TXD MFP_CFG_LPM(GPIO110, AF3, FLOAT)
-+
-+/* USB Host */
-+#define GPIO0_2_USBH_PEN MFP_CFG(GPIO0_2, AF1)
-+#define GPIO1_2_USBH_PWR MFP_CFG(GPIO1_2, AF1)
-+
-+/* USB P3 */
-+#define GPIO77_USB_P3_1 MFP_CFG(GPIO77, AF2)
-+#define GPIO78_USB_P3_2 MFP_CFG(GPIO78, AF2)
-+#define GPIO79_USB_P3_3 MFP_CFG(GPIO79, AF2)
-+#define GPIO80_USB_P3_4 MFP_CFG(GPIO80, AF2)
-+#define GPIO81_USB_P3_5 MFP_CFG(GPIO81, AF2)
-+#define GPIO82_USB_P3_6 MFP_CFG(GPIO82, AF2)
-+
-+/* PWM */
-+#define GPIO17_PWM0_OUT MFP_CFG(GPIO17, AF1)
-+#define GPIO18_PWM1_OUT MFP_CFG(GPIO18, AF1)
-+#define GPIO19_PWM2_OUT MFP_CFG(GPIO19, AF1)
-+#define GPIO20_PWM3_OUT MFP_CFG(GPIO20, AF1)
-+
-+/* CIR */
-+#define GPIO8_CIR_OUT MFP_CFG(GPIO8, AF5)
-+#define GPIO16_CIR_OUT MFP_CFG(GPIO16, AF3)
-+
-+#define GPIO20_OW_DQ_IN MFP_CFG(GPIO20, AF5)
-+#define GPIO126_OW_DQ MFP_CFG(GPIO126, AF2)
-+
-+#define GPIO0_DF_RDY MFP_CFG(GPIO0, AF1)
-+#define GPIO7_CLK_BYPASS_XSC MFP_CFG(GPIO7, AF7)
-+#define GPIO17_EXT_SYNC_MVT_0 MFP_CFG(GPIO17, AF6)
-+#define GPIO18_EXT_SYNC_MVT_1 MFP_CFG(GPIO18, AF6)
-+#define GPIO19_OST_CHOUT_MVT_0 MFP_CFG(GPIO19, AF6)
-+#define GPIO20_OST_CHOUT_MVT_1 MFP_CFG(GPIO20, AF6)
-+#define GPIO49_48M_CLK MFP_CFG(GPIO49, AF2)
-+#define GPIO126_EXT_CLK MFP_CFG(GPIO126, AF3)
-+#define GPIO127_CLK_BYPASS_GB MFP_CFG(GPIO127, AF7)
-+#define GPIO71_EXT_MATCH_MVT MFP_CFG(GPIO71, AF6)
-+
-+#define GPIO3_uIO_IN MFP_CFG(GPIO3, AF1)
-+
-+#define GPIO4_uSIM_CARD_STATE MFP_CFG(GPIO4, AF1)
-+#define GPIO5_uSIM_uCLK MFP_CFG(GPIO5, AF1)
-+#define GPIO6_uSIM_uRST MFP_CFG(GPIO6, AF1)
-+#define GPIO16_uSIM_UVS_0 MFP_CFG(GPIO16, AF1)
-+
-+#define GPIO9_SCIO MFP_CFG(GPIO9, AF1)
-+#define GPIO20_RTC_MVT MFP_CFG(GPIO20, AF4)
-+#define GPIO126_RTC_MVT MFP_CFG(GPIO126, AF1)
-+
-+/*
-+ * PXA300 specific MFP configurations
-+ */
-+#ifdef CONFIG_CPU_PXA300
-+#define GPIO99_USB_P2_2 MFP_CFG(GPIO99, AF2)
-+#define GPIO99_USB_P2_5 MFP_CFG(GPIO99, AF3)
-+#define GPIO99_USB_P2_6 MFP_CFG(GPIO99, AF4)
-+#define GPIO100_USB_P2_2 MFP_CFG(GPIO100, AF4)
-+#define GPIO100_USB_P2_5 MFP_CFG(GPIO100, AF5)
-+#define GPIO101_USB_P2_1 MFP_CFG(GPIO101, AF2)
-+#define GPIO102_USB_P2_4 MFP_CFG(GPIO102, AF2)
-+#define GPIO104_USB_P2_3 MFP_CFG(GPIO104, AF2)
-+#define GPIO105_USB_P2_5 MFP_CFG(GPIO105, AF2)
-+#define GPIO100_USB_P2_6 MFP_CFG(GPIO100, AF2)
-+#define GPIO106_USB_P2_7 MFP_CFG(GPIO106, AF2)
-+#define GPIO103_USB_P2_8 MFP_CFG(GPIO103, AF2)
-+
-+/* U2D UTMI */
-+#define GPIO38_UTM_CLK MFP_CFG(GPIO38, AF1)
-+#define GPIO26_U2D_RXERROR MFP_CFG(GPIO26, AF3)
-+#define GPIO50_U2D_RXERROR MFP_CFG(GPIO50, AF1)
-+#define GPIO89_U2D_RXERROR MFP_CFG(GPIO89, AF5)
-+#define GPIO24_UTM_RXVALID MFP_CFG(GPIO24, AF3)
-+#define GPIO48_UTM_RXVALID MFP_CFG(GPIO48, AF2)
-+#define GPIO87_UTM_RXVALID MFP_CFG(GPIO87, AF5)
-+#define GPIO25_UTM_RXACTIVE MFP_CFG(GPIO25, AF3)
-+#define GPIO47_UTM_RXACTIVE MFP_CFG(GPIO47, AF2)
-+#define GPIO49_UTM_RXACTIVE MFP_CFG(GPIO49, AF1)
-+#define GPIO88_UTM_RXACTIVE MFP_CFG(GPIO88, AF5)
-+#define GPIO53_UTM_TXREADY MFP_CFG(GPIO53, AF1)
-+#define GPIO67_UTM_LINESTATE_0 MFP_CFG(GPIO67, AF3)
-+#define GPIO92_UTM_LINESTATE_0 MFP_CFG(GPIO92, AF3)
-+#define GPIO104_UTM_LINESTATE_0 MFP_CFG(GPIO104, AF3)
-+#define GPIO109_UTM_LINESTATE_0 MFP_CFG(GPIO109, AF4)
-+#define GPIO68_UTM_LINESTATE_1 MFP_CFG(GPIO68, AF3)
-+#define GPIO93_UTM_LINESTATE_1 MFP_CFG(GPIO93, AF3)
-+#define GPIO105_UTM_LINESTATE_1 MFP_CFG(GPIO105, AF3)
-+#define GPIO27_U2D_OPMODE_0 MFP_CFG(GPIO27, AF4)
-+#define GPIO51_U2D_OPMODE_0 MFP_CFG(GPIO51, AF2)
-+#define GPIO90_U2D_OPMODE_0 MFP_CFG(GPIO90, AF7)
-+#define GPIO28_U2D_OPMODE_1 MFP_CFG(GPIO28, AF4)
-+#define GPIO52_U2D_OPMODE_1 MFP_CFG(GPIO52, AF2)
-+#define GPIO106_U2D_OPMODE_1 MFP_CFG(GPIO106, AF3)
-+#define GPIO110_U2D_OPMODE_1 MFP_CFG(GPIO110, AF5)
-+#define GPIO76_U2D_RESET MFP_CFG(GPIO76, AF1)
-+#define GPIO95_U2D_RESET MFP_CFG(GPIO95, AF2)
-+#define GPIO100_U2D_RESET MFP_CFG(GPIO100, AF3)
-+#define GPIO66_U2D_SUSPEND MFP_CFG(GPIO66, AF3)
-+#define GPIO98_U2D_SUSPEND MFP_CFG(GPIO98, AF2)
-+#define GPIO103_U2D_SUSPEND MFP_CFG(GPIO103, AF3)
-+#define GPIO65_U2D_TERM_SEL MFP_CFG(GPIO65, AF5)
-+#define GPIO97_U2D_TERM_SEL MFP_CFG(GPIO97, AF3)
-+#define GPIO102_U2D_TERM_SEL MFP_CFG(GPIO102, AF5)
-+#define GPIO29_U2D_TXVALID MFP_CFG(GPIO29, AF3)
-+#define GPIO52_U2D_TXVALID MFP_CFG(GPIO52, AF4)
-+#define GPIO69_U2D_TXVALID MFP_CFG(GPIO69, AF3)
-+#define GPIO85_U2D_TXVALID MFP_CFG(GPIO85, AF7)
-+#define GPIO64_U2D_XCVR_SEL MFP_CFG(GPIO64, AF5)
-+#define GPIO96_U2D_XCVR_SEL MFP_CFG(GPIO96, AF3)
-+#define GPIO101_U2D_XCVR_SEL MFP_CFG(GPIO101, AF5)
-+#define GPIO30_UTM_PHYDATA_0 MFP_CFG(GPIO30, AF3)
-+#define GPIO31_UTM_PHYDATA_1 MFP_CFG(GPIO31, AF3)
-+#define GPIO32_UTM_PHYDATA_2 MFP_CFG(GPIO32, AF3)
-+#define GPIO33_UTM_PHYDATA_3 MFP_CFG(GPIO33, AF3)
-+#define GPIO34_UTM_PHYDATA_4 MFP_CFG(GPIO34, AF3)
-+#define GPIO35_UTM_PHYDATA_5 MFP_CFG(GPIO35, AF3)
-+#define GPIO36_UTM_PHYDATA_6 MFP_CFG(GPIO36, AF3)
-+#define GPIO37_UTM_PHYDATA_7 MFP_CFG(GPIO37, AF3)
-+#define GPIO39_UTM_PHYDATA_0 MFP_CFG(GPIO39, AF3)
-+#define GPIO40_UTM_PHYDATA_1 MFP_CFG(GPIO40, AF3)
-+#define GPIO41_UTM_PHYDATA_2 MFP_CFG(GPIO41, AF3)
-+#define GPIO42_UTM_PHYDATA_3 MFP_CFG(GPIO42, AF3)
-+#define GPIO43_UTM_PHYDATA_4 MFP_CFG(GPIO43, AF3)
-+#define GPIO44_UTM_PHYDATA_5 MFP_CFG(GPIO44, AF3)
-+#define GPIO45_UTM_PHYDATA_6 MFP_CFG(GPIO45, AF3)
-+#define GPIO46_UTM_PHYDATA_7 MFP_CFG(GPIO46, AF3)
-+#endif /* CONFIG_CPU_PXA300 */
-+
-+/*
-+ * PXA310 specific MFP configurations
-+ */
-+#ifdef CONFIG_CPU_PXA310
-+/* USB P2 */
-+#define GPIO36_USB_P2_1 MFP_CFG(GPIO36, AF1)
-+#define GPIO30_USB_P2_2 MFP_CFG(GPIO30, AF1)
-+#define GPIO35_USB_P2_3 MFP_CFG(GPIO35, AF1)
-+#define GPIO32_USB_P2_4 MFP_CFG(GPIO32, AF1)
-+#define GPIO34_USB_P2_5 MFP_CFG(GPIO34, AF1)
-+#define GPIO31_USB_P2_6 MFP_CFG(GPIO31, AF1)
-+
-+/* MMC1 */
-+#define GPIO24_MMC1_CMD MFP_CFG(GPIO24, AF3)
-+#define GPIO29_MMC1_DAT0 MFP_CFG(GPIO29, AF3)
-+
-+/* MMC3 */
-+#define GPIO103_MMC3_CLK MFP_CFG(GPIO103, AF2)
-+#define GPIO105_MMC3_CMD MFP_CFG(GPIO105, AF2)
-+#define GPIO11_2_MMC3_CLK MFP_CFG(GPIO11_2, AF1)
-+#define GPIO12_2_MMC3_CMD MFP_CFG(GPIO12_2, AF1)
-+#define GPIO7_2_MMC3_DAT0 MFP_CFG(GPIO7_2, AF1)
-+#define GPIO8_2_MMC3_DAT1 MFP_CFG(GPIO8_2, AF1)
-+#define GPIO9_2_MMC3_DAT2 MFP_CFG(GPIO9_2, AF1)
-+#define GPIO10_2_MMC3_DAT3 MFP_CFG(GPIO10_2, AF1)
-+
-+/* ULPI */
-+#define GPIO38_ULPI_CLK MFP_CFG(GPIO38, AF1)
-+#define GPIO30_ULPI_DATA_OUT_0 MFP_CFG(GPIO30, AF3)
-+#define GPIO31_ULPI_DATA_OUT_1 MFP_CFG(GPIO31, AF3)
-+#define GPIO32_ULPI_DATA_OUT_2 MFP_CFG(GPIO32, AF3)
-+#define GPIO33_ULPI_DATA_OUT_3 MFP_CFG(GPIO33, AF3)
-+#define GPIO34_ULPI_DATA_OUT_4 MFP_CFG(GPIO34, AF3)
-+#define GPIO35_ULPI_DATA_OUT_5 MFP_CFG(GPIO35, AF3)
-+#define GPIO36_ULPI_DATA_OUT_6 MFP_CFG(GPIO36, AF3)
-+#define GPIO37_ULPI_DATA_OUT_7 MFP_CFG(GPIO37, AF3)
-+#define GPIO33_ULPI_OTG_INTR MFP_CFG(GPIO33, AF1)
-+
-+#define ULPI_DIR MFP_CFG_DRV(ULPI_DIR, MFP_AF0, MFP_DS01X)
-+#define ULPI_NXT MFP_CFG_DRV(ULPI_NXT, MFP_AF0, MFP_DS01X)
-+#define ULPI_STP MFP_CFG_DRV(ULPI_STP, MFP_AF0, MFP_DS01X)
-+#endif /* CONFIG_CPU_PXA310 */
-+
-+#endif /* __ASM_ARCH_MFP_PXA300_H */
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp-pxa320.h
-@@ -0,0 +1,446 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp-pxa320.h
-+ *
-+ * PXA320 specific MFP configuration definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ * 2007-08-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_PXA320_H
-+#define __ASM_ARCH_MFP_PXA320_H
-+
-+#include <asm/arch/mfp.h>
-+
-+/* GPIO */
-+#define GPIO46_GPIO MFP_CFG(GPIO6, AF0)
-+#define GPIO49_GPIO MFP_CFG(GPIO49, AF0)
-+#define GPIO50_GPIO MFP_CFG(GPIO50, AF0)
-+#define GPIO51_GPIO MFP_CFG(GPIO51, AF0)
-+#define GPIO52_GPIO MFP_CFG(GPIO52, AF0)
-+
-+#define GPIO7_2_GPIO MFP_CFG(GPIO7_2, AF0)
-+#define GPIO8_2_GPIO MFP_CFG(GPIO8_2, AF0)
-+#define GPIO9_2_GPIO MFP_CFG(GPIO9_2, AF0)
-+#define GPIO10_2_GPIO MFP_CFG(GPIO10_2, AF0)
-+#define GPIO11_2_GPIO MFP_CFG(GPIO11_2, AF0)
-+#define GPIO12_2_GPIO MFP_CFG(GPIO12_2, AF0)
-+#define GPIO13_2_GPIO MFP_CFG(GPIO13_2, AF0)
-+#define GPIO14_2_GPIO MFP_CFG(GPIO14_2, AF0)
-+#define GPIO15_2_GPIO MFP_CFG(GPIO15_2, AF0)
-+#define GPIO16_2_GPIO MFP_CFG(GPIO16_2, AF0)
-+#define GPIO17_2_GPIO MFP_CFG(GPIO17_2, AF0)
-+
-+/* Chip Select */
-+#define GPIO4_nCS3 MFP_CFG(GPIO4, AF1)
-+
-+/* AC97 */
-+#define GPIO34_AC97_SYSCLK MFP_CFG(GPIO34, AF1)
-+#define GPIO39_AC97_BITCLK MFP_CFG(GPIO39, AF1)
-+#define GPIO40_AC97_nACRESET MFP_CFG(GPIO40, AF1)
-+#define GPIO35_AC97_SDATA_IN_0 MFP_CFG(GPIO35, AF1)
-+#define GPIO36_AC97_SDATA_IN_1 MFP_CFG(GPIO36, AF1)
-+#define GPIO32_AC97_SDATA_IN_2 MFP_CFG(GPIO32, AF2)
-+#define GPIO33_AC97_SDATA_IN_3 MFP_CFG(GPIO33, AF2)
-+#define GPIO11_AC97_SDATA_IN_2 MFP_CFG(GPIO11, AF3)
-+#define GPIO12_AC97_SDATA_IN_3 MFP_CFG(GPIO12, AF3)
-+#define GPIO37_AC97_SDATA_OUT MFP_CFG(GPIO37, AF1)
-+#define GPIO38_AC97_SYNC MFP_CFG(GPIO38, AF1)
-+
-+/* I2C */
-+#define GPIO32_I2C_SCL MFP_CFG_LPM(GPIO32, AF1, PULL_HIGH)
-+#define GPIO33_I2C_SDA MFP_CFG_LPM(GPIO33, AF1, PULL_HIGH)
-+
-+/* QCI */
-+#define GPIO49_CI_DD_0 MFP_CFG_DRV(GPIO49, AF1, DS04X)
-+#define GPIO50_CI_DD_1 MFP_CFG_DRV(GPIO50, AF1, DS04X)
-+#define GPIO51_CI_DD_2 MFP_CFG_DRV(GPIO51, AF1, DS04X)
-+#define GPIO52_CI_DD_3 MFP_CFG_DRV(GPIO52, AF1, DS04X)
-+#define GPIO53_CI_DD_4 MFP_CFG_DRV(GPIO53, AF1, DS04X)
-+#define GPIO54_CI_DD_5 MFP_CFG_DRV(GPIO54, AF1, DS04X)
-+#define GPIO55_CI_DD_6 MFP_CFG_DRV(GPIO55, AF1, DS04X)
-+#define GPIO56_CI_DD_7 MFP_CFG_DRV(GPIO56, AF0, DS04X)
-+#define GPIO57_CI_DD_8 MFP_CFG_DRV(GPIO57, AF1, DS04X)
-+#define GPIO58_CI_DD_9 MFP_CFG_DRV(GPIO58, AF1, DS04X)
-+#define GPIO59_CI_MCLK MFP_CFG_DRV(GPIO59, AF0, DS04X)
-+#define GPIO60_CI_PCLK MFP_CFG_DRV(GPIO60, AF0, DS04X)
-+#define GPIO61_CI_HSYNC MFP_CFG_DRV(GPIO61, AF0, DS04X)
-+#define GPIO62_CI_VSYNC MFP_CFG_DRV(GPIO62, AF0, DS04X)
-+
-+#define GPIO31_CIR_OUT MFP_CFG(GPIO31, AF5)
-+
-+#define GPIO0_2_CLK_EXT MFP_CFG(GPIO0_2, AF3)
-+#define GPIO0_DRQ MFP_CFG(GPIO0, AF2)
-+#define GPIO11_EXT_SYNC0 MFP_CFG(GPIO11, AF5)
-+#define GPIO12_EXT_SYNC1 MFP_CFG(GPIO12, AF6)
-+#define GPIO0_2_HZ_CLK MFP_CFG(GPIO0_2, AF1)
-+#define GPIO14_HZ_CLK MFP_CFG(GPIO14, AF4)
-+#define GPIO30_ICP_RXD MFP_CFG(GPIO30, AF1)
-+#define GPIO31_ICP_TXD MFP_CFG(GPIO31, AF1)
-+
-+#define GPIO83_KP_DKIN_0 MFP_CFG_LPM(GPIO83, AF3, FLOAT)
-+#define GPIO84_KP_DKIN_1 MFP_CFG_LPM(GPIO84, AF3, FLOAT)
-+#define GPIO85_KP_DKIN_2 MFP_CFG_LPM(GPIO85, AF3, FLOAT)
-+#define GPIO86_KP_DKIN_3 MFP_CFG_LPM(GPIO86, AF3, FLOAT)
-+
-+#define GPIO105_KP_DKIN_0 MFP_CFG_LPM(GPIO105, AF2, FLOAT)
-+#define GPIO106_KP_DKIN_1 MFP_CFG_LPM(GPIO106, AF2, FLOAT)
-+#define GPIO107_KP_DKIN_2 MFP_CFG_LPM(GPIO107, AF2, FLOAT)
-+#define GPIO108_KP_DKIN_3 MFP_CFG_LPM(GPIO108, AF2, FLOAT)
-+#define GPIO109_KP_DKIN_4 MFP_CFG_LPM(GPIO109, AF2, FLOAT)
-+#define GPIO110_KP_DKIN_5 MFP_CFG_LPM(GPIO110, AF2, FLOAT)
-+#define GPIO111_KP_DKIN_6 MFP_CFG_LPM(GPIO111, AF2, FLOAT)
-+#define GPIO112_KP_DKIN_7 MFP_CFG_LPM(GPIO112, AF2, FLOAT)
-+
-+#define GPIO113_KP_DKIN_0 MFP_CFG_LPM(GPIO113, AF2, FLOAT)
-+#define GPIO114_KP_DKIN_1 MFP_CFG_LPM(GPIO114, AF2, FLOAT)
-+#define GPIO115_KP_DKIN_2 MFP_CFG_LPM(GPIO115, AF2, FLOAT)
-+#define GPIO116_KP_DKIN_3 MFP_CFG_LPM(GPIO116, AF2, FLOAT)
-+#define GPIO117_KP_DKIN_4 MFP_CFG_LPM(GPIO117, AF2, FLOAT)
-+#define GPIO118_KP_DKIN_5 MFP_CFG_LPM(GPIO118, AF2, FLOAT)
-+#define GPIO119_KP_DKIN_6 MFP_CFG_LPM(GPIO119, AF2, FLOAT)
-+#define GPIO120_KP_DKIN_7 MFP_CFG_LPM(GPIO120, AF2, FLOAT)
-+
-+#define GPIO127_KP_DKIN_0 MFP_CFG_LPM(GPIO127, AF2, FLOAT)
-+#define GPIO126_KP_DKIN_1 MFP_CFG_LPM(GPIO126, AF2, FLOAT)
-+
-+#define GPIO2_2_KP_DKIN_0 MFP_CFG_LPM(GPIO2_2, AF2, FLOAT)
-+#define GPIO3_2_KP_DKIN_1 MFP_CFG_LPM(GPIO3_2, AF2, FLOAT)
-+#define GPIO125_KP_DKIN_2 MFP_CFG_LPM(GPIO125, AF2, FLOAT)
-+#define GPIO124_KP_DKIN_3 MFP_CFG_LPM(GPIO124, AF2, FLOAT)
-+#define GPIO123_KP_DKIN_4 MFP_CFG_LPM(GPIO123, AF2, FLOAT)
-+#define GPIO122_KP_DKIN_5 MFP_CFG_LPM(GPIO122, AF2, FLOAT)
-+#define GPIO121_KP_DKIN_6 MFP_CFG_LPM(GPIO121, AF2, FLOAT)
-+#define GPIO4_2_KP_DKIN_7 MFP_CFG_LPM(GPIO4_2, AF2, FLOAT)
-+
-+#define GPIO113_KP_MKIN_0 MFP_CFG_LPM(GPIO113, AF1, FLOAT)
-+#define GPIO114_KP_MKIN_1 MFP_CFG_LPM(GPIO114, AF1, FLOAT)
-+#define GPIO115_KP_MKIN_2 MFP_CFG_LPM(GPIO115, AF1, FLOAT)
-+#define GPIO116_KP_MKIN_3 MFP_CFG_LPM(GPIO116, AF1, FLOAT)
-+#define GPIO117_KP_MKIN_4 MFP_CFG_LPM(GPIO117, AF1, FLOAT)
-+#define GPIO118_KP_MKIN_5 MFP_CFG_LPM(GPIO118, AF1, FLOAT)
-+#define GPIO119_KP_MKIN_6 MFP_CFG_LPM(GPIO119, AF1, FLOAT)
-+#define GPIO120_KP_MKIN_7 MFP_CFG_LPM(GPIO120, AF1, FLOAT)
-+
-+#define GPIO83_KP_MKOUT_0 MFP_CFG_LPM(GPIO83, AF2, DRIVE_HIGH)
-+#define GPIO84_KP_MKOUT_1 MFP_CFG_LPM(GPIO84, AF2, DRIVE_HIGH)
-+#define GPIO85_KP_MKOUT_2 MFP_CFG_LPM(GPIO85, AF2, DRIVE_HIGH)
-+#define GPIO86_KP_MKOUT_3 MFP_CFG_LPM(GPIO86, AF2, DRIVE_HIGH)
-+#define GPIO13_KP_MKOUT_4 MFP_CFG_LPM(GPIO13, AF3, DRIVE_HIGH)
-+#define GPIO14_KP_MKOUT_5 MFP_CFG_LPM(GPIO14, AF3, DRIVE_HIGH)
-+
-+#define GPIO121_KP_MKOUT_0 MFP_CFG_LPM(GPIO121, AF1, DRIVE_HIGH)
-+#define GPIO122_KP_MKOUT_1 MFP_CFG_LPM(GPIO122, AF1, DRIVE_HIGH)
-+#define GPIO123_KP_MKOUT_2 MFP_CFG_LPM(GPIO123, AF1, DRIVE_HIGH)
-+#define GPIO124_KP_MKOUT_3 MFP_CFG_LPM(GPIO124, AF1, DRIVE_HIGH)
-+#define GPIO125_KP_MKOUT_4 MFP_CFG_LPM(GPIO125, AF1, DRIVE_HIGH)
-+#define GPIO126_KP_MKOUT_5 MFP_CFG_LPM(GPIO126, AF1, DRIVE_HIGH)
-+#define GPIO127_KP_MKOUT_6 MFP_CFG_LPM(GPIO127, AF1, DRIVE_HIGH)
-+#define GPIO5_2_KP_MKOUT_7 MFP_CFG_LPM(GPIO5_2, AF1, DRIVE_HIGH)
-+
-+/* LCD */
-+#define GPIO6_2_LCD_LDD_0 MFP_CFG_DRV(GPIO6_2, AF1, DS01X)
-+#define GPIO7_2_LCD_LDD_1 MFP_CFG_DRV(GPIO7_2, AF1, DS01X)
-+#define GPIO8_2_LCD_LDD_2 MFP_CFG_DRV(GPIO8_2, AF1, DS01X)
-+#define GPIO9_2_LCD_LDD_3 MFP_CFG_DRV(GPIO9_2, AF1, DS01X)
-+#define GPIO10_2_LCD_LDD_4 MFP_CFG_DRV(GPIO10_2, AF1, DS01X)
-+#define GPIO11_2_LCD_LDD_5 MFP_CFG_DRV(GPIO11_2, AF1, DS01X)
-+#define GPIO12_2_LCD_LDD_6 MFP_CFG_DRV(GPIO12_2, AF1, DS01X)
-+#define GPIO13_2_LCD_LDD_7 MFP_CFG_DRV(GPIO13_2, AF1, DS01X)
-+#define GPIO63_LCD_LDD_8 MFP_CFG_DRV(GPIO63, AF1, DS01X)
-+#define GPIO64_LCD_LDD_9 MFP_CFG_DRV(GPIO64, AF1, DS01X)
-+#define GPIO65_LCD_LDD_10 MFP_CFG_DRV(GPIO65, AF1, DS01X)
-+#define GPIO66_LCD_LDD_11 MFP_CFG_DRV(GPIO66, AF1, DS01X)
-+#define GPIO67_LCD_LDD_12 MFP_CFG_DRV(GPIO67, AF1, DS01X)
-+#define GPIO68_LCD_LDD_13 MFP_CFG_DRV(GPIO68, AF1, DS01X)
-+#define GPIO69_LCD_LDD_14 MFP_CFG_DRV(GPIO69, AF1, DS01X)
-+#define GPIO70_LCD_LDD_15 MFP_CFG_DRV(GPIO70, AF1, DS01X)
-+#define GPIO71_LCD_LDD_16 MFP_CFG_DRV(GPIO71, AF1, DS01X)
-+#define GPIO72_LCD_LDD_17 MFP_CFG_DRV(GPIO72, AF1, DS01X)
-+#define GPIO73_LCD_CS_N MFP_CFG_DRV(GPIO73, AF2, DS01X)
-+#define GPIO74_LCD_VSYNC MFP_CFG_DRV(GPIO74, AF2, DS01X)
-+#define GPIO14_2_LCD_FCLK MFP_CFG_DRV(GPIO14_2, AF1, DS01X)
-+#define GPIO15_2_LCD_LCLK MFP_CFG_DRV(GPIO15_2, AF1, DS01X)
-+#define GPIO16_2_LCD_PCLK MFP_CFG_DRV(GPIO16_2, AF1, DS01X)
-+#define GPIO17_2_LCD_BIAS MFP_CFG_DRV(GPIO17_2, AF1, DS01X)
-+#define GPIO64_LCD_VSYNC MFP_CFG_DRV(GPIO64, AF2, DS01X)
-+#define GPIO63_LCD_CS_N MFP_CFG_DRV(GPIO63, AF2, DS01X)
-+
-+#define GPIO6_2_MLCD_DD_0 MFP_CFG_DRV(GPIO6_2, AF7, DS08X)
-+#define GPIO7_2_MLCD_DD_1 MFP_CFG_DRV(GPIO7_2, AF7, DS08X)
-+#define GPIO8_2_MLCD_DD_2 MFP_CFG_DRV(GPIO8_2, AF7, DS08X)
-+#define GPIO9_2_MLCD_DD_3 MFP_CFG_DRV(GPIO9_2, AF7, DS08X)
-+#define GPIO10_2_MLCD_DD_4 MFP_CFG_DRV(GPIO10_2, AF7, DS08X)
-+#define GPIO11_2_MLCD_DD_5 MFP_CFG_DRV(GPIO11_2, AF7, DS08X)
-+#define GPIO12_2_MLCD_DD_6 MFP_CFG_DRV(GPIO12_2, AF7, DS08X)
-+#define GPIO13_2_MLCD_DD_7 MFP_CFG_DRV(GPIO13_2, AF7, DS08X)
-+#define GPIO63_MLCD_DD_8 MFP_CFG_DRV(GPIO63, AF7, DS08X)
-+#define GPIO64_MLCD_DD_9 MFP_CFG_DRV(GPIO64, AF7, DS08X)
-+#define GPIO65_MLCD_DD_10 MFP_CFG_DRV(GPIO65, AF7, DS08X)
-+#define GPIO66_MLCD_DD_11 MFP_CFG_DRV(GPIO66, AF7, DS08X)
-+#define GPIO67_MLCD_DD_12 MFP_CFG_DRV(GPIO67, AF7, DS08X)
-+#define GPIO68_MLCD_DD_13 MFP_CFG_DRV(GPIO68, AF7, DS08X)
-+#define GPIO69_MLCD_DD_14 MFP_CFG_DRV(GPIO69, AF7, DS08X)
-+#define GPIO70_MLCD_DD_15 MFP_CFG_DRV(GPIO70, AF7, DS08X)
-+#define GPIO71_MLCD_DD_16 MFP_CFG_DRV(GPIO71, AF7, DS08X)
-+#define GPIO72_MLCD_DD_17 MFP_CFG_DRV(GPIO72, AF7, DS08X)
-+#define GPIO73_MLCD_CS MFP_CFG_DRV(GPIO73, AF7, DS08X)
-+#define GPIO74_MLCD_VSYNC MFP_CFG_DRV(GPIO74, AF7, DS08X)
-+#define GPIO14_2_MLCD_FCLK MFP_CFG_DRV(GPIO14_2, AF7, DS08X)
-+#define GPIO15_2_MLCD_LCLK MFP_CFG_DRV(GPIO15_2, AF7, DS08X)
-+#define GPIO16_2_MLCD_PCLK MFP_CFG_DRV(GPIO16_2, AF7, DS08X)
-+#define GPIO17_2_MLCD_BIAS MFP_CFG_DRV(GPIO17_2, AF7, DS08X)
-+
-+/* MMC1 */
-+#define GPIO9_MMC1_CMD MFP_CFG_LPM(GPIO9, AF4, DRIVE_HIGH)
-+#define GPIO22_MMC1_CLK MFP_CFG_LPM(GPIO22, AF4, DRIVE_HIGH)
-+#define GPIO23_MMC1_CMD MFP_CFG_LPM(GPIO23, AF4, DRIVE_HIGH)
-+#define GPIO30_MMC1_CLK MFP_CFG_LPM(GPIO30, AF4, DRIVE_HIGH)
-+#define GPIO31_MMC1_CMD MFP_CFG_LPM(GPIO31, AF4, DRIVE_HIGH)
-+#define GPIO5_MMC1_DAT0 MFP_CFG_LPM(GPIO5, AF4, DRIVE_HIGH)
-+#define GPIO6_MMC1_DAT1 MFP_CFG_LPM(GPIO6, AF4, DRIVE_HIGH)
-+#define GPIO7_MMC1_DAT2 MFP_CFG_LPM(GPIO7, AF4, DRIVE_HIGH)
-+#define GPIO8_MMC1_DAT3 MFP_CFG_LPM(GPIO8, AF4, DRIVE_HIGH)
-+#define GPIO18_MMC1_DAT0 MFP_CFG_LPM(GPIO18, AF4, DRIVE_HIGH)
-+#define GPIO19_MMC1_DAT1 MFP_CFG_LPM(GPIO19, AF4, DRIVE_HIGH)
-+#define GPIO20_MMC1_DAT2 MFP_CFG_LPM(GPIO20, AF4, DRIVE_HIGH)
-+#define GPIO21_MMC1_DAT3 MFP_CFG_LPM(GPIO21, AF4, DRIVE_HIGH)
-+
-+#define GPIO28_MMC2_CLK MFP_CFG_LPM(GPIO28, AF4, PULL_HIGH)
-+#define GPIO29_MMC2_CMD MFP_CFG_LPM(GPIO29, AF4, PULL_HIGH)
-+#define GPIO30_MMC2_CLK MFP_CFG_LPM(GPIO30, AF3, PULL_HIGH)
-+#define GPIO31_MMC2_CMD MFP_CFG_LPM(GPIO31, AF3, PULL_HIGH)
-+#define GPIO79_MMC2_CLK MFP_CFG_LPM(GPIO79, AF4, PULL_HIGH)
-+#define GPIO80_MMC2_CMD MFP_CFG_LPM(GPIO80, AF4, PULL_HIGH)
-+
-+#define GPIO5_MMC2_DAT0 MFP_CFG_LPM(GPIO5, AF2, PULL_HIGH)
-+#define GPIO6_MMC2_DAT1 MFP_CFG_LPM(GPIO6, AF2, PULL_HIGH)
-+#define GPIO7_MMC2_DAT2 MFP_CFG_LPM(GPIO7, AF2, PULL_HIGH)
-+#define GPIO8_MMC2_DAT3 MFP_CFG_LPM(GPIO8, AF2, PULL_HIGH)
-+#define GPIO24_MMC2_DAT0 MFP_CFG_LPM(GPIO24, AF4, PULL_HIGH)
-+#define GPIO75_MMC2_DAT0 MFP_CFG_LPM(GPIO75, AF4, PULL_HIGH)
-+#define GPIO25_MMC2_DAT1 MFP_CFG_LPM(GPIO25, AF4, PULL_HIGH)
-+#define GPIO76_MMC2_DAT1 MFP_CFG_LPM(GPIO76, AF4, PULL_HIGH)
-+#define GPIO26_MMC2_DAT2 MFP_CFG_LPM(GPIO26, AF4, PULL_HIGH)
-+#define GPIO77_MMC2_DAT2 MFP_CFG_LPM(GPIO77, AF4, PULL_HIGH)
-+#define GPIO27_MMC2_DAT3 MFP_CFG_LPM(GPIO27, AF4, PULL_HIGH)
-+#define GPIO78_MMC2_DAT3 MFP_CFG_LPM(GPIO78, AF4, PULL_HIGH)
-+
-+/* 1-Wire */
-+#define GPIO14_ONE_WIRE MFP_CFG_LPM(GPIO14, AF5, FLOAT)
-+#define GPIO0_2_ONE_WIRE MFP_CFG_LPM(GPIO0_2, AF2, FLOAT)
-+
-+/* SSP1 */
-+#define GPIO87_SSP1_EXTCLK MFP_CFG(GPIO87, AF1)
-+#define GPIO88_SSP1_SYSCLK MFP_CFG(GPIO88, AF1)
-+#define GPIO83_SSP1_SCLK MFP_CFG(GPIO83, AF1)
-+#define GPIO84_SSP1_SFRM MFP_CFG(GPIO84, AF1)
-+#define GPIO85_SSP1_RXD MFP_CFG(GPIO85, AF6)
-+#define GPIO85_SSP1_TXD MFP_CFG(GPIO85, AF1)
-+#define GPIO86_SSP1_RXD MFP_CFG(GPIO86, AF1)
-+#define GPIO86_SSP1_TXD MFP_CFG(GPIO86, AF6)
-+
-+/* SSP2 */
-+#define GPIO39_SSP2_EXTCLK MFP_CFG(GPIO39, AF2)
-+#define GPIO40_SSP2_SYSCLK MFP_CFG(GPIO40, AF2)
-+#define GPIO12_SSP2_SCLK MFP_CFG(GPIO12, AF2)
-+#define GPIO35_SSP2_SCLK MFP_CFG(GPIO35, AF2)
-+#define GPIO36_SSP2_SFRM MFP_CFG(GPIO36, AF2)
-+#define GPIO37_SSP2_RXD MFP_CFG(GPIO37, AF5)
-+#define GPIO37_SSP2_TXD MFP_CFG(GPIO37, AF2)
-+#define GPIO38_SSP2_RXD MFP_CFG(GPIO38, AF2)
-+#define GPIO38_SSP2_TXD MFP_CFG(GPIO38, AF5)
-+
-+#define GPIO69_SSP3_SCLK MFP_CFG(GPIO69, AF2, DS08X, FLOAT)
-+#define GPIO70_SSP3_FRM MFP_CFG(GPIO70, AF2, DS08X, DRIVE_LOW)
-+#define GPIO89_SSP3_SCLK MFP_CFG(GPIO89, AF1, DS08X, FLOAT)
-+#define GPIO90_SSP3_FRM MFP_CFG(GPIO90, AF1, DS08X, DRIVE_LOW)
-+#define GPIO71_SSP3_RXD MFP_CFG_X(GPIO71, AF5, DS08X, FLOAT)
-+#define GPIO71_SSP3_TXD MFP_CFG_X(GPIO71, AF2, DS08X, DRIVE_LOW)
-+#define GPIO72_SSP3_RXD MFP_CFG_X(GPIO72, AF2, DS08X, FLOAT)
-+#define GPIO72_SSP3_TXD MFP_CFG_X(GPIO72, AF5, DS08X, DRIVE_LOW)
-+#define GPIO91_SSP3_RXD MFP_CFG_X(GPIO91, AF5, DS08X, FLOAT)
-+#define GPIO91_SSP3_TXD MFP_CFG_X(GPIO91, AF1, DS08X, DRIVE_LOW)
-+#define GPIO92_SSP3_RXD MFP_CFG_X(GPIO92, AF1, DS08X, FLOAT)
-+#define GPIO92_SSP3_TXD MFP_CFG_X(GPIO92, AF5, DS08X, DRIVE_LOW)
-+
-+#define GPIO93_SSP4_SCLK MFP_CFG_LPM(GPIO93, AF1, PULL_HIGH)
-+#define GPIO94_SSP4_FRM MFP_CFG_LPM(GPIO94, AF1, PULL_HIGH)
-+#define GPIO94_SSP4_RXD MFP_CFG_LPM(GPIO94, AF5, PULL_HIGH)
-+#define GPIO95_SSP4_RXD MFP_CFG_LPM(GPIO95, AF5, PULL_HIGH)
-+#define GPIO95_SSP4_TXD MFP_CFG_LPM(GPIO95, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_RXD MFP_CFG_LPM(GPIO96, AF1, PULL_HIGH)
-+#define GPIO96_SSP4_TXD MFP_CFG_LPM(GPIO96, AF5, PULL_HIGH)
-+
-+/* UART1 */
-+#define GPIO41_UART1_RXD MFP_CFG_LPM(GPIO41, AF2, FLOAT)
-+#define GPIO41_UART1_TXD MFP_CFG_LPM(GPIO41, AF4, FLOAT)
-+#define GPIO42_UART1_RXD MFP_CFG_LPM(GPIO42, AF4, FLOAT)
-+#define GPIO42_UART1_TXD MFP_CFG_LPM(GPIO42, AF2, FLOAT)
-+#define GPIO97_UART1_RXD MFP_CFG_LPM(GPIO97, AF1, FLOAT)
-+#define GPIO97_UART1_TXD MFP_CFG_LPM(GPIO97, AF6, FLOAT)
-+#define GPIO98_UART1_RXD MFP_CFG_LPM(GPIO98, AF6, FLOAT)
-+#define GPIO98_UART1_TXD MFP_CFG_LPM(GPIO98, AF1, FLOAT)
-+#define GPIO43_UART1_CTS MFP_CFG_LPM(GPIO43, AF2, FLOAT)
-+#define GPIO43_UART1_RTS MFP_CFG_LPM(GPIO43, AF4, FLOAT)
-+#define GPIO48_UART1_CTS MFP_CFG_LPM(GPIO48, AF4, FLOAT)
-+#define GPIO48_UART1_RTS MFP_CFG_LPM(GPIO48, AF2, FLOAT)
-+#define GPIO99_UART1_CTS MFP_CFG_LPM(GPIO99, AF1, FLOAT)
-+#define GPIO99_UART1_RTS MFP_CFG_LPM(GPIO99, AF6, FLOAT)
-+#define GPIO104_UART1_CTS MFP_CFG_LPM(GPIO104, AF6, FLOAT)
-+#define GPIO104_UART1_RTS MFP_CFG_LPM(GPIO104, AF1, FLOAT)
-+#define GPIO45_UART1_DTR MFP_CFG_LPM(GPIO45, AF4, FLOAT)
-+#define GPIO45_UART1_DSR MFP_CFG_LPM(GPIO45, AF2, FLOAT)
-+#define GPIO47_UART1_DTR MFP_CFG_LPM(GPIO47, AF2, FLOAT)
-+#define GPIO47_UART1_DSR MFP_CFG_LPM(GPIO47, AF4, FLOAT)
-+#define GPIO101_UART1_DTR MFP_CFG_LPM(GPIO101, AF6, FLOAT)
-+#define GPIO101_UART1_DSR MFP_CFG_LPM(GPIO101, AF1, FLOAT)
-+#define GPIO103_UART1_DTR MFP_CFG_LPM(GPIO103, AF1, FLOAT)
-+#define GPIO103_UART1_DSR MFP_CFG_LPM(GPIO103, AF6, FLOAT)
-+#define GPIO44_UART1_DCD MFP_CFG_LPM(GPIO44, AF2, FLOAT)
-+#define GPIO100_UART1_DCD MFP_CFG_LPM(GPIO100, AF1, FLOAT)
-+#define GPIO46_UART1_RI MFP_CFG_LPM(GPIO46, AF2, FLOAT)
-+#define GPIO102_UART1_RI MFP_CFG_LPM(GPIO102, AF1, FLOAT)
-+
-+/* UART2 */
-+#define GPIO109_UART2_CTS MFP_CFG_LPM(GPIO109, AF3, FLOAT)
-+#define GPIO109_UART2_RTS MFP_CFG_LPM(GPIO109, AF1, FLOAT)
-+#define GPIO112_UART2_CTS MFP_CFG_LPM(GPIO112, AF1, FLOAT)
-+#define GPIO112_UART2_RTS MFP_CFG_LPM(GPIO112, AF3, FLOAT)
-+#define GPIO110_UART2_RXD MFP_CFG_LPM(GPIO110, AF1, FLOAT)
-+#define GPIO110_UART2_TXD MFP_CFG_LPM(GPIO110, AF3, FLOAT)
-+#define GPIO111_UART2_RXD MFP_CFG_LPM(GPIO111, AF3, FLOAT)
-+#define GPIO111_UART2_TXD MFP_CFG_LPM(GPIO111, AF1, FLOAT)
-+
-+/* UART3 */
-+#define GPIO89_UART3_CTS MFP_CFG_LPM(GPIO89, AF2, FLOAT)
-+#define GPIO89_UART3_RTS MFP_CFG_LPM(GPIO89, AF4, FLOAT)
-+#define GPIO90_UART3_CTS MFP_CFG_LPM(GPIO90, AF4, FLOAT)
-+#define GPIO90_UART3_RTS MFP_CFG_LPM(GPIO90, AF2, FLOAT)
-+#define GPIO105_UART3_CTS MFP_CFG_LPM(GPIO105, AF1, FLOAT)
-+#define GPIO105_UART3_RTS MFP_CFG_LPM(GPIO105, AF3, FLOAT)
-+#define GPIO106_UART3_CTS MFP_CFG_LPM(GPIO106, AF3, FLOAT)
-+#define GPIO106_UART3_RTS MFP_CFG_LPM(GPIO106, AF1, FLOAT)
-+#define GPIO30_UART3_RXD MFP_CFG_LPM(GPIO30, AF2, FLOAT)
-+#define GPIO30_UART3_TXD MFP_CFG_LPM(GPIO30, AF6, FLOAT)
-+#define GPIO31_UART3_RXD MFP_CFG_LPM(GPIO31, AF6, FLOAT)
-+#define GPIO31_UART3_TXD MFP_CFG_LPM(GPIO31, AF2, FLOAT)
-+#define GPIO91_UART3_RXD MFP_CFG_LPM(GPIO91, AF4, FLOAT)
-+#define GPIO91_UART3_TXD MFP_CFG_LPM(GPIO91, AF2, FLOAT)
-+#define GPIO92_UART3_RXD MFP_CFG_LPM(GPIO92, AF2, FLOAT)
-+#define GPIO92_UART3_TXD MFP_CFG_LPM(GPIO92, AF4, FLOAT)
-+#define GPIO107_UART3_RXD MFP_CFG_LPM(GPIO107, AF3, FLOAT)
-+#define GPIO107_UART3_TXD MFP_CFG_LPM(GPIO107, AF1, FLOAT)
-+#define GPIO108_UART3_RXD MFP_CFG_LPM(GPIO108, AF1, FLOAT)
-+#define GPIO108_UART3_TXD MFP_CFG_LPM(GPIO108, AF3, FLOAT)
-+
-+
-+/* USB 2.0 UTMI */
-+#define GPIO10_UTM_CLK MFP_CFG(GPIO10, AF1)
-+#define GPIO36_U2D_RXERROR MFP_CFG(GPIO36, AF3)
-+#define GPIO60_U2D_RXERROR MFP_CFG(GPIO60, AF1)
-+#define GPIO87_U2D_RXERROR MFP_CFG(GPIO87, AF5)
-+#define GPIO34_UTM_RXVALID MFP_CFG(GPIO34, AF3)
-+#define GPIO58_UTM_RXVALID MFP_CFG(GPIO58, AF2)
-+#define GPIO85_UTM_RXVALID MFP_CFG(GPIO85, AF5)
-+#define GPIO35_UTM_RXACTIVE MFP_CFG(GPIO35, AF3)
-+#define GPIO59_UTM_RXACTIVE MFP_CFG(GPIO59, AF1)
-+#define GPIO86_UTM_RXACTIVE MFP_CFG(GPIO86, AF5)
-+#define GPIO73_UTM_TXREADY MFP_CFG(GPIO73, AF1)
-+#define GPIO68_UTM_LINESTATE_0 MFP_CFG(GPIO68, AF3)
-+#define GPIO90_UTM_LINESTATE_0 MFP_CFG(GPIO90, AF3)
-+#define GPIO102_UTM_LINESTATE_0 MFP_CFG(GPIO102, AF3)
-+#define GPIO107_UTM_LINESTATE_0 MFP_CFG(GPIO107, AF4)
-+#define GPIO69_UTM_LINESTATE_1 MFP_CFG(GPIO69, AF3)
-+#define GPIO91_UTM_LINESTATE_1 MFP_CFG(GPIO91, AF3)
-+#define GPIO103_UTM_LINESTATE_1 MFP_CFG(GPIO103, AF3)
-+
-+#define GPIO41_U2D_PHYDATA_0 MFP_CFG(GPIO41, AF3)
-+#define GPIO42_U2D_PHYDATA_1 MFP_CFG(GPIO42, AF3)
-+#define GPIO43_U2D_PHYDATA_2 MFP_CFG(GPIO43, AF3)
-+#define GPIO44_U2D_PHYDATA_3 MFP_CFG(GPIO44, AF3)
-+#define GPIO45_U2D_PHYDATA_4 MFP_CFG(GPIO45, AF3)
-+#define GPIO46_U2D_PHYDATA_5 MFP_CFG(GPIO46, AF3)
-+#define GPIO47_U2D_PHYDATA_6 MFP_CFG(GPIO47, AF3)
-+#define GPIO48_U2D_PHYDATA_7 MFP_CFG(GPIO48, AF3)
-+
-+#define GPIO49_U2D_PHYDATA_0 MFP_CFG(GPIO49, AF3)
-+#define GPIO50_U2D_PHYDATA_1 MFP_CFG(GPIO50, AF3)
-+#define GPIO51_U2D_PHYDATA_2 MFP_CFG(GPIO51, AF3)
-+#define GPIO52_U2D_PHYDATA_3 MFP_CFG(GPIO52, AF3)
-+#define GPIO53_U2D_PHYDATA_4 MFP_CFG(GPIO53, AF3)
-+#define GPIO54_U2D_PHYDATA_5 MFP_CFG(GPIO54, AF3)
-+#define GPIO55_U2D_PHYDATA_6 MFP_CFG(GPIO55, AF3)
-+#define GPIO56_U2D_PHYDATA_7 MFP_CFG(GPIO56, AF3)
-+
-+#define GPIO37_U2D_OPMODE0 MFP_CFG(GPIO37, AF4)
-+#define GPIO61_U2D_OPMODE0 MFP_CFG(GPIO61, AF2)
-+#define GPIO88_U2D_OPMODE0 MFP_CFG(GPIO88, AF7)
-+
-+#define GPIO38_U2D_OPMODE1 MFP_CFG(GPIO38, AF4)
-+#define GPIO62_U2D_OPMODE1 MFP_CFG(GPIO62, AF2)
-+#define GPIO104_U2D_OPMODE1 MFP_CFG(GPIO104, AF4)
-+#define GPIO108_U2D_OPMODE1 MFP_CFG(GPIO108, AF5)
-+
-+#define GPIO74_U2D_RESET MFP_CFG(GPIO74, AF1)
-+#define GPIO93_U2D_RESET MFP_CFG(GPIO93, AF2)
-+#define GPIO98_U2D_RESET MFP_CFG(GPIO98, AF3)
-+
-+#define GPIO67_U2D_SUSPEND MFP_CFG(GPIO67, AF3)
-+#define GPIO96_U2D_SUSPEND MFP_CFG(GPIO96, AF2)
-+#define GPIO101_U2D_SUSPEND MFP_CFG(GPIO101, AF3)
-+
-+#define GPIO66_U2D_TERM_SEL MFP_CFG(GPIO66, AF5)
-+#define GPIO95_U2D_TERM_SEL MFP_CFG(GPIO95, AF3)
-+#define GPIO97_U2D_TERM_SEL MFP_CFG(GPIO97, AF7)
-+#define GPIO100_U2D_TERM_SEL MFP_CFG(GPIO100, AF5)
-+
-+#define GPIO39_U2D_TXVALID MFP_CFG(GPIO39, AF4)
-+#define GPIO70_U2D_TXVALID MFP_CFG(GPIO70, AF5)
-+#define GPIO83_U2D_TXVALID MFP_CFG(GPIO83, AF7)
-+
-+#define GPIO65_U2D_XCVR_SEL MFP_CFG(GPIO65, AF5)
-+#define GPIO94_U2D_XCVR_SEL MFP_CFG(GPIO94, AF3)
-+#define GPIO99_U2D_XCVR_SEL MFP_CFG(GPIO99, AF5)
-+
-+/* USB Host 1.1 */
-+#define GPIO2_2_USBH_PEN MFP_CFG(GPIO2_2, AF1)
-+#define GPIO3_2_USBH_PWR MFP_CFG(GPIO3_2, AF1)
-+
-+/* USB P2 */
-+#define GPIO97_USB_P2_2 MFP_CFG(GPIO97, AF2)
-+#define GPIO97_USB_P2_6 MFP_CFG(GPIO97, AF4)
-+#define GPIO98_USB_P2_2 MFP_CFG(GPIO98, AF4)
-+#define GPIO98_USB_P2_6 MFP_CFG(GPIO98, AF2)
-+#define GPIO99_USB_P2_1 MFP_CFG(GPIO99, AF2)
-+#define GPIO100_USB_P2_4 MFP_CFG(GPIO100, AF2)
-+#define GPIO101_USB_P2_8 MFP_CFG(GPIO101, AF2)
-+#define GPIO102_USB_P2_3 MFP_CFG(GPIO102, AF2)
-+#define GPIO103_USB_P2_5 MFP_CFG(GPIO103, AF2)
-+#define GPIO104_USB_P2_7 MFP_CFG(GPIO104, AF2)
-+
-+/* USB P3 */
-+#define GPIO75_USB_P3_1 MFP_CFG(GPIO75, AF2)
-+#define GPIO76_USB_P3_2 MFP_CFG(GPIO76, AF2)
-+#define GPIO77_USB_P3_3 MFP_CFG(GPIO77, AF2)
-+#define GPIO78_USB_P3_4 MFP_CFG(GPIO78, AF2)
-+#define GPIO79_USB_P3_5 MFP_CFG(GPIO79, AF2)
-+#define GPIO80_USB_P3_6 MFP_CFG(GPIO80, AF2)
-+
-+#define GPIO13_CHOUT0 MFP_CFG(GPIO13, AF6)
-+#define GPIO14_CHOUT1 MFP_CFG(GPIO14, AF6)
-+
-+#define GPIO2_RDY MFP_CFG(GPIO2, AF1)
-+#define GPIO5_NPIOR MFP_CFG(GPIO5, AF3)
-+
-+#define GPIO11_PWM0_OUT MFP_CFG(GPIO11, AF1)
-+#define GPIO12_PWM1_OUT MFP_CFG(GPIO12, AF1)
-+#define GPIO13_PWM2_OUT MFP_CFG(GPIO13, AF1)
-+#define GPIO14_PWM3_OUT MFP_CFG(GPIO14, AF1)
-+
-+#endif /* __ASM_ARCH_MFP_PXA320_H */
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/mfp.h
-@@ -0,0 +1,576 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/mfp.h
-+ *
-+ * Multi-Function Pin Definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ *
-+ * 2007-8-21: eric miao <eric.y.miao@gmail.com>
-+ * initial version
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_MFP_H
-+#define __ASM_ARCH_MFP_H
-+
-+#define MFPR_BASE (0x40e10000)
-+#define MFPR_SIZE (PAGE_SIZE)
-+
-+#define mfp_to_gpio(m) ((m) % 128)
-+
-+/* list of all the configurable MFP pins */
-+enum {
-+ MFP_PIN_INVALID = -1,
-+
-+ MFP_PIN_GPIO0 = 0,
-+ MFP_PIN_GPIO1,
-+ MFP_PIN_GPIO2,
-+ MFP_PIN_GPIO3,
-+ MFP_PIN_GPIO4,
-+ MFP_PIN_GPIO5,
-+ MFP_PIN_GPIO6,
-+ MFP_PIN_GPIO7,
-+ MFP_PIN_GPIO8,
-+ MFP_PIN_GPIO9,
-+ MFP_PIN_GPIO10,
-+ MFP_PIN_GPIO11,
-+ MFP_PIN_GPIO12,
-+ MFP_PIN_GPIO13,
-+ MFP_PIN_GPIO14,
-+ MFP_PIN_GPIO15,
-+ MFP_PIN_GPIO16,
-+ MFP_PIN_GPIO17,
-+ MFP_PIN_GPIO18,
-+ MFP_PIN_GPIO19,
-+ MFP_PIN_GPIO20,
-+ MFP_PIN_GPIO21,
-+ MFP_PIN_GPIO22,
-+ MFP_PIN_GPIO23,
-+ MFP_PIN_GPIO24,
-+ MFP_PIN_GPIO25,
-+ MFP_PIN_GPIO26,
-+ MFP_PIN_GPIO27,
-+ MFP_PIN_GPIO28,
-+ MFP_PIN_GPIO29,
-+ MFP_PIN_GPIO30,
-+ MFP_PIN_GPIO31,
-+ MFP_PIN_GPIO32,
-+ MFP_PIN_GPIO33,
-+ MFP_PIN_GPIO34,
-+ MFP_PIN_GPIO35,
-+ MFP_PIN_GPIO36,
-+ MFP_PIN_GPIO37,
-+ MFP_PIN_GPIO38,
-+ MFP_PIN_GPIO39,
-+ MFP_PIN_GPIO40,
-+ MFP_PIN_GPIO41,
-+ MFP_PIN_GPIO42,
-+ MFP_PIN_GPIO43,
-+ MFP_PIN_GPIO44,
-+ MFP_PIN_GPIO45,
-+ MFP_PIN_GPIO46,
-+ MFP_PIN_GPIO47,
-+ MFP_PIN_GPIO48,
-+ MFP_PIN_GPIO49,
-+ MFP_PIN_GPIO50,
-+ MFP_PIN_GPIO51,
-+ MFP_PIN_GPIO52,
-+ MFP_PIN_GPIO53,
-+ MFP_PIN_GPIO54,
-+ MFP_PIN_GPIO55,
-+ MFP_PIN_GPIO56,
-+ MFP_PIN_GPIO57,
-+ MFP_PIN_GPIO58,
-+ MFP_PIN_GPIO59,
-+ MFP_PIN_GPIO60,
-+ MFP_PIN_GPIO61,
-+ MFP_PIN_GPIO62,
-+ MFP_PIN_GPIO63,
-+ MFP_PIN_GPIO64,
-+ MFP_PIN_GPIO65,
-+ MFP_PIN_GPIO66,
-+ MFP_PIN_GPIO67,
-+ MFP_PIN_GPIO68,
-+ MFP_PIN_GPIO69,
-+ MFP_PIN_GPIO70,
-+ MFP_PIN_GPIO71,
-+ MFP_PIN_GPIO72,
-+ MFP_PIN_GPIO73,
-+ MFP_PIN_GPIO74,
-+ MFP_PIN_GPIO75,
-+ MFP_PIN_GPIO76,
-+ MFP_PIN_GPIO77,
-+ MFP_PIN_GPIO78,
-+ MFP_PIN_GPIO79,
-+ MFP_PIN_GPIO80,
-+ MFP_PIN_GPIO81,
-+ MFP_PIN_GPIO82,
-+ MFP_PIN_GPIO83,
-+ MFP_PIN_GPIO84,
-+ MFP_PIN_GPIO85,
-+ MFP_PIN_GPIO86,
-+ MFP_PIN_GPIO87,
-+ MFP_PIN_GPIO88,
-+ MFP_PIN_GPIO89,
-+ MFP_PIN_GPIO90,
-+ MFP_PIN_GPIO91,
-+ MFP_PIN_GPIO92,
-+ MFP_PIN_GPIO93,
-+ MFP_PIN_GPIO94,
-+ MFP_PIN_GPIO95,
-+ MFP_PIN_GPIO96,
-+ MFP_PIN_GPIO97,
-+ MFP_PIN_GPIO98,
-+ MFP_PIN_GPIO99,
-+ MFP_PIN_GPIO100,
-+ MFP_PIN_GPIO101,
-+ MFP_PIN_GPIO102,
-+ MFP_PIN_GPIO103,
-+ MFP_PIN_GPIO104,
-+ MFP_PIN_GPIO105,
-+ MFP_PIN_GPIO106,
-+ MFP_PIN_GPIO107,
-+ MFP_PIN_GPIO108,
-+ MFP_PIN_GPIO109,
-+ MFP_PIN_GPIO110,
-+ MFP_PIN_GPIO111,
-+ MFP_PIN_GPIO112,
-+ MFP_PIN_GPIO113,
-+ MFP_PIN_GPIO114,
-+ MFP_PIN_GPIO115,
-+ MFP_PIN_GPIO116,
-+ MFP_PIN_GPIO117,
-+ MFP_PIN_GPIO118,
-+ MFP_PIN_GPIO119,
-+ MFP_PIN_GPIO120,
-+ MFP_PIN_GPIO121,
-+ MFP_PIN_GPIO122,
-+ MFP_PIN_GPIO123,
-+ MFP_PIN_GPIO124,
-+ MFP_PIN_GPIO125,
-+ MFP_PIN_GPIO126,
-+ MFP_PIN_GPIO127,
-+ MFP_PIN_GPIO0_2,
-+ MFP_PIN_GPIO1_2,
-+ MFP_PIN_GPIO2_2,
-+ MFP_PIN_GPIO3_2,
-+ MFP_PIN_GPIO4_2,
-+ MFP_PIN_GPIO5_2,
-+ MFP_PIN_GPIO6_2,
-+ MFP_PIN_GPIO7_2,
-+ MFP_PIN_GPIO8_2,
-+ MFP_PIN_GPIO9_2,
-+ MFP_PIN_GPIO10_2,
-+ MFP_PIN_GPIO11_2,
-+ MFP_PIN_GPIO12_2,
-+ MFP_PIN_GPIO13_2,
-+ MFP_PIN_GPIO14_2,
-+ MFP_PIN_GPIO15_2,
-+ MFP_PIN_GPIO16_2,
-+ MFP_PIN_GPIO17_2,
-+
-+ MFP_PIN_ULPI_STP,
-+ MFP_PIN_ULPI_NXT,
-+ MFP_PIN_ULPI_DIR,
-+
-+ MFP_PIN_nXCVREN,
-+ MFP_PIN_DF_CLE_nOE,
-+ MFP_PIN_DF_nADV1_ALE,
-+ MFP_PIN_DF_SCLK_E,
-+ MFP_PIN_DF_SCLK_S,
-+ MFP_PIN_nBE0,
-+ MFP_PIN_nBE1,
-+ MFP_PIN_DF_nADV2_ALE,
-+ MFP_PIN_DF_INT_RnB,
-+ MFP_PIN_DF_nCS0,
-+ MFP_PIN_DF_nCS1,
-+ MFP_PIN_nLUA,
-+ MFP_PIN_nLLA,
-+ MFP_PIN_DF_nWE,
-+ MFP_PIN_DF_ALE_nWE,
-+ MFP_PIN_DF_nRE_nOE,
-+ MFP_PIN_DF_ADDR0,
-+ MFP_PIN_DF_ADDR1,
-+ MFP_PIN_DF_ADDR2,
-+ MFP_PIN_DF_ADDR3,
-+ MFP_PIN_DF_IO0,
-+ MFP_PIN_DF_IO1,
-+ MFP_PIN_DF_IO2,
-+ MFP_PIN_DF_IO3,
-+ MFP_PIN_DF_IO4,
-+ MFP_PIN_DF_IO5,
-+ MFP_PIN_DF_IO6,
-+ MFP_PIN_DF_IO7,
-+ MFP_PIN_DF_IO8,
-+ MFP_PIN_DF_IO9,
-+ MFP_PIN_DF_IO10,
-+ MFP_PIN_DF_IO11,
-+ MFP_PIN_DF_IO12,
-+ MFP_PIN_DF_IO13,
-+ MFP_PIN_DF_IO14,
-+ MFP_PIN_DF_IO15,
-+
-+ MFP_PIN_MAX,
-+};
-+
-+/*
-+ * Table that determines the low power modes outputs, with actual settings
-+ * used in parentheses for don't-care values. Except for the float output,
-+ * the configured driven and pulled levels match, so if there is a need for
-+ * non-LPM pulled output, the same configuration could probably be used.
-+ *
-+ * Output value sleep_oe_n sleep_data pullup_en pulldown_en pull_sel
-+ * (bit 7) (bit 8) (bit 14d) (bit 13d)
-+ *
-+ * Drive 0 0 0 0 X (1) 0
-+ * Drive 1 0 1 X (1) 0 0
-+ * Pull hi (1) 1 X(1) 1 0 0
-+ * Pull lo (0) 1 X(0) 0 1 0
-+ * Z (float) 1 X(0) 0 0 0
-+ */
-+#define MFP_LPM_DRIVE_LOW 0x8
-+#define MFP_LPM_DRIVE_HIGH 0x6
-+#define MFP_LPM_PULL_HIGH 0x7
-+#define MFP_LPM_PULL_LOW 0x9
-+#define MFP_LPM_FLOAT 0x1
-+#define MFP_LPM_PULL_NEITHER 0x0
-+
-+/*
-+ * The pullup and pulldown state of the MFP pin is by default determined by
-+ * selected alternate function. In case some buggy devices need to override
-+ * this default behavior, pxa3xx_mfp_set_pull() can be invoked with one of
-+ * the following definition as the parameter.
-+ *
-+ * Definition pull_sel pullup_en pulldown_en
-+ * MFP_PULL_HIGH 1 1 0
-+ * MFP_PULL_LOW 1 0 1
-+ * MFP_PULL_BOTH 1 1 1
-+ * MFP_PULL_NONE 1 0 0
-+ * MFP_PULL_DEFAULT 0 X X
-+ *
-+ * NOTE: pxa3xx_mfp_set_pull() will modify the PULLUP_EN and PULLDOWN_EN
-+ * bits, which will cause potential conflicts with the low power mode
-+ * setting, device drivers should take care of this
-+ */
-+#define MFP_PULL_BOTH (0x7u)
-+#define MFP_PULL_HIGH (0x6u)
-+#define MFP_PULL_LOW (0x5u)
-+#define MFP_PULL_NONE (0x4u)
-+#define MFP_PULL_DEFAULT (0x0u)
-+
-+#define MFP_AF0 (0)
-+#define MFP_AF1 (1)
-+#define MFP_AF2 (2)
-+#define MFP_AF3 (3)
-+#define MFP_AF4 (4)
-+#define MFP_AF5 (5)
-+#define MFP_AF6 (6)
-+#define MFP_AF7 (7)
-+
-+#define MFP_DS01X (0)
-+#define MFP_DS02X (1)
-+#define MFP_DS03X (2)
-+#define MFP_DS04X (3)
-+#define MFP_DS06X (4)
-+#define MFP_DS08X (5)
-+#define MFP_DS10X (6)
-+#define MFP_DS12X (7)
-+
-+#define MFP_EDGE_BOTH 0x3
-+#define MFP_EDGE_RISE 0x2
-+#define MFP_EDGE_FALL 0x1
-+#define MFP_EDGE_NONE 0x0
-+
-+#define MFPR_AF_MASK 0x0007
-+#define MFPR_DRV_MASK 0x1c00
-+#define MFPR_RDH_MASK 0x0200
-+#define MFPR_LPM_MASK 0xe180
-+#define MFPR_PULL_MASK 0xe000
-+#define MFPR_EDGE_MASK 0x0070
-+
-+#define MFPR_ALT_OFFSET 0
-+#define MFPR_ERE_OFFSET 4
-+#define MFPR_EFE_OFFSET 5
-+#define MFPR_EC_OFFSET 6
-+#define MFPR_SON_OFFSET 7
-+#define MFPR_SD_OFFSET 8
-+#define MFPR_SS_OFFSET 9
-+#define MFPR_DRV_OFFSET 10
-+#define MFPR_PD_OFFSET 13
-+#define MFPR_PU_OFFSET 14
-+#define MFPR_PS_OFFSET 15
-+
-+#define MFPR(af, drv, rdh, lpm, edge) \
-+ (((af) & 0x7) | (((drv) & 0x7) << 10) |\
-+ (((rdh) & 0x1) << 9) |\
-+ (((lpm) & 0x3) << 7) |\
-+ (((lpm) & 0x4) << 12)|\
-+ (((lpm) & 0x8) << 10)|\
-+ ((!(edge)) << 6) |\
-+ (((edge) & 0x1) << 5) |\
-+ (((edge) & 0x2) << 3))
-+
-+/*
-+ * a possible MFP configuration is represented by a 32-bit integer
-+ * bit 0..15 - MFPR value (16-bit)
-+ * bit 16..31 - mfp pin index (used to obtain the MFPR offset)
-+ *
-+ * to facilitate the definition, the following macros are provided
-+ *
-+ * MFPR_DEFAULT - default MFPR value, with
-+ * alternate function = 0,
-+ * drive strength = fast 1mA (MFP_DS01X)
-+ * low power mode = default
-+ * release dalay hold = false (RDH bit)
-+ * edge detection = none
-+ *
-+ * MFP_CFG - default MFPR value with alternate function
-+ * MFP_CFG_DRV - default MFPR value with alternate function and
-+ * pin drive strength
-+ * MFP_CFG_LPM - default MFPR value with alternate function and
-+ * low power mode
-+ * MFP_CFG_X - default MFPR value with alternate function,
-+ * pin drive strength and low power mode
-+ *
-+ * use
-+ *
-+ * MFP_CFG_PIN - to get the MFP pin index
-+ * MFP_CFG_VAL - to get the corresponding MFPR value
-+ */
-+
-+typedef uint32_t mfp_cfg_t;
-+
-+#define MFP_CFG_PIN(mfp_cfg) (((mfp_cfg) >> 16) & 0xffff)
-+#define MFP_CFG_VAL(mfp_cfg) ((mfp_cfg) & 0xffff)
-+
-+#define MFPR_DEFAULT (0x0000)
-+
-+#define MFP_CFG(pin, af) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af))
-+
-+#define MFP_CFG_DRV(pin, af, drv) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
-+ ((MFP_##drv) << 10) | (MFP_##af))
-+
-+#define MFP_CFG_LPM(pin, af, lpm) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT | (MFP_##af) |\
-+ (((MFP_LPM_##lpm) & 0x3) << 7) |\
-+ (((MFP_LPM_##lpm) & 0x4) << 12) |\
-+ (((MFP_LPM_##lpm) & 0x8) << 10))
-+
-+#define MFP_CFG_X(pin, af, drv, lpm) \
-+ ((MFP_PIN_##pin << 16) | MFPR_DEFAULT |\
-+ ((MFP_##drv) << 10) | (MFP_##af) |\
-+ (((MFP_LPM_##lpm) & 0x3) << 7) |\
-+ (((MFP_LPM_##lpm) & 0x4) << 12) |\
-+ (((MFP_LPM_##lpm) & 0x8) << 10))
-+
-+/* common MFP configurations - processor specific ones defined
-+ * in mfp-pxa3xx.h
-+ */
-+#define GPIO0_GPIO MFP_CFG(GPIO0, AF0)
-+#define GPIO1_GPIO MFP_CFG(GPIO1, AF0)
-+#define GPIO2_GPIO MFP_CFG(GPIO2, AF0)
-+#define GPIO3_GPIO MFP_CFG(GPIO3, AF0)
-+#define GPIO4_GPIO MFP_CFG(GPIO4, AF0)
-+#define GPIO5_GPIO MFP_CFG(GPIO5, AF0)
-+#define GPIO6_GPIO MFP_CFG(GPIO6, AF0)
-+#define GPIO7_GPIO MFP_CFG(GPIO7, AF0)
-+#define GPIO8_GPIO MFP_CFG(GPIO8, AF0)
-+#define GPIO9_GPIO MFP_CFG(GPIO9, AF0)
-+#define GPIO10_GPIO MFP_CFG(GPIO10, AF0)
-+#define GPIO11_GPIO MFP_CFG(GPIO11, AF0)
-+#define GPIO12_GPIO MFP_CFG(GPIO12, AF0)
-+#define GPIO13_GPIO MFP_CFG(GPIO13, AF0)
-+#define GPIO14_GPIO MFP_CFG(GPIO14, AF0)
-+#define GPIO15_GPIO MFP_CFG(GPIO15, AF0)
-+#define GPIO16_GPIO MFP_CFG(GPIO16, AF0)
-+#define GPIO17_GPIO MFP_CFG(GPIO17, AF0)
-+#define GPIO18_GPIO MFP_CFG(GPIO18, AF0)
-+#define GPIO19_GPIO MFP_CFG(GPIO19, AF0)
-+#define GPIO20_GPIO MFP_CFG(GPIO20, AF0)
-+#define GPIO21_GPIO MFP_CFG(GPIO21, AF0)
-+#define GPIO22_GPIO MFP_CFG(GPIO22, AF0)
-+#define GPIO23_GPIO MFP_CFG(GPIO23, AF0)
-+#define GPIO24_GPIO MFP_CFG(GPIO24, AF0)
-+#define GPIO25_GPIO MFP_CFG(GPIO25, AF0)
-+#define GPIO26_GPIO MFP_CFG(GPIO26, AF0)
-+#define GPIO27_GPIO MFP_CFG(GPIO27, AF0)
-+#define GPIO28_GPIO MFP_CFG(GPIO28, AF0)
-+#define GPIO29_GPIO MFP_CFG(GPIO29, AF0)
-+#define GPIO30_GPIO MFP_CFG(GPIO30, AF0)
-+#define GPIO31_GPIO MFP_CFG(GPIO31, AF0)
-+#define GPIO32_GPIO MFP_CFG(GPIO32, AF0)
-+#define GPIO33_GPIO MFP_CFG(GPIO33, AF0)
-+#define GPIO34_GPIO MFP_CFG(GPIO34, AF0)
-+#define GPIO35_GPIO MFP_CFG(GPIO35, AF0)
-+#define GPIO36_GPIO MFP_CFG(GPIO36, AF0)
-+#define GPIO37_GPIO MFP_CFG(GPIO37, AF0)
-+#define GPIO38_GPIO MFP_CFG(GPIO38, AF0)
-+#define GPIO39_GPIO MFP_CFG(GPIO39, AF0)
-+#define GPIO40_GPIO MFP_CFG(GPIO40, AF0)
-+#define GPIO41_GPIO MFP_CFG(GPIO41, AF0)
-+#define GPIO42_GPIO MFP_CFG(GPIO42, AF0)
-+#define GPIO43_GPIO MFP_CFG(GPIO43, AF0)
-+#define GPIO44_GPIO MFP_CFG(GPIO44, AF0)
-+#define GPIO45_GPIO MFP_CFG(GPIO45, AF0)
-+
-+#define GPIO47_GPIO MFP_CFG(GPIO47, AF0)
-+#define GPIO48_GPIO MFP_CFG(GPIO48, AF0)
-+
-+#define GPIO53_GPIO MFP_CFG(GPIO53, AF0)
-+#define GPIO54_GPIO MFP_CFG(GPIO54, AF0)
-+#define GPIO55_GPIO MFP_CFG(GPIO55, AF0)
-+
-+#define GPIO57_GPIO MFP_CFG(GPIO57, AF0)
-+
-+#define GPIO63_GPIO MFP_CFG(GPIO63, AF0)
-+#define GPIO64_GPIO MFP_CFG(GPIO64, AF0)
-+#define GPIO65_GPIO MFP_CFG(GPIO65, AF0)
-+#define GPIO66_GPIO MFP_CFG(GPIO66, AF0)
-+#define GPIO67_GPIO MFP_CFG(GPIO67, AF0)
-+#define GPIO68_GPIO MFP_CFG(GPIO68, AF0)
-+#define GPIO69_GPIO MFP_CFG(GPIO69, AF0)
-+#define GPIO70_GPIO MFP_CFG(GPIO70, AF0)
-+#define GPIO71_GPIO MFP_CFG(GPIO71, AF0)
-+#define GPIO72_GPIO MFP_CFG(GPIO72, AF0)
-+#define GPIO73_GPIO MFP_CFG(GPIO73, AF0)
-+#define GPIO74_GPIO MFP_CFG(GPIO74, AF0)
-+#define GPIO75_GPIO MFP_CFG(GPIO75, AF0)
-+#define GPIO76_GPIO MFP_CFG(GPIO76, AF0)
-+#define GPIO77_GPIO MFP_CFG(GPIO77, AF0)
-+#define GPIO78_GPIO MFP_CFG(GPIO78, AF0)
-+#define GPIO79_GPIO MFP_CFG(GPIO79, AF0)
-+#define GPIO80_GPIO MFP_CFG(GPIO80, AF0)
-+#define GPIO81_GPIO MFP_CFG(GPIO81, AF0)
-+#define GPIO82_GPIO MFP_CFG(GPIO82, AF0)
-+#define GPIO83_GPIO MFP_CFG(GPIO83, AF0)
-+#define GPIO84_GPIO MFP_CFG(GPIO84, AF0)
-+#define GPIO85_GPIO MFP_CFG(GPIO85, AF0)
-+#define GPIO86_GPIO MFP_CFG(GPIO86, AF0)
-+#define GPIO87_GPIO MFP_CFG(GPIO87, AF0)
-+#define GPIO88_GPIO MFP_CFG(GPIO88, AF0)
-+#define GPIO89_GPIO MFP_CFG(GPIO89, AF0)
-+#define GPIO90_GPIO MFP_CFG(GPIO90, AF0)
-+#define GPIO91_GPIO MFP_CFG(GPIO91, AF0)
-+#define GPIO92_GPIO MFP_CFG(GPIO92, AF0)
-+#define GPIO93_GPIO MFP_CFG(GPIO93, AF0)
-+#define GPIO94_GPIO MFP_CFG(GPIO94, AF0)
-+#define GPIO95_GPIO MFP_CFG(GPIO95, AF0)
-+#define GPIO96_GPIO MFP_CFG(GPIO96, AF0)
-+#define GPIO97_GPIO MFP_CFG(GPIO97, AF0)
-+#define GPIO98_GPIO MFP_CFG(GPIO98, AF0)
-+#define GPIO99_GPIO MFP_CFG(GPIO99, AF0)
-+#define GPIO100_GPIO MFP_CFG(GPIO100, AF0)
-+#define GPIO101_GPIO MFP_CFG(GPIO101, AF0)
-+#define GPIO102_GPIO MFP_CFG(GPIO102, AF0)
-+#define GPIO103_GPIO MFP_CFG(GPIO103, AF0)
-+#define GPIO104_GPIO MFP_CFG(GPIO104, AF0)
-+#define GPIO105_GPIO MFP_CFG(GPIO105, AF0)
-+#define GPIO106_GPIO MFP_CFG(GPIO106, AF0)
-+#define GPIO107_GPIO MFP_CFG(GPIO107, AF0)
-+#define GPIO108_GPIO MFP_CFG(GPIO108, AF0)
-+#define GPIO109_GPIO MFP_CFG(GPIO109, AF0)
-+#define GPIO110_GPIO MFP_CFG(GPIO110, AF0)
-+#define GPIO111_GPIO MFP_CFG(GPIO111, AF0)
-+#define GPIO112_GPIO MFP_CFG(GPIO112, AF0)
-+#define GPIO113_GPIO MFP_CFG(GPIO113, AF0)
-+#define GPIO114_GPIO MFP_CFG(GPIO114, AF0)
-+#define GPIO115_GPIO MFP_CFG(GPIO115, AF0)
-+#define GPIO116_GPIO MFP_CFG(GPIO116, AF0)
-+#define GPIO117_GPIO MFP_CFG(GPIO117, AF0)
-+#define GPIO118_GPIO MFP_CFG(GPIO118, AF0)
-+#define GPIO119_GPIO MFP_CFG(GPIO119, AF0)
-+#define GPIO120_GPIO MFP_CFG(GPIO120, AF0)
-+#define GPIO121_GPIO MFP_CFG(GPIO121, AF0)
-+#define GPIO122_GPIO MFP_CFG(GPIO122, AF0)
-+#define GPIO123_GPIO MFP_CFG(GPIO123, AF0)
-+#define GPIO124_GPIO MFP_CFG(GPIO124, AF0)
-+#define GPIO125_GPIO MFP_CFG(GPIO125, AF0)
-+#define GPIO126_GPIO MFP_CFG(GPIO126, AF0)
-+#define GPIO127_GPIO MFP_CFG(GPIO127, AF0)
-+
-+#define GPIO0_2_GPIO MFP_CFG(GPIO0_2, AF0)
-+#define GPIO1_2_GPIO MFP_CFG(GPIO1_2, AF0)
-+#define GPIO2_2_GPIO MFP_CFG(GPIO2_2, AF0)
-+#define GPIO3_2_GPIO MFP_CFG(GPIO3_2, AF0)
-+#define GPIO4_2_GPIO MFP_CFG(GPIO4_2, AF0)
-+#define GPIO5_2_GPIO MFP_CFG(GPIO5_2, AF0)
-+#define GPIO6_2_GPIO MFP_CFG(GPIO6_2, AF0)
-+
-+/*
-+ * each MFP pin will have a MFPR register, since the offset of the
-+ * register varies between processors, the processor specific code
-+ * should initialize the pin offsets by pxa3xx_mfp_init_addr()
-+ *
-+ * pxa3xx_mfp_init_addr - accepts a table of "pxa3xx_mfp_addr_map"
-+ * structure, which represents a range of MFP pins from "start" to
-+ * "end", with the offset begining at "offset", to define a single
-+ * pin, let "end" = -1
-+ *
-+ * use
-+ *
-+ * MFP_ADDR_X() to define a range of pins
-+ * MFP_ADDR() to define a single pin
-+ * MFP_ADDR_END to signal the end of pin offset definitions
-+ */
-+struct pxa3xx_mfp_addr_map {
-+ unsigned int start;
-+ unsigned int end;
-+ unsigned long offset;
-+};
-+
-+#define MFP_ADDR_X(start, end, offset) \
-+ { MFP_PIN_##start, MFP_PIN_##end, offset }
-+
-+#define MFP_ADDR(pin, offset) \
-+ { MFP_PIN_##pin, -1, offset }
-+
-+#define MFP_ADDR_END { MFP_PIN_INVALID, 0 }
-+
-+struct pxa3xx_mfp_pin {
-+ unsigned long mfpr_off; /* MFPRxx register offset */
-+ unsigned long mfpr_val; /* MFPRxx register value */
-+};
-+
-+/*
-+ * pxa3xx_mfp_read()/pxa3xx_mfp_write() - for direct read/write access
-+ * to the MFPR register
-+ */
-+unsigned long pxa3xx_mfp_read(int mfp);
-+void pxa3xx_mfp_write(int mfp, unsigned long mfpr_val);
-+
-+/*
-+ * pxa3xx_mfp_set_afds - set MFP alternate function and drive strength
-+ * pxa3xx_mfp_set_rdh - set MFP release delay hold on/off
-+ * pxa3xx_mfp_set_lpm - set MFP low power mode state
-+ * pxa3xx_mfp_set_edge - set MFP edge detection in low power mode
-+ *
-+ * use these functions to override/change the default configuration
-+ * done by pxa3xx_mfp_set_config(s)
-+ */
-+void pxa3xx_mfp_set_afds(int mfp, int af, int ds);
-+void pxa3xx_mfp_set_rdh(int mfp, int rdh);
-+void pxa3xx_mfp_set_lpm(int mfp, int lpm);
-+void pxa3xx_mfp_set_edge(int mfp, int edge);
-+
-+/*
-+ * pxa3xx_mfp_config - configure the MFPR registers
-+ *
-+ * used by board specific initialization code
-+ */
-+void pxa3xx_mfp_config(mfp_cfg_t *mfp_cfgs, int num);
-+
-+/*
-+ * pxa3xx_mfp_init_addr() - initialize the mapping between mfp pin
-+ * index and MFPR register offset
-+ *
-+ * used by processor specific code
-+ */
-+void __init pxa3xx_mfp_init_addr(struct pxa3xx_mfp_addr_map *);
-+void __init pxa3xx_init_mfp(void);
-+
-+#endif /* __ASM_ARCH_MFP_H */
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/pxa-regs.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa-regs.h
-@@ -1184,7 +1184,7 @@
-
- #define GPIO_bit(x) (1 << ((x) & 0x1f))
-
--#ifdef CONFIG_PXA27x
-+#if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
-
- /* Interrupt Controller */
-
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/pxa3xx-regs.h
-@@ -0,0 +1,75 @@
-+/*
-+ * linux/include/asm-arm/arch-pxa/pxa3xx-regs.h
-+ *
-+ * PXA3xx specific register definitions
-+ *
-+ * Copyright (C) 2007 Marvell International Ltd.
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ */
-+
-+#ifndef __ASM_ARCH_PXA3XX_REGS_H
-+#define __ASM_ARCH_PXA3XX_REGS_H
-+
-+/*
-+ * Application Subsystem Clock
-+ */
-+#define ACCR __REG(0x41340000) /* Application Subsystem Clock Configuration Register */
-+#define ACSR __REG(0x41340004) /* Application Subsystem Clock Status Register */
-+#define AICSR __REG(0x41340008) /* Application Subsystem Interrupt Control/Status Register */
-+#define CKENA __REG(0x4134000C) /* A Clock Enable Register */
-+#define CKENB __REG(0x41340010) /* B Clock Enable Register */
-+#define AC97_DIV __REG(0x41340014) /* AC97 clock divisor value register */
-+
-+/*
-+ * Clock Enable Bit
-+ */
-+#define CKEN_LCD 1 /* < LCD Clock Enable */
-+#define CKEN_USBH 2 /* < USB host clock enable */
-+#define CKEN_CAMERA 3 /* < Camera interface clock enable */
-+#define CKEN_NAND 4 /* < NAND Flash Controller Clock Enable */
-+#define CKEN_USB2 6 /* < USB 2.0 client clock enable. */
-+#define CKEN_DMC 8 /* < Dynamic Memory Controller clock enable */
-+#define CKEN_SMC 9 /* < Static Memory Controller clock enable */
-+#define CKEN_ISC 10 /* < Internal SRAM Controller clock enable */
-+#define CKEN_BOOT 11 /* < Boot rom clock enable */
-+#define CKEN_MMC1 12 /* < MMC1 Clock enable */
-+#define CKEN_MMC2 13 /* < MMC2 clock enable */
-+#define CKEN_KEYPAD 14 /* < Keypand Controller Clock Enable */
-+#define CKEN_CIR 15 /* < Consumer IR Clock Enable */
-+#define CKEN_USIM0 17 /* < USIM[0] Clock Enable */
-+#define CKEN_USIM1 18 /* < USIM[1] Clock Enable */
-+#define CKEN_TPM 19 /* < TPM clock enable */
-+#define CKEN_UDC 20 /* < UDC clock enable */
-+#define CKEN_BTUART 21 /* < BTUART clock enable */
-+#define CKEN_FFUART 22 /* < FFUART clock enable */
-+#define CKEN_STUART 23 /* < STUART clock enable */
-+#define CKEN_AC97 24 /* < AC97 clock enable */
-+#define CKEN_TOUCH 25 /* < Touch screen Interface Clock Enable */
-+#define CKEN_SSP1 26 /* < SSP1 clock enable */
-+#define CKEN_SSP2 27 /* < SSP2 clock enable */
-+#define CKEN_SSP3 28 /* < SSP3 clock enable */
-+#define CKEN_SSP4 29 /* < SSP4 clock enable */
-+#define CKEN_MSL0 30 /* < MSL0 clock enable */
-+#define CKEN_PWM0 32 /* < PWM[0] clock enable */
-+#define CKEN_PWM1 33 /* < PWM[1] clock enable */
-+#define CKEN_I2C 36 /* < I2C clock enable */
-+#define CKEN_INTC 38 /* < Interrupt controller clock enable */
-+#define CKEN_GPIO 39 /* < GPIO clock enable */
-+#define CKEN_1WIRE 40 /* < 1-wire clock enable */
-+#define CKEN_HSIO2 41 /* < HSIO2 clock enable */
-+#define CKEN_MINI_IM 48 /* < Mini-IM */
-+#define CKEN_MINI_LCD 49 /* < Mini LCD */
-+
-+#if defined(CONFIG_CPU_PXA310)
-+#define CKEN_MMC3 5 /* < MMC3 Clock Enable */
-+#define CKEN_MVED 43 /* < MVED clock enable */
-+#endif
-+
-+/* Note: GCU clock enable bit differs on PXA300/PXA310 and PXA320 */
-+#define PXA300_CKEN_GRAPHICS 42 /* Graphics controller clock enable */
-+#define PXA320_CKEN_GRAPHICS 7 /* Graphics controller clock enable */
-+
-+#endif /* __ASM_ARCH_PXA3XX_REGS_H */
---- linux-2.6.23.orig/include/asm-arm/arch-pxa/timex.h
-+++ linux-2.6.23/include/asm-arm/arch-pxa/timex.h
-@@ -21,4 +21,6 @@
- #else
- #define CLOCK_TICK_RATE 3250000
- #endif
-+#else
-+#define CLOCK_TICK_RATE 3250000
- #endif
---- /dev/null
-+++ linux-2.6.23/include/asm-arm/arch-pxa/zylonite.h
-@@ -0,0 +1,35 @@
-+#ifndef __ASM_ARCH_ZYLONITE_H
-+#define __ASM_ARCH_ZYLONITE_H
-+
-+#define ZYLONITE_ETH_PHYS 0x14000000
-+
-+/* the following variables are processor specific and initialized
-+ * by the corresponding zylonite_pxa3xx_init()
-+ */
-+extern int gpio_backlight;
-+extern int gpio_eth_irq;
-+
-+extern int lcd_id;
-+extern int lcd_orientation;
-+
-+#ifdef CONFIG_CPU_PXA300
-+extern void zylonite_pxa300_init(void);
-+#else
-+static inline void zylonite_pxa300_init(void)
-+{
-+ if (cpu_is_pxa300() || cpu_is_pxa310())
-+ panic("%s: PXA300/PXA310 not supported\n", __FUNCTION__);
-+}
-+#endif
-+
-+#ifdef CONFIG_CPU_PXA320
-+extern void zylonite_pxa320_init(void);
-+#else
-+static inline void zylonite_pxa320_init(void)
-+{
-+ if (cpu_is_pxa320())
-+ panic("%s: PXA320 not supported\n", __FUNCTION__);
-+}
-+#endif
-+
-+#endif /* __ASM_ARCH_ZYLONITE_H */
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/binutils-buildid-arm.patch b/packages/kexecboot/linux-kexecboot-2.6.23/binutils-buildid-arm.patch
deleted file mode 100644
index 68e35e89e1..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/binutils-buildid-arm.patch
+++ /dev/null
@@ -1,16 +0,0 @@
----
- arch/arm/kernel/vmlinux.lds.S | 1 +
- 1 file changed, 1 insertion(+)
-
-Index: linux-2.6.22/arch/arm/kernel/vmlinux.lds.S
-===================================================================
---- linux-2.6.22.orig/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:32:29.000000000 +0200
-+++ linux-2.6.22/arch/arm/kernel/vmlinux.lds.S 2007-09-11 18:33:42.000000000 +0200
-@@ -94,6 +94,7 @@
- TEXT_TEXT
- SCHED_TEXT
- LOCK_TEXT
-+ *(.note.*)
- #ifdef CONFIG_MMU
- *(.fixup)
- #endif
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/bootcdx86/defconfig b/packages/kexecboot/linux-kexecboot-2.6.23/bootcdx86/defconfig
deleted file mode 100644
index 244df733ac..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/bootcdx86/defconfig
+++ /dev/null
@@ -1,1579 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Wed Feb 6 18:24:38 2008
-#
-CONFIG_X86_32=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_SEMAPHORE_SLEEPERS=y
-CONFIG_X86=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_QUICKLIST=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-CONFIG_DMI=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_CPUSETS is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_UNLOAD is not set
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_SMP=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_NUMAQ is not set
-# CONFIG_X86_SUMMIT is not set
-# CONFIG_X86_BIGSMP is not set
-# CONFIG_X86_VISWS is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_ES7000 is not set
-# CONFIG_PARAVIRT is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-CONFIG_MPENTIUMII=y
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_MPENTIUM4 is not set
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-# CONFIG_MVIAC7 is not set
-CONFIG_X86_GENERIC=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_X86_XADD=y
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_GOOD_APIC=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_X86_CMOV=y
-CONFIG_X86_MINIMUM_CPU_FAMILY=4
-CONFIG_HPET_TIMER=y
-CONFIG_NR_CPUS=8
-CONFIG_SCHED_SMT=y
-CONFIG_SCHED_MC=y
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_BKL=y
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-CONFIG_X86_MCE_NONFATAL=y
-CONFIG_X86_MCE_P4THERMAL=y
-CONFIG_VM86=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_DMIID=y
-CONFIG_NOHIGHMEM=y
-# CONFIG_HIGHMEM4G is not set
-# CONFIG_HIGHMEM64G is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMSPLIT_3G_OPT is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-# CONFIG_VMSPLIT_1G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-# CONFIG_X86_PAE is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_NR_QUICK=1
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-# CONFIG_EFI is not set
-CONFIG_IRQBALANCE=y
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=250
-CONFIG_KEXEC=y
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-CONFIG_HOTPLUG_CPU=y
-# CONFIG_COMPAT_VDSO is not set
-
-#
-# Power management options (ACPI, APM)
-#
-CONFIG_PM=y
-CONFIG_PM_LEGACY=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP_SMP=y
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_SMP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_HIBERNATION_SMP_POSSIBLE=y
-# CONFIG_HIBERNATION is not set
-CONFIG_ACPI=y
-CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_PROCFS=y
-CONFIG_ACPI_PROC_EVENT=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_FAN=y
-# CONFIG_ACPI_DOCK is not set
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_HOTPLUG_CPU=y
-CONFIG_ACPI_THERMAL=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_TOSHIBA is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-CONFIG_ACPI_CONTAINER=y
-# CONFIG_ACPI_SBS is not set
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_ARCH_SUPPORTS_MSI=y
-CONFIG_PCI_MSI=y
-CONFIG_HT_IRQ=y
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-CONFIG_K8_NB=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-# CONFIG_HOTPLUG_PCI is not set
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=m
-# CONFIG_PACKET_MMAP is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-# CONFIG_CFG80211 is not set
-# CONFIG_WIRELESS_EXT is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_RFKILL is not set
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=m
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
-# CONFIG_MTD is not set
-# CONFIG_PARPORT is not set
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_COUNT=1
-CONFIG_BLK_DEV_RAM_SIZE=81920
-CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_IBM_ASM is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_SONY_LAPTOP is not set
-# CONFIG_THINKPAD_ACPI is not set
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_BLK_DEV_SR is not set
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_ATA is not set
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SPI is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION_SAS is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-# CONFIG_FIREWIRE is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_I2O is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_PHYLIB is not set
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_CASSINI is not set
-CONFIG_NET_VENDOR_3COM=y
-# CONFIG_EL1 is not set
-# CONFIG_EL2 is not set
-# CONFIG_ELPLUS is not set
-# CONFIG_EL16 is not set
-# CONFIG_EL3 is not set
-# CONFIG_3C515 is not set
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_LANCE=m
-CONFIG_NET_VENDOR_SMC=y
-CONFIG_WD80x3=m
-CONFIG_ULTRA=m
-CONFIG_SMC9194=m
-# CONFIG_NET_VENDOR_RACAL is not set
-CONFIG_NET_TULIP=y
-# CONFIG_DE2104X is not set
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_AT1700=m
-CONFIG_DEPCA=m
-CONFIG_HP100=m
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_ZNET is not set
-# CONFIG_SEEQ8005 is not set
-CONFIG_NET_PCI=y
-CONFIG_PCNET32=m
-CONFIG_PCNET32_NAPI=y
-CONFIG_AMD8111_ETH=m
-CONFIG_AMD8111E_NAPI=y
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ADAPTEC_STARFIRE_NAPI=y
-CONFIG_AC3200=m
-CONFIG_APRICOT=m
-CONFIG_B44=m
-CONFIG_FORCEDETH=m
-CONFIG_FORCEDETH_NAPI=y
-CONFIG_CS89x0=m
-CONFIG_DGRS=m
-CONFIG_EEPRO100=m
-CONFIG_E100=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NE2K_PCI=y
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_PIO=y
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-# CONFIG_8139_OLD_RX_RESET is not set
-CONFIG_SIS900=m
-CONFIG_EPIC100=m
-CONFIG_SUNDANCE=m
-CONFIG_SUNDANCE_MMIO=y
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_RHINE_NAPI=y
-CONFIG_SC92031=m
-CONFIG_NETDEV_1000=y
-CONFIG_ACENIC=m
-CONFIG_ACENIC_OMIT_TIGON_I=y
-CONFIG_DL2K=m
-CONFIG_E1000=m
-CONFIG_E1000_NAPI=y
-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-CONFIG_NS83820=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_R8169=m
-CONFIG_R8169_NAPI=y
-CONFIG_SIS190=m
-CONFIG_SKGE=m
-CONFIG_SKY2=m
-CONFIG_SK98LIN=m
-CONFIG_VIA_VELOCITY=m
-CONFIG_TIGON3=m
-CONFIG_BNX2=m
-CONFIG_QLA3XXX=m
-CONFIG_ATL1=m
-CONFIG_NETDEV_10000=y
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NETXEN_NIC is not set
-# CONFIG_MLX4_CORE is not set
-# CONFIG_TR is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WLAN_80211 is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NET_FC is not set
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=m
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_POWER is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-CONFIG_MOUSE_PS2_ALPS=y
-CONFIG_MOUSE_PS2_LOGIPS2PP=y
-CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
-CONFIG_MOUSE_PS2_TRACKPOINT=y
-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-# CONFIG_GEN_RTC is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-CONFIG_AGP=m
-CONFIG_AGP_ALI=m
-CONFIG_AGP_ATI=m
-CONFIG_AGP_AMD=m
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_NVIDIA=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_SWORKS=m
-CONFIG_AGP_VIA=m
-CONFIG_AGP_EFFICEON=m
-# CONFIG_DRM is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_NSC_GPIO is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_HPET is not set
-# CONFIG_HANGCHECK_TIMER is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-CONFIG_DEVPORT=y
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_STRADIS is not set
-CONFIG_V4L_USB_DRIVERS=y
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-# CONFIG_USB_ZR364XX is not set
-CONFIG_RADIO_ADAPTERS=y
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_DVB_CORE is not set
-CONFIG_DAB=y
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-CONFIG_VGASTATE=y
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-CONFIG_FB_MODE_HELPERS=y
-CONFIG_FB_TILEBLITTING=y
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB_VGA16 is not set
-CONFIG_FB_UVESA=m
-# CONFIG_FB_VESA is not set
-# CONFIG_FB_HECUBA is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_I810 is not set
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_INTEL is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FB_CYBLA is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-CONFIG_VIDEO_SELECT=y
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-# CONFIG_LOGO_LINUX_CLUT224 is not set
-CONFIG_LOGO_OHAND_CLUT224=y
-
-#
-# Sound
-#
-CONFIG_SOUND=y
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=y
-CONFIG_SND_TIMER=y
-CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=y
-CONFIG_SND_PCM_OSS=y
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_AC97_CODEC=y
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_VIRMIDI is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ISA devices
-#
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_WAVEFRONT is not set
-
-#
-# PCI devices
-#
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-CONFIG_SND_INTEL8X0=y
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-CONFIG_SND_AC97_POWER_SAVE=y
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_USX2Y is not set
-# CONFIG_SND_USB_CAIAQ is not set
-
-#
-# System on Chip audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# SoC Audio support for SuperH
-#
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-CONFIG_AC97_BUS=y
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
-# CONFIG_USB_PERSIST is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_SPLIT_ISO=y
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_OHCI_HCD=y
-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-CONFIG_USB_UHCI_HCD=y
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-# CONFIG_USB_STORAGE is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-# CONFIG_USB_SERIAL is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_MMC is not set
-# CONFIG_NEW_LEDS is not set
-# CONFIG_INFINIBAND is not set
-# CONFIG_EDAC is not set
-# CONFIG_RTC_CLASS is not set
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-CONFIG_VIRTUALIZATION=y
-# CONFIG_KVM is not set
-
-#
-# Userspace I/O
-#
-# CONFIG_UIO is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-CONFIG_EXT3_FS_XATTR=y
-# CONFIG_EXT3_FS_POSIX_ACL is not set
-# CONFIG_EXT3_FS_SECURITY is not set
-# CONFIG_EXT4DEV_FS is not set
-CONFIG_JBD=m
-# CONFIG_JBD_DEBUG is not set
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-# CONFIG_ZISOFS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-# CONFIG_NFS_V3 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-# CONFIG_ROOT_NFS is not set
-CONFIG_LOCKD=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf-8"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-CONFIG_INSTRUMENTATION=y
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
-# CONFIG_KPROBES is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_EARLY_PRINTK=y
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_DOUBLEFAULT=y
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=m
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_MANAGER=m
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-CONFIG_CRYPTO_HW=y
-CONFIG_CRYPTO_DEV_PADLOCK=m
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_GEODE=m
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-CONFIG_LIBCRC32C=m
-CONFIG_AUDIT_GENERIC=y
-CONFIG_ZLIB_INFLATE=m
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/c7x0/defconfig b/packages/kexecboot/linux-kexecboot-2.6.23/c7x0/defconfig
deleted file mode 100644
index 7afd558d31..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/c7x0/defconfig
+++ /dev/null
@@ -1,1042 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.23
-# Sat Dec 13 19:36:13 2008
-#
-CONFIG_ARM=y
-CONFIG_SYS_SUPPORTS_APM_EMULATION=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ZONE_DMA=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_USER_NS is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_SYSFS_DEPRECATED=y
-# CONFIG_RELAY is not set
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-# CONFIG_BLK_DEV_BSG is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_PNX4008 is not set
-CONFIG_ARCH_PXA=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# Intel PXA2xx Implementations
-#
-# CONFIG_ARCH_LUBBOCK is not set
-# CONFIG_MACH_LOGICPD_PXA270 is not set
-# CONFIG_MACH_MAINSTONE is not set
-# CONFIG_ARCH_PXA_IDP is not set
-CONFIG_PXA_SHARPSL=y
-# CONFIG_MACH_TRIZEPS4 is not set
-# CONFIG_MACH_EM_X270 is not set
-# CONFIG_MACH_HX2750 is not set
-# CONFIG_MACH_HTCUNIVERSAL is not set
-CONFIG_PXA_SHARPSL_25x=y
-# CONFIG_PXA_SHARPSL_27x is not set
-# CONFIG_MACH_POODLE is not set
-CONFIG_MACH_CORGI=y
-CONFIG_MACH_SHEPHERD=y
-CONFIG_MACH_HUSKY=y
-# CONFIG_MACH_TOSA is not set
-CONFIG_PXA25x=y
-CONFIG_PXA_SHARP_C7xx=y
-CONFIG_PXA_SSP=y
-# CONFIG_PXA_KEYS is not set
-
-#
-# Boot options
-#
-
-#
-# Power management
-#
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_XSCALE=y
-CONFIG_CPU_32v5=y
-CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WBI=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-CONFIG_ARM_THUMB=y
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_OUTER_CACHE is not set
-# CONFIG_IWMMXT is not set
-CONFIG_XSCALE_PMU=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARPSL_PM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-# CONFIG_PCI_SYSCALL is not set
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-# CONFIG_PCCARD is not set
-
-#
-# Kernel Features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_HZ=100
-CONFIG_AEABI=y
-# CONFIG_OABI_COMPAT is not set
-# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-CONFIG_CMDLINE="console=tty0"
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-CONFIG_CPU_FREQ_PXA25x=y
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_CPU_FREQ_DEBUG=y
-CONFIG_CPU_FREQ_STAT=y
-# CONFIG_CPU_FREQ_STAT_DETAILS is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_AOUT is not set
-# CONFIG_BINFMT_MISC is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SUSPEND=y
-CONFIG_APM_EMULATION=y
-
-#
-# Networking
-#
-# CONFIG_NET is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=y
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-
-#
-# Mapping drivers for chip access
-#
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SHARP_SL=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_H1900 is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-CONFIG_MTD_NAND_SHARPSL=y
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_ONENAND is not set
-
-#
-# UBI - Unsorted block images
-#
-# CONFIG_MTD_UBI is not set
-# CONFIG_PARPORT is not set
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-CONFIG_IDE=y
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-CONFIG_IDE_PROC_FS=y
-
-#
-# IDE chipset support/bugfixes
-#
-CONFIG_IDE_GENERIC=y
-# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_ATA is not set
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_BLK_DEV_DM is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_POLLDEV is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_KEYBOARD_CORGI=y
-# CONFIG_KEYBOARD_SPITZ is not set
-# CONFIG_KEYBOARD_GPIO is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_CORGI=y
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_UCB1400 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-# CONFIG_INPUT_UINPUT is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-# CONFIG_SERIAL_8250 is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_PXA=y
-CONFIG_SERIAL_PXA_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_R3964 is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_I2C=y
-CONFIG_I2C_BOARDINFO=y
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_GPIO is not set
-CONFIG_I2C_PXA=y
-# CONFIG_I2C_PXA_SLAVE is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_STUB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_W1 is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_HWMON is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_EEPROM_93CX6 is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_ASIC3 is not set
-# CONFIG_HTC_ASIC3_DS1WM is not set
-
-#
-# Multi-Function Devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=y
-
-#
-# LED drivers
-#
-CONFIG_LEDS_CORGI=y
-# CONFIG_LEDS_TOSA is not set
-# CONFIG_LEDS_GPIO is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-CONFIG_LEDS_TRIGGER_IDE_DISK=y
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-CONFIG_DAB=y
-
-#
-# Graphics support
-#
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_CORGI=y
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=m
-CONFIG_FB=y
-CONFIG_FIRMWARE_EDID=y
-# CONFIG_FB_DDC is not set
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_SYS_FOPS is not set
-CONFIG_FB_DEFERRED_IO=y
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-
-#
-# Frame buffer hardware drivers
-#
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_MBX is not set
-CONFIG_FB_W100=y
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
-CONFIG_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-CONFIG_LOGO=y
-# CONFIG_LOGO_LINUX_MONO is not set
-# CONFIG_LOGO_LINUX_VGA16 is not set
-CONFIG_LOGO_LINUX_CLUT224=y
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-# CONFIG_USB is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-CONFIG_USB_GADGET=y
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-CONFIG_USB_GADGET_SELECTED=y
-# CONFIG_USB_GADGET_AMD5536UDC is not set
-# CONFIG_USB_GADGET_FSL_USB2 is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-CONFIG_USB_GADGET_PXA2XX=y
-CONFIG_USB_PXA2XX=y
-# CONFIG_USB_GADGET_M66592 is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_S3C2410 is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-# CONFIG_USB_ZERO is not set
-# CONFIG_USB_ETH is not set
-# CONFIG_USB_GADGETFS is not set
-# CONFIG_USB_FILE_STORAGE is not set
-# CONFIG_USB_G_SERIAL is not set
-# CONFIG_USB_MIDI_GADGET is not set
-CONFIG_MMC=y
-# CONFIG_MMC_DEBUG is not set
-CONFIG_MMC_UNSAFE_RESUME=y
-
-#
-# MMC/SD Card Drivers
-#
-CONFIG_MMC_BLOCK=y
-CONFIG_MMC_BLOCK_BOUNCE=y
-
-#
-# MMC/SD Host Controller Drivers
-#
-CONFIG_MMC_PXA=y
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-# CONFIG_RTC_DRV_CMOS is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_RTC_DRV_SA1100=y
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_FUSE_FS is not set
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-# CONFIG_MSDOS_FS is not set
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-CONFIG_JFFS2_SUMMARY=y
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_SYSFS is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-CONFIG_JFFS2_RUBIN=y
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_SYSV68_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-
-#
-# Profiling support
-#
-CONFIG_PROFILING=y
-# CONFIG_OPROFILE is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-CONFIG_DETECT_SOFTLOCKUP=y
-CONFIG_SCHED_DEBUG=y
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=y
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-CONFIG_CRYPTO_PCBC=m
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_TEST is not set
-CONFIG_CRYPTO_HW=y
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=y
-# CONFIG_CRC16 is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/collie/defconfig b/packages/kexecboot/linux-kexecboot-2.6.23/collie/defconfig
deleted file mode 100644
index 64e5090ae6..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/collie/defconfig
+++ /dev/null
@@ -1,1790 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20.4
-# Fri Apr 6 23:20:59 2007
-#
-CONFIG_ARM=y
-# CONFIG_GENERIC_TIME is not set
-CONFIG_MMU=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_HARDIRQS_SW_RESEND=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_ARCH_MTD_XIP=y
-CONFIG_VECTORS_BASE=0xffff0000
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-# CONFIG_IPC_NS is not set
-# CONFIG_POSIX_MQUEUE is not set
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_RELAY is not set
-CONFIG_INITRAMFS_SOURCE=""
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-# CONFIG_ELF_CORE is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_EPOLL=y
-CONFIG_SHMEM=y
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=m
-CONFIG_IOSCHED_CFQ=m
-CONFIG_DEFAULT_AS=y
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="anticipatory"
-
-#
-# System Type
-#
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_RPC is not set
-CONFIG_ARCH_SA1100=y
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_OMAP is not set
-
-#
-# SA11x0 Implementations
-#
-# CONFIG_SA1100_ASSABET is not set
-# CONFIG_SA1100_CERF is not set
-CONFIG_SA1100_COLLIE=y
-# CONFIG_SA1100_H3100 is not set
-# CONFIG_SA1100_H3600 is not set
-# CONFIG_SA1100_H3800 is not set
-# CONFIG_SA1100_BADGE4 is not set
-# CONFIG_SA1100_JORNADA720 is not set
-# CONFIG_SA1100_HACKKIT is not set
-# CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-# CONFIG_SA1100_SHANNON is not set
-# CONFIG_SA1100_SIMPAD is not set
-# CONFIG_SA1100_SSP is not set
-
-#
-# Processor Type
-#
-CONFIG_CPU_32=y
-CONFIG_CPU_SA1100=y
-CONFIG_CPU_32v4=y
-CONFIG_CPU_ABRT_EV4=y
-CONFIG_CPU_CACHE_V4WB=y
-CONFIG_CPU_CACHE_VIVT=y
-CONFIG_CPU_TLB_V4WB=y
-CONFIG_CPU_CP15=y
-CONFIG_CPU_CP15_MMU=y
-
-#
-# Processor Features
-#
-# CONFIG_CPU_ICACHE_DISABLE is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-CONFIG_SHARP_LOCOMO=y
-CONFIG_SHARP_PARAM=y
-CONFIG_SHARP_SCOOP=y
-
-#
-# Bus support
-#
-CONFIG_ISA=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-
-#
-# PC-card bridges
-#
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_SA1100=y
-
-#
-# Kernel Features
-#
-CONFIG_PREEMPT=y
-CONFIG_NO_IDLE_HZ=y
-CONFIG_HZ=100
-# CONFIG_AEABI is not set
-CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
-CONFIG_NODES_SHIFT=2
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_FLATMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM_MANUAL=y
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_DISCONTIGMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_NEED_MULTIPLE_NODES=y
-# CONFIG_SPARSEMEM_STATIC is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4096
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_LEDS is not set
-CONFIG_ALIGNMENT_TRAP=y
-
-#
-# Boot options
-#
-CONFIG_ZBOOT_ROM_TEXT=0x0
-CONFIG_ZBOOT_ROM_BSS=0x0
-# CONFIG_XIP_KERNEL is not set
-CONFIG_KEXEC=y
-CONFIG_ATAGS_PROC=y
-
-#
-# CPU Frequency scaling
-#
-# CONFIG_CPU_FREQ is not set
-
-#
-# Floating point emulation
-#
-
-#
-# At least one emulation must be selected
-#
-CONFIG_FPE_NWFPE=y
-# CONFIG_FPE_NWFPE_XP is not set
-# CONFIG_FPE_FASTFPE is not set
-
-#
-# Userspace binary formats
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=m
-CONFIG_BINFMT_MISC=m
-# CONFIG_ARTHUR is not set
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-CONFIG_APM=y
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=m
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=m
-CONFIG_INET_TCP_DIAG=m
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_TCP_MD5SIG is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=m
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-# CONFIG_IPV6_MIP6 is not set
-CONFIG_INET6_XFRM_TUNNEL=m
-CONFIG_INET6_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_TUNNEL=m
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-
-#
-# Core Netfilter Configuration
-#
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NF_CONNTRACK_ENABLED is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NETFILTER_XTABLES=m
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_QUEUE=m
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_IPRANGE=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_RECENT=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_MATCH_OWNER=m
-CONFIG_IP_NF_MATCH_ADDRTYPE=m
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_TARGET_ULOG=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-
-#
-# IPv6: Netfilter Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP6_NF_QUEUE is not set
-
-#
-# DCCP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_DCCP is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-# CONFIG_IRDA_ULTRA is not set
-
-#
-# IrDA options
-#
-# CONFIG_IRDA_CACHE_LAST_LSAP is not set
-# CONFIG_IRDA_FAST_RR is not set
-# CONFIG_IRDA_DEBUG is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-CONFIG_IRTTY_SIR=m
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
-# Old SIR device drivers
-#
-# CONFIG_IRPORT_SIR is not set
-
-#
-# Old Serial dongle support
-#
-
-#
-# FIR device drivers
-#
-CONFIG_USB_IRDA=m
-# CONFIG_SIGMATEL_FIR is not set
-CONFIG_SA1100_FIR=m
-# CONFIG_MCS_FIR is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-# CONFIG_IEEE80211_SOFTMAC is not set
-CONFIG_WIRELESS_EXT=y
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-# CONFIG_CONNECTOR is not set
-
-#
-# Memory Technology Devices (MTD)
-#
-CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_CONCAT is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_CMDLINE_PARTS is not set
-# CONFIG_MTD_AFS_PARTS is not set
-
-#
-# User Modules And Translation Layers
-#
-CONFIG_MTD_CHAR=m
-CONFIG_MTD_BLKDEVS=y
-CONFIG_MTD_BLOCK=y
-# CONFIG_FTL is not set
-# CONFIG_NFTL is not set
-# CONFIG_INFTL is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_SSFDC is not set
-
-#
-# RAM/ROM/Flash chip drivers
-#
-# CONFIG_MTD_CFI is not set
-# CONFIG_MTD_JEDECPROBE is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_CFI_I1=y
-CONFIG_MTD_CFI_I2=y
-# CONFIG_MTD_CFI_I4 is not set
-# CONFIG_MTD_CFI_I8 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_ROM=y
-# CONFIG_MTD_ABSENT is not set
-CONFIG_MTD_OBSOLETE_CHIPS=y
-CONFIG_MTD_SHARP=y
-
-#
-# Mapping drivers for chip access
-#
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_PHYSMAP is not set
-CONFIG_MTD_SA1100=y
-# CONFIG_MTD_PLATRAM is not set
-
-#
-# Self-contained MTD device drivers
-#
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLOCK2MTD is not set
-
-#
-# Disk-On-Chip Device Drivers
-#
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-
-#
-# NAND Flash Device Drivers
-#
-# CONFIG_MTD_NAND is not set
-
-#
-# OneNAND Flash Device Drivers
-#
-# CONFIG_MTD_ONENAND is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=m
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-CONFIG_IDE=m
-CONFIG_IDE_MAX_HWIFS=4
-CONFIG_BLK_DEV_IDE=m
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_IDE_SATA is not set
-CONFIG_BLK_DEV_IDEDISK=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_BLK_DEV_IDECS=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_IDE_GENERIC is not set
-# CONFIG_IDE_ARM is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_BLK_DEV_IDEDMA is not set
-# CONFIG_IDEDMA_AUTO is not set
-# CONFIG_BLK_DEV_HD is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=m
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=m
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=m
-# CONFIG_BLK_DEV_SR_VENDOR is not set
-CONFIG_CHR_DEV_SG=m
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-
-#
-# SCSI low-level drivers
-#
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_DEBUG is not set
-
-#
-# PCMCIA SCSI adapter support
-#
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-CONFIG_MD=y
-# CONFIG_BLK_DEV_MD is not set
-CONFIG_BLK_DEV_DM=m
-# CONFIG_DM_DEBUG is not set
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_EMC=m
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=m
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_SMC91X is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_AT1700 is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-CONFIG_NET_RADIO=y
-# CONFIG_NET_WIRELESS_RTNETLINK is not set
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
-# CONFIG_WAVELAN is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-
-#
-# Wireless 802.11 Frequency Hopping cards support
-#
-# CONFIG_PCMCIA_RAYCS is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-CONFIG_HERMES=m
-# CONFIG_ATMEL is not set
-
-#
-# Wireless 802.11b Pcmcia/Cardbus cards support
-#
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_USB_ZD1201 is not set
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-# CONFIG_HOSTAP_FIRMWARE_NVRAM is not set
-CONFIG_HOSTAP_CS=m
-CONFIG_NET_WIRELESS=y
-
-#
-# PCMCIA network device support
-#
-CONFIG_NET_PCMCIA=y
-# CONFIG_PCMCIA_3C589 is not set
-# CONFIG_PCMCIA_3C574 is not set
-# CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=m
-# CONFIG_PCMCIA_NMCLAN is not set
-# CONFIG_PCMCIA_SMC91C92 is not set
-# CONFIG_PCMCIA_XIRC2PS is not set
-# CONFIG_PCMCIA_AXNET is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPP_MPPE is not set
-# CONFIG_PPPOE is not set
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_SHAPER is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=480
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-CONFIG_INPUT_POWER=y
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-CONFIG_KEYBOARD_LOCOMO=y
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=m
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-# CONFIG_LEGACY_PTYS is not set
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-CONFIG_HW_RANDOM=m
-# CONFIG_NVRAM is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-# CONFIG_TCG_TPM is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# I2C Algorithms
-#
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALGOPCA is not set
-
-#
-# I2C Hardware Bus support
-#
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_PCA_ISA is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-
-#
-# SPI support
-#
-CONFIG_SPI=y
-# CONFIG_SPI_DEBUG is not set
-CONFIG_SPI_MASTER=y
-
-#
-# SPI Master Controller Drivers
-#
-# CONFIG_SPI_BITBANG is not set
-CONFIG_SPI_LOCOMO=m
-
-#
-# SPI Protocol Masters
-#
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Misc devices
-#
-# CONFIG_TIFM_CORE is not set
-
-#
-# Multimedia Capabilities Port drivers
-#
-CONFIG_MCP=y
-CONFIG_MCP_SA11X0=y
-CONFIG_MCP_UCB1200=y
-CONFIG_MCP_UCB1200_TS=m
-
-#
-# Multi-Function Devices
-#
-
-#
-# LED devices
-#
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-CONFIG_LEDS_LOCOMO=m
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-
-#
-# Multimedia devices
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L1=y
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_VIDEO_V4L2=y
-
-#
-# Video Capture Adapters
-#
-
-#
-# Video Capture Adapters
-#
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CPIA2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-
-#
-# V4L USB devices
-#
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_USBVISION is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_PWC is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_USB_DSBR is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-# CONFIG_USB_DABUSB is not set
-
-#
-# Graphics support
-#
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB=y
-CONFIG_FB_CFB_FILLRECT=y
-CONFIG_FB_CFB_COPYAREA=y
-CONFIG_FB_CFB_IMAGEBLIT=y
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_TILEBLITTING is not set
-CONFIG_FB_SA1100=y
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_VIRTUAL is not set
-
-#
-# Console display driver support
-#
-# CONFIG_VGA_CONSOLE is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_7x14 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-# CONFIG_FONT_MINI_4x6 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_10x18 is not set
-
-#
-# Logo configuration
-#
-# CONFIG_LOGO is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_DEVICE=y
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_DEVICE=y
-CONFIG_BACKLIGHT_LOCOMO=y
-
-#
-# Sound
-#
-CONFIG_SOUND=m
-
-#
-# Advanced Linux Sound Architecture
-#
-CONFIG_SND=m
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-# CONFIG_SND_SEQUENCER is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-
-#
-# Generic devices
-#
-CONFIG_SND_DUMMY=m
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_MPU401 is not set
-
-#
-# ALSA ARM devices
-#
-
-#
-# USB devices
-#
-# CONFIG_SND_USB_AUDIO is not set
-
-#
-# PCMCIA devices
-#
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_PDAUDIOCF is not set
-
-#
-# SoC audio support
-#
-# CONFIG_SND_SOC is not set
-
-#
-# Open Sound System
-#
-# CONFIG_SOUND_PRIME is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=m
-
-#
-# USB support
-#
-CONFIG_USB_ARCH_HAS_HCD=y
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_OTG is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_ISP116X_HCD is not set
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_CS=m
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=m
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=m
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-# CONFIG_USB_HIDDEV is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_APPLETOUCH is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-CONFIG_USB_USBNET_MII=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_AX8817X=m
-CONFIG_USB_NET_CDCETHER=m
-# CONFIG_USB_NET_GL620A is not set
-CONFIG_USB_NET_NET1080=m
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-CONFIG_USB_NET_CDC_SUBSET=m
-# CONFIG_USB_ALI_M5632 is not set
-# CONFIG_USB_AN2720 is not set
-CONFIG_USB_BELKIN=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_EPSON2888 is not set
-CONFIG_USB_NET_ZAURUS=m
-CONFIG_USB_MON=y
-
-#
-# USB port drivers
-#
-
-#
-# USB Serial Converter support
-#
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-CONFIG_USB_SERIAL_AIRPRIME=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP2101=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_FUNSOFT=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
-# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_HP4X=m
-CONFIG_USB_SERIAL_SAFE=m
-# CONFIG_USB_SERIAL_SAFE_PADDED is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-CONFIG_USB_EZUSB=y
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_TEST is not set
-
-#
-# USB DSL modem support
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG_FILES is not set
-# CONFIG_USB_GADGET_NET2280 is not set
-# CONFIG_USB_GADGET_PXA2XX is not set
-# CONFIG_USB_GADGET_PXA27X is not set
-# CONFIG_USB_GADGET_GOKU is not set
-# CONFIG_USB_GADGET_LH7A40X is not set
-# CONFIG_USB_GADGET_OMAP is not set
-# CONFIG_USB_GADGET_AT91 is not set
-# CONFIG_USB_GADGET_DUMMY_HCD is not set
-# CONFIG_USB_GADGET_DUALSPEED is not set
-
-#
-# MMC/SD Card support
-#
-CONFIG_MMC=m
-CONFIG_MMC_DEBUG=y
-CONFIG_MMC_BLOCK=m
-# CONFIG_MMC_TIFM_SD is not set
-CONFIG_MMC_SPI=m
-CONFIG_MMC_UNSAFE_RESUME=y
-
-
-#
-# Real Time Clock
-#
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-
-#
-# RTC drivers
-#
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-CONFIG_RTC_DRV_SA1100=y
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=m
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-CONFIG_EXT3_FS=m
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=m
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-CONFIG_JFFS2_FS=y
-CONFIG_JFFS2_FS_DEBUG=0
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_SUMMARY is not set
-# CONFIG_JFFS2_FS_XATTR is not set
-# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
-CONFIG_JFFS2_ZLIB=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=m
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V4=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_LOCKD=m
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=m
-CONFIG_SUNRPC_GSS=m
-CONFIG_RPCSEC_GSS_KRB5=m
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=m
-CONFIG_SMB_NLS_DEFAULT=y
-CONFIG_SMB_NLS_REMOTE="cp437"
-CONFIG_CIFS=m
-# CONFIG_CIFS_STATS is not set
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_9P_FS is not set
-
-#
-# Partition Types
-#
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_EFI_PARTITION is not set
-
-#
-# Native Language Support
-#
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="cp437"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_UTF8=m
-
-#
-# Distributed Lock Manager
-#
-# CONFIG_DLM is not set
-
-#
-# Profiling support
-#
-# CONFIG_PROFILING is not set
-
-#
-# Kernel hacking
-#
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_DETECT_SOFTLOCKUP=y
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_RWSEMS is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_LIST is not set
-CONFIG_FRAME_POINTER=y
-# CONFIG_FORCED_INLINING is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_DEBUG_USER is not set
-CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_LL is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=m
-CONFIG_CRYPTO_HASH=m
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_HMAC=m
-# CONFIG_CRYPTO_XCBC is not set
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_WP512=m
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-CONFIG_CRYPTO_ECB=m
-CONFIG_CRYPTO_CBC=m
-# CONFIG_CRYPTO_LRW is not set
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_COMMON=m
-CONFIG_CRYPTO_SERPENT=m
-CONFIG_CRYPTO_AES=m
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_DEFLATE=m
-# CONFIG_CRYPTO_LZO is not set
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
-CONFIG_CRYPTO_TEST=m
-
-#
-# Hardware crypto devices
-#
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=m
-CONFIG_CRC32=y
-CONFIG_LIBCRC32C=m
-CONFIG_LZO=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_PLIST=y
-CONFIG_IOMAP_COPY=y
-# CONFIG_SHARPSL_RC is not set
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-prevent-oops-HACK.patch b/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-prevent-oops-HACK.patch
deleted file mode 100644
index b5439c62e7..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-prevent-oops-HACK.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c
-===================================================================
---- linux-2.6.21.orig/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:45:39.000000000 +0100
-+++ linux-2.6.21/drivers/net/wireless/hostap/hostap_hw.c 2007-07-07 12:47:30.000000000 +0100
-@@ -2666,6 +2666,12 @@
- iface = netdev_priv(dev);
- local = iface->local;
-
-+ if(dev->base_addr == 0)
-+ {
-+ printk(KERN_DEBUG "%s: IRQ before base_addr set\n", dev->name);
-+ return IRQ_HANDLED;
-+ }
-+
- prism2_io_debug_add(dev, PRISM2_IO_DEBUG_CMD_INTERRUPT, 0, 0);
-
- if (local->func->card_present && !local->func->card_present(local)) {
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-remove-ide-HACK.patch b/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-remove-ide-HACK.patch
deleted file mode 100644
index 4414b21191..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/connectplus-remove-ide-HACK.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-Index: linux-2.6.13/drivers/ide/legacy/ide-cs.c
-===================================================================
---- linux-2.6.13.orig/drivers/ide/legacy/ide-cs.c 2005-09-01 22:43:46.000000000 +0100
-+++ linux-2.6.13/drivers/ide/legacy/ide-cs.c 2005-09-01 22:45:46.000000000 +0100
-@@ -488,7 +488,6 @@
- PCMCIA_DEVICE_PROD_ID123("KODAK Picture Card ", "KODAK ", "V100K", 0x94a0d8f3, 0xe4fc3ea0, 0xe5e7eed4),
- PCMCIA_DEVICE_PROD_ID1("STI Flash", 0xe4a13209),
- PCMCIA_DEVICE_PROD_ID12("STI", "Flash 5.0", 0xbf2df18d, 0x8cb57a0e),
-- PCMCIA_MFC_DEVICE_PROD_ID12(1, "SanDisk", "ConnectPlus", 0x7a954bd9, 0x74be00c6),
- PCMCIA_DEVICE_NULL,
- };
- MODULE_DEVICE_TABLE(pcmcia, ide_ids);
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/hostap-monitor-mode.patch b/packages/kexecboot/linux-kexecboot-2.6.23/hostap-monitor-mode.patch
deleted file mode 100644
index 641fd19e50..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/hostap-monitor-mode.patch
+++ /dev/null
@@ -1,209 +0,0 @@
-This is a patch that I've been maintaining for a few years, and I'd
-really like to see it added to the mainstream zaurus kernel so I can
-finally stop distributing my own.
-
-This patch only effects the card while in monitor mode, and does not
-cause any known stability issues.
-
-http://patches.aircrack-ng.org/hostap-kernel-2.6.18.patch
-
-Rick Farina (Zero_Chaos)
-
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_80211_tx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -69,6 +69,9 @@
- iface = netdev_priv(dev);
- local = iface->local;
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ goto xmit;
-+
- if (skb->len < ETH_HLEN) {
- printk(KERN_DEBUG "%s: hostap_data_start_xmit: short skb "
- "(len=%d)\n", dev->name, skb->len);
-@@ -234,6 +237,7 @@
- memcpy(skb_put(skb, ETH_ALEN), &hdr.addr4, ETH_ALEN);
- }
-
-+xmit:
- iface->stats.tx_packets++;
- iface->stats.tx_bytes += skb->len;
-
-@@ -404,8 +408,6 @@
- }
-
- if (skb->len < 24) {
-- printk(KERN_DEBUG "%s: hostap_master_start_xmit: short skb "
-- "(len=%d)\n", dev->name, skb->len);
- ret = 0;
- iface->stats.tx_dropped++;
- goto fail;
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.orig
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_cs.c.rej
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_hw.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1005,6 +1005,35 @@
- return fid;
- }
-
-+static int prism2_monitor_enable(struct net_device *dev)
-+{
-+ if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE, 5)) {
-+ printk(KERN_DEBUG "Port type setting for monitor mode "
-+ "failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hfa384x_cmd(dev, HFA384X_CMDCODE_TEST | (0x0a << 8),
-+ 0, NULL, NULL)) {
-+ printk(KERN_DEBUG "Could not enter testmode 0x0a\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-+ HFA384X_WEPFLAGS_PRIVACYINVOKED |
-+ HFA384X_WEPFLAGS_HOSTENCRYPT |
-+ HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-+ printk(KERN_DEBUG "WEP flags setting failed\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ if (hostap_set_word(dev, HFA384X_RID_PROMISCUOUSMODE, 1)) {
-+ printk(KERN_DEBUG "Could not set promiscuous mode\n");
-+ return -EOPNOTSUPP;
-+ }
-+
-+ return 0;
-+}
-
- static int prism2_reset_port(struct net_device *dev)
- {
-@@ -1031,6 +1060,10 @@
- "port\n", dev->name);
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ return prism2_monitor_enable(dev);
-+
- /* It looks like at least some STA firmware versions reset
- * fragmentation threshold back to 2346 after enable command. Restore
- * the configured value, if it differs from this default. */
-@@ -1466,6 +1499,10 @@
- return 1;
- }
-
-+ if (local->iw_mode == IW_MODE_MONITOR)
-+ /* force mode 0x0a after port 0 reset */
-+ prism2_monitor_enable(dev);
-+
- local->hw_ready = 1;
- local->hw_reset_tries = 0;
- local->hw_resetting = 0;
-@@ -3156,6 +3193,7 @@
- local->func->hw_config = prism2_hw_config;
- local->func->hw_reset = prism2_hw_reset;
- local->func->hw_shutdown = prism2_hw_shutdown;
-+ local->func->monitor_enable = prism2_monitor_enable;
- local->func->reset_port = prism2_reset_port;
- local->func->schedule_reset = prism2_schedule_reset;
- #ifdef PRISM2_DOWNLOAD_SUPPORT
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_hw.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_ioctl.c 2006-09-21 01:30:18.000000000 -0400
-@@ -1104,33 +1104,7 @@
-
- printk(KERN_DEBUG "Enabling monitor mode\n");
- hostap_monitor_set_type(local);
--
-- if (hostap_set_word(dev, HFA384X_RID_CNFPORTTYPE,
-- HFA384X_PORTTYPE_PSEUDO_IBSS)) {
-- printk(KERN_DEBUG "Port type setting for monitor mode "
-- "failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- /* Host decrypt is needed to get the IV and ICV fields;
-- * however, monitor mode seems to remove WEP flag from frame
-- * control field */
-- if (hostap_set_word(dev, HFA384X_RID_CNFWEPFLAGS,
-- HFA384X_WEPFLAGS_HOSTENCRYPT |
-- HFA384X_WEPFLAGS_HOSTDECRYPT)) {
-- printk(KERN_DEBUG "WEP flags setting failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- if (local->func->reset_port(dev) ||
-- local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-- (HFA384X_TEST_MONITOR << 8),
-- 0, NULL, NULL)) {
-- printk(KERN_DEBUG "Setting monitor mode failed\n");
-- return -EOPNOTSUPP;
-- }
--
-- return 0;
-+ return local->func->reset_port(dev);
- }
-
-
-@@ -1199,7 +1173,7 @@
- local->iw_mode = *mode;
-
- if (local->iw_mode == IW_MODE_MONITOR)
-- hostap_monitor_mode_enable(local);
-+ return hostap_monitor_mode_enable(local);
- else if (local->iw_mode == IW_MODE_MASTER && !local->host_encrypt &&
- !local->fw_encrypt_ok) {
- printk(KERN_DEBUG "%s: defaulting to host-based encryption as "
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_main.c 2006-09-21 01:30:18.000000000 -0400
-@@ -331,7 +331,7 @@
- if (local->iw_mode == IW_MODE_REPEAT)
- return HFA384X_PORTTYPE_WDS;
- if (local->iw_mode == IW_MODE_MONITOR)
-- return HFA384X_PORTTYPE_PSEUDO_IBSS;
-+ return 5; /*HFA384X_PORTTYPE_PSEUDO_IBSS;*/
- return HFA384X_PORTTYPE_HOSTAP;
- }
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_main.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_pci.c 2006-09-21 01:30:18.000000000 -0400
-@@ -48,6 +48,8 @@
- { 0x1260, 0x3873, PCI_ANY_ID, PCI_ANY_ID },
- /* Samsung MagicLAN SWL-2210P */
- { 0x167d, 0xa000, PCI_ANY_ID, PCI_ANY_ID },
-+ /* NETGEAR MA311 */
-+ { 0x1385, 0x3872, PCI_ANY_ID, PCI_ANY_ID },
- { 0 }
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_pci.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_plx.c 2006-09-21 01:30:18.000000000 -0400
-@@ -101,6 +101,7 @@
- { 0xc250, 0x0002 } /* EMTAC A2424i */,
- { 0xd601, 0x0002 } /* Z-Com XI300 */,
- { 0xd601, 0x0005 } /* Zcomax XI-325H 200mW */,
-+ { 0xd601, 0x0010 } /* Zcomax XI-325H 100mW */,
- { 0, 0}
- };
-
-Only in linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap: hostap_plx.c.orig
-diff -ur linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h
---- linux-2.6.18-gentoo/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:26:27.000000000 -0400
-+++ linux-2.6.18-gentoo-rawtx/drivers/net/wireless/hostap/hostap_wlan.h 2006-09-21 01:30:18.000000000 -0400
-@@ -575,6 +575,7 @@
- int (*hw_config)(struct net_device *dev, int initial);
- void (*hw_reset)(struct net_device *dev);
- void (*hw_shutdown)(struct net_device *dev, int no_disable);
-+ int (*monitor_enable)(struct net_device *dev);
- int (*reset_port)(struct net_device *dev);
- void (*schedule_reset)(local_info_t *local);
- int (*download)(local_info_t *local,
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/hrw-add-wcf11-to-hostap.patch b/packages/kexecboot/linux-kexecboot-2.6.23/hrw-add-wcf11-to-hostap.patch
deleted file mode 100644
index 5ee8b2042c..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/hrw-add-wcf11-to-hostap.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From: Marcin Juszkiewicz <openembedded@haerwu.biz>
-
-Linksys WCF11 submitted by Ångström user.
-
-"The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P", "RevA",
-0xa5f472c2, 0x9c05598d, 0xc9049a39, 0x57a66194
-manfid: 0x0274, 0x3301
-
-Signed-off-by: Marcin Juszkiewicz <openembedded@haerwu.biz>
-Acked-by: Pavel Roskin <proski@gnu.org>
-
----
- drivers/net/wireless/hostap/hostap_cs.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- linux-2.6.23.orig/drivers/net/wireless/hostap/hostap_cs.c
-+++ linux-2.6.23/drivers/net/wireless/hostap/hostap_cs.c
-@@ -887,10 +887,13 @@ static struct pcmcia_device_id hostap_cs
- "Ver. 1.00",
- 0x5cd01705, 0x4271660f, 0x9d08ee12),
- PCMCIA_DEVICE_PROD_ID123(
- "corega", "WL PCCL-11", "ISL37300P",
- 0xa21501a, 0x59868926, 0xc9049a39),
-+ PCMCIA_DEVICE_PROD_ID123(
-+ "The Linksys Group, Inc.", "Wireless Network CF Card", "ISL37300P",
-+ 0xa5f472c2, 0x9c05598d, 0xc9049a39),
- PCMCIA_DEVICE_NULL
- };
- MODULE_DEVICE_TABLE(pcmcia, hostap_cs_ids);
-
-
diff --git a/packages/kexecboot/linux-kexecboot-2.6.23/htcuni-acx.patch b/packages/kexecboot/linux-kexecboot-2.6.23/htcuni-acx.patch
deleted file mode 100644
index 769674c935..0000000000
--- a/packages/kexecboot/linux-kexecboot-2.6.23/htcuni-acx.patch
+++ /dev/null
@@ -1,33526 +0,0 @@
----
- drivers/net/wireless/Kconfig | 31
- drivers/net/wireless/Makefile | 2
- drivers/net/wireless/acx/Kconfig | 113
- drivers/net/wireless/acx/Makefile | 21
- drivers/net/wireless/acx/acx.h | 14
- drivers/net/wireless/acx/acx_config.h | 50
- drivers/net/wireless/acx/acx_func.h | 710 ++
- drivers/net/wireless/acx/acx_hw.h | 18
- drivers/net/wireless/acx/acx_struct.h | 2114 ++++++++
- drivers/net/wireless/acx/common.c | 7388 ++++++++++++++++++++++++++++
- drivers/net/wireless/acx/conv.c | 504 +
- drivers/net/wireless/acx/cs.c | 5703 +++++++++++++++++++++
- drivers/net/wireless/acx/htcsable_acx.c | 118
- drivers/net/wireless/acx/htcuniversal_acx.c | 108
- drivers/net/wireless/acx/hx4700_acx.c | 108
- drivers/net/wireless/acx/ioctl.c | 2748 ++++++++++
- drivers/net/wireless/acx/mem.c | 5363 ++++++++++++++++++++
- drivers/net/wireless/acx/pci.c | 4234 ++++++++++++++++
- drivers/net/wireless/acx/rx3000_acx.c | 110
- drivers/net/wireless/acx/setrate.c | 213
- drivers/net/wireless/acx/usb.c | 1922 +++++++
- drivers/net/wireless/acx/wlan.c | 424 +
- drivers/net/wireless/acx/wlan_compat.h | 260
- drivers/net/wireless/acx/wlan_hdr.h | 497 +
- drivers/net/wireless/acx/wlan_mgmt.h | 582 ++
- 25 files changed, 33355 insertions(+)
-
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_config.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_config.h 2007-08-23 18:46:40.000000000 +0200
-@@ -0,0 +1,50 @@
-+#define ACX_RELEASE "v0.3.36"
-+
-+/*
-+ * Test out all the channels in reg domain 0x10
-+ */
-+#define ACX_ALLOW_ALLCHANNELS
-+
-+/* set to 0 if you don't want any debugging code to be compiled in */
-+/* set to 1 if you want some debugging */
-+/* set to 2 if you want extensive debug log */
-+#define ACX_DEBUG 0
-+
-+/*
-+ * Since we'll be changing channels a lot
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+*/
-+#define ACX_DEFAULT_MSG (L_ASSOC|L_INIT)
-+
-+/* assume 32bit I/O width
-+ * (16bit is also compatible with Compact Flash) */
-+#define ACX_IO_WIDTH 32
-+
-+/* Set this to 1 if you want monitor mode to use
-+ * phy header. Currently it is not useful anyway since we
-+ * don't know what useful info (if any) is in phy header.
-+ * If you want faster/smaller code, say 0 here */
-+#define WANT_PHY_HDR 0
-+
-+/* whether to do Tx descriptor cleanup in softirq (i.e. not in IRQ
-+ * handler) or not. Note that doing it later does slightly increase
-+ * system load, so still do that stuff in the IRQ handler for now,
-+ * even if that probably means worse latency */
-+#define TX_CLEANUP_IN_SOFTIRQ 0
-+
-+/* if you want very experimental 802.11 power save mode features */
-+#define POWER_SAVE_80211 0
-+
-+/* if you want very early packet fragmentation bits and pieces */
-+#define ACX_FRAGMENTATION 0
-+
-+/* Locking: */
-+/* very talkative */
-+/* #define PARANOID_LOCKING 1 */
-+/* normal (use when bug-free) */
-+#define DO_LOCKING 1
-+/* else locking is disabled! */
-+
-+/* 0 - normal mode */
-+/* 1 - development/debug: probe for IEs on modprobe */
-+#define CMD_DISCOVERY 0
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_func.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_func.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,710 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+
-+/***********************************************************************
-+** LOGGING
-+**
-+** - Avoid SHOUTING needlessly. Avoid excessive verbosity.
-+** Gradually remove messages which are old debugging aids.
-+**
-+** - Use printk() for messages which are to be always logged.
-+** Supply either 'acx:' or '<devname>:' prefix so that user
-+** can figure out who's speaking among other kernel chatter.
-+** acx: is for general issues (e.g. "acx: no firmware image!")
-+** while <devname>: is related to a particular device
-+** (think about multi-card setup). Double check that message
-+** is not confusing to the average user.
-+**
-+** - use printk KERN_xxx level only if message is not a WARNING
-+** but is INFO, ERR etc.
-+**
-+** - Use printk_ratelimited() for messages which may flood
-+** (e.g. "rx DUP pkt!").
-+**
-+** - Use log() for messages which may be omitted (and they
-+** _will_ be omitted in non-debug builds). Note that
-+** message levels may be disabled at compile-time selectively,
-+** thus select them wisely. Example: L_DEBUG is the lowest
-+** (most likely to be compiled out) -> use for less important stuff.
-+**
-+** - Do not print important stuff with log(), or else people
-+** will never build non-debug driver.
-+**
-+** Style:
-+** hex: capital letters, zero filled (e.g. 0x02AC)
-+** str: dont start from capitals, no trailing periods ("tx: queue is stopped")
-+*/
-+#if ACX_DEBUG > 1
-+
-+void log_fn_enter(const char *funcname);
-+void log_fn_exit(const char *funcname);
-+void log_fn_exit_v(const char *funcname, int v);
-+
-+#define FN_ENTER \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_enter(__func__); \
-+ } \
-+ } while (0)
-+
-+#define FN_EXIT1(v) \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit_v(__func__, v); \
-+ } \
-+ } while (0)
-+#define FN_EXIT0 \
-+ do { \
-+ if (unlikely(acx_debug & L_FUNC)) { \
-+ log_fn_exit(__func__); \
-+ } \
-+ } while (0)
-+
-+#else
-+
-+#define FN_ENTER
-+#define FN_EXIT1(v)
-+#define FN_EXIT0
-+
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+#if ACX_DEBUG
-+
-+#define log(chan, args...) \
-+ do { \
-+ if (acx_debug & (chan)) \
-+ printk(KERN_DEBUG args); \
-+ } while (0)
-+#define printk_ratelimited(args...) printk(args)
-+
-+#else /* Non-debug build: */
-+
-+#define log(chan, args...)
-+/* Standard way of log flood prevention */
-+#define printk_ratelimited(args...) \
-+do { \
-+ if (printk_ratelimit()) \
-+ printk(args); \
-+} while (0)
-+
-+#endif /* ACX_DEBUG */
-+
-+void acx_print_mac(const char *head, const u8 *mac, const char *tail);
-+
-+/* Optimized out to nothing in non-debug build */
-+static inline void
-+acxlog_mac(int level, const char *head, const u8 *mac, const char *tail)
-+{
-+ if (acx_debug & level) {
-+ acx_print_mac(head, mac, tail);
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** MAC address helpers
-+*/
-+static inline void
-+MAC_COPY(u8 *mac, const u8 *src)
-+{
-+ *(u32*)mac = *(u32*)src;
-+ ((u16*)mac)[2] = ((u16*)src)[2];
-+ /* kernel's memcpy will do the same: memcpy(dst, src, ETH_ALEN); */
-+}
-+
-+static inline void
-+MAC_FILL(u8 *mac, u8 val)
-+{
-+ memset(mac, val, ETH_ALEN);
-+}
-+
-+static inline void
-+MAC_BCAST(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = -1;
-+}
-+
-+static inline void
-+MAC_ZERO(u8 *mac)
-+{
-+ ((u16*)mac)[2] = *(u32*)mac = 0;
-+}
-+
-+static inline int
-+mac_is_equal(const u8 *a, const u8 *b)
-+{
-+ /* can't beat this */
-+ return memcmp(a, b, ETH_ALEN) == 0;
-+}
-+
-+static inline int
-+mac_is_bcast(const u8 *mac)
-+{
-+ /* AND together 4 first bytes with sign-extended 2 last bytes
-+ ** Only bcast address gives 0xffffffff. +1 gives 0 */
-+ return ( *(s32*)mac & ((s16*)mac)[2] ) + 1 == 0;
-+}
-+
-+static inline int
-+mac_is_zero(const u8 *mac)
-+{
-+ return ( *(u32*)mac | ((u16*)mac)[2] ) == 0;
-+}
-+
-+static inline int
-+mac_is_directed(const u8 *mac)
-+{
-+ return (mac[0] & 1)==0;
-+}
-+
-+static inline int
-+mac_is_mcast(const u8 *mac)
-+{
-+ return (mac[0] & 1) && !mac_is_bcast(mac);
-+}
-+
-+#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X"
-+#define MAC(bytevector) \
-+ ((unsigned char *)bytevector)[0], \
-+ ((unsigned char *)bytevector)[1], \
-+ ((unsigned char *)bytevector)[2], \
-+ ((unsigned char *)bytevector)[3], \
-+ ((unsigned char *)bytevector)[4], \
-+ ((unsigned char *)bytevector)[5]
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define TO_STRING(x) #x
-+#define STRING(x) TO_STRING(x)
-+
-+#define CLEAR_BIT(val, mask) ((val) &= ~(mask))
-+#define SET_BIT(val, mask) ((val) |= (mask))
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+lowest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (!(v & 0xf)) { v>>=4; n+=4; }
-+ while (!(v & 1)) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline unsigned int
-+highest_bit(u16 v)
-+{
-+ unsigned int n = 0;
-+ while (v>0xf) { v>>=4; n+=4; }
-+ while (v>1) { v>>=1; n++; }
-+ return n;
-+}
-+
-+/* undefined if v==0 */
-+static inline int
-+has_only_one_bit(u16 v)
-+{
-+ return ((v-1) ^ v) >= v;
-+}
-+
-+
-+static inline int
-+is_hidden_essid(char *essid)
-+{
-+ return (('\0' == essid[0]) ||
-+ ((' ' == essid[0]) && ('\0' == essid[1])));
-+}
-+
-+/***********************************************************************
-+** LOCKING
-+** We have adev->sem and adev->lock.
-+**
-+** We employ following naming convention in order to get locking right:
-+**
-+** acx_e_xxxx - external entry points called from process context.
-+** It is okay to sleep. adev->sem is to be taken on entry.
-+** acx_i_xxxx - external entry points possibly called from atomic context.
-+** Sleeping is not allowed (and thus down(sem) is not legal!)
-+** acx_s_xxxx - potentially sleeping functions. Do not ever call under lock!
-+** acx_l_xxxx - functions which expect lock to be already taken.
-+** rest - non-sleeping functions which do not require locking
-+** but may be run under lock
-+**
-+** A small number of local helpers do not have acx_[eisl]_ prefix.
-+** They are always close to caller and are to be reviewed locally.
-+**
-+** Theory of operation:
-+**
-+** All process-context entry points (_e_ functions) take sem
-+** immediately. IRQ handler and other 'atomic-context' entry points
-+** (_i_ functions) take lock immediately on entry, but dont take sem
-+** because that might sleep.
-+**
-+** Thus *all* code is either protected by sem or lock, or both.
-+**
-+** Code which must not run concurrently with IRQ takes lock.
-+** Such code is marked with _l_.
-+**
-+** This results in the following rules of thumb useful in code review:
-+**
-+** + If a function calls _s_ fn, it must be an _s_ itself.
-+** + You can call _l_ fn only (a) from another _l_ fn
-+** or (b) from _s_, _e_ or _i_ fn by taking lock, calling _l_,
-+** and dropping lock.
-+** + All IRQ code runs under lock.
-+** + Any _s_ fn is running under sem.
-+** + Code under sem can race only with IRQ code.
-+** + Code under sem+lock cannot race with anything.
-+*/
-+
-+/* These functions *must* be inline or they will break horribly on SPARC, due
-+ * to its weird semantics for save/restore flags */
-+
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+
-+void acx_lock_debug(acx_device_t *adev, const char* where);
-+void acx_unlock_debug(acx_device_t *adev, const char* where);
-+void acx_down_debug(acx_device_t *adev, const char* where);
-+void acx_up_debug(acx_device_t *adev, const char* where);
-+void acx_lock_unhold(void);
-+void acx_sem_unhold(void);
-+
-+static inline void
-+acx_lock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_lock_debug(adev, where);
-+ spin_lock_irqsave(&adev->lock, *fp);
-+}
-+static inline void
-+acx_unlock_helper(acx_device_t *adev, unsigned long *fp, const char* where)
-+{
-+ acx_unlock_debug(adev, where);
-+ spin_unlock_irqrestore(&adev->lock, *fp);
-+}
-+static inline void
-+acx_down_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_down_debug(adev, where);
-+}
-+static inline void
-+acx_up_helper(acx_device_t *adev, const char* where)
-+{
-+ acx_up_debug(adev, where);
-+}
-+#define acx_lock(adev, flags) acx_lock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_unlock(adev, flags) acx_unlock_helper(adev, &(flags), __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_lock(adev) acx_down_helper(adev, __FILE__ ":" STRING(__LINE__))
-+#define acx_sem_unlock(adev) acx_up_helper(adev, __FILE__ ":" STRING(__LINE__))
-+
-+#elif defined(DO_LOCKING)
-+
-+#define acx_lock(adev, flags) spin_lock_irqsave(&adev->lock, flags)
-+#define acx_unlock(adev, flags) spin_unlock_irqrestore(&adev->lock, flags)
-+#define acx_sem_lock(adev) down(&adev->sem)
-+#define acx_sem_unlock(adev) up(&adev->sem)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#else /* no locking! :( */
-+
-+#define acx_lock(adev, flags) ((void)0)
-+#define acx_unlock(adev, flags) ((void)0)
-+#define acx_sem_lock(adev) ((void)0)
-+#define acx_sem_unlock(adev) ((void)0)
-+#define acx_lock_unhold() ((void)0)
-+#define acx_sem_unhold() ((void)0)
-+
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* Can race with rx path (which is not protected by sem):
-+** rx -> process_[re]assocresp() -> set_status(ASSOCIATED) -> wake_queue()
-+** Can race with tx_complete IRQ:
-+** IRQ -> acxpci_l_clean_txdesc -> acx_wake_queue
-+** Review carefully all callsites */
-+static inline void
-+acx_stop_queue(struct net_device *ndev, const char *msg)
-+{
-+ if (netif_queue_stopped(ndev))
-+ return;
-+
-+ netif_stop_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: stop queue %s\n", msg);
-+}
-+
-+static inline int
-+acx_queue_stopped(struct net_device *ndev)
-+{
-+ return netif_queue_stopped(ndev);
-+}
-+
-+/*
-+static inline void
-+acx_start_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_start_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: start queue %s\n", msg);
-+}
-+*/
-+
-+static inline void
-+acx_wake_queue(struct net_device *ndev, const char *msg)
-+{
-+ netif_wake_queue(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: wake queue %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_off(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_off(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier off %s\n", msg);
-+}
-+
-+static inline void
-+acx_carrier_on(struct net_device *ndev, const char *msg)
-+{
-+ netif_carrier_on(ndev);
-+ if (msg)
-+ log(L_BUFT, "tx: carrier on %s\n", msg);
-+}
-+
-+/* This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere. */
-+void acx_set_status(acx_device_t *adev, u16 status);
-+
-+
-+/***********************************************************************
-+** Communication with firmware
-+*/
-+#define CMD_TIMEOUT_MS(n) (n)
-+#define ACX_CMD_TIMEOUT_DEFAULT CMD_TIMEOUT_MS(50)
-+
-+#if ACX_DEBUG
-+
-+/* We want to log cmd names */
-+int acxpci_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxmem_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+int acxusb_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr);
-+static inline int
-+acx_s_issue_cmd_timeo_debug(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout, const char* cmdstr)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+ return acxusb_s_issue_cmd_timeo_debug(adev, cmd, param, len, timeout, cmdstr);
-+}
-+#define acx_s_issue_cmd(adev,cmd,param,len) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,ACX_CMD_TIMEOUT_DEFAULT,#cmd)
-+#define acx_s_issue_cmd_timeo(adev,cmd,param,len,timeo) \
-+ acx_s_issue_cmd_timeo_debug(adev,cmd,param,len,timeo,#cmd)
-+int acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_configure(adev,pdr,type) \
-+ acx_s_configure_debug(adev,pdr,type,#type)
-+int acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type, const char* str);
-+#define acx_s_interrogate(adev,pdr,type) \
-+ acx_s_interrogate_debug(adev,pdr,type,#type)
-+
-+#else
-+
-+int acxpci_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxmem_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+int acxusb_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout);
-+static inline int
-+acx_s_issue_cmd_timeo(acx_device_t *adev, unsigned cmd, void *param, unsigned len, unsigned timeout)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, timeout);
-+}
-+static inline int
-+acx_s_issue_cmd(acx_device_t *adev, unsigned cmd, void *param, unsigned len)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ if (IS_PCI(adev))
-+ return acxpci_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+ return acxusb_s_issue_cmd_timeo(adev, cmd, param, len, ACX_CMD_TIMEOUT_DEFAULT);
-+}
-+int acx_s_configure(acx_device_t *adev, void *pdr, int type);
-+int acx_s_interrogate(acx_device_t *adev, void *pdr, int type);
-+
-+#endif
-+
-+void acx_s_cmd_start_scan(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Ioctls
-+*/
-+int
-+acx111pci_ioctl_info(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100pci_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+int
-+acx100mem_ioctl_set_phy_amp_bias(
-+ struct net_device *ndev,
-+ struct iw_request_info *info,
-+ struct iw_param *vwrq,
-+ char *extra);
-+
-+
-+/***********************************************************************
-+** /proc
-+*/
-+#ifdef CONFIG_PROC_FS
-+int acx_proc_register_entries(const struct net_device *ndev);
-+int acx_proc_unregister_entries(const struct net_device *ndev);
-+#else
-+static inline int
-+acx_proc_register_entries(const struct net_device *ndev) { return OK; }
-+static inline int
-+acx_proc_unregister_entries(const struct net_device *ndev) { return OK; }
-+#endif
-+
-+
-+/***********************************************************************
-+*/
-+firmware_image_t *acx_s_read_fw(struct device *dev, const char *file, u32 *size);
-+int acxpci_s_upload_radio(acx_device_t *adev);
-+int acxmem_s_upload_radio(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+** Unsorted yet :)
-+*/
-+int acxpci_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxmem_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+int acxusb_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf);
-+static inline int
-+acx_s_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_read_phy_reg(adev, reg, charbuf);
-+ if (IS_PCI(adev))
-+ return acxpci_s_read_phy_reg(adev, reg, charbuf);
-+ return acxusb_s_read_phy_reg(adev, reg, charbuf);
-+}
-+
-+int acxpci_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxmem_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+int acxusb_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value);
-+static inline int
-+acx_s_write_phy_reg(acx_device_t *adev, u32 reg, u8 value)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_s_write_phy_reg(adev, reg, value);
-+ if (IS_PCI(adev))
-+ return acxpci_s_write_phy_reg(adev, reg, value);
-+ return acxusb_s_write_phy_reg(adev, reg, value);
-+}
-+
-+tx_t* acxpci_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxmem_l_alloc_tx(acx_device_t *adev);
-+tx_t* acxusb_l_alloc_tx(acx_device_t *adev);
-+static inline tx_t*
-+acx_l_alloc_tx(acx_device_t *adev)
-+{
-+ if (IS_MEM(adev))
-+ return acxmem_l_alloc_tx(adev);
-+ if (IS_PCI(adev))
-+ return acxpci_l_alloc_tx(adev);
-+ return acxusb_l_alloc_tx(adev);
-+}
-+
-+void acxusb_l_dealloc_tx(tx_t *tx_opaque);
-+void acxmem_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void
-+acx_l_dealloc_tx(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#ifdef ACX_MEM
-+ acxmem_l_dealloc_tx (adev, tx_opaque);
-+#else
-+ if (IS_USB(adev))
-+ acxusb_l_dealloc_tx(tx_opaque);
-+#endif
-+}
-+
-+void* acxpci_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxmem_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+void* acxusb_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque);
-+static inline void*
-+acx_l_get_txbuf(acx_device_t *adev, tx_t *tx_opaque)
-+{
-+#if defined (ACX_MEM)
-+ return acxmem_l_get_txbuf(adev, tx_opaque);
-+#else
-+ if (IS_PCI(adev))
-+ return acxpci_l_get_txbuf(adev, tx_opaque);
-+ return acxusb_l_get_txbuf(adev, tx_opaque);
-+#endif
-+}
-+
-+void acxpci_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxmem_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+void acxusb_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len);
-+static inline void
-+acx_l_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len)
-+{
-+#if defined (ACX_MEM)
-+ acxmem_l_tx_data(adev, tx_opaque, len);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_l_tx_data(adev, tx_opaque, len);
-+ else
-+ acxusb_l_tx_data(adev, tx_opaque, len);
-+#endif
-+}
-+
-+static inline wlan_hdr_t*
-+acx_get_wlan_hdr(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ return (wlan_hdr_t*)((u8*)&rxbuf->hdr_a3 + adev->phy_header_len);
-+}
-+
-+void acxpci_l_power_led(acx_device_t *adev, int enable);
-+int acxpci_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxpci_l_clean_txdesc(acx_device_t *adev);
-+void acxpci_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxpci_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxpci_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxpci_free_desc_queues(acx_device_t *adev);
-+char* acxpci_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxpci_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxpci_set_interrupt_mask(acx_device_t *adev);
-+int acx100pci_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acxmem_l_power_led(acx_device_t *adev, int enable);
-+int acxmem_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf);
-+unsigned int acxmem_l_clean_txdesc(acx_device_t *adev);
-+void acxmem_l_clean_txdesc_emergency(acx_device_t *adev);
-+int acxmem_s_create_hostdesc_queues(acx_device_t *adev);
-+void acxmem_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start);
-+void acxmem_free_desc_queues(acx_device_t *adev);
-+char* acxmem_s_proc_diag_output(char *p, acx_device_t *adev);
-+int acxmem_proc_eeprom_output(char *p, acx_device_t *adev);
-+void acxmem_set_interrupt_mask(acx_device_t *adev);
-+int acx100mem_s_set_tx_level(acx_device_t *adev, u8 level_dbm);
-+
-+void acx_s_msleep(int ms);
-+int acx_s_init_mac(acx_device_t *adev);
-+void acx_set_reg_domain(acx_device_t *adev, unsigned char reg_dom_id);
-+void acx_set_timer(acx_device_t *adev, int timeout_us);
-+void acx_update_capabilities(acx_device_t *adev);
-+void acx_s_start(acx_device_t *adev);
-+
-+void acx_s_update_card_settings(acx_device_t *adev);
-+void acx_s_parse_configoption(acx_device_t *adev, const acx111_ie_configoption_t *pcfg);
-+void acx_l_update_ratevector(acx_device_t *adev);
-+
-+void acx_init_task_scheduler(acx_device_t *adev);
-+void acx_schedule_task(acx_device_t *adev, unsigned int set_flag);
-+
-+int acx_e_ioctl_old(struct net_device *ndev, struct ifreq *ifr, int cmd);
-+
-+client_t *acx_l_sta_list_get(acx_device_t *adev, const u8 *address);
-+void acx_l_sta_list_del(acx_device_t *adev, client_t *clt);
-+
-+int acx_l_transmit_disassoc(acx_device_t *adev, client_t *clt);
-+void acx_i_timer(unsigned long a);
-+int acx_s_complete_scan(acx_device_t *adev);
-+
-+struct sk_buff *acx_rxbuf_to_ether(acx_device_t *adev, rxbuffer_t *rxbuf);
-+int acx_ether_to_txbuf(acx_device_t *adev, void *txbuf, const struct sk_buff *skb);
-+
-+u8 acx_signal_determine_quality(u8 signal, u8 noise);
-+
-+void acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf);
-+void acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 intended_rate, u8 rate100, u16 rate111, u8 error,
-+ int pkts_to_ignore);
-+
-+void acx_dump_bytes(const void *, int);
-+void acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr);
-+
-+u8 acx_rate111to100(u16);
-+
-+void acx_s_set_defaults(acx_device_t *adev);
-+
-+#if !ACX_DEBUG
-+static inline const char* acx_get_packet_type_string(u16 fc) { return ""; }
-+#else
-+const char* acx_get_packet_type_string(u16 fc);
-+#endif
-+const char* acx_cmd_status_str(unsigned int state);
-+
-+int acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev);
-+
-+void great_inquisitor(acx_device_t *adev);
-+
-+void acx_s_get_firmware_version(acx_device_t *adev);
-+void acx_display_hardware_details(acx_device_t *adev);
-+
-+int acx_e_change_mtu(struct net_device *ndev, int mtu);
-+struct net_device_stats* acx_e_get_stats(struct net_device *ndev);
-+struct iw_statistics* acx_e_get_wireless_stats(struct net_device *ndev);
-+
-+#ifdef ACX_MEM
-+int __init acxmem_e_init_module(void);
-+void __exit acxmem_e_cleanup_module(void);
-+void acxmem_e_release(struct device *dev);
-+#else
-+int __init acxpci_e_init_module(void);
-+int __init acxusb_e_init_module(void);
-+void __exit acxpci_e_cleanup_module(void);
-+void __exit acxusb_e_cleanup_module(void);
-+#endif
-+int __init acx_cs_init(void);
-+void __exit acx_cs_cleanup(void);
-Index: linux-2.6.22/drivers/net/wireless/acx/acx.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,14 @@
-+#if defined(CONFIG_ACX_MEM) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#if defined(CONFIG_ACX_CS) && !defined(ACX_MEM)
-+#define ACX_MEM
-+#endif
-+
-+#include "acx_config.h"
-+#include "wlan_compat.h"
-+#include "wlan_hdr.h"
-+#include "wlan_mgmt.h"
-+#include "acx_struct.h"
-+#include "acx_func.h"
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_hw.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_hw.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,18 @@
-+/*
-+ * Interface for ACX slave memory driver
-+ *
-+ * Copyright (c) 2006 SDG Systems, LLC
-+ *
-+ * GPL
-+ *
-+ */
-+
-+#ifndef _ACX_HW_H
-+#define _ACX_HW_H
-+
-+struct acx_hardware_data {
-+ int (*start_hw)( void );
-+ int (*stop_hw)( void );
-+};
-+
-+#endif /* _ACX_HW_H */
-Index: linux-2.6.22/drivers/net/wireless/acx/acx_struct.h
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/acx_struct.h 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,2114 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+/***********************************************************************
-+** Forward declarations of types
-+*/
-+typedef struct tx tx_t;
-+typedef struct acx_device acx_device_t;
-+typedef struct client client_t;
-+typedef struct rxdesc rxdesc_t;
-+typedef struct txdesc txdesc_t;
-+typedef struct rxhostdesc rxhostdesc_t;
-+typedef struct txhostdesc txhostdesc_t;
-+
-+
-+/***********************************************************************
-+** Debug / log functionality
-+*/
-+enum {
-+ L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */
-+ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */
-+ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */
-+ L_ASSOC = (ACX_DEBUG>0)*0x0008, /* assocation (network join) and station log */
-+ L_FUNC = (ACX_DEBUG>1)*0x0020, /* logging of function enter / leave */
-+ L_XFER = (ACX_DEBUG>1)*0x0080, /* logging of transfers and mgmt */
-+ L_DATA = (ACX_DEBUG>1)*0x0100, /* logging of transfer data */
-+ L_DEBUG = (ACX_DEBUG>1)*0x0200, /* log of debug info */
-+ L_IOCTL = (ACX_DEBUG>0)*0x0400, /* log ioctl calls */
-+ L_CTL = (ACX_DEBUG>1)*0x0800, /* log of low-level ctl commands */
-+ L_BUFR = (ACX_DEBUG>1)*0x1000, /* debug rx buffer mgmt (ring buffer etc.) */
-+ L_XFER_BEACON = (ACX_DEBUG>1)*0x2000, /* also log beacon packets */
-+ L_BUFT = (ACX_DEBUG>1)*0x4000, /* debug tx buffer mgmt (ring buffer etc.) */
-+ L_USBRXTX = (ACX_DEBUG>0)*0x8000, /* debug USB rx/tx operations */
-+ L_BUF = L_BUFR + L_BUFT,
-+ L_ANY = 0xffff
-+};
-+
-+#if ACX_DEBUG
-+extern unsigned int acx_debug;
-+#else
-+enum { acx_debug = 0 };
-+#endif
-+
-+
-+/***********************************************************************
-+** Random helpers
-+*/
-+#define ACX_PACKED __attribute__ ((packed))
-+
-+#define VEC_SIZE(a) (sizeof(a)/sizeof(a[0]))
-+
-+/* Use worker_queues for 2.5/2.6 kernels and queue tasks for 2.4 kernels
-+ (used for the 'bottom half' of the interrupt routine) */
-+
-+#include <linux/workqueue.h>
-+#define USE_WORKER_TASKS
-+#define WORK_STRUCT struct work_struct
-+#define SCHEDULE_WORK schedule_work
-+#define FLUSH_SCHEDULED_WORK flush_scheduled_work
-+
-+
-+/***********************************************************************
-+** Constants
-+*/
-+#define OK 0
-+#define NOT_OK 1
-+
-+/* The supported chip models */
-+#define CHIPTYPE_ACX100 1
-+#define CHIPTYPE_ACX111 2
-+
-+#define IS_ACX100(adev) ((adev)->chip_type == CHIPTYPE_ACX100)
-+#define IS_ACX111(adev) ((adev)->chip_type == CHIPTYPE_ACX111)
-+
-+/* Supported interfaces */
-+#define DEVTYPE_PCI 0
-+#define DEVTYPE_USB 1
-+#define DEVTYPE_MEM 2
-+
-+#if !defined(CONFIG_ACX_PCI) && !defined(CONFIG_ACX_USB) && !defined(CONFIG_ACX_MEM) && !defined(CONFIG_ACX_CS)
-+#error Driver must include PCI, USB, PCMCIA or memory mapped interface support. You selected none of them.
-+#endif
-+
-+#if defined(CONFIG_ACX_PCI)
-+ #if !defined(CONFIG_ACX_USB)
-+ #define IS_PCI(adev) 1
-+ #else
-+ #define IS_PCI(adev) ((adev)->dev_type == DEVTYPE_PCI)
-+ #endif
-+#else
-+ #define IS_PCI(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_USB)
-+ #if !defined(CONFIG_ACX_PCI)
-+ #define IS_USB(adev) 1
-+ #else
-+ #define IS_USB(adev) ((adev)->dev_type == DEVTYPE_USB)
-+ #endif
-+#else
-+ #define IS_USB(adev) 0
-+#endif
-+
-+#if defined(CONFIG_ACX_MEM) || defined(CONFIG_ACX_CS)
-+ #define IS_MEM(adev) 1
-+#else
-+ #define IS_MEM(adev) 0
-+#endif
-+
-+/* Driver defaults */
-+#define DEFAULT_DTIM_INTERVAL 10
-+/* used to be 2048, but FreeBSD driver changed it to 4096 to work properly
-+** in noisy wlans */
-+#define DEFAULT_MSDU_LIFETIME 4096
-+#define DEFAULT_RTS_THRESHOLD 2312 /* max. size: disable RTS mechanism */
-+#define DEFAULT_BEACON_INTERVAL 100
-+
-+#define ACX100_BAP_DATALEN_MAX 4096
-+#define ACX100_RID_GUESSING_MAXLEN 2048 /* I'm not really sure */
-+#define ACX100_RIDDATA_MAXLEN ACX100_RID_GUESSING_MAXLEN
-+
-+/* Support Constants */
-+/* Radio type names, found in Win98 driver's TIACXLN.INF */
-+#define RADIO_MAXIM_0D 0x0d
-+#define RADIO_RFMD_11 0x11
-+#define RADIO_RALINK_15 0x15
-+/* used in ACX111 cards (WG311v2, WL-121, ...): */
-+#define RADIO_RADIA_16 0x16
-+/* most likely *sometimes* used in ACX111 cards: */
-+#define RADIO_UNKNOWN_17 0x17
-+/* FwRad19.bin was found in a Safecom driver; must be an ACX111 radio: */
-+#define RADIO_UNKNOWN_19 0x19
-+#define RADIO_UNKNOWN_1B 0x1b /* radio in SafeCom SWLUT-54125 USB adapter; entirely unknown!! */
-+
-+/* Controller Commands */
-+/* can be found in table cmdTable in firmware "Rev. 1.5.0" (FW150) */
-+#define ACX1xx_CMD_RESET 0x00
-+#define ACX1xx_CMD_INTERROGATE 0x01
-+#define ACX1xx_CMD_CONFIGURE 0x02
-+#define ACX1xx_CMD_ENABLE_RX 0x03
-+#define ACX1xx_CMD_ENABLE_TX 0x04
-+#define ACX1xx_CMD_DISABLE_RX 0x05
-+#define ACX1xx_CMD_DISABLE_TX 0x06
-+#define ACX1xx_CMD_FLUSH_QUEUE 0x07
-+#define ACX1xx_CMD_SCAN 0x08
-+#define ACX1xx_CMD_STOP_SCAN 0x09
-+#define ACX1xx_CMD_CONFIG_TIM 0x0a
-+#define ACX1xx_CMD_JOIN 0x0b
-+#define ACX1xx_CMD_WEP_MGMT 0x0c
-+#ifdef OLD_FIRMWARE_VERSIONS
-+#define ACX100_CMD_HALT 0x0e /* mapped to unknownCMD in FW150 */
-+#else
-+#define ACX1xx_CMD_MEM_READ 0x0d
-+#define ACX1xx_CMD_MEM_WRITE 0x0e
-+#endif
-+#define ACX1xx_CMD_SLEEP 0x0f
-+#define ACX1xx_CMD_WAKE 0x10
-+#define ACX1xx_CMD_UNKNOWN_11 0x11 /* mapped to unknownCMD in FW150 */
-+#define ACX100_CMD_INIT_MEMORY 0x12
-+#define ACX1FF_CMD_DISABLE_RADIO 0x12 /* new firmware? TNETW1450? */
-+#define ACX1xx_CMD_CONFIG_BEACON 0x13
-+#define ACX1xx_CMD_CONFIG_PROBE_RESPONSE 0x14
-+#define ACX1xx_CMD_CONFIG_NULL_DATA 0x15
-+#define ACX1xx_CMD_CONFIG_PROBE_REQUEST 0x16
-+#define ACX1xx_CMD_FCC_TEST 0x17
-+#define ACX1xx_CMD_RADIOINIT 0x18
-+#define ACX111_CMD_RADIOCALIB 0x19
-+#define ACX1FF_CMD_NOISE_HISTOGRAM 0x1c /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_RX_RESET 0x1d /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_LNA_CONTROL 0x20 /* new firmware? TNETW1450? */
-+#define ACX1FF_CMD_CONTROL_DBG_TRACE 0x21 /* new firmware? TNETW1450? */
-+
-+/* 'After Interrupt' Commands */
-+#define ACX_AFTER_IRQ_CMD_STOP_SCAN 0x01
-+#define ACX_AFTER_IRQ_CMD_ASSOCIATE 0x02
-+#define ACX_AFTER_IRQ_CMD_RADIO_RECALIB 0x04
-+#define ACX_AFTER_IRQ_UPDATE_CARD_CFG 0x08
-+#define ACX_AFTER_IRQ_TX_CLEANUP 0x10
-+#define ACX_AFTER_IRQ_COMPLETE_SCAN 0x20
-+#define ACX_AFTER_IRQ_RESTART_SCAN 0x40
-+
-+/***********************************************************************
-+** Tx/Rx buffer sizes and watermarks
-+**
-+** This will alloc and use DMAable buffers of
-+** WLAN_A4FR_MAXLEN_WEP_FCS * (RX_CNT + TX_CNT) bytes
-+** RX/TX_CNT=32 -> ~150k DMA buffers
-+** RX/TX_CNT=16 -> ~75k DMA buffers
-+**
-+** 2005-10-10: reduced memory usage by lowering both to 16
-+*/
-+#define RX_CNT 16
-+#define TX_CNT 16
-+
-+/* we clean up txdescs when we have N free txdesc: */
-+#define TX_CLEAN_BACKLOG (TX_CNT/4)
-+#define TX_START_CLEAN (TX_CNT - TX_CLEAN_BACKLOG)
-+#define TX_EMERG_CLEAN 2
-+/* we stop queue if we have < N free txbufs: */
-+#define TX_STOP_QUEUE 3
-+/* we start queue if we have >= N free txbufs: */
-+#define TX_START_QUEUE 5
-+
-+/***********************************************************************
-+** Interrogate/Configure cmd constants
-+**
-+** NB: length includes JUST the data part of the IE
-+** (does not include size of the (type,len) pair)
-+**
-+** TODO: seems that acx100, acx100usb, acx111 have some differences,
-+** fix code with regard to this!
-+*/
-+
-+#define DEF_IE(name, val, len) enum { ACX##name=val, ACX##name##_LEN=len }
-+
-+/* Information Elements: Network Parameters, Static Configuration Entities */
-+/* these are handled by real_cfgtable in firmware "Rev 1.5.0" (FW150) */
-+DEF_IE(1xx_IE_UNKNOWN_00 ,0x0000, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_ACX_TIMER ,0x0001, 0x10);
-+DEF_IE(1xx_IE_POWER_MGMT ,0x0002, 0x06); /* TNETW1450: length 0x18!! */
-+DEF_IE(1xx_IE_QUEUE_CONFIG ,0x0003, 0x1c);
-+DEF_IE(100_IE_BLOCK_SIZE ,0x0004, 0x02);
-+DEF_IE(1FF_IE_SLOT_TIME ,0x0004, 0x08); /* later firmware versions only? */
-+DEF_IE(1xx_IE_MEMORY_CONFIG_OPTIONS ,0x0005, 0x14);
-+DEF_IE(1FF_IE_QUEUE_HEAD ,0x0005, 0x14 /* FIXME: length? */);
-+DEF_IE(1xx_IE_RATE_FALLBACK ,0x0006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_WEP_OPTIONS ,0x0007, 0x03);
-+DEF_IE(111_IE_RADIO_BAND ,0x0007, -1);
-+DEF_IE(1FF_IE_TIMING_CFG ,0x0007, -1); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_SSID ,0x0008, 0x20); /* huh? */
-+DEF_IE(1xx_IE_MEMORY_MAP ,0x0008, 0x28); /* huh? TNETW1450 has length 0x40!! */
-+DEF_IE(1xx_IE_SCAN_STATUS ,0x0009, 0x04); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_ASSOC_ID ,0x000a, 0x02);
-+DEF_IE(1xx_IE_UNKNOWN_0B ,0x000b, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_TX_POWER_LEVEL_TABLE ,0x000b, 0x18); /* later firmware versions; TNETW1450 only? */
-+DEF_IE(100_IE_UNKNOWN_0C ,0x000c, -1); /* very small implementation in FW150! */
-+/* ACX100 has an equivalent struct in the cmd mailbox directly after reset.
-+ * 0x14c seems extremely large, will trash stack on failure (memset!)
-+ * in case of small input struct --> OOPS! */
-+DEF_IE(111_IE_CONFIG_OPTIONS ,0x000c, 0x14c);
-+DEF_IE(1xx_IE_FWREV ,0x000d, 0x18);
-+DEF_IE(1xx_IE_FCS_ERROR_COUNT ,0x000e, 0x04);
-+DEF_IE(1xx_IE_MEDIUM_USAGE ,0x000f, 0x08);
-+DEF_IE(1xx_IE_RXCONFIG ,0x0010, 0x04);
-+DEF_IE(100_IE_UNKNOWN_11 ,0x0011, -1); /* NONBINARY: large implementation in FW150! link quality readings or so? */
-+DEF_IE(111_IE_QUEUE_THRESH ,0x0011, -1);
-+DEF_IE(100_IE_UNKNOWN_12 ,0x0012, -1); /* NONBINARY: VERY large implementation in FW150!! */
-+DEF_IE(111_IE_BSS_POWER_SAVE ,0x0012, /* -1 */ 2);
-+DEF_IE(1xx_IE_FIRMWARE_STATISTICS ,0x0013, 0x9c); /* TNETW1450: length 0x134!! */
-+DEF_IE(1FF_IE_RX_INTR_CONFIG ,0x0014, 0x14); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1xx_IE_FEATURE_CONFIG ,0x0015, 0x08);
-+DEF_IE(111_IE_KEY_CHOOSE ,0x0016, 0x04); /* for rekeying. really len=4?? */
-+DEF_IE(1FF_IE_MISC_CONFIG_TABLE ,0x0017, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_WONE_CONFIG ,0x0018, -1); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TID_CONFIG ,0x001a, 0x2c); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CALIB_ASSESSMENT ,0x001e, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_BEACON_FILTER_OPTIONS ,0x001f, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_LOW_RSSI_THRESH_OPT ,0x0020, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_NOISE_HISTOGRAM_RESULTS ,0x0021, 0x30); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_PACKET_DETECT_THRESH ,0x0023, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_TX_CONFIG_OPTIONS ,0x0024, 0x04); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_CCA_THRESHOLD ,0x0025, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_EVENT_MASK ,0x0026, 0x08); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_DTIM_PERIOD ,0x0027, 0x02); /* later firmware versions, TNETW1450 only? */
-+DEF_IE(1FF_IE_ACI_CONFIG_SET ,0x0029, 0x06); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1FF_IE_EEPROM_VER ,0x0030, 0x04); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_STATION_ID ,0x1001, 0x06);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1002 ,0x1002, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(111_IE_DOT11_FRAG_THRESH ,0x1002, -1); /* mapped to cfgInvalid in FW150; TNETW1450 has length 2!! */
-+DEF_IE(100_IE_DOT11_BEACON_PERIOD ,0x1003, 0x02); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_DTIM_PERIOD ,0x1004, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_MAX_RX_LIFETIME ,0x1004, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(1xx_IE_DOT11_SHORT_RETRY_LIMIT ,0x1005, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(1xx_IE_DOT11_LONG_RETRY_LIMIT ,0x1006, 0x01); /* TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE ,0x1007, 0x20); /* configure default keys; TNETW1450 has length 0x24!! */
-+DEF_IE(1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME ,0x1008, 0x04);
-+DEF_IE(1xx_IE_DOT11_GROUP_ADDR ,0x1009, -1);
-+DEF_IE(1xx_IE_DOT11_CURRENT_REG_DOMAIN ,0x100a, 0x02);
-+/* It's harmless to have larger struct. Use USB case always. */
-+DEF_IE(1xx_IE_DOT11_CURRENT_ANTENNA ,0x100b, 0x02); /* in fact len=1 for PCI */
-+DEF_IE(1xx_IE_DOT11_UNKNOWN_100C ,0x100c, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1xx_IE_DOT11_TX_POWER_LEVEL ,0x100d, 0x01); /* TNETW1450 has length 2!! */
-+DEF_IE(1xx_IE_DOT11_CURRENT_CCA_MODE ,0x100e, 0x02); /* in fact len=1 for PCI */
-+/* USB doesn't return anything - len==0?! */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD ,0x100f, 0x04);
-+DEF_IE(1xx_IE_DOT11_WEP_DEFAULT_KEY_SET ,0x1010, 0x01); /* set default key ID; TNETW1450: length 2 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1011 ,0x1011, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(1FF_IE_DOT11_CURR_5GHZ_REGDOM ,0x1011, -1); /* later firmware versions; maybe TNETW1450 only? */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1012 ,0x1012, -1); /* mapped to cfgInvalid in FW150 */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1013 ,0x1013, -1); /* mapped to cfgInvalid in FW150 */
-+
-+#if 0
-+/* Experimentally obtained on acx100, fw 1.9.8.b
-+** -1 means that fw returned 'invalid IE'
-+** 0200 FC00 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx100 fw does not update len field (thus len=256-4=FC here)
-+** A number of IEs seem to trash type,len fields
-+** IEs marked 'huge' return gobs of data (no poison bytes remain)
-+*/
-+DEF_IE(100_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(100_IE_INVAL_01, 0x0001, -1); /* IE_ACX_TIMER, len=16 on older fw */
-+DEF_IE(100_IE_POWER_MGMT, 0x0002, 4); /* 0200FC00 00040000 AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_CONFIG, 0x0003, 28); /* 0300FC00 48060000 9CAD0000 0101AAAA DCB00000 E4B00000 9CAA0000 00AAAAAA */
-+DEF_IE(100_IE_BLOCK_SIZE, 0x0004, 2); /* 0400FC00 0001AAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_MEMORY_CONFIG_OPTIONS, 0x0005, 20);
-+DEF_IE(100_IE_RATE_FALLBACK, 0x0006, 1); /* 0600FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* write only: */
-+DEF_IE(100_IE_WEP_OPTIONS, 0x0007, 3);
-+DEF_IE(100_IE_MEMORY_MAP, 0x0008, 40); /* huge: 0800FC00 30000000 6CA20000 70A20000... */
-+/* gives INVAL on read: */
-+DEF_IE(100_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(100_IE_ASSOC_ID, 0x000a, 2); /* huge: 0A00FC00 00000000 01040800 00000000... */
-+DEF_IE(100_IE_INVAL_0B, 0x000b, -1);
-+/* 'command rejected': */
-+DEF_IE(100_IE_CONFIG_OPTIONS, 0x000c, -3);
-+DEF_IE(100_IE_FWREV, 0x000d, 24); /* 0D00FC00 52657620 312E392E 382E6200 AAAAAAAA AAAAAAAA 05050201 AAAAAAAA */
-+DEF_IE(100_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(100_IE_MEDIUM_USAGE, 0x000f, 8); /* E41F0000 2D780300 FCC91300 AAAAAAAA */
-+DEF_IE(100_IE_RXCONFIG, 0x0010, 4); /* 1000FC00 00280000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_QUEUE_THRESH, 0x0011, 12); /* 1100FC00 AAAAAAAA 00000000 00000000 */
-+DEF_IE(100_IE_BSS_POWER_SAVE, 0x0012, 1); /* 1200FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+/* read only, variable len */
-+DEF_IE(100_IE_FIRMWARE_STATISTICS, 0x0013, 256); /* 0000AC00 00000000 ... */
-+DEF_IE(100_IE_INT_CONFIG, 0x0014, 20); /* 00000000 00000000 00000000 00000000 5D74D105 00000000 AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_FEATURE_CONFIG, 0x0015, 8); /* 1500FC00 16000000 AAAAAAAA AAAAAAAA */
-+/* returns 'invalid MAC': */
-+DEF_IE(100_IE_KEY_CHOOSE, 0x0016, -4);
-+DEF_IE(100_IE_INVAL_17, 0x0017, -1);
-+DEF_IE(100_IE_UNKNOWN_18, 0x0018, 0); /* null len?! 1800FC00 AAAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_UNKNOWN_19, 0x0019, 256); /* huge: 1900FC00 9C1F00EA FEFFFFEA FEFFFFEA... */
-+DEF_IE(100_IE_INVAL_1A, 0x001A, -1);
-+
-+DEF_IE(100_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(100_IE_DOT11_STATION_ID, 0x1001, 6); /* huge: 0110FC00 58B10E2F 03000000 00000000... */
-+DEF_IE(100_IE_DOT11_INVAL_1002, 0x1002, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1003, 0x1003, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1004, 0x1004, -1);
-+DEF_IE(100_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(100_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* write only: */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, 32);
-+DEF_IE(100_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4); /* huge: 0810FC00 00020000 F4010000 00000000... */
-+/* undoc but returns something */
-+DEF_IE(100_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* huge: 0910FC00 00000000 00000000 00000000... */
-+DEF_IE(100_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1); /* 0A10FC00 30AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_ANTENNA, 0x100b, 1); /* 0B10FC00 8FAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(100_IE_DOT11_TX_POWER_LEVEL, 0x100d, 2); /* 00000000 0100AAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_CURRENT_CCA_MODE, 0x100e, 1); /* 0E10FC00 0DAAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_ED_THRESHOLD, 0x100f, 4); /* 0F10FC00 70000000 AAAAAAAA AAAAAAAA */
-+/* set default key ID */
-+DEF_IE(100_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1); /* 1010FC00 00AAAAAA AAAAAAAA AAAAAAAA */
-+DEF_IE(100_IE_DOT11_INVAL_1011, 0x1011, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(100_IE_DOT11_INVAL_1013, 0x1013, -1);
-+DEF_IE(100_IE_DOT11_UNKNOWN_1014, 0x1014, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1015, 0x1015, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1016, 0x1016, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1017, 0x1017, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1018, 0x1018, 256); /* huge */
-+DEF_IE(100_IE_DOT11_UNKNOWN_1019, 0x1019, 256); /* huge */
-+#endif
-+
-+#if 0
-+/* Experimentally obtained on PCI acx111 Xterasys XN-2522g, fw 1.2.1.34
-+** -1 means that fw returned 'invalid IE'
-+** 0400 0800 nnnn... are test read contents: u16 type, u16 len, data
-+** (AA are poison bytes marking bytes not written by fw)
-+**
-+** Looks like acx111 fw reports real len!
-+*/
-+DEF_IE(111_IE_INVAL_00, 0x0000, -1);
-+DEF_IE(111_IE_INVAL_01, 0x0001, -1);
-+DEF_IE(111_IE_POWER_MGMT, 0x0002, 12);
-+/* write only, variable len: 12 + rxqueue_cnt*8 + txqueue_cnt*4: */
-+DEF_IE(111_IE_MEMORY_CONFIG, 0x0003, 24);
-+DEF_IE(111_IE_BLOCK_SIZE, 0x0004, 8); /* 04000800 AA00AAAA AAAAAAAA */
-+/* variable len: 8 + rxqueue_cnt*8 + txqueue_cnt*8: */
-+DEF_IE(111_IE_QUEUE_HEAD, 0x0005, 24);
-+DEF_IE(111_IE_RATE_FALLBACK, 0x0006, 1);
-+/* acx100 name:WEP_OPTIONS */
-+/* said to have len:1 (not true, actually returns 12 bytes): */
-+DEF_IE(111_IE_RADIO_BAND, 0x0007, 12); /* 07000C00 AAAA1F00 FF03AAAA AAAAAAAA */
-+DEF_IE(111_IE_MEMORY_MAP, 0x0008, 48);
-+/* said to have len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_SCAN_STATUS, 0x0009, -1);
-+DEF_IE(111_IE_ASSOC_ID, 0x000a, 2);
-+/* write only, len is not known: */
-+DEF_IE(111_IE_UNKNOWN_0B, 0x000b, 0);
-+/* read only, variable len. I see 67 byte reads: */
-+DEF_IE(111_IE_CONFIG_OPTIONS, 0x000c, 67); /* 0C004300 01160500 ... */
-+DEF_IE(111_IE_FWREV, 0x000d, 24);
-+DEF_IE(111_IE_FCS_ERROR_COUNT, 0x000e, 4);
-+DEF_IE(111_IE_MEDIUM_USAGE, 0x000f, 8);
-+DEF_IE(111_IE_RXCONFIG, 0x0010, 4);
-+DEF_IE(111_IE_QUEUE_THRESH, 0x0011, 12);
-+DEF_IE(111_IE_BSS_POWER_SAVE, 0x0012, 1);
-+/* read only, variable len. I see 240 byte reads: */
-+DEF_IE(111_IE_FIRMWARE_STATISTICS, 0x0013, 240); /* 1300F000 00000000 ... */
-+/* said to have len=17. looks like fw pads it to 20: */
-+DEF_IE(111_IE_INT_CONFIG, 0x0014, 20); /* 14001400 00000000 00000000 00000000 00000000 00000000 */
-+DEF_IE(111_IE_FEATURE_CONFIG, 0x0015, 8);
-+/* said to be name:KEY_INDICATOR, len:4, but gives INVAL on read: */
-+DEF_IE(111_IE_KEY_CHOOSE, 0x0016, -1);
-+/* said to have len:4, but in fact returns 8: */
-+DEF_IE(111_IE_MAX_USB_XFR, 0x0017, 8); /* 17000800 00014000 00000000 */
-+DEF_IE(111_IE_INVAL_18, 0x0018, -1);
-+DEF_IE(111_IE_INVAL_19, 0x0019, -1);
-+/* undoc but returns something: */
-+/* huh, fw indicates len=20 but uses 4 more bytes in buffer??? */
-+DEF_IE(111_IE_UNKNOWN_1A, 0x001A, 20); /* 1A001400 AA00AAAA 0000020F FF030000 00020000 00000007 04000000 */
-+
-+DEF_IE(111_IE_DOT11_INVAL_1000, 0x1000, -1);
-+DEF_IE(111_IE_DOT11_STATION_ID, 0x1001, 6);
-+DEF_IE(111_IE_DOT11_FRAG_THRESH, 0x1002, 2);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_BEACON_PERIOD, 0x1003, -1);
-+/* said to be MAX_RECV_MSDU_LIFETIME: */
-+DEF_IE(111_IE_DOT11_DTIM_PERIOD, 0x1004, 4);
-+DEF_IE(111_IE_DOT11_SHORT_RETRY_LIMIT, 0x1005, 1);
-+DEF_IE(111_IE_DOT11_LONG_RETRY_LIMIT, 0x1006, 1);
-+/* acx100 only? gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_WRITE, 0x1007, -1);
-+DEF_IE(111_IE_DOT11_MAX_XMIT_MSDU_LIFETIME, 0x1008, 4);
-+/* undoc but returns something. maybe it's 2 multicast MACs to listen to? */
-+DEF_IE(111_IE_DOT11_GROUP_ADDR, 0x1009, 12); /* 09100C00 00000000 00000000 00000000 */
-+DEF_IE(111_IE_DOT11_CURRENT_REG_DOMAIN, 0x100a, 1);
-+DEF_IE(111_IE_DOT11_CURRENT_ANTENNA, 0x100b, 2);
-+DEF_IE(111_IE_DOT11_INVAL_100C, 0x100c, -1);
-+DEF_IE(111_IE_DOT11_TX_POWER_LEVEL, 0x100d, 1);
-+/* said to have len=1 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_CURRENT_CCA_MODE, 0x100e, -1);
-+/* said to have len=4 but gives INVAL on read: */
-+DEF_IE(111_IE_DOT11_ED_THRESHOLD, 0x100f, -1);
-+/* set default key ID. write only: */
-+DEF_IE(111_IE_DOT11_WEP_DEFAULT_KEY_SET, 0x1010, 1);
-+/* undoc but returns something: */
-+DEF_IE(111_IE_DOT11_UNKNOWN_1011, 0x1011, 1); /* 11100100 20 */
-+DEF_IE(111_IE_DOT11_INVAL_1012, 0x1012, -1);
-+DEF_IE(111_IE_DOT11_INVAL_1013, 0x1013, -1);
-+#endif
-+
-+
-+/***********************************************************************
-+**Information Frames Structures
-+*/
-+
-+/* Used in beacon frames and the like */
-+#define DOT11RATEBYTE_1 (1*2)
-+#define DOT11RATEBYTE_2 (2*2)
-+#define DOT11RATEBYTE_5_5 (5*2+1)
-+#define DOT11RATEBYTE_11 (11*2)
-+#define DOT11RATEBYTE_22 (22*2)
-+#define DOT11RATEBYTE_6_G (6*2)
-+#define DOT11RATEBYTE_9_G (9*2)
-+#define DOT11RATEBYTE_12_G (12*2)
-+#define DOT11RATEBYTE_18_G (18*2)
-+#define DOT11RATEBYTE_24_G (24*2)
-+#define DOT11RATEBYTE_36_G (36*2)
-+#define DOT11RATEBYTE_48_G (48*2)
-+#define DOT11RATEBYTE_54_G (54*2)
-+#define DOT11RATEBYTE_BASIC 0x80 /* flags rates included in basic rate set */
-+
-+
-+/***********************************************************************
-+** rxbuffer_t
-+**
-+** This is the format of rx data returned by acx
-+*/
-+
-+/* I've hoped it's a 802.11 PHY header, but no...
-+ * so far, I've seen on acx111:
-+ * 0000 3a00 0000 0000 IBSS Beacons
-+ * 0000 3c00 0000 0000 ESS Beacons
-+ * 0000 2700 0000 0000 Probe requests
-+ * --vda
-+ */
-+typedef struct phy_hdr {
-+ u8 unknown[4];
-+ u8 acx111_unknown[4];
-+} ACX_PACKED phy_hdr_t;
-+
-+/* seems to be a bit similar to hfa384x_rx_frame.
-+ * These fields are still not quite obvious, though.
-+ * Some seem to have different meanings... */
-+
-+#define RXBUF_HDRSIZE 12
-+#define RXBUF_BYTES_RCVD(adev, rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) - (adev)->phy_header_len)
-+#define RXBUF_BYTES_USED(rxbuf) \
-+ ((le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0xfff) + RXBUF_HDRSIZE)
-+/* USBism */
-+#define RXBUF_IS_TXSTAT(rxbuf) (le16_to_cpu((rxbuf)->mac_cnt_rcvd) & 0x8000)
-+/*
-+mac_cnt_rcvd:
-+ 12 bits: length of frame from control field to first byte of FCS
-+ 3 bits: reserved
-+ 1 bit: 1 = it's a tx status info, not a rx packet (USB only)
-+
-+mac_cnt_mblks:
-+ 6 bits: number of memory block used to store frame in adapter memory
-+ 1 bit: Traffic Indicator bit in TIM of received Beacon was set
-+
-+mac_status: 1 byte (bitmap):
-+ 7 Matching BSSID
-+ 6 Matching SSID
-+ 5 BDCST Address 1 field is a broadcast
-+ 4 VBM received beacon frame has more than one set bit (?!)
-+ 3 TIM Set bit representing this station is set in TIM of received beacon
-+ 2 GROUP Address 1 is a multicast
-+ 1 ADDR1 Address 1 matches our MAC
-+ 0 FCSGD FSC is good
-+
-+phy_stat_baseband: 1 byte (bitmap):
-+ 7 Preamble frame had a long preamble
-+ 6 PLCP Error CRC16 error in PLCP header
-+ 5 Unsup_Mod unsupported modulation
-+ 4 Selected Antenna antenna 1 was used to receive this frame
-+ 3 PBCC/CCK frame used: 1=PBCC, 0=CCK modulation
-+ 2 OFDM frame used OFDM modulation
-+ 1 TI Protection protection frame was detected
-+ 0 Reserved
-+
-+phy_plcp_signal: 1 byte:
-+ Receive PLCP Signal field from the Baseband Processor
-+
-+phy_level: 1 byte:
-+ receive AGC gain level (can be used to measure receive signal strength)
-+
-+phy_snr: 1 byte:
-+ estimated noise power of equalized receive signal
-+ at input of FEC decoder (can be used to measure receive signal quality)
-+
-+time: 4 bytes:
-+ timestamp sampled from either the Access Manager TSF counter
-+ or free-running microsecond counter when the MAC receives
-+ first byte of PLCP header.
-+*/
-+
-+typedef struct rxbuffer {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 mac_cnt_mblks;
-+ u8 mac_status;
-+ u8 phy_stat_baseband; /* bit 0x80: used LNA (Low-Noise Amplifier) */
-+ u8 phy_plcp_signal;
-+ u8 phy_level; /* PHY stat */
-+ u8 phy_snr; /* PHY stat */
-+ u32 time; /* timestamp upon MAC rcv first byte */
-+/* 4-byte (acx100) or 8-byte (acx111) phy header will be here
-+** if RX_CFG1_INCLUDE_PHY_HDR is in effect:
-+** phy_hdr_t phy */
-+ wlan_hdr_a3_t hdr_a3;
-+ /* maximally sized data part of wlan packet */
-+ u8 data_a3[WLAN_A4FR_MAXLEN_WEP_FCS - WLAN_HDR_A3_LEN];
-+ /* can add hdr/data_a4 if needed */
-+} ACX_PACKED rxbuffer_t;
-+
-+
-+/*--- Firmware statistics ----------------------------------------------------*/
-+
-+/* define a random 100 bytes more to catch firmware versions which
-+ * provide a bigger struct */
-+#define FW_STATS_FUTURE_EXTENSION 100
-+
-+typedef struct fw_stats_tx {
-+ u32 tx_desc_of;
-+} ACX_PACKED fw_stats_tx_t;
-+
-+typedef struct fw_stats_rx {
-+ u32 rx_oom;
-+ u32 rx_hdr_of;
-+ u32 rx_hw_stuck; /* old: u32 rx_hdr_use_next */
-+ u32 rx_dropped_frame;
-+ u32 rx_frame_ptr_err;
-+ u32 rx_xfr_hint_trig;
-+ u32 rx_aci_events; /* later versions only */
-+ u32 rx_aci_resets; /* later versions only */
-+} ACX_PACKED fw_stats_rx_t;
-+
-+typedef struct fw_stats_dma {
-+ u32 rx_dma_req;
-+ u32 rx_dma_err;
-+ u32 tx_dma_req;
-+ u32 tx_dma_err;
-+} ACX_PACKED fw_stats_dma_t;
-+
-+typedef struct fw_stats_irq {
-+ u32 cmd_cplt;
-+ u32 fiq;
-+ u32 rx_hdrs;
-+ u32 rx_cmplt;
-+ u32 rx_mem_of;
-+ u32 rx_rdys;
-+ u32 irqs;
-+ u32 tx_procs;
-+ u32 decrypt_done;
-+ u32 dma_0_done;
-+ u32 dma_1_done;
-+ u32 tx_exch_complet;
-+ u32 commands;
-+ u32 rx_procs;
-+ u32 hw_pm_mode_changes;
-+ u32 host_acks;
-+ u32 pci_pm;
-+ u32 acm_wakeups;
-+} ACX_PACKED fw_stats_irq_t;
-+
-+typedef struct fw_stats_wep {
-+ u32 wep_key_count;
-+ u32 wep_default_key_count;
-+ u32 dot11_def_key_mib;
-+ u32 wep_key_not_found;
-+ u32 wep_decrypt_fail;
-+ u32 wep_pkt_decrypt;
-+ u32 wep_decrypt_irqs;
-+} ACX_PACKED fw_stats_wep_t;
-+
-+typedef struct fw_stats_pwr {
-+ u32 tx_start_ctr;
-+ u32 no_ps_tx_too_short;
-+ u32 rx_start_ctr;
-+ u32 no_ps_rx_too_short;
-+ u32 lppd_started;
-+ u32 no_lppd_too_noisy;
-+ u32 no_lppd_too_short;
-+ u32 no_lppd_matching_frame;
-+} ACX_PACKED fw_stats_pwr_t;
-+
-+typedef struct fw_stats_mic {
-+ u32 mic_rx_pkts;
-+ u32 mic_calc_fail;
-+} ACX_PACKED fw_stats_mic_t;
-+
-+typedef struct fw_stats_aes {
-+ u32 aes_enc_fail;
-+ u32 aes_dec_fail;
-+ u32 aes_enc_pkts;
-+ u32 aes_dec_pkts;
-+ u32 aes_enc_irq;
-+ u32 aes_dec_irq;
-+} ACX_PACKED fw_stats_aes_t;
-+
-+typedef struct fw_stats_event {
-+ u32 heartbeat;
-+ u32 calibration;
-+ u32 rx_mismatch;
-+ u32 rx_mem_empty;
-+ u32 rx_pool;
-+ u32 oom_late;
-+ u32 phy_tx_err;
-+ u32 tx_stuck;
-+} ACX_PACKED fw_stats_event_t;
-+
-+/* mainly for size calculation only */
-+typedef struct fw_stats {
-+ u16 type;
-+ u16 len;
-+ fw_stats_tx_t tx;
-+ fw_stats_rx_t rx;
-+ fw_stats_dma_t dma;
-+ fw_stats_irq_t irq;
-+ fw_stats_wep_t wep;
-+ fw_stats_pwr_t pwr;
-+ fw_stats_mic_t mic;
-+ fw_stats_aes_t aes;
-+ fw_stats_event_t evt;
-+ u8 _padding[FW_STATS_FUTURE_EXTENSION];
-+} fw_stats_t;
-+
-+/* Firmware version struct */
-+
-+typedef struct fw_ver {
-+ u16 cmd;
-+ u16 size;
-+ char fw_id[20];
-+ u32 hw_id;
-+} ACX_PACKED fw_ver_t;
-+
-+#define FW_ID_SIZE 20
-+
-+typedef struct shared_queueindicator {
-+ u32 indicator;
-+ u16 host_lock;
-+ u16 fw_lock;
-+} ACX_PACKED queueindicator_t;
-+
-+/*--- WEP stuff --------------------------------------------------------------*/
-+#define DOT11_MAX_DEFAULT_WEP_KEYS 4
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct wep_key {
-+ size_t size; /* most often used member first */
-+ u8 index;
-+ u8 key[29];
-+ u16 strange_filler;
-+} wep_key_t; /* size = 264 bytes (33*8) */
-+/* FIXME: We don't have size 264! Or is there 2 bytes beyond the key
-+ * (strange_filler)? */
-+
-+/* non-firmware struct, no packing necessary */
-+typedef struct key_struct {
-+ u8 addr[ETH_ALEN]; /* 0x00 */
-+ u16 filler1; /* 0x06 */
-+ u32 filler2; /* 0x08 */
-+ u32 index; /* 0x0c */
-+ u16 len; /* 0x10 */
-+ u8 key[29]; /* 0x12; is this long enough??? */
-+} key_struct_t; /* size = 276. FIXME: where is the remaining space?? */
-+
-+
-+/*--- Client (peer) info -----------------------------------------------------*/
-+/* adev->sta_list[] is used for:
-+** accumulating and processing of scan results
-+** keeping client info in AP mode
-+** keeping AP info in STA mode (AP is the only one 'client')
-+** keeping peer info in ad-hoc mode
-+** non-firmware struct --> no packing necessary */
-+enum {
-+ CLIENT_EMPTY_SLOT_0 = 0,
-+ CLIENT_EXIST_1 = 1,
-+ CLIENT_AUTHENTICATED_2 = 2,
-+ CLIENT_ASSOCIATED_3 = 3,
-+ CLIENT_JOIN_CANDIDATE = 4
-+};
-+struct client {
-+ /* most frequent access first */
-+ u8 used; /* misnamed, more like 'status' */
-+ struct client* next;
-+ unsigned long mtime; /* last time we heard it, in jiffies */
-+ size_t essid_len; /* length of ESSID (without '\0') */
-+ u32 sir; /* Standard IR */
-+ u32 snr; /* Signal to Noise Ratio */
-+ u16 aid; /* association ID */
-+ u16 seq; /* from client's auth req */
-+ u16 auth_alg; /* from client's auth req */
-+ u16 cap_info; /* from client's assoc req */
-+ u16 rate_cap; /* what client supports (all rates) */
-+ u16 rate_bas; /* what client supports (basic rates) */
-+ u16 rate_cfg; /* what is allowed (by iwconfig etc) */
-+ u16 rate_cur; /* currently used rate mask */
-+ u8 rate_100; /* currently used rate byte (acx100 only) */
-+ u8 address[ETH_ALEN];
-+ u8 bssid[ETH_ALEN]; /* ad-hoc hosts can have bssid != mac */
-+ u8 channel;
-+ u8 auth_step;
-+ u8 ignore_count;
-+ u8 fallback_count;
-+ u8 stepup_count;
-+ char essid[IW_ESSID_MAX_SIZE + 1]; /* ESSID and trailing '\0' */
-+/* FIXME: this one is too damn big */
-+ char challenge_text[WLAN_CHALLENGE_LEN];
-+};
-+
-+
-+/***********************************************************************
-+** Hardware structures
-+*/
-+
-+/* An opaque typesafe helper type
-+ *
-+ * Some hardware fields are actually pointers,
-+ * but they have to remain u32, since using ptr instead
-+ * (8 bytes on 64bit systems!) would disrupt the fixed descriptor
-+ * format the acx firmware expects in the non-user area.
-+ * Since we cannot cram an 8 byte ptr into 4 bytes, we need to
-+ * enforce that pointed to data remains in low memory
-+ * (address value needs to fit in 4 bytes) on 64bit systems.
-+ *
-+ * This is easy to get wrong, thus we are using a small struct
-+ * and special macros to access it. Macros will check for
-+ * attempts to overflow an acx_ptr with value > 0xffffffff.
-+ *
-+ * Attempts to use acx_ptr without macros result in compile-time errors */
-+
-+typedef struct {
-+ u32 v;
-+} ACX_PACKED acx_ptr;
-+
-+#if ACX_DEBUG
-+#define CHECK32(n) BUG_ON(sizeof(n)>4 && (long)(n)>0xffffff00)
-+#else
-+#define CHECK32(n) ((void)0)
-+#endif
-+
-+/* acx_ptr <-> integer conversion */
-+#define cpu2acx(n) ({ CHECK32(n); ((acx_ptr){ .v = cpu_to_le32(n) }); })
-+#define acx2cpu(a) (le32_to_cpu(a.v))
-+
-+/* acx_ptr <-> pointer conversion */
-+#define ptr2acx(p) ({ CHECK32(p); ((acx_ptr){ .v = cpu_to_le32((u32)(long)(p)) }); })
-+#define acx2ptr(a) ((void*)le32_to_cpu(a.v))
-+
-+/* Values for rate field (acx100 only) */
-+#define RATE100_1 10
-+#define RATE100_2 20
-+#define RATE100_5 55
-+#define RATE100_11 110
-+#define RATE100_22 220
-+/* This bit denotes use of PBCC:
-+** (PBCC encoding is usable with 11 and 22 Mbps speeds only) */
-+#define RATE100_PBCC511 0x80
-+
-+/* Bit values for rate111 field */
-+#define RATE111_1 0x0001 /* DBPSK */
-+#define RATE111_2 0x0002 /* DQPSK */
-+#define RATE111_5 0x0004 /* CCK or PBCC */
-+#define RATE111_6 0x0008 /* CCK-OFDM or OFDM */
-+#define RATE111_9 0x0010 /* CCK-OFDM or OFDM */
-+#define RATE111_11 0x0020 /* CCK or PBCC */
-+#define RATE111_12 0x0040 /* CCK-OFDM or OFDM */
-+#define RATE111_18 0x0080 /* CCK-OFDM or OFDM */
-+#define RATE111_22 0x0100 /* PBCC */
-+#define RATE111_24 0x0200 /* CCK-OFDM or OFDM */
-+#define RATE111_36 0x0400 /* CCK-OFDM or OFDM */
-+#define RATE111_48 0x0800 /* CCK-OFDM or OFDM */
-+#define RATE111_54 0x1000 /* CCK-OFDM or OFDM */
-+#define RATE111_RESERVED 0x2000
-+#define RATE111_PBCC511 0x4000 /* PBCC mod at 5.5 or 11Mbit (else CCK) */
-+#define RATE111_SHORTPRE 0x8000 /* short preamble */
-+/* Special 'try everything' value */
-+#define RATE111_ALL 0x1fff
-+/* These bits denote acx100 compatible settings */
-+#define RATE111_ACX100_COMPAT 0x0127
-+/* These bits denote 802.11b compatible settings */
-+#define RATE111_80211B_COMPAT 0x0027
-+
-+/* Descriptor Ctl field bits
-+ * init value is 0x8e, "idle" value is 0x82 (in idle tx descs)
-+ */
-+#define DESC_CTL_SHORT_PREAMBLE 0x01 /* preamble type: 0 = long; 1 = short */
-+#define DESC_CTL_FIRSTFRAG 0x02 /* this is the 1st frag of the frame */
-+#define DESC_CTL_AUTODMA 0x04
-+#define DESC_CTL_RECLAIM 0x08 /* ready to reuse */
-+#define DESC_CTL_HOSTDONE 0x20 /* host has finished processing */
-+#define DESC_CTL_ACXDONE 0x40 /* acx has finished processing */
-+/* host owns the desc [has to be released last, AFTER modifying all other desc fields!] */
-+#define DESC_CTL_HOSTOWN 0x80
-+#define DESC_CTL_ACXDONE_HOSTOWN (DESC_CTL_ACXDONE | DESC_CTL_HOSTOWN)
-+
-+/* Descriptor Status field
-+ */
-+#define DESC_STATUS_FULL (1 << 31)
-+
-+/* NB: some bits may be interesting for Monitor mode tx (aka Raw tx): */
-+#define DESC_CTL2_SEQ 0x01 /* don't increase sequence field */
-+#define DESC_CTL2_FCS 0x02 /* don't add the FCS */
-+#define DESC_CTL2_MORE_FRAG 0x04
-+#define DESC_CTL2_RETRY 0x08 /* don't increase retry field */
-+#define DESC_CTL2_POWER 0x10 /* don't increase power mgmt. field */
-+#define DESC_CTL2_RTS 0x20 /* do RTS/CTS magic before sending */
-+#define DESC_CTL2_WEP 0x40 /* encrypt this frame */
-+#define DESC_CTL2_DUR 0x80 /* don't increase duration field */
-+
-+/***********************************************************************
-+** PCI structures
-+*/
-+/* IRQ Constants
-+** (outside of "#ifdef PCI" because USB (mis)uses HOST_INT_SCAN_COMPLETE) */
-+#define HOST_INT_RX_DATA 0x0001
-+#define HOST_INT_TX_COMPLETE 0x0002
-+#define HOST_INT_TX_XFER 0x0004
-+#define HOST_INT_RX_COMPLETE 0x0008
-+#define HOST_INT_DTIM 0x0010
-+#define HOST_INT_BEACON 0x0020
-+#define HOST_INT_TIMER 0x0040
-+#define HOST_INT_KEY_NOT_FOUND 0x0080
-+#define HOST_INT_IV_ICV_FAILURE 0x0100
-+#define HOST_INT_CMD_COMPLETE 0x0200
-+#define HOST_INT_INFO 0x0400
-+#define HOST_INT_OVERFLOW 0x0800
-+#define HOST_INT_PROCESS_ERROR 0x1000
-+#define HOST_INT_SCAN_COMPLETE 0x2000
-+#define HOST_INT_FCS_THRESHOLD 0x4000
-+#define HOST_INT_UNKNOWN 0x8000
-+
-+/* Outside of "#ifdef PCI" because USB needs to know sizeof()
-+** of txdesc and rxdesc: */
-+struct txdesc {
-+ acx_ptr pNextDesc; /* pointer to next txdesc */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr AcxMemPtr; /* 0x08 */
-+ u32 tx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 Reserved; /* 0x12 */
-+
-+/* The following 16 bytes do not change when acx100 owns the descriptor */
-+/* BUG: fw clears last byte of this area which is supposedly reserved
-+** for driver use. amd64 blew up. We dare not use it now */
-+ u32 dummy[4];
-+
-+ u8 Ctl_8; /* 0x24, 8bit value */
-+ u8 Ctl2_8; /* 0x25, 8bit value */
-+ u8 error; /* 0x26 */
-+ u8 ack_failures; /* 0x27 */
-+
-+ union {
-+ /*
-+ * Packing doesn't work correctly on ARM unless unions are on
-+ * 4 byte boundaries.
-+ */
-+ struct {
-+ u8 rts_failures; /* 0x28 */
-+ u8 rts_ok; /* 0x29 */
-+ u16 d1;
-+ } ACX_PACKED rts;
-+ struct {
-+ u16 d1;
-+ u8 rate; /* 0x2a */
-+ u8 queue_ctrl; /* 0x2b */
-+ } ACX_PACKED r1;
-+ struct {
-+ u16 d1;
-+ u16 rate111; /* 0x2a */
-+ } ACX_PACKED r2;
-+ } ACX_PACKED u;
-+ u32 queue_info; /* 0x2c (acx100, reserved on acx111) */
-+} ACX_PACKED; /* size : 48 = 0x30 */
-+/* NB: acx111 txdesc structure is 4 byte larger */
-+/* All these 4 extra bytes are reserved. tx alloc code takes them into account */
-+
-+struct rxdesc {
-+ acx_ptr pNextDesc; /* 0x00 */
-+ acx_ptr HostMemPtr; /* 0x04 */
-+ acx_ptr ACXMemPtr; /* 0x08 */
-+ u32 rx_time; /* 0x0c */
-+ u16 total_length; /* 0x10 */
-+ u16 WEP_length; /* 0x12 */
-+ u32 WEP_ofs; /* 0x14 */
-+
-+/* the following 16 bytes do not change when acx100 owns the descriptor */
-+ u8 driverWorkspace[16]; /* 0x18 */
-+
-+ u8 Ctl_8;
-+ u8 rate;
-+ u8 error;
-+ u8 SNR; /* Signal-to-Noise Ratio */
-+ u8 RxLevel;
-+ u8 queue_ctrl;
-+ u16 unknown;
-+ u32 unknown2;
-+} ACX_PACKED; /* size 52 = 0x34 */
-+
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+
-+/* Register I/O offsets */
-+#define ACX100_EEPROM_ID_OFFSET 0x380
-+
-+/* please add further ACX hardware register definitions only when
-+ it turns out you need them in the driver, and please try to use
-+ firmware functionality instead, since using direct I/O access instead
-+ of letting the firmware do it might confuse the firmware's state
-+ machine */
-+
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+enum {
-+ IO_ACX_SOFT_RESET = 0,
-+
-+ IO_ACX_SLV_MEM_ADDR,
-+ IO_ACX_SLV_MEM_DATA,
-+ IO_ACX_SLV_MEM_CTL,
-+ IO_ACX_SLV_END_CTL,
-+
-+ IO_ACX_FEMR, /* Function Event Mask */
-+
-+ IO_ACX_INT_TRIG,
-+ IO_ACX_IRQ_MASK,
-+ IO_ACX_IRQ_STATUS_NON_DES,
-+ IO_ACX_IRQ_STATUS_CLEAR, /* CLEAR = clear on read */
-+ IO_ACX_IRQ_ACK,
-+ IO_ACX_HINT_TRIG,
-+
-+ IO_ACX_ENABLE,
-+
-+ IO_ACX_EEPROM_CTL,
-+ IO_ACX_EEPROM_ADDR,
-+ IO_ACX_EEPROM_DATA,
-+ IO_ACX_EEPROM_CFG,
-+
-+ IO_ACX_PHY_ADDR,
-+ IO_ACX_PHY_DATA,
-+ IO_ACX_PHY_CTL,
-+
-+ IO_ACX_GPIO_OE,
-+
-+ IO_ACX_GPIO_OUT,
-+
-+ IO_ACX_CMD_MAILBOX_OFFS,
-+ IO_ACX_INFO_MAILBOX_OFFS,
-+ IO_ACX_EEPROM_INFORMATION,
-+
-+ IO_ACX_EE_START,
-+ IO_ACX_SOR_CFG,
-+ IO_ACX_ECPU_CTRL
-+};
-+/* ***** ABSOLUTELY ALWAYS KEEP OFFSETS IN SYNC WITH THE INITIALIZATION
-+** OF THE I/O ARRAYS!!!! (grep for '^IO_ACX') ***** */
-+
-+/* Values for IO_ACX_INT_TRIG register: */
-+/* inform hw that rxdesc in queue needs processing */
-+#define INT_TRIG_RXPRC 0x08
-+/* inform hw that txdesc in queue needs processing */
-+#define INT_TRIG_TXPRC 0x04
-+/* ack that we received info from info mailbox */
-+#define INT_TRIG_INFOACK 0x02
-+/* inform hw that we have filled command mailbox */
-+#define INT_TRIG_CMD 0x01
-+
-+struct txhostdesc {
-+ acx_ptr data_phy; /* 0x00 [u8 *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [txhostdesc *] */
-+ acx_ptr pNext; /* 0x10 [txhostdesc *] */
-+ u32 Status; /* 0x14, unused on Tx */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ u8 *data;
-+} ACX_PACKED;
-+
-+struct rxhostdesc {
-+ acx_ptr data_phy; /* 0x00 [rxbuffer_t *] */
-+ u16 data_offset; /* 0x04 */
-+ u16 reserved; /* 0x06 */
-+ u16 Ctl_16; /* 0x08; 16bit value, endianness!! */
-+ u16 length; /* 0x0a */
-+ acx_ptr desc_phy_next; /* 0x0c [rxhostdesc_t *] */
-+ acx_ptr pNext; /* 0x10 [rxhostdesc_t *] */
-+ u32 Status; /* 0x14 */
-+/* From here on you can use this area as you want (variable length, too!) */
-+ rxbuffer_t *data;
-+} ACX_PACKED;
-+
-+#endif /* ACX_PCI */
-+
-+/***********************************************************************
-+** USB structures and constants
-+*/
-+#ifdef ACX_USB
-+
-+/* Used for usb_txbuffer.desc field */
-+#define USB_TXBUF_TXDESC 0xA
-+/* Size of header (everything up to data[]) */
-+#define USB_TXBUF_HDRSIZE 14
-+typedef struct usb_txbuffer {
-+ u16 desc;
-+ u16 mpdu_len;
-+ u8 queue_index;
-+ u8 rate;
-+ u32 hostdata;
-+ u8 ctrl1;
-+ u8 ctrl2;
-+ u16 data_len;
-+ /* wlan packet content is placed here: */
-+ u8 data[WLAN_A4FR_MAXLEN_WEP_FCS];
-+} ACX_PACKED usb_txbuffer_t;
-+
-+/* USB returns either rx packets (see rxbuffer) or
-+** these "tx status" structs: */
-+typedef struct usb_txstatus {
-+ u16 mac_cnt_rcvd; /* only 12 bits are len! (0xfff) */
-+ u8 queue_index;
-+ u8 mac_status; /* seen 0x20 on tx failure */
-+ u32 hostdata;
-+ u8 rate;
-+ u8 ack_failures;
-+ u8 rts_failures;
-+ u8 rts_ok;
-+} ACX_PACKED usb_txstatus_t;
-+
-+typedef struct usb_tx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ /* actual USB bulk output data block is here: */
-+ usb_txbuffer_t bulkout;
-+} usb_tx_t;
-+
-+struct usb_rx_plain {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+};
-+
-+typedef struct usb_rx {
-+ unsigned busy:1;
-+ struct urb *urb;
-+ acx_device_t *adev;
-+ rxbuffer_t bulkin;
-+ /* Make entire structure 4k. Report if it breaks something. */
-+ u8 padding[4*1024 - sizeof(struct usb_rx_plain)];
-+} usb_rx_t;
-+#endif /* ACX_USB */
-+
-+
-+/* Config Option structs */
-+
-+typedef struct co_antennas {
-+ u8 type;
-+ u8 len;
-+ u8 list[2];
-+} ACX_PACKED co_antennas_t;
-+
-+typedef struct co_powerlevels {
-+ u8 type;
-+ u8 len;
-+ u16 list[8];
-+} ACX_PACKED co_powerlevels_t;
-+
-+typedef struct co_datarates {
-+ u8 type;
-+ u8 len;
-+ u8 list[8];
-+} ACX_PACKED co_datarates_t;
-+
-+typedef struct co_domains {
-+ u8 type;
-+ u8 len;
-+ u8 list[6];
-+} ACX_PACKED co_domains_t;
-+
-+typedef struct co_product_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_product_id_t;
-+
-+typedef struct co_manuf_id {
-+ u8 type;
-+ u8 len;
-+ u8 list[128];
-+} ACX_PACKED co_manuf_t;
-+
-+typedef struct co_fixed {
-+ char NVSv[8];
-+/* u16 NVS_vendor_offs; ACX111-only */
-+/* u16 unknown; ACX111-only */
-+ u8 MAC[6]; /* ACX100-only */
-+ u16 probe_delay; /* ACX100-only */
-+ u32 eof_memory;
-+ u8 dot11CCAModes;
-+ u8 dot11Diversity;
-+ u8 dot11ShortPreambleOption;
-+ u8 dot11PBCCOption;
-+ u8 dot11ChannelAgility;
-+ u8 dot11PhyType; /* FIXME: does 802.11 call it "dot11PHYType"? */
-+ u8 dot11TempType;
-+ u8 table_count;
-+} ACX_PACKED co_fixed_t;
-+
-+typedef struct acx111_ie_configoption {
-+ u16 type;
-+ u16 len;
-+/* Do not access below members directly, they are in fact variable length */
-+ co_fixed_t fixed;
-+ co_antennas_t antennas;
-+ co_powerlevels_t power_levels;
-+ co_datarates_t data_rates;
-+ co_domains_t domains;
-+ co_product_id_t product_id;
-+ co_manuf_t manufacturer;
-+ u8 _padding[4];
-+} ACX_PACKED acx111_ie_configoption_t;
-+
-+
-+/***********************************************************************
-+** Main acx per-device data structure
-+*/
-+#define ACX_STATE_FW_LOADED 0x01
-+#define ACX_STATE_IFACE_UP 0x02
-+
-+/* MAC mode (BSS type) defines
-+ * Note that they shouldn't be redefined, since they are also used
-+ * during communication with firmware */
-+#define ACX_MODE_0_ADHOC 0
-+#define ACX_MODE_1_UNUSED 1
-+#define ACX_MODE_2_STA 2
-+#define ACX_MODE_3_AP 3
-+/* These are our own inventions. Sending these to firmware
-+** makes it stop emitting beacons, which is exactly what we want
-+** for these modes */
-+#define ACX_MODE_MONITOR 0xfe
-+#define ACX_MODE_OFF 0xff
-+/* 'Submode': identifies exact status of ADHOC/STA host */
-+#define ACX_STATUS_0_STOPPED 0
-+#define ACX_STATUS_1_SCANNING 1
-+#define ACX_STATUS_2_WAIT_AUTH 2
-+#define ACX_STATUS_3_AUTHENTICATED 3
-+#define ACX_STATUS_4_ASSOCIATED 4
-+
-+/* FIXME: this should be named something like struct acx_priv (typedef'd to
-+ * acx_priv_t) */
-+
-+/* non-firmware struct, no packing necessary */
-+struct acx_device {
-+ /* most frequent accesses first (dereferencing and cache line!) */
-+
-+ /*** Locking ***/
-+ /* FIXME: try to convert semaphore to more efficient mutex according
-+ to Ingo Molnar's docs (but not before driver is in mainline or
-+ pre-mutex Linux 2.6.10 is very outdated). */
-+ struct semaphore sem;
-+ spinlock_t lock;
-+#if defined(PARANOID_LOCKING) /* Lock debugging */
-+ const char *last_sem;
-+ const char *last_lock;
-+ unsigned long sem_time;
-+ unsigned long lock_time;
-+#endif
-+#ifdef ACX_MEM
-+ spinlock_t txbuf_lock;
-+#endif
-+
-+ /*** Linux network device ***/
-+ struct net_device *ndev; /* pointer to linux netdevice */
-+
-+ /*** Device statistics ***/
-+ struct net_device_stats stats; /* net device statistics */
-+#ifdef WIRELESS_EXT
-+ struct iw_statistics wstats; /* wireless statistics */
-+#endif
-+ /*** Power managment ***/
-+ struct pm_dev *pm; /* PM crap */
-+
-+ /*** Management timer ***/
-+ struct timer_list mgmt_timer;
-+
-+ /*** Hardware identification ***/
-+ const char *chip_name;
-+ u8 dev_type;
-+ u8 chip_type;
-+ u8 form_factor;
-+ u8 radio_type;
-+ u8 eeprom_version;
-+
-+ /*** Config retrieved from EEPROM ***/
-+ char cfgopt_NVSv[8];
-+ u16 cfgopt_NVS_vendor_offs;
-+ u8 cfgopt_MAC[6];
-+ u16 cfgopt_probe_delay;
-+ u32 cfgopt_eof_memory;
-+ u8 cfgopt_dot11CCAModes;
-+ u8 cfgopt_dot11Diversity;
-+ u8 cfgopt_dot11ShortPreambleOption;
-+ u8 cfgopt_dot11PBCCOption;
-+ u8 cfgopt_dot11ChannelAgility;
-+ u8 cfgopt_dot11PhyType;
-+ u8 cfgopt_dot11TempType;
-+ co_antennas_t cfgopt_antennas;
-+ co_powerlevels_t cfgopt_power_levels;
-+ co_datarates_t cfgopt_data_rates;
-+ co_domains_t cfgopt_domains;
-+ co_product_id_t cfgopt_product_id;
-+ co_manuf_t cfgopt_manufacturer;
-+
-+ /*** Firmware identification ***/
-+ char firmware_version[FW_ID_SIZE+1];
-+ u32 firmware_numver;
-+ u32 firmware_id;
-+ const u16 *ie_len;
-+ const u16 *ie_len_dot11;
-+
-+ /*** Device state ***/
-+ u16 dev_state_mask;
-+ u8 led_power; /* power LED status */
-+ u32 get_mask; /* mask of settings to fetch from the card */
-+ u32 set_mask; /* mask of settings to write to the card */
-+
-+ /* Barely used in USB case */
-+ u16 irq_status;
-+
-+ u8 after_interrupt_jobs; /* mini job list for doing actions after an interrupt occurred */
-+ WORK_STRUCT after_interrupt_task; /* our task for after interrupt actions */
-+
-+ /*** scanning ***/
-+ u16 scan_count; /* number of times to do channel scan */
-+ u8 scan_mode; /* 0 == active, 1 == passive, 2 == background */
-+ u8 scan_rate;
-+ u16 scan_duration;
-+ u16 scan_probe_delay;
-+#if WIRELESS_EXT > 15
-+ struct iw_spy_data spy_data; /* FIXME: needs to be implemented! */
-+#endif
-+
-+ /*** Wireless network settings ***/
-+ /* copy of the device address (ifconfig hw ether) that we actually use
-+ ** for 802.11; copied over from the network device's MAC address
-+ ** (ifconfig) when it makes sense only */
-+ u8 dev_addr[MAX_ADDR_LEN];
-+ u8 bssid[ETH_ALEN]; /* the BSSID after having joined */
-+ u8 ap[ETH_ALEN]; /* The AP we want, FF:FF:FF:FF:FF:FF is any */
-+ u16 aid; /* The Association ID sent from the AP / last used AID if we're an AP */
-+ u16 mode; /* mode from iwconfig */
-+ int monitor_type; /* ARPHRD_IEEE80211 or ARPHRD_IEEE80211_PRISM */
-+ u16 status; /* 802.11 association status */
-+ u8 essid_active; /* specific ESSID active, or select any? */
-+ u8 essid_len; /* to avoid dozens of strlen() */
-+ /* INCLUDES \0 termination for easy printf - but many places
-+ ** simply want the string data memcpy'd plus a length indicator!
-+ ** Keep that in mind... */
-+ char essid[IW_ESSID_MAX_SIZE+1];
-+ /* essid we are going to use for association, in case of "essid 'any'"
-+ ** and in case of hidden ESSID (use configured ESSID then) */
-+ char essid_for_assoc[IW_ESSID_MAX_SIZE+1];
-+ char nick[IW_ESSID_MAX_SIZE+1]; /* see essid! */
-+ u8 channel;
-+ u8 reg_dom_id; /* reg domain setting */
-+ u16 reg_dom_chanmask;
-+ u16 auth_or_assoc_retries;
-+ u16 scan_retries;
-+ unsigned long scan_start; /* YES, jiffies is defined as "unsigned long" */
-+
-+ /* stations known to us (if we're an ap) */
-+ client_t sta_list[32]; /* tab is larger than list, so that */
-+ client_t *sta_hash_tab[64]; /* hash collisions are not likely */
-+ client_t *ap_client; /* this one is our AP (STA mode only) */
-+
-+ int dup_count;
-+ int nondup_count;
-+ unsigned long dup_msg_expiry;
-+ u16 last_seq_ctrl; /* duplicate packet detection */
-+
-+ /* 802.11 power save mode */
-+ u8 ps_wakeup_cfg;
-+ u8 ps_listen_interval;
-+ u8 ps_options;
-+ u8 ps_hangover_period;
-+ u32 ps_enhanced_transition_time;
-+ u32 ps_beacon_rx_time;
-+
-+ /*** PHY settings ***/
-+ u8 fallback_threshold;
-+ u8 stepup_threshold;
-+ u16 rate_basic;
-+ u16 rate_oper;
-+ u16 rate_bcast;
-+ u16 rate_bcast100;
-+ u8 rate_auto; /* false if "iwconfig rate N" (WITHOUT 'auto'!) */
-+ u8 preamble_mode; /* 0 == Long Preamble, 1 == Short, 2 == Auto */
-+ u8 preamble_cur;
-+
-+ u8 tx_disabled;
-+ u8 tx_level_dbm;
-+ /* u8 tx_level_val; */
-+ /* u8 tx_level_auto; whether to do automatic power adjustment */
-+
-+ unsigned long recalib_time_last_success;
-+ unsigned long recalib_time_last_attempt;
-+ int recalib_failure_count;
-+ int recalib_msg_ratelimit;
-+ int retry_errors_msg_ratelimit;
-+
-+ unsigned long brange_time_last_state_change; /* time the power LED was last changed */
-+ u8 brange_last_state; /* last state of the LED */
-+ u8 brange_max_quality; /* maximum quality that equates to full speed */
-+
-+ u8 sensitivity;
-+ u8 antenna; /* antenna settings */
-+ u8 ed_threshold; /* energy detect threshold */
-+ u8 cca; /* clear channel assessment */
-+
-+ u16 rts_threshold;
-+ u16 frag_threshold;
-+ u32 short_retry;
-+ u32 long_retry;
-+ u16 msdu_lifetime;
-+ u16 listen_interval; /* given in units of beacon interval */
-+ u32 beacon_interval;
-+
-+ u16 capabilities;
-+ u8 rate_supported_len;
-+ u8 rate_supported[13];
-+
-+ /*** Encryption settings (WEP) ***/
-+ u32 auth_alg; /* used in transmit_authen1 */
-+ u8 wep_enabled;
-+ u8 wep_restricted;
-+ u8 wep_current_index;
-+ wep_key_t wep_keys[DOT11_MAX_DEFAULT_WEP_KEYS]; /* the default WEP keys */
-+ key_struct_t wep_key_struct[10];
-+
-+ /*** Unknown ***/
-+ u8 dtim_interval;
-+
-+#ifdef ACX_MEM
-+ u32 acx_txbuf_start;
-+ int acx_txbuf_numblocks;
-+ u32 acx_txbuf_free; /* addr of head of free list */
-+ int acx_txbuf_blocks_free; /* how many are still open */
-+ queueindicator_t *acx_queue_indicator;
-+#endif
-+
-+ /*** Card Rx/Tx management ***/
-+ u16 rx_config_1;
-+ u16 rx_config_2;
-+ u16 memblocksize;
-+ unsigned int tx_free;
-+ unsigned int tx_head; /* keep as close as possible to Tx stuff below (cache line) */
-+ u16 phy_header_len;
-+
-+/*************************************************************************
-+ *** PCI/USB/... must be last or else hw agnostic code breaks horribly ***
-+ *************************************************************************/
-+
-+ /* hack to let common code compile. FIXME */
-+ dma_addr_t rxhostdesc_startphy;
-+
-+ /*** PCI stuff ***/
-+#if defined(ACX_PCI) || defined(ACX_MEM)
-+ /* pointers to tx buffers, tx host descriptors (in host memory)
-+ ** and tx descs in device memory */
-+ unsigned int tx_tail;
-+ u8 *txbuf_start;
-+ txhostdesc_t *txhostdesc_start;
-+ txdesc_t *txdesc_start; /* points to PCI-mapped memory */
-+ dma_addr_t txbuf_startphy;
-+ dma_addr_t txhostdesc_startphy;
-+ /* sizes of above host memory areas */
-+ unsigned int txbuf_area_size;
-+ unsigned int txhostdesc_area_size;
-+
-+ unsigned int txdesc_size; /* size of txdesc; ACX111 = ACX100 + 4 */
-+ client_t *txc[TX_CNT];
-+ u16 txr[TX_CNT];
-+
-+ /* same for rx */
-+ unsigned int rx_tail;
-+ rxbuffer_t *rxbuf_start;
-+ rxhostdesc_t *rxhostdesc_start;
-+ rxdesc_t *rxdesc_start;
-+ /* physical addresses of above host memory areas */
-+ dma_addr_t rxbuf_startphy;
-+ /* dma_addr_t rxhostdesc_startphy; */
-+ unsigned int rxbuf_area_size;
-+ unsigned int rxhostdesc_area_size;
-+
-+ u8 need_radio_fw;
-+ u8 irqs_active; /* whether irq sending is activated */
-+
-+ const u16 *io; /* points to ACX100 or ACX111 PCI I/O register address set */
-+
-+#ifdef ACX_PCI
-+ struct pci_dev *pdev;
-+#endif
-+#ifdef ACX_MEM
-+ struct device *dev;
-+#endif
-+
-+#ifdef ACX_PCI
-+ unsigned long membase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *membase;
-+#endif
-+ unsigned long membase2;
-+#ifdef ACX_PCI
-+ void __iomem *iobase;
-+#endif
-+#ifdef ACX_MEM
-+ volatile u32 *iobase;
-+#endif
-+ void __iomem *iobase2;
-+ /* command interface */
-+ u8 __iomem *cmd_area;
-+ u8 __iomem *info_area;
-+
-+ u16 irq_mask; /* interrupt types to mask out (not wanted) with many IRQs activated */
-+ u16 irq_mask_off; /* interrupt types to mask out (not wanted) with IRQs off */
-+ unsigned int irq_loops_this_jiffy;
-+ unsigned long irq_last_jiffies;
-+#endif
-+
-+ /*** USB stuff ***/
-+#ifdef ACX_USB
-+ struct usb_device *usbdev;
-+
-+ rxbuffer_t rxtruncbuf;
-+
-+ usb_tx_t *usb_tx;
-+ usb_rx_t *usb_rx;
-+
-+ int bulkinep; /* bulk-in endpoint */
-+ int bulkoutep; /* bulk-out endpoint */
-+ int rxtruncsize;
-+#endif
-+
-+};
-+
-+static inline acx_device_t*
-+ndev2adev(struct net_device *ndev)
-+{
-+ return netdev_priv(ndev);
-+}
-+
-+
-+/* For use with ACX1xx_IE_RXCONFIG */
-+/* bit description
-+ * 13 include additional header (length etc.) *required*
-+ * struct is defined in 'struct rxbuffer'
-+ * is this bit acx100 only? does acx111 always put the header,
-+ * and bit setting is irrelevant? --vda
-+ * 10 receive frames only with SSID used in last join cmd
-+ * 9 discard broadcast
-+ * 8 receive packets for multicast address 1
-+ * 7 receive packets for multicast address 0
-+ * 6 discard all multicast packets
-+ * 5 discard frames from foreign BSSID
-+ * 4 discard frames with foreign destination MAC address
-+ * 3 promiscuous mode (receive ALL frames, disable filter)
-+ * 2 include FCS
-+ * 1 include phy header
-+ * 0 ???
-+ */
-+#define RX_CFG1_INCLUDE_RXBUF_HDR 0x2000 /* ACX100 only */
-+#define RX_CFG1_FILTER_SSID 0x0400
-+#define RX_CFG1_FILTER_BCAST 0x0200
-+#define RX_CFG1_RCV_MC_ADDR1 0x0100
-+#define RX_CFG1_RCV_MC_ADDR0 0x0080
-+#define RX_CFG1_FILTER_ALL_MULTI 0x0040
-+#define RX_CFG1_FILTER_BSSID 0x0020
-+#define RX_CFG1_FILTER_MAC 0x0010
-+#define RX_CFG1_RCV_PROMISCUOUS 0x0008
-+#define RX_CFG1_INCLUDE_FCS 0x0004
-+#define RX_CFG1_INCLUDE_PHY_HDR (WANT_PHY_HDR ? 0x0002 : 0)
-+/* bit description
-+ * 11 receive association requests etc.
-+ * 10 receive authentication frames
-+ * 9 receive beacon frames
-+ * 8 receive contention free packets
-+ * 7 receive control frames
-+ * 6 receive data frames
-+ * 5 receive broken frames
-+ * 4 receive management frames
-+ * 3 receive probe requests
-+ * 2 receive probe responses
-+ * 1 receive RTS/CTS/ACK frames
-+ * 0 receive other
-+ */
-+#define RX_CFG2_RCV_ASSOC_REQ 0x0800
-+#define RX_CFG2_RCV_AUTH_FRAMES 0x0400
-+#define RX_CFG2_RCV_BEACON_FRAMES 0x0200
-+#define RX_CFG2_RCV_CONTENTION_FREE 0x0100
-+#define RX_CFG2_RCV_CTRL_FRAMES 0x0080
-+#define RX_CFG2_RCV_DATA_FRAMES 0x0040
-+#define RX_CFG2_RCV_BROKEN_FRAMES 0x0020
-+#define RX_CFG2_RCV_MGMT_FRAMES 0x0010
-+#define RX_CFG2_RCV_PROBE_REQ 0x0008
-+#define RX_CFG2_RCV_PROBE_RESP 0x0004
-+#define RX_CFG2_RCV_ACK_FRAMES 0x0002
-+#define RX_CFG2_RCV_OTHER 0x0001
-+
-+/* For use with ACX1xx_IE_FEATURE_CONFIG */
-+#define FEATURE1_80MHZ_CLOCK 0x00000040L
-+#define FEATURE1_4X 0x00000020L
-+#define FEATURE1_LOW_RX 0x00000008L
-+#define FEATURE1_EXTRA_LOW_RX 0x00000001L
-+
-+#define FEATURE2_SNIFFER 0x00000080L
-+#define FEATURE2_NO_TXCRYPT 0x00000001L
-+
-+/*-- get and set mask values --*/
-+#define GETSET_LED_POWER 0x00000001L
-+#define GETSET_STATION_ID 0x00000002L
-+#define SET_TEMPLATES 0x00000004L
-+#define SET_STA_LIST 0x00000008L
-+#define GETSET_TX 0x00000010L
-+#define GETSET_RX 0x00000020L
-+#define SET_RXCONFIG 0x00000040L
-+#define GETSET_ANTENNA 0x00000080L
-+#define GETSET_SENSITIVITY 0x00000100L
-+#define GETSET_TXPOWER 0x00000200L
-+#define GETSET_ED_THRESH 0x00000400L
-+#define GETSET_CCA 0x00000800L
-+#define GETSET_POWER_80211 0x00001000L
-+#define GETSET_RETRY 0x00002000L
-+#define GETSET_REG_DOMAIN 0x00004000L
-+#define GETSET_CHANNEL 0x00008000L
-+/* Used when ESSID changes etc and we need to scan for AP anew */
-+#define GETSET_RESCAN 0x00010000L
-+#define GETSET_MODE 0x00020000L
-+#define GETSET_WEP 0x00040000L
-+#define SET_WEP_OPTIONS 0x00080000L
-+#define SET_MSDU_LIFETIME 0x00100000L
-+#define SET_RATE_FALLBACK 0x00200000L
-+
-+/* keep in sync with the above */
-+#define GETSET_ALL (0 \
-+/* GETSET_LED_POWER */ | 0x00000001L \
-+/* GETSET_STATION_ID */ | 0x00000002L \
-+/* SET_TEMPLATES */ | 0x00000004L \
-+/* SET_STA_LIST */ | 0x00000008L \
-+/* GETSET_TX */ | 0x00000010L \
-+/* GETSET_RX */ | 0x00000020L \
-+/* SET_RXCONFIG */ | 0x00000040L \
-+/* GETSET_ANTENNA */ | 0x00000080L \
-+/* GETSET_SENSITIVITY */| 0x00000100L \
-+/* GETSET_TXPOWER */ | 0x00000200L \
-+/* GETSET_ED_THRESH */ | 0x00000400L \
-+/* GETSET_CCA */ | 0x00000800L \
-+/* GETSET_POWER_80211 */| 0x00001000L \
-+/* GETSET_RETRY */ | 0x00002000L \
-+/* GETSET_REG_DOMAIN */ | 0x00004000L \
-+/* GETSET_CHANNEL */ | 0x00008000L \
-+/* GETSET_RESCAN */ | 0x00010000L \
-+/* GETSET_MODE */ | 0x00020000L \
-+/* GETSET_WEP */ | 0x00040000L \
-+/* SET_WEP_OPTIONS */ | 0x00080000L \
-+/* SET_MSDU_LIFETIME */ | 0x00100000L \
-+/* SET_RATE_FALLBACK */ | 0x00200000L \
-+ )
-+
-+
-+/***********************************************************************
-+** Firmware loading
-+*/
-+#include <linux/firmware.h> /* request_firmware() */
-+#include <linux/pci.h> /* struct pci_device */
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct acx100_ie_memblocksize {
-+ u16 type;
-+ u16 len;
-+ u16 size;
-+} ACX_PACKED acx100_ie_memblocksize_t;
-+
-+typedef struct acx100_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 AreaSize;
-+ u32 RxQueueStart;
-+ u8 QueueOptions;
-+ u8 NumTxQueues;
-+ u8 NumRxDesc; /* for USB only */
-+ u8 pad1;
-+ u32 QueueEnd;
-+ u32 HostQueueEnd; /* QueueEnd2 */
-+ u32 TxQueueStart;
-+ u8 TxQueuePri;
-+ u8 NumTxDesc;
-+ u16 pad2;
-+} ACX_PACKED acx100_ie_queueconfig_t;
-+
-+typedef struct acx111_ie_queueconfig {
-+ u16 type;
-+ u16 len;
-+ u32 tx_memory_block_address;
-+ u32 rx_memory_block_address;
-+ u32 rx1_queue_address;
-+ u32 reserved1;
-+ u32 tx1_queue_address;
-+ u8 tx1_attributes;
-+ u16 reserved2;
-+ u8 reserved3;
-+} ACX_PACKED acx111_ie_queueconfig_t;
-+
-+typedef struct acx100_ie_memconfigoption {
-+ u16 type;
-+ u16 len;
-+ u32 DMA_config;
-+ acx_ptr pRxHostDesc;
-+ u32 rx_mem;
-+ u32 tx_mem;
-+ u16 RxBlockNum;
-+ u16 TxBlockNum;
-+} ACX_PACKED acx100_ie_memconfigoption_t;
-+
-+typedef struct acx111_ie_memoryconfig {
-+ u16 type;
-+ u16 len;
-+ u16 no_of_stations;
-+ u16 memory_block_size;
-+ u8 tx_rx_memory_block_allocation;
-+ u8 count_rx_queues;
-+ u8 count_tx_queues;
-+ u8 options;
-+ u8 fragmentation;
-+ u16 reserved1;
-+ u8 reserved2;
-+
-+ /* start of rx1 block */
-+ u8 rx_queue1_count_descs;
-+ u8 rx_queue1_reserved1;
-+ u8 rx_queue1_type; /* must be set to 7 */
-+ u8 rx_queue1_prio; /* must be set to 0 */
-+ acx_ptr rx_queue1_host_rx_start;
-+ /* end of rx1 block */
-+
-+ /* start of tx1 block */
-+ u8 tx_queue1_count_descs;
-+ u8 tx_queue1_reserved1;
-+ u8 tx_queue1_reserved2;
-+ u8 tx_queue1_attributes;
-+ /* end of tx1 block */
-+} ACX_PACKED acx111_ie_memoryconfig_t;
-+
-+typedef struct acx_ie_memmap {
-+ u16 type;
-+ u16 len;
-+ u32 CodeStart;
-+ u32 CodeEnd;
-+ u32 WEPCacheStart;
-+ u32 WEPCacheEnd;
-+ u32 PacketTemplateStart;
-+ u32 PacketTemplateEnd;
-+ u32 QueueStart;
-+ u32 QueueEnd;
-+ u32 PoolStart;
-+ u32 PoolEnd;
-+} ACX_PACKED acx_ie_memmap_t;
-+
-+typedef struct acx111_ie_feature_config {
-+ u16 type;
-+ u16 len;
-+ u32 feature_options;
-+ u32 data_flow_options;
-+} ACX_PACKED acx111_ie_feature_config_t;
-+
-+typedef struct acx111_ie_tx_level {
-+ u16 type;
-+ u16 len;
-+ u8 level;
-+} ACX_PACKED acx111_ie_tx_level_t;
-+
-+#define PS_CFG_ENABLE 0x80
-+#define PS_CFG_PENDING 0x40 /* status flag when entering PS */
-+#define PS_CFG_WAKEUP_MODE_MASK 0x07
-+#define PS_CFG_WAKEUP_BY_HOST 0x03
-+#define PS_CFG_WAKEUP_EACH_ITVL 0x02
-+#define PS_CFG_WAKEUP_ON_DTIM 0x01
-+#define PS_CFG_WAKEUP_ALL_BEAC 0x00
-+
-+/* Enhanced PS mode: sleep until Rx Beacon w/ the STA's AID bit set
-+** in the TIM; newer firmwares only(?) */
-+#define PS_OPT_ENA_ENHANCED_PS 0x04
-+#define PS_OPT_TX_PSPOLL 0x02 /* send PSPoll frame to fetch waiting frames from AP (on frame with matching AID) */
-+#define PS_OPT_STILL_RCV_BCASTS 0x01
-+
-+typedef struct acx100_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u16 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx100_ie_powersave_t;
-+
-+typedef struct acx111_ie_powersave {
-+ u16 type;
-+ u16 len;
-+ u8 wakeup_cfg;
-+ u8 listen_interval; /* for EACH_ITVL: wake up every "beacon units" interval */
-+ u8 options;
-+ u8 hangover_period; /* remaining wake time after Tx MPDU w/ PS bit, in values of 1/1024 seconds */
-+ u32 beacon_rx_time;
-+ u32 enhanced_ps_transition_time; /* rem. wake time for Enh. PS */
-+} ACX_PACKED acx111_ie_powersave_t;
-+
-+
-+/***********************************************************************
-+** Commands and template structures
-+*/
-+
-+/*
-+** SCAN command structure
-+**
-+** even though acx100 scan rates match RATE100 constants,
-+** acx111 ones do not match! Therefore we do not use RATE100 #defines */
-+#define ACX_SCAN_RATE_1 10
-+#define ACX_SCAN_RATE_2 20
-+#define ACX_SCAN_RATE_5 55
-+#define ACX_SCAN_RATE_11 110
-+#define ACX_SCAN_RATE_22 220
-+#define ACX_SCAN_RATE_PBCC 0x80 /* OR with this if needed */
-+#define ACX_SCAN_OPT_ACTIVE 0x00 /* a bit mask */
-+#define ACX_SCAN_OPT_PASSIVE 0x01
-+/* Background scan: we go into Power Save mode (by transmitting
-+** NULL data frame to AP with the power mgmt bit set), do the scan,
-+** and then exit Power Save mode. A plus is that AP buffers frames
-+** for us while we do background scan. Thus we avoid frame losses.
-+** Background scan can be active or passive, just like normal one */
-+#define ACX_SCAN_OPT_BACKGROUND 0x02
-+typedef struct acx100_scan {
-+ u16 count; /* number of scans to do, 0xffff == continuous */
-+ u16 start_chan;
-+ u16 flags; /* channel list mask; 0x8000 == all channels? */
-+ u8 max_rate; /* max. probe rate */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration;
-+ u16 max_probe_delay;
-+} ACX_PACKED acx100_scan_t; /* length 0xc */
-+
-+#define ACX111_SCAN_RATE_6 0x0B
-+#define ACX111_SCAN_RATE_9 0x0F
-+#define ACX111_SCAN_RATE_12 0x0A
-+#define ACX111_SCAN_RATE_18 0x0E
-+#define ACX111_SCAN_RATE_24 0x09
-+#define ACX111_SCAN_RATE_36 0x0D
-+#define ACX111_SCAN_RATE_48 0x08
-+#define ACX111_SCAN_RATE_54 0x0C
-+#define ACX111_SCAN_OPT_5GHZ 0x04 /* else 2.4GHZ */
-+#define ACX111_SCAN_MOD_SHORTPRE 0x01 /* you can combine SHORTPRE and PBCC */
-+#define ACX111_SCAN_MOD_PBCC 0x80
-+#define ACX111_SCAN_MOD_OFDM 0x40
-+typedef struct acx111_scan {
-+ u16 count; /* number of scans to do */
-+ u8 channel_list_select; /* 0: scan all channels, 1: from chan_list only */
-+ u16 reserved1;
-+ u8 reserved2;
-+ u8 rate; /* rate for probe requests (if active scan) */
-+ u8 options; /* bit mask, see defines above */
-+ u16 chan_duration; /* min time to wait for reply on one channel (in TU) */
-+ /* (active scan only) (802.11 section 11.1.3.2.2) */
-+ u16 max_probe_delay; /* max time to wait for reply on one channel (active scan) */
-+ /* time to listen on a channel (passive scan) */
-+ u8 modulation;
-+ u8 channel_list[26]; /* bits 7:0 first byte: channels 8:1 */
-+ /* bits 7:0 second byte: channels 16:9 */
-+ /* 26 bytes is enough to cover 802.11a */
-+} ACX_PACKED acx111_scan_t;
-+
-+
-+/*
-+** Radio calibration command structure
-+*/
-+typedef struct acx111_cmd_radiocalib {
-+/* 0x80000000 == automatic calibration by firmware, according to interval;
-+ * bits 0..3: select calibration methods to go through:
-+ * calib based on DC, AfeDC, Tx mismatch, Tx equilization */
-+ u32 methods;
-+ u32 interval;
-+} ACX_PACKED acx111_cmd_radiocalib_t;
-+
-+
-+/*
-+** Packet template structures
-+**
-+** Packet templates store contents of Beacon, Probe response, Probe request,
-+** Null data frame, and TIM data frame. Firmware automatically transmits
-+** contents of template at appropriate time:
-+** - Beacon: when configured as AP or Ad-hoc
-+** - Probe response: when configured as AP or Ad-hoc, whenever
-+** a Probe request frame is received
-+** - Probe request: when host issues SCAN command (active)
-+** - Null data frame: when entering 802.11 power save mode
-+** - TIM data: at the end of Beacon frames (if no TIM template
-+** is configured, then transmits default TIM)
-+** NB:
-+** - size field must be set to size of actual template
-+** (NOT sizeof(struct) - templates are variable in length),
-+** size field is not itself counted.
-+** - members flagged with an asterisk must be initialized with host,
-+** rest must be zero filled.
-+** - variable length fields shown only in comments */
-+typedef struct acx_template_tim {
-+ u16 size;
-+ u8 tim_eid; /* 00 1 TIM IE ID * */
-+ u8 len; /* 01 1 Length * */
-+ u8 dtim_cnt; /* 02 1 DTIM Count */
-+ u8 dtim_period; /* 03 1 DTIM Period */
-+ u8 bitmap_ctrl; /* 04 1 Bitmap Control * (except bit0) */
-+ /* 05 n Partial Virtual Bitmap * */
-+ u8 variable[0x100 - 1-1-1-1-1];
-+} ACX_PACKED acx_template_tim_t;
-+
-+typedef struct acx_template_probereq {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address * */
-+ u8 sa[6]; /* 0A 6 Source Address * */
-+ u8 bssid[6]; /* 10 6 BSSID * */
-+ u16 seq; /* 16 2 Sequence Control */
-+ /* 18 n SSID * */
-+ /* nn n Supported Rates * */
-+ u8 variable[0x44 - 2-2-6-6-6-2];
-+} ACX_PACKED acx_template_probereq_t;
-+
-+typedef struct acx_template_proberesp {
-+ u16 size;
-+ u16 fc; /* 00 2 fc * (bits [15:12] and [10:8] per 802.11 section 7.1.3.1) */
-+ u16 dur; /* 02 2 Duration */
-+ u8 da[6]; /* 04 6 Destination Address */
-+ u8 sa[6]; /* 0A 6 Source Address */
-+ u8 bssid[6]; /* 10 6 BSSID */
-+ u16 seq; /* 16 2 Sequence Control */
-+ u8 timestamp[8];/* 18 8 Timestamp */
-+ u16 beacon_interval; /* 20 2 Beacon Interval * */
-+ u16 cap; /* 22 2 Capability Information * */
-+ /* 24 n SSID * */
-+ /* nn n Supported Rates * */
-+ /* nn 1 DS Parameter Set * */
-+ u8 variable[0x54 - 2-2-6-6-6-2-8-2-2];
-+} ACX_PACKED acx_template_proberesp_t;
-+#define acx_template_beacon_t acx_template_proberesp_t
-+#define acx_template_beacon acx_template_proberesp
-+
-+typedef struct acx_template_nullframe {
-+ u16 size;
-+ struct wlan_hdr_a3 hdr;
-+} ACX_PACKED acx_template_nullframe_t;
-+
-+
-+/*
-+** JOIN command structure
-+**
-+** as opposed to acx100, acx111 dtim interval is AFTER rates_basic111.
-+** NOTE: took me about an hour to get !@#$%^& packing right --> struct packing is eeeeevil... */
-+typedef struct acx_joinbss {
-+ u8 bssid[ETH_ALEN];
-+ u16 beacon_interval;
-+ union {
-+ struct {
-+ u8 dtim_interval;
-+ u8 rates_basic;
-+ u8 rates_supported;
-+ /*
-+ * ARM compiler doesn't pack correctly unless unions
-+ * inside structures are multiples of 4 bytes. Ugh.
-+ */
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx100;
-+ struct {
-+ u16 rates_basic;
-+ u8 dtim_interval;
-+ u8 genfrm_txrate; /* generated frame (bcn, proberesp, RTS, PSpoll) tx rate */
-+ } ACX_PACKED acx111;
-+ /*
-+ * ARM compiler doesn't pack correctly unles unions are aligned on
-+ * 4 byte boundaries and are multiples of 4 bytes.
-+ */
-+ struct {
-+ u8 d1;
-+ u8 d2;
-+ u8 d3;
-+ u8 genfrm_txrate;
-+ } ACX_PACKED txrate;
-+ } ACX_PACKED u;
-+ u8 genfrm_mod_pre; /* generated frame modulation/preamble:
-+ ** bit7: PBCC, bit6: OFDM (else CCK/DQPSK/DBPSK)
-+ ** bit5: short pre */
-+ u8 macmode; /* BSS Type, must be one of ACX_MODE_xxx */
-+ u8 channel;
-+ u8 essid_len;
-+ char essid[IW_ESSID_MAX_SIZE];
-+} ACX_PACKED acx_joinbss_t;
-+
-+#define JOINBSS_RATES_1 0x01
-+#define JOINBSS_RATES_2 0x02
-+#define JOINBSS_RATES_5 0x04
-+#define JOINBSS_RATES_11 0x08
-+#define JOINBSS_RATES_22 0x10
-+
-+/* Looks like missing bits are used to indicate 11g rates!
-+** (it follows from the fact that constants below match 1:1 to RATE111_nn)
-+** This was actually seen! Look at that Assoc Request sent by acx111,
-+** it _does_ contain 11g rates in basic set:
-+01:30:20.070772 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+01:30:20.074425 Authentication (Open System)-1: Succesful
-+01:30:20.076539 Authentication (Open System)-2:
-+01:30:20.076620 Acknowledgment
-+01:30:20.088546 Assoc Request (xxx) [1.0* 2.0* 5.5* 6.0* 9.0* 11.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit]
-+01:30:20.122413 Assoc Response AID(1) :: Succesful
-+01:30:20.122679 Acknowledgment
-+01:30:20.173204 Beacon (xxx) [1.0* 2.0* 5.5* 11.0* 6.0* 9.0* 12.0* 18.0* 24.0* 36.0* 48.0* 54.0* Mbit] ESS CH: 1
-+*/
-+#define JOINBSS_RATES_BASIC111_1 0x0001
-+#define JOINBSS_RATES_BASIC111_2 0x0002
-+#define JOINBSS_RATES_BASIC111_5 0x0004
-+#define JOINBSS_RATES_BASIC111_11 0x0020
-+#define JOINBSS_RATES_BASIC111_22 0x0100
-+
-+
-+/***********************************************************************
-+*/
-+typedef struct mem_read_write {
-+ u16 addr;
-+ u16 type; /* 0x0 int. RAM / 0xffff MAC reg. / 0x81 PHY RAM / 0x82 PHY reg.; or maybe it's actually 0x30 for MAC? Better verify it by writing and reading back and checking whether the value holds! */
-+ u32 len;
-+ u32 data;
-+} ACX_PACKED mem_read_write_t;
-+
-+typedef struct firmware_image {
-+ u32 chksum;
-+ u32 size;
-+ u8 data[1]; /* the byte array of the actual firmware... */
-+} ACX_PACKED firmware_image_t;
-+
-+typedef struct acx_cmd_radioinit {
-+ u32 offset;
-+ u32 len;
-+} ACX_PACKED acx_cmd_radioinit_t;
-+
-+typedef struct acx100_ie_wep_options {
-+ u16 type;
-+ u16 len;
-+ u16 NumKeys; /* max # of keys */
-+ u8 WEPOption; /* 0 == decrypt default key only, 1 == override decrypt */
-+ u8 Pad; /* used only for acx111 */
-+} ACX_PACKED acx100_ie_wep_options_t;
-+
-+typedef struct ie_dot11WEPDefaultKey {
-+ u16 type;
-+ u16 len;
-+ u8 action;
-+ u8 keySize;
-+ u8 defaultKeyNum;
-+ u8 key[29]; /* check this! was Key[19] */
-+} ACX_PACKED ie_dot11WEPDefaultKey_t;
-+
-+typedef struct acx111WEPDefaultKey {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 action; /* NOTE: this is a u16, NOT a u8!! */
-+ u16 reserved;
-+ u8 keySize;
-+ u8 type;
-+ u8 index;
-+ u8 defaultKeyNum;
-+ u8 counter[6];
-+ u8 key[32]; /* up to 32 bytes (for TKIP!) */
-+} ACX_PACKED acx111WEPDefaultKey_t;
-+
-+typedef struct ie_dot11WEPDefaultKeyID {
-+ u16 type;
-+ u16 len;
-+ u8 KeyID;
-+} ACX_PACKED ie_dot11WEPDefaultKeyID_t;
-+
-+typedef struct acx100_cmd_wep_mgmt {
-+ u8 MacAddr[ETH_ALEN];
-+ u16 Action;
-+ u16 KeySize;
-+ u8 Key[29]; /* 29*8 == 232bits == WEP256 */
-+} ACX_PACKED acx100_cmd_wep_mgmt_t;
-+
-+typedef struct acx_ie_generic {
-+ u16 type;
-+ u16 len;
-+ union {
-+ /* Association ID IE: just a 16bit value: */
-+ u16 aid;
-+ /* generic member for quick implementation of commands */
-+ u8 bytes[32];
-+ } ACX_PACKED m;
-+} ACX_PACKED acx_ie_generic_t;
-+
-+/***********************************************************************
-+*/
-+#define CHECK_SIZEOF(type,size) { \
-+ extern void BUG_bad_size_for_##type(void); \
-+ if (sizeof(type)!=(size)) BUG_bad_size_for_##type(); \
-+}
-+
-+static inline void
-+acx_struct_size_check(void)
-+{
-+ CHECK_SIZEOF(txdesc_t, 0x30);
-+ CHECK_SIZEOF(acx100_ie_memconfigoption_t, 24);
-+ CHECK_SIZEOF(acx100_ie_queueconfig_t, 0x20);
-+ CHECK_SIZEOF(acx_joinbss_t, 0x30);
-+ /* IEs need 4 bytes for (type,len) tuple */
-+ CHECK_SIZEOF(acx111_ie_configoption_t, ACX111_IE_CONFIG_OPTIONS_LEN + 4);
-+}
-+
-+
-+/***********************************************************************
-+** Global data
-+*/
-+extern const u8 acx_bitpos2ratebyte[];
-+extern const u8 acx_bitpos2rate100[];
-+
-+extern const u8 acx_reg_domain_ids[];
-+extern const char * const acx_reg_domain_strings[];
-+enum {
-+ acx_reg_domain_ids_len = 8
-+};
-+
-+extern const struct iw_handler_def acx_ioctl_handler_def;
-Index: linux-2.6.22/drivers/net/wireless/acx/common.c
-===================================================================
---- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.22/drivers/net/wireless/acx/common.c 2007-08-23 18:34:19.000000000 +0200
-@@ -0,0 +1,7388 @@
-+/***********************************************************************
-+** Copyright (C) 2003 ACX100 Open Source Project
-+**
-+** The contents of this file are subject to the Mozilla Public
-+** License Version 1.1 (the "License"); you may not use this file
-+** except in compliance with the License. You may obtain a copy of
-+** the License at http://www.mozilla.org/MPL/
-+**
-+** Software distributed under the License is distributed on an "AS
-+** IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
-+** implied. See the License for the specific language governing
-+** rights and limitations under the License.
-+**
-+** Alternatively, the contents of this file may be used under the
-+** terms of the GNU Public License version 2 (the "GPL"), in which
-+** case the provisions of the GPL are applicable instead of the
-+** above. If you wish to allow the use of your version of this file
-+** only under the terms of the GPL and not to allow others to use
-+** your version of this file under the MPL, indicate your decision
-+** by deleting the provisions above and replace them with the notice
-+** and other provisions required by the GPL. If you do not delete
-+** the provisions above, a recipient may use your version of this
-+** file under either the MPL or the GPL.
-+** ---------------------------------------------------------------------
-+** Inquiries regarding the ACX100 Open Source Project can be
-+** made directly to:
-+**
-+** acx100-users@lists.sf.net
-+** http://acx100.sf.net
-+** ---------------------------------------------------------------------
-+*/
-+
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 18)
-+#include <linux/config.h>
-+#endif
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/types.h>
-+#include <linux/slab.h>
-+#include <linux/delay.h>
-+#include <linux/proc_fs.h>
-+#include <linux/if_arp.h>
-+#include <linux/rtnetlink.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/wireless.h>
-+#include <linux/pm.h>
-+#include <linux/vmalloc.h>
-+#include <net/iw_handler.h>
-+
-+#include "acx_hw.h"
-+#include "acx.h"
-+
-+
-+/***********************************************************************
-+*/
-+static client_t *acx_l_sta_list_alloc(acx_device_t *adev);
-+static client_t *acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address);
-+
-+static int acx_l_process_data_frame_master(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static int acx_l_process_data_frame_client(acx_device_t *adev, rxbuffer_t *rxbuf);
-+/* static int acx_l_process_NULL_frame(acx_device_t *adev, rxbuffer_t *rxbuf, int vala); */
-+static int acx_l_process_mgmt_frame(acx_device_t *adev, rxbuffer_t *rxbuf);
-+static void acx_l_process_disassoc_from_sta(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_disassoc_from_ap(acx_device_t *adev, const wlan_fr_disassoc_t *req);
-+static void acx_l_process_deauth_from_sta(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static void acx_l_process_deauth_from_ap(acx_device_t *adev, const wlan_fr_deauthen_t *req);
-+static int acx_l_process_probe_response(acx_device_t *adev, wlan_fr_proberesp_t *req, const rxbuffer_t *rxbuf);
-+static int acx_l_process_assocresp(acx_device_t *adev, const wlan_fr_assocresp_t *req);
-+static int acx_l_process_reassocresp(acx_device_t *adev, const wlan_fr_reassocresp_t *req);
-+static int acx_l_process_authen(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req);
-+static int acx_l_transmit_reassocresp(acx_device_t *adev, const wlan_fr_reassocreq_t *req);
-+static int acx_l_transmit_deauthen(acx_device_t *adev, const u8 *addr, u16 reason);
-+static int acx_l_transmit_authen1(acx_device_t *adev);
-+static int acx_l_transmit_authen2(acx_device_t *adev, const wlan_fr_authen_t *req, client_t *clt);
-+static int acx_l_transmit_authen3(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_authen4(acx_device_t *adev, const wlan_fr_authen_t *req);
-+static int acx_l_transmit_assoc_req(acx_device_t *adev);
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+unsigned int acx_debug /* will add __read_mostly later */ = ACX_DEFAULT_MSG;
-+/* parameter is 'debug', corresponding var is acx_debug */
-+module_param_named(debug, acx_debug, uint, 0);
-+MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)");
-+#endif
-+
-+#ifdef MODULE_LICENSE
-+MODULE_LICENSE("Dual MPL/GPL");
-+#endif
-+/* USB had this: MODULE_AUTHOR("Martin Wawro <martin.wawro AT uni-dortmund.de>"); */
-+MODULE_AUTHOR("ACX100 Open Source Driver development team");
-+MODULE_DESCRIPTION("Driver for TI ACX1xx based wireless cards (CardBus/PCI/USB)");
-+
-+
-+/***********************************************************************
-+*/
-+/* Probably a number of acx's intermediate buffers for USB transfers,
-+** not to be confused with number of descriptors in tx/rx rings
-+** (which are not directly accessible to host in USB devices) */
-+#define USB_RX_CNT 10
-+#define USB_TX_CNT 10
-+
-+
-+/***********************************************************************
-+*/
-+
-+/* minutes to wait until next radio recalibration: */
-+#define RECALIB_PAUSE 5
-+
-+/* Please keep acx_reg_domain_ids_len in sync... */
-+const u8 acx_reg_domain_ids[acx_reg_domain_ids_len] =
-+ { 0x10, 0x20, 0x30, 0x31, 0x32, 0x40, 0x41, 0x51 };
-+static const u16 reg_domain_channel_masks[acx_reg_domain_ids_len] =
-+#ifdef ACX_ALLOW_ALLCHANNELS
-+ { 0x3fff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#else
-+ { 0x07ff, 0x07ff, 0x1fff, 0x0600, 0x1e00, 0x2000, 0x3fff, 0x01fc };
-+#endif
-+const char * const
-+acx_reg_domain_strings[] = {
-+ /* 0 */ " 1-11 FCC (USA)",
-+ /* 1 */ " 1-11 DOC/IC (Canada)",
-+/* BTW: WLAN use in ETSI is regulated by ETSI standard EN 300 328-2 V1.1.2 */
-+ /* 2 */ " 1-13 ETSI (Europe)",
-+ /* 3 */ "10-11 Spain",
-+ /* 4 */ "10-13 France",
-+ /* 5 */ " 14 MKK (Japan)",
-+ /* 6 */ " 1-14 MKK1",
-+ /* 7 */ " 3-9 Israel (not all firmware versions)",
-+ NULL /* needs to remain as last entry */
-+};
-+
-+
-+
-+/***********************************************************************
-+** Debugging support
-+*/
-+#ifdef PARANOID_LOCKING
-+static unsigned max_lock_time;
-+static unsigned max_sem_time;
-+
-+void
-+acx_lock_unhold() { max_lock_time = 0; }
-+void
-+acx_sem_unhold() { max_sem_time = 0; }
-+
-+static inline const char*
-+sanitize_str(const char *s)
-+{
-+ const char* t = strrchr(s, '/');
-+ if (t) return t + 1;
-+ return s;
-+}
-+
-+void
-+acx_lock_debug(acx_device_t *adev, const char* where)
-+{
-+ unsigned int count = 100*1000*1000;
-+ where = sanitize_str(where);
-+ while (--count) {
-+ if (!spin_is_locked(&adev->lock)) break;
-+ cpu_relax();
-+ }
-+ if (!count) {
-+ printk(KERN_EMERG "LOCKUP: already taken at %s!\n", adev->last_lock);
-+ BUG();
-+ }
-+ adev->last_lock = where;
-+ rdtscl(adev->lock_time);
-+}
-+void
-+acx_unlock_debug(acx_device_t *adev, const char* where)
-+{
-+#ifdef SMP
-+ if (!spin_is_locked(&adev->lock)) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UNLOCK at %s!\n", where);
-+ BUG();
-+ }
-+#endif
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff;
-+ rdtscl(diff);
-+ diff -= adev->lock_time;
-+ if (diff > max_lock_time) {
-+ where = sanitize_str(where);
-+ printk("max lock hold time %ld CPU ticks from %s "
-+ "to %s\n", diff, adev->last_lock, where);
-+ max_lock_time = diff;
-+ }
-+ }
-+}
-+void
-+acx_down_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count;
-+ unsigned long timeout = jiffies + 5*HZ;
-+
-+ where = sanitize_str(where);
-+
-+ for (;;) {
-+ sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) break;
-+ if (time_after(jiffies, timeout))
-+ break;
-+ msleep(5);
-+ }
-+ if (!sem_count) {
-+ printk(KERN_EMERG "D STATE at %s! last sem at %s\n",
-+ where, adev->last_sem);
-+ dump_stack();
-+ }
-+ adev->last_sem = where;
-+ adev->sem_time = jiffies;
-+ down(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ printk("%s: sem_down %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+void
-+acx_up_debug(acx_device_t *adev, const char* where)
-+{
-+ int sem_count = atomic_read(&adev->sem.count);
-+ if (sem_count) {
-+ where = sanitize_str(where);
-+ printk(KERN_EMERG "STRAY UP at %s! sem.count=%d\n", where, sem_count);
-+ dump_stack();
-+ }
-+ if (acx_debug & L_LOCK) {
-+ unsigned long diff = jiffies - adev->sem_time;
-+ if (diff > max_sem_time) {
-+ where = sanitize_str(where);
-+ printk("max sem hold time %ld jiffies from %s "
-+ "to %s\n", diff, adev->last_sem, where);
-+ max_sem_time = diff;
-+ }
-+ }
-+ up(&adev->sem);
-+ if (acx_debug & L_LOCK) {
-+ where = sanitize_str(where);
-+ printk("%s: sem_up %d -> %d\n",
-+ where, sem_count, atomic_read(&adev->sem.count));
-+ }
-+}
-+#endif /* PARANOID_LOCKING */
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG > 1
-+
-+static int acx_debug_func_indent;
-+#define DEBUG_TSC 0
-+#define FUNC_INDENT_INCREMENT 2
-+
-+#if DEBUG_TSC
-+#define TIMESTAMP(d) unsigned long d; rdtscl(d)
-+#else
-+#define TIMESTAMP(d) unsigned long d = jiffies
-+#endif
-+
-+static const char
-+spaces[] = " " " "; /* Nx10 spaces */
-+
-+void
-+log_fn_enter(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s==> %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+
-+ acx_debug_func_indent += FUNC_INDENT_INCREMENT;
-+}
-+void
-+log_fn_exit(const char *funcname)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname
-+ );
-+}
-+void
-+log_fn_exit_v(const char *funcname, int v)
-+{
-+ int indent;
-+ TIMESTAMP(d);
-+
-+ acx_debug_func_indent -= FUNC_INDENT_INCREMENT;
-+
-+ indent = acx_debug_func_indent;
-+ if (indent >= sizeof(spaces))
-+ indent = sizeof(spaces)-1;
-+
-+ printk("%08ld %s<== %s: %08X\n",
-+ d % 100000000,
-+ spaces + (sizeof(spaces)-1) - indent,
-+ funcname,
-+ v
-+ );
-+}
-+#endif /* ACX_DEBUG > 1 */
-+
-+
-+/***********************************************************************
-+** Basically a msleep with logging
-+*/
-+void
-+acx_s_msleep(int ms)
-+{
-+ FN_ENTER;
-+ msleep(ms);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** Not inlined: it's larger than it seems
-+*/
-+void
-+acx_print_mac(const char *head, const u8 *mac, const char *tail)
-+{
-+ printk("%s"MACSTR"%s", head, MAC(mac), tail);
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_status_name
-+*/
-+static const char*
-+acx_get_status_name(u16 status)
-+{
-+ static const char * const str[] = {
-+ "STOPPED", "SCANNING", "WAIT_AUTH",
-+ "AUTHENTICATED", "ASSOCIATED", "INVALID??"
-+ };
-+ if (status > VEC_SIZE(str)-1)
-+ status = VEC_SIZE(str)-1;
-+
-+ return str[status];
-+}
-+
-+
-+/***********************************************************************
-+** acx_get_packet_type_string
-+*/
-+#if ACX_DEBUG
-+const char*
-+acx_get_packet_type_string(u16 fc)
-+{
-+ static const char * const mgmt_arr[] = {
-+ "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq",
-+ "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp",
-+ "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM",
-+ "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen"
-+ };
-+ static const char * const ctl_arr[] = {
-+ "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd",
-+ "CTL/CFEndCFAck"
-+ };
-+ static const char * const data_arr[] = {
-+ "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll",
-+ "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck",
-+ "DATA/CFPoll", "DATA/CFAck/CFPoll"
-+ };
-+ const char *str;
-+ u8 fstype = (WF_FC_FSTYPE & fc) >> 4;
-+ u8 ctl;
-+
-+ switch (WF_FC_FTYPE & fc) {
-+ case WF_FTYPE_MGMT:
-+ if (fstype < VEC_SIZE(mgmt_arr))
-+ str = mgmt_arr[fstype];
-+ else
-+ str = "MGMT/UNKNOWN";
-+ break;
-+ case WF_FTYPE_CTL:
-+ ctl = fstype - 0x0a;
-+ if (ctl < VEC_SIZE(ctl_arr))
-+ str = ctl_arr[ctl];
-+ else
-+ str = "CTL/UNKNOWN";
-+ break;
-+ case WF_FTYPE_DATA:
-+ if (fstype < VEC_SIZE(data_arr))
-+ str = data_arr[fstype];
-+ else
-+ str = "DATA/UNKNOWN";
-+ break;
-+ default:
-+ str = "UNKNOWN";
-+ break;
-+ }
-+ return str;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_wlan_reason_str
-+*/
-+static inline const char*
-+acx_wlan_reason_str(u16 reason)
-+{
-+ static const char* const reason_str[] = {
-+ /* 0 */ "?",
-+ /* 1 */ "unspecified",
-+ /* 2 */ "prev auth is not valid",
-+ /* 3 */ "leaving BBS",
-+ /* 4 */ "due to inactivity",
-+ /* 5 */ "AP is busy",
-+ /* 6 */ "got class 2 frame from non-auth'ed STA",
-+ /* 7 */ "got class 3 frame from non-assoc'ed STA",
-+ /* 8 */ "STA has left BSS",
-+ /* 9 */ "assoc without auth is not allowed",
-+ /* 10 */ "bad power setting (802.11h)",
-+ /* 11 */ "bad channel (802.11i)",
-+ /* 12 */ "?",
-+ /* 13 */ "invalid IE",
-+ /* 14 */ "MIC failure",
-+ /* 15 */ "four-way handshake timeout",
-+ /* 16 */ "group key handshake timeout",
-+ /* 17 */ "IE is different",
-+ /* 18 */ "invalid group cipher",
-+ /* 19 */ "invalid pairwise cipher",
-+ /* 20 */ "invalid AKMP",
-+ /* 21 */ "unsupported RSN version",
-+ /* 22 */ "invalid RSN IE cap",
-+ /* 23 */ "802.1x failed",
-+ /* 24 */ "cipher suite rejected"
-+ };
-+ return reason < VEC_SIZE(reason_str) ? reason_str[reason] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** acx_cmd_status_str
-+*/
-+const char*
-+acx_cmd_status_str(unsigned int state)
-+{
-+ static const char * const cmd_error_strings[] = {
-+ "Idle",
-+ "Success",
-+ "Unknown Command",
-+ "Invalid Information Element",
-+ "Channel rejected",
-+ "Channel invalid in current regulatory domain",
-+ "MAC invalid",
-+ "Command rejected (read-only information element)",
-+ "Command rejected",
-+ "Already asleep",
-+ "TX in progress",
-+ "Already awake",
-+ "Write only",
-+ "RX in progress",
-+ "Invalid parameter",
-+ "Scan in progress",
-+ "Failed"
-+ };
-+ return state < VEC_SIZE(cmd_error_strings) ?
-+ cmd_error_strings[state] : "?";
-+}
-+
-+
-+/***********************************************************************
-+** get_status_string
-+*/
-+static inline const char*
-+get_status_string(unsigned int status)
-+{
-+ /* A bit shortened, but hopefully still understandable */
-+ static const char * const status_str[] = {
-+ /* 0 */ "Successful",
-+ /* 1 */ "Unspecified failure",
-+ /* 2 */ "reserved",
-+ /* 3 */ "reserved",
-+ /* 4 */ "reserved",
-+ /* 5 */ "reserved",
-+ /* 6 */ "reserved",
-+ /* 7 */ "reserved",
-+ /* 8 */ "reserved",
-+ /* 9 */ "reserved",
-+ /*10 */ "Cannot support all requested capabilities in Capability Information field",
-+ /*11 */ "Reassoc denied (reason outside of 802.11b scope)",
-+ /*12 */ "Assoc denied (reason outside of 802.11b scope) -- maybe MAC filtering by peer?",
-+ /*13 */ "Responding station doesnt support specified auth algorithm -- maybe WEP auth Open vs. Restricted?",
-+ /*14 */ "Auth rejected: wrong transaction sequence number",
-+ /*15 */ "Auth rejected: challenge failure",
-+ /*16 */ "Auth rejected: timeout for next frame in sequence",
-+ /*17 */ "Assoc denied: too many STAs on this AP",
-+ /*18 */ "Assoc denied: requesting STA doesnt support all data rates in basic set",
-+ /*19 */ "Assoc denied: requesting STA doesnt support Short Preamble",
-+ /*20 */ "Assoc denied: requesting STA doesnt support PBCC Modulation",
-+ /*21 */ "Assoc denied: requesting STA doesnt support Channel Agility"
-+ /*22 */ "reserved",
-+ /*23 */ "reserved",
-+ /*24 */ "reserved",
-+ /*25 */ "Assoc denied: requesting STA doesnt support Short Slot Time",
-+ /*26 */ "Assoc denied: requesting STA doesnt support DSSS-OFDM"
-+ };
-+
-+ return status_str[status < VEC_SIZE(status_str) ? status : 2];
-+}
-+
-+
-+/***********************************************************************
-+*/
-+void
-+acx_log_bad_eid(wlan_hdr_t* hdr, int len, wlan_ie_t* ie_ptr)
-+{
-+ if (acx_debug & L_ASSOC) {
-+ int offset = (u8*)ie_ptr - (u8*)hdr;
-+ printk("acx: unknown EID %d in mgmt frame at offset %d. IE: ",
-+ ie_ptr->eid, offset);
-+ /* IE len can be bogus, IE can extend past packet end. Oh well... */
-+ acx_dump_bytes(ie_ptr, ie_ptr->len + 2);
-+ if (acx_debug & L_DATA) {
-+ printk("frame (%s): ",
-+ acx_get_packet_type_string(le16_to_cpu(hdr->fc)));
-+ acx_dump_bytes(hdr, len);
-+ }
-+ }
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#if ACX_DEBUG
-+void
-+acx_dump_bytes(const void *data, int num)
-+{
-+ const u8* ptr = (const u8*)data;
-+
-+ if (num <= 0) {
-+ printk("\n");
-+ return;
-+ }
-+
-+ while (num >= 16) {
-+ printk( "%02X %02X %02X %02X %02X %02X %02X %02X "
-+ "%02X %02X %02X %02X %02X %02X %02X %02X\n",
-+ ptr[0], ptr[1], ptr[2], ptr[3],
-+ ptr[4], ptr[5], ptr[6], ptr[7],
-+ ptr[8], ptr[9], ptr[10], ptr[11],
-+ ptr[12], ptr[13], ptr[14], ptr[15]);
-+ num -= 16;
-+ ptr += 16;
-+ }
-+ if (num > 0) {
-+ while (--num > 0)
-+ printk("%02X ", *ptr++);
-+ printk("%02X\n", *ptr);
-+ }
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_s_get_firmware_version
-+*/
-+void
-+acx_s_get_firmware_version(acx_device_t *adev)
-+{
-+ fw_ver_t fw;
-+ u8 hexarr[4] = { 0, 0, 0, 0 };
-+ int hexidx = 0, val = 0;
-+ const char *num;
-+ char c;
-+
-+ FN_ENTER;
-+
-+ memset(fw.fw_id, 'E', FW_ID_SIZE);
-+ acx_s_interrogate(adev, &fw, ACX1xx_IE_FWREV);
-+ memcpy(adev->firmware_version, fw.fw_id, FW_ID_SIZE);
-+ adev->firmware_version[FW_ID_SIZE] = '\0';
-+
-+ log(L_DEBUG, "fw_ver: fw_id='%s' hw_id=%08X\n",
-+ adev->firmware_version, fw.hw_id);
-+
-+ if (strncmp(fw.fw_id, "Rev ", 4) != 0) {
-+ printk("acx: strange firmware version string "
-+ "'%s', please report\n", adev->firmware_version);
-+ adev->firmware_numver = 0x01090407; /* assume 1.9.4.7 */
-+ } else {
-+ num = &fw.fw_id[4];
-+ while (1) {
-+ c = *num++;
-+ if ((c == '.') || (c == '\0')) {
-+ hexarr[hexidx++] = val;
-+ if ((hexidx > 3) || (c == '\0')) /* end? */
-+ break;
-+ val = 0;
-+ continue;
-+ }
-+ if ((c >= '0') && (c <= '9'))
-+ c -= '0';
-+ else
-+ c = c - 'a' + (char)10;
-+ val = val*16 + c;
-+ }
-+
-+ adev->firmware_numver = (u32)(
-+ (hexarr[0] << 24) | (hexarr[1] << 16)
-+ | (hexarr[2] << 8) | hexarr[3]);
-+ log(L_DEBUG, "firmware_numver 0x%08X\n", adev->firmware_numver);
-+ }
-+ if (IS_ACX111(adev)) {
-+ if (adev->firmware_numver == 0x00010011) {
-+ /* This one does not survive floodpinging */
-+ printk("acx: firmware '%s' is known to be buggy, "
-+ "please upgrade\n", adev->firmware_version);
-+ }
-+ }
-+
-+ adev->firmware_id = le32_to_cpu(fw.hw_id);
-+
-+ /* we're able to find out more detailed chip names now */
-+ switch (adev->firmware_id & 0xffff0000) {
-+ case 0x01010000:
-+ case 0x01020000:
-+ adev->chip_name = "TNETW1100A";
-+ break;
-+ case 0x01030000:
-+ adev->chip_name = "TNETW1100B";
-+ break;
-+ case 0x03000000:
-+ case 0x03010000:
-+ adev->chip_name = "TNETW1130";
-+ break;
-+ case 0x04030000: /* 0x04030101 is TNETW1450 */
-+ adev->chip_name = "TNETW1450";
-+ break;
-+ default:
-+ printk("acx: unknown chip ID 0x%08X, "
-+ "please report\n", adev->firmware_id);
-+ break;
-+ }
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_display_hardware_details
-+**
-+** Displays hw/fw version, radio type etc...
-+*/
-+void
-+acx_display_hardware_details(acx_device_t *adev)
-+{
-+ const char *radio_str, *form_str;
-+
-+ FN_ENTER;
-+
-+ switch (adev->radio_type) {
-+ case RADIO_MAXIM_0D:
-+ radio_str = "Maxim";
-+ break;
-+ case RADIO_RFMD_11:
-+ radio_str = "RFMD";
-+ break;
-+ case RADIO_RALINK_15:
-+ radio_str = "Ralink";
-+ break;
-+ case RADIO_RADIA_16:
-+ radio_str = "Radia";
-+ break;
-+ case RADIO_UNKNOWN_17:
-+ /* TI seems to have a radio which is
-+ * additionally 802.11a capable, too */
-+ radio_str = "802.11a/b/g radio?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_19:
-+ radio_str = "A radio used by Safecom cards?! Please report";
-+ break;
-+ case RADIO_UNKNOWN_1B:
-+ radio_str = "An unknown radio used by TNETW1450 USB adapters";
-+ break;
-+ default:
-+ radio_str = "UNKNOWN, please report radio type name!";
-+ break;
-+ }
-+
-+ switch (adev->form_factor) {
-+ case 0x00:
-+ form_str = "unspecified";
-+ break;
-+ case 0x01:
-+ form_str = "(mini-)PCI / CardBus";
-+ break;
-+ case 0x02:
-+ form_str = "USB";
-+ break;
-+ case 0x03:
-+ form_str = "Compact Flash";
-+ break;
-+ default:
-+ form_str = "UNKNOWN, please report";
-+ break;
-+ }
-+
-+ printk("acx: === chipset %s, radio type 0x%02X (%s), "
-+ "form factor 0x%02X (%s), EEPROM version 0x%02X: "
-+ "uploaded firmware '%s' ===\n",
-+ adev->chip_name, adev->radio_type, radio_str,
-+ adev->form_factor, form_str, adev->eeprom_version,
-+ adev->firmware_version);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+int
-+acx_e_change_mtu(struct net_device *ndev, int mtu)
-+{
-+ enum {
-+ MIN_MTU = 256,
-+ MAX_MTU = WLAN_DATA_MAXLEN - (ETH_HLEN)
-+ };
-+
-+ if (mtu < MIN_MTU || mtu > MAX_MTU)
-+ return -EINVAL;
-+
-+ ndev->mtu = mtu;
-+ return 0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_get_stats, acx_e_get_wireless_stats
-+*/
-+struct net_device_stats*
-+acx_e_get_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->stats;
-+}
-+
-+struct iw_statistics*
-+acx_e_get_wireless_stats(struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ return &adev->wstats;
-+}
-+
-+
-+/***********************************************************************
-+** maps acx111 tx descr rate field to acx100 one
-+*/
-+const u8
-+acx_bitpos2rate100[] = {
-+ RATE100_1 ,/* 0 */
-+ RATE100_2 ,/* 1 */
-+ RATE100_5 ,/* 2 */
-+ RATE100_2 ,/* 3, should not happen */
-+ RATE100_2 ,/* 4, should not happen */
-+ RATE100_11 ,/* 5 */
-+ RATE100_2 ,/* 6, should not happen */
-+ RATE100_2 ,/* 7, should not happen */
-+ RATE100_22 ,/* 8 */
-+ RATE100_2 ,/* 9, should not happen */
-+ RATE100_2 ,/* 10, should not happen */
-+ RATE100_2 ,/* 11, should not happen */
-+ RATE100_2 ,/* 12, should not happen */
-+ RATE100_2 ,/* 13, should not happen */
-+ RATE100_2 ,/* 14, should not happen */
-+ RATE100_2 ,/* 15, should not happen */
-+};
-+
-+u8
-+acx_rate111to100(u16 r) {
-+ return acx_bitpos2rate100[highest_bit(r)];
-+}
-+
-+
-+/***********************************************************************
-+** Calculate level like the feb 2003 windows driver seems to do
-+*/
-+static u8
-+acx_signal_to_winlevel(u8 rawlevel)
-+{
-+ /* u8 winlevel = (u8) (0.5 + 0.625 * rawlevel); */
-+ u8 winlevel = ((4 + (rawlevel * 5)) / 8);
-+
-+ if (winlevel > 100)
-+ winlevel = 100;
-+ return winlevel;
-+}
-+
-+u8
-+acx_signal_determine_quality(u8 signal, u8 noise)
-+{
-+ int qual;
-+
-+ qual = (((signal - 30) * 100 / 70) + (100 - noise * 4)) / 2;
-+
-+ if (qual > 100)
-+ return 100;
-+ if (qual < 0)
-+ return 0;
-+ return qual;
-+}
-+
-+
-+/***********************************************************************
-+** Interrogate/configure commands
-+*/
-+
-+/* FIXME: the lengths given here probably aren't always correct.
-+ * They should be gradually replaced by proper "sizeof(acx1XX_ie_XXXX)-4",
-+ * unless the firmware actually expects a different length than the struct length */
-+static const u16
-+acx100_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx100_ie_powersave_t)-4, /* is that 6 or 8??? */
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx100_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+static const u16
-+acx111_ie_len[] = {
-+ 0,
-+ ACX100_IE_ACX_TIMER_LEN,
-+ sizeof(acx111_ie_powersave_t)-4,
-+ ACX1xx_IE_QUEUE_CONFIG_LEN,
-+ ACX100_IE_BLOCK_SIZE_LEN,
-+ ACX1xx_IE_MEMORY_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_RATE_FALLBACK_LEN,
-+ ACX100_IE_WEP_OPTIONS_LEN,
-+ ACX1xx_IE_MEMORY_MAP_LEN, /* ACX1xx_IE_SSID_LEN, */
-+ 0,
-+ ACX1xx_IE_ASSOC_ID_LEN,
-+ 0,
-+ ACX111_IE_CONFIG_OPTIONS_LEN,
-+ ACX1xx_IE_FWREV_LEN,
-+ ACX1xx_IE_FCS_ERROR_COUNT_LEN,
-+ ACX1xx_IE_MEDIUM_USAGE_LEN,
-+ ACX1xx_IE_RXCONFIG_LEN,
-+ 0,
-+ 0,
-+ sizeof(fw_stats_t)-4,
-+ 0,
-+ ACX1xx_IE_FEATURE_CONFIG_LEN,
-+ ACX111_IE_KEY_CHOOSE_LEN,
-+ ACX1FF_IE_MISC_CONFIG_TABLE_LEN,
-+ ACX1FF_IE_WONE_CONFIG_LEN,
-+ 0,
-+ ACX1FF_IE_TID_CONFIG_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_CALIB_ASSESSMENT_LEN,
-+ ACX1FF_IE_BEACON_FILTER_OPTIONS_LEN,
-+ ACX1FF_IE_LOW_RSSI_THRESH_OPT_LEN,
-+ ACX1FF_IE_NOISE_HISTOGRAM_RESULTS_LEN,
-+ 0,
-+ ACX1FF_IE_PACKET_DETECT_THRESH_LEN,
-+ ACX1FF_IE_TX_CONFIG_OPTIONS_LEN,
-+ ACX1FF_IE_CCA_THRESHOLD_LEN,
-+ ACX1FF_IE_EVENT_MASK_LEN,
-+ ACX1FF_IE_DTIM_PERIOD_LEN,
-+ 0,
-+ ACX1FF_IE_ACI_CONFIG_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ 0,
-+ ACX1FF_IE_EEPROM_VER_LEN,
-+};
-+
-+static const u16
-+acx111_ie_len_dot11[] = {
-+ 0,
-+ ACX1xx_IE_DOT11_STATION_ID_LEN,
-+ 0,
-+ ACX100_IE_DOT11_BEACON_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_DTIM_PERIOD_LEN,
-+ ACX1xx_IE_DOT11_SHORT_RETRY_LIMIT_LEN,
-+ ACX1xx_IE_DOT11_LONG_RETRY_LIMIT_LEN,
-+ ACX100_IE_DOT11_WEP_DEFAULT_KEY_WRITE_LEN,
-+ ACX1xx_IE_DOT11_MAX_XMIT_MSDU_LIFETIME_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_CURRENT_REG_DOMAIN_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_ANTENNA_LEN,
-+ 0,
-+ ACX1xx_IE_DOT11_TX_POWER_LEVEL_LEN,
-+ ACX1xx_IE_DOT11_CURRENT_CCA_MODE_LEN,
-+ ACX100_IE_DOT11_ED_THRESHOLD_LEN,
-+ ACX1xx_IE_DOT11_WEP_DEFAULT_KEY_SET_LEN,
-+ 0,
-+ 0,
-+ 0,
-+};
-+
-+
-+#undef FUNC
-+#define FUNC "configure"
-+#if !ACX_DEBUG
-+int
-+acx_s_configure(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_configure_debug(acx_device_t *adev, void *pdr, int type, const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type - 0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+ if (unlikely(!len)) {
-+ log(L_DEBUG, "zero-length type %s?!\n", typestr);
-+ }
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_CONFIGURE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#undef FUNC
-+#define FUNC "interrogate"
-+#if !ACX_DEBUG
-+int
-+acx_s_interrogate(acx_device_t *adev, void *pdr, int type)
-+{
-+#else
-+int
-+acx_s_interrogate_debug(acx_device_t *adev, void *pdr, int type,
-+ const char* typestr)
-+{
-+#endif
-+ u16 len;
-+ int res;
-+
-+ /* FIXME: no check whether this exceeds the array yet.
-+ * We should probably remember the number of entries... */
-+ if (type < 0x1000)
-+ len = adev->ie_len[type];
-+ else
-+ len = adev->ie_len_dot11[type-0x1000];
-+
-+ log(L_CTL, FUNC"(type:%s,len:%u)\n", typestr, len);
-+
-+ ((acx_ie_generic_t *)pdr)->type = cpu_to_le16(type);
-+ ((acx_ie_generic_t *)pdr)->len = cpu_to_le16(len);
-+ res = acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, pdr, len + 4);
-+ if (unlikely(OK != res)) {
-+#if ACX_DEBUG
-+ printk("%s: "FUNC"(type:%s) FAILED\n", adev->ndev->name, typestr);
-+#else
-+ printk("%s: "FUNC"(type:0x%X) FAILED\n", adev->ndev->name, type);
-+#endif
-+ /* dump_stack() is already done in issue_cmd() */
-+ }
-+ return res;
-+}
-+
-+#if CMD_DISCOVERY
-+void
-+great_inquisitor(acx_device_t *adev)
-+{
-+ static struct {
-+ u16 type;
-+ u16 len;
-+ /* 0x200 was too large here: */
-+ u8 data[0x100 - 4];
-+ } ACX_PACKED ie;
-+ u16 type;
-+
-+ FN_ENTER;
-+
-+ /* 0..0x20, 0x1000..0x1020 */
-+ for (type = 0; type <= 0x1020; type++) {
-+ if (type == 0x21)
-+ type = 0x1000;
-+ ie.type = cpu_to_le16(type);
-+ ie.len = cpu_to_le16(sizeof(ie) - 4);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_INTERROGATE, &ie, sizeof(ie));
-+ }
-+ FN_EXIT0;
-+}
-+#endif
-+
-+
-+#ifdef CONFIG_PROC_FS
-+/***********************************************************************
-+** /proc files
-+*/
-+/***********************************************************************
-+** acx_l_proc_output
-+** Generate content for our /proc entry
-+**
-+** Arguments:
-+** buf is a pointer to write output to
-+** adev is the usual pointer to our private struct acx_device
-+** Returns:
-+** number of bytes actually written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_l_proc_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ p += sprintf(p,
-+ "acx driver version:\t\t" ACX_RELEASE "\n"
-+ "Wireless extension version:\t" STRING(WIRELESS_EXT) "\n"
-+ "chip name:\t\t\t%s (0x%08X)\n"
-+ "radio type:\t\t\t0x%02X\n"
-+ "form factor:\t\t\t0x%02X\n"
-+ "EEPROM version:\t\t\t0x%02X\n"
-+ "firmware version:\t\t%s (0x%08X)\n",
-+ adev->chip_name, adev->firmware_id,
-+ adev->radio_type,
-+ adev->form_factor,
-+ adev->eeprom_version,
-+ adev->firmware_version, adev->firmware_numver);
-+
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ struct client *bss = &adev->sta_list[i];
-+ if (!bss->used) continue;
-+ p += sprintf(p, "BSS %u BSSID "MACSTR" ESSID %s channel %u "
-+ "Cap 0x%X SIR %u SNR %u\n",
-+ i, MAC(bss->bssid), (char*)bss->essid, bss->channel,
-+ bss->cap_info, bss->sir, bss->snr);
-+ }
-+ p += sprintf(p, "status:\t\t\t%u (%s)\n",
-+ adev->status, acx_get_status_name(adev->status));
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_diag_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ unsigned long flags;
-+ unsigned int len = 0, partlen;
-+ u32 temp1, temp2;
-+ u8 *st, *st_end;
-+#ifdef __BIG_ENDIAN
-+ u8 *st2;
-+#endif
-+ fw_stats_t *fw_stats;
-+ char *part_str = NULL;
-+ fw_stats_tx_t *tx = NULL;
-+ fw_stats_rx_t *rx = NULL;
-+ fw_stats_dma_t *dma = NULL;
-+ fw_stats_irq_t *irq = NULL;
-+ fw_stats_wep_t *wep = NULL;
-+ fw_stats_pwr_t *pwr = NULL;
-+ fw_stats_mic_t *mic = NULL;
-+ fw_stats_aes_t *aes = NULL;
-+ fw_stats_event_t *evt = NULL;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+#if defined (ACX_MEM)
-+ p = acxmem_s_proc_diag_output(p, adev);
-+#else
-+ if (IS_PCI(adev))
-+ p = acxpci_s_proc_diag_output(p, adev);
-+#endif
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** network status **\n"
-+ "dev_state_mask 0x%04X\n"
-+ "status %u (%s), "
-+ "mode %u, channel %u, "
-+ "reg_dom_id 0x%02X, reg_dom_chanmask 0x%04X, ",
-+ adev->dev_state_mask,
-+ adev->status, acx_get_status_name(adev->status),
-+ adev->mode, adev->channel,
-+ adev->reg_dom_id, adev->reg_dom_chanmask
-+ );
-+ p += sprintf(p,
-+ "ESSID \"%s\", essid_active %d, essid_len %d, "
-+ "essid_for_assoc \"%s\", nick \"%s\"\n"
-+ "WEP ena %d, restricted %d, idx %d\n",
-+ adev->essid, adev->essid_active, (int)adev->essid_len,
-+ adev->essid_for_assoc, adev->nick,
-+ adev->wep_enabled, adev->wep_restricted,
-+ adev->wep_current_index);
-+ p += sprintf(p, "dev_addr "MACSTR"\n", MAC(adev->dev_addr));
-+ p += sprintf(p, "bssid "MACSTR"\n", MAC(adev->bssid));
-+ p += sprintf(p, "ap_filter "MACSTR"\n", MAC(adev->ap));
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** PHY status **\n"
-+ "tx_disabled %d, tx_level_dbm %d\n" /* "tx_level_val %d, tx_level_auto %d\n" */
-+ "sensitivity %d, antenna 0x%02X, ed_threshold %d, cca %d, preamble_mode %d\n"
-+ "rate_basic 0x%04X, rate_oper 0x%04X\n"
-+ "rts_threshold %d, frag_threshold %d, short_retry %d, long_retry %d\n"
-+ "msdu_lifetime %d, listen_interval %d, beacon_interval %d\n",
-+ adev->tx_disabled, adev->tx_level_dbm, /* adev->tx_level_val, adev->tx_level_auto, */
-+ adev->sensitivity, adev->antenna, adev->ed_threshold, adev->cca, adev->preamble_mode,
-+ adev->rate_basic, adev->rate_oper,
-+ adev->rts_threshold, adev->frag_threshold, adev->short_retry, adev->long_retry,
-+ adev->msdu_lifetime, adev->listen_interval, adev->beacon_interval);
-+
-+ acx_unlock(adev, flags);
-+
-+ p += sprintf(p,
-+ "\n"
-+ "** Firmware **\n"
-+ "NOTE: version dependent statistics layout, "
-+ "please report if you suspect wrong parsing!\n"
-+ "\n"
-+ "version \"%s\"\n", adev->firmware_version);
-+
-+ /* TODO: may replace kmalloc/memset with kzalloc once
-+ * Linux 2.6.14 is widespread */
-+ fw_stats = kmalloc(sizeof(*fw_stats), GFP_KERNEL);
-+ if (!fw_stats) {
-+ FN_EXIT1(0);
-+ return 0;
-+ }
-+ memset(fw_stats, 0, sizeof(*fw_stats));
-+
-+ st = (u8 *)fw_stats;
-+
-+ part_str = "statistics query command";
-+
-+ if (OK != acx_s_interrogate(adev, st, ACX1xx_IE_FIRMWARE_STATISTICS))
-+ goto fw_stats_end;
-+
-+ st += sizeof(u16);
-+ len = *(u16 *)st;
-+
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p,
-+ "firmware version with bigger fw_stats struct detected\n"
-+ "(%u vs. %u), please report\n", len, sizeof(fw_stats_t));
-+ if (len > sizeof(*fw_stats)) {
-+ p += sprintf(p, "struct size exceeded allocation!\n");
-+ len = sizeof(*fw_stats);
-+ }
-+ }
-+ st += sizeof(u16);
-+ st_end = st - 2*sizeof(u16) + len;
-+
-+#ifdef __BIG_ENDIAN
-+ /* let's make one bold assumption here:
-+ * (hopefully!) *all* statistics fields are u32 only,
-+ * thus if we need to make endianness corrections
-+ * we can simply do them in one go, in advance */
-+ st2 = (u8 *)fw_stats;
-+ for (temp1 = 0; temp1 < len; temp1 += 4, st2 += 4)
-+ *(u32 *)st2 = le32_to_cpu(*(u32 *)st2);
-+#endif
-+
-+ part_str = "Rx/Tx";
-+
-+ /* directly at end of a struct part? --> no error! */
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ tx = (fw_stats_tx_t *)st;
-+ st += sizeof(fw_stats_tx_t);
-+ rx = (fw_stats_rx_t *)st;
-+ st += sizeof(fw_stats_rx_t);
-+ partlen = sizeof(fw_stats_tx_t) + sizeof(fw_stats_rx_t);
-+
-+ if (IS_ACX100(adev)) {
-+ /* at least ACX100 PCI F/W 1.9.8.b
-+ * and ACX100 USB F/W 1.0.7-USB
-+ * don't have those two fields... */
-+ st -= 2*sizeof(u32);
-+
-+ /* our parsing doesn't quite match this firmware yet,
-+ * log failure */
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = rx->rx_aci_events;
-+ temp2 = rx->rx_aci_resets;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_desc_overfl %u\n"
-+ " rx_OutOfMem %u, rx_hdr_overfl %u, rx_hw_stuck %u\n"
-+ " rx_dropped_frame %u, rx_frame_ptr_err %u, rx_xfr_hint_trig %u\n"
-+ " rx_aci_events %u, rx_aci_resets %u\n",
-+ part_str,
-+ tx->tx_desc_of,
-+ rx->rx_oom,
-+ rx->rx_hdr_of,
-+ rx->rx_hw_stuck,
-+ rx->rx_dropped_frame,
-+ rx->rx_frame_ptr_err,
-+ rx->rx_xfr_hint_trig,
-+ temp1,
-+ temp2);
-+
-+ part_str = "DMA";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ dma = (fw_stats_dma_t *)st;
-+ partlen = sizeof(fw_stats_dma_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " rx_dma_req %u, rx_dma_err %u, tx_dma_req %u, tx_dma_err %u\n",
-+ part_str,
-+ dma->rx_dma_req,
-+ dma->rx_dma_err,
-+ dma->tx_dma_req,
-+ dma->tx_dma_err);
-+
-+ part_str = "IRQ";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ irq = (fw_stats_irq_t *)st;
-+ partlen = sizeof(fw_stats_irq_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " cmd_cplt %u, fiq %u\n"
-+ " rx_hdrs %u, rx_cmplt %u, rx_mem_overfl %u, rx_rdys %u\n"
-+ " irqs %u, tx_procs %u, decrypt_done %u\n"
-+ " dma_0_done %u, dma_1_done %u, tx_exch_complet %u\n"
-+ " commands %u, rx_procs %u, hw_pm_mode_changes %u\n"
-+ " host_acks %u, pci_pm %u, acm_wakeups %u\n",
-+ part_str,
-+ irq->cmd_cplt,
-+ irq->fiq,
-+ irq->rx_hdrs,
-+ irq->rx_cmplt,
-+ irq->rx_mem_of,
-+ irq->rx_rdys,
-+ irq->irqs,
-+ irq->tx_procs,
-+ irq->decrypt_done,
-+ irq->dma_0_done,
-+ irq->dma_1_done,
-+ irq->tx_exch_complet,
-+ irq->commands,
-+ irq->rx_procs,
-+ irq->hw_pm_mode_changes,
-+ irq->host_acks,
-+ irq->pci_pm,
-+ irq->acm_wakeups);
-+
-+ part_str = "WEP";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ wep = (fw_stats_wep_t *)st;
-+ partlen = sizeof(fw_stats_wep_t);
-+ st += partlen;
-+
-+ if (
-+ (IS_PCI(adev) && IS_ACX100(adev))
-+ || (IS_USB(adev) && IS_ACX100(adev))
-+ || (IS_MEM(adev) && IS_ACX100(adev))
-+ ) {
-+ /* at least ACX100 PCI F/W 1.9.8.b,
-+ * ACX100 USB F/W 1.0.7-USB
-+ * and ACX100 Generic Slave F/W 1.10.7.K
-+ * don't have those two fields...
-+ */
-+ st -= 2*sizeof(u32);
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = temp2 = 999999999;
-+ } else {
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+ temp1 = wep->wep_pkt_decrypt;
-+ temp2 = wep->wep_decrypt_irqs;
-+ }
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " wep_key_count %u, wep_default_key_count %u, dot11_def_key_mib %u\n"
-+ " wep_key_not_found %u, wep_decrypt_fail %u\n"
-+ " wep_pkt_decrypt %u, wep_decrypt_irqs %u\n",
-+ part_str,
-+ wep->wep_key_count,
-+ wep->wep_default_key_count,
-+ wep->dot11_def_key_mib,
-+ wep->wep_key_not_found,
-+ wep->wep_decrypt_fail,
-+ temp1,
-+ temp2);
-+
-+ part_str = "power";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ pwr = (fw_stats_pwr_t *)st;
-+ partlen = sizeof(fw_stats_pwr_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " tx_start_ctr %u, no_ps_tx_too_short %u\n"
-+ " rx_start_ctr %u, no_ps_rx_too_short %u\n"
-+ " lppd_started %u\n"
-+ " no_lppd_too_noisy %u, no_lppd_too_short %u, no_lppd_matching_frame %u\n",
-+ part_str,
-+ pwr->tx_start_ctr,
-+ pwr->no_ps_tx_too_short,
-+ pwr->rx_start_ctr,
-+ pwr->no_ps_rx_too_short,
-+ pwr->lppd_started,
-+ pwr->no_lppd_too_noisy,
-+ pwr->no_lppd_too_short,
-+ pwr->no_lppd_matching_frame);
-+
-+ part_str = "MIC";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ mic = (fw_stats_mic_t *)st;
-+ partlen = sizeof(fw_stats_mic_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " mic_rx_pkts %u, mic_calc_fail %u\n",
-+ part_str,
-+ mic->mic_rx_pkts,
-+ mic->mic_calc_fail);
-+
-+ part_str = "AES";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ aes = (fw_stats_aes_t *)st;
-+ partlen = sizeof(fw_stats_aes_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " aes_enc_fail %u, aes_dec_fail %u\n"
-+ " aes_enc_pkts %u, aes_dec_pkts %u\n"
-+ " aes_enc_irq %u, aes_dec_irq %u\n",
-+ part_str,
-+ aes->aes_enc_fail,
-+ aes->aes_dec_fail,
-+ aes->aes_enc_pkts,
-+ aes->aes_dec_pkts,
-+ aes->aes_enc_irq,
-+ aes->aes_dec_irq);
-+
-+ part_str = "event";
-+
-+ if (st == st_end)
-+ goto fw_stats_end;
-+
-+ evt = (fw_stats_event_t *)st;
-+ partlen = sizeof(fw_stats_event_t);
-+ st += partlen;
-+
-+ if (st > st_end)
-+ goto fw_stats_fail;
-+
-+ p += sprintf(p,
-+ "%s:\n"
-+ " heartbeat %u, calibration %u\n"
-+ " rx_mismatch %u, rx_mem_empty %u, rx_pool %u\n"
-+ " oom_late %u\n"
-+ " phy_tx_err %u, tx_stuck %u\n",
-+ part_str,
-+ evt->heartbeat,
-+ evt->calibration,
-+ evt->rx_mismatch,
-+ evt->rx_mem_empty,
-+ evt->rx_pool,
-+ evt->oom_late,
-+ evt->phy_tx_err,
-+ evt->tx_stuck);
-+
-+ if (st < st_end)
-+ goto fw_stats_bigger;
-+
-+ goto fw_stats_end;
-+
-+fw_stats_fail:
-+ st -= partlen;
-+ p += sprintf(p,
-+ "failed at %s part (size %u), offset %u (struct size %u), "
-+ "please report\n", part_str, partlen,
-+ (int)st - (int)fw_stats, len);
-+
-+fw_stats_bigger:
-+ for (; st < st_end; st += 4)
-+ p += sprintf(p,
-+ "UNKN%3d: %u\n", (int)st - (int)fw_stats, *(u32 *)st);
-+
-+fw_stats_end:
-+ kfree(fw_stats);
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static int
-+acx_s_proc_phy_output(char *buf, acx_device_t *adev)
-+{
-+ char *p = buf;
-+ int i;
-+
-+ FN_ENTER;
-+
-+ /*
-+ if (RADIO_RFMD_11 != adev->radio_type) {
-+ printk("sorry, not yet adapted for radio types "
-+ "other than RFMD, please verify "
-+ "PHY size etc. first!\n");
-+ goto end;
-+ }
-+ */
-+
-+ /* The PHY area is only 0x80 bytes long; further pages after that
-+ * only have some page number registers with altered value,
-+ * all other registers remain the same. */
-+ for (i = 0; i < 0x80; i++) {
-+ acx_s_read_phy_reg(adev, i, p++);
-+ }
-+
-+ FN_EXIT1(p - buf);
-+ return p - buf;
-+}
-+
-+
-+/***********************************************************************
-+** acx_e_read_proc_XXXX
-+** Handle our /proc entry
-+**
-+** Arguments:
-+** standard kernel read_proc interface
-+** Returns:
-+** number of bytes written to buf
-+** Side effects:
-+** none
-+*/
-+static int
-+acx_e_read_proc(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ unsigned long flags;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ acx_lock(adev, flags);
-+ /* fill buf */
-+ length = acx_l_proc_output(buf, adev);
-+ acx_unlock(adev, flags);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static char _buf[32768];
-+static int
-+acx_e_read_proc_diag(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_diag_output(_buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ memcpy(buf, _buf + offset, count);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = count;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_eeprom(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ /* fill buf */
-+ length = 0;
-+#if defined (ACX_MEM)
-+ acx_sem_lock(adev);
-+ length = acxmem_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+#else
-+ if (IS_PCI(adev)) {
-+ acx_sem_lock(adev);
-+ length = acxpci_proc_eeprom_output(buf, adev);
-+ acx_sem_unlock(adev);
-+ }
-+#endif
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+static int
-+acx_e_read_proc_phy(char *buf, char **start, off_t offset, int count,
-+ int *eof, void *data)
-+{
-+ acx_device_t *adev = (acx_device_t*)data;
-+ int length;
-+
-+ FN_ENTER;
-+
-+ acx_sem_lock(adev);
-+ /* fill buf */
-+ length = acx_s_proc_phy_output(buf, adev);
-+ acx_sem_unlock(adev);
-+
-+ /* housekeeping */
-+ if (length <= offset + count)
-+ *eof = 1;
-+ *start = buf + offset;
-+ length -= offset;
-+ if (length > count)
-+ length = count;
-+ if (length < 0)
-+ length = 0;
-+ FN_EXIT1(length);
-+ return length;
-+}
-+
-+
-+/***********************************************************************
-+** /proc files registration
-+*/
-+static const char * const
-+proc_files[] = { "", "_diag", "_eeprom", "_phy" };
-+
-+static read_proc_t * const
-+proc_funcs[] = {
-+ acx_e_read_proc,
-+ acx_e_read_proc_diag,
-+ acx_e_read_proc_eeprom,
-+ acx_e_read_proc_phy
-+};
-+
-+static int
-+manage_proc_entries(const struct net_device *ndev, int remove)
-+{
-+ acx_device_t *adev = ndev2adev((struct net_device *)ndev);
-+ char procbuf[80];
-+ int i;
-+
-+ for (i = 0; i < VEC_SIZE(proc_files); i++) {
-+ snprintf(procbuf, sizeof(procbuf),
-+ "driver/acx_%s%s", ndev->name, proc_files[i]);
-+ log(L_INIT, "%sing /proc entry %s\n",
-+ remove ? "remov" : "creat", procbuf);
-+ if (!remove) {
-+ if (!create_proc_read_entry(procbuf, 0, 0, proc_funcs[i], adev)) {
-+ printk("acx: cannot register /proc entry %s\n", procbuf);
-+ return NOT_OK;
-+ }
-+ } else {
-+ remove_proc_entry(procbuf, NULL);
-+ }
-+ }
-+ return OK;
-+}
-+
-+int
-+acx_proc_register_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 0);
-+}
-+
-+int
-+acx_proc_unregister_entries(const struct net_device *ndev)
-+{
-+ return manage_proc_entries(ndev, 1);
-+}
-+#endif /* CONFIG_PROC_FS */
-+
-+
-+/***********************************************************************
-+** acx_cmd_join_bssid
-+**
-+** Common code for both acx100 and acx111.
-+*/
-+/* NB: does NOT match RATE100_nn but matches ACX[111]_SCAN_RATE_n */
-+static const u8
-+bitpos2genframe_txrate[] = {
-+ 10, /* 0. 1 Mbit/s */
-+ 20, /* 1. 2 Mbit/s */
-+ 55, /* 2. 5.5 Mbit/s */
-+ 0x0B, /* 3. 6 Mbit/s */
-+ 0x0F, /* 4. 9 Mbit/s */
-+ 110, /* 5. 11 Mbit/s */
-+ 0x0A, /* 6. 12 Mbit/s */
-+ 0x0E, /* 7. 18 Mbit/s */
-+ 220, /* 8. 22 Mbit/s */
-+ 0x09, /* 9. 24 Mbit/s */
-+ 0x0D, /* 10. 36 Mbit/s */
-+ 0x08, /* 11. 48 Mbit/s */
-+ 0x0C, /* 12. 54 Mbit/s */
-+ 10, /* 13. 1 Mbit/s, should never happen */
-+ 10, /* 14. 1 Mbit/s, should never happen */
-+ 10, /* 15. 1 Mbit/s, should never happen */
-+};
-+
-+/* Looks scary, eh?
-+** Actually, each one compiled into one AND and one SHIFT,
-+** 31 bytes in x86 asm (more if uints are replaced by u16/u8) */
-+static inline unsigned int
-+rate111to5bits(unsigned int rate)
-+{
-+ return (rate & 0x7)
-+ | ( (rate & RATE111_11) / (RATE111_11/JOINBSS_RATES_11) )
-+ | ( (rate & RATE111_22) / (RATE111_22/JOINBSS_RATES_22) )
-+ ;
-+}
-+
-+static void
-+acx_s_cmd_join_bssid(acx_device_t *adev, const u8 *bssid)
-+{
-+ acx_joinbss_t tmp;
-+ int dtim_interval;
-+ int i;
-+
-+ if (mac_is_zero(bssid))
-+ return;
-+
-+ FN_ENTER;
-+
-+ dtim_interval = (ACX_MODE_0_ADHOC == adev->mode) ?
-+ 1 : adev->dtim_interval;
-+
-+ memset(&tmp, 0, sizeof(tmp));
-+
-+ for (i = 0; i < ETH_ALEN; i++) {
-+ tmp.bssid[i] = bssid[ETH_ALEN-1 - i];
-+ }
-+
-+ tmp.beacon_interval = cpu_to_le16(adev->beacon_interval);
-+
-+ /* Basic rate set. Control frame responses (such as ACK or CTS frames)
-+ ** are sent with one of these rates */
-+ if (IS_ACX111(adev)) {
-+ /* It was experimentally determined that rates_basic
-+ ** can take 11g rates as well, not only rates
-+ ** defined with JOINBSS_RATES_BASIC111_nnn.
-+ ** Just use RATE111_nnn constants... */
-+ tmp.u.acx111.dtim_interval = dtim_interval;
-+ tmp.u.acx111.rates_basic = cpu_to_le16(adev->rate_basic);
-+ log(L_ASSOC, "rates_basic:%04X, rates_supported:%04X\n",
-+ adev->rate_basic, adev->rate_oper);
-+ } else {
-+ tmp.u.acx100.dtim_interval = dtim_interval;
-+ tmp.u.acx100.rates_basic = rate111to5bits(adev->rate_basic);
-+ tmp.u.acx100.rates_supported = rate111to5bits(adev->rate_oper);
-+ log(L_ASSOC, "rates_basic:%04X->%02X, "
-+ "rates_supported:%04X->%02X\n",
-+ adev->rate_basic, tmp.u.acx100.rates_basic,
-+ adev->rate_oper, tmp.u.acx100.rates_supported);
-+ }
-+
-+ /* Setting up how Beacon, Probe Response, RTS, and PS-Poll frames
-+ ** will be sent (rate/modulation/preamble) */
-+ tmp.u.txrate.genfrm_txrate = bitpos2genframe_txrate[lowest_bit(adev->rate_basic)];
-+ tmp.genfrm_mod_pre = 0; /* FIXME: was = adev->capab_short (which was always 0); */
-+ /* we can use short pre *if* all peers can understand it */
-+ /* FIXME #2: we need to correctly set PBCC/OFDM bits here too */
-+
-+ /* we switch fw to STA mode in MONITOR mode, it seems to be
-+ ** the only mode where fw does not emit beacons by itself
-+ ** but allows us to send anything (we really want to retain
-+ ** ability to tx arbitrary frames in MONITOR mode)
-+ */
-+ tmp.macmode = (adev->mode != ACX_MODE_MONITOR ? adev->mode : ACX_MODE_2_STA);
-+ tmp.channel = adev->channel;
-+ tmp.essid_len = adev->essid_len;
-+ /* NOTE: the code memcpy'd essid_len + 1 before, which is WRONG! */
-+ memcpy(tmp.essid, adev->essid, tmp.essid_len);
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_JOIN, &tmp, tmp.essid_len + 0x11);
-+
-+ log(L_ASSOC|L_DEBUG, "BSS_Type = %u\n", tmp.macmode);
-+ acxlog_mac(L_ASSOC|L_DEBUG, "JoinBSSID MAC:", adev->bssid, "\n");
-+
-+ acx_update_capabilities(adev);
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_cmd_start_scan
-+**
-+** Issue scan command to the hardware
-+**
-+** unified function for both ACX111 and ACX100
-+*/
-+static void
-+acx_s_scan_chan(acx_device_t *adev)
-+{
-+ union {
-+ acx111_scan_t acx111;
-+ acx100_scan_t acx100;
-+ } s;
-+
-+ FN_ENTER;
-+
-+ memset(&s, 0, sizeof(s));
-+
-+ /* first common positions... */
-+
-+ s.acx111.count = cpu_to_le16(adev->scan_count);
-+ s.acx111.rate = adev->scan_rate;
-+ s.acx111.options = adev->scan_mode;
-+ s.acx111.chan_duration = cpu_to_le16(adev->scan_duration);
-+ s.acx111.max_probe_delay = cpu_to_le16(adev->scan_probe_delay);
-+
-+ /* ...then differences */
-+
-+ if (IS_ACX111(adev)) {
-+ s.acx111.channel_list_select = 0; /* scan every allowed channel */
-+ /*s.acx111.channel_list_select = 1;*/ /* scan given channels */
-+ /*s.acx111.modulation = 0x40;*/ /* long preamble? OFDM? -> only for active scan */
-+ s.acx111.modulation = 0;
-+ /*s.acx111.channel_list[0] = 6;
-+ s.acx111.channel_list[1] = 4;*/
-+ } else {
-+ s.acx100.start_chan = cpu_to_le16(1);
-+ s.acx100.flags = cpu_to_le16(0x8000);
-+ }
-+
-+ acx_s_issue_cmd(adev, ACX1xx_CMD_SCAN, &s, sizeof(s));
-+ FN_EXIT0;
-+}
-+
-+
-+void
-+acx_s_cmd_start_scan(acx_device_t *adev)
-+{
-+ /* time_before check is 'just in case' thing */
-+ if (!(adev->irq_status & HOST_INT_SCAN_COMPLETE)
-+ && time_before(jiffies, adev->scan_start + 10*HZ)
-+ ) {
-+ log(L_INIT, "start_scan: seems like previous scan "
-+ "is still running. Not starting anew. Please report\n");
-+ return;
-+ }
-+
-+ log(L_INIT, "starting radio scan\n");
-+ /* remember that fw is commanded to do scan */
-+ adev->scan_start = jiffies;
-+ CLEAR_BIT(adev->irq_status, HOST_INT_SCAN_COMPLETE);
-+ /* issue it */
-+ acx_s_scan_chan(adev);
-+}
-+
-+
-+/***********************************************************************
-+** acx111 feature config
-+*/
-+static int
-+acx111_s_get_feature_config(acx_device_t *adev,
-+ u32 *feature_options, u32 *data_flow_options)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ memset(&feat, 0, sizeof(feat));
-+
-+ if (OK != acx_s_interrogate(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+ log(L_DEBUG,
-+ "got Feature option:0x%X, DataFlow option: 0x%X\n",
-+ feat.feature_options,
-+ feat.data_flow_options);
-+
-+ if (feature_options)
-+ *feature_options = le32_to_cpu(feat.feature_options);
-+ if (data_flow_options)
-+ *data_flow_options = le32_to_cpu(feat.data_flow_options);
-+
-+ return OK;
-+}
-+
-+static int
-+acx111_s_set_feature_config(acx_device_t *adev,
-+ u32 feature_options, u32 data_flow_options,
-+ unsigned int mode /* 0 == remove, 1 == add, 2 == set */)
-+{
-+ struct acx111_ie_feature_config feat;
-+
-+ if (!IS_ACX111(adev)) {
-+ return NOT_OK;
-+ }
-+
-+ if ((mode < 0) || (mode > 2))
-+ return NOT_OK;
-+
-+ if (mode != 2)
-+ /* need to modify old data */
-+ acx111_s_get_feature_config(adev, &feat.feature_options, &feat.data_flow_options);
-+ else {
-+ /* need to set a completely new value */
-+ feat.feature_options = 0;
-+ feat.data_flow_options = 0;
-+ }
-+
-+ if (mode == 0) { /* remove */
-+ CLEAR_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ CLEAR_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ } else { /* add or set */
-+ SET_BIT(feat.feature_options, cpu_to_le32(feature_options));
-+ SET_BIT(feat.data_flow_options, cpu_to_le32(data_flow_options));
-+ }
-+
-+ log(L_DEBUG,
-+ "old: feature 0x%08X dataflow 0x%08X. mode: %u\n"
-+ "new: feature 0x%08X dataflow 0x%08X\n",
-+ feature_options, data_flow_options, mode,
-+ le32_to_cpu(feat.feature_options),
-+ le32_to_cpu(feat.data_flow_options));
-+
-+ if (OK != acx_s_configure(adev, &feat, ACX1xx_IE_FEATURE_CONFIG)) {
-+ return NOT_OK;
-+ }
-+
-+ return OK;
-+}
-+
-+static inline int
-+acx111_s_feature_off(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 0);
-+}
-+static inline int
-+acx111_s_feature_on(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 1);
-+}
-+static inline int
-+acx111_s_feature_set(acx_device_t *adev, u32 f, u32 d)
-+{
-+ return acx111_s_set_feature_config(adev, f, d, 2);
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_init_memory_pools
-+*/
-+static int
-+acx100_s_init_memory_pools(acx_device_t *adev, const acx_ie_memmap_t *mmt)
-+{
-+ acx100_ie_memblocksize_t MemoryBlockSize;
-+ acx100_ie_memconfigoption_t MemoryConfigOption;
-+ int TotalMemoryBlocks;
-+ int RxBlockNum;
-+ int TotalRxBlockSize;
-+ int TxBlockNum;
-+ int TotalTxBlockSize;
-+
-+ FN_ENTER;
-+
-+ /* Let's see if we can follow this:
-+ first we select our memory block size (which I think is
-+ completely arbitrary) */
-+ MemoryBlockSize.size = cpu_to_le16(adev->memblocksize);
-+
-+ /* Then we alert the card to our decision of block size */
-+ if (OK != acx_s_configure(adev, &MemoryBlockSize, ACX100_IE_BLOCK_SIZE)) {
-+ goto bad;
-+ }
-+
-+ /* We figure out how many total blocks we can create, using
-+ the block size we chose, and the beginning and ending
-+ memory pointers, i.e.: end-start/size */
-+ TotalMemoryBlocks = (le32_to_cpu(mmt->PoolEnd) - le32_to_cpu(mmt->PoolStart)) / adev->memblocksize;
-+
-+ log(L_DEBUG, "TotalMemoryBlocks=%u (%u bytes)\n",
-+ TotalMemoryBlocks, TotalMemoryBlocks*adev->memblocksize);
-+
-+ /* MemoryConfigOption.DMA_config bitmask:
-+ access to ACX memory is to be done:
-+ 0x00080000 using PCI conf space?!
-+ 0x00040000 using IO instructions?
-+ 0x00000000 using memory access instructions
-+ 0x00020000 using local memory block linked list (else what?)
-+ 0x00010000 using host indirect descriptors (else host must access ACX memory?)
-+ */
-+#if defined (ACX_MEM)
-+ /*
-+ * ACX ignores DMA_config for generic slave mode.
-+ */
-+ MemoryConfigOption.DMA_config = 0;
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(0);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x30000);
-+ /* Declare start of the Rx host pool */
-+ MemoryConfigOption.pRxHostDesc = cpu2acx(adev->rxhostdesc_startphy);
-+ log(L_DEBUG, "pRxHostDesc 0x%08X, rxhostdesc_startphy 0x%lX\n",
-+ acx2cpu(MemoryConfigOption.pRxHostDesc),
-+ (long)adev->rxhostdesc_startphy);
-+ } else {
-+ MemoryConfigOption.DMA_config = cpu_to_le32(0x20000);
-+ }
-+#endif
-+
-+ /* 50% of the allotment of memory blocks go to tx descriptors */
-+ TxBlockNum = TotalMemoryBlocks / 2;
-+ MemoryConfigOption.TxBlockNum = cpu_to_le16(TxBlockNum);
-+
-+ /* and 50% go to the rx descriptors */
-+ RxBlockNum = TotalMemoryBlocks - TxBlockNum;
-+ MemoryConfigOption.RxBlockNum = cpu_to_le16(RxBlockNum);
-+
-+ /* size of the tx and rx descriptor queues */
-+ TotalTxBlockSize = TxBlockNum * adev->memblocksize;
-+ TotalRxBlockSize = RxBlockNum * adev->memblocksize;
-+ log(L_DEBUG, "TxBlockNum %u RxBlockNum %u TotalTxBlockSize %u "
-+ "TotalTxBlockSize %u\n", TxBlockNum, RxBlockNum,
-+ TotalTxBlockSize, TotalRxBlockSize);
-+
-+
-+ /* align the tx descriptor queue to an alignment of 0x20 (32 bytes) */
-+ MemoryConfigOption.rx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + 0x1f) & ~0x1f);
-+
-+ /* align the rx descriptor queue to units of 0x20
-+ * and offset it by the tx descriptor queue */
-+ MemoryConfigOption.tx_mem =
-+ cpu_to_le32((le32_to_cpu(mmt->PoolStart) + TotalRxBlockSize + 0x1f) & ~0x1f);
-+ log(L_DEBUG, "rx_mem %08X rx_mem %08X\n",
-+ MemoryConfigOption.tx_mem, MemoryConfigOption.rx_mem);
-+
-+ /* alert the device to our decision */
-+ if (OK != acx_s_configure(adev, &MemoryConfigOption, ACX1xx_IE_MEMORY_CONFIG_OPTIONS)) {
-+ goto bad;
-+ }
-+
-+ /* and tell the device to kick it into gear */
-+ if (OK != acx_s_issue_cmd(adev, ACX100_CMD_INIT_MEMORY, NULL, 0)) {
-+ goto bad;
-+ }
-+#ifdef ACX_MEM
-+ /*
-+ * slave memory interface has to manage the transmit pools for the ACX,
-+ * so it needs to know what we chose here.
-+ */
-+ adev->acx_txbuf_start = MemoryConfigOption.tx_mem;
-+ adev->acx_txbuf_numblocks = MemoryConfigOption.TxBlockNum;
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+** acx100_s_create_dma_regions
-+**
-+** Note that this fn messes up heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+static int
-+acx100_s_create_dma_regions(acx_device_t *adev)
-+{
-+ acx100_ie_queueconfig_t queueconf;
-+ acx_ie_memmap_t memmap;
-+ int res = NOT_OK;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* read out the acx100 physical start address for the queues */
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ tx_queue_start = le32_to_cpu(memmap.QueueStart);
-+ rx_queue_start = tx_queue_start + TX_CNT * sizeof(txdesc_t);
-+
-+ log(L_DEBUG, "initializing Queue Indicator\n");
-+
-+ memset(&queueconf, 0, sizeof(queueconf));
-+
-+ /* Not needed for PCI or slave memory, so we can avoid setting them altogether */
-+ if (IS_USB(adev)) {
-+ queueconf.NumTxDesc = USB_TX_CNT;
-+ queueconf.NumRxDesc = USB_RX_CNT;
-+ }
-+
-+ /* calculate size of queues */
-+ queueconf.AreaSize = cpu_to_le32(
-+ TX_CNT * sizeof(txdesc_t) +
-+ RX_CNT * sizeof(rxdesc_t) + 8
-+ );
-+ queueconf.NumTxQueues = 1; /* number of tx queues */
-+ /* sets the beginning of the tx descriptor queue */
-+ queueconf.TxQueueStart = memmap.QueueStart;
-+ /* done by memset: queueconf.TxQueuePri = 0; */
-+ queueconf.RxQueueStart = cpu_to_le32(rx_queue_start);
-+ queueconf.QueueOptions = 1; /* auto reset descriptor */
-+ /* sets the end of the rx descriptor queue */
-+ queueconf.QueueEnd = cpu_to_le32(
-+ rx_queue_start + RX_CNT * sizeof(rxdesc_t)
-+ );
-+ /* sets the beginning of the next queue */
-+ queueconf.HostQueueEnd = cpu_to_le32(le32_to_cpu(queueconf.QueueEnd) + 8);
-+ if (OK != acx_s_configure(adev, &queueconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+#if defined (ACX_MEM)
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ adev->acx_queue_indicator =
-+ (queueindicator_t *) le32_to_cpu (queueconf.QueueEnd);
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev)) {
-+ /* sets the beginning of the rx descriptor queue, after the tx descrs */
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+ }
-+#endif
-+
-+ if (OK != acx_s_interrogate(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ /*
-+ * Have to make sure we skip past the Queue Indicator (QueueEnd) and Host Queue Indicator
-+ * maps, each of which are 8 bytes and follow immediately after the transmit and
-+ * receive queues.
-+ */
-+ memmap.PoolStart = cpu_to_le32(
-+ (le32_to_cpu(memmap.QueueEnd) + 4 + 0x1f) & ~0x1f
-+ );
-+
-+ if (OK != acx_s_configure(adev, &memmap, ACX1xx_IE_MEMORY_MAP)) {
-+ goto fail;
-+ }
-+
-+ if (OK != acx100_s_init_memory_pools(adev, &memmap)) {
-+ goto fail;
-+ }
-+
-+ res = OK;
-+ goto end;
-+
-+fail:
-+ acx_s_msleep(1000); /* ? */
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+end:
-+ FN_EXIT1(res);
-+ return res;
-+}
-+
-+
-+/***********************************************************************
-+** acx111_s_create_dma_regions
-+**
-+** Note that this fn messes heavily with hardware, but we cannot
-+** lock it (we need to sleep). Not a problem since IRQs can't happen
-+*/
-+#define ACX111_PERCENT(percent) ((percent)/5)
-+
-+static int
-+acx111_s_create_dma_regions(acx_device_t *adev)
-+{
-+ struct acx111_ie_memoryconfig memconf;
-+ struct acx111_ie_queueconfig queueconf;
-+ u32 tx_queue_start, rx_queue_start;
-+
-+ FN_ENTER;
-+
-+ /* Calculate memory positions and queue sizes */
-+
-+ /* Set up our host descriptor pool + data pool */
-+#if defined (ACX_MEM)
-+ if (OK != acxmem_s_create_hostdesc_queues(adev))
-+ goto fail;
-+#else
-+ if (IS_PCI(adev)) {
-+ if (OK != acxpci_s_create_hostdesc_queues(adev))
-+ goto fail;
-+ }
-+#endif
-+
-+ memset(&memconf, 0, sizeof(memconf));
-+ /* the number of STAs (STA contexts) to support
-+ ** NB: was set to 1 and everything seemed to work nevertheless... */
-+ memconf.no_of_stations = cpu_to_le16(VEC_SIZE(adev->sta_list));
-+ /* specify the memory block size. Default is 256 */
-+ memconf.memory_block_size = cpu_to_le16(adev->memblocksize);
-+ /* let's use 50%/50% for tx/rx (specify percentage, units of 5%) */
-+ memconf.tx_rx_memory_block_allocation = ACX111_PERCENT(50);
-+ /* set the count of our queues
-+ ** NB: struct acx111_ie_memoryconfig shall be modified
-+ ** if we ever will switch to more than one rx and/or tx queue */
-+ memconf.count_rx_queues = 1;
-+ memconf.count_tx_queues = 1;
-+ /* 0 == Busmaster Indirect Memory Organization, which is what we want
-+ * (using linked host descs with their allocated mem).
-+ * 2 == Generic Bus Slave */
-+ /* done by memset: memconf.options = 0; */
-+ /* let's use 25% for fragmentations and 75% for frame transfers
-+ * (specified in units of 5%) */
-+ memconf.fragmentation = ACX111_PERCENT(75);
-+ /* Rx descriptor queue config */
-+ memconf.rx_queue1_count_descs = RX_CNT;
-+ memconf.rx_queue1_type = 7; /* must be set to 7 */
-+ /* done by memset: memconf.rx_queue1_prio = 0; low prio */
-+#if defined (ACX_MEM)
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+#else
-+ if (IS_PCI(adev)) {
-+ memconf.rx_queue1_host_rx_start = cpu2acx(adev->rxhostdesc_startphy);
-+ }
-+#endif
-+ /* Tx descriptor queue config */
-+ memconf.tx_queue1_count_descs = TX_CNT;
-+ /* done by memset: memconf.tx_queue1_attributes = 0; lowest priority */
-+
-+ /* NB1: this looks wrong: (memconf,ACX1xx_IE_QUEUE_CONFIG),
-+ ** (queueconf,ACX1xx_IE_MEMORY_CONFIG_OPTIONS) look swapped, eh?
-+ ** But it is actually correct wrt IE numbers.
-+ ** NB2: sizeof(memconf) == 28 == 0x1c but configure(ACX1xx_IE_QUEUE_CONFIG)
-+ ** writes 0x20 bytes (because same IE for acx100 uses struct acx100_ie_queueconfig
-+ ** which is 4 bytes larger. what a mess. TODO: clean it up) */
-+ if (OK != acx_s_configure(adev, &memconf, ACX1xx_IE_QUEUE_CONFIG)) {
-+ goto fail;
-+ }
-+
-+ acx_s_interrogate(adev, &queueconf, ACX1xx_IE_MEMORY_CONFIG_OPTIONS);
-+
-+ tx_queue_start = le32_to_cpu(queueconf.tx1_queue_address);
-+ rx_queue_start = le32_to_cpu(queueconf.rx1_queue_address);
-+
-+ log(L_INIT, "dump queue head (from card):\n"
-+ "len: %u\n"
-+ "tx_memory_block_address: %X\n"
-+ "rx_memory_block_address: %X\n"
-+ "tx1_queue address: %X\n"
-+ "rx1_queue address: %X\n",
-+ le16_to_cpu(queueconf.len),
-+ le32_to_cpu(queueconf.tx_memory_block_address),
-+ le32_to_cpu(queueconf.rx_memory_block_address),
-+ tx_queue_start,
-+ rx_queue_start);
-+
-+#if defined (ACX_MEM)
-+ acxmem_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_create_desc_queues(adev, tx_queue_start, rx_queue_start);
-+#endif
-+
-+ FN_EXIT1(OK);
-+ return OK;
-+fail:
-+#if defined (ACX_MEM)
-+ acxmem_free_desc_queues(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_free_desc_queues(adev);
-+#endif
-+
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+static void
-+acx_s_initialize_rx_config(acx_device_t *adev)
-+{
-+ struct {
-+ u16 id;
-+ u16 len;
-+ u16 rx_cfg1;
-+ u16 rx_cfg2;
-+ } ACX_PACKED cfg;
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_OFF:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ /*| RX_CFG2_RCV_ASSOC_REQ */
-+ /*| RX_CFG2_RCV_AUTH_FRAMES */
-+ /*| RX_CFG2_RCV_BEACON_FRAMES */
-+ /*| RX_CFG2_RCV_CONTENTION_FREE */
-+ /*| RX_CFG2_RCV_CTRL_FRAMES */
-+ /*| RX_CFG2_RCV_DATA_FRAMES */
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ /*| RX_CFG2_RCV_MGMT_FRAMES */
-+ /*| RX_CFG2_RCV_PROBE_REQ */
-+ /*| RX_CFG2_RCV_PROBE_RESP */
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ /*| RX_CFG2_RCV_OTHER */
-+ );
-+ break;
-+ case ACX_MODE_MONITOR:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ /* | RX_CFG1_FILTER_MAC */
-+ | RX_CFG1_RCV_PROMISCUOUS
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ | RX_CFG2_RCV_BROKEN_FRAMES
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ | RX_CFG2_RCV_ACK_FRAMES
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ default:
-+ adev->rx_config_1 = (u16) (0
-+ /* | RX_CFG1_INCLUDE_RXBUF_HDR */
-+ /* | RX_CFG1_FILTER_SSID */
-+ /* | RX_CFG1_FILTER_BCAST */
-+ /* | RX_CFG1_RCV_MC_ADDR1 */
-+ /* | RX_CFG1_RCV_MC_ADDR0 */
-+ /* | RX_CFG1_FILTER_ALL_MULTI */
-+ /* | RX_CFG1_FILTER_BSSID */
-+ | RX_CFG1_FILTER_MAC
-+ /* | RX_CFG1_RCV_PROMISCUOUS */
-+ /* | RX_CFG1_INCLUDE_FCS */
-+ /* | RX_CFG1_INCLUDE_PHY_HDR */
-+ );
-+ adev->rx_config_2 = (u16) (0
-+ | RX_CFG2_RCV_ASSOC_REQ
-+ | RX_CFG2_RCV_AUTH_FRAMES
-+ | RX_CFG2_RCV_BEACON_FRAMES
-+ | RX_CFG2_RCV_CONTENTION_FREE
-+ | RX_CFG2_RCV_CTRL_FRAMES
-+ | RX_CFG2_RCV_DATA_FRAMES
-+ /*| RX_CFG2_RCV_BROKEN_FRAMES */
-+ | RX_CFG2_RCV_MGMT_FRAMES
-+ | RX_CFG2_RCV_PROBE_REQ
-+ | RX_CFG2_RCV_PROBE_RESP
-+ /*| RX_CFG2_RCV_ACK_FRAMES */
-+ | RX_CFG2_RCV_OTHER
-+ );
-+ break;
-+ }
-+ adev->rx_config_1 |= RX_CFG1_INCLUDE_RXBUF_HDR;
-+
-+ if ((adev->rx_config_1 & RX_CFG1_INCLUDE_PHY_HDR)
-+ || (adev->firmware_numver >= 0x02000000))
-+ adev->phy_header_len = IS_ACX111(adev) ? 8 : 4;
-+ else
-+ adev->phy_header_len = 0;
-+
-+ log(L_INIT, "setting RXconfig to %04X:%04X\n",
-+ adev->rx_config_1, adev->rx_config_2);
-+ cfg.rx_cfg1 = cpu_to_le16(adev->rx_config_1);
-+ cfg.rx_cfg2 = cpu_to_le16(adev->rx_config_2);
-+ acx_s_configure(adev, &cfg, ACX1xx_IE_RXCONFIG);
-+}
-+
-+
-+/***********************************************************************
-+** acx_s_set_defaults
-+*/
-+void
-+acx_s_set_defaults(acx_device_t *adev)
-+{
-+ unsigned long flags;
-+
-+ FN_ENTER;
-+
-+ /* do it before getting settings, prevent bogus channel 0 warning */
-+ adev->channel = 1;
-+
-+ /* query some settings from the card.
-+ * NOTE: for some settings, e.g. CCA and ED (ACX100!), an initial
-+ * query is REQUIRED, otherwise the card won't work correctly! */
-+ adev->get_mask = GETSET_ANTENNA|GETSET_SENSITIVITY|GETSET_STATION_ID|GETSET_REG_DOMAIN;
-+ /* Only ACX100 supports ED and CCA */
-+ if (IS_ACX100(adev))
-+ adev->get_mask |= GETSET_CCA|GETSET_ED_THRESH;
-+
-+ acx_s_update_card_settings(adev);
-+
-+ acx_lock(adev, flags);
-+
-+ /* set our global interrupt mask */
-+#if defined (ACX_MEM)
-+ acxmem_set_interrupt_mask(adev);
-+#else
-+ if (IS_PCI(adev))
-+ acxpci_set_interrupt_mask(adev);
-+#endif
-+
-+ adev->led_power = 1; /* LED is active on startup */
-+ adev->brange_max_quality = 60; /* LED blink max quality is 60 */
-+ adev->brange_time_last_state_change = jiffies;
-+
-+ /* copy the MAC address we just got from the card
-+ * into our MAC address used during current 802.11 session */
-+ MAC_COPY(adev->dev_addr, adev->ndev->dev_addr);
-+ MAC_BCAST(adev->ap);
-+
-+ adev->essid_len =
-+ snprintf(adev->essid, sizeof(adev->essid), "STA%02X%02X%02X",
-+ adev->dev_addr[3], adev->dev_addr[4], adev->dev_addr[5]);
-+ adev->essid_active = 1;
-+
-+ /* we have a nick field to waste, so why not abuse it
-+ * to announce the driver version? ;-) */
-+ strncpy(adev->nick, "acx " ACX_RELEASE, IW_ESSID_MAX_SIZE);
-+
-+#if defined (ACX_MEM)
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+#else
-+ if (IS_PCI(adev)) { /* FIXME: this should be made to apply to USB, too! */
-+ /* first regulatory domain entry in EEPROM == default reg. domain */
-+ adev->reg_dom_id = adev->cfgopt_domains.list[0];
-+ }
-+#endif
-+
-+ /* 0xffff would be better, but then we won't get a "scan complete"
-+ * interrupt, so our current infrastructure will fail: */
-+ adev->scan_count = 1;
-+ adev->scan_mode = ACX_SCAN_OPT_ACTIVE;
-+ adev->scan_duration = 100;
-+ adev->scan_probe_delay = 200;
-+ /* reported to break scanning: adev->scan_probe_delay = adev->cfgopt_probe_delay; */
-+ adev->scan_rate = ACX_SCAN_RATE_1;
-+
-+ adev->mode = ACX_MODE_2_STA;
-+ adev->auth_alg = WLAN_AUTH_ALG_OPENSYSTEM;
-+ adev->listen_interval = 100;
-+ adev->beacon_interval = DEFAULT_BEACON_INTERVAL;
-+ adev->dtim_interval = DEFAULT_DTIM_INTERVAL;
-+
-+ adev->msdu_lifetime = DEFAULT_MSDU_LIFETIME;
-+
-+ adev->rts_threshold = DEFAULT_RTS_THRESHOLD;
-+ adev->frag_threshold = 2346;
-+
-+ /* use standard default values for retry limits */
-+ adev->short_retry = 7; /* max. retries for (short) non-RTS packets */
-+ adev->long_retry = 4; /* max. retries for long (RTS) packets */
-+
-+ adev->preamble_mode = 2; /* auto */
-+ adev->fallback_threshold = 3;
-+ adev->stepup_threshold = 10;
-+ adev->rate_bcast = RATE111_1;
-+ adev->rate_bcast100 = RATE100_1;
-+ adev->rate_basic = RATE111_1 | RATE111_2;
-+ adev->rate_auto = 1;
-+ if (IS_ACX111(adev)) {
-+ adev->rate_oper = RATE111_ALL;
-+ } else {
-+ adev->rate_oper = RATE111_ACX100_COMPAT;
-+ }
-+
-+ /* Supported Rates element - the rates here are given in units of
-+ * 500 kbit/s, plus 0x80 added. See 802.11-1999.pdf item 7.3.2.2 */
-+ acx_l_update_ratevector(adev);
-+
-+ /* set some more defaults */
-+ if (IS_ACX111(adev)) {
-+ /* 30mW (15dBm) is default, at least in my acx111 card: */
-+ adev->tx_level_dbm = 15;
-+ } else {
-+ /* don't use max. level, since it might be dangerous
-+ * (e.g. WRT54G people experience
-+ * excessive Tx power damage!) */
-+ adev->tx_level_dbm = 18;
-+ /*
-+ * Lower power for the iPaq hx4700
-+ */
-+ if (IS_MEM(adev)) {
-+ adev->tx_level_dbm = 14;
-+ }
-+ }
-+ /* adev->tx_level_auto = 1; */
-+ if (IS_ACX111(adev)) {
-+ /* start with sensitivity level 1 out of 3: */
-+ adev->sensitivity = 1;
-+ }
-+
-+/* #define ENABLE_POWER_SAVE */
-+#ifdef ENABLE_POWER_SAVE
-+ adev->ps_wakeup_cfg = PS_CFG_ENABLE | PS_CFG_WAKEUP_ALL_BEAC;
-+ adev->ps_listen_interval = 1;
-+ adev->ps_options = PS_OPT_ENA_ENHANCED_PS | PS_OPT_TX_PSPOLL | PS_OPT_STILL_RCV_BCASTS;
-+ adev->ps_hangover_period = 30;
-+ adev->ps_enhanced_transition_time = 0;
-+#else
-+ adev->ps_wakeup_cfg = 0;
-+ adev->ps_listen_interval = 0;
-+ adev->ps_options = 0;
-+ adev->ps_hangover_period = 0;
-+ adev->ps_enhanced_transition_time = 0;
-+#endif
-+
-+ /* These settings will be set in fw on ifup */
-+ adev->set_mask = 0
-+ | GETSET_RETRY
-+ | SET_MSDU_LIFETIME
-+ /* configure card to do rate fallback when in auto rate mode */
-+ | SET_RATE_FALLBACK
-+ | SET_RXCONFIG
-+ | GETSET_TXPOWER
-+ /* better re-init the antenna value we got above */
-+ | GETSET_ANTENNA
-+#if POWER_SAVE_80211
-+ | GETSET_POWER_80211
-+#endif
-+ ;
-+
-+ acx_unlock(adev, flags);
-+ acx_lock_unhold(); /* hold time 844814 CPU ticks @2GHz */
-+
-+ acx_s_initialize_rx_config(adev);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** FIXME: this should be solved in a general way for all radio types
-+** by decoding the radio firmware module,
-+** since it probably has some standard structure describing how to
-+** set the power level of the radio module which it controls.
-+** Or maybe not, since the radio module probably has a function interface
-+** instead which then manages Tx level programming :-\
-+*/
-+static int
-+acx111_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ /* my acx111 card has two power levels in its configoptions (== EEPROM):
-+ * 1 (30mW) [15dBm]
-+ * 2 (10mW) [10dBm]
-+ * For now, just assume all other acx111 cards have the same.
-+ * FIXME: Ideally we would query it here, but we first need a
-+ * standard way to query individual configoptions easily.
-+ * Well, now we have proper cfgopt txpower variables, but this still
-+ * hasn't been done yet, since it also requires dBm <-> mW conversion here... */
-+ if (level_dbm <= 12) {
-+ tx_level.level = 2; /* 10 dBm */
-+ adev->tx_level_dbm = 10;
-+ } else {
-+ tx_level.level = 1; /* 15 dBm */
-+ adev->tx_level_dbm = 15;
-+ }
-+ if (level_dbm != adev->tx_level_dbm)
-+ log(L_INIT, "acx111 firmware has specific "
-+ "power levels only: adjusted %d dBm to %d dBm!\n",
-+ level_dbm, adev->tx_level_dbm);
-+
-+ return acx_s_configure(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+}
-+
-+static int
-+acx_s_set_tx_level(acx_device_t *adev, u8 level_dbm)
-+{
-+ if (IS_ACX111(adev)) {
-+ return acx111_s_set_tx_level(adev, level_dbm);
-+ }
-+#if defined (ACX_MEM)
-+ return acx100mem_s_set_tx_level(adev, level_dbm);
-+#else
-+ if (IS_PCI(adev)) {
-+ return acx100pci_s_set_tx_level(adev, level_dbm);
-+ }
-+#endif
-+ return OK;
-+}
-+
-+
-+/***********************************************************************
-+*/
-+#ifdef UNUSED
-+/* Returns the current tx level (ACX111) */
-+static u8
-+acx111_s_get_tx_level(acx_device_t *adev)
-+{
-+ struct acx111_ie_tx_level tx_level;
-+
-+ tx_level.level = 0;
-+ acx_s_interrogate(adev, &tx_level, ACX1xx_IE_DOT11_TX_POWER_LEVEL);
-+ return tx_level.level;
-+}
-+#endif
-+
-+
-+/***********************************************************************
-+** acx_l_rxmonitor
-+** Called from IRQ context only
-+*/
-+static void
-+acx_l_rxmonitor(acx_device_t *adev, const rxbuffer_t *rxbuf)
-+{
-+ wlansniffrm_t *msg;
-+ struct sk_buff *skb;
-+ void *datap;
-+ unsigned int skb_len;
-+ int payload_offset;
-+
-+ FN_ENTER;
-+
-+ /* we are in big luck: the acx100 doesn't modify any of the fields */
-+ /* in the 802.11 frame. just pass this packet into the PF_PACKET */
-+ /* subsystem. yeah. */
-+ payload_offset = ((u8*)acx_get_wlan_hdr(adev, rxbuf) - (u8*)rxbuf);
-+ skb_len = RXBUF_BYTES_USED(rxbuf) - payload_offset;
-+
-+ /* sanity check */
-+ if (unlikely(skb_len > WLAN_A4FR_MAXLEN_WEP)) {
-+ printk("%s: monitor mode panic: oversized frame!\n",
-+ adev->ndev->name);
-+ goto end;
-+ }
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211_PRISM)
-+ skb_len += sizeof(*msg);
-+
-+ /* allocate skb */
-+ skb = dev_alloc_skb(skb_len);
-+ if (unlikely(!skb)) {
-+ printk("%s: no memory for skb (%u bytes)\n",
-+ adev->ndev->name, skb_len);
-+ goto end;
-+ }
-+
-+ skb_put(skb, skb_len);
-+
-+ if (adev->ndev->type == ARPHRD_IEEE80211) {
-+ /* when in raw 802.11 mode, just copy frame as-is */
-+ datap = skb->data;
-+ } else if (adev->ndev->type == ARPHRD_IEEE80211_PRISM) {
-+ /* emulate prism header */
-+ msg = (wlansniffrm_t*)skb->data;
-+ datap = msg + 1;
-+
-+ msg->msgcode = WLANSNIFFFRM;
-+ msg->msglen = sizeof(*msg);
-+ strncpy(msg->devname, adev->ndev->name, sizeof(msg->devname)-1);
-+ msg->devname[sizeof(msg->devname)-1] = '\0';
-+
-+ msg->hosttime.did = WLANSNIFFFRM_hosttime;
-+ msg->hosttime.status = WLANITEM_STATUS_data_ok;
-+ msg->hosttime.len = 4;
-+ msg->hosttime.data = jiffies;
-+
-+ msg->mactime.did = WLANSNIFFFRM_mactime;
-+ msg->mactime.status = WLANITEM_STATUS_data_ok;
-+ msg->mactime.len = 4;
-+ msg->mactime.data = rxbuf->time;
-+
-+ msg->channel.did = WLANSNIFFFRM_channel;
-+ msg->channel.status = WLANITEM_STATUS_data_ok;
-+ msg->channel.len = 4;
-+ msg->channel.data = adev->channel;
-+
-+ msg->rssi.did = WLANSNIFFFRM_rssi;
-+ msg->rssi.status = WLANITEM_STATUS_no_value;
-+ msg->rssi.len = 4;
-+ msg->rssi.data = 0;
-+
-+ msg->sq.did = WLANSNIFFFRM_sq;
-+ msg->sq.status = WLANITEM_STATUS_no_value;
-+ msg->sq.len = 4;
-+ msg->sq.data = 0;
-+
-+ msg->signal.did = WLANSNIFFFRM_signal;
-+ msg->signal.status = WLANITEM_STATUS_data_ok;
-+ msg->signal.len = 4;
-+ msg->signal.data = rxbuf->phy_snr;
-+
-+ msg->noise.did = WLANSNIFFFRM_noise;
-+ msg->noise.status = WLANITEM_STATUS_data_ok;
-+ msg->noise.len = 4;
-+ msg->noise.data = rxbuf->phy_level;
-+
-+ msg->rate.did = WLANSNIFFFRM_rate;
-+ msg->rate.status = WLANITEM_STATUS_data_ok;
-+ msg->rate.len = 4;
-+ msg->rate.data = rxbuf->phy_plcp_signal / 5;
-+
-+ msg->istx.did = WLANSNIFFFRM_istx;
-+ msg->istx.status = WLANITEM_STATUS_data_ok;
-+ msg->istx.len = 4;
-+ msg->istx.data = 0; /* tx=0: it's not a tx packet */
-+
-+ skb_len -= sizeof(*msg);
-+
-+ msg->frmlen.did = WLANSNIFFFRM_signal;
-+ msg->frmlen.status = WLANITEM_STATUS_data_ok;
-+ msg->frmlen.len = 4;
-+ msg->frmlen.data = skb_len;
-+ } else {
-+ printk("acx: unsupported netdev type %d!\n", adev->ndev->type);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+
-+ /* sanity check (keep it here) */
-+ if (unlikely((int)skb_len < 0)) {
-+ printk("acx: skb_len=%d. Driver bug, please report\n", (int)skb_len);
-+ dev_kfree_skb(skb);
-+ return;
-+ }
-+ memcpy(datap, ((unsigned char*)rxbuf)+payload_offset, skb_len);
-+
-+ skb->dev = adev->ndev;
-+ skb->dev->last_rx = jiffies;
-+
-+ skb_reset_mac_header(skb);
-+ skb->ip_summed = CHECKSUM_NONE;
-+ skb->pkt_type = PACKET_OTHERHOST;
-+ skb->protocol = htons(ETH_P_80211_RAW);
-+ netif_rx(skb);
-+
-+ adev->stats.rx_packets++;
-+ adev->stats.rx_bytes += skb->len;
-+
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_rx_ieee802_11_frame
-+**
-+** Called from IRQ context only
-+*/
-+
-+/* All these contortions are for saner dup logging
-+**
-+** We want: (a) to know about excessive dups
-+** (b) to not spam kernel log about occasional dups
-+**
-+** 1/64 threshold was chosen by running "ping -A"
-+** It gave "rx: 59 DUPs in 2878 packets" only with 4 parallel
-+** "ping -A" streams running. */
-+/* 2005-10-11: bumped up to 1/8
-+** subtract a $smallint from dup_count in order to
-+** avoid "2 DUPs in 19 packets" messages */
-+static inline int
-+acx_l_handle_dup(acx_device_t *adev, u16 seq)
-+{
-+ if (adev->dup_count) {
-+ adev->nondup_count++;
-+ if (time_after(jiffies, adev->dup_msg_expiry)) {
-+ /* Log only if more than 1 dup in 64 packets */
-+ if (adev->nondup_count/8 < adev->dup_count-5) {
-+ printk(KERN_INFO "%s: rx: %d DUPs in "
-+ "%d packets received in 10 secs\n",
-+ adev->ndev->name,
-+ adev->dup_count,
-+ adev->nondup_count);
-+ }
-+ adev->dup_count = 0;
-+ adev->nondup_count = 0;
-+ }
-+ }
-+ if (unlikely(seq == adev->last_seq_ctrl)) {
-+ if (!adev->dup_count++)
-+ adev->dup_msg_expiry = jiffies + 10*HZ;
-+ adev->stats.rx_errors++;
-+ return 1; /* a dup */
-+ }
-+ adev->last_seq_ctrl = seq;
-+ return 0;
-+}
-+
-+static int
-+acx_l_rx_ieee802_11_frame(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ unsigned int ftype, fstype;
-+ const wlan_hdr_t *hdr;
-+ int result = NOT_OK;
-+
-+ FN_ENTER;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+
-+ /* see IEEE 802.11-1999.pdf chapter 7 "MAC frame formats" */
-+ if (unlikely((hdr->fc & WF_FC_PVERi) != 0)) {
-+ printk_ratelimited(KERN_INFO "rx: unsupported 802.11 protocol\n");
-+ goto end;
-+ }
-+
-+ ftype = hdr->fc & WF_FC_FTYPEi;
-+ fstype = hdr->fc & WF_FC_FSTYPEi;
-+
-+ switch (ftype) {
-+ /* check data frames first, for speed */
-+ case WF_FTYPE_DATAi:
-+ switch (fstype) {
-+ case WF_FSTYPE_DATAONLYi:
-+ if (acx_l_handle_dup(adev, hdr->seq))
-+ break; /* a dup, simply discard it */
-+
-+ /* TODO:
-+ if (WF_FC_FROMTODSi == (hdr->fc & WF_FC_FROMTODSi)) {
-+ result = acx_l_process_data_frame_wds(adev, rxbuf);
-+ break;
-+ }
-+ */
-+
-+ switch (adev->mode) {
-+ case ACX_MODE_3_AP:
-+ result = acx_l_process_data_frame_master(adev, rxbuf);
-+ break;
-+ case ACX_MODE_0_ADHOC:
-+ case ACX_MODE_2_STA:
-+ result = acx_l_process_data_frame_client(adev, rxbuf);
-+ break;
-+ }
-+ case WF_FSTYPE_DATA_CFACKi:
-+ case WF_FSTYPE_DATA_CFPOLLi:
-+ case WF_FSTYPE_DATA_CFACK_CFPOLLi:
-+ case WF_FSTYPE_CFPOLLi:
-+ case WF_FSTYPE_CFACK_CFPOLLi:
-+ /* see above.
-+ acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ case WF_FSTYPE_NULLi:
-+ /* acx_l_process_NULL_frame(adev, rxbuf, 3); */
-+ break;
-+ /* FIXME: same here, see above */
-+ case WF_FSTYPE_CFACKi:
-+ default:
-+ break;
-+ }
-+ break;
-+ case WF_FTYPE_MGMTi:
-+ result = acx_l_process_mgmt_frame(adev, rxbuf);
-+ break;
-+ case WF_FTYPE_CTLi:
-+ if (fstype == WF_FSTYPE_PSPOLLi)
-+ result = OK;
-+ /* this call is irrelevant, since
-+ * acx_process_class_frame is a stub, so return
-+ * immediately instead.
-+ * return acx_process_class_frame(adev, rxbuf, 3); */
-+ break;
-+ default:
-+ break;
-+ }
-+end:
-+ FN_EXIT1(result);
-+ return result;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_process_rxbuf
-+**
-+** NB: used by USB code also
-+*/
-+void
-+acx_l_process_rxbuf(acx_device_t *adev, rxbuffer_t *rxbuf)
-+{
-+ struct wlan_hdr *hdr;
-+ unsigned int qual;
-+ int buf_len;
-+ u16 fc;
-+
-+ hdr = acx_get_wlan_hdr(adev, rxbuf);
-+ fc = le16_to_cpu(hdr->fc);
-+ /* length of frame from control field to first byte of FCS */
-+ buf_len = RXBUF_BYTES_RCVD(adev, rxbuf);
-+
-+ if ( ((WF_FC_FSTYPE & fc) != WF_FSTYPE_BEACON)
-+ || (acx_debug & L_XFER_BEACON)
-+ ) {
-+ log(L_XFER|L_DATA, "rx: %s "
-+ "time:%u len:%u signal:%u SNR:%u macstat:%02X "
-+ "phystat:%02X phyrate:%u status:%u\n",
-+ acx_get_packet_type_string(fc),
-+ le32_to_cpu(rxbuf->time),
-+ buf_len,
-+ acx_signal_to_winlevel(rxbuf->phy_level),
-+ acx_signal_to_winlevel(rxbuf->phy_snr),
-+ rxbuf->mac_status,
-+ rxbuf->phy_stat_baseband,
-+ rxbuf->phy_plcp_signal,
-+ adev->status);
-+ }
-+
-+ if (unlikely(acx_debug & L_DATA)) {
-+ printk("rx: 802.11 buf[%u]: ", buf_len);
-+ acx_dump_bytes(hdr, buf_len);
-+ }
-+
-+ /* FIXME: should check for Rx errors (rxbuf->mac_status?
-+ * discard broken packets - but NOT for monitor!)
-+ * and update Rx packet statistics here */
-+
-+ if (unlikely(adev->mode == ACX_MODE_MONITOR)) {
-+ acx_l_rxmonitor(adev, rxbuf);
-+ } else if (likely(buf_len >= WLAN_HDR_A3_LEN)) {
-+ acx_l_rx_ieee802_11_frame(adev, rxbuf);
-+ } else {
-+ log(L_DEBUG|L_XFER|L_DATA,
-+ "rx: NOT receiving packet (%s): "
-+ "size too small (%u)\n",
-+ acx_get_packet_type_string(fc),
-+ buf_len);
-+ }
-+
-+ /* Now check Rx quality level, AFTER processing packet.
-+ * I tried to figure out how to map these levels to dBm
-+ * values, but for the life of me I really didn't
-+ * manage to get it. Either these values are not meant to
-+ * be expressed in dBm, or it's some pretty complicated
-+ * calculation. */
-+
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ /* only consider packets originating from the MAC
-+ * address of the device that's managing our BSSID.
-+ * Disable it for now, since it removes information (levels
-+ * from different peers) and slows the Rx path. */
-+ if (adev->ap_client
-+ && mac_is_equal(hdr->a2, adev->ap_client->address)) {
-+#endif
-+ adev->wstats.qual.level = acx_signal_to_winlevel(rxbuf->phy_level);
-+ adev->wstats.qual.noise = acx_signal_to_winlevel(rxbuf->phy_snr);
-+#ifndef OLD_QUALITY
-+ qual = acx_signal_determine_quality(adev->wstats.qual.level,
-+ adev->wstats.qual.noise);
-+#else
-+ qual = (adev->wstats.qual.noise <= 100) ?
-+ 100 - adev->wstats.qual.noise : 0;
-+#endif
-+ adev->wstats.qual.qual = qual;
-+ adev->wstats.qual.updated = 7; /* all 3 indicators updated */
-+#ifdef FROM_SCAN_SOURCE_ONLY
-+ }
-+#endif
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_handle_txrate_auto
-+**
-+** Theory of operation:
-+** client->rate_cap is a bitmask of rates client is capable of.
-+** client->rate_cfg is a bitmask of allowed (configured) rates.
-+** It is set as a result of iwconfig rate N [auto]
-+** or iwpriv set_rates "N,N,N N,N,N" commands.
-+** It can be fixed (e.g. 0x0080 == 18Mbit only),
-+** auto (0x00ff == 18Mbit or any lower value),
-+** and code handles any bitmask (0x1081 == try 54Mbit,18Mbit,1Mbit _only_).
-+**
-+** client->rate_cur is a value for rate111 field in tx descriptor.
-+** It is always set to txrate_cfg sans zero or more most significant
-+** bits. This routine handles selection of new rate_cur value depending on
-+** outcome of last tx event.
-+**
-+** client->rate_100 is a precalculated rate value for acx100
-+** (we can do without it, but will need to calculate it on each tx).
-+**
-+** You cannot configure mixed usage of 5.5 and/or 11Mbit rate
-+** with PBCC and CCK modulation. Either both at CCK or both at PBCC.
-+** In theory you can implement it, but so far it is considered not worth doing.
-+**
-+** 22Mbit, of course, is PBCC always. */
-+
-+/* maps acx100 tx descr rate field to acx111 one */
-+static u16
-+rate100to111(u8 r)
-+{
-+ switch (r) {
-+ case RATE100_1: return RATE111_1;
-+ case RATE100_2: return RATE111_2;
-+ case RATE100_5:
-+ case (RATE100_5 | RATE100_PBCC511): return RATE111_5;
-+ case RATE100_11:
-+ case (RATE100_11 | RATE100_PBCC511): return RATE111_11;
-+ case RATE100_22: return RATE111_22;
-+ default:
-+ printk("acx: unexpected acx100 txrate: %u! "
-+ "Please report\n", r);
-+ return RATE111_1;
-+ }
-+}
-+
-+
-+void
-+acx_l_handle_txrate_auto(acx_device_t *adev, struct client *txc,
-+ u16 cur, u8 rate100, u16 rate111,
-+ u8 error, int pkts_to_ignore)
-+{
-+ u16 sent_rate;
-+ int slower_rate_was_used;
-+
-+ /* vda: hmm. current code will do this:
-+ ** 1. send packets at 11 Mbit, stepup++
-+ ** 2. will try to send at 22Mbit. hardware will see no ACK,
-+ ** retries at 11Mbit, success. code notes that used rate
-+ ** is lower. stepup = 0, fallback++
-+ ** 3. repeat step 2 fallback_count times. Fall back to
-+ ** 11Mbit. go to step 1.
-+ ** If stepup_count is large (say, 16) and fallback_count
-+ ** is small (3), this wouldn't be too bad wrt throughput */
-+
-+ if (unlikely(!cur)) {
-+ printk("acx: BUG! ratemask is empty\n");
-+ return; /* or else we may lock up the box */
-+ }
-+
-+ /* do some preparations, i.e. calculate the one rate that was
-+ * used to send this packet */
-+ if (IS_ACX111(adev)) {
-+ sent_rate = 1 << highest_bit(rate111 & RATE111_ALL);
-+ } else {
-+ sent_rate = rate100to111(rate100);
-+ }
-+ /* sent_rate has only one bit set now, corresponding to tx rate
-+ * which was used by hardware to tx this particular packet */
-+
-+ /* now do the actual auto rate management */
-+ log(L_XFER, "tx: %sclient=%p/"MACSTR" used=%04X cur=%04X cfg=%04X "
-+ "__=%u/%u ^^=%u/%u\n",
-+ (txc->ignore_count > 0) ? "[IGN] " : "",
-+ txc, MAC(txc->address), sent_rate, cur, txc->rate_cfg,
-+ txc->fallback_count, adev->fallback_threshold,
-+ txc->stepup_count, adev->stepup_threshold
-+ );
-+
-+ /* we need to ignore old packets already in the tx queue since
-+ * they use older rate bytes configured before our last rate change,
-+ * otherwise our mechanism will get confused by interpreting old data.
-+ * Do it after logging above */
-+ if (txc->ignore_count) {
-+ txc->ignore_count--;
-+ return;
-+ }
-+
-+ /* true only if the only nonzero bit in sent_rate is
-+ ** less significant than highest nonzero bit in cur */
-+ slower_rate_was_used = ( cur > ((sent_rate<<1)-1) );
-+
-+ if (slower_rate_was_used || error) {
-+ txc->stepup_count = 0;
-+ if (++txc->fallback_count <= adev->fallback_threshold)
-+ return;
-+ txc->fallback_count = 0;
-+
-+ /* clear highest 1 bit in cur */
-+ sent_rate = RATE111_54;
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+ CLEAR_BIT(cur, sent_rate);
-+ if (!cur) /* we can't disable all rates! */
-+ cur = sent_rate;
-+ log(L_XFER, "tx: falling back to ratemask %04X\n", cur);
-+
-+ } else { /* there was neither lower rate nor error */
-+ txc->fallback_count = 0;
-+ if (++txc->stepup_count <= adev->stepup_threshold)
-+ return;
-+ txc->stepup_count = 0;
-+
-+ /* Sanitize. Sort of not needed, but I dont trust hw that much...
-+ ** what if it can report bogus tx rates sometimes? */
-+ while (!(cur & sent_rate)) sent_rate >>= 1;
-+
-+ /* try to find a higher sent_rate that isn't yet in our
-+ * current set, but is an allowed cfg */
-+ while (1) {
-+ sent_rate <<= 1;
-+ if (sent_rate > txc->rate_cfg)
-+ /* no higher rates allowed by config */
-+ return;
-+ if (!(cur & sent_rate) && (txc->rate_cfg & sent_rate))
-+ /* found */
-+ break;
-+ /* not found, try higher one */
-+ }
-+ SET_BIT(cur, sent_rate);
-+ log(L_XFER, "tx: stepping up to ratemask %04X\n", cur);
-+ }
-+
-+ txc->rate_cur = cur;
-+ txc->ignore_count = pkts_to_ignore;
-+ /* calculate acx100 style rate byte if needed */
-+ if (IS_ACX100(adev)) {
-+ txc->rate_100 = acx_bitpos2rate100[highest_bit(cur)];
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_start_xmit
-+**
-+** Called by network core. Can be called outside of process context.
-+*/
-+int
-+acx_i_start_xmit(struct sk_buff *skb, struct net_device *ndev)
-+{
-+ acx_device_t *adev = ndev2adev(ndev);
-+ tx_t *tx;
-+ void *txbuf;
-+ unsigned long flags;
-+ int txresult = NOT_OK;
-+ int len;
-+
-+ FN_ENTER;
-+
-+ if (unlikely(!skb)) {
-+ /* indicate success */
-+ txresult = OK;
-+ goto end_no_unlock;
-+ }
-+ if (unlikely(!adev)) {
-+ goto end_no_unlock;
-+ }
-+
-+ acx_lock(adev, flags);
-+
-+ if (unlikely(!(adev->dev_state_mask & ACX_STATE_IFACE_UP))) {
-+ goto end;
-+ }
-+ if (unlikely(adev->mode == ACX_MODE_OFF)) {
-+ goto end;
-+ }
-+ if (unlikely(acx_queue_stopped(ndev))) {
-+ log(L_DEBUG, "%s: called when queue stopped\n", __func__);
-+ goto end;
-+ }
-+ if (unlikely(ACX_STATUS_4_ASSOCIATED != adev->status)) {
-+ log(L_XFER, "trying to xmit, but not associated yet: "
-+ "aborting...\n");
-+ /* silently drop the packet, since we're not connected yet */
-+ txresult = OK;
-+ /* ...but indicate an error nevertheless */
-+ adev->stats.tx_errors++;
-+ goto end;
-+ }
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (unlikely(!tx)) {
-+#ifndef ACX_MEM
-+ /*
-+ * generic slave interface has to make do with the tiny amount, around
-+ * 7k, of transmit buffer space on the ACX itself. It is likely this will
-+ * frequently be full.
-+ */
-+ printk_ratelimited("%s: start_xmit: txdesc ring is full, "
-+ "dropping tx\n", ndev->name);
-+#endif
-+ txresult = NOT_OK;
-+ goto end;
-+ }
-+
-+ txbuf = acx_l_get_txbuf(adev, tx);
-+ if (unlikely(!txbuf)) {
-+ /* Card was removed */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ len = acx_ether_to_txbuf(adev, txbuf, skb);
-+ if (unlikely(len < 0)) {
-+ /* Error in packet conversion */
-+ txresult = NOT_OK;
-+ acx_l_dealloc_tx(adev, tx);
-+ goto end;
-+ }
-+ acx_l_tx_data(adev, tx, len);
-+ ndev->trans_start = jiffies;
-+
-+ txresult = OK;
-+ adev->stats.tx_packets++;
-+ adev->stats.tx_bytes += skb->len;
-+
-+end:
-+ acx_unlock(adev, flags);
-+
-+end_no_unlock:
-+ if ((txresult == OK) && skb)
-+ dev_kfree_skb_any(skb);
-+
-+ FN_EXIT1(txresult);
-+ return txresult;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_update_ratevector
-+**
-+** Updates adev->rate_supported[_len] according to rate_{basic,oper}
-+*/
-+const u8
-+acx_bitpos2ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+void
-+acx_l_update_ratevector(acx_device_t *adev)
-+{
-+ u16 bcfg = adev->rate_basic;
-+ u16 ocfg = adev->rate_oper;
-+ u8 *supp = adev->rate_supported;
-+ const u8 *dot11 = acx_bitpos2ratebyte;
-+
-+ FN_ENTER;
-+
-+ while (ocfg) {
-+ if (ocfg & 1) {
-+ *supp = *dot11;
-+ if (bcfg & 1) {
-+ *supp |= 0x80;
-+ }
-+ supp++;
-+ }
-+ dot11++;
-+ ocfg >>= 1;
-+ bcfg >>= 1;
-+ }
-+ adev->rate_supported_len = supp - adev->rate_supported;
-+ if (acx_debug & L_ASSOC) {
-+ printk("new ratevector: ");
-+ acx_dump_bytes(adev->rate_supported, adev->rate_supported_len);
-+ }
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_init
-+*/
-+static void
-+acx_l_sta_list_init(acx_device_t *adev)
-+{
-+ FN_ENTER;
-+ memset(adev->sta_hash_tab, 0, sizeof(adev->sta_hash_tab));
-+ memset(adev->sta_list, 0, sizeof(adev->sta_list));
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_from_hash
-+*/
-+static inline client_t*
-+acx_l_sta_list_get_from_hash(acx_device_t *adev, const u8 *address)
-+{
-+ return adev->sta_hash_tab[address[5] % VEC_SIZE(adev->sta_hash_tab)];
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get
-+*/
-+client_t*
-+acx_l_sta_list_get(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ FN_ENTER;
-+ client = acx_l_sta_list_get_from_hash(adev, address);
-+ while (client) {
-+ if (mac_is_equal(address, client->address)) {
-+ client->mtime = jiffies;
-+ break;
-+ }
-+ client = client->next;
-+ }
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_del
-+*/
-+void
-+acx_l_sta_list_del(acx_device_t *adev, client_t *victim)
-+{
-+ client_t *client, *next;
-+
-+ client = acx_l_sta_list_get_from_hash(adev, victim->address);
-+ next = client;
-+ /* tricky. next = client on first iteration only,
-+ ** on all other iters next = client->next */
-+ while (next) {
-+ if (next == victim) {
-+ client->next = victim->next;
-+ /* Overkill */
-+ memset(victim, 0, sizeof(*victim));
-+ break;
-+ }
-+ client = next;
-+ next = client->next;
-+ }
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_alloc
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_alloc(acx_device_t *adev)
-+{
-+ int i;
-+ unsigned long age, oldest_age;
-+ client_t *client, *oldest;
-+
-+ FN_ENTER;
-+
-+ oldest = &adev->sta_list[0];
-+ oldest_age = 0;
-+ for (i = 0; i < VEC_SIZE(adev->sta_list); i++) {
-+ client = &adev->sta_list[i];
-+
-+ if (!client->used) {
-+ goto found;
-+ } else {
-+ age = jiffies - client->mtime;
-+ if (oldest_age < age) {
-+ oldest_age = age;
-+ oldest = client;
-+ }
-+ }
-+ }
-+ acx_l_sta_list_del(adev, oldest);
-+ client = oldest;
-+found:
-+ memset(client, 0, sizeof(*client));
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+/* In case we will reimplement it differently... */
-+#define STA_LIST_ADD_CAN_FAIL 0
-+
-+static client_t*
-+acx_l_sta_list_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client;
-+ int index;
-+
-+ FN_ENTER;
-+
-+ client = acx_l_sta_list_alloc(adev);
-+
-+ client->mtime = jiffies;
-+ MAC_COPY(client->address, address);
-+ client->used = CLIENT_EXIST_1;
-+ client->auth_alg = WLAN_AUTH_ALG_SHAREDKEY;
-+ client->auth_step = 1;
-+ /* give some tentative peer rate values
-+ ** (needed because peer may do auth without probing us first,
-+ ** thus we'll have no idea of peer's ratevector yet).
-+ ** Will be overwritten by scanning or assoc code */
-+ client->rate_cap = adev->rate_basic;
-+ client->rate_cfg = adev->rate_basic;
-+ client->rate_cur = 1 << lowest_bit(adev->rate_basic);
-+
-+ index = address[5] % VEC_SIZE(adev->sta_hash_tab);
-+ client->next = adev->sta_hash_tab[index];
-+ adev->sta_hash_tab[index] = client;
-+
-+ acxlog_mac(L_ASSOC, "sta_list_add: sta=", address, "\n");
-+
-+ FN_EXIT0;
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_sta_list_get_or_add
-+**
-+** Never fails - will evict oldest client if needed
-+*/
-+static client_t*
-+acx_l_sta_list_get_or_add(acx_device_t *adev, const u8 *address)
-+{
-+ client_t *client = acx_l_sta_list_get(adev, address);
-+ if (!client)
-+ client = acx_l_sta_list_add(adev, address);
-+ return client;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_status
-+**
-+** This function is called in many atomic regions, must not sleep
-+**
-+** This function does not need locking UNLESS you call it
-+** as acx_set_status(ACX_STATUS_4_ASSOCIATED), bacause this can
-+** wake queue. This can race with stop_queue elsewhere.
-+** See acx_stop_queue comment. */
-+void
-+acx_set_status(acx_device_t *adev, u16 new_status)
-+{
-+#define QUEUE_OPEN_AFTER_ASSOC 1 /* this really seems to be needed now */
-+ u16 old_status = adev->status;
-+
-+ FN_ENTER;
-+
-+ log(L_ASSOC, "%s(%d):%s\n",
-+ __func__, new_status, acx_get_status_name(new_status));
-+
-+ /* wireless_send_event never sleeps */
-+ if (ACX_STATUS_4_ASSOCIATED == new_status) {
-+ union iwreq_data wrqu;
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ wireless_send_event(adev->ndev, SIOCGIWSCAN, &wrqu, NULL);
-+
-+ wrqu.data.length = 0;
-+ wrqu.data.flags = 0;
-+ MAC_COPY(wrqu.ap_addr.sa_data, adev->bssid);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ } else {
-+ union iwreq_data wrqu;
-+
-+ /* send event with empty BSSID to indicate we're not associated */
-+ MAC_ZERO(wrqu.ap_addr.sa_data);
-+ wrqu.ap_addr.sa_family = ARPHRD_ETHER;
-+ wireless_send_event(adev->ndev, SIOCGIWAP, &wrqu, NULL);
-+ }
-+
-+ adev->status = new_status;
-+
-+ switch (new_status) {
-+ case ACX_STATUS_1_SCANNING:
-+ adev->scan_retries = 0;
-+ /* 1.0 s initial scan time */
-+ acx_set_timer(adev, 1000000);
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ adev->auth_or_assoc_retries = 0;
-+ acx_set_timer(adev, 1500000); /* 1.5 s */
-+ break;
-+ }
-+
-+#if QUEUE_OPEN_AFTER_ASSOC
-+ if (new_status == ACX_STATUS_4_ASSOCIATED) {
-+ if (old_status < ACX_STATUS_4_ASSOCIATED) {
-+ /* ah, we're newly associated now,
-+ * so let's indicate carrier */
-+ acx_carrier_on(adev->ndev, "after association");
-+ acx_wake_queue(adev->ndev, "after association");
-+ }
-+ } else {
-+ /* not associated any more, so let's kill carrier */
-+ if (old_status >= ACX_STATUS_4_ASSOCIATED) {
-+ acx_carrier_off(adev->ndev, "after losing association");
-+ acx_stop_queue(adev->ndev, "after losing association");
-+ }
-+ }
-+#endif
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_i_timer
-+**
-+** Fires up periodically. Used to kick scan/auth/assoc if something goes wrong
-+*/
-+void
-+acx_i_timer(unsigned long address)
-+{
-+ unsigned long flags;
-+ acx_device_t *adev = (acx_device_t*)address;
-+
-+ FN_ENTER;
-+
-+ acx_lock(adev, flags);
-+
-+ log(L_DEBUG|L_ASSOC, "%s: adev->status=%d (%s)\n",
-+ __func__, adev->status, acx_get_status_name(adev->status));
-+
-+ switch (adev->status) {
-+ case ACX_STATUS_1_SCANNING:
-+ /* was set to 0 by set_status() */
-+ if (++adev->scan_retries < 7) {
-+ acx_set_timer(adev, 1000000);
-+ /* used to interrogate for scan status.
-+ ** We rely on SCAN_COMPLETE IRQ instead */
-+ log(L_ASSOC, "continuing scan (%d sec)\n",
-+ adev->scan_retries);
-+ } else {
-+ log(L_ASSOC, "stopping scan\n");
-+ /* send stop_scan cmd when we leave the interrupt context,
-+ * and make a decision what to do next (COMPLETE_SCAN) */
-+ acx_schedule_task(adev,
-+ ACX_AFTER_IRQ_CMD_STOP_SCAN + ACX_AFTER_IRQ_COMPLETE_SCAN);
-+ }
-+ break;
-+ case ACX_STATUS_2_WAIT_AUTH:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend authen1 request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_authen1(adev);
-+ } else {
-+ /* time exceeded: fall back to scanning mode */
-+ log(L_ASSOC,
-+ "authen1 request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ /* used to be 1500000, but some other driver uses 2.5s */
-+ acx_set_timer(adev, 2500000);
-+ break;
-+ case ACX_STATUS_3_AUTHENTICATED:
-+ /* was set to 0 by set_status() */
-+ if (++adev->auth_or_assoc_retries < 10) {
-+ log(L_ASSOC, "resend assoc request (attempt %d)\n",
-+ adev->auth_or_assoc_retries + 1);
-+ acx_l_transmit_assoc_req(adev);
-+ } else {
-+ /* time exceeded: give up */
-+ log(L_ASSOC,
-+ "association request reply timeout, giving up\n");
-+ /* we are a STA, need to find AP anyhow */
-+ acx_set_status(adev, ACX_STATUS_1_SCANNING);
-+ acx_schedule_task(adev, ACX_AFTER_IRQ_RESTART_SCAN);
-+ }
-+ acx_set_timer(adev, 2500000); /* see above */
-+ break;
-+ case ACX_STATUS_4_ASSOCIATED:
-+ default:
-+ break;
-+ }
-+
-+ acx_unlock(adev, flags);
-+
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_set_timer
-+**
-+** Sets the 802.11 state management timer's timeout.
-+*/
-+void
-+acx_set_timer(acx_device_t *adev, int timeout_us)
-+{
-+ FN_ENTER;
-+
-+ log(L_DEBUG|L_IRQ, "%s(%u ms)\n", __func__, timeout_us/1000);
-+ if (!(adev->dev_state_mask & ACX_STATE_IFACE_UP)) {
-+ printk("attempt to set the timer "
-+ "when the card interface is not up!\n");
-+ goto end;
-+ }
-+
-+ /* first check if the timer was already initialized, THEN modify it */
-+ if (adev->mgmt_timer.function) {
-+ mod_timer(&adev->mgmt_timer,
-+ jiffies + (timeout_us * HZ / 1000000));
-+ }
-+end:
-+ FN_EXIT0;
-+}
-+
-+
-+/***********************************************************************
-+** acx_l_transmit_assocresp
-+**
-+** We are an AP here
-+*/
-+static const u8
-+dot11ratebyte[] = {
-+ DOT11RATEBYTE_1,
-+ DOT11RATEBYTE_2,
-+ DOT11RATEBYTE_5_5,
-+ DOT11RATEBYTE_6_G,
-+ DOT11RATEBYTE_9_G,
-+ DOT11RATEBYTE_11,
-+ DOT11RATEBYTE_12_G,
-+ DOT11RATEBYTE_18_G,
-+ DOT11RATEBYTE_22,
-+ DOT11RATEBYTE_24_G,
-+ DOT11RATEBYTE_36_G,
-+ DOT11RATEBYTE_48_G,
-+ DOT11RATEBYTE_54_G,
-+};
-+
-+static inline int
-+find_pos(const u8 *p, int size, u8 v)
-+{
-+ int i;
-+ for (i = 0; i < size; i++)
-+ if (p[i] == v)
-+ return i;
-+ /* printk a message about strange byte? */
-+ return 0;
-+}
-+
-+static void
-+add_bits_to_ratemasks(u8* ratevec, int len, u16* brate, u16* orate)
-+{
-+ while (len--) {
-+ int n = 1 << find_pos(dot11ratebyte,
-+ sizeof(dot11ratebyte), *ratevec & 0x7f);
-+ if (*ratevec & 0x80)
-+ *brate |= n;
-+ *orate |= n;
-+ ratevec++;
-+ }
-+}
-+
-+static int
-+acx_l_transmit_assocresp(acx_device_t *adev, const wlan_fr_assocreq_t *req)
-+{
-+ struct tx *tx;
-+ struct wlan_hdr_mgmt *head;
-+ struct assocresp_frame_body *body;
-+ u8 *p;
-+ const u8 *da;
-+ /* const u8 *sa; */
-+ const u8 *bssid;
-+ client_t *clt;
-+
-+ FN_ENTER;
-+
-+ /* sa = req->hdr->a1; */
-+ da = req->hdr->a2;
-+ bssid = req->hdr->a3;
-+
-+ clt = acx_l_sta_list_get(adev, da);
-+ if (!clt)
-+ goto ok;
-+
-+ /* Assoc without auth is a big no-no */
-+ /* Let's be liberal: if already assoc'ed STA sends assoc req again,
-+ ** we won't be rude */
-+ if (clt->used != CLIENT_AUTHENTICATED_2
-+ && clt->used != CLIENT_ASSOCIATED_3) {
-+ acx_l_transmit_deauthen(adev, da, WLAN_MGMT_REASON_CLASS2_NONAUTH);
-+ goto bad;
-+ }
-+
-+ clt->used = CLIENT_ASSOCIATED_3;
-+
-+ if (clt->aid == 0)
-+ clt->aid = ++adev->aid;
-+ clt->cap_info = ieee2host16(*(req->cap_info));
-+
-+ /* We cheat here a bit. We don't really care which rates are flagged
-+ ** as basic by the client, so we stuff them in single ratemask */
-+ clt->rate_cap = 0;
-+ if (req->supp_rates)
-+ add_bits_to_ratemasks(req->supp_rates->rates,
-+ req->supp_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ if (req->ext_rates)
-+ add_bits_to_ratemasks(req->ext_rates->rates,
-+ req->ext_rates->len, &clt->rate_cap, &clt->rate_cap);
-+ /* We can check that client supports all basic rates,
-+ ** and deny assoc if not. But let's be liberal, right? ;) */
-+ clt->rate_cfg = clt->rate_cap & adev->rate_oper;
-+ if (!clt->rate_cfg) clt->rate_cfg = 1 << lowest_bit(adev->rate_oper);
-+ clt->rate_cur = 1 << lowest_bit(clt->rate_cfg);
-+ if (IS_ACX100(adev))
-+ clt->rate_100 = acx_bitpos2rate100[lowest_bit(clt->rate_cfg)];
-+ clt->fallback_count = clt->stepup_count = 0;
-+ clt->ignore_count = 16;
-+
-+ tx = acx_l_alloc_tx(adev);
-+ if (!tx)
-+ goto bad;
-+ head = acx_l_get_txbuf(adev, tx);
-+ if (!head) {
-+ acx_l_dealloc_tx(adev, tx);
-+ goto bad;
-+ }
-+ body = (void*)(head + 1);
-+
-+ head->fc = WF_FSTYPE_ASSOCRESPi;
-+ head->dur = req->hdr->dur;
-+ MAC_COPY(head->da, da);
-+ MAC_COPY(head->sa, adev->dev_addr);
-+ MAC_COPY(head->bssid, bssid);
-+ head->seq = req->hdr->seq;
-+
-+ body->cap_info = host2ieee16(adev->capabilities);
-+ body->status = host2ieee16(0);
-+ body->aid = host2ieee16(clt->aid);
-+ p = wlan_fill_ie_rates((u8*)&body->rates, adev->rate_supported_len,
-+ adev->rate_supported);
-+ p = wlan_fill_ie_rates_ext(p, adev->rate_supported_len,
-+ adev->rate_supported);
-+
-+ acx_l_tx_data(adev, tx, p - (u8*)head);
-+ok:
-+ FN_EXIT1(OK);
-+ return OK;
-+bad:
-+ FN_EXIT1(NOT_OK);
-+ return NOT_OK;
-+}
-+
-+
-+/***********************************************************************
-+* acx_l_transmit_reassocresp
-+
-+You may be wondering, just like me, what the hell ReAuth is.
-+In practice it was seen sent by STA when STA feels like losing connection.
-+
-+[802.11]
-+
-+5.4.2.3 Reassociation
-+
-+Association is sufficient for no-transition message delivery between
-+IEEE 802.11 stations. Additional functionality is needed to support
-+BSS-transition mobility. The additional required functionality
-+is provided by the reassociation service. Reassociation is a DSS.
-+The reassociation service is invoked to 'move' a current association
-+from one AP to another. This keeps the DS informed of the current
-+mapping between AP and STA as the station moves from BSS to BSS within
-+an ESS. Reassociation also enables changing association attributes
-+of an established association while the STA remains associated with
-+the same AP. Reassociation is always initiated by the mobile STA.
-+
-+5.4.3.1 Authentication
-+...
-+A STA may be authenticated with many other STAs at any given instant.
-+
-+5.4.3.1.1 Preauthentication
-+
-+Because the authentication process could be time-consuming (depending
-+on the authentication protocol in use), the authentication service can
-+be invoked independently of the association service. Preauthentication
-+is typically done by a STA while it is already associated with an AP
-+(with which it previously authenticated). IEEE 802.11 does not require
-+that STAs preauthenticate with APs. However, authentication is required
-+before an association can be established. If the authentication is left
-+until reassociation time, this may impact the speed with which a STA can
-+reassociate between APs, limiting BSS-transition mobility performance.
-+The use of preauthentication takes the authentication service overhead
-+out of the time-critical reassociation process.
-+
-+5.7.3 Reassociation
-+
-+For a STA to reassociate, the reassociation service causes the following
-+message to occur:
-+
-+ Reassociation request
-+
-+* Message type: Management
-+* Message subtype: Reassociation request
-+* Information items:
-+ - IEEE address of the STA
-+ - IEEE address of the AP with which the STA will reassociate
-+ - IEEE address of the AP with which the STA is currently associated
-+ - ESSID
-+* Direction of message: From STA to 'new' AP
-+
-+The address of the current AP is included for efficiency. The inclusion
-+of the current AP address facilitates MAC reassociation to be independent
-+of the DS implementation.
-+
-+ Reassociation response
-+* Message type: Management
-+* Message subtype: Reassociation response
-+* Information items:
-+ - Result of the requested reassociation. (success/failure)
-+ - If the reassociation is successful, the response shall include the AID.
-+* Direction of message: From AP to STA
-+
-+7.2.3.6 Reassociation Request frame format
-+
-+The frame body of a management frame of subtype Reassociati