update brcm-2.4 to 2.4.35.4, integrate new broadcom system code, update broadcom...
authorFelix Fietkau <nbd@openwrt.org>
Sun, 6 Jan 2008 19:28:07 +0000 (19:28 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 6 Jan 2008 19:28:07 +0000 (19:28 +0000)
SVN-Revision: 10137

167 files changed:
include/kernel-version.mk
package/broadcom-wl/Makefile
package/broadcom-wl/files/lib/wifi/broadcom.sh
package/broadcom-wl/src/driver/Makefile
package/broadcom-wl/src/driver/bcmutils.c
package/broadcom-wl/src/driver/bcmutils.h [new file with mode: 0644]
package/broadcom-wl/src/driver/hnddma.c
package/broadcom-wl/src/driver/hnddma.h
package/broadcom-wl/src/driver/linux_osl.c
package/broadcom-wl/src/driver/linux_osl.h
package/broadcom-wl/src/driver/patchtable.pl [deleted file]
package/broadcom-wl/src/driver/pktq.h [deleted file]
package/broadcom-wl/src/driver/proto/802.11.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/802.11e.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/802.1d.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/802.3.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmarp.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmdhcp.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmeth.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmevent.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmip.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmtcp.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/bcmudp.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/eap.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/eapol.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/ethernet.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/vlan.h [new file with mode: 0644]
package/broadcom-wl/src/driver/proto/wpa.h [new file with mode: 0644]
package/broadcom-wl/src/driver/sbhnddma.h
package/broadcom-wl/src/wlc/wlc.c
package/broadcom-wl/src/wlcompat/Makefile
package/broadcom-wl/src/wlcompat/wlcompat.c
target/linux/brcm-2.4/config-2.4.34 [deleted file]
target/linux/brcm-2.4/config-default [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/Makefile
target/linux/brcm-2.4/files/arch/mips/bcm947xx/bcmsrom.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/bcmutils.c [deleted file]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/cfe_env.c [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/compressed/Makefile [deleted file]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/export.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/gpio.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/hndchipc.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/hndpmu.c [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmdefs.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmdevs.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmendian.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmnvram.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmsrom.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmutils.h [deleted file]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndchipc.h [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndcpu.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndmips.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndpci.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndpmu.h [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/linux_gpio.h [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/linuxver.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/mipsinc.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/osl.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/pcicfg.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbchipc.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbconfig.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbextif.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbhndmips.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbmemc.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbpci.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbpcie.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbpcmcia.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbsdram.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbsocram.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbsprom.h [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbutils.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sflash.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/trxhdr.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/typedefs.h
target/linux/brcm-2.4/files/arch/mips/bcm947xx/nvram.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/nvram_linux.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/pcibios.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/sbmips.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/sbpci.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/sbutils.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/setup.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/sflash.c [deleted file]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/time.c
target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.c [new file with mode: 0644]
target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.h [new file with mode: 0644]
target/linux/brcm-2.4/files/drivers/mtd/devices/sflash.c
target/linux/brcm-2.4/files/drivers/mtd/maps/bcm947xx-flash.c
target/linux/brcm-2.4/patches/001-bcm47xx.patch
target/linux/brcm-2.4/patches/002-wl_fix.patch [deleted file]
target/linux/brcm-2.4/patches/003-bcm47xx_cache_fixes.patch
target/linux/brcm-2.4/patches/004-flash.patch
target/linux/brcm-2.4/patches/005-bluetooth_sco_buffer_align.patch
target/linux/brcm-2.4/patches/006-ide_workaround.patch
target/linux/brcm-2.4/patches/008-b44_bcm47xx_support.patch
target/linux/brcm-2.4/patches/009-wrt54g3g_pcmcia.patch
target/linux/brcm-2.4/patches/010-bcm47xx-cam_absent.patch
target/linux/brcm-2.4/patches/011-wl_qdisc_war.patch
target/linux/brcm-2.4/patches/012-aec62xx.patch
target/linux/brcm-2.4/patches/013-wl_hdd_pdc202xx.patch
target/linux/brcm-2.4/patches/014-bcm5354.patch [deleted file]
target/linux/generic-2.4/config-default
target/linux/generic-2.4/patches/000-linux_mips.patch
target/linux/generic-2.4/patches/001-squashfs.patch
target/linux/generic-2.4/patches/002-squashfs_lzma.patch
target/linux/generic-2.4/patches/003-jffs2_compression.patch
target/linux/generic-2.4/patches/004-exec_pagesize.patch
target/linux/generic-2.4/patches/005-mtd_flashtypes.patch
target/linux/generic-2.4/patches/008-intel_flashchip_fix.patch
target/linux/generic-2.4/patches/009-mtd_uaccess.patch
target/linux/generic-2.4/patches/010-disable_old_squashfs_compatibility.patch
target/linux/generic-2.4/patches/050-build_flags.patch
target/linux/generic-2.4/patches/051-parallel_build.patch
target/linux/generic-2.4/patches/051-remove_pcmcia_modinst_compat.patch
target/linux/generic-2.4/patches/100-wireless-extension.patch
target/linux/generic-2.4/patches/106-mppe_mppc.patch
target/linux/generic-2.4/patches/107-cifs.patch
target/linux/generic-2.4/patches/108-optional_aout_support.patch
target/linux/generic-2.4/patches/109-ipsec_nat_traversal.patch
target/linux/generic-2.4/patches/110-netdev_random_core.patch
target/linux/generic-2.4/patches/112-bridging_performance.patch
target/linux/generic-2.4/patches/113-even_more_gcc4_stuff.patch
target/linux/generic-2.4/patches/114-sched_use_tsc.patch
target/linux/generic-2.4/patches/115-branch_emul_fix.patch
target/linux/generic-2.4/patches/200-i4l.patch
target/linux/generic-2.4/patches/201-hfc_usb_backport.patch
target/linux/generic-2.4/patches/202-pl2303_backport.patch
target/linux/generic-2.4/patches/203-hfsplus_fix.patch
target/linux/generic-2.4/patches/206-gcc_3.4_fixes.patch
target/linux/generic-2.4/patches/208-usb2_fix.patch
target/linux/generic-2.4/patches/209-build_fixes.patch
target/linux/generic-2.4/patches/210-fix-irq-serial.patch
target/linux/generic-2.4/patches/212-htb_time_fix.patch
target/linux/generic-2.4/patches/213-htb_disable_hysteresis.patch
target/linux/generic-2.4/patches/222-sound.patch
target/linux/generic-2.4/patches/224-atm_hotplug.patch
target/linux/generic-2.4/patches/225-string_lib_useful_exports.patch
target/linux/generic-2.4/patches/226-atm_br2684.patch
target/linux/generic-2.4/patches/227-jffs2_eofdetect.patch
target/linux/generic-2.4/patches/228-more_usb_fixes.patch
target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
target/linux/generic-2.4/patches/231-mini_fo.patch
target/linux/generic-2.4/patches/601-netfilter_ipp2p_0.8.1rc1.patch
target/linux/generic-2.4/patches/602-netfilter_layer7_2.1nbd.patch
target/linux/generic-2.4/patches/603-netfilter_nat_pptp.patch
target/linux/generic-2.4/patches/604-netfilter_maxconn.patch
target/linux/generic-2.4/patches/605-netfilter_TTL.patch
target/linux/generic-2.4/patches/606-netfilter_NETMAP.patch
target/linux/generic-2.4/patches/607-netfilter_connmark.patch
target/linux/generic-2.4/patches/608-netfilter_ipset.patch
target/linux/generic-2.4/patches/609-netfilter_string.patch
target/linux/generic-2.4/patches/610-netfilter_connbytes.patch
target/linux/generic-2.4/patches/611-netfilter_condition.patch
target/linux/generic-2.4/patches/612-netfilter_quota.patch
target/linux/generic-2.4/patches/613-netfilter_nat_h323.patch
target/linux/generic-2.4/patches/614-netfilter_nat_rtsp.patch
target/linux/generic-2.4/patches/615-netfilter_nat_mms.patch
target/linux/generic-2.4/patches/616-netfilter_imq.patch
target/linux/generic-2.4/patches/617-netfilter_time.patch
target/linux/generic-2.4/patches/618-netfilter_multiport_backport.patch
target/linux/generic-2.4/patches/619-netfilter_classify.patch
target/linux/generic-2.4/patches/620-netfilter_iprange.patch
target/linux/generic-2.4/patches/621-netfilter_random.patch
target/linux/generic-2.4/patches/621-tc_esfq.patch
target/linux/generic-2.4/patches/622-netfilter_ipset_porthash.patch
target/linux/generic-2.4/patches/700-multiple_default_gateways.patch
target/linux/generic-2.4/patches/801-usb_serial_endpoint_size.patch
target/linux/generic-2.4/patches/802-usb_serial_3g_cards.patch

index df96216cded62408a8f002b6041bff9bd8b7949f..738835b457804c719966cf9c6f71335274886170 100644 (file)
@@ -1,7 +1,7 @@
 # Use the default kernel version if the Makefile doesn't override it
 
 ifeq ($(KERNEL),2.4)
-  LINUX_VERSION?=2.4.34
+  LINUX_VERSION?=2.4.35.4
 else
   LINUX_VERSION?=2.6.21.5
 endif
@@ -10,6 +10,9 @@ LINUX_RELEASE?=1
 ifeq ($(LINUX_VERSION),2.4.34)
   LINUX_KERNEL_MD5SUM:=f59665540a7f3351ea416a0dad104b55
 endif
+ifeq ($(LINUX_VERSION),2.4.35.4)
+  LINUX_KERNEL_MD5SUM:=34066faff3d8c042df1c7600b08b8070
+endif
 ifeq ($(LINUX_VERSION),2.6.22.4)
   LINUX_KERNEL_MD5SUM:=6cf83acf21e65dcea4a5170c0bbc7125
 endif
index 8c68e8e81796f50ef0d66895c0f6770bbe8bd809..b60d184fcf51c72827fc556c9603dca047b402a0 100644 (file)
@@ -10,13 +10,15 @@ include $(TOPDIR)/rules.mk
 include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=broadcom-wl
-PKG_VERSION:=4.80.53.0
+PKG_VERSION:=4.150.10.5
 PKG_RELEASE:=1
 WLC_VERSION:=0.1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
 PKG_SOURCE_URL:=http://downloads.openwrt.org/sources
-PKG_MD5SUM:=a7d8dde3ce474c361143b83e1d9890b1
+PKG_MD5SUM:=0c6ba9687114c6b598e8019e262d9a60
+
+WL_WEXT=1
 
 include $(INCLUDE_DIR)/package.mk
 
@@ -107,7 +109,7 @@ endef
 define Package/wl
 $(call Package/broadcom-wl/Default)
   TITLE:=Proprietary Broadcom wl driver config utility
-  DEPENDS+=+brcm-compat-ldso
+#  DEPENDS+=+brcm-compat-ldso
 endef
 
 define Package/wl/description
@@ -118,7 +120,7 @@ endef
 define Package/nas
 $(call Package/broadcom-wl/Default)
   DEPENDS+= +nvram
-  DEPENDS+= +brcm-compat-ldso
+#  DEPENDS+= +brcm-compat-ldso
   TITLE:=Proprietary Broadcom WPA/WPA2 authenticator
 endef
 
@@ -127,20 +129,6 @@ define Package/nas/description
  proprietary Broadcom wl driver.
 endef
 
-
-define install_template
-       $(INSTALL_DIR) $(1)/lib/modules/$(LINUX_VERSION)
-       $(INSTALL_DATA) $(PKG_BUILD_DIR)/driver/wl$(2).o.patch $(1)/lib/modules/$(LINUX_VERSION)/
-endef
-
-define KernelPackage/brcm-wl/install
-       $(call install_template,$(1),)
-endef
-
-define KernelPackage/brcm-wl_mimo/install
-       $(call install_template,$(1),_mimo)
-endef
-
 MAKE_KMOD := $(MAKE) -C "$(LINUX_DIR)" \
                CROSS_COMPILE="$(TARGET_CROSS)" \
                ARCH="$(LINUX_KARCH)" \
@@ -149,7 +137,6 @@ MAKE_KMOD := $(MAKE) -C "$(LINUX_DIR)" \
 
 define Build/Prepare
        $(call Build/Prepare/Default)
-       mv $(PKG_BUILD_DIR)/kmod $(PKG_BUILD_DIR)/driver
        $(CP) src/* $(PKG_BUILD_DIR)/
 endef
 
@@ -164,10 +151,12 @@ define Build/Compile
                modules
        $(MAKE_KMOD) \
                SUBDIRS="$(PKG_BUILD_DIR)/wlcompat" \
+               $(if $(WL_WEXT),WL_WEXT=1) \
                modules
        $(MAKE_KMOD) \
                SUBDIRS="$(PKG_BUILD_DIR)/wlcompat" \
                DEBUG=1 \
+               $(if $(WL_WEXT),WL_WEXT=1) \
                modules
 
        # Compile wlc
@@ -175,10 +164,12 @@ define Build/Compile
                $(TARGET_CONFIGURE_OPTS) \
                CFLAGS="$(TARGET_CFLAGS)" \
                all
-       $(NO_TRACE_MAKE) -C compat-ldso -f build.mk PKG_INSTALL_DIR="$(PKG_BUILD_DIR)" BUILD_DIR="$(PKG_BUILD_DIR)"
-       $(SED) 's,ld-uClibc.so.0,ld-uClibc.brcm,' \
-               $(PKG_BUILD_DIR)/wl \
-               $(PKG_BUILD_DIR)/nas
+       $(TARGET_CC) -o $(PKG_BUILD_DIR)/nas $(PKG_BUILD_DIR)/nas_exe.o -L$(STAGING_DIR)/usr/lib -lnvram
+       $(TARGET_CC) -o $(PKG_BUILD_DIR)/wl $(PKG_BUILD_DIR)/wl_exe.o
+#      $(NO_TRACE_MAKE) -C compat-ldso -f build.mk PKG_INSTALL_DIR="$(PKG_BUILD_DIR)"
+#      $(SED) 's,ld-uClibc.so.0,ld-uClibc.brcm,' \
+#              $(PKG_BUILD_DIR)/wl \
+#              $(PKG_BUILD_DIR)/nas
 endef
 
 define Package/brcm-compat-ldso/install
@@ -198,8 +189,6 @@ define Package/wl/install
 endef
 
 define Package/nas/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(INSTALL_BIN) $(PKG_BUILD_DIR)/libbcmcrypto.so $(1)/usr/lib/
        $(INSTALL_DIR) $(1)/usr/sbin
        $(INSTALL_BIN) $(PKG_BUILD_DIR)/nas $(1)/usr/sbin/
        ln -sf nas $(1)/usr/sbin/nas4not
@@ -208,7 +197,7 @@ endef
 
 $(eval $(call KernelPackage,brcm-wl))
 $(eval $(call KernelPackage,brcm-wl-mimo))
-$(eval $(call BuildPackage,brcm-compat-ldso))
+#$(eval $(call BuildPackage,brcm-compat-ldso))
 $(eval $(call KernelPackage,wlcompat))
 $(eval $(call KernelPackage,wlcompat-debug))
 $(eval $(call BuildPackage,wlc))
index d9b2220e3ff33d3e04439e8a719a9a36e7cc3a19..2e6f2e8e422426316480d96e3be476f85977131d 100644 (file)
@@ -52,7 +52,7 @@ scan_broadcom() {
        case "$adhoc:$sta:$apmode" in
                1*)
                        ap=0
-                       mssid=0
+                       mssid=
                        infra=0
                ;;
                :1:1)
@@ -62,7 +62,7 @@ scan_broadcom() {
                :1:)
                        wet=1
                        ap=0
-                       mssid=0
+                       mssid=
                ;;
                ::)
                        radio=0
@@ -158,11 +158,11 @@ enable_broadcom() {
                                                        config_get k "$vif" key$knr
                                                        [ -n "$k" ] || continue
                                                        [ "$defkey" = "$knr" ] && def="=" || def=""
-                                                       append vif_pre_up "wepkey $def$knr,$k" "$N"
+                                                       append vif_do_up "wepkey $def$knr,$k" "$N"
                                                done
                                        ;;
                                        "");;
-                                       *) append vif_pre_up "wepkey =1,$key" "$N";;
+                                       *) append vif_do_up "wepkey =1,$key" "$N";;
                                esac
                        ;;
                        *psk*|*PSK*)
@@ -191,17 +191,15 @@ enable_broadcom() {
                                nasopts="-r \"\$${vif}_key\" -h $server -p $port"
                        ;;
                esac
-               append vif_post_up "wsec $wsec" "$N"
-               append vif_post_up "wpa_auth $auth" "$N"
-               append vif_post_up "wsec_restrict $wsec_r" "$N"
-               append vif_post_up "eap_restrict $eap_r" "$N"
+               append vif_do_up "wsec $wsec" "$N"
+               append vif_do_up "wpa_auth $auth" "$N"
+               append vif_do_up "wsec_restrict $wsec_r" "$N"
+               append vif_do_up "eap_restrict $eap_r" "$N"
                
                config_get ssid "$vif" ssid
                append vif_post_up "vlan_mode 0" "$N"
                append vif_post_up "ssid $ssid" "$N"
-               case "$mode" in
-                       sta|adhoc) append vif_do_up "ssid $ssid" "$N";;
-               esac
+               append vif_do_up "ssid $ssid" "$N"
                
                append vif_post_up "enabled 1" "$N"
                
@@ -221,8 +219,8 @@ enable_broadcom() {
                        [ "$mode" = "sta" ] && {
                                nas_mode="-S"
                                [ -z "$bridge" ] || {
-                                       append vif_pre_up "supplicant 1" "$N"
-                                       append vif_pre_up "passphrase $key" "$N"
+                                       append vif_post_up "supplicant 1" "$N"
+                                       append vif_post_up "passphrase $key" "$N"
                                        
                                        use_nas=0
                                }
@@ -236,7 +234,7 @@ enable_broadcom() {
 $ifdown
 
 ap $ap
-mssid $mssid
+${mssid:+mssid $mssid}
 apsta $apsta
 infra $infra
 ${wet:+wet 1}
index 0a16bdcec04306eb9b53f4dc8e386bd93b526070..c75795a554b78ea5f5a8eb8865b2971aebd70ec3 100644 (file)
@@ -23,9 +23,6 @@ obj-m         := $(O_TARGET)
 wl_mod$(MOD_NAME).o: wl_apsta$(MOD_NAME).o
        perl -ne 's,eth%d,wl%d\x00,g,print' < $< > $@
 
-wl$(MOD_NAME).o.patch: wl$(MOD_NAME).o
-       $(OBJDUMP) -d $< | perl patchtable.pl > $@
-
-modules: wl$(MOD_NAME).o.patch
+modules: wl$(MOD_NAME).o
 
 include $(TOPDIR)/Rules.make
index 7592f230ade72acc73f68211c47b2cf95fa354c5..88337d60c70880908b0e4af709477cf545f87705 100644 (file)
 /*
- * Misc useful OS-independent routines.
+ * Driver O/S-independent utility routines
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.c,v 1.1.1.12 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
 #include <bcmdefs.h>
 #include <stdarg.h>
+#include "bcmutils.h"
 #include <osl.h>
-#include "linux_osl.h"
-#include "pktq.h"
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <bcmnvram.h>
 #include <bcmendian.h>
 #include <bcmdevs.h>
-#include "bcmip.h"
-
-#define ETHER_TYPE_8021Q       0x8100
-#define ETHER_TYPE_IP          0x0800
-#define VLAN_PRI_SHIFT             13
-#define VLAN_PRI_MASK               7
-
-
-struct  ether_header {
-       uint8   ether_dhost[6];
-       uint8   ether_shost[6];
-       uint16  ether_type;
-} __attribute__((packed));
-
-
-struct ethervlan_header {
-       uint8   ether_dhost[6];
-       uint8   ether_shost[6];
-       uint16  vlan_type;              /* 0x8100 */
-       uint16  vlan_tag;               /* priority, cfi and vid */
-       uint16  ether_type;
-};
+#include "proto/ethernet.h"
+#include "proto/vlan.h"
+#include "proto/bcmip.h"
+#include "proto/bcmtcp.h"
+#include "proto/802.1d.h"
+
+#ifdef BCMPERFSTATS
+#include <bcmperf.h>
+#endif
+
+#if 0
+/* nvram vars cache */
+static char *nvram_vars = NULL;
+static int vars_len = -1;
+#endif
 
 /* copy a pkt buffer chain into a buffer */
 uint
-pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf)
+pktcopy (osl_t * osh, void *p, uint offset, int len, uchar * buf)
 {
-       uint n, ret = 0;
-
-       if (len < 0)
-               len = 4096;     /* "infinite" */
-
-       /* skip 'offset' bytes */
-       for (; p && offset; p = PKTNEXT(osh, p)) {
-               if (offset < (uint)PKTLEN(osh, p))
-                       break;
-               offset -= PKTLEN(osh, p);
-       }
-
-       if (!p)
-               return 0;
-
-       /* copy the data */
-       for (; p && len; p = PKTNEXT(osh, p)) {
-               n = MIN((uint)PKTLEN(osh, p) - offset, (uint)len);
-               bcopy(PKTDATA(osh, p) + offset, buf, n);
-               buf += n;
-               len -= n;
-               ret += n;
-               offset = 0;
-       }
-
-       return ret;
+  uint n, ret = 0;
+
+  if (len < 0)
+    len = 4096;                        /* "infinite" */
+
+  /* skip 'offset' bytes */
+  for (; p && offset; p = PKTNEXT (osh, p))
+    {
+      if (offset < (uint) PKTLEN (osh, p))
+       break;
+      offset -= PKTLEN (osh, p);
+    }
+
+  if (!p)
+    return 0;
+
+  /* copy the data */
+  for (; p && len; p = PKTNEXT (osh, p))
+    {
+      n = MIN ((uint) PKTLEN (osh, p) - offset, (uint) len);
+      bcopy (PKTDATA (osh, p) + offset, buf, n);
+      buf += n;
+      len -= n;
+      ret += n;
+      offset = 0;
+    }
+
+  return ret;
 }
 
 /* return total length of buffer chain */
 uint
-pkttotlen(osl_t *osh, void *p)
+pkttotlen (osl_t * osh, void *p)
 {
-       uint total;
+  uint total;
 
-       total = 0;
-       for (; p; p = PKTNEXT(osh, p))
-               total += PKTLEN(osh, p);
-       return (total);
+  total = 0;
+  for (; p; p = PKTNEXT (osh, p))
+    total += PKTLEN (osh, p);
+  return (total);
 }
 
 /* return the last buffer of chained pkt */
 void *
-pktlast(osl_t *osh, void *p)
+pktlast (osl_t * osh, void *p)
 {
-       for (; PKTNEXT(osh, p); p = PKTNEXT(osh, p))
-               ;
+  for (; PKTNEXT (osh, p); p = PKTNEXT (osh, p))
+    ;
 
-       return (p);
+  return (p);
 }
 
 
 /*
  * osl multiple-precedence packet queue
- * hi_prec is always >= the number of the highest non-empty queue
+ * hi_prec is always >= the number of the highest non-empty precedence
  */
 void *
-pktq_penq(struct pktq *pq, int prec, void *p)
+pktq_penq (struct pktq *pq, int prec, void *p)
 {
-       struct pktq_prec *q;
+  struct pktq_prec *q;
 
-       ASSERT(prec >= 0 && prec < pq->num_prec);
-       ASSERT(PKTLINK(p) == NULL);         /* queueing chains not allowed */
+  ASSERT (prec >= 0 && prec < pq->num_prec);
+  ASSERT (PKTLINK (p) == NULL);        /* queueing chains not allowed */
 
-       ASSERT(!pktq_full(pq));
-       ASSERT(!pktq_pfull(pq, prec));
+  ASSERT (!pktq_full (pq));
+  ASSERT (!pktq_pfull (pq, prec));
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if (q->head)
-               PKTSETLINK(q->tail, p);
-       else
-               q->head = p;
+  if (q->head)
+    PKTSETLINK (q->tail, p);
+  else
+    q->head = p;
 
-       q->tail = p;
-       q->len++;
+  q->tail = p;
+  q->len++;
 
-       pq->len++;
+  pq->len++;
 
-       if (pq->hi_prec < prec)
-               pq->hi_prec = (uint8)prec;
+  if (pq->hi_prec < prec)
+    pq->hi_prec = (uint8) prec;
 
-       return p;
+  return p;
 }
 
 void *
-pktq_penq_head(struct pktq *pq, int prec, void *p)
+pktq_penq_head (struct pktq *pq, int prec, void *p)
 {
-       struct pktq_prec *q;
+  struct pktq_prec *q;
 
-       ASSERT(prec >= 0 && prec < pq->num_prec);
-       ASSERT(PKTLINK(p) == NULL);         /* queueing chains not allowed */
+  ASSERT (prec >= 0 && prec < pq->num_prec);
+  ASSERT (PKTLINK (p) == NULL);        /* queueing chains not allowed */
 
-       ASSERT(!pktq_full(pq));
-       ASSERT(!pktq_pfull(pq, prec));
+  ASSERT (!pktq_full (pq));
+  ASSERT (!pktq_pfull (pq, prec));
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if (q->head == NULL)
-               q->tail = p;
+  if (q->head == NULL)
+    q->tail = p;
 
-       PKTSETLINK(p, q->head);
-       q->head = p;
-       q->len++;
+  PKTSETLINK (p, q->head);
+  q->head = p;
+  q->len++;
 
-       pq->len++;
+  pq->len++;
 
-       if (pq->hi_prec < prec)
-               pq->hi_prec = (uint8)prec;
+  if (pq->hi_prec < prec)
+    pq->hi_prec = (uint8) prec;
 
-       return p;
+  return p;
 }
 
 void *
-pktq_pdeq(struct pktq *pq, int prec)
+pktq_pdeq (struct pktq *pq, int prec)
 {
-       struct pktq_prec *q;
-       void *p;
+  struct pktq_prec *q;
+  void *p;
 
-       ASSERT(prec >= 0 && prec < pq->num_prec);
+  ASSERT (prec >= 0 && prec < pq->num_prec);
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if ((p = q->head) == NULL)
-               return NULL;
+  if ((p = q->head) == NULL)
+    return NULL;
 
-       if ((q->head = PKTLINK(p)) == NULL)
-               q->tail = NULL;
+  if ((q->head = PKTLINK (p)) == NULL)
+    q->tail = NULL;
 
-       q->len--;
+  q->len--;
 
-       pq->len--;
+  pq->len--;
 
-       PKTSETLINK(p, NULL);
+  PKTSETLINK (p, NULL);
 
-       return p;
+  return p;
 }
 
 void *
-pktq_pdeq_tail(struct pktq *pq, int prec)
+pktq_pdeq_tail (struct pktq *pq, int prec)
 {
-       struct pktq_prec *q;
-       void *p, *prev;
+  struct pktq_prec *q;
+  void *p, *prev;
 
-       ASSERT(prec >= 0 && prec < pq->num_prec);
+  ASSERT (prec >= 0 && prec < pq->num_prec);
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if ((p = q->head) == NULL)
-               return NULL;
+  if ((p = q->head) == NULL)
+    return NULL;
 
-       for (prev = NULL; p != q->tail; p = PKTLINK(p))
-               prev = p;
+  for (prev = NULL; p != q->tail; p = PKTLINK (p))
+    prev = p;
 
-       if (prev)
-               PKTSETLINK(prev, NULL);
-       else
-               q->head = NULL;
+  if (prev)
+    PKTSETLINK (prev, NULL);
+  else
+    q->head = NULL;
 
-       q->tail = prev;
-       q->len--;
+  q->tail = prev;
+  q->len--;
 
-       pq->len--;
+  pq->len--;
 
-       return p;
+  return p;
 }
 
 void
-pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir)
-{
-       struct pktq_prec *q;
-       void *p;
-
-       q = &pq->q[prec];
-       p = q->head;
-       while (p) {
-               q->head = PKTLINK(p);
-               PKTSETLINK(p, NULL);
-               PKTFREE(osh, p, dir);
-               q->len--;
-               pq->len--;
-               p = q->head;
-       }
-       ASSERT(q->len == 0);
-       q->tail = NULL;
+pktq_pflush (osl_t * osh, struct pktq *pq, int prec, bool dir)
+{
+  struct pktq_prec *q;
+  void *p;
+
+  q = &pq->q[prec];
+  p = q->head;
+  while (p)
+    {
+      q->head = PKTLINK (p);
+      PKTSETLINK (p, NULL);
+      PKTFREE (osh, p, dir);
+      q->len--;
+      pq->len--;
+      p = q->head;
+    }
+  ASSERT (q->len == 0);
+  q->tail = NULL;
 }
 
+#if 0
 bool
-pktq_pdel(struct pktq *pq, void *pktbuf, int prec)
+pktq_pdel (struct pktq *pq, void *pktbuf, int prec)
 {
-       struct pktq_prec *q;
-       void *p;
-
-       ASSERT(prec >= 0 && prec < pq->num_prec);
+  struct pktq_prec *q;
+  void *p;
 
-       if (!pktbuf)
-               return FALSE;
+  ASSERT (prec >= 0 && prec < pq->num_prec);
 
-       q = &pq->q[prec];
+  if (!pktbuf)
+    return FALSE;
 
-       if (q->head == pktbuf) {
-               if ((q->head = PKTLINK(pktbuf)) == NULL)
-                       q->tail = NULL;
-       } else {
-               for (p = q->head; p && PKTLINK(p) != pktbuf; p = PKTLINK(p))
-                       ;
-               if (p == NULL)
-                       return FALSE;
+  q = &pq->q[prec];
 
-               PKTSETLINK(p, PKTLINK(pktbuf));
-               if (q->tail == pktbuf)
-                       q->tail = p;
-       }
+  if (q->head == pktbuf)
+    {
+      if ((q->head = PKTLINK (pktbuf)) == NULL)
+       q->tail = NULL;
+    }
+  else
+    {
+      for (p = q->head; p && PKTLINK (p) != pktbuf; p = PKTLINK (p))
+       ;
+      if (p == NULL)
+       return FALSE;
+
+      PKTSETLINK (p, PKTLINK (pktbuf));
+      if (q->tail == pktbuf)
+       q->tail = p;
+    }
 
-       q->len--;
-       pq->len--;
-       PKTSETLINK(pktbuf, NULL);
-       return TRUE;
+  q->len--;
+  pq->len--;
+  PKTSETLINK (pktbuf, NULL);
+  return TRUE;
 }
+#endif
 
 void
-pktq_init(struct pktq *pq, int num_prec, int max_len)
+pktq_init (struct pktq *pq, int num_prec, int max_len)
 {
-       int prec;
+  int prec;
 
-       ASSERT(num_prec > 0 && num_prec <= PKTQ_MAX_PREC);
+  ASSERT (num_prec > 0 && num_prec <= PKTQ_MAX_PREC);
 
-       bzero(pq, sizeof(*pq));
+  /* pq is variable size; only zero out what's requested */
+  bzero (pq,
+        OFFSETOF (struct pktq, q) + (sizeof (struct pktq_prec) * num_prec));
 
-       pq->num_prec = (uint16)num_prec;
+  pq->num_prec = (uint16) num_prec;
 
-       pq->max = (uint16)max_len;
+  pq->max = (uint16) max_len;
 
-       for (prec = 0; prec < num_prec; prec++)
-               pq->q[prec].max = pq->max;
+  for (prec = 0; prec < num_prec; prec++)
+    pq->q[prec].max = pq->max;
+}
+
+int
+pktq_setmax (struct pktq *pq, int max_len)
+{
+  int prec;
+
+  if (!max_len)
+    return pq->max;
+
+  pq->max = (uint16) max_len;
+  for (prec = 0; prec < pq->num_prec; prec++)
+    pq->q[prec].max = pq->max;
+
+  return pq->max;
 }
 
 void *
-pktq_deq(struct pktq *pq, int *prec_out)
+pktq_deq (struct pktq *pq, int *prec_out)
 {
-       struct pktq_prec *q;
-       void *p;
-       int prec;
+  struct pktq_prec *q;
+  void *p;
+  int prec;
 
-       if (pq->len == 0)
-               return NULL;
+  if (pq->len == 0)
+    return NULL;
 
-       while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
-               pq->hi_prec--;
+  while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+    pq->hi_prec--;
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if ((p = q->head) == NULL)
-               return NULL;
+  if ((p = q->head) == NULL)
+    return NULL;
 
-       if ((q->head = PKTLINK(p)) == NULL)
-               q->tail = NULL;
+  if ((q->head = PKTLINK (p)) == NULL)
+    q->tail = NULL;
 
-       q->len--;
+  q->len--;
 
-       pq->len--;
+  pq->len--;
 
-       if (prec_out)
-               *prec_out = prec;
+  if (prec_out)
+    *prec_out = prec;
 
-       PKTSETLINK(p, NULL);
+  PKTSETLINK (p, NULL);
 
-       return p;
+  return p;
 }
 
 void *
-pktq_deq_tail(struct pktq *pq, int *prec_out)
+pktq_deq_tail (struct pktq *pq, int *prec_out)
 {
-       struct pktq_prec *q;
-       void *p, *prev;
-       int prec;
+  struct pktq_prec *q;
+  void *p, *prev;
+  int prec;
 
-       if (pq->len == 0)
-               return NULL;
+  if (pq->len == 0)
+    return NULL;
 
-       for (prec = 0; prec < pq->hi_prec; prec++)
-               if (pq->q[prec].head)
-                       break;
+  for (prec = 0; prec < pq->hi_prec; prec++)
+    if (pq->q[prec].head)
+      break;
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if ((p = q->head) == NULL)
-               return NULL;
+  if ((p = q->head) == NULL)
+    return NULL;
 
-       for (prev = NULL; p != q->tail; p = PKTLINK(p))
-               prev = p;
+  for (prev = NULL; p != q->tail; p = PKTLINK (p))
+    prev = p;
 
-       if (prev)
-               PKTSETLINK(prev, NULL);
-       else
-               q->head = NULL;
+  if (prev)
+    PKTSETLINK (prev, NULL);
+  else
+    q->head = NULL;
 
-       q->tail = prev;
-       q->len--;
+  q->tail = prev;
+  q->len--;
 
-       pq->len--;
+  pq->len--;
 
-       if (prec_out)
-               *prec_out = prec;
+  if (prec_out)
+    *prec_out = prec;
 
-       PKTSETLINK(p, NULL);
+  PKTSETLINK (p, NULL);
 
-       return p;
+  return p;
 }
 
+#if 0
 void *
-pktq_peek(struct pktq *pq, int *prec_out)
+pktq_peek (struct pktq *pq, int *prec_out)
 {
-       int prec;
+  int prec;
 
-       if (pq->len == 0)
-               return NULL;
+  if (pq->len == 0)
+    return NULL;
 
-       while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
-               pq->hi_prec--;
+  while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+    pq->hi_prec--;
 
-       if (prec_out)
-               *prec_out = prec;
+  if (prec_out)
+    *prec_out = prec;
 
-       return (pq->q[prec].head);
+  return (pq->q[prec].head);
 }
+#endif
 
 void *
-pktq_peek_tail(struct pktq *pq, int *prec_out)
+pktq_peek_tail (struct pktq *pq, int *prec_out)
 {
-       int prec;
+  int prec;
 
-       if (pq->len == 0)
-               return NULL;
+  if (pq->len == 0)
+    return NULL;
 
-       for (prec = 0; prec < pq->hi_prec; prec++)
-               if (pq->q[prec].head)
-                       break;
+  for (prec = 0; prec < pq->hi_prec; prec++)
+    if (pq->q[prec].head)
+      break;
 
-       if (prec_out)
-               *prec_out = prec;
+  if (prec_out)
+    *prec_out = prec;
 
-       return (pq->q[prec].tail);
+  return (pq->q[prec].tail);
 }
 
 void
-pktq_flush(osl_t *osh, struct pktq *pq, bool dir)
+pktq_flush (osl_t * osh, struct pktq *pq, bool dir)
 {
-       int prec;
-       for (prec = 0; prec < pq->num_prec; prec++)
-               pktq_pflush(osh, pq, prec, dir);
-       ASSERT(pq->len == 0);
+  int prec;
+  for (prec = 0; prec < pq->num_prec; prec++)
+    pktq_pflush (osh, pq, prec, dir);
+  ASSERT (pq->len == 0);
 }
 
 /* Return sum of lengths of a specific set of precedences */
 int
-pktq_mlen(struct pktq *pq, uint prec_bmp)
+pktq_mlen (struct pktq *pq, uint prec_bmp)
 {
-       int prec, len;
+  int prec, len;
 
-       len = 0;
+  len = 0;
 
-       for (prec = 0; prec <= pq->hi_prec; prec++)
-               if (prec_bmp & (1 << prec))
-                       len += pq->q[prec].len;
+  for (prec = 0; prec <= pq->hi_prec; prec++)
+    if (prec_bmp & (1 << prec))
+      len += pq->q[prec].len;
 
-       return len;
+  return len;
 }
 
 /* Priority dequeue from a specific set of precedences */
 void *
-pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out)
+pktq_mdeq (struct pktq *pq, uint prec_bmp, int *prec_out)
 {
-       struct pktq_prec *q;
-       void *p;
-       int prec;
+  struct pktq_prec *q;
+  void *p;
+  int prec;
 
-       if (pq->len == 0)
-               return NULL;
+  if (pq->len == 0)
+    return NULL;
 
-       while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
-               pq->hi_prec--;
+  while ((prec = pq->hi_prec) > 0 && pq->q[prec].head == NULL)
+    pq->hi_prec--;
 
-       while ((prec_bmp & (1 << prec)) == 0 || pq->q[prec].head == NULL)
-               if (prec-- == 0)
-                       return NULL;
+  while ((prec_bmp & (1 << prec)) == 0 || pq->q[prec].head == NULL)
+    if (prec-- == 0)
+      return NULL;
 
-       q = &pq->q[prec];
+  q = &pq->q[prec];
 
-       if ((p = q->head) == NULL)
-               return NULL;
+  if ((p = q->head) == NULL)
+    return NULL;
 
-       if ((q->head = PKTLINK(p)) == NULL)
-               q->tail = NULL;
+  if ((q->head = PKTLINK (p)) == NULL)
+    q->tail = NULL;
 
-       q->len--;
+  q->len--;
 
-       if (prec_out)
-               *prec_out = prec;
+  if (prec_out)
+    *prec_out = prec;
 
-       pq->len--;
+  pq->len--;
 
-       PKTSETLINK(p, NULL);
+  PKTSETLINK (p, NULL);
 
-       return p;
+  return p;
 }
 
-char*
-bcmstrcat(char *dest, const char *src)
+const unsigned char bcm_ctype[] = {
+  _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C,      /* 0-7 */
+  _BCM_C, _BCM_C | _BCM_S, _BCM_C | _BCM_S, _BCM_C | _BCM_S, _BCM_C | _BCM_S,
+    _BCM_C | _BCM_S, _BCM_C,
+  _BCM_C,                      /* 8-15 */
+  _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C,      /* 16-23 */
+  _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C, _BCM_C,      /* 24-31 */
+  _BCM_S | _BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,    /* 32-39 */
+  _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,      /* 40-47 */
+  _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D, _BCM_D,      /* 48-55 */
+  _BCM_D, _BCM_D, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,      /* 56-63 */
+  _BCM_P, _BCM_U | _BCM_X, _BCM_U | _BCM_X, _BCM_U | _BCM_X, _BCM_U | _BCM_X,
+    _BCM_U | _BCM_X,
+  _BCM_U | _BCM_X, _BCM_U,     /* 64-71 */
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,      /* 72-79 */
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,      /* 80-87 */
+  _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,      /* 88-95 */
+  _BCM_P, _BCM_L | _BCM_X, _BCM_L | _BCM_X, _BCM_L | _BCM_X, _BCM_L | _BCM_X,
+    _BCM_L | _BCM_X,
+  _BCM_L | _BCM_X, _BCM_L,     /* 96-103 */
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,      /* 104-111 */
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,      /* 112-119 */
+  _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_C,      /* 120-127 */
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      /* 128-143 */
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      /* 144-159 */
+  _BCM_S | _BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
+    _BCM_P, _BCM_P,
+  _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,      /* 160-175 */
+  _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
+    _BCM_P, _BCM_P,
+  _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,      /* 176-191 */
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,
+    _BCM_U, _BCM_U,
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,      /* 192-207 */
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_U,
+    _BCM_U, _BCM_U,
+  _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_L,      /* 208-223 */
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,
+    _BCM_L, _BCM_L,
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,      /* 224-239 */
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_L,
+    _BCM_L, _BCM_L,
+  _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L       /* 240-255 */
+};
+
+ulong BCMROMFN (bcm_strtoul) (char *cp, char **endp, uint base)
 {
-       strcpy(&dest[strlen(dest)], src);
-       return (dest);
+  ulong result, value;
+  bool minus;
+
+  minus = FALSE;
+
+  while (bcm_isspace (*cp))
+    cp++;
+
+  if (cp[0] == '+')
+    cp++;
+  else if (cp[0] == '-')
+    {
+      minus = TRUE;
+      cp++;
+    }
+
+  if (base == 0)
+    {
+      if (cp[0] == '0')
+       {
+         if ((cp[1] == 'x') || (cp[1] == 'X'))
+           {
+             base = 16;
+             cp = &cp[2];
+           }
+         else
+           {
+             base = 8;
+             cp = &cp[1];
+           }
+       }
+      else
+       base = 10;
+    }
+  else if (base == 16 && (cp[0] == '0') && ((cp[1] == 'x') || (cp[1] == 'X')))
+    {
+      cp = &cp[2];
+    }
+
+  result = 0;
+
+  while (bcm_isxdigit (*cp) &&
+        (value =
+         bcm_isdigit (*cp) ? *cp - '0' : bcm_toupper (*cp) - 'A' + 10) <
+        base)
+    {
+      result = result * base + value;
+      cp++;
+    }
+
+  if (minus)
+    result = (ulong) (result * -1);
+
+  if (endp)
+    *endp = (char *) cp;
+
+  return (result);
 }
 
-char*
-bcm_ether_ntoa(struct ether_addr *ea, char *buf)
+#if 0
+int BCMROMFN (bcm_atoi) (char *s)
 {
-       sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
-               ea->octet[0]&0xff, ea->octet[1]&0xff, ea->octet[2]&0xff,
-               ea->octet[3]&0xff, ea->octet[4]&0xff, ea->octet[5]&0xff);
-       return (buf);
+  return (int) bcm_strtoul (s, NULL, 10);
 }
 
+/* return pointer to location of substring 'needle' in 'haystack' */
+char *BCMROMFN (bcmstrstr) (char *haystack, char *needle)
+{
+  int len, nlen;
+  int i;
+
+  if ((haystack == NULL) || (needle == NULL))
+    return (haystack);
+
+  nlen = strlen (needle);
+  len = strlen (haystack) - nlen + 1;
+
+  for (i = 0; i < len; i++)
+    if (memcmp (needle, &haystack[i], nlen) == 0)
+      return (&haystack[i]);
+  return (NULL);
+}
+
+char *BCMROMFN (bcmstrcat) (char *dest, const char *src)
+{
+  strcpy (&dest[strlen (dest)], src);
+  return (dest);
+}
+
+char *BCMROMFN (bcmstrncat) (char *dest, const char *src, uint size)
+{
+  char *endp;
+  char *p;
+
+  p = dest + strlen (dest);
+  endp = p + size;
+
+  while (p != endp && (*p++ = *src++) != '\0')
+    ;
+
+  return (dest);
+}
+#endif
+
 /* parse a xx:xx:xx:xx:xx:xx format ethernet address */
+int BCMROMFN (bcm_ether_atoe) (char *p, struct ether_addr * ea)
+{
+  int i = 0;
+
+  for (;;)
+    {
+      ea->octet[i++] = (char) bcm_strtoul (p, &p, 16);
+      if (!*p++ || i == 6)
+       break;
+    }
+
+  return (i == 6);
+}
+
+#if defined(CONFIG_USBRNDIS_RETAIL) || defined(NDIS_MINIPORT_DRIVER)
+/* registry routine buffer preparation utility functions:
+ * parameter order is like strncpy, but returns count
+ * of bytes copied. Minimum bytes copied is null char(1)/wchar(2)
+ */
+ulong
+wchar2ascii (char *abuf, ushort * wbuf, ushort wbuflen, ulong abuflen)
+{
+  ulong copyct = 1;
+  ushort i;
+
+  if (abuflen == 0)
+    return 0;
+
+  /* wbuflen is in bytes */
+  wbuflen /= sizeof (ushort);
+
+  for (i = 0; i < wbuflen; ++i)
+    {
+      if (--abuflen == 0)
+       break;
+      *abuf++ = (char) *wbuf++;
+      ++copyct;
+    }
+  *abuf = '\0';
+
+  return copyct;
+}
+#endif /* CONFIG_USBRNDIS_RETAIL || NDIS_MINIPORT_DRIVER */
+
+#if 0
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+  snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+           ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+           ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+  return (buf);
+}
+
+char *
+bcm_ip_ntoa (struct ipv4_addr *ia, char *buf)
+{
+  snprintf (buf, 16, "%d.%d.%d.%d",
+           ia->addr[0], ia->addr[1], ia->addr[2], ia->addr[3]);
+  return (buf);
+}
+void
+bcm_mdelay (uint ms)
+{
+  uint i;
+
+  for (i = 0; i < ms; i++)
+    {
+      OSL_DELAY (1000);
+    }
+}
+#endif
+
+#if 0
+
+/*
+ * Search the name=value vars for a specific one and return its value.
+ * Returns NULL if not found.
+ */
+char *
+getvar (char *vars, const char *name)
+{
+#ifdef _MINOSL_
+  return NULL;
+#else
+  char *s;
+  int len;
+
+  if (!name)
+    return NULL;
+
+  len = strlen (name);
+  if (len == 0)
+    return NULL;
+
+  /* first look in vars[] */
+  for (s = vars; s && *s;)
+    {
+      /* CSTYLED */
+      if ((bcmp (s, name, len) == 0) && (s[len] == '='))
+       return (&s[len + 1]);
+
+      while (*s++)
+       ;
+    }
+
+  /* then query nvram */
+  return (nvram_get (name));
+#endif /* _MINOSL_ */
+}
+
+/*
+ * Search the vars for a specific one and return its value as
+ * an integer. Returns 0 if not found.
+ */
 int
-bcm_ether_atoe(char *p, struct ether_addr *ea)
+getintvar (char *vars, const char *name)
+{
+#ifdef _MINOSL_
+  return 0;
+#else
+  char *val;
+
+  if ((val = getvar (vars, name)) == NULL)
+    return (0);
+
+  return (bcm_strtoul (val, NULL, 0));
+#endif /* _MINOSL_ */
+}
+
+
+/* Search for token in comma separated token-string */
+static int
+findmatch (char *string, char *name)
 {
-       int i = 0;
+  uint len;
+  char *c;
+
+  len = strlen (name);
+  /* CSTYLED */
+  while ((c = strchr (string, ',')) != NULL)
+    {
+      if (len == (uint) (c - string) && !strncmp (string, name, len))
+       return 1;
+      string = c + 1;
+    }
+
+  return (!strcmp (string, name));
+}
 
-       for (;;) {
-               ea->octet[i++] = (char) bcm_strtoul(p, &p, 16);
-               if (!*p++ || i == 6)
-                       break;
+/* Return gpio pin number assigned to the named pin
+ *
+ * Variable should be in format:
+ *
+ *     gpio<N>=pin_name,pin_name
+ *
+ * This format allows multiple features to share the gpio with mutual
+ * understanding.
+ *
+ * 'def_pin' is returned if a specific gpio is not defined for the requested functionality
+ * and if def_pin is not used by others.
+ */
+uint
+getgpiopin (char *vars, char *pin_name, uint def_pin)
+{
+  char name[] = "gpioXXXX";
+  char *val;
+  uint pin;
+
+  /* Go thru all possibilities till a match in pin name */
+  for (pin = 0; pin < GPIO_NUMPINS; pin++)
+    {
+      snprintf (name, sizeof (name), "gpio%d", pin);
+      val = getvar (vars, name);
+      if (val && findmatch (val, pin_name))
+       return pin;
+    }
+
+  if (def_pin != GPIO_PIN_NOTDEFINED)
+    {
+      /* make sure the default pin is not used by someone else */
+      snprintf (name, sizeof (name), "gpio%d", def_pin);
+      if (getvar (vars, name))
+       {
+         def_pin = GPIO_PIN_NOTDEFINED;
        }
+    }
+
+  return def_pin;
+}
+#endif
+
+#ifdef BCMPERFSTATS
 
-       return (i == 6);
+#define        LOGSIZE 256             /* should be power of 2 to avoid div below */
+static struct
+{
+  uint cycles;
+  char *fmt;
+  uint a1;
+  uint a2;
+} logtab[LOGSIZE];
+
+/* last entry logged  */
+static uint logi = 0;
+/* next entry to read */
+static uint readi = 0;
+
+void
+bcm_perf_enable ()
+{
+  BCMPERF_ENABLE_INSTRCOUNT ();
+  BCMPERF_ENABLE_ICACHE_MISS ();
+  BCMPERF_ENABLE_ICACHE_HIT ();
 }
 
-/* Takes an Ethernet frame and sets out-of-bound PKTPRIO
- * Also updates the inplace vlan tag if requested
+void
+bcmlog (char *fmt, uint a1, uint a2)
+{
+  static uint last = 0;
+  uint cycles, i;
+  OSL_GETCYCLES (cycles);
+
+  i = logi;
+
+  logtab[i].cycles = cycles - last;
+  logtab[i].fmt = fmt;
+  logtab[i].a1 = a1;
+  logtab[i].a2 = a2;
+
+  logi = (i + 1) % LOGSIZE;
+  last = cycles;
+}
+
+
+void
+bcmstats (char *fmt)
+{
+  static uint last = 0;
+  static uint32 ic_miss = 0;
+  static uint32 instr_count = 0;
+  uint32 ic_miss_cur;
+  uint32 instr_count_cur;
+  uint cycles, i;
+
+  OSL_GETCYCLES (cycles);
+  BCMPERF_GETICACHE_MISS (ic_miss_cur);
+  BCMPERF_GETINSTRCOUNT (instr_count_cur);
+
+  i = logi;
+
+  logtab[i].cycles = cycles - last;
+  logtab[i].a1 = ic_miss_cur - ic_miss;
+  logtab[i].a2 = instr_count_cur - instr_count;
+  logtab[i].fmt = fmt;
+
+  logi = (i + 1) % LOGSIZE;
+
+  last = cycles;
+  instr_count = instr_count_cur;
+  ic_miss = ic_miss_cur;
+}
+
+
+void
+bcmdumplog (char *buf, int size)
+{
+  char *limit, *line;
+  int j = 0;
+  int num;
+
+  limit = buf + size - 80;
+  *buf = '\0';
+
+  num = logi - readi;
+
+  if (num < 0)
+    num += LOGSIZE;
+
+  /* print in chronological order */
+
+  for (j = 0; j < num && (buf < limit); readi = (readi + 1) % LOGSIZE, j++)
+    {
+      if (logtab[readi].fmt == NULL)
+       continue;
+      line = buf;
+      buf += sprintf (buf, "%d\t", logtab[readi].cycles);
+      buf +=
+       sprintf (buf, logtab[readi].fmt, logtab[readi].a1, logtab[readi].a2);
+      buf += sprintf (buf, "\n");
+    }
+
+}
+
+
+/*
+ * Dump one log entry at a time.
+ * Return index of next entry or -1 when no more .
  */
+int
+bcmdumplogent (char *buf, uint i)
+{
+  bool hit;
+
+  /*
+   * If buf is NULL, return the starting index,
+   * interpreting i as the indicator of last 'i' entries to dump.
+   */
+  if (buf == NULL)
+    {
+      i = ((i > 0) && (i < (LOGSIZE - 1))) ? i : (LOGSIZE - 1);
+      return ((logi - i) % LOGSIZE);
+    }
+
+  *buf = '\0';
+
+  ASSERT (i < LOGSIZE);
+
+  if (i == logi)
+    return (-1);
+
+  hit = FALSE;
+  for (; (i != logi) && !hit; i = (i + 1) % LOGSIZE)
+    {
+      if (logtab[i].fmt == NULL)
+       continue;
+      buf += sprintf (buf, "%d: %d\t", i, logtab[i].cycles);
+      buf += sprintf (buf, logtab[i].fmt, logtab[i].a1, logtab[i].a2);
+      buf += sprintf (buf, "\n");
+      hit = TRUE;
+    }
+
+  return (i);
+}
+
+#endif /* BCMPERFSTATS */
+
+#ifdef BCMDBG
+/* pretty hex print a pkt buffer chain */
 void
-pktsetprio(void *pkt, bool update_vtag)
+prpkt (const char *msg, osl_t * osh, void *p0)
 {
-       struct ether_header *eh;
-       struct ethervlan_header *evh;
-       uint8 *pktdata;
-       int priority = 0;
+  void *p;
 
-       pktdata = (uint8 *) PKTDATA(NULL, pkt);
-       ASSERT(ISALIGNED((uintptr)pktdata, sizeof(uint16)));
+  if (msg && (msg[0] != '\0'))
+    printf ("%s:\n", msg);
 
-       eh = (struct ether_header *) pktdata;
+  for (p = p0; p; p = PKTNEXT (osh, p))
+    prhex (NULL, PKTDATA (osh, p), PKTLEN (osh, p));
+}
+#endif /* BCMDBG */
 
-       if (ntoh16(eh->ether_type) == ETHER_TYPE_8021Q) {
-               uint16 vlan_tag;
-               int vlan_prio, dscp_prio = 0;
+/* Takes an Ethernet frame and sets out-of-bound PKTPRIO.
+ * Also updates the inplace vlan tag if requested.
+ * For debugging, it returns an indication of what it did.
+ */
+uint
+pktsetprio (void *pkt, bool update_vtag)
+{
+  struct ether_header *eh;
+  struct ethervlan_header *evh;
+  uint8 *pktdata;
+  int priority = 0;
+  int rc = 0;
 
-               evh = (struct ethervlan_header *)eh;
+  pktdata = (uint8 *) PKTDATA (NULL, pkt);
+  ASSERT (ISALIGNED ((uintptr) pktdata, sizeof (uint16)));
 
-               vlan_tag = ntoh16(evh->vlan_tag);
-               vlan_prio = (int) (vlan_tag >> VLAN_PRI_SHIFT) & VLAN_PRI_MASK;
+  eh = (struct ether_header *) pktdata;
 
-               if (ntoh16(evh->ether_type) == ETHER_TYPE_IP) {
-                       uint8 *ip_body = pktdata + sizeof(struct ethervlan_header);
-                       uint8 tos_tc = IP_TOS(ip_body);
-                       dscp_prio = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
-               }
+  if (ntoh16 (eh->ether_type) == ETHER_TYPE_8021Q)
+    {
+      uint16 vlan_tag;
+      int vlan_prio, dscp_prio = 0;
+
+      evh = (struct ethervlan_header *) eh;
 
-               /* DSCP priority gets precedence over 802.1P (vlan tag) */
-               priority = (dscp_prio != 0) ? dscp_prio : vlan_prio;
-
-               /* 
-                * If the DSCP priority is not the same as the VLAN priority,
-                * then overwrite the priority field in the vlan tag, with the
-                * DSCP priority value. This is required for Linux APs because
-                * the VLAN driver on Linux, overwrites the skb->priority field
-                * with the priority value in the vlan tag
-                */
-               if (update_vtag && (priority != vlan_prio)) {
-                       vlan_tag &= ~(VLAN_PRI_MASK << VLAN_PRI_SHIFT);
-                       vlan_tag |= (uint16)priority << VLAN_PRI_SHIFT;
-                       evh->vlan_tag = hton16(vlan_tag);
+      vlan_tag = ntoh16 (evh->vlan_tag);
+      vlan_prio = (int) (vlan_tag >> VLAN_PRI_SHIFT) & VLAN_PRI_MASK;
+
+      if (ntoh16 (evh->ether_type) == ETHER_TYPE_IP)
+       {
+         uint8 *ip_body = pktdata + sizeof (struct ethervlan_header);
+         uint8 tos_tc = IP_TOS (ip_body);
+         dscp_prio = (int) (tos_tc >> IPV4_TOS_PREC_SHIFT);
+         if ((IP_VER (ip_body) == IP_VER_4)
+             && (IPV4_PROT (ip_body) == IP_PROT_TCP))
+           {
+             int ip_len;
+             int src_port;
+             bool src_port_exc;
+             uint8 *tcp_hdr;
+
+             ip_len = IPV4_PAYLOAD_LEN (ip_body);
+             tcp_hdr = IPV4_NO_OPTIONS_PAYLOAD (ip_body);
+             src_port = TCP_SRC_PORT (tcp_hdr);
+             src_port_exc = (src_port == 10110) || (src_port == 10120) ||
+               (src_port == 10130) || (src_port == 10140);
+
+             if ((ip_len == 40) && src_port_exc && TCP_IS_ACK (tcp_hdr))
+               {
+                 dscp_prio = 7;
                }
-       } else if (ntoh16(eh->ether_type) == ETHER_TYPE_IP) {
-               uint8 *ip_body = pktdata + sizeof(struct ether_header);
-               uint8 tos_tc = IP_TOS(ip_body);
-               priority = (int)(tos_tc >> IPV4_TOS_PREC_SHIFT);
+           }
        }
 
-       ASSERT(priority >= 0 && priority <= MAXPRIO);
-       PKTSETPRIO(pkt, priority);
+      /* DSCP priority gets precedence over 802.1P (vlan tag) */
+      if (dscp_prio != 0)
+       {
+         priority = dscp_prio;
+         rc |= PKTPRIO_VDSCP;
+       }
+      else
+       {
+         priority = vlan_prio;
+         rc |= PKTPRIO_VLAN;
+       }
+      /* 
+       * If the DSCP priority is not the same as the VLAN priority,
+       * then overwrite the priority field in the vlan tag, with the
+       * DSCP priority value. This is required for Linux APs because
+       * the VLAN driver on Linux, overwrites the skb->priority field
+       * with the priority value in the vlan tag
+       */
+      if (update_vtag && (priority != vlan_prio))
+       {
+         vlan_tag &= ~(VLAN_PRI_MASK << VLAN_PRI_SHIFT);
+         vlan_tag |= (uint16) priority << VLAN_PRI_SHIFT;
+         evh->vlan_tag = hton16 (vlan_tag);
+         rc |= PKTPRIO_UPD;
+       }
+    }
+  else if (ntoh16 (eh->ether_type) == ETHER_TYPE_IP)
+    {
+      uint8 *ip_body = pktdata + sizeof (struct ether_header);
+      uint8 tos_tc = IP_TOS (ip_body);
+      priority = (int) (tos_tc >> IPV4_TOS_PREC_SHIFT);
+      rc |= PKTPRIO_DSCP;
+      if ((IP_VER (ip_body) == IP_VER_4)
+         && (IPV4_PROT (ip_body) == IP_PROT_TCP))
+       {
+         int ip_len;
+         int src_port;
+         bool src_port_exc;
+         uint8 *tcp_hdr;
+
+         ip_len = IPV4_PAYLOAD_LEN (ip_body);
+         tcp_hdr = IPV4_NO_OPTIONS_PAYLOAD (ip_body);
+         src_port = TCP_SRC_PORT (tcp_hdr);
+         src_port_exc = (src_port == 10110) || (src_port == 10120) ||
+           (src_port == 10130) || (src_port == 10140);
+
+         if ((ip_len == 40) && src_port_exc && TCP_IS_ACK (tcp_hdr))
+           {
+             priority = 7;
+           }
+       }
+    }
+
+  ASSERT (priority >= 0 && priority <= MAXPRIO);
+  PKTSETPRIO (pkt, priority);
+  return (rc | priority);
 }
 
 static char bcm_undeferrstr[BCME_STRLEN];
 
 static const char *bcmerrorstrtable[] = BCMERRSTRINGTABLE;
 
-/* Convert the Error codes into related Error strings  */
+/* Convert the error codes into related error strings  */
 const char *
-bcmerrorstr(int bcmerror)
+bcmerrorstr (int bcmerror)
+{
+  /* check if someone added a bcmerror code but forgot to add errorstring */
+  ASSERT (ABS (BCME_LAST) == (ARRAYSIZE (bcmerrorstrtable) - 1));
+
+  if (bcmerror > 0 || bcmerror < BCME_LAST)
+    {
+      snprintf (bcm_undeferrstr, BCME_STRLEN, "Undefined error %d", bcmerror);
+      return bcm_undeferrstr;
+    }
+
+  ASSERT (strlen (bcmerrorstrtable[-bcmerror]) < BCME_STRLEN);
+
+  return bcmerrorstrtable[-bcmerror];
+}
+
+#if 0
+static void BCMINITFN (bcm_nvram_refresh) (char *flash)
 {
-       int abs_bcmerror;
+  int i;
+  int ret = 0;
+
+  ASSERT (flash);
+
+  /* default "empty" vars cache */
+  bzero (flash, 2);
+
+  if ((ret = nvram_getall (flash, NVRAM_SPACE)))
+    return;
+
+  /* determine nvram length */
+  for (i = 0; i < NVRAM_SPACE; i++)
+    {
+      if (flash[i] == '\0' && flash[i + 1] == '\0')
+       break;
+    }
 
-       abs_bcmerror = ABS(bcmerror);
+  if (i > 1)
+    vars_len = i + 2;
+  else
+    vars_len = 0;
+}
+#endif
+
+#ifdef BCMDBG_PKT              /* pkt logging for debugging */
+/* Add a packet to the pktlist */
+void
+pktlist_add (pktlist_info_t * pktlist, void *pkt)
+{
+  uint i;
+  ASSERT (pktlist->count < PKTLIST_SIZE);
+
+  /* Verify the packet is not already part of the list */
+  for (i = 0; i < pktlist->count; i++)
+    {
+      if (pktlist->list[i] == pkt)
+       ASSERT (0);
+    }
+  pktlist->list[pktlist->count] = pkt;
+  pktlist->count++;
+  return;
+}
 
-       /* check if someone added a bcmerror code but forgot to add errorstring */
-       ASSERT(ABS(BCME_LAST) == (ARRAYSIZE(bcmerrorstrtable) - 1));
-       if ((bcmerror > 0) || (abs_bcmerror > ABS(BCME_LAST))) {
-               sprintf(bcm_undeferrstr, "undefined Error %d", bcmerror);
-               return bcm_undeferrstr;
+/* Remove a packet from the pktlist */
+void
+pktlist_remove (pktlist_info_t * pktlist, void *pkt)
+{
+  uint i;
+  uint num = pktlist->count;
+
+  /* find the index where pkt exists */
+  for (i = 0; i < num; i++)
+    {
+      /* check for the existence of pkt in the list */
+      if (pktlist->list[i] == pkt)
+       {
+         /* replace with the last element */
+         pktlist->list[i] = pktlist->list[num - 1];
+         pktlist->count--;
+         return;
        }
+    }
+  ASSERT (0);
+}
+
+/* Dump the pktlist (and the contents of each packet if 'data'
+ * is set). 'buf' should be large enough
+ */
+
+char *
+pktlist_dump (pktlist_info_t * pktlist, char *buf)
+{
+  char *obuf;
+  uint i;
+
+  obuf = buf;
+
+  buf += sprintf (buf, "Packet list dump:\n");
 
-       ASSERT((strlen((char*)bcmerrorstrtable[abs_bcmerror])) < BCME_STRLEN);
+  for (i = 0; i < (pktlist->count); i++)
+    {
+      buf += sprintf (buf, "0x%p\t", pktlist->list[i]);
 
-       return bcmerrorstrtable[abs_bcmerror];
+#ifdef NOTDEF                  /* Remove this ifdef to print pkttag and pktdata */
+      if (PKTTAG (pktlist->list[i]))
+       {
+         /* Print pkttag */
+         buf += sprintf (buf, "Pkttag(in hex): ");
+         buf +=
+           bcm_format_hex (buf, PKTTAG (pktlist->list[i]), OSL_PKTTAG_SZ);
+       }
+      buf += sprintf (buf, "Pktdata(in hex): ");
+      buf += bcm_format_hex (buf, PKTDATA (NULL, pktlist->list[i]),
+                            PKTLEN (NULL, pktlist->list[i]));
+#endif /* NOTDEF */
+
+      buf += sprintf (buf, "\n");
+    }
+  return obuf;
 }
+#endif /* BCMDBG_PKT */
 
+#if 0
+/* iovar table lookup */
+const bcm_iovar_t *
+bcm_iovar_lookup (const bcm_iovar_t * table, const char *name)
+{
+  const bcm_iovar_t *vi;
+  const char *lookup_name;
+
+  /* skip any ':' delimited option prefixes */
+  lookup_name = strrchr (name, ':');
+  if (lookup_name != NULL)
+    lookup_name++;
+  else
+    lookup_name = name;
+
+  ASSERT (table);
+
+  for (vi = table; vi->name; vi++)
+    {
+      if (!strcmp (vi->name, lookup_name))
+       return vi;
+    }
+  /* ran to end of table */
+
+  return NULL;                 /* var name not found */
+}
+#endif
 
 int
-bcm_iovar_lencheck(const bcm_iovar_t *vi, void *arg, int len, bool set)
-{
-       int bcmerror = 0;
-
-       /* length check on io buf */
-       switch (vi->type) {
-       case IOVT_BOOL:
-       case IOVT_INT8:
-       case IOVT_INT16:
-       case IOVT_INT32:
-       case IOVT_UINT8:
-       case IOVT_UINT16:
-       case IOVT_UINT32:
-               /* all integers are int32 sized args at the ioctl interface */
-               if (len < (int)sizeof(int)) {
-                       bcmerror = BCME_BUFTOOSHORT;
-               }
-               break;
+bcm_iovar_lencheck (const bcm_iovar_t * vi, void *arg, int len, bool set)
+{
+  int bcmerror = 0;
+
+  /* length check on io buf */
+  switch (vi->type)
+    {
+    case IOVT_BOOL:
+    case IOVT_INT8:
+    case IOVT_INT16:
+    case IOVT_INT32:
+    case IOVT_UINT8:
+    case IOVT_UINT16:
+    case IOVT_UINT32:
+      /* all integers are int32 sized args at the ioctl interface */
+      if (len < (int) sizeof (int))
+       {
+         bcmerror = BCME_BUFTOOSHORT;
+       }
+      break;
 
-       case IOVT_BUFFER:
-               /* buffer must meet minimum length requirement */
-               if (len < vi->minlen) {
-                       bcmerror = BCME_BUFTOOSHORT;
-               }
-               break;
-
-       case IOVT_VOID:
-               if (!set) {
-                       /* Cannot return nil... */
-                       bcmerror = BCME_UNSUPPORTED;
-               } else if (len) {
-                       /* Set is an action w/o parameters */
-                       bcmerror = BCME_BUFTOOLONG;
-               }
-               break;
+    case IOVT_BUFFER:
+      /* buffer must meet minimum length requirement */
+      if (len < vi->minlen)
+       {
+         bcmerror = BCME_BUFTOOSHORT;
+       }
+      break;
 
-       default:
-               /* unknown type for length check in iovar info */
-               ASSERT(0);
-               bcmerror = BCME_UNSUPPORTED;
+    case IOVT_VOID:
+      if (!set)
+       {
+         /* Cannot return nil... */
+         bcmerror = BCME_UNSUPPORTED;
+       }
+      else if (len)
+       {
+         /* Set is an action w/o parameters */
+         bcmerror = BCME_BUFTOOLONG;
        }
+      break;
+
+    default:
+      /* unknown type for length check in iovar info */
+      ASSERT (0);
+      bcmerror = BCME_UNSUPPORTED;
+    }
 
-       return bcmerror;
+  return bcmerror;
 }
 
 #define CRC_INNER_LOOP(n, c, x) \
-                   (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
-
-static uint32 crc32_table[256] = {
-    0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
-    0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
-    0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
-    0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
-    0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
-    0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
-    0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
-    0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
-    0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
-    0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
-    0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
-    0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
-    0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
-    0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
-    0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
-    0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
-    0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
-    0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
-    0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
-    0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
-    0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
-    0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
-    0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
-    0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
-    0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
-    0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
-    0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
-    0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
-    0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
-    0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
-    0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
-    0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
-    0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
-    0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
-    0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
-    0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
-    0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
-    0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
-    0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
-    0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
-    0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
-    0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
-    0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
-    0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
-    0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
-    0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
-    0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
-    0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
-    0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
-    0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
-    0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
-    0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
-    0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
-    0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
-    0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
-    0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
-    0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
-    0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
-    0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
-    0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
-    0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
-    0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
-    0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
-    0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+       (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
+
+#if 0
+/*******************************************************************************
+ * crc8
+ *
+ * Computes a crc8 over the input data using the polynomial:
+ *
+ *       x^8 + x^7 +x^6 + x^4 + x^2 + 1
+ *
+ * The caller provides the initial value (either CRC8_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data.  When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream.  When checking, a final
+ * return value of CRC8_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ *   Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ *     ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ *     ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+
+static const uint8 crc8_table[256] = {
+  0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
+  0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
+  0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
+  0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
+  0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
+  0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
+  0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
+  0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
+  0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
+  0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
+  0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
+  0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
+  0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
+  0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
+  0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
+  0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
+  0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
+  0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
+  0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
+  0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
+  0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
+  0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
+  0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
+  0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
+  0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
+  0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
+  0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
+  0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
+  0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
+  0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
+  0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
+  0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
 };
 
-uint32
-hndcrc32(
-    uint8 *pdata,  /* pointer to array of data to process */
-    uint   nbytes, /* number of input data bytes to process */
-    uint32 crc     /* either CRC32_INIT_VALUE or previous return value */
-)
+uint8 BCMROMFN (hndcrc8) (uint8 * pdata,       /* pointer to array of data to process */
+                         uint nbytes,  /* number of input data bytes to process */
+                         uint8 crc     /* either CRC8_INIT_VALUE or previous return value */
+  )
 {
-       uint8 *pend;
-#ifdef __mips__
-       uint8 tmp[4];
-       ulong *tptr = (ulong *)tmp;
-
-       /* in case the beginning of the buffer isn't aligned */
-       pend = (uint8 *)((uint)(pdata + 3) & 0xfffffffc);
-       nbytes -= (pend - pdata);
-       while (pdata < pend)
-               CRC_INNER_LOOP(32, crc, *pdata++);
-
-       /* handle bulk of data as 32-bit words */
-       pend = pdata + (nbytes & 0xfffffffc);
-       while (pdata < pend) {
-               *tptr = *(ulong *)pdata;
-               pdata += sizeof(ulong *);
-               CRC_INNER_LOOP(32, crc, tmp[0]);
-               CRC_INNER_LOOP(32, crc, tmp[1]);
-               CRC_INNER_LOOP(32, crc, tmp[2]);
-               CRC_INNER_LOOP(32, crc, tmp[3]);
-       }
+  /* hard code the crc loop instead of using CRC_INNER_LOOP macro
+   * to avoid the undefined and unnecessary (uint8 >> 8) operation.
+   */
+  while (nbytes-- > 0)
+    crc = crc8_table[(crc ^ *pdata++) & 0xff];
+
+  return crc;
+}
 
-       /* 1-3 bytes at end of buffer */
-       pend = pdata + (nbytes & 0x03);
-       while (pdata < pend)
-               CRC_INNER_LOOP(32, crc, *pdata++);
+/*******************************************************************************
+ * crc16
+ *
+ * Computes a crc16 over the input data using the polynomial:
+ *
+ *       x^16 + x^12 +x^5 + 1
+ *
+ * The caller provides the initial value (either CRC16_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data.  When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream.  When checking, a final
+ * return value of CRC16_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ *   Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ *     ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ *     ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+static const uint16 crc16_table[256] = {
+  0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF,
+  0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
+  0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E,
+  0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
+  0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD,
+  0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
+  0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C,
+  0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
+  0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB,
+  0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
+  0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A,
+  0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
+  0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9,
+  0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
+  0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738,
+  0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
+  0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7,
+  0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
+  0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036,
+  0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
+  0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5,
+  0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
+  0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134,
+  0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
+  0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3,
+  0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
+  0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232,
+  0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
+  0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1,
+  0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
+  0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330,
+  0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
+};
+
+uint16 BCMROMFN (hndcrc16) (uint8 * pdata,     /* pointer to array of data to process */
+                           uint nbytes,        /* number of input data bytes to process */
+                           uint16 crc  /* either CRC16_INIT_VALUE or previous return value */
+  )
+{
+  while (nbytes-- > 0)
+    CRC_INNER_LOOP (16, crc, *pdata++);
+  return crc;
+}
+#endif
+
+static const uint32 crc32_table[256] = {
+  0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
+  0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
+  0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
+  0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
+  0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
+  0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
+  0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
+  0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
+  0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
+  0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
+  0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
+  0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
+  0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
+  0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
+  0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
+  0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
+  0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
+  0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
+  0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
+  0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
+  0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
+  0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
+  0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
+  0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
+  0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
+  0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
+  0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
+  0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
+  0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
+  0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
+  0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
+  0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
+  0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
+  0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
+  0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
+  0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
+  0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
+  0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
+  0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
+  0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
+  0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
+  0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
+  0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
+  0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
+  0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
+  0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
+  0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
+  0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
+  0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
+  0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
+  0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
+  0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
+  0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
+  0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
+  0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
+  0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
+  0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
+  0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
+  0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
+  0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
+  0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
+  0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
+  0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
+  0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
+};
+
+uint32 BCMROMFN (hndcrc32) (uint8 * pdata,     /* pointer to array of data to process */
+                           uint nbytes,        /* number of input data bytes to process */
+                           uint32 crc  /* either CRC32_INIT_VALUE or previous return value */
+  )
+{
+  uint8 *pend;
+#ifdef __mips__
+  uint8 tmp[4];
+  ulong *tptr = (ulong *) tmp;
+
+  /* in case the beginning of the buffer isn't aligned */
+  pend = (uint8 *) ((uint) (pdata + 3) & 0xfffffffc);
+  nbytes -= (pend - pdata);
+  while (pdata < pend)
+    CRC_INNER_LOOP (32, crc, *pdata++);
+
+  /* handle bulk of data as 32-bit words */
+  pend = pdata + (nbytes & 0xfffffffc);
+  while (pdata < pend)
+    {
+      *tptr = *(ulong *) pdata;
+      pdata += sizeof (ulong *);
+      CRC_INNER_LOOP (32, crc, tmp[0]);
+      CRC_INNER_LOOP (32, crc, tmp[1]);
+      CRC_INNER_LOOP (32, crc, tmp[2]);
+      CRC_INNER_LOOP (32, crc, tmp[3]);
+    }
+
+  /* 1-3 bytes at end of buffer */
+  pend = pdata + (nbytes & 0x03);
+  while (pdata < pend)
+    CRC_INNER_LOOP (32, crc, *pdata++);
 #else
-       pend = pdata + nbytes;
-       while (pdata < pend)
-               CRC_INNER_LOOP(32, crc, *pdata++);
+  pend = pdata + nbytes;
+  while (pdata < pend)
+    CRC_INNER_LOOP (32, crc, *pdata++);
 #endif /* __mips__ */
 
-       return crc;
+  return crc;
 }
 
+#ifdef notdef
+#define CLEN   1499            /*  CRC Length */
+#define CBUFSIZ        (CLEN+4)
+#define CNBUFS         5       /* # of bufs */
+
+void
+testcrc32 (void)
+{
+  uint j, k, l;
+  uint8 *buf;
+  uint len[CNBUFS];
+  uint32 crcr;
+  uint32 crc32tv[CNBUFS] =
+    { 0xd2cb1faa, 0xd385c8fa, 0xf5b4f3f3, 0x55789e20, 0x00343110 };
+
+  ASSERT ((buf = MALLOC (CBUFSIZ * CNBUFS)) != NULL);
+
+  /* step through all possible alignments */
+  for (l = 0; l <= 4; l++)
+    {
+      for (j = 0; j < CNBUFS; j++)
+       {
+         len[j] = CLEN;
+         for (k = 0; k < len[j]; k++)
+           *(buf + j * CBUFSIZ + (k + l)) = (j + k) & 0xff;
+       }
+
+      for (j = 0; j < CNBUFS; j++)
+       {
+         crcr = crc32 (buf + j * CBUFSIZ + l, len[j], CRC32_INIT_VALUE);
+         ASSERT (crcr == crc32tv[j]);
+       }
+    }
+
+  MFREE (buf, CBUFSIZ * CNBUFS);
+  return;
+}
+#endif /* notdef */
 
 /*
  * Advance from the current 1-byte tag/1-byte length/variable-length value
@@ -732,27 +1592,26 @@ hndcrc32(
  * If the current or next TLV is invalid (does not fit in given buffer length),
  * NULL is returned.
  * *buflen is not modified if the TLV elt parameter is invalid, or is decremented
- * by the TLV paramter's length if it is valid.
+ * by the TLV parameter's length if it is valid.
  */
-bcm_tlv_t *
-bcm_next_tlv(bcm_tlv_t *elt, int *buflen)
+bcm_tlv_t *BCMROMFN (bcm_next_tlv) (bcm_tlv_t * elt, int *buflen)
 {
-       int len;
+  int len;
 
-       /* validate current elt */
-       if (!bcm_valid_tlv(elt, *buflen))
-               return NULL;
+  /* validate current elt */
+  if (!bcm_valid_tlv (elt, *buflen))
+    return NULL;
 
-       /* advance to next elt */
-       len = elt->len;
-       elt = (bcm_tlv_t*)(elt->data + len);
-       *buflen -= (2 + len);
+  /* advance to next elt */
+  len = elt->len;
+  elt = (bcm_tlv_t *) (elt->data + len);
+  *buflen -= (2 + len);
 
-       /* validate next elt */
-       if (!bcm_valid_tlv(elt, *buflen))
-               return NULL;
+  /* validate next elt */
+  if (!bcm_valid_tlv (elt, *buflen))
+    return NULL;
 
-       return elt;
+  return elt;
 }
 
 /*
@@ -760,114 +1619,417 @@ bcm_next_tlv(bcm_tlv_t *elt, int *buflen)
  * triples, returning a pointer to the substring whose first element
  * matches tag
  */
-bcm_tlv_t *
-bcm_parse_tlvs(void *buf, int buflen, uint key)
+bcm_tlv_t *BCMROMFN (bcm_parse_tlvs) (void *buf, int buflen, uint key)
 {
-       bcm_tlv_t *elt;
-       int totlen;
+  bcm_tlv_t *elt;
+  int totlen;
 
-       elt = (bcm_tlv_t*)buf;
-       totlen = buflen;
+  elt = (bcm_tlv_t *) buf;
+  totlen = buflen;
 
-       /* find tagged parameter */
-       while (totlen >= 2) {
-               int len = elt->len;
+  /* find tagged parameter */
+  while (totlen >= 2)
+    {
+      int len = elt->len;
 
-               /* validate remaining totlen */
-               if ((elt->id == key) && (totlen >= (len + 2)))
-                       return (elt);
+      /* validate remaining totlen */
+      if ((elt->id == key) && (totlen >= (len + 2)))
+       return (elt);
 
-               elt = (bcm_tlv_t*)((uint8*)elt + (len + 2));
-               totlen -= (len + 2);
-       }
+      elt = (bcm_tlv_t *) ((uint8 *) elt + (len + 2));
+      totlen -= (len + 2);
+    }
 
-       return NULL;
+  return NULL;
 }
 
+#if 0
 /*
  * Traverse a string of 1-byte tag/1-byte length/variable-length value
  * triples, returning a pointer to the substring whose first element
  * matches tag.  Stop parsing when we see an element whose ID is greater
  * than the target key.
  */
-bcm_tlv_t *
-bcm_parse_ordered_tlvs(void *buf, int buflen, uint key)
+bcm_tlv_t *BCMROMFN (bcm_parse_ordered_tlvs) (void *buf, int buflen, uint key)
 {
-       bcm_tlv_t *elt;
-       int totlen;
+  bcm_tlv_t *elt;
+  int totlen;
+
+  elt = (bcm_tlv_t *) buf;
+  totlen = buflen;
+
+  /* find tagged parameter */
+  while (totlen >= 2)
+    {
+      uint id = elt->id;
+      int len = elt->len;
+
+      /* Punt if we start seeing IDs > than target key */
+      if (id > key)
+       return (NULL);
+
+      /* validate remaining totlen */
+      if ((id == key) && (totlen >= (len + 2)))
+       return (elt);
+
+      elt = (bcm_tlv_t *) ((uint8 *) elt + (len + 2));
+      totlen -= (len + 2);
+    }
+  return NULL;
+}
 
-       elt = (bcm_tlv_t*)buf;
-       totlen = buflen;
+#ifdef BCMDBG
+int
+bcm_format_flags (const bcm_bit_desc_t * bd, uint32 flags, char *buf, int len)
+{
+  int i;
+  char *p = buf;
+  char hexstr[16];
+  int slen = 0;
+  uint32 bit;
+  const char *name;
+
+  if (len < 2 || !buf)
+    return 0;
+
+  buf[0] = '\0';
+  len -= 1;
+
+  for (i = 0; flags != 0; i++)
+    {
+      bit = bd[i].bit;
+      name = bd[i].name;
+      if (bit == 0 && flags)
+       {
+         /* print any unnamed bits */
+         sprintf (hexstr, "0x%X", flags);
+         name = hexstr;
+         flags = 0;            /* exit loop */
+       }
+      else if ((flags & bit) == 0)
+       continue;
+      slen += strlen (name);
+      if (len < slen)
+       break;
+      if (p != buf)
+       p += sprintf (p, " ");  /* btwn flag space */
+      strcat (p, name);
+      p += strlen (name);
+      flags &= ~bit;
+      len -= slen;
+      slen = 1;                        /* account for btwn flag space */
+    }
+
+  /* indicate the str was too short */
+  if (flags != 0)
+    {
+      if (len == 0)
+       p--;                    /* overwrite last char */
+      p += sprintf (p, ">");
+    }
+
+  return (int) (p - buf);
+}
 
-       /* find tagged parameter */
-       while (totlen >= 2) {
-               uint id = elt->id;
-               int len = elt->len;
+void
+deadbeef (void *p, uint len)
+{
+  static uint8 meat[] = { 0xde, 0xad, 0xbe, 0xef };
 
-               /* Punt if we start seeing IDs > than target key */
-               if (id > key)
-                       return (NULL);
+  while (len-- > 0)
+    {
+      *(uint8 *) p = meat[((uintptr) p) & 3];
+      p = (uint8 *) p + 1;
+    }
+}
 
-               /* validate remaining totlen */
-               if ((id == key) && (totlen >= (len + 2)))
-                       return (elt);
+/* pretty hex print a contiguous buffer */
+void
+prhex (const char *msg, uchar * buf, uint nbytes)
+{
+  char line[128], *p;
+  uint i;
 
-               elt = (bcm_tlv_t*)((uint8*)elt + (len + 2));
-               totlen -= (len + 2);
+  if (msg && (msg[0] != '\0'))
+    printf ("%s:\n", msg);
+
+  p = line;
+  for (i = 0; i < nbytes; i++)
+    {
+      if (i % 16 == 0)
+       {
+         p += sprintf (p, "  %04d: ", i);      /* line prefix */
        }
-       return NULL;
+      p += sprintf (p, "%02x ", buf[i]);
+      if (i % 16 == 15)
+       {
+         printf ("%s\n", line);        /* flush line */
+         p = line;
+       }
+    }
+
+  /* flush last partial line */
+  if (p != line)
+    printf ("%s\n", line);
+}
+
+/* print bytes formatted as hex to a string. return the resulting string length */
+int
+bcm_format_hex (char *str, const void *bytes, int len)
+{
+  int i;
+  char *p = str;
+  const uint8 *src = (const uint8 *) bytes;
+
+  for (i = 0; i < len; i++)
+    {
+      p += sprintf (p, "%02X", *src);
+      src++;
+    }
+  return (int) (p - str);
 }
 
+#endif /* BCMDBG */
 
-/* Initialization of bcmstrbuf structure */
+/* Produce a human-readable string for boardrev */
+char *
+bcm_brev_str (uint16 brev, char *buf)
+{
+  if (brev < 0x100)
+    snprintf (buf, 8, "%d.%d", (brev & 0xf0) >> 4, brev & 0xf);
+  else
+    snprintf (buf, 8, "%c%03x", ((brev & 0xf000) == 0x1000) ? 'P' : 'A',
+             brev & 0xfff);
+
+  return (buf);
+}
+
+#define BUFSIZE_TODUMP_ATONCE 512      /* Buffer size */
+
+/* dump large strings to console */
 void
-bcm_binit(struct bcmstrbuf *b, char *buf, uint size)
+printfbig (char *buf)
 {
-       b->origsize = b->size = size;
-       b->origbuf = b->buf = buf;
+  uint len, max_len;
+  char c;
+
+  len = strlen (buf);
+
+  max_len = BUFSIZE_TODUMP_ATONCE;
+
+  while (len > max_len)
+    {
+      c = buf[max_len];
+      buf[max_len] = '\0';
+      printf ("%s", buf);
+      buf[max_len] = c;
+
+      buf += max_len;
+      len -= max_len;
+    }
+  /* print the remaining string */
+  printf ("%s\n", buf);
+  return;
 }
 
-/* Buffer sprintf wrapper to guard against buffer overflow */
-int
-bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...)
+/* routine to dump fields in a fileddesc structure */
+uint
+bcmdumpfields (readreg_rtn read_rtn, void *arg0, void *arg1,
+              struct fielddesc * fielddesc_array, char *buf, uint32 bufsize)
+{
+  uint filled_len;
+  int len;
+  struct fielddesc *cur_ptr;
+
+  filled_len = 0;
+  cur_ptr = fielddesc_array;
+
+  while (bufsize > 1)
+    {
+      if (cur_ptr->nameandfmt == NULL)
+       break;
+      len = snprintf (buf, bufsize, cur_ptr->nameandfmt,
+                     read_rtn (arg0, arg1, cur_ptr->offset));
+      /* check for snprintf overflow or error */
+      if (len < 0 || (uint32) len >= bufsize)
+       len = bufsize - 1;
+      buf += len;
+      bufsize -= len;
+      filled_len += len;
+      cur_ptr++;
+    }
+  return filled_len;
+}
+#endif
+
+uint
+bcm_mkiovar (char *name, char *data, uint datalen, char *buf, uint buflen)
 {
-       va_list ap;
-       int r;
+  uint len;
 
-       va_start(ap, fmt);
-       r = vsnprintf(b->buf, b->size, fmt, ap);
+  len = strlen (name) + 1;
 
-       /* Non Ansi C99 compliant returns -1,
-        * Ansi compliant return r >= b->size,
-        * bcmstdlib returns 0, handle all
-        */
-       if ((r == -1) || (r >= (int)b->size) || (r == 0))
-       {
-               b->size = 0;
-       }
-       else
+  if ((len + datalen) > buflen)
+    return 0;
+
+  strncpy (buf, name, buflen);
+
+  /* append data onto the end of the name string */
+  memcpy (&buf[len], data, datalen);
+  len += datalen;
+
+  return len;
+}
+
+/* Quarter dBm units to mW
+ * Table starts at QDBM_OFFSET, so the first entry is mW for qdBm=153
+ * Table is offset so the last entry is largest mW value that fits in
+ * a uint16.
+ */
+
+#define QDBM_OFFSET 153                /* Offset for first entry */
+#define QDBM_TABLE_LEN 40      /* Table size */
+
+/* Smallest mW value that will round up to the first table entry, QDBM_OFFSET.
+ * Value is ( mW(QDBM_OFFSET - 1) + mW(QDBM_OFFSET) ) / 2
+ */
+#define QDBM_TABLE_LOW_BOUND 6493      /* Low bound */
+
+/* Largest mW value that will round down to the last table entry,
+ * QDBM_OFFSET + QDBM_TABLE_LEN-1.
+ * Value is ( mW(QDBM_OFFSET + QDBM_TABLE_LEN - 1) + mW(QDBM_OFFSET + QDBM_TABLE_LEN) ) / 2.
+ */
+#define QDBM_TABLE_HIGH_BOUND 64938    /* High bound */
+
+static const uint16 nqdBm_to_mW_map[QDBM_TABLE_LEN] = {
+/* qdBm:       +0      +1      +2      +3      +4      +5      +6      +7 */
+/* 153: */ 6683, 7079, 7499, 7943, 8414, 8913, 9441, 10000,
+/* 161: */ 10593, 11220, 11885, 12589, 13335, 14125, 14962, 15849,
+/* 169: */ 16788, 17783, 18836, 19953, 21135, 22387, 23714, 25119,
+/* 177: */ 26607, 28184, 29854, 31623, 33497, 35481, 37584, 39811,
+/* 185: */ 42170, 44668, 47315, 50119, 53088, 56234, 59566, 63096
+};
+
+uint16 BCMROMFN (bcm_qdbm_to_mw) (uint8 qdbm)
+{
+  uint factor = 1;
+  int idx = qdbm - QDBM_OFFSET;
+
+  if (idx > QDBM_TABLE_LEN)
+    {
+      /* clamp to max uint16 mW value */
+      return 0xFFFF;
+    }
+
+  /* scale the qdBm index up to the range of the table 0-40
+   * where an offset of 40 qdBm equals a factor of 10 mW.
+   */
+  while (idx < 0)
+    {
+      idx += 40;
+      factor *= 10;
+    }
+
+  /* return the mW value scaled down to the correct factor of 10,
+   * adding in factor/2 to get proper rounding.
+   */
+  return ((nqdBm_to_mW_map[idx] + factor / 2) / factor);
+}
+
+uint8 BCMROMFN (bcm_mw_to_qdbm) (uint16 mw)
+{
+  uint8 qdbm;
+  int offset;
+  uint mw_uint = mw;
+  uint boundary;
+
+  /* handle boundary case */
+  if (mw_uint <= 1)
+    return 0;
+
+  offset = QDBM_OFFSET;
+
+  /* move mw into the range of the table */
+  while (mw_uint < QDBM_TABLE_LOW_BOUND)
+    {
+      mw_uint *= 10;
+      offset -= 40;
+    }
+
+  for (qdbm = 0; qdbm < QDBM_TABLE_LEN - 1; qdbm++)
+    {
+      boundary = nqdBm_to_mW_map[qdbm] + (nqdBm_to_mW_map[qdbm + 1] -
+                                         nqdBm_to_mW_map[qdbm]) / 2;
+      if (mw_uint < boundary)
+       break;
+    }
+
+  qdbm += (uint8) offset;
+
+  return (qdbm);
+}
+
+
+uint BCMROMFN (bcm_bitcount) (uint8 * bitmap, uint length)
+{
+  uint bitcount = 0, i;
+  uint8 tmp;
+  for (i = 0; i < length; i++)
+    {
+      tmp = bitmap[i];
+      while (tmp)
        {
-               b->size -= r;
-               b->buf += r;
+         bitcount++;
+         tmp &= (tmp - 1);
        }
+    }
+  return bitcount;
+}
 
-       va_end(ap);
 
-       return r;
+/* Initialization of bcmstrbuf structure */
+void
+bcm_binit (struct bcmstrbuf *b, char *buf, uint size)
+{
+  b->origsize = b->size = size;
+  b->origbuf = b->buf = buf;
 }
 
-uint
-bcm_bitcount(uint8 *bitmap, uint length)
-{   
-       uint bitcount = 0, i;
-       uint8 tmp;
-       for (i = 0; i < length; i++) {
-               tmp = bitmap[i];
-               while (tmp) {
-                       bitcount++;
-                       tmp &= (tmp - 1);
-               }
-       }
-       return bitcount;
+/* Buffer sprintf wrapper to guard against buffer overflow */
+int
+bcm_bprintf (struct bcmstrbuf *b, const char *fmt, ...)
+{
+  va_list ap;
+  int r;
+
+  va_start (ap, fmt);
+  r = vsnprintf (b->buf, b->size, fmt, ap);
+
+  /* Non Ansi C99 compliant returns -1,
+   * Ansi compliant return r >= b->size,
+   * bcmstdlib returns 0, handle all
+   */
+  if ((r == -1) || (r >= (int) b->size) || (r == 0))
+    {
+      b->size = 0;
+    }
+  else
+    {
+      b->size -= r;
+      b->buf += r;
+    }
+
+  va_end (ap);
+
+  return r;
+}
+
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+       snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+               ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+               ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+       return (buf);
 }
 
diff --git a/package/broadcom-wl/src/driver/bcmutils.h b/package/broadcom-wl/src/driver/bcmutils.h
new file mode 100644 (file)
index 0000000..9dcf08b
--- /dev/null
@@ -0,0 +1,582 @@
+/*
+ * Misc useful os-independent macros and functions.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#ifndef        _bcmutils_h_
+#define        _bcmutils_h_
+#include "linux_osl.h"
+
+/* ctype replacement */
+#define _BCM_U 0x01    /* upper */
+#define _BCM_L 0x02    /* lower */
+#define _BCM_D 0x04    /* digit */
+#define _BCM_C 0x08    /* cntrl */
+#define _BCM_P 0x10    /* punct */
+#define _BCM_S 0x20    /* white space (space/lf/tab) */
+#define _BCM_X 0x40    /* hex digit */
+#define _BCM_SP        0x80    /* hard space (0x20) */
+
+extern const unsigned char bcm_ctype[];
+#define bcm_ismask(x)  (bcm_ctype[(int)(unsigned char)(x)])
+
+#define bcm_isalnum(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_isalpha(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L)) != 0)
+#define bcm_iscntrl(c) ((bcm_ismask(c)&(_BCM_C)) != 0)
+#define bcm_isdigit(c) ((bcm_ismask(c)&(_BCM_D)) != 0)
+#define bcm_isgraph(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D)) != 0)
+#define bcm_islower(c) ((bcm_ismask(c)&(_BCM_L)) != 0)
+#define bcm_isprint(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D|_BCM_SP)) != 0)
+#define bcm_ispunct(c) ((bcm_ismask(c)&(_BCM_P)) != 0)
+#define bcm_isspace(c) ((bcm_ismask(c)&(_BCM_S)) != 0)
+#define bcm_isupper(c) ((bcm_ismask(c)&(_BCM_U)) != 0)
+#define bcm_isxdigit(c)        ((bcm_ismask(c)&(_BCM_D|_BCM_X)) != 0)
+#define bcm_tolower(c) (bcm_isupper((c)) ? ((c) + 'a' - 'A') : (c))
+#define bcm_toupper(c) (bcm_islower((c)) ? ((c) + 'A' - 'a') : (c))
+
+/* Buffer structure for collecting string-formatted data 
+* using bcm_bprintf() API.
+* Use bcm_binit() to initialize before use
+*/
+
+struct bcmstrbuf {
+       char *buf;      /* pointer to current position in origbuf */
+       unsigned int size;      /* current (residual) size in bytes */
+       char *origbuf;  /* unmodified pointer to orignal buffer */
+       unsigned int origsize;  /* unmodified orignal buffer size in bytes */
+};
+
+/* ** driver-only section ** */
+#include <osl.h>
+
+#define GPIO_PIN_NOTDEFINED    0x20    /* Pin not defined */
+
+
+/* osl multi-precedence packet queue */
+#ifndef PKTQ_LEN_DEFAULT
+#define PKTQ_LEN_DEFAULT        128    /* Max 128 packets */
+#endif
+#ifndef PKTQ_MAX_PREC
+#define PKTQ_MAX_PREC           16     /* Maximum precedence levels */
+#endif
+
+typedef struct pktq_prec {
+       void *head;     /* first packet to dequeue */
+       void *tail;     /* last packet to dequeue */
+       uint16 len;     /* number of queued packets */
+       uint16 max;     /* maximum number of queued packets */
+} pktq_prec_t;
+
+
+/* multi-priority pkt queue */
+struct pktq {
+       uint16 num_prec;        /* number of precedences in use */
+       uint16 hi_prec;         /* rapid dequeue hint (>= highest non-empty prec) */
+       uint16 max;             /* total max packets */
+       uint16 len;             /* total number of packets */
+       /* q array must be last since # of elements can be either PKTQ_MAX_PREC or 1 */
+       struct pktq_prec q[PKTQ_MAX_PREC];
+};
+
+/* simple, non-priority pkt queue */
+struct spktq {
+       uint16 num_prec;        /* number of precedences in use (always 1) */
+       uint16 hi_prec;         /* rapid dequeue hint (>= highest non-empty prec) */
+       uint16 max;             /* total max packets */
+       uint16 len;             /* total number of packets */
+       /* q array must be last since # of elements can be either PKTQ_MAX_PREC or 1 */
+       struct pktq_prec q[1];
+};
+
+#define PKTQ_PREC_ITER(pq, prec)        for (prec = (pq)->num_prec - 1; prec >= 0; prec--)
+
+/* forward definition of ether_addr structure used by some function prototypes */
+struct ether_addr;
+
+/* operations on a specific precedence in packet queue */
+
+#define pktq_psetmax(pq, prec, _max)    ((pq)->q[prec].max = (_max))
+#define pktq_plen(pq, prec)             ((pq)->q[prec].len)
+#define pktq_pavail(pq, prec)           ((pq)->q[prec].max - (pq)->q[prec].len)
+#define pktq_pfull(pq, prec)            ((pq)->q[prec].len >= (pq)->q[prec].max)
+#define pktq_pempty(pq, prec)           ((pq)->q[prec].len == 0)
+
+#define pktq_ppeek(pq, prec)            ((pq)->q[prec].head)
+#define pktq_ppeek_tail(pq, prec)       ((pq)->q[prec].tail)
+
+extern void *pktq_penq(struct pktq *pq, int prec, void *p);
+extern void *pktq_penq_head(struct pktq *pq, int prec, void *p);
+extern void *pktq_pdeq(struct pktq *pq, int prec);
+extern void *pktq_pdeq_tail(struct pktq *pq, int prec);
+/* Empty the queue at particular precedence level */
+extern void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir);
+/* Remove a specified packet from its queue */
+extern bool pktq_pdel(struct pktq *pq, void *p, int prec);
+
+/* operations on a set of precedences in packet queue */
+
+extern int pktq_mlen(struct pktq *pq, uint prec_bmp);
+extern void *pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out);
+
+/* operations on packet queue as a whole */
+
+#define pktq_len(pq)                    ((int)(pq)->len)
+#define pktq_max(pq)                    ((int)(pq)->max)
+#define pktq_avail(pq)                  ((int)((pq)->max - (pq)->len))
+#define pktq_full(pq)                   ((pq)->len >= (pq)->max)
+#define pktq_empty(pq)                  ((pq)->len == 0)
+
+/* operations for single precedence queues */
+#define pktenq(pq, p)          pktq_penq(((struct pktq *)pq), 0, (p))
+#define pktenq_head(pq, p)     pktq_penq_head(((struct pktq *)pq), 0, (p))
+#define pktdeq(pq)             pktq_pdeq(((struct pktq *)pq), 0)
+#define pktdeq_tail(pq)                pktq_pdeq_tail(((struct pktq *)pq), 0)
+#define pktqinit(pq, len) pktq_init(((struct pktq *)pq), 1, len)
+
+extern void pktq_init(struct pktq *pq, int num_prec, int max_len);
+/* prec_out may be NULL if caller is not interested in return value */
+extern void *pktq_deq(struct pktq *pq, int *prec_out);
+extern void *pktq_deq_tail(struct pktq *pq, int *prec_out);
+extern void *pktq_peek(struct pktq *pq, int *prec_out);
+extern void *pktq_peek_tail(struct pktq *pq, int *prec_out);
+extern void pktq_flush(osl_t *osh, struct pktq *pq, bool dir); /* Empty the entire queue */
+extern int pktq_setmax(struct pktq *pq, int max_len);
+
+/* externs */
+/* packet */
+extern uint pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf);
+extern uint pkttotlen(osl_t *osh, void *p);
+extern void *pktlast(osl_t *osh, void *p);
+
+/* Get priority from a packet and pass it back in scb (or equiv) */
+extern uint pktsetprio(void *pkt, bool update_vtag);
+#define        PKTPRIO_VDSCP   0x100           /* DSCP prio found after VLAN tag */
+#define        PKTPRIO_VLAN    0x200           /* VLAN prio found */
+#define        PKTPRIO_UPD     0x400           /* DSCP used to update VLAN prio */
+#define        PKTPRIO_DSCP    0x800           /* DSCP prio found */
+
+/* string */
+extern int BCMROMFN(bcm_atoi)(char *s);
+extern ulong BCMROMFN(bcm_strtoul)(char *cp, char **endp, uint base);
+extern char *BCMROMFN(bcmstrstr)(char *haystack, char *needle);
+extern char *BCMROMFN(bcmstrcat)(char *dest, const char *src);
+extern char *BCMROMFN(bcmstrncat)(char *dest, const char *src, uint size);
+extern ulong wchar2ascii(char *abuf, ushort *wbuf, ushort wbuflen, ulong abuflen);
+/* ethernet address */
+extern char *bcm_ether_ntoa(struct ether_addr *ea, char *buf);
+extern int BCMROMFN(bcm_ether_atoe)(char *p, struct ether_addr *ea);
+
+/* ip address */
+struct ipv4_addr;
+extern char *bcm_ip_ntoa(struct ipv4_addr *ia, char *buf);
+
+/* delay */
+extern void bcm_mdelay(uint ms);
+/* variable access */
+extern char *getvar(char *vars, const char *name);
+extern int getintvar(char *vars, const char *name);
+extern uint getgpiopin(char *vars, char *pin_name, uint def_pin);
+#ifdef BCMDBG
+extern void prpkt(const char *msg, osl_t *osh, void *p0);
+#endif /* BCMDBG */
+#ifdef BCMPERFSTATS
+extern void bcm_perf_enable(void);
+extern void bcmstats(char *fmt);
+extern void bcmlog(char *fmt, uint a1, uint a2);
+extern void bcmdumplog(char *buf, int size);
+extern int bcmdumplogent(char *buf, uint idx);
+#else
+#define bcm_perf_enable()
+#define bcmstats(fmt)
+#define        bcmlog(fmt, a1, a2)
+#define        bcmdumplog(buf, size)   *buf = '\0'
+#define        bcmdumplogent(buf, idx) -1
+#endif /* BCMPERFSTATS */
+extern char *bcm_nvram_vars(uint *length);
+extern int bcm_nvram_cache(void *sbh);
+
+/* Support for sharing code across in-driver iovar implementations.
+ * The intent is that a driver use this structure to map iovar names
+ * to its (private) iovar identifiers, and the lookup function to
+ * find the entry.  Macros are provided to map ids and get/set actions
+ * into a single number space for a switch statement.
+ */
+
+/* iovar structure */
+typedef struct bcm_iovar {
+       const char *name;       /* name for lookup and display */
+       uint16 varid;           /* id for switch */
+       uint16 flags;           /* driver-specific flag bits */
+       uint16 type;            /* base type of argument */
+       uint16 minlen;          /* min length for buffer vars */
+} bcm_iovar_t;
+
+/* varid definitions are per-driver, may use these get/set bits */
+
+/* IOVar action bits for id mapping */
+#define IOV_GET 0 /* Get an iovar */
+#define IOV_SET 1 /* Set an iovar */
+
+/* Varid to actionid mapping */
+#define IOV_GVAL(id)           ((id)*2)
+#define IOV_SVAL(id)           (((id)*2)+IOV_SET)
+#define IOV_ISSET(actionid)    ((actionid & IOV_SET) == IOV_SET)
+
+/* flags are per-driver based on driver attributes */
+
+extern const bcm_iovar_t *bcm_iovar_lookup(const bcm_iovar_t *table, const char *name);
+extern int bcm_iovar_lencheck(const bcm_iovar_t *table, void *arg, int len, bool set);
+
+/* Base type definitions */
+#define IOVT_VOID      0       /* no value (implictly set only) */
+#define IOVT_BOOL      1       /* any value ok (zero/nonzero) */
+#define IOVT_INT8      2       /* integer values are range-checked */
+#define IOVT_UINT8     3       /* unsigned int 8 bits */
+#define IOVT_INT16     4       /* int 16 bits */
+#define IOVT_UINT16    5       /* unsigned int 16 bits */
+#define IOVT_INT32     6       /* int 32 bits */
+#define IOVT_UINT32    7       /* unsigned int 32 bits */
+#define IOVT_BUFFER    8       /* buffer is size-checked as per minlen */
+#define BCM_IOVT_VALID(type) (((unsigned int)(type)) <= IOVT_BUFFER)
+
+/* Initializer for IOV type strings */
+#define BCM_IOV_TYPE_INIT { \
+       "void", \
+       "bool", \
+       "int8", \
+       "uint8", \
+       "int16", \
+       "uint16", \
+       "int32", \
+       "uint32", \
+       "buffer", \
+       "" }
+
+#define BCM_IOVT_IS_INT(type) (\
+       (type == IOVT_BOOL) || \
+       (type == IOVT_INT8) || \
+       (type == IOVT_UINT8) || \
+       (type == IOVT_INT16) || \
+       (type == IOVT_UINT16) || \
+       (type == IOVT_INT32) || \
+       (type == IOVT_UINT32))
+
+/* ** driver/apps-shared section ** */
+
+#define BCME_STRLEN            64      /* Max string length for BCM errors */
+#define VALID_BCMERROR(e)  ((e <= 0) && (e >= BCME_LAST))
+
+
+/*
+ * error codes could be added but the defined ones shouldn't be changed/deleted
+ * these error codes are exposed to the user code
+ * when ever a new error code is added to this list
+ * please update errorstring table with the related error string and
+ * update osl files with os specific errorcode map
+*/
+
+#define BCME_OK                                0       /* Success */
+#define BCME_ERROR                     -1      /* Error generic */
+#define BCME_BADARG                    -2      /* Bad Argument */
+#define BCME_BADOPTION                 -3      /* Bad option */
+#define BCME_NOTUP                     -4      /* Not up */
+#define BCME_NOTDOWN                   -5      /* Not down */
+#define BCME_NOTAP                     -6      /* Not AP */
+#define BCME_NOTSTA                    -7      /* Not STA  */
+#define BCME_BADKEYIDX                 -8      /* BAD Key Index */
+#define BCME_RADIOOFF                  -9      /* Radio Off */
+#define BCME_NOTBANDLOCKED             -10     /* Not  band locked */
+#define BCME_NOCLK                     -11     /* No Clock */
+#define BCME_BADRATESET                        -12     /* BAD Rate valueset */
+#define BCME_BADBAND                   -13     /* BAD Band */
+#define BCME_BUFTOOSHORT               -14     /* Buffer too short */
+#define BCME_BUFTOOLONG                        -15     /* Buffer too long */
+#define BCME_BUSY                      -16     /* Busy */
+#define BCME_NOTASSOCIATED             -17     /* Not Associated */
+#define BCME_BADSSIDLEN                        -18     /* Bad SSID len */
+#define BCME_OUTOFRANGECHAN            -19     /* Out of Range Channel */
+#define BCME_BADCHAN                   -20     /* Bad Channel */
+#define BCME_BADADDR                   -21     /* Bad Address */
+#define BCME_NORESOURCE                        -22     /* Not Enough Resources */
+#define BCME_UNSUPPORTED               -23     /* Unsupported */
+#define BCME_BADLEN                    -24     /* Bad length */
+#define BCME_NOTREADY                  -25     /* Not Ready */
+#define BCME_EPERM                     -26     /* Not Permitted */
+#define BCME_NOMEM                     -27     /* No Memory */
+#define BCME_ASSOCIATED                        -28     /* Associated */
+#define BCME_RANGE                     -29     /* Not In Range */
+#define BCME_NOTFOUND                  -30     /* Not Found */
+#define BCME_WME_NOT_ENABLED           -31     /* WME Not Enabled */
+#define BCME_TSPEC_NOTFOUND            -32     /* TSPEC Not Found */
+#define BCME_ACM_NOTSUPPORTED          -33     /* ACM Not Supported */
+#define BCME_NOT_WME_ASSOCIATION       -34     /* Not WME Association */
+#define BCME_SDIO_ERROR                        -35     /* SDIO Bus Error */
+#define BCME_DONGLE_DOWN               -36     /* Dongle Not Accessible */
+#define BCME_VERSION                   -37 /* Incorrect version */
+#define BCME_LAST                      BCME_VERSION
+
+/* These are collection of BCME Error strings */
+#define BCMERRSTRINGTABLE {            \
+       "OK",                           \
+       "Undefined error",              \
+       "Bad Argument",                 \
+       "Bad Option",                   \
+       "Not up",                       \
+       "Not down",                     \
+       "Not AP",                       \
+       "Not STA",                      \
+       "Bad Key Index",                \
+       "Radio Off",                    \
+       "Not band locked",              \
+       "No clock",                     \
+       "Bad Rate valueset",            \
+       "Bad Band",                     \
+       "Buffer too short",             \
+       "Buffer too long",              \
+       "Busy",                         \
+       "Not Associated",               \
+       "Bad SSID len",                 \
+       "Out of Range Channel",         \
+       "Bad Channel",                  \
+       "Bad Address",                  \
+       "Not Enough Resources",         \
+       "Unsupported",                  \
+       "Bad length",                   \
+       "Not Ready",                    \
+       "Not Permitted",                \
+       "No Memory",                    \
+       "Associated",                   \
+       "Not In Range",                 \
+       "Not Found",                    \
+       "WME Not Enabled",              \
+       "TSPEC Not Found",              \
+       "ACM Not Supported",            \
+       "Not WME Association",          \
+       "SDIO Bus Error",               \
+       "Dongle Not Accessible",        \
+       "Incorrect version"     \
+}
+
+#ifndef ABS
+#define        ABS(a)                  (((a) < 0)?-(a):(a))
+#endif /* ABS */
+
+#ifndef MIN
+#define        MIN(a, b)               (((a) < (b))?(a):(b))
+#endif /* MIN */
+
+#ifndef MAX
+#define        MAX(a, b)               (((a) > (b))?(a):(b))
+#endif /* MAX */
+
+#define CEIL(x, y)             (((x) + ((y)-1)) / (y))
+#define        ROUNDUP(x, y)           ((((x)+((y)-1))/(y))*(y))
+#define        ISALIGNED(a, x)         (((a) & ((x)-1)) == 0)
+#define        ISPOWEROF2(x)           ((((x)-1)&(x)) == 0)
+#define VALID_MASK(mask)       !((mask) & ((mask) + 1))
+#ifndef OFFSETOF
+#define        OFFSETOF(type, member)  ((uint)(uintptr)&((type *)0)->member)
+#endif /* OFFSETOF */
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(a)           (sizeof(a)/sizeof(a[0]))
+#endif
+
+/* bit map related macros */
+#ifndef setbit
+#ifndef NBBY               /* the BSD family defines NBBY */
+#define        NBBY    8       /* 8 bits per byte */
+#endif /* #ifndef NBBY */
+#define        setbit(a, i)    (((uint8 *)a)[(i)/NBBY] |= 1<<((i)%NBBY))
+#define        clrbit(a, i)    (((uint8 *)a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
+#define        isset(a, i)     (((const uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY)))
+#define        isclr(a, i)     ((((const uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
+#endif /* setbit */
+
+#define        NBITS(type)     (sizeof(type) * 8)
+#define NBITVAL(nbits) (1 << (nbits))
+#define MAXBITVAL(nbits)       ((1 << (nbits)) - 1)
+#define        NBITMASK(nbits) MAXBITVAL(nbits)
+#define MAXNBVAL(nbyte)        MAXBITVAL((nbyte) * 8)
+
+/* basic mux operation - can be optimized on several architectures */
+#define MUX(pred, true, false) ((pred) ? (true) : (false))
+
+/* modulo inc/dec - assumes x E [0, bound - 1] */
+#define MODDEC(x, bound) MUX((x) == 0, (bound) - 1, (x) - 1)
+#define MODINC(x, bound) MUX((x) == (bound) - 1, 0, (x) + 1)
+
+/* modulo inc/dec, bound = 2^k */
+#define MODDEC_POW2(x, bound) (((x) - 1) & ((bound) - 1))
+#define MODINC_POW2(x, bound) (((x) + 1) & ((bound) - 1))
+
+/* modulo add/sub - assumes x, y E [0, bound - 1] */
+#define MODADD(x, y, bound) \
+    MUX((x) + (y) >= (bound), (x) + (y) - (bound), (x) + (y))
+#define MODSUB(x, y, bound) \
+    MUX(((int)(x)) - ((int)(y)) < 0, (x) - (y) + (bound), (x) - (y))
+
+/* module add/sub, bound = 2^k */
+#define MODADD_POW2(x, y, bound) (((x) + (y)) & ((bound) - 1))
+#define MODSUB_POW2(x, y, bound) (((x) - (y)) & ((bound) - 1))
+
+/* crc defines */
+#define CRC8_INIT_VALUE  0xff          /* Initial CRC8 checksum value */
+#define CRC8_GOOD_VALUE  0x9f          /* Good final CRC8 checksum value */
+#define CRC16_INIT_VALUE 0xffff                /* Initial CRC16 checksum value */
+#define CRC16_GOOD_VALUE 0xf0b8                /* Good final CRC16 checksum value */
+#define CRC32_INIT_VALUE 0xffffffff    /* Initial CRC32 checksum value */
+#define CRC32_GOOD_VALUE 0xdebb20e3    /* Good final CRC32 checksum value */
+
+/* bcm_format_flags() bit description structure */
+typedef struct bcm_bit_desc {
+       uint32  bit;
+       const char* name;
+} bcm_bit_desc_t;
+
+/* tag_ID/length/value_buffer tuple */
+typedef struct bcm_tlv {
+       uint8   id;
+       uint8   len;
+       uint8   data[1];
+} bcm_tlv_t;
+
+/* Check that bcm_tlv_t fits into the given buflen */
+#define bcm_valid_tlv(elt, buflen) ((buflen) >= 2 && (int)(buflen) >= (int)(2 + (elt)->len))
+
+/* buffer length for ethernet address from bcm_ether_ntoa() */
+#define ETHER_ADDR_STR_LEN     18      /* 18-bytes of Ethernet address buffer length */
+
+/* unaligned load and store macros */
+#ifdef IL_BIGENDIAN
+static INLINE uint32
+load32_ua(uint8 *a)
+{
+       return ((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]);
+}
+
+static INLINE void
+store32_ua(uint8 *a, uint32 v)
+{
+       a[0] = (v >> 24) & 0xff;
+       a[1] = (v >> 16) & 0xff;
+       a[2] = (v >> 8) & 0xff;
+       a[3] = v & 0xff;
+}
+
+static INLINE uint16
+load16_ua(uint8 *a)
+{
+       return ((a[0] << 8) | a[1]);
+}
+
+static INLINE void
+store16_ua(uint8 *a, uint16 v)
+{
+       a[0] = (v >> 8) & 0xff;
+       a[1] = v & 0xff;
+}
+
+#else /* IL_BIGENDIAN */
+
+static INLINE uint32
+load32_ua(uint8 *a)
+{
+       return ((a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0]);
+}
+
+static INLINE void
+store32_ua(uint8 *a, uint32 v)
+{
+       a[3] = (v >> 24) & 0xff;
+       a[2] = (v >> 16) & 0xff;
+       a[1] = (v >> 8) & 0xff;
+       a[0] = v & 0xff;
+}
+
+static INLINE uint16
+load16_ua(uint8 *a)
+{
+       return ((a[1] << 8) | a[0]);
+}
+
+static INLINE void
+store16_ua(uint8 *a, uint16 v)
+{
+       a[1] = (v >> 8) & 0xff;
+       a[0] = v & 0xff;
+}
+
+#endif /* IL_BIGENDIAN */
+
+/* externs */
+/* crc */
+extern uint8 BCMROMFN(hndcrc8)(uint8 *p, uint nbytes, uint8 crc);
+extern uint16 BCMROMFN(hndcrc16)(uint8 *p, uint nbytes, uint16 crc);
+extern uint32 BCMROMFN(hndcrc32)(uint8 *p, uint nbytes, uint32 crc);
+/* format/print */
+#ifdef BCMDBG
+extern int bcm_format_flags(const bcm_bit_desc_t *bd, uint32 flags, char* buf, int len);
+extern int bcm_format_hex(char *str, const void *bytes, int len);
+extern void deadbeef(void *p, uint len);
+extern void prhex(const char *msg, uchar *buf, uint len);
+#endif /* BCMDBG */
+extern char *bcm_brev_str(uint16 brev, char *buf);
+extern void printfbig(char *buf);
+
+/* IE parsing */
+extern bcm_tlv_t *BCMROMFN(bcm_next_tlv)(bcm_tlv_t *elt, int *buflen);
+extern bcm_tlv_t *BCMROMFN(bcm_parse_tlvs)(void *buf, int buflen, uint key);
+extern bcm_tlv_t *BCMROMFN(bcm_parse_ordered_tlvs)(void *buf, int buflen, uint key);
+
+/* bcmerror */
+extern const char *bcmerrorstr(int bcmerror);
+
+/* multi-bool data type: set of bools, mbool is true if any is set */
+typedef uint32 mbool;
+#define mboolset(mb, bit)              ((mb) |= (bit))         /* set one bool */
+#define mboolclr(mb, bit)              ((mb) &= ~(bit))        /* clear one bool */
+#define mboolisset(mb, bit)            (((mb) & (bit)) != 0)   /* TRUE if one bool is set */
+#define        mboolmaskset(mb, mask, val)     ((mb) = (((mb) & ~(mask)) | (val)))
+
+/* power conversion */
+extern uint16 BCMROMFN(bcm_qdbm_to_mw)(uint8 qdbm);
+extern uint8 BCMROMFN(bcm_mw_to_qdbm)(uint16 mw);
+
+/* generic datastruct to help dump routines */
+struct fielddesc {
+       const char *nameandfmt;
+       uint32  offset;
+       uint32  len;
+};
+
+extern void bcm_binit(struct bcmstrbuf *b, char *buf, uint size);
+extern int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...);
+
+typedef  uint32 (*readreg_rtn)(void *arg0, void *arg1, uint32 offset);
+extern uint bcmdumpfields(readreg_rtn func_ptr, void *arg0, void *arg1, struct fielddesc *str,
+                          char *buf, uint32 bufsize);
+
+extern uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint len);
+extern uint BCMROMFN(bcm_bitcount)(uint8 *bitmap, uint bytelength);
+
+#ifdef BCMDBG_PKT      /* pkt logging for debugging */
+#define PKTLIST_SIZE 1000
+typedef struct {
+       void *list[PKTLIST_SIZE]; /* List of pointers to packets */
+       uint count; /* Total count of the packets */
+} pktlist_info_t;
+
+extern void pktlist_add(pktlist_info_t *pktlist, void *p);
+extern void pktlist_remove(pktlist_info_t *pktlist, void *p);
+extern char* pktlist_dump(pktlist_info_t *pktlist, char *buf);
+#endif  /* BCMDBG_PKT */
+
+#endif /* _bcmutils_h_ */
index 1b79dff4c2238607e6d6a5f355c9ac529e6d884e..c6f6a13ed781447a3e1f30f822e9c948996b9ada 100644 (file)
@@ -2,7 +2,7 @@
  * Generic Broadcom Home Networking Division (HND) DMA module.
  * This supports the following chips: BCM42xx, 44xx, 47xx .
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -10,7 +10,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: hnddma.c,v 1.11 2006/04/08 07:12:42 honor Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
@@ -19,7 +19,7 @@
 #include "linux_osl.h"
 #include <bcmendian.h>
 #include <sbconfig.h>
-#include <bcmutils.h>
+#include "bcmutils.h"
 #include <bcmdevs.h>
 #include <sbutils.h>
 
 #include "hnddma.h"
 
 /* debug/trace */
+#ifdef BCMDBG
+#define        DMA_ERROR(args) if (!(*di->msg_level & 1)); else printf args
+#define        DMA_TRACE(args) if (!(*di->msg_level & 2)); else printf args
+#else
 #define        DMA_ERROR(args)
 #define        DMA_TRACE(args)
+#endif
 
 /* default dma message level (if input msg_level pointer is null in dma_attach()) */
-static uint dma_msg_level =
-       0;
+static uint dma_msg_level = 0;
 
-#define        MAXNAMEL        8               /* 8 char names */
+#define        MAXNAMEL        8       /* 8 char names */
 
 #define        DI_INFO(dmah)   (dma_info_t *)dmah
+typedef struct osl_dmainfo osldma_t;
 
 /* dma engine software state */
-typedef struct dma_info {
-       struct hnddma_pub hnddma;       /* exported structure, don't use hnddma_t,
-                                        * which could be const
-                                        */
-       uint            *msg_level;     /* message level pointer */
-       char            name[MAXNAMEL]; /* callers name for diag msgs */
-
-       void            *osh;           /* os handle */
-       sb_t            *sbh;           /* sb handle */
-
-       bool            dma64;          /* dma64 enabled */
-       bool            addrext;        /* this dma engine supports DmaExtendedAddrChanges */
-
-       dma32regs_t     *d32txregs;     /* 32 bits dma tx engine registers */
-       dma32regs_t     *d32rxregs;     /* 32 bits dma rx engine registers */
-       dma64regs_t     *d64txregs;     /* 64 bits dma tx engine registers */
-       dma64regs_t     *d64rxregs;     /* 64 bits dma rx engine registers */
-
-       uint32          dma64align;     /* either 8k or 4k depends on number of dd */
-       dma32dd_t       *txd32;         /* pointer to dma32 tx descriptor ring */
-       dma64dd_t       *txd64;         /* pointer to dma64 tx descriptor ring */
-       uint            ntxd;           /* # tx descriptors tunable */
-       uint            txin;           /* index of next descriptor to reclaim */
-       uint            txout;          /* index of next descriptor to post */
-       void            **txp;          /* pointer to parallel array of pointers to packets */
-       osldma_t        *tx_dmah;       /* DMA TX descriptor ring handle */
-       osldma_t        **txp_dmah;     /* DMA TX packet data handle */
-       ulong           txdpa;          /* physical address of descriptor ring */
-       uint            txdalign;       /* #bytes added to alloc'd mem to align txd */
-       uint            txdalloc;       /* #bytes allocated for the ring */
-
-       dma32dd_t       *rxd32;         /* pointer to dma32 rx descriptor ring */
-       dma64dd_t       *rxd64;         /* pointer to dma64 rx descriptor ring */
-       uint            nrxd;           /* # rx descriptors tunable */
-       uint            rxin;           /* index of next descriptor to reclaim */
-       uint            rxout;          /* index of next descriptor to post */
-       void            **rxp;          /* pointer to parallel array of pointers to packets */
-       osldma_t        *rx_dmah;       /* DMA RX descriptor ring handle */
-       osldma_t        **rxp_dmah;     /* DMA RX packet data handle */
-       ulong           rxdpa;          /* physical address of descriptor ring */
-       uint            rxdalign;       /* #bytes added to alloc'd mem to align rxd */
-       uint            rxdalloc;       /* #bytes allocated for the ring */
-
-       /* tunables */
-       uint            rxbufsize;      /* rx buffer size in bytes,
-                                          not including the extra headroom
-                                       */
-       uint            nrxpost;        /* # rx buffers to keep posted */
-       uint            rxoffset;       /* rxcontrol offset */
-       uint            ddoffsetlow;    /* add to get dma address of descriptor ring, low 32 bits */
-       uint            ddoffsethigh;   /*   high 32 bits */
-       uint            dataoffsetlow;  /* add to get dma address of data buffer, low 32 bits */
-       uint            dataoffsethigh; /*   high 32 bits */
+typedef struct dma_info
+{
+  struct hnddma_pub hnddma;    /* exported structure, don't use hnddma_t,
+                                * which could be const
+                                */
+  uint *msg_level;             /* message level pointer */
+  char name[MAXNAMEL];         /* callers name for diag msgs */
+
+  void *osh;                   /* os handle */
+  sb_t *sbh;                   /* sb handle */
+
+  bool dma64;                  /* dma64 enabled */
+  bool addrext;                        /* this dma engine supports DmaExtendedAddrChanges */
+
+  dma32regs_t *d32txregs;      /* 32 bits dma tx engine registers */
+  dma32regs_t *d32rxregs;      /* 32 bits dma rx engine registers */
+  dma64regs_t *d64txregs;      /* 64 bits dma tx engine registers */
+  dma64regs_t *d64rxregs;      /* 64 bits dma rx engine registers */
+
+  uint32 dma64align;           /* either 8k or 4k depends on number of dd */
+  dma32dd_t *txd32;            /* pointer to dma32 tx descriptor ring */
+  dma64dd_t *txd64;            /* pointer to dma64 tx descriptor ring */
+  uint ntxd;                   /* # tx descriptors tunable */
+  uint txin;                   /* index of next descriptor to reclaim */
+  uint txout;                  /* index of next descriptor to post */
+  void **txp;                  /* pointer to parallel array of pointers to packets */
+  osldma_t *tx_dmah;           /* DMA TX descriptor ring handle */
+  osldma_t **txp_dmah;         /* DMA TX packet data handle */
+  ulong txdpa;                 /* physical address of descriptor ring */
+  uint txdalign;               /* #bytes added to alloc'd mem to align txd */
+  uint txdalloc;               /* #bytes allocated for the ring */
+
+  dma32dd_t *rxd32;            /* pointer to dma32 rx descriptor ring */
+  dma64dd_t *rxd64;            /* pointer to dma64 rx descriptor ring */
+  uint nrxd;                   /* # rx descriptors tunable */
+  uint rxin;                   /* index of next descriptor to reclaim */
+  uint rxout;                  /* index of next descriptor to post */
+  void **rxp;                  /* pointer to parallel array of pointers to packets */
+  osldma_t *rx_dmah;           /* DMA RX descriptor ring handle */
+  osldma_t **rxp_dmah;         /* DMA RX packet data handle */
+  ulong rxdpa;                 /* physical address of descriptor ring */
+  uint rxdalign;               /* #bytes added to alloc'd mem to align rxd */
+  uint rxdalloc;               /* #bytes allocated for the ring */
+
+  /* tunables */
+  uint rxbufsize;              /* rx buffer size in bytes,
+                                  not including the extra headroom
+                                */
+  uint nrxpost;                        /* # rx buffers to keep posted */
+  uint rxoffset;               /* rxcontrol offset */
+  uint ddoffsetlow;            /* add to get dma address of descriptor ring, low 32 bits */
+  uint ddoffsethigh;           /*   high 32 bits */
+  uint dataoffsetlow;          /* add to get dma address of data buffer, low 32 bits */
+  uint dataoffsethigh;         /*   high 32 bits */
 } dma_info_t;
 
 #ifdef BCMDMA64
@@ -117,1053 +123,1394 @@ typedef struct dma_info {
 #define        I2B(index, type)        ((index) * sizeof(type))
 
 #define        PCI32ADDR_HIGH          0xc0000000      /* address[31:30] */
-#define        PCI32ADDR_HIGH_SHIFT    30              /* address[31:30] */
+#define        PCI32ADDR_HIGH_SHIFT    30      /* address[31:30] */
 
 
 /* common prototypes */
-static bool _dma_isaddrext(dma_info_t *di);
-static bool _dma_alloc(dma_info_t *di, uint direction);
-static void _dma_detach(dma_info_t *di);
-static void _dma_ddtable_init(dma_info_t *di, uint direction, ulong pa);
-static void _dma_rxinit(dma_info_t *di);
-static void *_dma_rx(dma_info_t *di);
-static void _dma_rxfill(dma_info_t *di);
-static void _dma_rxreclaim(dma_info_t *di);
-static void _dma_rxenable(dma_info_t *di);
-static void * _dma_getnextrxp(dma_info_t *di, bool forceall);
-
-static void _dma_txblock(dma_info_t *di);
-static void _dma_txunblock(dma_info_t *di);
-static uint _dma_txactive(dma_info_t *di);
-
-static void* _dma_peeknexttxp(dma_info_t *di);
-static uintptr _dma_getvar(dma_info_t *di, const char *name);
-static void _dma_counterreset(dma_info_t *di);
-static void _dma_fifoloopbackenable(dma_info_t *di);
+static bool _dma_isaddrext (dma_info_t * di);
+static bool _dma_alloc (dma_info_t * di, uint direction);
+static void _dma_detach (dma_info_t * di);
+static void _dma_ddtable_init (dma_info_t * di, uint direction, ulong pa);
+static void _dma_rxinit (dma_info_t * di);
+static void *_dma_rx (dma_info_t * di);
+static void _dma_rxfill (dma_info_t * di);
+static void _dma_rxreclaim (dma_info_t * di);
+static void _dma_rxenable (dma_info_t * di);
+static void *_dma_getnextrxp (dma_info_t * di, bool forceall);
+
+static void _dma_txblock (dma_info_t * di);
+static void _dma_txunblock (dma_info_t * di);
+static uint _dma_txactive (dma_info_t * di);
+
+static void *_dma_peeknexttxp (dma_info_t * di);
+static uintptr _dma_getvar (dma_info_t * di, const char *name);
+static void _dma_counterreset (dma_info_t * di);
+static void _dma_fifoloopbackenable (dma_info_t * di);
 
 /* ** 32 bit DMA prototypes */
-static bool dma32_alloc(dma_info_t *di, uint direction);
-static bool dma32_txreset(dma_info_t *di);
-static bool dma32_rxreset(dma_info_t *di);
-static bool dma32_txsuspendedidle(dma_info_t *di);
-static int  dma32_txfast(dma_info_t *di, void *p0, bool commit);
-static void *dma32_getnexttxp(dma_info_t *di, bool forceall);
-static void *dma32_getnextrxp(dma_info_t *di, bool forceall);
-static void dma32_txrotate(dma_info_t *di);
-static bool dma32_rxidle(dma_info_t *di);
-static void dma32_txinit(dma_info_t *di);
-static bool dma32_txenabled(dma_info_t *di);
-static void dma32_txsuspend(dma_info_t *di);
-static void dma32_txresume(dma_info_t *di);
-static bool dma32_txsuspended(dma_info_t *di);
-static void dma32_txreclaim(dma_info_t *di, bool forceall);
-static bool dma32_txstopped(dma_info_t *di);
-static bool dma32_rxstopped(dma_info_t *di);
-static bool dma32_rxenabled(dma_info_t *di);
-static bool _dma32_addrext(osl_t *osh, dma32regs_t *dma32regs);
+static bool dma32_alloc (dma_info_t * di, uint direction);
+static bool dma32_txreset (dma_info_t * di);
+static bool dma32_rxreset (dma_info_t * di);
+static bool dma32_txsuspendedidle (dma_info_t * di);
+static int dma32_txfast (dma_info_t * di, void *p0, bool commit);
+static void *dma32_getnexttxp (dma_info_t * di, bool forceall);
+static void *dma32_getnextrxp (dma_info_t * di, bool forceall);
+static void dma32_txrotate (dma_info_t * di);
+static bool dma32_rxidle (dma_info_t * di);
+static void dma32_txinit (dma_info_t * di);
+static bool dma32_txenabled (dma_info_t * di);
+static void dma32_txsuspend (dma_info_t * di);
+static void dma32_txresume (dma_info_t * di);
+static bool dma32_txsuspended (dma_info_t * di);
+static void dma32_txreclaim (dma_info_t * di, bool forceall);
+static bool dma32_txstopped (dma_info_t * di);
+static bool dma32_rxstopped (dma_info_t * di);
+static bool dma32_rxenabled (dma_info_t * di);
+static bool _dma32_addrext (osl_t * osh, dma32regs_t * dma32regs);
 
 /* ** 64 bit DMA prototypes and stubs */
 #ifdef BCMDMA64
-static bool dma64_alloc(dma_info_t *di, uint direction);
-static bool dma64_txreset(dma_info_t *di);
-static bool dma64_rxreset(dma_info_t *di);
-static bool dma64_txsuspendedidle(dma_info_t *di);
-static int  dma64_txfast(dma_info_t *di, void *p0, bool commit);
-static void *dma64_getnexttxp(dma_info_t *di, bool forceall);
-static void *dma64_getnextrxp(dma_info_t *di, bool forceall);
-static void dma64_txrotate(dma_info_t *di);
-
-static bool dma64_rxidle(dma_info_t *di);
-static void dma64_txinit(dma_info_t *di);
-static bool dma64_txenabled(dma_info_t *di);
-static void dma64_txsuspend(dma_info_t *di);
-static void dma64_txresume(dma_info_t *di);
-static bool dma64_txsuspended(dma_info_t *di);
-static void dma64_txreclaim(dma_info_t *di, bool forceall);
-static bool dma64_txstopped(dma_info_t *di);
-static bool dma64_rxstopped(dma_info_t *di);
-static bool dma64_rxenabled(dma_info_t *di);
-static bool _dma64_addrext(osl_t *osh, dma64regs_t *dma64regs);
+static bool dma64_alloc (dma_info_t * di, uint direction);
+static bool dma64_txreset (dma_info_t * di);
+static bool dma64_rxreset (dma_info_t * di);
+static bool dma64_txsuspendedidle (dma_info_t * di);
+static int dma64_txfast (dma_info_t * di, void *p0, bool commit);
+static void *dma64_getnexttxp (dma_info_t * di, bool forceall);
+static void *dma64_getnextrxp (dma_info_t * di, bool forceall);
+static void dma64_txrotate (dma_info_t * di);
+
+static bool dma64_rxidle (dma_info_t * di);
+static void dma64_txinit (dma_info_t * di);
+static bool dma64_txenabled (dma_info_t * di);
+static void dma64_txsuspend (dma_info_t * di);
+static void dma64_txresume (dma_info_t * di);
+static bool dma64_txsuspended (dma_info_t * di);
+static void dma64_txreclaim (dma_info_t * di, bool forceall);
+static bool dma64_txstopped (dma_info_t * di);
+static bool dma64_rxstopped (dma_info_t * di);
+static bool dma64_rxenabled (dma_info_t * di);
+static bool _dma64_addrext (osl_t * osh, dma64regs_t * dma64regs);
 
 #else
-static bool dma64_alloc(dma_info_t *di, uint direction) { return FALSE; }
-static bool dma64_txreset(dma_info_t *di) { return FALSE; }
-static bool dma64_rxreset(dma_info_t *di) { return FALSE; }
-static bool dma64_txsuspendedidle(dma_info_t *di) { return FALSE;}
-static int  dma64_txfast(dma_info_t *di, void *p0, bool commit) { return 0; }
-static void *dma64_getnexttxp(dma_info_t *di, bool forceall) { return NULL; }
-static void *dma64_getnextrxp(dma_info_t *di, bool forceall) { return NULL; }
-static void dma64_txrotate(dma_info_t *di) { return; }
-
-static bool dma64_rxidle(dma_info_t *di) { return FALSE; }
-static void dma64_txinit(dma_info_t *di) { return; }
-static bool dma64_txenabled(dma_info_t *di) { return FALSE; }
-static void dma64_txsuspend(dma_info_t *di) { return; }
-static void dma64_txresume(dma_info_t *di) { return; }
-static bool dma64_txsuspended(dma_info_t *di) {return FALSE; }
-static void dma64_txreclaim(dma_info_t *di, bool forceall) { return; }
-static bool dma64_txstopped(dma_info_t *di) { return FALSE; }
-static bool dma64_rxstopped(dma_info_t *di) { return FALSE; }
-static bool dma64_rxenabled(dma_info_t *di) { return FALSE; }
-static bool _dma64_addrext(osl_t *osh, dma64regs_t *dma64regs) { return FALSE; }
-
-#endif /* BCMDMA64 */
+static bool
+dma64_alloc (dma_info_t * di, uint direction)
+{
+  return FALSE;
+}
+static bool
+dma64_txreset (dma_info_t * di)
+{
+  return FALSE;
+}
+static bool
+dma64_rxreset (dma_info_t * di)
+{
+  return FALSE;
+}
+static bool
+dma64_txsuspendedidle (dma_info_t * di)
+{
+  return FALSE;
+}
+static int
+dma64_txfast (dma_info_t * di, void *p0, bool commit)
+{
+  return 0;
+}
+static void *
+dma64_getnexttxp (dma_info_t * di, bool forceall)
+{
+  return NULL;
+}
+static void *
+dma64_getnextrxp (dma_info_t * di, bool forceall)
+{
+  return NULL;
+}
+static void
+dma64_txrotate (dma_info_t * di)
+{
+  return;
+}
 
+static bool
+dma64_rxidle (dma_info_t * di)
+{
+  return FALSE;
+}
+static void
+dma64_txinit (dma_info_t * di)
+{
+  return;
+}
+static bool
+dma64_txenabled (dma_info_t * di)
+{
+  return FALSE;
+}
+static void
+dma64_txsuspend (dma_info_t * di)
+{
+  return;
+}
+static void
+dma64_txresume (dma_info_t * di)
+{
+  return;
+}
+static bool
+dma64_txsuspended (dma_info_t * di)
+{
+  return FALSE;
+}
+static void
+dma64_txreclaim (dma_info_t * di, bool forceall)
+{
+  return;
+}
+static bool
+dma64_txstopped (dma_info_t * di)
+{
+  return FALSE;
+}
+static bool
+dma64_rxstopped (dma_info_t * di)
+{
+  return FALSE;
+}
+static bool
+dma64_rxenabled (dma_info_t * di)
+{
+  return FALSE;
+}
+static bool
+_dma64_addrext (osl_t * osh, dma64regs_t * dma64regs)
+{
+  return FALSE;
+}
+
+#endif /* BCMDMA64 */
+
+#ifdef BCMDBG
+static void dma32_dumpring (dma_info_t * di, struct bcmstrbuf *b,
+                           dma32dd_t * ring, uint start, uint end,
+                           uint max_num);
+static void dma32_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring);
+static void dma32_dumptx (dma_info_t * di, struct bcmstrbuf *b,
+                         bool dumpring);
+static void dma32_dumprx (dma_info_t * di, struct bcmstrbuf *b,
+                         bool dumpring);
+
+static void dma64_dumpring (dma_info_t * di, struct bcmstrbuf *b,
+                           dma64dd_t * ring, uint start, uint end,
+                           uint max_num);
+static void dma64_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring);
+static void dma64_dumptx (dma_info_t * di, struct bcmstrbuf *b,
+                         bool dumpring);
+static void dma64_dumprx (dma_info_t * di, struct bcmstrbuf *b,
+                         bool dumpring);
+#endif
 
 
 static di_fcn_t dma64proc = {
-       (di_detach_t)_dma_detach,
-       (di_txinit_t)dma64_txinit,
-       (di_txreset_t)dma64_txreset,
-       (di_txenabled_t)dma64_txenabled,
-       (di_txsuspend_t)dma64_txsuspend,
-       (di_txresume_t)dma64_txresume,
-       (di_txsuspended_t)dma64_txsuspended,
-       (di_txsuspendedidle_t)dma64_txsuspendedidle,
-       (di_txfast_t)dma64_txfast,
-       (di_txstopped_t)dma64_txstopped,
-       (di_txreclaim_t)dma64_txreclaim,
-       (di_getnexttxp_t)dma64_getnexttxp,
-       (di_peeknexttxp_t)_dma_peeknexttxp,
-       (di_txblock_t)_dma_txblock,
-       (di_txunblock_t)_dma_txunblock,
-       (di_txactive_t)_dma_txactive,
-       (di_txrotate_t)dma64_txrotate,
-
-       (di_rxinit_t)_dma_rxinit,
-       (di_rxreset_t)dma64_rxreset,
-       (di_rxidle_t)dma64_rxidle,
-       (di_rxstopped_t)dma64_rxstopped,
-       (di_rxenable_t)_dma_rxenable,
-       (di_rxenabled_t)dma64_rxenabled,
-       (di_rx_t)_dma_rx,
-       (di_rxfill_t)_dma_rxfill,
-       (di_rxreclaim_t)_dma_rxreclaim,
-       (di_getnextrxp_t)_dma_getnextrxp,
-
-       (di_fifoloopbackenable_t)_dma_fifoloopbackenable,
-       (di_getvar_t)_dma_getvar,
-       (di_counterreset_t)_dma_counterreset,
-
-       NULL,
-       NULL,
-       NULL,
-       34
+  (di_detach_t) _dma_detach,
+  (di_txinit_t) dma64_txinit,
+  (di_txreset_t) dma64_txreset,
+  (di_txenabled_t) dma64_txenabled,
+  (di_txsuspend_t) dma64_txsuspend,
+  (di_txresume_t) dma64_txresume,
+  (di_txsuspended_t) dma64_txsuspended,
+  (di_txsuspendedidle_t) dma64_txsuspendedidle,
+  (di_txfast_t) dma64_txfast,
+  (di_txstopped_t) dma64_txstopped,
+  (di_txreclaim_t) dma64_txreclaim,
+  (di_getnexttxp_t) dma64_getnexttxp,
+  (di_peeknexttxp_t) _dma_peeknexttxp,
+  (di_txblock_t) _dma_txblock,
+  (di_txunblock_t) _dma_txunblock,
+  (di_txactive_t) _dma_txactive,
+  (di_txrotate_t) dma64_txrotate,
+
+  (di_rxinit_t) _dma_rxinit,
+  (di_rxreset_t) dma64_rxreset,
+  (di_rxidle_t) dma64_rxidle,
+  (di_rxstopped_t) dma64_rxstopped,
+  (di_rxenable_t) _dma_rxenable,
+  (di_rxenabled_t) dma64_rxenabled,
+  (di_rx_t) _dma_rx,
+  (di_rxfill_t) _dma_rxfill,
+  (di_rxreclaim_t) _dma_rxreclaim,
+  (di_getnextrxp_t) _dma_getnextrxp,
+
+  (di_fifoloopbackenable_t) _dma_fifoloopbackenable,
+  (di_getvar_t) _dma_getvar,
+  (di_counterreset_t) _dma_counterreset,
+
+#ifdef BCMDBG
+  (di_dump_t) dma64_dump,
+  (di_dumptx_t) dma64_dumptx,
+  (di_dumprx_t) dma64_dumprx,
+#else
+  NULL,
+  NULL,
+  NULL,
+#endif
+  34
 };
 
 static di_fcn_t dma32proc = {
-       (di_detach_t)_dma_detach,
-       (di_txinit_t)dma32_txinit,
-       (di_txreset_t)dma32_txreset,
-       (di_txenabled_t)dma32_txenabled,
-       (di_txsuspend_t)dma32_txsuspend,
-       (di_txresume_t)dma32_txresume,
-       (di_txsuspended_t)dma32_txsuspended,
-       (di_txsuspendedidle_t)dma32_txsuspendedidle,
-       (di_txfast_t)dma32_txfast,
-       (di_txstopped_t)dma32_txstopped,
-       (di_txreclaim_t)dma32_txreclaim,
-       (di_getnexttxp_t)dma32_getnexttxp,
-       (di_peeknexttxp_t)_dma_peeknexttxp,
-       (di_txblock_t)_dma_txblock,
-       (di_txunblock_t)_dma_txunblock,
-       (di_txactive_t)_dma_txactive,
-       (di_txrotate_t)dma32_txrotate,
-
-       (di_rxinit_t)_dma_rxinit,
-       (di_rxreset_t)dma32_rxreset,
-       (di_rxidle_t)dma32_rxidle,
-       (di_rxstopped_t)dma32_rxstopped,
-       (di_rxenable_t)_dma_rxenable,
-       (di_rxenabled_t)dma32_rxenabled,
-       (di_rx_t)_dma_rx,
-       (di_rxfill_t)_dma_rxfill,
-       (di_rxreclaim_t)_dma_rxreclaim,
-       (di_getnextrxp_t)_dma_getnextrxp,
-
-       (di_fifoloopbackenable_t)_dma_fifoloopbackenable,
-       (di_getvar_t)_dma_getvar,
-       (di_counterreset_t)_dma_counterreset,
-
-       NULL,
-       NULL,
-       NULL,
-       34
+  (di_detach_t) _dma_detach,
+  (di_txinit_t) dma32_txinit,
+  (di_txreset_t) dma32_txreset,
+  (di_txenabled_t) dma32_txenabled,
+  (di_txsuspend_t) dma32_txsuspend,
+  (di_txresume_t) dma32_txresume,
+  (di_txsuspended_t) dma32_txsuspended,
+  (di_txsuspendedidle_t) dma32_txsuspendedidle,
+  (di_txfast_t) dma32_txfast,
+  (di_txstopped_t) dma32_txstopped,
+  (di_txreclaim_t) dma32_txreclaim,
+  (di_getnexttxp_t) dma32_getnexttxp,
+  (di_peeknexttxp_t) _dma_peeknexttxp,
+  (di_txblock_t) _dma_txblock,
+  (di_txunblock_t) _dma_txunblock,
+  (di_txactive_t) _dma_txactive,
+  (di_txrotate_t) dma32_txrotate,
+
+  (di_rxinit_t) _dma_rxinit,
+  (di_rxreset_t) dma32_rxreset,
+  (di_rxidle_t) dma32_rxidle,
+  (di_rxstopped_t) dma32_rxstopped,
+  (di_rxenable_t) _dma_rxenable,
+  (di_rxenabled_t) dma32_rxenabled,
+  (di_rx_t) _dma_rx,
+  (di_rxfill_t) _dma_rxfill,
+  (di_rxreclaim_t) _dma_rxreclaim,
+  (di_getnextrxp_t) _dma_getnextrxp,
+
+  (di_fifoloopbackenable_t) _dma_fifoloopbackenable,
+  (di_getvar_t) _dma_getvar,
+  (di_counterreset_t) _dma_counterreset,
+
+#ifdef BCMDBG
+  (di_dump_t) dma32_dump,
+  (di_dumptx_t) dma32_dumptx,
+  (di_dumprx_t) dma32_dumprx,
+#else
+  NULL,
+  NULL,
+  NULL,
+#endif
+  34
 };
 
 hnddma_t *
-dma_attach(osl_t *osh, char *name, sb_t *sbh, void *dmaregstx, void *dmaregsrx,
-           uint ntxd, uint nrxd, uint rxbufsize, uint nrxpost, uint rxoffset, uint *msg_level)
+dma_attach (osl_t * osh, char *name, sb_t * sbh, void *dmaregstx,
+           void *dmaregsrx, uint ntxd, uint nrxd, uint rxbufsize,
+           uint nrxpost, uint rxoffset, uint * msg_level)
 {
-       dma_info_t *di;
-       uint size;
+  dma_info_t *di;
+  uint size;
+
+  /* allocate private info structure */
+  if ((di = MALLOC (osh, sizeof (dma_info_t))) == NULL)
+    {
+#ifdef BCMDBG
+      printf ("dma_attach: out of memory, malloced %d bytes\n",
+             MALLOCED (osh));
+#endif
+      return (NULL);
+    }
+  bzero ((char *) di, sizeof (dma_info_t));
 
-       /* allocate private info structure */
-       if ((di = MALLOC(osh, sizeof (dma_info_t))) == NULL) {
-               return (NULL);
-       }
-       bzero((char *)di, sizeof(dma_info_t));
+  di->msg_level = msg_level ? msg_level : &dma_msg_level;
 
-       di->msg_level = msg_level ? msg_level : &dma_msg_level;
+  /* old chips w/o sb is no longer supported */
+  ASSERT (sbh != NULL);
 
-       /* old chips w/o sb is no longer supported */
-       ASSERT(sbh != NULL);
-       
-       di->dma64 = ((sb_coreflagshi(sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64);
+  di->dma64 = ((sb_coreflagshi (sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64);
 
 #ifndef BCMDMA64
-       if (di->dma64) {
-               DMA_ERROR(("dma_attach: driver doesn't have the capability to support "
-                          "64 bits DMA\n"));
-               goto fail;
-       }
+  if (di->dma64)
+    {
+      DMA_ERROR (("dma_attach: driver doesn't have the capability to support "
+                 "64 bits DMA\n"));
+      goto fail;
+    }
 #endif
 
-       /* check arguments */
-       ASSERT(ISPOWEROF2(ntxd));
-       ASSERT(ISPOWEROF2(nrxd));
-       if (nrxd == 0)
-               ASSERT(dmaregsrx == NULL);
-       if (ntxd == 0)
-               ASSERT(dmaregstx == NULL);
-
-
-       /* init dma reg pointer */
-       if (di->dma64) {
-               ASSERT(ntxd <= D64MAXDD);
-               ASSERT(nrxd <= D64MAXDD);
-               di->d64txregs = (dma64regs_t *)dmaregstx;
-               di->d64rxregs = (dma64regs_t *)dmaregsrx;
-
-               di->dma64align = D64RINGALIGN;
-               if ((ntxd < D64MAXDD / 2) && (nrxd < D64MAXDD / 2)) {
-                       /* for smaller dd table, HW relax the alignment requirement */
-                       di->dma64align = D64RINGALIGN / 2;
-               }
-       } else {
-               ASSERT(ntxd <= D32MAXDD);
-               ASSERT(nrxd <= D32MAXDD);
-               di->d32txregs = (dma32regs_t *)dmaregstx;
-               di->d32rxregs = (dma32regs_t *)dmaregsrx;
+  /* check arguments */
+  ASSERT (ISPOWEROF2 (ntxd));
+  ASSERT (ISPOWEROF2 (nrxd));
+  if (nrxd == 0)
+    ASSERT (dmaregsrx == NULL);
+  if (ntxd == 0)
+    ASSERT (dmaregstx == NULL);
+
+
+  /* init dma reg pointer */
+  if (di->dma64)
+    {
+      ASSERT (ntxd <= D64MAXDD);
+      ASSERT (nrxd <= D64MAXDD);
+      di->d64txregs = (dma64regs_t *) dmaregstx;
+      di->d64rxregs = (dma64regs_t *) dmaregsrx;
+
+      di->dma64align = D64RINGALIGN;
+      if ((ntxd < D64MAXDD / 2) && (nrxd < D64MAXDD / 2))
+       {
+         /* for smaller dd table, HW relax the alignment requirement */
+         di->dma64align = D64RINGALIGN / 2;
        }
-
-       DMA_TRACE(("%s: dma_attach: %s osh %p ntxd %d nrxd %d rxbufsize %d nrxpost %d "
-                  "rxoffset %d dmaregstx %p dmaregsrx %p\n",
-                  name, (di->dma64 ? "DMA64" : "DMA32"), osh, ntxd, nrxd, rxbufsize,
-                  nrxpost, rxoffset, dmaregstx, dmaregsrx));
-
-       /* make a private copy of our callers name */
-       strncpy(di->name, name, MAXNAMEL);
-       di->name[MAXNAMEL-1] = '\0';
-
-       di->osh = osh;
-       di->sbh = sbh;
-
-       /* save tunables */
-       di->ntxd = ntxd;
-       di->nrxd = nrxd;
-
-       /* the actual dma size doesn't include the extra headroom */
-       if (rxbufsize > BCMEXTRAHDROOM)
-               di->rxbufsize = rxbufsize - BCMEXTRAHDROOM;
-       else
-               di->rxbufsize = rxbufsize;
-
-       di->nrxpost = nrxpost;
-       di->rxoffset = rxoffset;
-
-       /*
-        * figure out the DMA physical address offset for dd and data
-        *   for old chips w/o sb, use zero
-        *   for new chips w sb,
-        *     PCI/PCIE: they map silicon backplace address to zero based memory, need offset
-        *     Other bus: use zero
-        *     SB_BUS BIGENDIAN kludge: use sdram swapped region for data buffer, not descriptor
-        */
-       di->ddoffsetlow = 0;
-       di->dataoffsetlow = 0;
-       /* for pci bus, add offset */
-       if (sbh->bustype == PCI_BUS) {
-               if ((sbh->buscoretype == SB_PCIE) && di->dma64) {
-                       /* pcie with DMA64 */
-                       di->ddoffsetlow = 0;
-                       di->ddoffsethigh = SB_PCIE_DMA_H32;
-               } else {
-                       /* pci(DMA32/DMA64) or pcie with DMA32 */
-                       di->ddoffsetlow = SB_PCI_DMA;
-                       di->ddoffsethigh = 0;
-               }
-               di->dataoffsetlow =  di->ddoffsetlow;
-               di->dataoffsethigh =  di->ddoffsethigh;
+    }
+  else
+    {
+      ASSERT (ntxd <= D32MAXDD);
+      ASSERT (nrxd <= D32MAXDD);
+      di->d32txregs = (dma32regs_t *) dmaregstx;
+      di->d32rxregs = (dma32regs_t *) dmaregsrx;
+    }
+
+  DMA_TRACE (("%s: dma_attach: %s osh %p ntxd %d nrxd %d rxbufsize %d nrxpost %d " "rxoffset %d dmaregstx %p dmaregsrx %p\n", name, (di->dma64 ? "DMA64" : "DMA32"), osh, ntxd, nrxd, rxbufsize, nrxpost, rxoffset, dmaregstx, dmaregsrx));
+
+  /* make a private copy of our callers name */
+  strncpy (di->name, name, MAXNAMEL);
+  di->name[MAXNAMEL - 1] = '\0';
+
+  di->osh = osh;
+  di->sbh = sbh;
+
+  /* save tunables */
+  di->ntxd = ntxd;
+  di->nrxd = nrxd;
+
+  /* the actual dma size doesn't include the extra headroom */
+  if (rxbufsize > BCMEXTRAHDROOM)
+    di->rxbufsize = rxbufsize - BCMEXTRAHDROOM;
+  else
+    di->rxbufsize = rxbufsize;
+
+  di->nrxpost = nrxpost;
+  di->rxoffset = rxoffset;
+
+  /*
+   * figure out the DMA physical address offset for dd and data
+   *   for old chips w/o sb, use zero
+   *   for new chips w sb,
+   *     PCI/PCIE: they map silicon backplace address to zero based memory, need offset
+   *     Other bus: use zero
+   *     SB_BUS BIGENDIAN kludge: use sdram swapped region for data buffer, not descriptor
+   */
+  di->ddoffsetlow = 0;
+  di->dataoffsetlow = 0;
+  /* for pci bus, add offset */
+  if (sbh->bustype == PCI_BUS)
+    {
+      if ((sbh->buscoretype == SB_PCIE) && di->dma64)
+       {
+         /* pcie with DMA64 */
+         di->ddoffsetlow = 0;
+         di->ddoffsethigh = SB_PCIE_DMA_H32;
        }
+      else
+       {
+         /* pci(DMA32/DMA64) or pcie with DMA32 */
+         di->ddoffsetlow = SB_PCI_DMA;
+         di->ddoffsethigh = 0;
+       }
+      di->dataoffsetlow = di->ddoffsetlow;
+      di->dataoffsethigh = di->ddoffsethigh;
+    }
 
 #if defined(__mips__) && defined(IL_BIGENDIAN)
-       di->dataoffsetlow = di->dataoffsetlow + SB_SDRAM_SWAPPED;
+  di->dataoffsetlow = di->dataoffsetlow + SB_SDRAM_SWAPPED;
 #endif
 
-       di->addrext = _dma_isaddrext(di);
-
-       /* allocate tx packet pointer vector */
-       if (ntxd) {
-               size = ntxd * sizeof(void *);
-               if ((di->txp = MALLOC(osh, size)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: out of tx memory, malloced %d bytes\n",
-                                  di->name, MALLOCED(osh)));
-                       goto fail;
-               }
-               bzero((char *)di->txp, size);
+  di->addrext = _dma_isaddrext (di);
+
+  /* allocate tx packet pointer vector */
+  if (ntxd)
+    {
+      size = ntxd * sizeof (void *);
+      if ((di->txp = MALLOC (osh, size)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: out of tx memory, malloced %d bytes\n",
+                     di->name, MALLOCED (osh)));
+         goto fail;
        }
-
-       /* allocate rx packet pointer vector */
-       if (nrxd) {
-               size = nrxd * sizeof(void *);
-               if ((di->rxp = MALLOC(osh, size)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: out of rx memory, malloced %d bytes\n",
-                                  di->name, MALLOCED(osh)));
-                       goto fail;
-               }
-               bzero((char *)di->rxp, size);
+      bzero ((char *) di->txp, size);
+    }
+
+  /* allocate rx packet pointer vector */
+  if (nrxd)
+    {
+      size = nrxd * sizeof (void *);
+      if ((di->rxp = MALLOC (osh, size)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: out of rx memory, malloced %d bytes\n",
+                     di->name, MALLOCED (osh)));
+         goto fail;
        }
-
-       /* allocate transmit descriptor ring, only need ntxd descriptors but it must be aligned */
-       if (ntxd) {
-               if (!_dma_alloc(di, DMA_TX))
-                       goto fail;
-       }
-
-       /* allocate receive descriptor ring, only need nrxd descriptors but it must be aligned */
-       if (nrxd) {
-               if (!_dma_alloc(di, DMA_RX))
-                       goto fail;
-       }
-
-       if ((di->ddoffsetlow == SB_PCI_DMA) && (di->txdpa > SB_PCI_DMA_SZ) && !di->addrext) {
-               DMA_ERROR(("%s: dma_attach: txdpa 0x%lx: addrext not supported\n",
-                          di->name, di->txdpa));
-               goto fail;
-       }
-       if ((di->ddoffsetlow == SB_PCI_DMA) && (di->rxdpa > SB_PCI_DMA_SZ) && !di->addrext) {
-               DMA_ERROR(("%s: dma_attach: rxdpa 0x%lx: addrext not supported\n",
-                          di->name, di->rxdpa));
-               goto fail;
-       }
-
-       DMA_TRACE(("ddoffsetlow 0x%x ddoffsethigh 0x%x dataoffsetlow 0x%x dataoffsethigh "
-                  "0x%x addrext %d\n", di->ddoffsetlow, di->ddoffsethigh, di->dataoffsetlow,
-                  di->dataoffsethigh, di->addrext));
-
-       /* allocate tx packet pointer vector and DMA mapping vectors */
-       if (ntxd) {
-
-               size = ntxd * sizeof(osldma_t **);
-               if ((di->txp_dmah = (osldma_t **)MALLOC(osh, size)) == NULL)
-                       goto fail;
-               bzero((char*)di->txp_dmah, size);
-       }else
-               di->txp_dmah = NULL;
-
-       /* allocate rx packet pointer vector and DMA mapping vectors */
-       if (nrxd) {
-
-               size = nrxd * sizeof(osldma_t **);
-               if ((di->rxp_dmah = (osldma_t **)MALLOC(osh, size)) == NULL)
-                       goto fail;
-               bzero((char*)di->rxp_dmah, size);
-
-       } else
-               di->rxp_dmah = NULL;
-
-       /* initialize opsvec of function pointers */
-       di->hnddma.di_fn = DMA64_ENAB(di) ? dma64proc : dma32proc;
-
-       return ((hnddma_t *)di);
+      bzero ((char *) di->rxp, size);
+    }
+
+  /* allocate transmit descriptor ring, only need ntxd descriptors but it must be aligned */
+  if (ntxd)
+    {
+      if (!_dma_alloc (di, DMA_TX))
+       goto fail;
+    }
+
+  /* allocate receive descriptor ring, only need nrxd descriptors but it must be aligned */
+  if (nrxd)
+    {
+      if (!_dma_alloc (di, DMA_RX))
+       goto fail;
+    }
+
+  if ((di->ddoffsetlow == SB_PCI_DMA) && (di->txdpa > SB_PCI_DMA_SZ)
+      && !di->addrext)
+    {
+      DMA_ERROR (("%s: dma_attach: txdpa 0x%lx: addrext not supported\n",
+                 di->name, di->txdpa));
+      goto fail;
+    }
+  if ((di->ddoffsetlow == SB_PCI_DMA) && (di->rxdpa > SB_PCI_DMA_SZ)
+      && !di->addrext)
+    {
+      DMA_ERROR (("%s: dma_attach: rxdpa 0x%lx: addrext not supported\n",
+                 di->name, di->rxdpa));
+      goto fail;
+    }
+
+  DMA_TRACE (("ddoffsetlow 0x%x ddoffsethigh 0x%x dataoffsetlow 0x%x dataoffsethigh " "0x%x addrext %d\n", di->ddoffsetlow, di->ddoffsethigh, di->dataoffsetlow, di->dataoffsethigh, di->addrext));
+
+  /* allocate tx packet pointer vector and DMA mapping vectors */
+  if (ntxd)
+    {
+
+      size = ntxd * sizeof (osldma_t **);
+      if ((di->txp_dmah = (osldma_t **) MALLOC (osh, size)) == NULL)
+       goto fail;
+      bzero ((char *) di->txp_dmah, size);
+    }
+  else
+    di->txp_dmah = NULL;
+
+  /* allocate rx packet pointer vector and DMA mapping vectors */
+  if (nrxd)
+    {
+
+      size = nrxd * sizeof (osldma_t **);
+      if ((di->rxp_dmah = (osldma_t **) MALLOC (osh, size)) == NULL)
+       goto fail;
+      bzero ((char *) di->rxp_dmah, size);
+
+    }
+  else
+    di->rxp_dmah = NULL;
+
+  /* initialize opsvec of function pointers */
+  di->hnddma.di_fn = DMA64_ENAB (di) ? dma64proc : dma32proc;
+
+  return ((hnddma_t *) di);
 
 fail:
-       _dma_detach(di);
-       return (NULL);
+  _dma_detach (di);
+  return (NULL);
 }
 
 /* init the tx or rx descriptor */
 static INLINE void
-dma32_dd_upd(dma_info_t *di, dma32dd_t *ddring, ulong pa, uint outidx, uint32 *flags,
-             uint32 bufcount)
-{
-       /* dma32 uses 32 bits control to fit both flags and bufcounter */
-       *flags = *flags | (bufcount & CTRL_BC_MASK);
-
-       if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
-               W_SM(&ddring[outidx].addr, BUS_SWAP32(pa + di->dataoffsetlow));
-               W_SM(&ddring[outidx].ctrl, BUS_SWAP32(*flags));
-       } else {
-               /* address extension */
-               uint32 ae;
-               ASSERT(di->addrext);
-               ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
-               pa &= ~PCI32ADDR_HIGH;
-
-               *flags |= (ae << CTRL_AE_SHIFT);
-               W_SM(&ddring[outidx].addr, BUS_SWAP32(pa + di->dataoffsetlow));
-               W_SM(&ddring[outidx].ctrl, BUS_SWAP32(*flags));
-       }
+dma32_dd_upd (dma_info_t * di, dma32dd_t * ddring, ulong pa, uint outidx,
+             uint32 * flags, uint32 bufcount)
+{
+  /* dma32 uses 32 bits control to fit both flags and bufcounter */
+  *flags = *flags | (bufcount & CTRL_BC_MASK);
+
+  if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+    {
+      W_SM (&ddring[outidx].addr, BUS_SWAP32 (pa + di->dataoffsetlow));
+      W_SM (&ddring[outidx].ctrl, BUS_SWAP32 (*flags));
+    }
+  else
+    {
+      /* address extension */
+      uint32 ae;
+      ASSERT (di->addrext);
+      ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+      pa &= ~PCI32ADDR_HIGH;
+
+      *flags |= (ae << CTRL_AE_SHIFT);
+      W_SM (&ddring[outidx].addr, BUS_SWAP32 (pa + di->dataoffsetlow));
+      W_SM (&ddring[outidx].ctrl, BUS_SWAP32 (*flags));
+    }
 }
 
 static INLINE void
-dma64_dd_upd(dma_info_t *di, dma64dd_t *ddring, ulong pa, uint outidx, uint32 *flags,
-             uint32 bufcount)
-{
-       uint32 ctrl2 = bufcount & D64_CTRL2_BC_MASK;
-
-       /* PCI bus with big(>1G) physical address, use address extension */
-       if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
-               W_SM(&ddring[outidx].addrlow, BUS_SWAP32(pa + di->dataoffsetlow));
-               W_SM(&ddring[outidx].addrhigh, BUS_SWAP32(0 + di->dataoffsethigh));
-               W_SM(&ddring[outidx].ctrl1, BUS_SWAP32(*flags));
-               W_SM(&ddring[outidx].ctrl2, BUS_SWAP32(ctrl2));
-       } else {
-               /* address extension */
-               uint32 ae;
-               ASSERT(di->addrext);
-
-               ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
-               pa &= ~PCI32ADDR_HIGH;
-
-               ctrl2 |= (ae << D64_CTRL2_AE_SHIFT) & D64_CTRL2_AE;
-               W_SM(&ddring[outidx].addrlow, BUS_SWAP32(pa + di->dataoffsetlow));
-               W_SM(&ddring[outidx].addrhigh, BUS_SWAP32(0 + di->dataoffsethigh));
-               W_SM(&ddring[outidx].ctrl1, BUS_SWAP32(*flags));
-               W_SM(&ddring[outidx].ctrl2, BUS_SWAP32(ctrl2));
-       }
+dma64_dd_upd (dma_info_t * di, dma64dd_t * ddring, ulong pa, uint outidx,
+             uint32 * flags, uint32 bufcount)
+{
+  uint32 ctrl2 = bufcount & D64_CTRL2_BC_MASK;
+
+  /* PCI bus with big(>1G) physical address, use address extension */
+  if ((di->dataoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+    {
+      W_SM (&ddring[outidx].addrlow, BUS_SWAP32 (pa + di->dataoffsetlow));
+      W_SM (&ddring[outidx].addrhigh, BUS_SWAP32 (0 + di->dataoffsethigh));
+      W_SM (&ddring[outidx].ctrl1, BUS_SWAP32 (*flags));
+      W_SM (&ddring[outidx].ctrl2, BUS_SWAP32 (ctrl2));
+    }
+  else
+    {
+      /* address extension */
+      uint32 ae;
+      ASSERT (di->addrext);
+
+      ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+      pa &= ~PCI32ADDR_HIGH;
+
+      ctrl2 |= (ae << D64_CTRL2_AE_SHIFT) & D64_CTRL2_AE;
+      W_SM (&ddring[outidx].addrlow, BUS_SWAP32 (pa + di->dataoffsetlow));
+      W_SM (&ddring[outidx].addrhigh, BUS_SWAP32 (0 + di->dataoffsethigh));
+      W_SM (&ddring[outidx].ctrl1, BUS_SWAP32 (*flags));
+      W_SM (&ddring[outidx].ctrl2, BUS_SWAP32 (ctrl2));
+    }
 }
 
 static bool
-_dma32_addrext(osl_t *osh, dma32regs_t *dma32regs)
+_dma32_addrext (osl_t * osh, dma32regs_t * dma32regs)
 {
-       uint32 w;
+  uint32 w;
 
-       OR_REG(osh, &dma32regs->control, XC_AE);
-       w = R_REG(osh, &dma32regs->control);
-       AND_REG(osh, &dma32regs->control, ~XC_AE);
-       return ((w & XC_AE) == XC_AE);
+  OR_REG (osh, &dma32regs->control, XC_AE);
+  w = R_REG (osh, &dma32regs->control);
+  AND_REG (osh, &dma32regs->control, ~XC_AE);
+  return ((w & XC_AE) == XC_AE);
 }
 
 static bool
-_dma_alloc(dma_info_t *di, uint direction)
+_dma_alloc (dma_info_t * di, uint direction)
 {
-       if (DMA64_ENAB(di)) {
-               return dma64_alloc(di, direction);
-       } else {
-               return dma32_alloc(di, direction);
-       }
+  if (DMA64_ENAB (di))
+    {
+      return dma64_alloc (di, direction);
+    }
+  else
+    {
+      return dma32_alloc (di, direction);
+    }
 }
 
 /* !! may be called with core in reset */
 static void
-_dma_detach(dma_info_t *di)
-{
-       if (di == NULL)
-               return;
-
-       DMA_TRACE(("%s: dma_detach\n", di->name));
-
-       /* shouldn't be here if descriptors are unreclaimed */
-       ASSERT(di->txin == di->txout);
-       ASSERT(di->rxin == di->rxout);
-
-       /* free dma descriptor rings */
-       if (DMA64_ENAB(di)) {
-               if (di->txd64)
-                       DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->txd64 - di->txdalign),
-                                           di->txdalloc, (di->txdpa - di->txdalign), &di->tx_dmah);
-               if (di->rxd64)
-                       DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->rxd64 - di->rxdalign),
-                                           di->rxdalloc, (di->rxdpa - di->rxdalign), &di->rx_dmah);
-       } else {
-               if (di->txd32)
-                       DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->txd32 - di->txdalign),
-                                           di->txdalloc, (di->txdpa - di->txdalign), &di->tx_dmah);
-               if (di->rxd32)
-                       DMA_FREE_CONSISTENT(di->osh, ((int8*)(uintptr)di->rxd32 - di->rxdalign),
-                                           di->rxdalloc, (di->rxdpa - di->rxdalign), &di->rx_dmah);
-       }
-
-       /* free packet pointer vectors */
-       if (di->txp)
-               MFREE(di->osh, (void *)di->txp, (di->ntxd * sizeof(void *)));
-       if (di->rxp)
-               MFREE(di->osh, (void *)di->rxp, (di->nrxd * sizeof(void *)));
-
-       /* free tx packet DMA handles */
-       if (di->txp_dmah)
-               MFREE(di->osh, (void *)di->txp_dmah, di->ntxd * sizeof(osldma_t **));
-
-       /* free rx packet DMA handles */
-       if (di->rxp_dmah)
-               MFREE(di->osh, (void *)di->rxp_dmah, di->nrxd * sizeof(osldma_t **));
-
-       /* free our private info structure */
-       MFREE(di->osh, (void *)di, sizeof(dma_info_t));
+_dma_detach (dma_info_t * di)
+{
+  if (di == NULL)
+    return;
+
+  DMA_TRACE (("%s: dma_detach\n", di->name));
+
+  /* shouldn't be here if descriptors are unreclaimed */
+  ASSERT (di->txin == di->txout);
+  ASSERT (di->rxin == di->rxout);
+
+  /* free dma descriptor rings */
+  if (DMA64_ENAB (di))
+    {
+      if (di->txd64)
+       DMA_FREE_CONSISTENT (di->osh,
+                            ((int8 *) (uintptr) di->txd64 - di->txdalign),
+                            di->txdalloc, (di->txdpa - di->txdalign),
+                            &di->tx_dmah);
+      if (di->rxd64)
+       DMA_FREE_CONSISTENT (di->osh,
+                            ((int8 *) (uintptr) di->rxd64 - di->rxdalign),
+                            di->rxdalloc, (di->rxdpa - di->rxdalign),
+                            &di->rx_dmah);
+    }
+  else
+    {
+      if (di->txd32)
+       DMA_FREE_CONSISTENT (di->osh,
+                            ((int8 *) (uintptr) di->txd32 - di->txdalign),
+                            di->txdalloc, (di->txdpa - di->txdalign),
+                            &di->tx_dmah);
+      if (di->rxd32)
+       DMA_FREE_CONSISTENT (di->osh,
+                            ((int8 *) (uintptr) di->rxd32 - di->rxdalign),
+                            di->rxdalloc, (di->rxdpa - di->rxdalign),
+                            &di->rx_dmah);
+    }
+
+  /* free packet pointer vectors */
+  if (di->txp)
+    MFREE (di->osh, (void *) di->txp, (di->ntxd * sizeof (void *)));
+  if (di->rxp)
+    MFREE (di->osh, (void *) di->rxp, (di->nrxd * sizeof (void *)));
+
+  /* free tx packet DMA handles */
+  if (di->txp_dmah)
+    MFREE (di->osh, (void *) di->txp_dmah, di->ntxd * sizeof (osldma_t **));
+
+  /* free rx packet DMA handles */
+  if (di->rxp_dmah)
+    MFREE (di->osh, (void *) di->rxp_dmah, di->nrxd * sizeof (osldma_t **));
+
+  /* free our private info structure */
+  MFREE (di->osh, (void *) di, sizeof (dma_info_t));
 
 }
 
 /* return TRUE if this dma engine supports DmaExtendedAddrChanges, otherwise FALSE */
 static bool
-_dma_isaddrext(dma_info_t *di)
-{
-       if (DMA64_ENAB(di)) {
-               /* DMA64 supports full 32 bits or 64 bits. AE is always valid */
-
-               /* not all tx or rx channel are available */
-               if (di->d64txregs != NULL) {
-                       if (!_dma64_addrext(di->osh, di->d64txregs)) {
-                               DMA_ERROR(("%s: _dma_isaddrext: DMA64 tx doesn't have AE set\n",
-                                       di->name));
-                               ASSERT(0);
-                       }
-                       return TRUE;
-               } else if (di->d64rxregs != NULL) {
-                       if (!_dma64_addrext(di->osh, di->d64rxregs)) {
-                               DMA_ERROR(("%s: _dma_isaddrext: DMA64 rx doesn't have AE set\n",
-                                       di->name));
-                               ASSERT(0);
-                       }
-                       return TRUE;
-               }
-               return FALSE;
-       } else if (di->d32txregs)
-               return (_dma32_addrext(di->osh, di->d32txregs));
-       else if (di->d32rxregs)
-               return (_dma32_addrext(di->osh, di->d32rxregs));
-       return FALSE;
+_dma_isaddrext (dma_info_t * di)
+{
+  if (DMA64_ENAB (di))
+    {
+      /* DMA64 supports full 32 bits or 64 bits. AE is always valid */
+
+      /* not all tx or rx channel are available */
+      if (di->d64txregs != NULL)
+       {
+         if (!_dma64_addrext (di->osh, di->d64txregs))
+           {
+             DMA_ERROR (("%s: _dma_isaddrext: DMA64 tx doesn't have AE set\n", di->name));
+             ASSERT (0);
+           }
+         return TRUE;
+       }
+      else if (di->d64rxregs != NULL)
+       {
+         if (!_dma64_addrext (di->osh, di->d64rxregs))
+           {
+             DMA_ERROR (("%s: _dma_isaddrext: DMA64 rx doesn't have AE set\n", di->name));
+             ASSERT (0);
+           }
+         return TRUE;
+       }
+      return FALSE;
+    }
+  else if (di->d32txregs)
+    return (_dma32_addrext (di->osh, di->d32txregs));
+  else if (di->d32rxregs)
+    return (_dma32_addrext (di->osh, di->d32rxregs));
+  return FALSE;
 }
 
 /* initialize descriptor table base address */
 static void
-_dma_ddtable_init(dma_info_t *di, uint direction, ulong pa)
-{
-       if (DMA64_ENAB(di)) {
-
-               if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
-                       if (direction == DMA_TX) {
-                               W_REG(di->osh, &di->d64txregs->addrlow, (pa + di->ddoffsetlow));
-                               W_REG(di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
-                       } else {
-                               W_REG(di->osh, &di->d64rxregs->addrlow, (pa + di->ddoffsetlow));
-                               W_REG(di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
-                       }
-               } else {
-                       /* DMA64 32bits address extension */
-                       uint32 ae;
-                       ASSERT(di->addrext);
-
-                       /* shift the high bit(s) from pa to ae */
-                       ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
-                       pa &= ~PCI32ADDR_HIGH;
-
-                       if (direction == DMA_TX) {
-                               W_REG(di->osh, &di->d64txregs->addrlow, (pa + di->ddoffsetlow));
-                               W_REG(di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
-                               SET_REG(di->osh, &di->d64txregs->control, D64_XC_AE,
-                                       (ae << D64_XC_AE_SHIFT));
-                       } else {
-                               W_REG(di->osh, &di->d64rxregs->addrlow, (pa + di->ddoffsetlow));
-                               W_REG(di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
-                               SET_REG(di->osh, &di->d64rxregs->control, D64_RC_AE,
-                                       (ae << D64_RC_AE_SHIFT));
-                       }
-               }
-
-       } else {
-               if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH)) {
-                       if (direction == DMA_TX)
-                               W_REG(di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
-                       else
-                               W_REG(di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
-               } else {
-                       /* dma32 address extension */
-                       uint32 ae;
-                       ASSERT(di->addrext);
-
-                       /* shift the high bit(s) from pa to ae */
-                       ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
-                       pa &= ~PCI32ADDR_HIGH;
-
-                       if (direction == DMA_TX) {
-                               W_REG(di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
-                               SET_REG(di->osh, &di->d32txregs->control, XC_AE, ae <<XC_AE_SHIFT);
-                       } else {
-                               W_REG(di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
-                               SET_REG(di->osh, &di->d32rxregs->control, RC_AE, ae <<RC_AE_SHIFT);
-                       }
-               }
+_dma_ddtable_init (dma_info_t * di, uint direction, ulong pa)
+{
+  if (DMA64_ENAB (di))
+    {
+
+      if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+       {
+         if (direction == DMA_TX)
+           {
+             W_REG (di->osh, &di->d64txregs->addrlow,
+                    (pa + di->ddoffsetlow));
+             W_REG (di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
+           }
+         else
+           {
+             W_REG (di->osh, &di->d64rxregs->addrlow,
+                    (pa + di->ddoffsetlow));
+             W_REG (di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
+           }
+       }
+      else
+       {
+         /* DMA64 32bits address extension */
+         uint32 ae;
+         ASSERT (di->addrext);
+
+         /* shift the high bit(s) from pa to ae */
+         ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+         pa &= ~PCI32ADDR_HIGH;
+
+         if (direction == DMA_TX)
+           {
+             W_REG (di->osh, &di->d64txregs->addrlow,
+                    (pa + di->ddoffsetlow));
+             W_REG (di->osh, &di->d64txregs->addrhigh, di->ddoffsethigh);
+             SET_REG (di->osh, &di->d64txregs->control, D64_XC_AE,
+                      (ae << D64_XC_AE_SHIFT));
+           }
+         else
+           {
+             W_REG (di->osh, &di->d64rxregs->addrlow,
+                    (pa + di->ddoffsetlow));
+             W_REG (di->osh, &di->d64rxregs->addrhigh, di->ddoffsethigh);
+             SET_REG (di->osh, &di->d64rxregs->control, D64_RC_AE,
+                      (ae << D64_RC_AE_SHIFT));
+           }
+       }
+
+    }
+  else
+    {
+      if ((di->ddoffsetlow != SB_PCI_DMA) || !(pa & PCI32ADDR_HIGH))
+       {
+         if (direction == DMA_TX)
+           W_REG (di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
+         else
+           W_REG (di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
        }
+      else
+       {
+         /* dma32 address extension */
+         uint32 ae;
+         ASSERT (di->addrext);
+
+         /* shift the high bit(s) from pa to ae */
+         ae = (pa & PCI32ADDR_HIGH) >> PCI32ADDR_HIGH_SHIFT;
+         pa &= ~PCI32ADDR_HIGH;
+
+         if (direction == DMA_TX)
+           {
+             W_REG (di->osh, &di->d32txregs->addr, (pa + di->ddoffsetlow));
+             SET_REG (di->osh, &di->d32txregs->control, XC_AE,
+                      ae << XC_AE_SHIFT);
+           }
+         else
+           {
+             W_REG (di->osh, &di->d32rxregs->addr, (pa + di->ddoffsetlow));
+             SET_REG (di->osh, &di->d32rxregs->control, RC_AE,
+                      ae << RC_AE_SHIFT);
+           }
+       }
+    }
 }
 
 static void
-_dma_fifoloopbackenable(dma_info_t *di)
+_dma_fifoloopbackenable (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_fifoloopbackenable\n", di->name));
-       if (DMA64_ENAB(di))
-               OR_REG(di->osh, &di->d64txregs->control, D64_XC_LE);
-       else
-               OR_REG(di->osh, &di->d32txregs->control, XC_LE);
+  DMA_TRACE (("%s: dma_fifoloopbackenable\n", di->name));
+  if (DMA64_ENAB (di))
+    OR_REG (di->osh, &di->d64txregs->control, D64_XC_LE);
+  else
+    OR_REG (di->osh, &di->d32txregs->control, XC_LE);
 }
 
 static void
-_dma_rxinit(dma_info_t *di)
+_dma_rxinit (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_rxinit\n", di->name));
+  DMA_TRACE (("%s: dma_rxinit\n", di->name));
 
-       if (di->nrxd == 0)
-               return;
+  if (di->nrxd == 0)
+    return;
 
-       di->rxin = di->rxout = 0;
+  di->rxin = di->rxout = 0;
 
-       /* clear rx descriptor ring */
-       if (DMA64_ENAB(di)) {
-               BZERO_SM((void *)(uintptr)di->rxd64, (di->nrxd * sizeof(dma64dd_t)));
-               _dma_rxenable(di);
-               _dma_ddtable_init(di, DMA_RX, di->rxdpa);
-       } else {
-               BZERO_SM((void *)(uintptr)di->rxd32, (di->nrxd * sizeof(dma32dd_t)));
-               _dma_rxenable(di);
-               _dma_ddtable_init(di, DMA_RX, di->rxdpa);
-       }
+  /* clear rx descriptor ring */
+  if (DMA64_ENAB (di))
+    BZERO_SM ((void *) (uintptr) di->rxd64, (di->nrxd * sizeof (dma64dd_t)));
+  else
+    BZERO_SM ((void *) (uintptr) di->rxd32, (di->nrxd * sizeof (dma32dd_t)));
+
+  _dma_rxenable (di);
+  _dma_ddtable_init (di, DMA_RX, di->rxdpa);
 }
 
 static void
-_dma_rxenable(dma_info_t *di)
+_dma_rxenable (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_rxenable\n", di->name));
-
-       if (DMA64_ENAB(di))
-               W_REG(di->osh, &di->d64rxregs->control,
-                     ((di->rxoffset << D64_RC_RO_SHIFT) | D64_RC_RE));
-       else
-               W_REG(di->osh, &di->d32rxregs->control, ((di->rxoffset << RC_RO_SHIFT) | RC_RE));
+  DMA_TRACE (("%s: dma_rxenable\n", di->name));
+
+  if (DMA64_ENAB (di))
+    W_REG (di->osh, &di->d64rxregs->control,
+          ((di->rxoffset << D64_RC_RO_SHIFT) | D64_RC_RE));
+  else
+    W_REG (di->osh, &di->d32rxregs->control,
+          ((di->rxoffset << RC_RO_SHIFT) | RC_RE));
 }
 
 /* !! rx entry routine, returns a pointer to the next frame received,
  * or NULL if there are no more
  */
 static void *
-_dma_rx(dma_info_t *di)
-{
-       void *p;
-       uint len;
-       int skiplen = 0;
-
-       while ((p = _dma_getnextrxp(di, FALSE))) {
-               /* skip giant packets which span multiple rx descriptors */
-               if (skiplen > 0) {
-                       skiplen -= di->rxbufsize;
-                       if (skiplen < 0)
-                               skiplen = 0;
-                       PKTFREE(di->osh, p, FALSE);
-                       continue;
-               }
-
-               len = ltoh16(*(uint16*)(PKTDATA(di->osh, p)));
-               DMA_TRACE(("%s: dma_rx len %d\n", di->name, len));
-
-               /* bad frame length check */
-               if (len > (di->rxbufsize - di->rxoffset)) {
-                       DMA_ERROR(("%s: dma_rx: bad frame length (%d)\n", di->name, len));
-                       if (len > 0)
-                               skiplen = len - (di->rxbufsize - di->rxoffset);
-                       PKTFREE(di->osh, p, FALSE);
-                       di->hnddma.rxgiants++;
-                       continue;
-               }
-
-               /* set actual length */
-               PKTSETLEN(di->osh, p, (di->rxoffset + len));
-
-               break;
+_dma_rx (dma_info_t * di)
+{
+  void *p;
+  uint len;
+  int skiplen = 0;
+
+  while ((p = _dma_getnextrxp (di, FALSE)))
+    {
+      /* skip giant packets which span multiple rx descriptors */
+      if (skiplen > 0)
+       {
+         skiplen -= di->rxbufsize;
+         if (skiplen < 0)
+           skiplen = 0;
+         PKTFREE (di->osh, p, FALSE);
+         continue;
+       }
+
+      len = ltoh16 (*(uint16 *) (PKTDATA (di->osh, p)));
+      DMA_TRACE (("%s: dma_rx len %d\n", di->name, len));
+
+      /* bad frame length check */
+      if (len > (di->rxbufsize - di->rxoffset))
+       {
+         DMA_ERROR (("%s: dma_rx: bad frame length (%d)\n", di->name, len));
+         if (len > 0)
+           skiplen = len - (di->rxbufsize - di->rxoffset);
+         PKTFREE (di->osh, p, FALSE);
+         di->hnddma.rxgiants++;
+         continue;
        }
 
-       return (p);
+      /* set actual length */
+      PKTSETLEN (di->osh, p, (di->rxoffset + len));
+
+      break;
+    }
+
+  return (p);
 }
 
 /* post receive buffers */
 static void
-_dma_rxfill(dma_info_t *di)
-{
-       void *p;
-       uint rxin, rxout;
-       uint32 flags = 0;
-       uint n;
-       uint i;
-       uint32 pa;
-       uint extra_offset = 0;
-
-       /*
-        * Determine how many receive buffers we're lacking
-        * from the full complement, allocate, initialize,
-        * and post them, then update the chip rx lastdscr.
-        */
-
-       rxin = di->rxin;
-       rxout = di->rxout;
-
-       n = di->nrxpost - NRXDACTIVE(rxin, rxout);
-
-       DMA_TRACE(("%s: dma_rxfill: post %d\n", di->name, n));
-
-       if (di->rxbufsize > BCMEXTRAHDROOM)
-               extra_offset = BCMEXTRAHDROOM;
-
-       for (i = 0; i < n; i++) {
-               /* the di->rxbufsize doesn't include the extra headroom, we need to add it to the
-                  size to be allocated
-               */
-               if ((p = PKTGET(di->osh, di->rxbufsize + extra_offset,
-                               FALSE)) == NULL) {
-                       DMA_ERROR(("%s: dma_rxfill: out of rxbufs\n", di->name));
-                       di->hnddma.rxnobuf++;
-                       break;
-               }
-               /* reserve an extra headroom, if applicable */
-               if (extra_offset)
-                       PKTPULL(di->osh, p, extra_offset);
-
-               /* Do a cached write instead of uncached write since DMA_MAP
-                * will flush the cache.
-                */
-               *(uint32*)(PKTDATA(di->osh, p)) = 0;
-
-               pa = (uint32) DMA_MAP(di->osh, PKTDATA(di->osh, p),
-                                     di->rxbufsize, DMA_RX, p);
-
-               ASSERT(ISALIGNED(pa, 4));
-
-               /* save the free packet pointer */
-               ASSERT(di->rxp[rxout] == NULL);
-               di->rxp[rxout] = p;
-
-               /* reset flags for each descriptor */
-               flags = 0;
-               if (DMA64_ENAB(di)) {
-                       if (rxout == (di->nrxd - 1))
-                               flags = D64_CTRL1_EOT;
-
-                       dma64_dd_upd(di, di->rxd64, pa, rxout, &flags, di->rxbufsize);
-               } else {
-                       if (rxout == (di->nrxd - 1))
-                               flags = CTRL_EOT;
-
-                       dma32_dd_upd(di, di->rxd32, pa, rxout, &flags, di->rxbufsize);
-               }
-               rxout = NEXTRXD(rxout);
+_dma_rxfill (dma_info_t * di)
+{
+  void *p;
+  uint rxin, rxout;
+  uint32 flags = 0;
+  uint n;
+  uint i;
+  uint32 pa;
+  uint extra_offset = 0;
+
+  /*
+   * Determine how many receive buffers we're lacking
+   * from the full complement, allocate, initialize,
+   * and post them, then update the chip rx lastdscr.
+   */
+
+  rxin = di->rxin;
+  rxout = di->rxout;
+
+  n = di->nrxpost - NRXDACTIVE (rxin, rxout);
+
+  DMA_TRACE (("%s: dma_rxfill: post %d\n", di->name, n));
+
+  if (di->rxbufsize > BCMEXTRAHDROOM)
+    extra_offset = BCMEXTRAHDROOM;
+
+  for (i = 0; i < n; i++)
+    {
+      /* the di->rxbufsize doesn't include the extra headroom, we need to add it to the
+         size to be allocated
+       */
+      if ((p = PKTGET (di->osh, di->rxbufsize + extra_offset, FALSE)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_rxfill: out of rxbufs\n", di->name));
+         di->hnddma.rxnobuf++;
+         break;
        }
+      /* reserve an extra headroom, if applicable */
+      if (extra_offset)
+       PKTPULL (di->osh, p, extra_offset);
 
-       di->rxout = rxout;
+      /* Do a cached write instead of uncached write since DMA_MAP
+       * will flush the cache.
+       */
+      *(uint32 *) (PKTDATA (di->osh, p)) = 0;
 
-       /* update the chip lastdscr pointer */
-       if (DMA64_ENAB(di)) {
-               W_REG(di->osh, &di->d64rxregs->ptr, I2B(rxout, dma64dd_t));
-       } else {
-               W_REG(di->osh, &di->d32rxregs->ptr, I2B(rxout, dma32dd_t));
-       }
-}
+      pa = (uint32) DMA_MAP (di->osh, PKTDATA (di->osh, p),
+                            di->rxbufsize, DMA_RX, p, &di->rxp_dmah[rxout]);
 
-/* like getnexttxp but no reclaim */
-static void *
-_dma_peeknexttxp(dma_info_t *di)
-{
-       uint end, i;
+      ASSERT (ISALIGNED (pa, 4));
+
+      /* save the free packet pointer */
+      ASSERT (di->rxp[rxout] == NULL);
+      di->rxp[rxout] = p;
 
-       if (di->ntxd == 0)
-               return (NULL);
+      /* reset flags for each descriptor */
+      flags = 0;
+      if (DMA64_ENAB (di))
+       {
+         if (rxout == (di->nrxd - 1))
+           flags = D64_CTRL1_EOT;
 
-       if (DMA64_ENAB(di)) {
-               end = B2I(R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK, dma64dd_t);
-       } else {
-               end = B2I(R_REG(di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+         dma64_dd_upd (di, di->rxd64, pa, rxout, &flags, di->rxbufsize);
        }
+      else
+       {
+         if (rxout == (di->nrxd - 1))
+           flags = CTRL_EOT;
 
-       for (i = di->txin; i != end; i = NEXTTXD(i))
-               if (di->txp[i])
-                       return (di->txp[i]);
+         dma32_dd_upd (di, di->rxd32, pa, rxout, &flags, di->rxbufsize);
+       }
+      rxout = NEXTRXD (rxout);
+    }
+
+  di->rxout = rxout;
+
+  /* update the chip lastdscr pointer */
+  if (DMA64_ENAB (di))
+    {
+      W_REG (di->osh, &di->d64rxregs->ptr, I2B (rxout, dma64dd_t));
+    }
+  else
+    {
+      W_REG (di->osh, &di->d32rxregs->ptr, I2B (rxout, dma32dd_t));
+    }
+}
 
-       return (NULL);
+/* like getnexttxp but no reclaim */
+static void *
+_dma_peeknexttxp (dma_info_t * di)
+{
+  uint end, i;
+
+  if (di->ntxd == 0)
+    return (NULL);
+
+  if (DMA64_ENAB (di))
+    {
+      end =
+       B2I (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK,
+            dma64dd_t);
+    }
+  else
+    {
+      end =
+       B2I (R_REG (di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+    }
+
+  for (i = di->txin; i != end; i = NEXTTXD (i))
+    if (di->txp[i])
+      return (di->txp[i]);
+
+  return (NULL);
 }
 
 static void
-_dma_rxreclaim(dma_info_t *di)
+_dma_rxreclaim (dma_info_t * di)
 {
-       void *p;
+  void *p;
 
-       /* "unused local" warning suppression for OSLs that
-        * define PKTFREE() without using the di->osh arg
-        */
-       di = di;
+  /* "unused local" warning suppression for OSLs that
+   * define PKTFREE() without using the di->osh arg
+   */
+  di = di;
 
-       DMA_TRACE(("%s: dma_rxreclaim\n", di->name));
+  DMA_TRACE (("%s: dma_rxreclaim\n", di->name));
 
-       while ((p = _dma_getnextrxp(di, TRUE)))
-               PKTFREE(di->osh, p, FALSE);
+  while ((p = _dma_getnextrxp (di, TRUE)))
+    PKTFREE (di->osh, p, FALSE);
 }
 
 static void *
-_dma_getnextrxp(dma_info_t *di, bool forceall)
+_dma_getnextrxp (dma_info_t * di, bool forceall)
 {
-       if (di->nrxd == 0)
-               return (NULL);
-
-       if (DMA64_ENAB(di)) {
-               return dma64_getnextrxp(di, forceall);
-       } else {
-               return dma32_getnextrxp(di, forceall);
-       }
+  if (di->nrxd == 0)
+    return (NULL);
+
+  if (DMA64_ENAB (di))
+    {
+      return dma64_getnextrxp (di, forceall);
+    }
+  else
+    {
+      return dma32_getnextrxp (di, forceall);
+    }
 }
 
 static void
-_dma_txblock(dma_info_t *di)
+_dma_txblock (dma_info_t * di)
 {
-       di->hnddma.txavail = 0;
+  di->hnddma.txavail = 0;
 }
 
 static void
-_dma_txunblock(dma_info_t *di)
+_dma_txunblock (dma_info_t * di)
 {
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
 }
 
 static uint
-_dma_txactive(dma_info_t *di)
+_dma_txactive (dma_info_t * di)
 {
-       return (NTXDACTIVE(di->txin, di->txout));
+  return (NTXDACTIVE (di->txin, di->txout));
 }
 
 static void
-_dma_counterreset(dma_info_t *di)
+_dma_counterreset (dma_info_t * di)
 {
-       /* reset all software counter */
-       di->hnddma.rxgiants = 0;
-       di->hnddma.rxnobuf = 0;
-       di->hnddma.txnobuf = 0;
+  /* reset all software counter */
+  di->hnddma.rxgiants = 0;
+  di->hnddma.rxnobuf = 0;
+  di->hnddma.txnobuf = 0;
 }
 
 /* get the address of the var in order to change later */
 static uintptr
-_dma_getvar(dma_info_t *di, const char *name)
+_dma_getvar (dma_info_t * di, const char *name)
 {
-       if (!strcmp(name, "&txavail"))
-               return ((uintptr) &(di->hnddma.txavail));
-       else {
-               ASSERT(0);
-       }
-       return (0);
+  if (!strcmp (name, "&txavail"))
+    return ((uintptr) & (di->hnddma.txavail));
+  else
+    {
+      ASSERT (0);
+    }
+  return (0);
 }
 
 void
-dma_txpioloopback(osl_t *osh, dma32regs_t *regs)
+dma_txpioloopback (osl_t * osh, dma32regs_t * regs)
 {
-       OR_REG(osh, &regs->control, XC_LE);
+  OR_REG (osh, &regs->control, XC_LE);
 }
 
+#ifdef BCMDBG
+static void
+dma32_dumpring (dma_info_t * di, struct bcmstrbuf *b, dma32dd_t * ring,
+               uint start, uint end, uint max_num)
+{
+  uint i;
+
+  for (i = start; i != end; i = XXD ((i + 1), max_num))
+    {
+      /* in the format of high->low 8 bytes */
+      bcm_bprintf (b, "ring index %d: 0x%x %x\n", i, ring[i].addr,
+                  ring[i].ctrl);
+    }
+}
+
+static void
+dma32_dumptx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  if (di->ntxd == 0)
+    return;
+
+  bcm_bprintf (b, "DMA32: txd32 %p txdpa 0x%lx txp %p txin %d txout %d "
+              "txavail %d\n", di->txd32, di->txdpa, di->txp, di->txin,
+              di->txout, di->hnddma.txavail);
+
+  bcm_bprintf (b, "xmtcontrol 0x%x xmtaddr 0x%x xmtptr 0x%x xmtstatus 0x%x\n",
+              R_REG (di->osh, &di->d32txregs->control),
+              R_REG (di->osh, &di->d32txregs->addr),
+              R_REG (di->osh, &di->d32txregs->ptr),
+              R_REG (di->osh, &di->d32txregs->status));
+
+  if (dumpring && di->txd32)
+    dma32_dumpring (di, b, di->txd32, di->txin, di->txout, di->ntxd);
+}
+
+static void
+dma32_dumprx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  if (di->nrxd == 0)
+    return;
+
+  bcm_bprintf (b, "DMA32: rxd32 %p rxdpa 0x%lx rxp %p rxin %d rxout %d\n",
+              di->rxd32, di->rxdpa, di->rxp, di->rxin, di->rxout);
+
+  bcm_bprintf (b, "rcvcontrol 0x%x rcvaddr 0x%x rcvptr 0x%x rcvstatus 0x%x\n",
+              R_REG (di->osh, &di->d32rxregs->control),
+              R_REG (di->osh, &di->d32rxregs->addr),
+              R_REG (di->osh, &di->d32rxregs->ptr),
+              R_REG (di->osh, &di->d32rxregs->status));
+  if (di->rxd32 && dumpring)
+    dma32_dumpring (di, b, di->rxd32, di->rxin, di->rxout, di->nrxd);
+}
+
+static void
+dma32_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  dma32_dumptx (di, b, dumpring);
+  dma32_dumprx (di, b, dumpring);
+}
+
+static void
+dma64_dumpring (dma_info_t * di, struct bcmstrbuf *b, dma64dd_t * ring,
+               uint start, uint end, uint max_num)
+{
+  uint i;
+
+  for (i = start; i != end; i = XXD ((i + 1), max_num))
+    {
+      /* in the format of high->low 16 bytes */
+      bcm_bprintf (b, "ring index %d: 0x%x %x %x %x\n",
+                  i, ring[i].addrhigh, ring[i].addrlow, ring[i].ctrl2,
+                  ring[i].ctrl1);
+    }
+}
+
+static void
+dma64_dumptx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  if (di->ntxd == 0)
+    return;
+
+  bcm_bprintf (b, "DMA64: txd64 %p txdpa 0x%lx txp %p txin %d txout %d "
+              "txavail %d\n", di->txd64, di->txdpa, di->txp, di->txin,
+              di->txout, di->hnddma.txavail);
+
+  bcm_bprintf (b, "xmtcontrol 0x%x xmtaddrlow 0x%x xmtaddrhigh 0x%x "
+              "xmtptr 0x%x xmtstatus0 0x%x xmtstatus1 0x%x\n",
+              R_REG (di->osh, &di->d64txregs->control),
+              R_REG (di->osh, &di->d64txregs->addrlow),
+              R_REG (di->osh, &di->d64txregs->addrhigh),
+              R_REG (di->osh, &di->d64txregs->ptr),
+              R_REG (di->osh, &di->d64txregs->status0),
+              R_REG (di->osh, &di->d64txregs->status1));
+
+  if (dumpring && di->txd64)
+    {
+      dma64_dumpring (di, b, di->txd64, di->txin, di->txout, di->ntxd);
+    }
+}
+
+static void
+dma64_dumprx (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  if (di->nrxd == 0)
+    return;
+
+  bcm_bprintf (b, "DMA64: rxd64 %p rxdpa 0x%lx rxp %p rxin %d rxout %d\n",
+              di->rxd64, di->rxdpa, di->rxp, di->rxin, di->rxout);
+
+  bcm_bprintf (b, "rcvcontrol 0x%x rcvaddrlow 0x%x rcvaddrhigh 0x%x rcvptr "
+              "0x%x rcvstatus0 0x%x rcvstatus1 0x%x\n",
+              R_REG (di->osh, &di->d64rxregs->control),
+              R_REG (di->osh, &di->d64rxregs->addrlow),
+              R_REG (di->osh, &di->d64rxregs->addrhigh),
+              R_REG (di->osh, &di->d64rxregs->ptr),
+              R_REG (di->osh, &di->d64rxregs->status0),
+              R_REG (di->osh, &di->d64rxregs->status1));
+  if (di->rxd64 && dumpring)
+    {
+      dma64_dumpring (di, b, di->rxd64, di->rxin, di->rxout, di->nrxd);
+    }
+}
+
+static void
+dma64_dump (dma_info_t * di, struct bcmstrbuf *b, bool dumpring)
+{
+  dma64_dumptx (di, b, dumpring);
+  dma64_dumprx (di, b, dumpring);
+}
+
+#endif /* BCMDBG */
 
 
 /* 32 bits DMA functions */
 static void
-dma32_txinit(dma_info_t *di)
+dma32_txinit (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txinit\n", di->name));
+  DMA_TRACE (("%s: dma_txinit\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       di->txin = di->txout = 0;
-       di->hnddma.txavail = di->ntxd - 1;
+  di->txin = di->txout = 0;
+  di->hnddma.txavail = di->ntxd - 1;
 
-       /* clear tx descriptor ring */
-       BZERO_SM((void *)(uintptr)di->txd32, (di->ntxd * sizeof(dma32dd_t)));
-       W_REG(di->osh, &di->d32txregs->control, XC_XE);
-       _dma_ddtable_init(di, DMA_TX, di->txdpa);
+  /* clear tx descriptor ring */
+  BZERO_SM ((void *) (uintptr) di->txd32, (di->ntxd * sizeof (dma32dd_t)));
+  W_REG (di->osh, &di->d32txregs->control, XC_XE);
+  _dma_ddtable_init (di, DMA_TX, di->txdpa);
 }
 
 static bool
-dma32_txenabled(dma_info_t *di)
+dma32_txenabled (dma_info_t * di)
 {
-       uint32 xc;
+  uint32 xc;
 
-       /* If the chip is dead, it is not enabled :-) */
-       xc = R_REG(di->osh, &di->d32txregs->control);
-       return ((xc != 0xffffffff) && (xc & XC_XE));
+  /* If the chip is dead, it is not enabled :-) */
+  xc = R_REG (di->osh, &di->d32txregs->control);
+  return ((xc != 0xffffffff) && (xc & XC_XE));
 }
 
 static void
-dma32_txsuspend(dma_info_t *di)
+dma32_txsuspend (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txsuspend\n", di->name));
+  DMA_TRACE (("%s: dma_txsuspend\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       OR_REG(di->osh, &di->d32txregs->control, XC_SE);
+  OR_REG (di->osh, &di->d32txregs->control, XC_SE);
 }
 
 static void
-dma32_txresume(dma_info_t *di)
+dma32_txresume (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txresume\n", di->name));
+  DMA_TRACE (("%s: dma_txresume\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       AND_REG(di->osh, &di->d32txregs->control, ~XC_SE);
+  AND_REG (di->osh, &di->d32txregs->control, ~XC_SE);
 }
 
 static bool
-dma32_txsuspended(dma_info_t *di)
+dma32_txsuspended (dma_info_t * di)
 {
-       return (di->ntxd == 0) || ((R_REG(di->osh, &di->d32txregs->control) & XC_SE) == XC_SE);
+  return (di->ntxd == 0)
+    || ((R_REG (di->osh, &di->d32txregs->control) & XC_SE) == XC_SE);
 }
 
 static void
-dma32_txreclaim(dma_info_t *di, bool forceall)
+dma32_txreclaim (dma_info_t * di, bool forceall)
 {
-       void *p;
+  void *p;
 
-       DMA_TRACE(("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
+  DMA_TRACE (("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
 
-       while ((p = dma32_getnexttxp(di, forceall)))
-               PKTFREE(di->osh, p, TRUE);
+  while ((p = dma32_getnexttxp (di, forceall)))
+    PKTFREE (di->osh, p, TRUE);
 }
 
 static bool
-dma32_txstopped(dma_info_t *di)
+dma32_txstopped (dma_info_t * di)
 {
-       return ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) == XS_XS_STOPPED);
+  return ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) ==
+         XS_XS_STOPPED);
 }
 
 static bool
-dma32_rxstopped(dma_info_t *di)
+dma32_rxstopped (dma_info_t * di)
 {
-       return ((R_REG(di->osh, &di->d32rxregs->status) & RS_RS_MASK) == RS_RS_STOPPED);
+  return ((R_REG (di->osh, &di->d32rxregs->status) & RS_RS_MASK) ==
+         RS_RS_STOPPED);
 }
 
 static bool
-dma32_alloc(dma_info_t *di, uint direction)
-{
-       uint size;
-       uint ddlen;
-       void *va;
-
-       ddlen = sizeof(dma32dd_t);
-
-       size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
-
-       if (!ISALIGNED(DMA_CONSISTENT_ALIGN, D32RINGALIGN))
-               size += D32RINGALIGN;
-
-
-       if (direction == DMA_TX) {
-               if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->txdpa, &di->tx_dmah)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
-                                  di->name));
-                       return FALSE;
-               }
-
-               di->txd32 = (dma32dd_t *) ROUNDUP((uintptr)va, D32RINGALIGN);
-               di->txdalign = (uint)((int8*)(uintptr)di->txd32 - (int8*)va);
-               di->txdpa += di->txdalign;
-               di->txdalloc = size;
-               ASSERT(ISALIGNED((uintptr)di->txd32, D32RINGALIGN));
-       } else {
-               if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->rxdpa, &di->rx_dmah)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
-                                  di->name));
-                       return FALSE;
-               }
-               di->rxd32 = (dma32dd_t *) ROUNDUP((uintptr)va, D32RINGALIGN);
-               di->rxdalign = (uint)((int8*)(uintptr)di->rxd32 - (int8*)va);
-               di->rxdpa += di->rxdalign;
-               di->rxdalloc = size;
-               ASSERT(ISALIGNED((uintptr)di->rxd32, D32RINGALIGN));
+dma32_alloc (dma_info_t * di, uint direction)
+{
+  uint size;
+  uint ddlen;
+  void *va;
+
+  ddlen = sizeof (dma32dd_t);
+
+  size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
+
+  if (!ISALIGNED (DMA_CONSISTENT_ALIGN, D32RINGALIGN))
+    size += D32RINGALIGN;
+
+
+  if (direction == DMA_TX)
+    {
+      if ((va =
+          DMA_ALLOC_CONSISTENT (di->osh, size, &di->txdpa,
+                                &di->tx_dmah)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
+                     di->name));
+         return FALSE;
        }
 
-       return TRUE;
+      di->txd32 = (dma32dd_t *) ROUNDUP ((uintptr) va, D32RINGALIGN);
+      di->txdalign = (uint) ((int8 *) (uintptr) di->txd32 - (int8 *) va);
+      di->txdpa += di->txdalign;
+      di->txdalloc = size;
+      ASSERT (ISALIGNED ((uintptr) di->txd32, D32RINGALIGN));
+    }
+  else
+    {
+      if ((va =
+          DMA_ALLOC_CONSISTENT (di->osh, size, &di->rxdpa,
+                                &di->rx_dmah)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
+                     di->name));
+         return FALSE;
+       }
+      di->rxd32 = (dma32dd_t *) ROUNDUP ((uintptr) va, D32RINGALIGN);
+      di->rxdalign = (uint) ((int8 *) (uintptr) di->rxd32 - (int8 *) va);
+      di->rxdpa += di->rxdalign;
+      di->rxdalloc = size;
+      ASSERT (ISALIGNED ((uintptr) di->rxd32, D32RINGALIGN));
+    }
+
+  return TRUE;
 }
 
 static bool
-dma32_txreset(dma_info_t *di)
+dma32_txreset (dma_info_t * di)
 {
-       uint32 status;
+  uint32 status;
 
-       if (di->ntxd == 0)
-               return TRUE;
+  if (di->ntxd == 0)
+    return TRUE;
 
-       /* suspend tx DMA first */
-       W_REG(di->osh, &di->d32txregs->control, XC_SE);
-       SPINWAIT(((status = (R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK))
-                != XS_XS_DISABLED) &&
-                (status != XS_XS_IDLE) &&
-                (status != XS_XS_STOPPED),
-                (10000));
+  /* suspend tx DMA first */
+  W_REG (di->osh, &di->d32txregs->control, XC_SE);
+  SPINWAIT (((status = (R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK))
+            != XS_XS_DISABLED) &&
+           (status != XS_XS_IDLE) && (status != XS_XS_STOPPED), (10000));
 
-       W_REG(di->osh, &di->d32txregs->control, 0);
-       SPINWAIT(((status = (R_REG(di->osh,
-                &di->d32txregs->status) & XS_XS_MASK)) != XS_XS_DISABLED),
-                10000);
+  W_REG (di->osh, &di->d32txregs->control, 0);
+  SPINWAIT (((status = (R_REG (di->osh,
+                              &di->d32txregs->status) & XS_XS_MASK)) !=
+            XS_XS_DISABLED), 10000);
 
-       /* wait for the last transaction to complete */
-       OSL_DELAY(300);
+  /* wait for the last transaction to complete */
+  OSL_DELAY (300);
 
-       return (status == XS_XS_DISABLED);
+  return (status == XS_XS_DISABLED);
 }
 
 static bool
-dma32_rxidle(dma_info_t *di)
+dma32_rxidle (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_rxidle\n", di->name));
+  DMA_TRACE (("%s: dma_rxidle\n", di->name));
 
-       if (di->nrxd == 0)
-               return TRUE;
+  if (di->nrxd == 0)
+    return TRUE;
 
-       return ((R_REG(di->osh, &di->d32rxregs->status) & RS_CD_MASK) ==
-               R_REG(di->osh, &di->d32rxregs->ptr));
+  return ((R_REG (di->osh, &di->d32rxregs->status) & RS_CD_MASK) ==
+         R_REG (di->osh, &di->d32rxregs->ptr));
 }
 
 static bool
-dma32_rxreset(dma_info_t *di)
+dma32_rxreset (dma_info_t * di)
 {
-       uint32 status;
+  uint32 status;
 
-       if (di->nrxd == 0)
-               return TRUE;
+  if (di->nrxd == 0)
+    return TRUE;
 
-       W_REG(di->osh, &di->d32rxregs->control, 0);
-       SPINWAIT(((status = (R_REG(di->osh,
-                &di->d32rxregs->status) & RS_RS_MASK)) != RS_RS_DISABLED),
-                10000);
+  W_REG (di->osh, &di->d32rxregs->control, 0);
+  SPINWAIT (((status = (R_REG (di->osh,
+                              &di->d32rxregs->status) & RS_RS_MASK)) !=
+            RS_RS_DISABLED), 10000);
 
-       return (status == RS_RS_DISABLED);
+  return (status == RS_RS_DISABLED);
 }
 
 static bool
-dma32_rxenabled(dma_info_t *di)
+dma32_rxenabled (dma_info_t * di)
 {
-       uint32 rc;
+  uint32 rc;
 
-       rc = R_REG(di->osh, &di->d32rxregs->control);
-       return ((rc != 0xffffffff) && (rc & RC_RE));
+  rc = R_REG (di->osh, &di->d32rxregs->control);
+  return ((rc != 0xffffffff) && (rc & RC_RE));
 }
 
 static bool
-dma32_txsuspendedidle(dma_info_t *di)
+dma32_txsuspendedidle (dma_info_t * di)
 {
-       if (di->ntxd == 0)
-               return TRUE;
+  if (di->ntxd == 0)
+    return TRUE;
 
-       if (!(R_REG(di->osh, &di->d32txregs->control) & XC_SE))
-               return 0;
+  if (!(R_REG (di->osh, &di->d32txregs->control) & XC_SE))
+    return 0;
 
-       if ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) != XS_XS_IDLE)
-               return 0;
+  if ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) != XS_XS_IDLE)
+    return 0;
 
-       OSL_DELAY(2);
-       return ((R_REG(di->osh, &di->d32txregs->status) & XS_XS_MASK) == XS_XS_IDLE);
+  OSL_DELAY (2);
+  return ((R_REG (di->osh, &di->d32txregs->status) & XS_XS_MASK) ==
+         XS_XS_IDLE);
 }
 
 /* !! tx entry routine
@@ -1171,77 +1518,81 @@ dma32_txsuspendedidle(dma_info_t *di)
  * dma buffers can cross 4 Kbyte page boundaries.
  */
 static int
-dma32_txfast(dma_info_t *di, void *p0, bool commit)
-{
-       void *p, *next;
-       uchar *data;
-       uint len;
-       uint txout;
-       uint32 flags = 0;
-       uint32 pa;
-
-       DMA_TRACE(("%s: dma_txfast\n", di->name));
-
-       txout = di->txout;
-
-       /*
-        * Walk the chain of packet buffers
-        * allocating and initializing transmit descriptor entries.
-        */
-       for (p = p0; p; p = next) {
-               data = PKTDATA(di->osh, p);
-               len = PKTLEN(di->osh, p);
-               next = PKTNEXT(di->osh, p);
-
-               /* return nonzero if out of tx descriptors */
-               if (NEXTTXD(txout) == di->txin)
-                       goto outoftxd;
-
-               if (len == 0)
-                       continue;
-
-               /* get physical address of buffer start */
-               pa = (uint32) DMA_MAP(di->osh, data, len, DMA_TX, p);
-
-               flags = 0;
-               if (p == p0)
-                       flags |= CTRL_SOF;
-               if (next == NULL)
-                       flags |= (CTRL_IOC | CTRL_EOF);
-               if (txout == (di->ntxd - 1))
-                       flags |= CTRL_EOT;
-
-               dma32_dd_upd(di, di->txd32, pa, txout, &flags, len);
-               ASSERT(di->txp[txout] == NULL);
-
-               txout = NEXTTXD(txout);
-       }
+dma32_txfast (dma_info_t * di, void *p0, bool commit)
+{
+  void *p, *next;
+  uchar *data;
+  uint len;
+  uint txout;
+  uint32 flags = 0;
+  uint32 pa;
+
+  DMA_TRACE (("%s: dma_txfast\n", di->name));
+
+  txout = di->txout;
+
+  /*
+   * Walk the chain of packet buffers
+   * allocating and initializing transmit descriptor entries.
+   */
+  for (p = p0; p; p = next)
+    {
+      data = PKTDATA (di->osh, p);
+      len = PKTLEN (di->osh, p);
+      next = PKTNEXT (di->osh, p);
+
+      /* return nonzero if out of tx descriptors */
+      if (NEXTTXD (txout) == di->txin)
+       goto outoftxd;
+
+      if (len == 0)
+       continue;
+
+      /* get physical address of buffer start */
+      pa =
+       (uint32) DMA_MAP (di->osh, data, len, DMA_TX, p,
+                         &di->txp_dmah[txout]);
+
+      flags = 0;
+      if (p == p0)
+       flags |= CTRL_SOF;
+      if (next == NULL)
+       flags |= (CTRL_IOC | CTRL_EOF);
+      if (txout == (di->ntxd - 1))
+       flags |= CTRL_EOT;
 
-       /* if last txd eof not set, fix it */
-       if (!(flags & CTRL_EOF))
-               W_SM(&di->txd32[PREVTXD(txout)].ctrl, BUS_SWAP32(flags | CTRL_IOC | CTRL_EOF));
+      dma32_dd_upd (di, di->txd32, pa, txout, &flags, len);
+      ASSERT (di->txp[txout] == NULL);
 
-       /* save the packet */
-       di->txp[PREVTXD(txout)] = p0;
+      txout = NEXTTXD (txout);
+    }
 
-       /* bump the tx descriptor index */
-       di->txout = txout;
+  /* if last txd eof not set, fix it */
+  if (!(flags & CTRL_EOF))
+    W_SM (&di->txd32[PREVTXD (txout)].ctrl,
+         BUS_SWAP32 (flags | CTRL_IOC | CTRL_EOF));
 
-       /* kick the chip */
-       if (commit)
-               W_REG(di->osh, &di->d32txregs->ptr, I2B(txout, dma32dd_t));
+  /* save the packet */
+  di->txp[PREVTXD (txout)] = p0;
 
-       /* tx flow control */
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+  /* bump the tx descriptor index */
+  di->txout = txout;
 
-       return (0);
+  /* kick the chip */
+  if (commit)
+    W_REG (di->osh, &di->d32txregs->ptr, I2B (txout, dma32dd_t));
+
+  /* tx flow control */
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+  return (0);
 
 outoftxd:
-       DMA_ERROR(("%s: dma_txfast: out of txds\n", di->name));
-       PKTFREE(di->osh, p0, TRUE);
-       di->hnddma.txavail = 0;
-       di->hnddma.txnobuf++;
-       return (-1);
+  DMA_ERROR (("%s: dma_txfast: out of txds\n", di->name));
+  PKTFREE (di->osh, p0, TRUE);
+  di->hnddma.txavail = 0;
+  di->hnddma.txnobuf++;
+  return (-1);
 }
 
 /*
@@ -1251,431 +1602,456 @@ outoftxd:
  * regardless of the value of the hardware "curr" pointer.
  */
 static void *
-dma32_getnexttxp(dma_info_t *di, bool forceall)
+dma32_getnexttxp (dma_info_t * di, bool forceall)
 {
-       uint start, end, i;
-       void *txp;
+  uint start, end, i;
+  void *txp;
 
-       DMA_TRACE(("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
+  DMA_TRACE (("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
 
-       if (di->ntxd == 0)
-               return (NULL);
+  if (di->ntxd == 0)
+    return (NULL);
 
-       txp = NULL;
+  txp = NULL;
 
-       start = di->txin;
-       if (forceall)
-               end = di->txout;
-       else
-               end = B2I(R_REG(di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
+  start = di->txin;
+  if (forceall)
+    end = di->txout;
+  else
+    end =
+      B2I (R_REG (di->osh, &di->d32txregs->status) & XS_CD_MASK, dma32dd_t);
 
-       if ((start == 0) && (end > di->txout))
-               goto bogus;
+  if ((start == 0) && (end > di->txout))
+    goto bogus;
 
-       for (i = start; i != end && !txp; i = NEXTTXD(i)) {
-               DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->txd32[i].addr)) - di->dataoffsetlow),
-                         (BUS_SWAP32(R_SM(&di->txd32[i].ctrl)) & CTRL_BC_MASK),
-                         DMA_TX, di->txp[i]);
+  for (i = start; i != end && !txp; i = NEXTTXD (i))
+    {
+      DMA_UNMAP (di->osh,
+                (BUS_SWAP32 (R_SM (&di->txd32[i].addr)) - di->dataoffsetlow),
+                (BUS_SWAP32 (R_SM (&di->txd32[i].ctrl)) & CTRL_BC_MASK),
+                DMA_TX, di->txp[i], &di->txp_dmah[i]);
 
-               W_SM(&di->txd32[i].addr, 0xdeadbeef);
-               txp = di->txp[i];
-               di->txp[i] = NULL;
-       }
+      W_SM (&di->txd32[i].addr, 0xdeadbeef);
+      txp = di->txp[i];
+      di->txp[i] = NULL;
+    }
 
-       di->txin = i;
+  di->txin = i;
 
-       /* tx flow control */
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+  /* tx flow control */
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
 
-       return (txp);
+  return (txp);
 
 bogus:
 /*
        DMA_ERROR(("dma_getnexttxp: bogus curr: start %d end %d txout %d force %d\n",
                start, end, di->txout, forceall));
 */
-       return (NULL);
+  return (NULL);
 }
 
 static void *
-dma32_getnextrxp(dma_info_t *di, bool forceall)
+dma32_getnextrxp (dma_info_t * di, bool forceall)
 {
-       uint i;
-       void *rxp;
+  uint i;
+  void *rxp;
 
-       /* if forcing, dma engine must be disabled */
-       ASSERT(!forceall || !dma32_rxenabled(di));
+  /* if forcing, dma engine must be disabled */
+  ASSERT (!forceall || !dma32_rxenabled (di));
 
-       i = di->rxin;
+  i = di->rxin;
 
-       /* return if no packets posted */
-       if (i == di->rxout)
-               return (NULL);
+  /* return if no packets posted */
+  if (i == di->rxout)
+    return (NULL);
 
-       /* ignore curr if forceall */
-       if (!forceall && (i == B2I(R_REG(di->osh, &di->d32rxregs->status) & RS_CD_MASK, dma32dd_t)))
-               return (NULL);
+  /* ignore curr if forceall */
+  if (!forceall
+      && (i ==
+         B2I (R_REG (di->osh, &di->d32rxregs->status) & RS_CD_MASK,
+              dma32dd_t)))
+    return (NULL);
 
-       /* get the packet pointer that corresponds to the rx descriptor */
-       rxp = di->rxp[i];
-       ASSERT(rxp);
-       di->rxp[i] = NULL;
+  /* get the packet pointer that corresponds to the rx descriptor */
+  rxp = di->rxp[i];
+  ASSERT (rxp);
+  di->rxp[i] = NULL;
 
-       /* clear this packet from the descriptor ring */
-       DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->rxd32[i].addr)) - di->dataoffsetlow),
-                 di->rxbufsize, DMA_RX, rxp);
+  /* clear this packet from the descriptor ring */
+  DMA_UNMAP (di->osh,
+            (BUS_SWAP32 (R_SM (&di->rxd32[i].addr)) - di->dataoffsetlow),
+            di->rxbufsize, DMA_RX, rxp, &di->rxp_dmah[i]);
 
-       W_SM(&di->rxd32[i].addr, 0xdeadbeef);
+  W_SM (&di->rxd32[i].addr, 0xdeadbeef);
 
-       di->rxin = NEXTRXD(i);
+  di->rxin = NEXTRXD (i);
 
-       return (rxp);
+  return (rxp);
 }
 
 /*
  * Rotate all active tx dma ring entries "forward" by (ActiveDescriptor - txin).
  */
 static void
-dma32_txrotate(dma_info_t *di)
+dma32_txrotate (dma_info_t * di)
 {
-       uint ad;
-       uint nactive;
-       uint rot;
-       uint old, new;
-       uint32 w;
-       uint first, last;
-
-       ASSERT(dma32_txsuspendedidle(di));
-
-       nactive = _dma_txactive(di);
-       ad = B2I(((R_REG(di->osh, &di->d32txregs->status) & XS_AD_MASK) >> XS_AD_SHIFT), dma32dd_t);
-       rot = TXD(ad - di->txin);
-
-       ASSERT(rot < di->ntxd);
-
-       /* full-ring case is a lot harder - don't worry about this */
-       if (rot >= (di->ntxd - nactive)) {
-               DMA_ERROR(("%s: dma_txrotate: ring full - punt\n", di->name));
-               return;
-       }
-
-       first = di->txin;
-       last = PREVTXD(di->txout);
-
-       /* move entries starting at last and moving backwards to first */
-       for (old = last; old != PREVTXD(first); old = PREVTXD(old)) {
-               new = TXD(old + rot);
-
-               /*
-                * Move the tx dma descriptor.
-                * EOT is set only in the last entry in the ring.
-                */
-               w = BUS_SWAP32(R_SM(&di->txd32[old].ctrl)) & ~CTRL_EOT;
-               if (new == (di->ntxd - 1))
-                       w |= CTRL_EOT;
-               W_SM(&di->txd32[new].ctrl, BUS_SWAP32(w));
-               W_SM(&di->txd32[new].addr, R_SM(&di->txd32[old].addr));
-
-               /* zap the old tx dma descriptor address field */
-               W_SM(&di->txd32[old].addr, BUS_SWAP32(0xdeadbeef));
-
-               /* move the corresponding txp[] entry */
-               ASSERT(di->txp[new] == NULL);
-               di->txp[new] = di->txp[old];
-               di->txp[old] = NULL;
-       }
-
-       /* update txin and txout */
-       di->txin = ad;
-       di->txout = TXD(di->txout + rot);
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
-
-       /* kick the chip */
-       W_REG(di->osh, &di->d32txregs->ptr, I2B(di->txout, dma32dd_t));
+  uint ad;
+  uint nactive;
+  uint rot;
+  uint old, new;
+  uint32 w;
+  uint first, last;
+
+  ASSERT (dma32_txsuspendedidle (di));
+
+  nactive = _dma_txactive (di);
+  ad =
+    B2I (((R_REG (di->osh, &di->d32txregs->status) & XS_AD_MASK) >>
+         XS_AD_SHIFT), dma32dd_t);
+  rot = TXD (ad - di->txin);
+
+  ASSERT (rot < di->ntxd);
+
+  /* full-ring case is a lot harder - don't worry about this */
+  if (rot >= (di->ntxd - nactive))
+    {
+      DMA_ERROR (("%s: dma_txrotate: ring full - punt\n", di->name));
+      return;
+    }
+
+  first = di->txin;
+  last = PREVTXD (di->txout);
+
+  /* move entries starting at last and moving backwards to first */
+  for (old = last; old != PREVTXD (first); old = PREVTXD (old))
+    {
+      new = TXD (old + rot);
+
+      /*
+       * Move the tx dma descriptor.
+       * EOT is set only in the last entry in the ring.
+       */
+      w = BUS_SWAP32 (R_SM (&di->txd32[old].ctrl)) & ~CTRL_EOT;
+      if (new == (di->ntxd - 1))
+       w |= CTRL_EOT;
+      W_SM (&di->txd32[new].ctrl, BUS_SWAP32 (w));
+      W_SM (&di->txd32[new].addr, R_SM (&di->txd32[old].addr));
+
+      /* zap the old tx dma descriptor address field */
+      W_SM (&di->txd32[old].addr, BUS_SWAP32 (0xdeadbeef));
+
+      /* move the corresponding txp[] entry */
+      ASSERT (di->txp[new] == NULL);
+      di->txp[new] = di->txp[old];
+      di->txp[old] = NULL;
+    }
+
+  /* update txin and txout */
+  di->txin = ad;
+  di->txout = TXD (di->txout + rot);
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+  /* kick the chip */
+  W_REG (di->osh, &di->d32txregs->ptr, I2B (di->txout, dma32dd_t));
 }
 
 /* 64 bits DMA functions */
 
 #ifdef BCMDMA64
 static void
-dma64_txinit(dma_info_t *di)
+dma64_txinit (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txinit\n", di->name));
+  DMA_TRACE (("%s: dma_txinit\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       di->txin = di->txout = 0;
-       di->hnddma.txavail = di->ntxd - 1;
+  di->txin = di->txout = 0;
+  di->hnddma.txavail = di->ntxd - 1;
 
-       /* clear tx descriptor ring */
-       BZERO_SM((void *)(uintptr)di->txd64, (di->ntxd * sizeof(dma64dd_t)));
-       W_REG(di->osh, &di->d64txregs->control, D64_XC_XE);
-       _dma_ddtable_init(di, DMA_TX, di->txdpa);
+  /* clear tx descriptor ring */
+  BZERO_SM ((void *) (uintptr) di->txd64, (di->ntxd * sizeof (dma64dd_t)));
+  W_REG (di->osh, &di->d64txregs->control, D64_XC_XE);
+  _dma_ddtable_init (di, DMA_TX, di->txdpa);
 }
 
 static bool
-dma64_txenabled(dma_info_t *di)
+dma64_txenabled (dma_info_t * di)
 {
-       uint32 xc;
+  uint32 xc;
 
-       /* If the chip is dead, it is not enabled :-) */
-       xc = R_REG(di->osh, &di->d64txregs->control);
-       return ((xc != 0xffffffff) && (xc & D64_XC_XE));
+  /* If the chip is dead, it is not enabled :-) */
+  xc = R_REG (di->osh, &di->d64txregs->control);
+  return ((xc != 0xffffffff) && (xc & D64_XC_XE));
 }
 
 static void
-dma64_txsuspend(dma_info_t *di)
+dma64_txsuspend (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txsuspend\n", di->name));
+  DMA_TRACE (("%s: dma_txsuspend\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       OR_REG(di->osh, &di->d64txregs->control, D64_XC_SE);
+  OR_REG (di->osh, &di->d64txregs->control, D64_XC_SE);
 }
 
 static void
-dma64_txresume(dma_info_t *di)
+dma64_txresume (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_txresume\n", di->name));
+  DMA_TRACE (("%s: dma_txresume\n", di->name));
 
-       if (di->ntxd == 0)
-               return;
+  if (di->ntxd == 0)
+    return;
 
-       AND_REG(di->osh, &di->d64txregs->control, ~D64_XC_SE);
+  AND_REG (di->osh, &di->d64txregs->control, ~D64_XC_SE);
 }
 
 static bool
-dma64_txsuspended(dma_info_t *di)
+dma64_txsuspended (dma_info_t * di)
 {
-       return (di->ntxd == 0) || ((R_REG(di->osh, &di->d64txregs->control) & D64_XC_SE)
-               == D64_XC_SE);
+  return (di->ntxd == 0)
+    || ((R_REG (di->osh, &di->d64txregs->control) & D64_XC_SE) == D64_XC_SE);
 }
 
 static void
-dma64_txreclaim(dma_info_t *di, bool forceall)
+dma64_txreclaim (dma_info_t * di, bool forceall)
 {
-       void *p;
+  void *p;
 
-       DMA_TRACE(("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
+  DMA_TRACE (("%s: dma_txreclaim %s\n", di->name, forceall ? "all" : ""));
 
-       while ((p = dma64_getnexttxp(di, forceall)))
-               PKTFREE(di->osh, p, TRUE);
+  while ((p = dma64_getnexttxp (di, forceall)))
+    PKTFREE (di->osh, p, TRUE);
 }
 
 static bool
-dma64_txstopped(dma_info_t *di)
+dma64_txstopped (dma_info_t * di)
 {
-       return ((R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) == D64_XS0_XS_STOPPED);
+  return ((R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) ==
+         D64_XS0_XS_STOPPED);
 }
 
 static bool
-dma64_rxstopped(dma_info_t *di)
+dma64_rxstopped (dma_info_t * di)
 {
-       return ((R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK) == D64_RS0_RS_STOPPED);
+  return ((R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK) ==
+         D64_RS0_RS_STOPPED);
 }
 
 static bool
-dma64_alloc(dma_info_t *di, uint direction)
-{
-       uint size;
-       uint ddlen;
-       uint32 alignbytes;
-       void *va;
-
-       ddlen = sizeof(dma64dd_t);
-
-       size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
-
-       alignbytes = di->dma64align;
-
-       if (!ISALIGNED(DMA_CONSISTENT_ALIGN, alignbytes))
-               size += alignbytes;
-
-       if (direction == DMA_TX) {
-               if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->txdpa, &di->tx_dmah)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
-                                  di->name));
-                       return FALSE;
-               }
-
-               di->txd64 = (dma64dd_t *) ROUNDUP((uintptr)va, alignbytes);
-               di->txdalign = (uint)((int8*)(uintptr)di->txd64 - (int8*)va);
-               di->txdpa += di->txdalign;
-               di->txdalloc = size;
-               ASSERT(ISALIGNED((uintptr)di->txd64, alignbytes));
-       } else {
-               if ((va = DMA_ALLOC_CONSISTENT(di->osh, size, &di->rxdpa, &di->rx_dmah)) == NULL) {
-                       DMA_ERROR(("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
-                                  di->name));
-                       return FALSE;
-               }
-               di->rxd64 = (dma64dd_t *) ROUNDUP((uintptr)va, alignbytes);
-               di->rxdalign = (uint)((int8*)(uintptr)di->rxd64 - (int8*)va);
-               di->rxdpa += di->rxdalign;
-               di->rxdalloc = size;
-               ASSERT(ISALIGNED((uintptr)di->rxd64, alignbytes));
+dma64_alloc (dma_info_t * di, uint direction)
+{
+  uint size;
+  uint ddlen;
+  uint32 alignbytes;
+  void *va;
+
+  ddlen = sizeof (dma64dd_t);
+
+  size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen);
+
+  alignbytes = di->dma64align;
+
+  if (!ISALIGNED (DMA_CONSISTENT_ALIGN, alignbytes))
+    size += alignbytes;
+
+  if (direction == DMA_TX)
+    {
+      if ((va =
+          DMA_ALLOC_CONSISTENT (di->osh, size, &di->txdpa,
+                                &di->tx_dmah)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(ntxd) failed\n",
+                     di->name));
+         return FALSE;
        }
 
-       return TRUE;
+      di->txd64 = (dma64dd_t *) ROUNDUP ((uintptr) va, alignbytes);
+      di->txdalign = (uint) ((int8 *) (uintptr) di->txd64 - (int8 *) va);
+      di->txdpa += di->txdalign;
+      di->txdalloc = size;
+      ASSERT (ISALIGNED ((uintptr) di->txd64, alignbytes));
+    }
+  else
+    {
+      if ((va =
+          DMA_ALLOC_CONSISTENT (di->osh, size, &di->rxdpa,
+                                &di->rx_dmah)) == NULL)
+       {
+         DMA_ERROR (("%s: dma_attach: DMA_ALLOC_CONSISTENT(nrxd) failed\n",
+                     di->name));
+         return FALSE;
+       }
+      di->rxd64 = (dma64dd_t *) ROUNDUP ((uintptr) va, alignbytes);
+      di->rxdalign = (uint) ((int8 *) (uintptr) di->rxd64 - (int8 *) va);
+      di->rxdpa += di->rxdalign;
+      di->rxdalloc = size;
+      ASSERT (ISALIGNED ((uintptr) di->rxd64, alignbytes));
+    }
+
+  return TRUE;
 }
 
 static bool
-dma64_txreset(dma_info_t *di)
+dma64_txreset (dma_info_t * di)
 {
-       uint32 status;
+  uint32 status;
 
-       if (di->ntxd == 0)
-               return TRUE;
+  if (di->ntxd == 0)
+    return TRUE;
 
-       /* suspend tx DMA first */
-       W_REG(di->osh, &di->d64txregs->control, D64_XC_SE);
-       SPINWAIT(((status = (R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
-                 D64_XS0_XS_DISABLED) &&
-                (status != D64_XS0_XS_IDLE) &&
-                (status != D64_XS0_XS_STOPPED),
-                10000);
+  /* suspend tx DMA first */
+  W_REG (di->osh, &di->d64txregs->control, D64_XC_SE);
+  SPINWAIT (((status =
+             (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
+            D64_XS0_XS_DISABLED) && (status != D64_XS0_XS_IDLE)
+           && (status != D64_XS0_XS_STOPPED), 10000);
 
-       W_REG(di->osh, &di->d64txregs->control, 0);
-       SPINWAIT(((status = (R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
-                 D64_XS0_XS_DISABLED),
-                10000);
+  W_REG (di->osh, &di->d64txregs->control, 0);
+  SPINWAIT (((status =
+             (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK)) !=
+            D64_XS0_XS_DISABLED), 10000);
 
-       /* wait for the last transaction to complete */
-       OSL_DELAY(300);
+  /* wait for the last transaction to complete */
+  OSL_DELAY (300);
 
-       return (status == D64_XS0_XS_DISABLED);
+  return (status == D64_XS0_XS_DISABLED);
 }
 
 static bool
-dma64_rxidle(dma_info_t *di)
+dma64_rxidle (dma_info_t * di)
 {
-       DMA_TRACE(("%s: dma_rxidle\n", di->name));
+  DMA_TRACE (("%s: dma_rxidle\n", di->name));
 
-       if (di->nrxd == 0)
-               return TRUE;
+  if (di->nrxd == 0)
+    return TRUE;
 
-       return ((R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK) ==
-               R_REG(di->osh, &di->d64rxregs->ptr));
+  return ((R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK) ==
+         R_REG (di->osh, &di->d64rxregs->ptr));
 }
 
 static bool
-dma64_rxreset(dma_info_t *di)
+dma64_rxreset (dma_info_t * di)
 {
-       uint32 status;
+  uint32 status;
 
-       if (di->nrxd == 0)
-               return TRUE;
+  if (di->nrxd == 0)
+    return TRUE;
 
-       W_REG(di->osh, &di->d64rxregs->control, 0);
-       SPINWAIT(((status = (R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK)) !=
-                 D64_RS0_RS_DISABLED),
-                10000);
+  W_REG (di->osh, &di->d64rxregs->control, 0);
+  SPINWAIT (((status =
+             (R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_RS_MASK)) !=
+            D64_RS0_RS_DISABLED), 10000);
 
-       return (status == D64_RS0_RS_DISABLED);
+  return (status == D64_RS0_RS_DISABLED);
 }
 
 static bool
-dma64_rxenabled(dma_info_t *di)
+dma64_rxenabled (dma_info_t * di)
 {
-       uint32 rc;
+  uint32 rc;
 
-       rc = R_REG(di->osh, &di->d64rxregs->control);
-       return ((rc != 0xffffffff) && (rc & D64_RC_RE));
+  rc = R_REG (di->osh, &di->d64rxregs->control);
+  return ((rc != 0xffffffff) && (rc & D64_RC_RE));
 }
 
 static bool
-dma64_txsuspendedidle(dma_info_t *di)
+dma64_txsuspendedidle (dma_info_t * di)
 {
 
-       if (di->ntxd == 0)
-               return TRUE;
+  if (di->ntxd == 0)
+    return TRUE;
 
-       if (!(R_REG(di->osh, &di->d64txregs->control) & D64_XC_SE))
-               return 0;
+  if (!(R_REG (di->osh, &di->d64txregs->control) & D64_XC_SE))
+    return 0;
 
-       if ((R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) == D64_XS0_XS_IDLE)
-               return 1;
+  if ((R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_XS_MASK) ==
+      D64_XS0_XS_IDLE)
+    return 1;
 
-       return 0;
+  return 0;
 }
 
 
 /* !! tx entry routine */
 static int
-dma64_txfast(dma_info_t *di, void *p0, bool commit)
-{
-       void *p, *next;
-       uchar *data;
-       uint len;
-       uint txout;
-       uint32 flags = 0;
-       uint32 pa;
-
-       DMA_TRACE(("%s: dma_txfast\n", di->name));
-
-       txout = di->txout;
-
-       /*
-        * Walk the chain of packet buffers
-        * allocating and initializing transmit descriptor entries.
-        */
-       for (p = p0; p; p = next) {
-               data = PKTDATA(di->osh, p);
-               len = PKTLEN(di->osh, p);
-               next = PKTNEXT(di->osh, p);
-
-               /* return nonzero if out of tx descriptors */
-               if (NEXTTXD(txout) == di->txin)
-                       goto outoftxd;
-
-               if (len == 0)
-                       continue;
-
-               /* get physical address of buffer start */
-               pa = (uint32) DMA_MAP(di->osh, data, len, DMA_TX, p);
-
-               flags = 0;
-               if (p == p0)
-                       flags |= D64_CTRL1_SOF;
-               if (next == NULL)
-                       flags |= (D64_CTRL1_IOC | D64_CTRL1_EOF);
-               if (txout == (di->ntxd - 1))
-                       flags |= D64_CTRL1_EOT;
-
-               dma64_dd_upd(di, di->txd64, pa, txout, &flags, len);
-               ASSERT(di->txp[txout] == NULL);
-
-               txout = NEXTTXD(txout);
-       }
+dma64_txfast (dma_info_t * di, void *p0, bool commit)
+{
+  void *p, *next;
+  uchar *data;
+  uint len;
+  uint txout;
+  uint32 flags = 0;
+  uint32 pa;
 
-       /* if last txd eof not set, fix it */
-       if (!(flags & D64_CTRL1_EOF))
-               W_SM(&di->txd64[PREVTXD(txout)].ctrl1,
-                    BUS_SWAP32(flags | D64_CTRL1_IOC | D64_CTRL1_EOF));
+  DMA_TRACE (("%s: dma_txfast\n", di->name));
 
-       /* save the packet */
-       di->txp[PREVTXD(txout)] = p0;
+  txout = di->txout;
 
-       /* bump the tx descriptor index */
-       di->txout = txout;
+  /*
+   * Walk the chain of packet buffers
+   * allocating and initializing transmit descriptor entries.
+   */
+  for (p = p0; p; p = next)
+    {
+      data = PKTDATA (di->osh, p);
+      len = PKTLEN (di->osh, p);
+      next = PKTNEXT (di->osh, p);
 
-       /* kick the chip */
-       if (commit)
-               W_REG(di->osh, &di->d64txregs->ptr, I2B(txout, dma64dd_t));
+      /* return nonzero if out of tx descriptors */
+      if (NEXTTXD (txout) == di->txin)
+       goto outoftxd;
 
-       /* tx flow control */
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+      if (len == 0)
+       continue;
 
-       return (0);
+      /* get physical address of buffer start */
+      pa =
+       (uint32) DMA_MAP (di->osh, data, len, DMA_TX, p,
+                         &di->txp_dmah[txout]);
+
+      flags = 0;
+      if (p == p0)
+       flags |= D64_CTRL1_SOF;
+      if (next == NULL)
+       flags |= (D64_CTRL1_IOC | D64_CTRL1_EOF);
+      if (txout == (di->ntxd - 1))
+       flags |= D64_CTRL1_EOT;
+
+      dma64_dd_upd (di, di->txd64, pa, txout, &flags, len);
+      ASSERT (di->txp[txout] == NULL);
+
+      txout = NEXTTXD (txout);
+    }
+
+  /* if last txd eof not set, fix it */
+  if (!(flags & D64_CTRL1_EOF))
+    W_SM (&di->txd64[PREVTXD (txout)].ctrl1,
+         BUS_SWAP32 (flags | D64_CTRL1_IOC | D64_CTRL1_EOF));
+
+  /* save the packet */
+  di->txp[PREVTXD (txout)] = p0;
+
+  /* bump the tx descriptor index */
+  di->txout = txout;
+
+  /* kick the chip */
+  if (commit)
+    W_REG (di->osh, &di->d64txregs->ptr, I2B (txout, dma64dd_t));
+
+  /* tx flow control */
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+  return (0);
 
 outoftxd:
-       DMA_ERROR(("%s: dma_txfast: out of txds\n", di->name));
-       PKTFREE(di->osh, p0, TRUE);
-       di->hnddma.txavail = 0;
-       di->hnddma.txnobuf++;
-       return (-1);
+  DMA_ERROR (("%s: dma_txfast: out of txds\n", di->name));
+  PKTFREE (di->osh, p0, TRUE);
+  di->hnddma.txavail = 0;
+  di->hnddma.txnobuf++;
+  return (-1);
 }
 
 /*
@@ -1685,209 +2061,221 @@ outoftxd:
  * regardless of the value of the hardware "curr" pointer.
  */
 static void *
-dma64_getnexttxp(dma_info_t *di, bool forceall)
+dma64_getnexttxp (dma_info_t * di, bool forceall)
 {
-       uint start, end, i;
-       void *txp;
+  uint start, end, i;
+  void *txp;
 
-       DMA_TRACE(("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
+  DMA_TRACE (("%s: dma_getnexttxp %s\n", di->name, forceall ? "all" : ""));
 
-       if (di->ntxd == 0)
-               return (NULL);
+  if (di->ntxd == 0)
+    return (NULL);
 
-       txp = NULL;
+  txp = NULL;
 
-       start = di->txin;
-       if (forceall)
-               end = di->txout;
-       else
-               end = B2I(R_REG(di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK, dma64dd_t);
+  start = di->txin;
+  if (forceall)
+    end = di->txout;
+  else
+    end =
+      B2I (R_REG (di->osh, &di->d64txregs->status0) & D64_XS0_CD_MASK,
+          dma64dd_t);
 
-       if ((start == 0) && (end > di->txout))
-               goto bogus;
+  if ((start == 0) && (end > di->txout))
+    goto bogus;
 
-       for (i = start; i != end && !txp; i = NEXTTXD(i)) {
-               DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->txd64[i].addrlow)) - di->dataoffsetlow),
-                         (BUS_SWAP32(R_SM(&di->txd64[i].ctrl2)) & D64_CTRL2_BC_MASK),
-                         DMA_TX, di->txp[i]);
+  for (i = start; i != end && !txp; i = NEXTTXD (i))
+    {
+      DMA_UNMAP (di->osh,
+                (BUS_SWAP32 (R_SM (&di->txd64[i].addrlow)) -
+                 di->dataoffsetlow),
+                (BUS_SWAP32 (R_SM (&di->txd64[i].ctrl2)) &
+                 D64_CTRL2_BC_MASK), DMA_TX, di->txp[i], &di->txp_dmah[i]);
 
-               W_SM(&di->txd64[i].addrlow, 0xdeadbeef);
-               W_SM(&di->txd64[i].addrhigh, 0xdeadbeef);
+      W_SM (&di->txd64[i].addrlow, 0xdeadbeef);
+      W_SM (&di->txd64[i].addrhigh, 0xdeadbeef);
 
-               txp = di->txp[i];
-               di->txp[i] = NULL;
-       }
+      txp = di->txp[i];
+      di->txp[i] = NULL;
+    }
 
-       di->txin = i;
+  di->txin = i;
 
-       /* tx flow control */
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
+  /* tx flow control */
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
 
-       return (txp);
+  return (txp);
 
 bogus:
 /*
        DMA_ERROR(("dma_getnexttxp: bogus curr: start %d end %d txout %d force %d\n",
                start, end, di->txout, forceall));
 */
-       return (NULL);
+  return (NULL);
 }
 
 static void *
-dma64_getnextrxp(dma_info_t *di, bool forceall)
+dma64_getnextrxp (dma_info_t * di, bool forceall)
 {
-       uint i;
-       void *rxp;
+  uint i;
+  void *rxp;
 
-       /* if forcing, dma engine must be disabled */
-       ASSERT(!forceall || !dma64_rxenabled(di));
+  /* if forcing, dma engine must be disabled */
+  ASSERT (!forceall || !dma64_rxenabled (di));
 
-       i = di->rxin;
+  i = di->rxin;
 
-       /* return if no packets posted */
-       if (i == di->rxout)
-               return (NULL);
+  /* return if no packets posted */
+  if (i == di->rxout)
+    return (NULL);
 
-       /* ignore curr if forceall */
-       if (!forceall &&
-           (i == B2I(R_REG(di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK, dma64dd_t)))
-               return (NULL);
+  /* ignore curr if forceall */
+  if (!forceall &&
+      (i ==
+       B2I (R_REG (di->osh, &di->d64rxregs->status0) & D64_RS0_CD_MASK,
+           dma64dd_t)))
+    return (NULL);
 
-       /* get the packet pointer that corresponds to the rx descriptor */
-       rxp = di->rxp[i];
-       ASSERT(rxp);
-       di->rxp[i] = NULL;
+  /* get the packet pointer that corresponds to the rx descriptor */
+  rxp = di->rxp[i];
+  ASSERT (rxp);
+  di->rxp[i] = NULL;
 
-       /* clear this packet from the descriptor ring */
-       DMA_UNMAP(di->osh, (BUS_SWAP32(R_SM(&di->rxd64[i].addrlow)) - di->dataoffsetlow),
-                 di->rxbufsize, DMA_RX, rxp);
+  /* clear this packet from the descriptor ring */
+  DMA_UNMAP (di->osh,
+            (BUS_SWAP32 (R_SM (&di->rxd64[i].addrlow)) - di->dataoffsetlow),
+            di->rxbufsize, DMA_RX, rxp, &di->rxp_dmah[i]);
 
-       W_SM(&di->rxd64[i].addrlow, 0xdeadbeef);
-       W_SM(&di->rxd64[i].addrhigh, 0xdeadbeef);
+  W_SM (&di->rxd64[i].addrlow, 0xdeadbeef);
+  W_SM (&di->rxd64[i].addrhigh, 0xdeadbeef);
 
-       di->rxin = NEXTRXD(i);
+  di->rxin = NEXTRXD (i);
 
-       return (rxp);
+  return (rxp);
 }
 
 static bool
-_dma64_addrext(osl_t *osh, dma64regs_t *dma64regs)
+_dma64_addrext (osl_t * osh, dma64regs_t * dma64regs)
 {
-       uint32 w;
-       OR_REG(osh, &dma64regs->control, D64_XC_AE);
-       w = R_REG(osh, &dma64regs->control);
-       AND_REG(osh, &dma64regs->control, ~D64_XC_AE);
-       return ((w & D64_XC_AE) == D64_XC_AE);
+  uint32 w;
+  OR_REG (osh, &dma64regs->control, D64_XC_AE);
+  w = R_REG (osh, &dma64regs->control);
+  AND_REG (osh, &dma64regs->control, ~D64_XC_AE);
+  return ((w & D64_XC_AE) == D64_XC_AE);
 }
 
 /*
  * Rotate all active tx dma ring entries "forward" by (ActiveDescriptor - txin).
  */
 static void
-dma64_txrotate(dma_info_t *di)
+dma64_txrotate (dma_info_t * di)
 {
-       uint ad;
-       uint nactive;
-       uint rot;
-       uint old, new;
-       uint32 w;
-       uint first, last;
-
-       ASSERT(dma64_txsuspendedidle(di));
-
-       nactive = _dma_txactive(di);
-       ad = B2I((R_REG(di->osh, &di->d64txregs->status1) & D64_XS1_AD_MASK), dma64dd_t);
-       rot = TXD(ad - di->txin);
-
-       ASSERT(rot < di->ntxd);
-
-       /* full-ring case is a lot harder - don't worry about this */
-       if (rot >= (di->ntxd - nactive)) {
-               DMA_ERROR(("%s: dma_txrotate: ring full - punt\n", di->name));
-               return;
-       }
-
-       first = di->txin;
-       last = PREVTXD(di->txout);
-
-       /* move entries starting at last and moving backwards to first */
-       for (old = last; old != PREVTXD(first); old = PREVTXD(old)) {
-               new = TXD(old + rot);
-
-               /*
-                * Move the tx dma descriptor.
-                * EOT is set only in the last entry in the ring.
-                */
-               w = BUS_SWAP32(R_SM(&di->txd64[old].ctrl1)) & ~D64_CTRL1_EOT;
-               if (new == (di->ntxd - 1))
-                       w |= D64_CTRL1_EOT;
-               W_SM(&di->txd64[new].ctrl1, BUS_SWAP32(w));
-
-               w = BUS_SWAP32(R_SM(&di->txd64[old].ctrl2));
-               W_SM(&di->txd64[new].ctrl2, BUS_SWAP32(w));
-
-               W_SM(&di->txd64[new].addrlow, R_SM(&di->txd64[old].addrlow));
-               W_SM(&di->txd64[new].addrhigh, R_SM(&di->txd64[old].addrhigh));
-
-               /* zap the old tx dma descriptor address field */
-               W_SM(&di->txd64[old].addrlow, BUS_SWAP32(0xdeadbeef));
-               W_SM(&di->txd64[old].addrhigh, BUS_SWAP32(0xdeadbeef));
-
-               /* move the corresponding txp[] entry */
-               ASSERT(di->txp[new] == NULL);
-               di->txp[new] = di->txp[old];
-               di->txp[old] = NULL;
-       }
-
-       /* update txin and txout */
-       di->txin = ad;
-       di->txout = TXD(di->txout + rot);
-       di->hnddma.txavail = di->ntxd - NTXDACTIVE(di->txin, di->txout) - 1;
-
-       /* kick the chip */
-       W_REG(di->osh, &di->d64txregs->ptr, I2B(di->txout, dma64dd_t));
+  uint ad;
+  uint nactive;
+  uint rot;
+  uint old, new;
+  uint32 w;
+  uint first, last;
+
+  ASSERT (dma64_txsuspendedidle (di));
+
+  nactive = _dma_txactive (di);
+  ad =
+    B2I ((R_REG (di->osh, &di->d64txregs->status1) & D64_XS1_AD_MASK),
+        dma64dd_t);
+  rot = TXD (ad - di->txin);
+
+  ASSERT (rot < di->ntxd);
+
+  /* full-ring case is a lot harder - don't worry about this */
+  if (rot >= (di->ntxd - nactive))
+    {
+      DMA_ERROR (("%s: dma_txrotate: ring full - punt\n", di->name));
+      return;
+    }
+
+  first = di->txin;
+  last = PREVTXD (di->txout);
+
+  /* move entries starting at last and moving backwards to first */
+  for (old = last; old != PREVTXD (first); old = PREVTXD (old))
+    {
+      new = TXD (old + rot);
+
+      /*
+       * Move the tx dma descriptor.
+       * EOT is set only in the last entry in the ring.
+       */
+      w = BUS_SWAP32 (R_SM (&di->txd64[old].ctrl1)) & ~D64_CTRL1_EOT;
+      if (new == (di->ntxd - 1))
+       w |= D64_CTRL1_EOT;
+      W_SM (&di->txd64[new].ctrl1, BUS_SWAP32 (w));
+
+      w = BUS_SWAP32 (R_SM (&di->txd64[old].ctrl2));
+      W_SM (&di->txd64[new].ctrl2, BUS_SWAP32 (w));
+
+      W_SM (&di->txd64[new].addrlow, R_SM (&di->txd64[old].addrlow));
+      W_SM (&di->txd64[new].addrhigh, R_SM (&di->txd64[old].addrhigh));
+
+      /* zap the old tx dma descriptor address field */
+      W_SM (&di->txd64[old].addrlow, BUS_SWAP32 (0xdeadbeef));
+      W_SM (&di->txd64[old].addrhigh, BUS_SWAP32 (0xdeadbeef));
+
+      /* move the corresponding txp[] entry */
+      ASSERT (di->txp[new] == NULL);
+      di->txp[new] = di->txp[old];
+      di->txp[old] = NULL;
+    }
+
+  /* update txin and txout */
+  di->txin = ad;
+  di->txout = TXD (di->txout + rot);
+  di->hnddma.txavail = di->ntxd - NTXDACTIVE (di->txin, di->txout) - 1;
+
+  /* kick the chip */
+  W_REG (di->osh, &di->d64txregs->ptr, I2B (di->txout, dma64dd_t));
 }
 
-#endif /* BCMDMA64 */
+#endif /* BCMDMA64 */
 
 uint
-dma_addrwidth(sb_t *sbh, void *dmaregs)
-{
-       dma32regs_t *dma32regs;
-       osl_t *osh;
-
-       osh = sb_osh(sbh);
-
-       if (DMA64_CAP) {
-               /* DMA engine is 64-bit capable */
-               if (((sb_coreflagshi(sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64)) {
-                       /* backplane are 64 bits capable */
-#if 0
-                       if (sb_backplane64(sbh))
-                               /* If bus is System Backplane or PCIE then we can access 64-bits */
-                               if ((BUSTYPE(sbh->bustype) == SB_BUS) ||
-                                   ((BUSTYPE(sbh->bustype) == PCI_BUS) &&
-                                       sbh->buscoretype == SB_PCIE))
-                                       return (DMADDRWIDTH_64);
-#endif
-
-                       /* DMA64 is always 32 bits capable, AE is always TRUE */
+dma_addrwidth (sb_t * sbh, void *dmaregs)
+{
+  dma32regs_t *dma32regs;
+  osl_t *osh;
+
+  osh = sb_osh (sbh);
+
+  if (DMA64_CAP)
+    {
+      /* DMA engine is 64-bit capable */
+      if (((sb_coreflagshi (sbh, 0, 0) & SBTMH_DMA64) == SBTMH_DMA64))
+       {
+         /* backplane are 64 bits capable */
+         if (sb_backplane64 (sbh))
+           /* If bus is System Backplane or PCIE then we can access 64-bits */
+           if ((BUSTYPE (sbh->bustype) == SB_BUS) ||
+               ((BUSTYPE (sbh->bustype) == PCI_BUS) &&
+                sbh->buscoretype == SB_PCIE))
+             return (DMADDRWIDTH_64);
+
+         /* DMA64 is always 32 bits capable, AE is always TRUE */
 #ifdef BCMDMA64
-                       ASSERT(_dma64_addrext(osh, (dma64regs_t *)dmaregs));
+         ASSERT (_dma64_addrext (osh, (dma64regs_t *) dmaregs));
 #endif
-                       return (DMADDRWIDTH_32);
-               }
+         return (DMADDRWIDTH_32);
        }
+    }
 
-       /* Start checking for 32-bit / 30-bit addressing */
-       dma32regs = (dma32regs_t *)dmaregs;
+  /* Start checking for 32-bit / 30-bit addressing */
+  dma32regs = (dma32regs_t *) dmaregs;
 
-       /* For System Backplane, PCIE bus or addrext feature, 32-bits ok */
-       if ((BUSTYPE(sbh->bustype) == SB_BUS) ||
-           ((BUSTYPE(sbh->bustype) == PCI_BUS) && sbh->buscoretype == SB_PCIE) ||
-           (_dma32_addrext(osh, dma32regs)))
-               return (DMADDRWIDTH_32);
+  /* For System Backplane, PCIE bus or addrext feature, 32-bits ok */
+  if ((BUSTYPE (sbh->bustype) == SB_BUS) ||
+      ((BUSTYPE (sbh->bustype) == PCI_BUS) && sbh->buscoretype == SB_PCIE) ||
+      (_dma32_addrext (osh, dma32regs)))
+    return (DMADDRWIDTH_32);
 
-       /* Fallthru */
-       return (DMADDRWIDTH_30);
+  /* Fallthru */
+  return (DMADDRWIDTH_30);
 }
index de74c067b2a389dd16b75867f59744fb00991b57..8d1b5acb6b0c82b069f09388eb63d5bac53e088a 100644 (file)
@@ -2,14 +2,14 @@
  * Generic Broadcom Home Networking Division (HND) DMA engine SW interface
  * This supports the following chips: BCM42xx, 44xx, 47xx .
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: hnddma.h,v 1.1.1.13 2006/04/08 06:13:39 honor Exp $
+ * $Id$
  */
 
 #ifndef        _hnddma_h_
@@ -39,7 +39,7 @@ typedef void* (*di_rx_t)(hnddma_t *dmah);
 typedef void (*di_rxfill_t)(hnddma_t *dmah);
 typedef void (*di_txreclaim_t)(hnddma_t *dmah, bool forceall);
 typedef void (*di_rxreclaim_t)(hnddma_t *dmah);
-typedef        uintptr (*di_getvar_t)(hnddma_t *dmah, char *name);
+typedef        uintptr (*di_getvar_t)(hnddma_t *dmah, const char *name);
 typedef void* (*di_getnexttxp_t)(hnddma_t *dmah, bool forceall);
 typedef void* (*di_getnextrxp_t)(hnddma_t *dmah, bool forceall);
 typedef void* (*di_peeknexttxp_t)(hnddma_t *dmah);
@@ -141,8 +141,12 @@ extern hnddma_t * dma_attach(osl_t *osh, char *name, sb_t *sbh, void *dmaregstx,
 #define dma_txactive(di)                ((di)->di_fn.txactive(di))
 #define dma_txrotate(di)                ((di)->di_fn.txrotate(di))
 #define dma_counterreset(di)            ((di)->di_fn.counterreset(di))
+#ifdef BCMDBG
+#define dma_dump(di, buf, dumpring)    ((di)->di_fn.dump(di, buf, dumpring))
+#define dma_dumptx(di, buf, dumpring)  ((di)->di_fn.dumptx(di, buf, dumpring))
+#define dma_dumprx(di, buf, dumpring)  ((di)->di_fn.dumprx(di, buf, dumpring))
+#endif
 
-#define DMA_DUMP_SIZE 2048
 /* return addresswidth allowed
  * This needs to be done after SB attach but before dma attach.
  * SB attach provides ability to probe backplane and dma core capabilities
index 24fd77daea53c3f7bbfab50aa2b8f17b9f15a674..cc55eb68e9d37321a44c5ab8d77077c7ffb666b1 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Linux OS Independent Layer
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: linux_osl.c,v 1.1.1.14 2006/04/08 06:13:39 honor Exp $
+ * $Id$
  */
 
 #define LINUX_OSL
 
 #include <typedefs.h>
 #include <bcmendian.h>
-#include <linux/module.h>
 #include <linuxver.h>
 #include <bcmdefs.h>
 #include <osl.h>
 #include "linux_osl.h"
-#include <bcmutils.h>
+#include "bcmutils.h"
 #include <linux/delay.h>
 #ifdef mips
 #include <asm/paccess.h>
 #endif /* mips */
 #include <pcicfg.h>
 
-#define PCI_CFG_RETRY          10      
+#define PCI_CFG_RETRY          10
 
 #define OS_HANDLE_MAGIC                0x1234abcd      /* Magic # to recognise osh */
-#define BCM_MEM_FILENAME_LEN   24              /* Mem. filename length */
-
-typedef struct bcm_mem_link {
-       struct bcm_mem_link *prev;
-       struct bcm_mem_link *next;
-       uint    size;
-       int     line;
-       char    file[BCM_MEM_FILENAME_LEN];
+#define BCM_MEM_FILENAME_LEN   24      /* Mem. filename length */
+
+typedef struct bcm_mem_link
+{
+  struct bcm_mem_link *prev;
+  struct bcm_mem_link *next;
+  uint size;
+  int line;
+  char file[BCM_MEM_FILENAME_LEN];
 } bcm_mem_link_t;
 
-static int16 linuxbcmerrormap[] =  \
-{      0,                      /* 0 */
-       -EINVAL,                /* BCME_ERROR */
-       -EINVAL,                /* BCME_BADARG */
-       -EINVAL,                /* BCME_BADOPTION */
-       -EINVAL,                /* BCME_NOTUP */
-       -EINVAL,                /* BCME_NOTDOWN */
-       -EINVAL,                /* BCME_NOTAP */
-       -EINVAL,                /* BCME_NOTSTA */
-       -EINVAL,                /* BCME_BADKEYIDX */
-       -EINVAL,                /* BCME_RADIOOFF */
-       -EINVAL,                /* BCME_NOTBANDLOCKED */
-       -EINVAL,                /* BCME_NOCLK */
-       -EINVAL,                /* BCME_BADRATESET */
-       -EINVAL,                /* BCME_BADBAND */
-       -E2BIG,                 /* BCME_BUFTOOSHORT */
-       -E2BIG,                 /* BCME_BUFTOOLONG */
-       -EBUSY,                 /* BCME_BUSY */
-       -EINVAL,                /* BCME_NOTASSOCIATED */
-       -EINVAL,                /* BCME_BADSSIDLEN */
-       -EINVAL,                /* BCME_OUTOFRANGECHAN */
-       -EINVAL,                /* BCME_BADCHAN */
-       -EFAULT,                /* BCME_BADADDR */
-       -ENOMEM,                /* BCME_NORESOURCE */
-       -EOPNOTSUPP,            /* BCME_UNSUPPORTED */
-       -EMSGSIZE,              /* BCME_BADLENGTH */
-       -EINVAL,                /* BCME_NOTREADY */
-       -EPERM,                 /* BCME_NOTPERMITTED */
-       -ENOMEM,                /* BCME_NOMEM */
-       -EINVAL,                /* BCME_ASSOCIATED */
-       -ERANGE,                /* BCME_RANGE */
-       -EINVAL,                /* BCME_NOTFOUND */
-       -EINVAL,                /* BCME_WME_NOT_ENABLED */
-       -EINVAL,                /* BCME_TSPEC_NOTFOUND */
-       -EINVAL,                /* BCME_ACM_NOTSUPPORTED */
-       -EINVAL,                /* BCME_NOT_WME_ASSOCIATION */
-       -EIO,                   /* BCME_SDIO_ERROR */
-       -ENODEV                 /* BCME_DONGLE_DOWN */
+#if 0
+struct osl_info
+{
+  osl_pubinfo_t pub;
+  uint magic;
+  void *pdev;
+  uint malloced;
+  uint failed;
+  uint bustype;
+  bcm_mem_link_t *dbgmem_list;
+#ifdef BCMDBG_PKT              /* pkt logging for debugging */
+  pktlist_info_t pktlist;
+#endif                         /* BCMDBG_PKT */
+};
+#endif
+
+static int16 linuxbcmerrormap[] = { 0, /* 0 */
+  -EINVAL,                     /* BCME_ERROR */
+  -EINVAL,                     /* BCME_BADARG */
+  -EINVAL,                     /* BCME_BADOPTION */
+  -EINVAL,                     /* BCME_NOTUP */
+  -EINVAL,                     /* BCME_NOTDOWN */
+  -EINVAL,                     /* BCME_NOTAP */
+  -EINVAL,                     /* BCME_NOTSTA */
+  -EINVAL,                     /* BCME_BADKEYIDX */
+  -EINVAL,                     /* BCME_RADIOOFF */
+  -EINVAL,                     /* BCME_NOTBANDLOCKED */
+  -EINVAL,                     /* BCME_NOCLK */
+  -EINVAL,                     /* BCME_BADRATESET */
+  -EINVAL,                     /* BCME_BADBAND */
+  -E2BIG,                      /* BCME_BUFTOOSHORT */
+  -E2BIG,                      /* BCME_BUFTOOLONG */
+  -EBUSY,                      /* BCME_BUSY */
+  -EINVAL,                     /* BCME_NOTASSOCIATED */
+  -EINVAL,                     /* BCME_BADSSIDLEN */
+  -EINVAL,                     /* BCME_OUTOFRANGECHAN */
+  -EINVAL,                     /* BCME_BADCHAN */
+  -EFAULT,                     /* BCME_BADADDR */
+  -ENOMEM,                     /* BCME_NORESOURCE */
+  -EOPNOTSUPP,                 /* BCME_UNSUPPORTED */
+  -EMSGSIZE,                   /* BCME_BADLENGTH */
+  -EINVAL,                     /* BCME_NOTREADY */
+  -EPERM,                      /* BCME_NOTPERMITTED */
+  -ENOMEM,                     /* BCME_NOMEM */
+  -EINVAL,                     /* BCME_ASSOCIATED */
+  -ERANGE,                     /* BCME_RANGE */
+  -EINVAL,                     /* BCME_NOTFOUND */
+  -EINVAL,                     /* BCME_WME_NOT_ENABLED */
+  -EINVAL,                     /* BCME_TSPEC_NOTFOUND */
+  -EINVAL,                     /* BCME_ACM_NOTSUPPORTED */
+  -EINVAL,                     /* BCME_NOT_WME_ASSOCIATION */
+  -EIO,                                /* BCME_SDIO_ERROR */
+  -ENODEV,                     /* BCME_DONGLE_DOWN */
+  -EINVAL                      /* BCME_VERSION */
+/* When an new error code is added to bcmutils.h, add os 
+ * spcecific error translation here as well
+ */
+/* check if BCME_LAST changed since the last time this function was updated */
+#if BCME_LAST != -37
+#error "You need to add a OS error translation in the linuxbcmerrormap \
+       for new error code defined in bcmuitls.h"
+#endif /* BCME_LAST != -37 */
 };
 
 /* translate bcmerrors into linux errors */
 int
-osl_error(int bcmerror)
+osl_error (int bcmerror)
 {
-       int abs_bcmerror;
-       int array_size = ARRAYSIZE(linuxbcmerrormap);
+  if (bcmerror > 0)
+    bcmerror = 0;
+  else if (bcmerror < BCME_LAST)
+    bcmerror = BCME_ERROR;
 
-       abs_bcmerror = ABS(bcmerror);
+  /* Array bounds covered by ASSERT in osl_attach */
+  return linuxbcmerrormap[-bcmerror];
+}
 
-       if (bcmerror > 0)
-               abs_bcmerror = 0;
+osl_t *
+osl_attach (void *pdev, uint bustype, bool pkttag)
+{
+  osl_t *osh;
+
+  osh = kmalloc (sizeof (osl_t), GFP_ATOMIC);
+  ASSERT (osh);
+
+  bzero (osh, sizeof (osl_t));
+
+  /* Check that error map has the right number of entries in it */
+  ASSERT (ABS (BCME_LAST) == (ARRAYSIZE (linuxbcmerrormap) - 1));
+
+  osh->magic = OS_HANDLE_MAGIC;
+  osh->malloced = 0;
+  osh->failed = 0;
+  osh->dbgmem_list = NULL;
+  osh->pdev = pdev;
+  osh->pub.pkttag = pkttag;
+  osh->bustype = bustype;
+
+  switch (bustype)
+    {
+    case PCI_BUS:
+    case SB_BUS:
+    case PCMCIA_BUS:
+      osh->pub.mmbus = TRUE;
+      break;
+    case JTAG_BUS:
+    case SDIO_BUS:
+      break;
+    default:
+      ASSERT (FALSE);
+      break;
+    }
+
+#ifdef BCMDBG
+  if (pkttag)
+    {
+      struct sk_buff *skb;
+      ASSERT (OSL_PKTTAG_SZ <= sizeof (skb->cb));
+    }
+#endif
+  return osh;
+}
 
-       else if (abs_bcmerror >= array_size)
-               abs_bcmerror = BCME_ERROR;
+void
+osl_detach (osl_t * osh)
+{
+  if (osh == NULL)
+    return;
 
-       return linuxbcmerrormap[abs_bcmerror];
+  ASSERT (osh->magic == OS_HANDLE_MAGIC);
+  kfree (osh);
 }
 
-osl_t *
-osl_attach(void *pdev, bool pkttag)
+/* Return a new packet. zero out pkttag */
+void *
+osl_pktget (osl_t * osh, uint len)
+{
+  struct sk_buff *skb;
+
+  if ((skb = dev_alloc_skb (len)))
+    {
+      skb_put (skb, len);
+      skb->priority = 0;
+
+#ifdef BCMDBG_PKT
+      pktlist_add (&(osh->pktlist), (void *) skb);
+#endif /* BCMDBG_PKT */
+
+      osh->pub.pktalloced++;
+    }
+
+  return ((void *) skb);
+}
+
+/* Free the driver packet. Free the tag if present */
+void
+osl_pktfree (osl_t * osh, void *p, bool send)
+{
+  struct sk_buff *skb, *nskb;
+
+  skb = (struct sk_buff *) p;
+
+  if (send && osh->pub.tx_fn)
+    osh->pub.tx_fn (osh->pub.tx_ctx, p, 0);
+
+  /* perversion: we use skb->next to chain multi-skb packets */
+  while (skb)
+    {
+      nskb = skb->next;
+      skb->next = NULL;
+
+#ifdef BCMDBG_PKT
+      pktlist_remove (&(osh->pktlist), (void *) skb);
+#endif /* BCMDBG_PKT */
+
+      if (skb->destructor)
+       {
+         /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if destructor exists
+          */
+         dev_kfree_skb_any (skb);
+       }
+      else
+       {
+         /* can free immediately (even in_irq()) if destructor does not exist */
+         dev_kfree_skb (skb);
+       }
+
+      osh->pub.pktalloced--;
+
+      skb = nskb;
+    }
+}
+
+uint32
+osl_pci_read_config (osl_t * osh, uint offset, uint size)
 {
-       osl_t *osh;
+  uint val;
+  uint retry = PCI_CFG_RETRY;
 
-       osh = kmalloc(sizeof(osl_t), GFP_ATOMIC);
-       ASSERT(osh);
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 
-       bzero(osh, sizeof(osl_t));
+  /* only 4byte access supported */
+  ASSERT (size == 4);
 
-       /*
-        * check the cases where
-        * 1.Error code Added to bcmerror table, but forgot to add it to the OS
-        * dependent error code
-        * 2. Error code is added to the bcmerror table, but forgot to add the
-        * corresponding errorstring(dummy call to bcmerrorstr)
-        */
-       bcmerrorstr(0);
-       ASSERT(ABS(BCME_LAST) == (ARRAYSIZE(linuxbcmerrormap) - 1));
+  do
+    {
+      pci_read_config_dword (osh->pdev, offset, &val);
+      if (val != 0xffffffff)
+       break;
+    }
+  while (retry--);
 
-       osh->magic = OS_HANDLE_MAGIC;
-       osh->malloced = 0;
-       osh->failed = 0;
-       osh->dbgmem_list = NULL;
-       osh->pdev = pdev;
-       osh->pub.pkttag = pkttag;
+#ifdef BCMDBG
+  if (retry < PCI_CFG_RETRY)
+    printk ("PCI CONFIG READ access to %d required %d retries\n", offset,
+           (PCI_CFG_RETRY - retry));
+#endif /* BCMDBG */
 
-       return osh;
+  return (val);
 }
 
 void
-osl_detach(osl_t *osh)
+osl_pci_write_config (osl_t * osh, uint offset, uint size, uint val)
 {
-       if (osh == NULL)
-               return;
+  uint retry = PCI_CFG_RETRY;
+
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+  /* only 4byte access supported */
+  ASSERT (size == 4);
+
+  do
+    {
+      pci_write_config_dword (osh->pdev, offset, val);
+      if (offset != PCI_BAR0_WIN)
+       break;
+      if (osl_pci_read_config (osh, offset, size) == val)
+       break;
+    }
+  while (retry--);
+
+#ifdef BCMDBG
+  if (retry < PCI_CFG_RETRY)
+    printk ("PCI CONFIG WRITE access to %d required %d retries\n", offset,
+           (PCI_CFG_RETRY - retry));
+#endif /* BCMDBG */
+}
 
-       ASSERT(osh->magic == OS_HANDLE_MAGIC);
-       kfree(osh);
+/* return bus # for the pci device pointed by osh->pdev */
+uint
+osl_pci_bus (osl_t * osh)
+{
+  ASSERT (osh && (osh->magic == OS_HANDLE_MAGIC) && osh->pdev);
+
+  return ((struct pci_dev *) osh->pdev)->bus->number;
 }
 
-/* Return a new packet. zero out pkttag */
-void*
-osl_pktget(osl_t *osh, uint len, bool send)
+/* return slot # for the pci device pointed by osh->pdev */
+uint
+osl_pci_slot (osl_t * osh)
 {
-       struct sk_buff *skb;
+  ASSERT (osh && (osh->magic == OS_HANDLE_MAGIC) && osh->pdev);
 
-       if ((skb = dev_alloc_skb(len))) {
-               skb_put(skb, len);
-               skb->priority = 0;
+  return PCI_SLOT (((struct pci_dev *) osh->pdev)->devfn);
+}
 
-#ifdef BCMDBG_PKT
-       pktlist_add(&(osh->pktlist), (void *) skb);
-#endif  /* BCMDBG_PKT */
+static void
+osl_pcmcia_attr (osl_t * osh, uint offset, char *buf, int size, bool write)
+{
+}
 
-               osh->pub.pktalloced++;
-       }
+void
+osl_pcmcia_read_attr (osl_t * osh, uint offset, void *buf, int size)
+{
+  osl_pcmcia_attr (osh, offset, (char *) buf, size, FALSE);
+}
+
+void
+osl_pcmcia_write_attr (osl_t * osh, uint offset, void *buf, int size)
+{
+  osl_pcmcia_attr (osh, offset, (char *) buf, size, TRUE);
+}
+
+
+#ifdef BCMDBG_MEM
+
+void *
+osl_debug_malloc (osl_t * osh, uint size, int line, char *file)
+{
+  bcm_mem_link_t *p;
+  char *basename;
+
+  ASSERT (size);
 
-       return ((void*) skb);
+  if ((p =
+       (bcm_mem_link_t *) osl_malloc (osh,
+                                     sizeof (bcm_mem_link_t) + size)) ==
+      NULL)
+    return (NULL);
+
+  p->size = size;
+  p->line = line;
+
+  basename = strrchr (file, '/');
+  /* skip the '/' */
+  if (basename)
+    basename++;
+
+  if (!basename)
+    basename = file;
+
+  strncpy (p->file, basename, BCM_MEM_FILENAME_LEN);
+  p->file[BCM_MEM_FILENAME_LEN - 1] = '\0';
+
+  /* link this block */
+  p->prev = NULL;
+  p->next = osh->dbgmem_list;
+  if (p->next)
+    p->next->prev = p;
+  osh->dbgmem_list = p;
+
+  return p + 1;
 }
 
-typedef void (*pktfree_cb_fn_t)(void *ctx, void *pkt, uint16 status);
-/* Free the driver packet. Free the tag if present */
 void
-osl_pktfree(osl_t *osh, void *p, bool send)
+osl_debug_mfree (osl_t * osh, void *addr, uint size, int line, char *file)
 {
-       struct sk_buff *skb, *nskb;
-       pktfree_cb_fn_t tx_fn = osh->pub.tx_fn;
+  bcm_mem_link_t *p =
+    (bcm_mem_link_t *) ((int8 *) addr - sizeof (bcm_mem_link_t));
+
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+  if (p->size == 0)
+    {
+      printk
+       ("osl_debug_mfree: double free on addr %p size %d at line %d file %s\n",
+        addr, size, line, file);
+      ASSERT (p->size);
+      return;
+    }
+
+  if (p->size != size)
+    {
+      printk
+       ("osl_debug_mfree: dealloc size %d does not match alloc size %d on addr %p"
+        " at line %d file %s\n", size, p->size, addr, line, file);
+      ASSERT (p->size == size);
+      return;
+    }
+
+  /* unlink this block */
+  if (p->prev)
+    p->prev->next = p->next;
+  if (p->next)
+    p->next->prev = p->prev;
+  if (osh->dbgmem_list == p)
+    osh->dbgmem_list = p->next;
+  p->next = p->prev = NULL;
+
+  osl_mfree (osh, p, size + sizeof (bcm_mem_link_t));
+}
 
-       skb = (struct sk_buff*) p;
-       
-       if (send && tx_fn)
-               tx_fn(osh->pub.tx_ctx, p, 0);
+int
+osl_debug_memdump (osl_t * osh, struct bcmstrbuf *b)
+{
+  bcm_mem_link_t *p;
 
-       /* perversion: we use skb->next to chain multi-skb packets */
-       while (skb) {
-               nskb = skb->next;
-               skb->next = NULL;
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 
-#ifdef BCMDBG_PKT
-               pktlist_remove(&(osh->pktlist), (void *) skb);
-#endif  /* BCMDBG_PKT */
+  bcm_bprintf (b, "   Address\tSize\tFile:line\n");
+  for (p = osh->dbgmem_list; p; p = p->next)
+    bcm_bprintf (b, "0x%08x\t%5d\t%s:%d\n",
+                (uintptr) p + sizeof (bcm_mem_link_t), p->size, p->file,
+                p->line);
 
-               if (skb->destructor) {
-                       /* cannot kfree_skb() on hard IRQ (net/core/skbuff.c) if destructor exists
-                        */
-                       dev_kfree_skb_any(skb);
-               } else {
-                       /* can free immediately (even in_irq()) if destructor does not exist */
-                       dev_kfree_skb(skb);
-               }
+  return 0;
+}
 
-               osh->pub.pktalloced--;
+#endif /* BCMDBG_MEM */
 
-               skb = nskb;
-       }
+void *
+osl_malloc (osl_t * osh, uint size)
+{
+  void *addr;
+
+  /* only ASSERT if osh is defined */
+  if (osh)
+    ASSERT (osh->magic == OS_HANDLE_MAGIC);
+
+  if ((addr = kmalloc (size, GFP_ATOMIC)) == NULL)
+    {
+      if (osh)
+       osh->failed++;
+      return (NULL);
+    }
+  if (osh)
+    osh->malloced += size;
+
+  return (addr);
 }
 
-void*
-osl_malloc(osl_t *osh, uint size)
+void
+osl_mfree (osl_t * osh, void *addr, uint size)
 {
-       void *addr;
+  if (osh)
+    {
+      ASSERT (osh->magic == OS_HANDLE_MAGIC);
+      osh->malloced -= size;
+    }
+  kfree (addr);
+}
 
-       /* only ASSERT if osh is defined */
-       if (osh)
-               ASSERT(osh->magic == OS_HANDLE_MAGIC);
+uint
+osl_malloced (osl_t * osh)
+{
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+  return (osh->malloced);
+}
 
-       if ((addr = kmalloc(size, GFP_ATOMIC)) == NULL) {
-               if (osh)
-                       osh->failed++;
-               return (NULL);
-       }
-       if (osh)
-               osh->malloced += size;
+uint
+osl_malloc_failed (osl_t * osh)
+{
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+  return (osh->failed);
+}
+
+void *
+osl_dma_alloc_consistent (osl_t * osh, uint size, ulong * pap)
+{
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
 
-       return (addr);
+  return (pci_alloc_consistent (osh->pdev, size, (dma_addr_t *) pap));
 }
 
 void
-osl_mfree(osl_t *osh, void *addr, uint size)
+osl_dma_free_consistent (osl_t * osh, void *va, uint size, ulong pa)
 {
-       if (osh) {
-               ASSERT(osh->magic == OS_HANDLE_MAGIC);
-               osh->malloced -= size;
-       }
-       kfree(addr);
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+
+  pci_free_consistent (osh->pdev, size, va, (dma_addr_t) pa);
 }
 
 uint
-osl_malloced(osl_t *osh)
+osl_dma_map (osl_t * osh, void *va, uint size, int direction)
 {
-       ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
-       return (osh->malloced);
+  int dir;
+
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+  dir = (direction == DMA_TX) ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE;
+  return (pci_map_single (osh->pdev, va, size, dir));
 }
 
-uint osl_malloc_failed(osl_t *osh)
+void
+osl_dma_unmap (osl_t * osh, uint pa, uint size, int direction)
 {
-       ASSERT((osh && (osh->magic == OS_HANDLE_MAGIC)));
-       return (osh->failed);
+  int dir;
+
+  ASSERT ((osh && (osh->magic == OS_HANDLE_MAGIC)));
+  dir = (direction == DMA_TX) ? PCI_DMA_TODEVICE : PCI_DMA_FROMDEVICE;
+  pci_unmap_single (osh->pdev, (uint32) pa, size, dir);
 }
 
-#undef osl_delay
+#if defined(BINOSL) || defined(BCMDBG_ASSERT)
 void
-osl_delay(uint usec)
+osl_assert (char *exp, char *file, int line)
 {
-       OSL_DELAY(usec);
+  char tempbuf[255];
+
+  sprintf (tempbuf, "assertion \"%s\" failed: file \"%s\", line %d\n", exp,
+          file, line);
+  panic (tempbuf);
+}
+#endif /* BCMDBG_ASSERT || BINOSL */
+
+void
+osl_delay (uint usec)
+{
+  uint d;
+
+  while (usec > 0)
+    {
+      d = MIN (usec, 1000);
+      udelay (d);
+      usec -= d;
+    }
 }
 
 /* Clone a packet.
  * The pkttag contents are NOT cloned.
  */
 void *
-osl_pktdup(osl_t *osh, void *skb)
+osl_pktdup (osl_t * osh, void *skb)
+{
+  void *p;
+
+  if ((p = skb_clone ((struct sk_buff *) skb, GFP_ATOMIC)) == NULL)
+    return NULL;
+
+  /* skb_clone copies skb->cb.. we don't want that */
+  if (osh->pub.pkttag)
+    bzero ((void *) ((struct sk_buff *) p)->cb, OSL_PKTTAG_SZ);
+
+  /* Increment the packet counter */
+  osh->pub.pktalloced++;
+#ifdef BCMDBG_PKT
+  pktlist_add (&(osh->pktlist), (void *) p);
+#endif /* BCMDBG_PKT */
+  return (p);
+}
+
+uint
+osl_pktalloced (osl_t * osh)
+{
+  return (osh->pub.pktalloced);
+}
+
+#ifdef BCMDBG_PKT
+char *
+osl_pktlist_dump (osl_t * osh, char *buf)
+{
+  pktlist_dump (&(osh->pktlist), buf);
+  return buf;
+}
+
+void
+osl_pktlist_add (osl_t * osh, void *p)
+{
+  pktlist_add (&(osh->pktlist), p);
+}
+
+void
+osl_pktlist_remove (osl_t * osh, void *p)
+{
+  pktlist_remove (&(osh->pktlist), p);
+}
+#endif /* BCMDBG_PKT */
+
+/*
+ * BINOSL selects the slightly slower function-call-based binary compatible osl.
+ */
+#ifdef BINOSL
+
+int
+osl_printf (const char *format, ...)
+{
+  va_list args;
+  char buf[1024];
+  int len;
+
+  /* sprintf into a local buffer because there *is* no "vprintk()".. */
+  va_start (args, format);
+  len = vsnprintf (buf, 1024, format, args);
+  va_end (args);
+
+  if (len > sizeof (buf))
+    {
+      printk ("osl_printf: buffer overrun\n");
+      return (0);
+    }
+
+  return (printk (buf));
+}
+
+int
+osl_sprintf (char *buf, const char *format, ...)
+{
+  va_list args;
+  int rc;
+
+  va_start (args, format);
+  rc = vsprintf (buf, format, args);
+  va_end (args);
+  return (rc);
+}
+
+int
+osl_strcmp (const char *s1, const char *s2)
+{
+  return (strcmp (s1, s2));
+}
+
+int
+osl_strncmp (const char *s1, const char *s2, uint n)
+{
+  return (strncmp (s1, s2, n));
+}
+
+int
+osl_strlen (const char *s)
+{
+  return (strlen (s));
+}
+
+char *
+osl_strcpy (char *d, const char *s)
+{
+  return (strcpy (d, s));
+}
+
+char *
+osl_strncpy (char *d, const char *s, uint n)
+{
+  return (strncpy (d, s, n));
+}
+
+void
+bcopy (const void *src, void *dst, int len)
+{
+  memcpy (dst, src, len);
+}
+
+int
+bcmp (const void *b1, const void *b2, int len)
+{
+  return (memcmp (b1, b2, len));
+}
+
+void
+bzero (void *b, int len)
+{
+  memset (b, '\0', len);
+}
+
+uint32
+osl_readl (volatile uint32 * r)
+{
+  return (readl (r));
+}
+
+uint16
+osl_readw (volatile uint16 * r)
+{
+  return (readw (r));
+}
+
+uint8
+osl_readb (volatile uint8 * r)
+{
+  return (readb (r));
+}
+
+void
+osl_writel (uint32 v, volatile uint32 * r)
+{
+  writel (v, r);
+}
+
+void
+osl_writew (uint16 v, volatile uint16 * r)
+{
+  writew (v, r);
+}
+
+void
+osl_writeb (uint8 v, volatile uint8 * r)
+{
+  writeb (v, r);
+}
+
+void *
+osl_uncached (void *va)
+{
+#ifdef mips
+  return ((void *) KSEG1ADDR (va));
+#else
+  return ((void *) va);
+#endif /* mips */
+}
+
+uint
+osl_getcycles (void)
 {
-       void * p;
+  uint cycles;
+
+#if defined(mips)
+  cycles = read_c0_count () * 2;
+#elif defined(__i386__)
+  rdtscl (cycles);
+#else
+  cycles = 0;
+#endif /* defined(mips) */
+  return cycles;
+}
 
-       if ((p = skb_clone((struct sk_buff*)skb, GFP_ATOMIC)) == NULL)
-               return NULL;
+void *
+osl_reg_map (uint32 pa, uint size)
+{
+  return (ioremap_nocache ((unsigned long) pa, (unsigned long) size));
+}
 
-       /* skb_clone copies skb->cb.. we don't want that */
-       if (osh->pub.pkttag)
-               bzero((void*)((struct sk_buff *)p)->cb, OSL_PKTTAG_SZ);
+void
+osl_reg_unmap (void *va)
+{
+  iounmap (va);
+}
 
-       /* Increment the packet counter */
-       osh->pub.pktalloced++;
-       return (p);
+int
+osl_busprobe (uint32 * val, uint32 addr)
+{
+#ifdef mips
+  return get_dbe (*val, (uint32 *) addr);
+#else
+  *val = readl ((uint32 *) (uintptr) addr);
+  return 0;
+#endif /* mips */
+}
+
+bool
+osl_pktshared (void *skb)
+{
+  return (((struct sk_buff *) skb)->cloned);
+}
+
+uchar *
+osl_pktdata (osl_t * osh, void *skb)
+{
+  return (((struct sk_buff *) skb)->data);
 }
 
 uint
-osl_pktalloced(osl_t *osh)
+osl_pktlen (osl_t * osh, void *skb)
+{
+  return (((struct sk_buff *) skb)->len);
+}
+
+uint
+osl_pktheadroom (osl_t * osh, void *skb)
+{
+  return (uint) skb_headroom ((struct sk_buff *) skb);
+}
+
+uint
+osl_pkttailroom (osl_t * osh, void *skb)
+{
+  return (uint) skb_tailroom ((struct sk_buff *) skb);
+}
+
+void *
+osl_pktnext (osl_t * osh, void *skb)
+{
+  return (((struct sk_buff *) skb)->next);
+}
+
+void
+osl_pktsetnext (void *skb, void *x)
+{
+  ((struct sk_buff *) skb)->next = (struct sk_buff *) x;
+}
+
+void
+osl_pktsetlen (osl_t * osh, void *skb, uint len)
+{
+  __skb_trim ((struct sk_buff *) skb, len);
+}
+
+uchar *
+osl_pktpush (osl_t * osh, void *skb, int bytes)
+{
+  return (skb_push ((struct sk_buff *) skb, bytes));
+}
+
+uchar *
+osl_pktpull (osl_t * osh, void *skb, int bytes)
+{
+  return (skb_pull ((struct sk_buff *) skb, bytes));
+}
+
+void *
+osl_pkttag (void *skb)
 {
-       return (osh->pub.pktalloced);
+  return ((void *) (((struct sk_buff *) skb)->cb));
+}
+
+void *
+osl_pktlink (void *skb)
+{
+  return (((struct sk_buff *) skb)->prev);
+}
+
+void
+osl_pktsetlink (void *skb, void *x)
+{
+  ((struct sk_buff *) skb)->prev = (struct sk_buff *) x;
+}
+
+uint
+osl_pktprio (void *skb)
+{
+  return (((struct sk_buff *) skb)->priority);
+}
+
+void
+osl_pktsetprio (void *skb, uint x)
+{
+  ((struct sk_buff *) skb)->priority = x;
+}
+
+/* Convert a driver packet to native(OS) packet
+ * In the process, packettag is zeroed out before sending up
+ * IP code depends on skb->cb to be setup correctly with various options
+ * In our case, that means it should be 0
+ */
+struct sk_buff *
+osl_pkt_tonative (osl_t * osh, void *pkt)
+{
+  struct sk_buff *nskb;
+
+  if (osh->pub.pkttag)
+    bzero ((void *) ((struct sk_buff *) pkt)->cb, OSL_PKTTAG_SZ);
+
+  /* Decrement the packet counter */
+  for (nskb = (struct sk_buff *) pkt; nskb; nskb = nskb->next)
+    {
+#ifdef BCMDBG_PKT
+      pktlist_remove (&(osh->pktlist), (void *) nskb);
+#endif /* BCMDBG_PKT */
+      osh->pub.pktalloced--;
+    }
+
+  return (struct sk_buff *) pkt;
+}
+
+/* Convert a native(OS) packet to driver packet.
+ * In the process, native packet is destroyed, there is no copying
+ * Also, a packettag is zeroed out
+ */
+void *
+osl_pkt_frmnative (osl_t * osh, struct sk_buff *skb)
+{
+  struct sk_buff *nskb;
+
+  if (osh->pub.pkttag)
+    bzero ((void *) skb->cb, OSL_PKTTAG_SZ);
+
+  /* Increment the packet counter */
+  for (nskb = skb; nskb; nskb = nskb->next)
+    {
+#ifdef BCMDBG_PKT
+      pktlist_add (&(osh->pktlist), (void *) nskb);
+#endif /* BCMDBG_PKT */
+      osh->pub.pktalloced++;
+    }
+
+  return (void *) skb;
 }
 
+#endif /* BINOSL */
index d9c5533b85eb9fba74764b6339798defe9e866d1..f65c85966b7a23c1f069e825024bff0cde38f9cd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Linux OS Independent Layer
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: linux_osl.h,v 1.1.1.13 2006/04/08 06:13:39 honor Exp $
+ * $Id$
  */
 
 #ifndef _linux_osl_h_
 #include <linuxver.h>
 #include <osl.h>
 
-#define OSL_PKTTAG_SZ     32 /* Size of PktTag */
+#define OSL_PKTTAG_SZ      32 /* Size of PktTag */
 
-/* osl handle type forward declaration */
-typedef struct osl_dmainfo osldma_t;
+/* microsecond delay */
+extern void osl_delay(uint usec);
 
 /* OSL initialization */
-extern osl_t *osl_attach(void *pdev, bool pkttag);
+extern osl_t *osl_attach(void *pdev, uint bustype, bool pkttag);
 extern void osl_detach(osl_t *osh);
 
+#define PKTFREESETCB(osh, _tx_fn, _tx_ctx) \
+       do { \
+          ((osl_pubinfo_t*)osh)->tx_fn = _tx_fn; \
+          ((osl_pubinfo_t*)osh)->tx_ctx = _tx_ctx; \
+       } while (0)
+
 /* host/bus architecture-specific byte swap */
 #define BUS_SWAP32(v)          (v)
+
+
 #define        MALLOC_FAILED(osh)      osl_malloc_failed((osh))
 
 extern void *osl_malloc(osl_t *osh, uint size);
@@ -37,61 +45,110 @@ extern void osl_mfree(osl_t *osh, void *addr, uint size);
 extern uint osl_malloced(osl_t *osh);
 extern uint osl_malloc_failed(osl_t *osh);
 
-/* API for DMA addressing capability */
-#define        DMA_MAP(osh, va, size, direction, p) \
-       osl_dma_map((osh), (va), (size), (direction))
-#define        DMA_UNMAP(osh, pa, size, direction, p) \
-       osl_dma_unmap((osh), (pa), (size), (direction))
-static inline uint
-osl_dma_map(void *osh, void *va, uint size, int direction)
-{
-       int dir;
-       struct pci_dev *dev;
-
-       dev = (osh == NULL ? NULL : ((osl_t *)osh)->pdev);
-       dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
-       return (pci_map_single(dev, va, size, dir));
-}
-
-static inline void
-osl_dma_unmap(void *osh, uint pa, uint size, int direction)
-{
-       int dir;
-       struct pci_dev *dev;
-
-       dev = (osh == NULL ? NULL : ((osl_t *)osh)->pdev);
-       dir = (direction == DMA_TX)? PCI_DMA_TODEVICE: PCI_DMA_FROMDEVICE;
-       pci_unmap_single(dev, (uint32)pa, size, dir);
-}
-
-#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)
+/* allocate/free shared (dma-able) consistent memory */
 #define        DMA_CONSISTENT_ALIGN    PAGE_SIZE
 #define        DMA_ALLOC_CONSISTENT(osh, size, pap, dmah) \
        osl_dma_alloc_consistent((osh), (size), (pap))
 #define        DMA_FREE_CONSISTENT(osh, va, size, pa, dmah) \
        osl_dma_free_consistent((osh), (void*)(va), (size), (pa))
-static inline void*
-osl_dma_alloc_consistent(osl_t *osh, uint size, ulong *pap)
-{
-       return (pci_alloc_consistent(osh->pdev, size, (dma_addr_t*)pap));
-}
+extern void *osl_dma_alloc_consistent(osl_t *osh, uint size, ulong *pap);
+extern void osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa);
 
-static inline void
-osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa)
-{
-       pci_free_consistent(osh->pdev, size, va, (dma_addr_t)pa);
-}
+/* map/unmap direction */
+#define        DMA_TX  1       /* TX direction for DMA */
+#define        DMA_RX  2       /* RX direction for DMA */
+
+/* map/unmap shared (dma-able) memory */
+#define        DMA_MAP(osh, va, size, direction, p, dmah) \
+       osl_dma_map((osh), (va), (size), (direction))
+#define        DMA_UNMAP(osh, pa, size, direction, p, dmah) \
+       osl_dma_unmap((osh), (pa), (size), (direction))
+extern uint osl_dma_map(osl_t *osh, void *va, uint size, int direction);
+extern void osl_dma_unmap(osl_t *osh, uint pa, uint size, int direction);
 
+/* API for DMA addressing capability */
+#define OSL_DMADDRWIDTH(osh, addrwidth) do {} while (0)
 
 /* register access macros */
 #if defined(BCMJTAG)
 #include <bcmjtag.h>
-#define        R_REG(osh, r)   bcmjtag_read(NULL, (uint32)(r), sizeof(*(r)))
-#define        W_REG(osh, r, v)        bcmjtag_write(NULL, (uint32)(r), (uint32)(v), sizeof(*(r)))
-#endif /* defined(BCMSDIO) */
+#define OSL_WRITE_REG(osh, r, v) (bcmjtag_write(NULL, (uintptr)(r), (v), sizeof(*(r))))
+#define OSL_READ_REG(osh, r) (bcmjtag_read(NULL, (uintptr)(r), sizeof(*(r))))
+#endif
+
+#if defined(BCMJTAG)
+#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) if (((osl_pubinfo_t*)(osh))->mmbus) \
+       mmap_op else bus_op
+#define SELECT_BUS_READ(osh, mmap_op, bus_op) (((osl_pubinfo_t*)(osh))->mmbus) ? \
+       mmap_op : bus_op
+#else
+#define SELECT_BUS_WRITE(osh, mmap_op, bus_op) mmap_op
+#define SELECT_BUS_READ(osh, mmap_op, bus_op) mmap_op
+#endif 
+
+/*
+ * BINOSL selects the slightly slower function-call-based binary compatible osl.
+ * Macros expand to calls to functions defined in linux_osl.c .
+ */
+#ifndef BINOSL
+
+/* string library, kernel mode */
+#ifndef printf
+#define        printf(fmt, args...)    printk(fmt, ## args)
+#endif /* printf */
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+/* register access macros */
+#define        AND_REG(osh, r, v)              W_REG(osh, (r), R_REG(osh, r) & (v))
+#define        OR_REG(osh, r, v)               W_REG(osh, (r), R_REG(osh, r) | (v))
+
+/* bcopy, bcmp, and bzero */
+#define        bcopy(src, dst, len)    memcpy((dst), (src), (len))
+#define        bcmp(b1, b2, len)       memcmp((b1), (b2), (len))
+#define        bzero(b, len)           memset((b), '\0', (len))
+
+/* uncached virtual address */
+#ifdef mips
+#define OSL_UNCACHED(va)       KSEG1ADDR((va))
+#include <asm/addrspace.h>
+#else
+#define OSL_UNCACHED(va)       (va)
+#endif /* mips */
+
+/* get processor cycle count */
+#if defined(mips)
+#define        OSL_GETCYCLES(x)        ((x) = read_c0_count() * 2)
+#elif defined(__i386__)
+#define        OSL_GETCYCLES(x)        rdtscl((x))
+#else
+#define OSL_GETCYCLES(x)       ((x) = 0)
+#endif /* defined(mips) */
+
+/* dereference an address that may cause a bus exception */
+#ifdef mips
+#if defined(MODULE) && (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 17))
+#define BUSPROBE(val, addr)    panic("get_dbe() will not fixup a bus exception when compiled into"\
+                                       " a module")
+#else
+#define        BUSPROBE(val, addr)     get_dbe((val), (addr))
+#include <asm/paccess.h>
+#endif /* defined(MODULE) && (LINUX_VERSION_CODE < KERNEL_VERSION(2, 4, 17)) */
+#else
+#define        BUSPROBE(val, addr)     ({ (val) = R_REG(NULL, (addr)); 0; })
+#endif /* mips */
+
+/* map/unmap physical to virtual I/O */
+#define        REG_MAP(pa, size)       ioremap_nocache((unsigned long)(pa), (unsigned long)(size))
+#define        REG_UNMAP(va)           iounmap((void *)(va))
+
+/* shared (dma-able) memory access macros */
+#define        R_SM(r)                 *(r)
+#define        W_SM(r, v)              (*(r) = (v))
+#define        BZERO_SM(r, len)        memset((r), '\0', (len))
 
 /* packet primitives */
-#define        PKTGET(osh, len, send)          osl_pktget((osh), (len), (send))
+#define        PKTGET(osh, len, send)          osl_pktget((osh), (len))
 #define        PKTFREE(osh, skb, send)         osl_pktfree((osh), (skb), (send))
 #define        PKTDATA(osh, skb)               (((struct sk_buff*)(skb))->data)
 #define        PKTLEN(osh, skb)                (((struct sk_buff*)(skb))->len)
@@ -104,15 +161,25 @@ osl_dma_free_consistent(osl_t *osh, void *va, uint size, ulong pa)
 #define        PKTPULL(osh, skb, bytes)        skb_pull((struct sk_buff*)(skb), (bytes))
 #define        PKTDUP(osh, skb)                osl_pktdup((osh), (skb))
 #define        PKTTAG(skb)                     ((void*)(((struct sk_buff*)(skb))->cb))
-#define PKTALLOCED(osh)                        osl_pktalloced((osh))
+#define PKTALLOCED(osh)                        ((osl_pubinfo_t *)(osh))->pktalloced
+#ifdef BCMDBG_PKT     /* pkt logging for debugging */
+#define PKTLIST_DUMP(osh, buf)                 osl_pktlist_dump(osh, buf)
+#else /* BCMDBG_PKT */
 #define PKTLIST_DUMP(osh, buf)
+#endif /* BCMDBG_PKT */
+
+#ifdef BCMDBG_PKT     /* pkt logging for debugging */
+extern void osl_pktlist_add(osl_t *osh, void *p);
+extern void osl_pktlist_remove(osl_t *osh, void *p);
+extern char *osl_pktlist_dump(osl_t *osh, char *buf);
+#endif /* BCMDBG_PKT */
 
 /* Convert a native(OS) packet to driver packet.
  * In the process, native packet is destroyed, there is no copying
  * Also, a packettag is zeroed out
  */
 static INLINE void *
-osl_pkt_frmnative(osl_pubinfo_t*osh, struct sk_buff *skb)
+osl_pkt_frmnative(osl_pubinfo_t *osh, struct sk_buff *skb)
 {
        struct sk_buff *nskb;
 
@@ -121,13 +188,15 @@ osl_pkt_frmnative(osl_pubinfo_t*osh, struct sk_buff *skb)
 
        /* Increment the packet counter */
        for (nskb = skb; nskb; nskb = nskb->next) {
+#ifdef BCMDBG_PKT
+               osl_pktlist_add((osl_t *)osh, (void *) nskb);
+#endif  /* BCMDBG_PKT */
                osh->pktalloced++;
        }
 
        return (void *)skb;
 }
-#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_pubinfo_t*)osh), \
-                                                       (struct sk_buff*)(skb))
+#define PKTFRMNATIVE(osh, skb) osl_pkt_frmnative(((osl_pubinfo_t *)osh), (struct sk_buff*)(skb))
 
 /* Convert a driver packet to native(OS) packet
  * In the process, packettag is zeroed out before sending up
@@ -135,7 +204,7 @@ osl_pkt_frmnative(osl_pubinfo_t*osh, struct sk_buff *skb)
  * In our case, that means it should be 0
  */
 static INLINE struct sk_buff *
-osl_pkt_tonative(osl_pubinfo_t*osh, void *pkt)
+osl_pkt_tonative(osl_pubinfo_t *osh, void *pkt)
 {
        struct sk_buff *nskb;
 
@@ -144,24 +213,167 @@ osl_pkt_tonative(osl_pubinfo_t*osh, void *pkt)
 
        /* Decrement the packet counter */
        for (nskb = (struct sk_buff *)pkt; nskb; nskb = nskb->next) {
+#ifdef BCMDBG_PKT
+               osl_pktlist_remove((osl_t *)osh, (void *) nskb);
+#endif  /* BCMDBG_PKT */
                osh->pktalloced--;
        }
 
        return (struct sk_buff *)pkt;
 }
-#define PKTTONATIVE(osh, pkt)          osl_pkt_tonative((osl_pubinfo_t*)(osh), (pkt))
+#define PKTTONATIVE(osh, pkt)          osl_pkt_tonative((osl_pubinfo_t *)(osh), (pkt))
 
 #define        PKTLINK(skb)                    (((struct sk_buff*)(skb))->prev)
 #define        PKTSETLINK(skb, x)              (((struct sk_buff*)(skb))->prev = (struct sk_buff*)(x))
 #define        PKTPRIO(skb)                    (((struct sk_buff*)(skb))->priority)
 #define        PKTSETPRIO(skb, x)              (((struct sk_buff*)(skb))->priority = (x))
+#define PKTSUMNEEDED(skb)              (((struct sk_buff*)(skb))->ip_summed == CHECKSUM_HW)
+#define PKTSETSUMGOOD(skb, x)          (((struct sk_buff*)(skb))->ip_summed = \
+                                               ((x) ? CHECKSUM_UNNECESSARY : CHECKSUM_NONE))
+/* PKTSETSUMNEEDED and PKTSUMGOOD are not possible because skb->ip_summed is overloaded */
 #define PKTSHARED(skb)                  (((struct sk_buff*)(skb))->cloned)
 
-extern void *osl_pktget(osl_t *osh, uint len, bool send);
+extern void *osl_pktget(osl_t *osh, uint len);
+extern void osl_pktfree(osl_t *osh, void *skb, bool send);
+extern void *osl_pktdup(osl_t *osh, void *skb);
+#else  /* BINOSL */
+
+/* string library */
+#ifndef LINUX_OSL
+#undef printf
+#define        printf(fmt, args...)            osl_printf((fmt), ## args)
+#undef sprintf
+#define sprintf(buf, fmt, args...)     osl_sprintf((buf), (fmt), ## args)
+#undef strcmp
+#define        strcmp(s1, s2)                  osl_strcmp((s1), (s2))
+#undef strncmp
+#define        strncmp(s1, s2, n)              osl_strncmp((s1), (s2), (n))
+#undef strlen
+#define strlen(s)                      osl_strlen((s))
+#undef strcpy
+#define        strcpy(d, s)                    osl_strcpy((d), (s))
+#undef strncpy
+#define        strncpy(d, s, n)                osl_strncpy((d), (s), (n))
+#endif /* LINUX_OSL */
+extern int osl_printf(const char *format, ...);
+extern int osl_sprintf(char *buf, const char *format, ...);
+extern int osl_strcmp(const char *s1, const char *s2);
+extern int osl_strncmp(const char *s1, const char *s2, uint n);
+extern int osl_strlen(const char *s);
+extern char* osl_strcpy(char *d, const char *s);
+extern char* osl_strncpy(char *d, const char *s, uint n);
+
+/* register access macros */
+#if !defined(BCMJTAG)
+#define R_REG(osh, r) (\
+       sizeof(*(r)) == sizeof(uint8) ? osl_readb((volatile uint8*)(r)) : \
+       sizeof(*(r)) == sizeof(uint16) ? osl_readw((volatile uint16*)(r)) : \
+       osl_readl((volatile uint32*)(r)) \
+)
+#define W_REG(osh, r, v) do { \
+       switch (sizeof(*(r))) { \
+       case sizeof(uint8):     osl_writeb((uint8)(v), (volatile uint8*)(r)); break; \
+       case sizeof(uint16):    osl_writew((uint16)(v), (volatile uint16*)(r)); break; \
+       case sizeof(uint32):    osl_writel((uint32)(v), (volatile uint32*)(r)); break; \
+       } \
+} while (0)
+#endif 
+
+#define        AND_REG(osh, r, v)              W_REG(osh, (r), R_REG(osh, r) & (v))
+#define        OR_REG(osh, r, v)               W_REG(osh, (r), R_REG(osh, r) | (v))
+extern uint8 osl_readb(volatile uint8 *r);
+extern uint16 osl_readw(volatile uint16 *r);
+extern uint32 osl_readl(volatile uint32 *r);
+extern void osl_writeb(uint8 v, volatile uint8 *r);
+extern void osl_writew(uint16 v, volatile uint16 *r);
+extern void osl_writel(uint32 v, volatile uint32 *r);
+
+/* bcopy, bcmp, and bzero */
+extern void bcopy(const void *src, void *dst, int len);
+extern int bcmp(const void *b1, const void *b2, int len);
+extern void bzero(void *b, int len);
+
+/* uncached virtual address */
+#define OSL_UNCACHED(va)       osl_uncached((va))
+extern void *osl_uncached(void *va);
+
+/* get processor cycle count */
+#define OSL_GETCYCLES(x)       ((x) = osl_getcycles())
+extern uint osl_getcycles(void);
+
+/* dereference an address that may target abort */
+#define        BUSPROBE(val, addr)     osl_busprobe(&(val), (addr))
+extern int osl_busprobe(uint32 *val, uint32 addr);
+
+/* map/unmap physical to virtual */
+#define        REG_MAP(pa, size)       osl_reg_map((pa), (size))
+#define        REG_UNMAP(va)           osl_reg_unmap((va))
+extern void *osl_reg_map(uint32 pa, uint size);
+extern void osl_reg_unmap(void *va);
+
+/* shared (dma-able) memory access macros */
+#define        R_SM(r)                 *(r)
+#define        W_SM(r, v)              (*(r) = (v))
+#define        BZERO_SM(r, len)        bzero((r), (len))
+
+/* packet primitives */
+#define        PKTGET(osh, len, send)          osl_pktget((osh), (len))
+#define        PKTFREE(osh, skb, send)         osl_pktfree((osh), (skb), (send))
+#define        PKTDATA(osh, skb)               osl_pktdata((osh), (skb))
+#define        PKTLEN(osh, skb)                osl_pktlen((osh), (skb))
+#define PKTHEADROOM(osh, skb)          osl_pktheadroom((osh), (skb))
+#define PKTTAILROOM(osh, skb)          osl_pkttailroom((osh), (skb))
+#define        PKTNEXT(osh, skb)               osl_pktnext((osh), (skb))
+#define        PKTSETNEXT(osh, skb, x)         osl_pktsetnext((skb), (x))
+#define        PKTSETLEN(osh, skb, len)        osl_pktsetlen((osh), (skb), (len))
+#define        PKTPUSH(osh, skb, bytes)        osl_pktpush((osh), (skb), (bytes))
+#define        PKTPULL(osh, skb, bytes)        osl_pktpull((osh), (skb), (bytes))
+#define        PKTDUP(osh, skb)                osl_pktdup((osh), (skb))
+#define PKTTAG(skb)                    osl_pkttag((skb))
+#define PKTFRMNATIVE(osh, skb)         osl_pkt_frmnative((osh), (struct sk_buff*)(skb))
+#define PKTTONATIVE(osh, pkt)          osl_pkt_tonative((osh), (pkt))
+#define        PKTLINK(skb)                    osl_pktlink((skb))
+#define        PKTSETLINK(skb, x)              osl_pktsetlink((skb), (x))
+#define        PKTPRIO(skb)                    osl_pktprio((skb))
+#define        PKTSETPRIO(skb, x)              osl_pktsetprio((skb), (x))
+#define PKTSHARED(skb)                  osl_pktshared((skb))
+#define PKTALLOCED(osh)                        osl_pktalloced((osh))
+#ifdef BCMDBG_PKT
+#define PKTLIST_DUMP(osh, buf)                 osl_pktlist_dump(osh, buf)
+#else /* BCMDBG_PKT */
+#define PKTLIST_DUMP(osh, buf)
+#endif /* BCMDBG_PKT */
+
+extern void *osl_pktget(osl_t *osh, uint len);
 extern void osl_pktfree(osl_t *osh, void *skb, bool send);
+extern uchar *osl_pktdata(osl_t *osh, void *skb);
+extern uint osl_pktlen(osl_t *osh, void *skb);
+extern uint osl_pktheadroom(osl_t *osh, void *skb);
+extern uint osl_pkttailroom(osl_t *osh, void *skb);
+extern void *osl_pktnext(osl_t *osh, void *skb);
+extern void osl_pktsetnext(void *skb, void *x);
+extern void osl_pktsetlen(osl_t *osh, void *skb, uint len);
+extern uchar *osl_pktpush(osl_t *osh, void *skb, int bytes);
+extern uchar *osl_pktpull(osl_t *osh, void *skb, int bytes);
 extern void *osl_pktdup(osl_t *osh, void *skb);
+extern void *osl_pkttag(void *skb);
+extern void *osl_pktlink(void *skb);
+extern void osl_pktsetlink(void *skb, void *x);
+extern uint osl_pktprio(void *skb);
+extern void osl_pktsetprio(void *skb, uint x);
+extern void *osl_pkt_frmnative(osl_t *osh, struct sk_buff *skb);
+extern struct sk_buff *osl_pkt_tonative(osl_t *osh, void *pkt);
+extern bool osl_pktshared(void *skb);
 extern uint osl_pktalloced(osl_t *osh);
 
+#ifdef BCMDBG_PKT     /* pkt logging for debugging */
+extern char *osl_pktlist_dump(osl_t *osh, char *buf);
+extern void osl_pktlist_add(osl_t *osh, void *p);
+extern void osl_pktlist_remove(osl_t *osh, void *p);
+#endif /* BCMDBG_PKT */
+
+#endif /* BINOSL */
+
 #define OSL_ERROR(bcmerror)    osl_error(bcmerror)
 extern int osl_error(int bcmerror);
 
diff --git a/package/broadcom-wl/src/driver/patchtable.pl b/package/broadcom-wl/src/driver/patchtable.pl
deleted file mode 100644 (file)
index 6999735..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/perl
-#
-# Copyright (C) 2006 OpenWrt.org
-# Copyright (C) 2006 Felix Fietkau
-#
-# This is free software, licensed under the GNU General Public License v2.
-# See /LICENSE for more information.
-#
-use strict;
-
-my $TABLE = pack("V", 0xbadc0ded);
-my $TABLE_SIZE = 512;
-my $SLT1 = "\x01\x00\x00\x00";
-my $SLT2 = "\x02\x00\x00\x00";
-my $ACKW = "\x03\x00\x00\x00";
-my $PTABLE_END = "\xff\xff\xff\xff";
-
-my $addr = "";
-my $opcode = "";
-my $function = "";
-
-sub add_entry {
-       my $key = shift;
-       my $value = shift;
-       my $default = shift;
-
-       $TABLE .= $key;
-       $TABLE .= pack("V", $value);
-       $TABLE .= pack("V", $default);
-}
-
-while (<>) {
-       $addr = $opcode = "";
-       /^\w{8}\s*<(.*)>:$/ and $function = $1;
-       /^\s*(\w+):\s*(\w{8})\s*/ and do {
-               $addr = $1;
-               $opcode = $2;
-       };
-
-       ($function eq 'wlc_update_slot_timing') and do {
-               # li    a2,9    -- short slot time
-               ($opcode eq '24060009') and add_entry($SLT1, hex($addr), hex($opcode));
-               # li    v0,519  -- 510 + short slot time
-               ($opcode eq '24020207') and add_entry($SLT2, hex($addr), hex($opcode));
-               
-               # li    a2,20   -- long slot time
-               ($opcode eq '24060014') and add_entry($SLT1, hex($addr), hex($opcode));
-               # li    v0,530  -- 510 + long slot time
-               ($opcode eq '24020212') and add_entry($SLT2, hex($addr), hex($opcode));
-       };
-       ($function eq 'wlc_d11hdrs') and do {
-               # ori   s6,s6,0x1 -- ack flag (new)
-               ($opcode eq '36d60001') and add_entry($ACKW, hex($addr), hex($opcode));
-               # ori   s3,s3,0x1 -- ack flag (old)
-               ($opcode eq '36730001') and add_entry($ACKW, hex($addr), hex($opcode));
-       }
-}
-
-$TABLE .= $PTABLE_END;
-$TABLE .= ("\x00" x ($TABLE_SIZE - length($TABLE)));
-print $TABLE;
diff --git a/package/broadcom-wl/src/driver/pktq.h b/package/broadcom-wl/src/driver/pktq.h
deleted file mode 100644 (file)
index 7fe2181..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Misc useful os-independent macros and functions.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- * 
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.h,v 1.1.1.16 2006/04/08 06:13:39 honor Exp $
- */
-
-#ifndef        _pktq_h_
-#define        _pktq_h_
-#include <osl.h>
-
-/* osl multi-precedence packet queue */
-
-#define PKTQ_LEN_DEFAULT        128    /* Max 128 packets */
-#define PKTQ_MAX_PREC           16     /* Maximum precedence levels */
-
-struct pktq {
-       struct pktq_prec {
-               void *head;     /* first packet to dequeue */
-               void *tail;     /* last packet to dequeue */
-               uint16 len;     /* number of queued packets */
-               uint16 max;     /* maximum number of queued packets */
-       } q[PKTQ_MAX_PREC];
-       uint16 num_prec;        /* number of precedences in use */
-       uint16 hi_prec;         /* rapid dequeue hint (>= highest non-empty prec) */
-       uint16 max;             /* total max packets */
-       uint16 len;             /* total number of packets */
-};
-
-#define PKTQ_PREC_ITER(pq, prec)        for (prec = (pq)->num_prec - 1; prec >= 0; prec--)
-
-/* forward definition of ether_addr structure used by some function prototypes */
-
-struct ether_addr;
-
-/* operations on a specific precedence in packet queue */
-
-#define pktq_psetmax(pq, prec, _max)    ((pq)->q[prec].max = (_max))
-#define pktq_plen(pq, prec)             ((pq)->q[prec].len)
-#define pktq_pavail(pq, prec)           ((pq)->q[prec].max - (pq)->q[prec].len)
-#define pktq_pfull(pq, prec)            ((pq)->q[prec].len >= (pq)->q[prec].max)
-#define pktq_pempty(pq, prec)           ((pq)->q[prec].len == 0)
-
-#define pktq_ppeek(pq, prec)            ((pq)->q[prec].head)
-#define pktq_ppeek_tail(pq, prec)       ((pq)->q[prec].tail)
-
-extern void *pktq_penq(struct pktq *pq, int prec, void *p);
-extern void *pktq_penq_head(struct pktq *pq, int prec, void *p);
-extern void *pktq_pdeq(struct pktq *pq, int prec);
-extern void *pktq_pdeq_tail(struct pktq *pq, int prec);
-/* Empty the queue at particular precedence level */
-extern void pktq_pflush(osl_t *osh, struct pktq *pq, int prec, bool dir);
-/* Remove a specified packet from its queue */
-extern bool pktq_pdel(struct pktq *pq, void *p, int prec);
-
-/* operations on a set of precedences in packet queue */
-
-extern int pktq_mlen(struct pktq *pq, uint prec_bmp);
-extern void *pktq_mdeq(struct pktq *pq, uint prec_bmp, int *prec_out);
-
-/* operations on packet queue as a whole */
-
-#define pktq_len(pq)                    ((int)(pq)->len)
-#define pktq_max(pq)                    ((int)(pq)->max)
-#define pktq_avail(pq)                  ((int)((pq)->max - (pq)->len))
-#define pktq_full(pq)                   ((pq)->len >= (pq)->max)
-#define pktq_empty(pq)                  ((pq)->len == 0)
-
-/* operations for single precedence queues */
-#define pktenq(pq, p)          pktq_penq((pq), 0, (p))
-#define pktenq_head(pq, p)     pktq_penq_head((pq), 0, (p))
-#define pktdeq(pq)             pktq_pdeq((pq), 0)
-#define pktdeq_tail(pq)                pktq_pdeq_tail((pq), 0)
-
-extern void pktq_init(struct pktq *pq, int num_prec, int max_len);
-/* prec_out may be NULL if caller is not interested in return value */
-extern void *pktq_deq(struct pktq *pq, int *prec_out);
-extern void *pktq_deq_tail(struct pktq *pq, int *prec_out);
-extern void *pktq_peek(struct pktq *pq, int *prec_out);
-extern void *pktq_peek_tail(struct pktq *pq, int *prec_out);
-extern void pktq_flush(osl_t *osh, struct pktq *pq, bool dir); /* Empty the entire queue */
-
-/* externs */
-/* packet */
-extern uint pktcopy(osl_t *osh, void *p, uint offset, int len, uchar *buf);
-extern uint pkttotlen(osl_t *osh, void *p);
-extern void *pktlast(osl_t *osh, void *p);
-
-extern void pktsetprio(void *pkt, bool update_vtag);
-
-#endif /* _pktq_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/802.11.h b/package/broadcom-wl/src/driver/proto/802.11.h
new file mode 100644 (file)
index 0000000..83f4612
--- /dev/null
@@ -0,0 +1,1387 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental types and constants relating to 802.11
+ *
+ * $Id$
+ */
+
+#ifndef _802_11_H_
+#define _802_11_H_
+
+#ifndef _TYPEDEFS_H_
+#include <typedefs.h>
+#endif
+
+#ifndef _NET_ETHERNET_H_
+#include <proto/ethernet.h>
+#endif
+
+#include <proto/wpa.h>
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#define DOT11_TU_TO_US                 1024    /* 802.11 Time Unit is 1024 microseconds */
+
+/* Generic 802.11 frame constants */
+#define DOT11_A3_HDR_LEN               24      /* d11 header length with A3 */
+#define DOT11_A4_HDR_LEN               30      /* d11 header length with A4 */
+#define DOT11_MAC_HDR_LEN              DOT11_A3_HDR_LEN        /* MAC header length */
+#define DOT11_FCS_LEN                  4       /* d11 FCS length */
+#define DOT11_ICV_LEN                  4       /* d11 ICV length */
+#define DOT11_ICV_AES_LEN              8       /* d11 ICV/AES length */
+#define DOT11_QOS_LEN                  2       /* d11 QoS length */
+#define DOT11_HTC_LEN                  4       /* d11 HT Control field length */
+
+#define DOT11_KEY_INDEX_SHIFT          6       /* d11 key index shift */
+#define DOT11_IV_LEN                   4       /* d11 IV length */
+#define DOT11_IV_TKIP_LEN              8       /* d11 IV TKIP length */
+#define DOT11_IV_AES_OCB_LEN           4       /* d11 IV/AES/OCB length */
+#define DOT11_IV_AES_CCM_LEN           8       /* d11 IV/AES/CCM length */
+#define DOT11_IV_MAX_LEN               8       /* maximum iv len for any encryption */
+
+/* Includes MIC */
+#define DOT11_MAX_MPDU_BODY_LEN                2304    /* max MPDU body length */
+/* A4 header + QoS + CCMP + PDU + ICV + FCS = 2352 */
+#define DOT11_MAX_MPDU_LEN             (DOT11_A4_HDR_LEN + \
+                                        DOT11_QOS_LEN + \
+                                        DOT11_IV_AES_CCM_LEN + \
+                                        DOT11_MAX_MPDU_BODY_LEN + \
+                                        DOT11_ICV_LEN + \
+                                        DOT11_FCS_LEN) /* d11 max MPDU length */
+
+#define DOT11_MAX_SSID_LEN             32      /* d11 max ssid length */
+
+/* dot11RTSThreshold */
+#define DOT11_DEFAULT_RTS_LEN          2347    /* d11 default RTS length */
+#define DOT11_MAX_RTS_LEN              2347    /* d11 max RTS length */
+
+/* dot11FragmentationThreshold */
+#define DOT11_MIN_FRAG_LEN             256     /* d11 min fragmentation length */
+#define DOT11_MAX_FRAG_LEN             2346    /* Max frag is also limited by aMPDUMaxLength
+                                               * of the attached PHY
+                                               */
+#define DOT11_DEFAULT_FRAG_LEN         2346    /* d11 default fragmentation length */
+
+/* dot11BeaconPeriod */
+#define DOT11_MIN_BEACON_PERIOD                1       /* d11 min beacon period */
+#define DOT11_MAX_BEACON_PERIOD                0xFFFF  /* d11 max beacon period */
+
+/* dot11DTIMPeriod */
+#define DOT11_MIN_DTIM_PERIOD          1       /* d11 min DTIM period */
+#define DOT11_MAX_DTIM_PERIOD          0xFF    /* d11 max DTIM period */
+
+/* 802.2 LLC/SNAP header used by 802.11 per 802.1H */
+#define DOT11_LLC_SNAP_HDR_LEN         8       /* d11 LLC/SNAP header length */
+#define DOT11_OUI_LEN                  3       /* d11 OUI length */
+struct dot11_llc_snap_header {
+       uint8   dsap;                           /* always 0xAA */
+       uint8   ssap;                           /* always 0xAA */
+       uint8   ctl;                            /* always 0x03 */
+       uint8   oui[DOT11_OUI_LEN];             /* RFC1042: 0x00 0x00 0x00
+                                                * Bridge-Tunnel: 0x00 0x00 0xF8
+                                                */
+       uint16  type;                           /* ethertype */
+} PACKED;
+
+/* RFC1042 header used by 802.11 per 802.1H */
+#define RFC1042_HDR_LEN        (ETHER_HDR_LEN + DOT11_LLC_SNAP_HDR_LEN)        /* RCF1042 header length */
+
+/* Generic 802.11 MAC header */
+/*
+ * N.B.: This struct reflects the full 4 address 802.11 MAC header.
+ *              The fields are defined such that the shorter 1, 2, and 3
+ *              address headers just use the first k fields.
+ */
+struct dot11_header {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       a1;             /* address 1 */
+       struct ether_addr       a2;             /* address 2 */
+       struct ether_addr       a3;             /* address 3 */
+       uint16                  seq;            /* sequence control */
+       struct ether_addr       a4;             /* address 4 */
+} PACKED;
+
+/* Control frames */
+
+struct dot11_rts_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+       struct ether_addr       ta;             /* transmitter address */
+} PACKED;
+#define        DOT11_RTS_LEN           16              /* d11 RTS frame length */
+
+struct dot11_cts_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+} PACKED;
+#define        DOT11_CTS_LEN           10              /* d11 CTS frame length */
+
+struct dot11_ack_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+} PACKED;
+#define        DOT11_ACK_LEN           10              /* d11 ACK frame length */
+
+struct dot11_ps_poll_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* AID */
+       struct ether_addr       bssid;          /* receiver address, STA in AP */
+       struct ether_addr       ta;             /* transmitter address */
+} PACKED;
+#define        DOT11_PS_POLL_LEN       16              /* d11 PS poll frame length */
+
+struct dot11_cf_end_frame {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+       struct ether_addr       bssid;          /* transmitter address, STA in AP */
+} PACKED;
+#define        DOT11_CS_END_LEN        16              /* d11 CF-END frame length */
+
+/* BA/BAR Control parameters */
+#define DOT11_BA_CTL_POLICY_NORMAL     0x0000  /* normal ack */
+#define DOT11_BA_CTL_POLICY_NOACK      0x0001  /* no ack */
+#define DOT11_BA_CTL_POLICY_MASK       0x0001  /* ack policy mask */
+
+#define DOT11_BA_CTL_MTID              0x0002  /* multi tid BA */
+#define DOT11_BA_CTL_COMPRESSED                0x0004  /* compressed bitmap */
+
+#define DOT11_BA_CTL_NUMMSDU_MASK      0x0FC0  /* num msdu in bitmap mask */
+#define DOT11_BA_CTL_NUMMSDU_SHIFT     6       /* num msdu in bitmap shift */
+
+#define DOT11_BA_CTL_TID_MASK          0xF000  /* tid mask */
+#define DOT11_BA_CTL_TID_SHIFT         12      /* tid shift */
+
+/* control frame header (BA/BAR) */
+struct dot11_ctl_header {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       ra;             /* receiver address */
+       struct ether_addr       ta;             /* transmitter address */
+} PACKED;
+#define DOT11_CTL_HDR_LEN      16              /* control frame hdr len */
+
+/* BAR frame payload */
+struct dot11_bar {
+       uint16                  bar_control;    /* BAR Control */
+       uint16                  seqnum;         /* Starting Sequence control */
+} PACKED;
+#define DOT11_BAR_LEN          4               /* BAR frame payload length */
+
+#define DOT11_BA_BITMAP_LEN    128             /* bitmap length */
+#define DOT11_BA_CMP_BITMAP_LEN        8               /* compressed bitmap length */
+/* BA frame payload */
+struct dot11_ba {
+       uint16                  ba_control;     /* BA Control */
+       uint16                  seqnum;         /* Starting Sequence control */
+       uint8                   bitmap[DOT11_BA_BITMAP_LEN];    /* Block Ack Bitmap */
+} PACKED;
+#define DOT11_BA_LEN           4               /* BA frame payload len (wo bitmap) */
+
+/* Management frame header */
+struct dot11_management_header {
+       uint16                  fc;             /* frame control */
+       uint16                  durid;          /* duration/ID */
+       struct ether_addr       da;             /* receiver address */
+       struct ether_addr       sa;             /* transmitter address */
+       struct ether_addr       bssid;          /* BSS ID */
+       uint16                  seq;            /* sequence control */
+} PACKED;
+#define        DOT11_MGMT_HDR_LEN      24              /* d11 management header length */
+
+/* Management frame payloads */
+
+struct dot11_bcn_prb {
+       uint32                  timestamp[2];
+       uint16                  beacon_interval;
+       uint16                  capability;
+} PACKED;
+#define        DOT11_BCN_PRB_LEN       12              /* 802.11 beacon/probe frame fixed length */
+
+struct dot11_auth {
+       uint16                  alg;            /* algorithm */
+       uint16                  seq;            /* sequence control */
+       uint16                  status;         /* status code */
+} PACKED;
+#define DOT11_AUTH_FIXED_LEN   6               /* length of auth frame without challenge info
+                                                * elt
+                                                */
+
+struct dot11_assoc_req {
+       uint16                  capability;     /* capability information */
+       uint16                  listen;         /* listen interval */
+} PACKED;
+#define DOT11_ASSOC_REQ_FIXED_LEN      4       /* length of assoc frame without info elts */
+
+struct dot11_reassoc_req {
+       uint16                  capability;     /* capability information */
+       uint16                  listen;         /* listen interval */
+       struct ether_addr       ap;             /* Current AP address */
+} PACKED;
+#define DOT11_REASSOC_REQ_FIXED_LEN    10      /* length of assoc frame without info elts */
+
+struct dot11_assoc_resp {
+       uint16                  capability;     /* capability information */
+       uint16                  status;         /* status code */
+       uint16                  aid;            /* association ID */
+} PACKED;
+
+struct dot11_action_measure {
+       uint8   category;
+       uint8   action;
+       uint8   token;
+       uint8   data[1];
+} PACKED;
+#define DOT11_ACTION_MEASURE_LEN       3       /* d11 action measurement header length */
+
+struct dot11_action_ht_ch_width {
+       uint8   category;
+       uint8   action;
+       uint8   ch_width;
+} PACKED;
+
+struct dot11_action_ht_mimops {
+       uint8   category;
+       uint8   action;
+       uint8   control;
+} PACKED;
+
+#define SM_PWRSAVE_ENABLE      1
+#define SM_PWRSAVE_MODE                2
+
+struct dot11_action_ht_info_xchg {
+       uint8   category;
+       uint8   action;
+       uint8   info;
+} PACKED;
+
+#define        DOT11_HT_INFO_XCHG_INFO_REQ             0x01
+#define        DOT11_HT_INFO_XCHG_40MHZ_INTOLERANT     0x02
+#define        DOT11_HT_INFO_XCHG_STA_CHAN_WIDTH       0x04
+
+
+/* ************* 802.11h related definitions. ************* */
+struct dot11_power_cnst {
+       uint8 id;
+       uint8 len;
+       uint8 power;
+} PACKED;
+typedef struct dot11_power_cnst dot11_power_cnst_t;
+
+struct dot11_power_cap {
+       uint8 min;
+       uint8 max;
+} PACKED;
+typedef struct dot11_power_cap dot11_power_cap_t;
+
+struct dot11_tpc_rep {
+       uint8 id;
+       uint8 len;
+       uint8 tx_pwr;
+       uint8 margin;
+} PACKED;
+typedef struct dot11_tpc_rep dot11_tpc_rep_t;
+#define DOT11_MNG_IE_TPC_REPORT_LEN    2       /* length of IE data, not including 2 byte header */
+
+struct dot11_supp_channels {
+       uint8 id;
+       uint8 len;
+       uint8 first_channel;
+       uint8 num_channels;
+} PACKED;
+typedef struct dot11_supp_channels dot11_supp_channels_t;
+
+/* Extension Channel Offset IE: 802.11n-D1.0 spec. added sideband
+ * offset for 40MHz operation.  The possible 3 values are:
+ * 1 = above control channel
+ * 3 = below control channel
+ * 0 = no extension channel
+ */
+struct dot11_extch {
+       uint8   id;             /* IE ID, 62, DOT11_MNG_EXT_CHANNEL_OFFSET */
+       uint8   len;            /* IE length */
+       uint8   extch;
+} PACKED;
+typedef struct dot11_extch dot11_extch_ie_t;
+
+struct dot11_brcm_extch {
+       uint8   id;             /* IE ID, 221, DOT11_MNG_PROPR_ID */
+       uint8   len;            /* IE length */
+       uint8   oui[3];         /* Proprietary OUI, BRCM_OUI */
+       uint8   type;           /* type inidicates what follows */
+       uint8   extch;
+} PACKED;
+typedef struct dot11_brcm_extch dot11_brcm_extch_ie_t;
+
+#define BRCM_EXTCH_IE_LEN      5
+#define BRCM_EXTCH_IE_TYPE     53      /* 802.11n ID not yet assigned */
+#define DOT11_EXTCH_IE_LEN     1
+#define DOT11_EXT_CH_MASK      0x03    /* extension channel mask */
+#define DOT11_EXT_CH_UPPER     0x01    /* ext. ch. on upper sb */
+#define DOT11_EXT_CH_LOWER     0x03    /* ext. ch. on lower sb */
+#define DOT11_EXT_CH_NONE      0x00    /* no extension ch.  */
+
+struct dot11_action_frmhdr {
+       uint8   category;
+       uint8   action;
+       uint8   data[1];
+} PACKED;
+
+/* CSA IE data structure */
+struct dot11_channel_switch {
+       uint8 id;       /* id DOT11_MNG_CHANNEL_SWITCH_ID */
+       uint8 len;      /* length of IE */
+       uint8 mode;     /* mode 0 or 1 */
+       uint8 channel;  /* channel switch to */
+       uint8 count;    /* number of beacons before switching */
+} PACKED;
+typedef struct dot11_channel_switch dot11_chan_switch_ie_t;
+
+#define DOT11_SWITCH_IE_LEN    3       /* length of IE data, not including 2 byte header */
+/* CSA mode - 802.11h-2003 $7.3.2.20 */
+#define DOT11_CSA_MODE_ADVISORY                0       /* no DOT11_CSA_MODE_NO_TX restriction imposed */
+#define DOT11_CSA_MODE_NO_TX           1       /* no transmission upon receiving CSA frame. */
+
+struct dot11_action_switch_channel {
+       uint8   category;
+       uint8   action;
+       dot11_chan_switch_ie_t chan_switch_ie;  /* for switch IE */
+       dot11_brcm_extch_ie_t extch_ie;         /* extension channel offset */
+} PACKED;
+
+/* 11n Extended Channel Switch IE data structure */
+struct dot11_ext_csa {
+       uint8 id;       /* id DOT11_MNG_EXT_CHANNEL_SWITCH_ID */
+       uint8 len;      /* length of IE */
+       uint8 mode;     /* mode 0 or 1 */
+       uint8 reg;      /* regulatory class */
+       uint8 channel;  /* channel switch to */
+       uint8 count;    /* number of beacons before switching */
+} PACKED;
+typedef struct dot11_ext_csa dot11_ext_csa_ie_t;
+#define DOT11_EXT_CSA_IE_LEN   4       /* length of extended channel switch IE body */
+
+struct dot11_action_ext_csa {
+       uint8   category;
+       uint8   action;
+       dot11_ext_csa_ie_t chan_switch_ie;      /* for switch IE */
+} PACKED;
+
+/* 802.11h Measurement Request/Report IEs */
+/* Measurement Type field */
+#define DOT11_MEASURE_TYPE_BASIC       0       /* d11 measurement basic type */
+#define DOT11_MEASURE_TYPE_CCA                 1       /* d11 measurement CCA type */
+#define DOT11_MEASURE_TYPE_RPI         2       /* d11 measurement PRI type */
+
+/* Measurement Request Modes */
+#define DOT11_MEASURE_MODE_ENABLE      (1<<1)  /* d11 measurement enable */
+#define DOT11_MEASURE_MODE_REQUEST     (1<<2)  /* d11 measurement request */
+#define DOT11_MEASURE_MODE_REPORT      (1<<3)  /* d11 measurement report */
+/* Measurement Report Modes */
+#define DOT11_MEASURE_MODE_LATE        (1<<0)  /* d11 measurement late */
+#define DOT11_MEASURE_MODE_INCAPABLE   (1<<1)  /* d11 measurement incapable */
+#define DOT11_MEASURE_MODE_REFUSED     (1<<2)  /* d11 measurement refuse */
+/* Basic Measurement Map bits */
+#define DOT11_MEASURE_BASIC_MAP_BSS    ((uint8)(1<<0)) /* d11 measurement basic map BSS */
+#define DOT11_MEASURE_BASIC_MAP_OFDM   ((uint8)(1<<1)) /* d11 measurement map OFDM */
+#define DOT11_MEASURE_BASIC_MAP_UKNOWN ((uint8)(1<<2)) /* d11 measurement map unknown */
+#define DOT11_MEASURE_BASIC_MAP_RADAR  ((uint8)(1<<3)) /* d11 measurement map radar */
+#define DOT11_MEASURE_BASIC_MAP_UNMEAS ((uint8)(1<<4)) /* d11 measurement map unmeasuremnt */
+
+struct dot11_meas_req {
+       uint8 id;
+       uint8 len;
+       uint8 token;
+       uint8 mode;
+       uint8 type;
+       uint8 channel;
+       uint8 start_time[8];
+       uint16 duration;
+} PACKED;
+typedef struct dot11_meas_req dot11_meas_req_t;
+#define DOT11_MNG_IE_MREQ_LEN 14       /* d11 measurement request IE length */
+/* length of Measure Request IE data not including variable len */
+#define DOT11_MNG_IE_MREQ_FIXED_LEN 3  /* d11 measurement request IE fixed length */
+
+struct dot11_meas_rep {
+       uint8 id;
+       uint8 len;
+       uint8 token;
+       uint8 mode;
+       uint8 type;
+       union
+       {
+               struct {
+                       uint8 channel;
+                       uint8 start_time[8];
+                       uint16 duration;
+                       uint8 map;
+               } PACKED basic;
+               uint8 data[1];
+       } PACKED rep;
+} PACKED;
+typedef struct dot11_meas_rep dot11_meas_rep_t;
+
+/* length of Measure Report IE data not including variable len */
+#define DOT11_MNG_IE_MREP_FIXED_LEN    3       /* d11 measurement response IE fixed length */
+
+struct dot11_meas_rep_basic {
+       uint8 channel;
+       uint8 start_time[8];
+       uint16 duration;
+       uint8 map;
+} PACKED;
+typedef struct dot11_meas_rep_basic dot11_meas_rep_basic_t;
+#define DOT11_MEASURE_BASIC_REP_LEN    12      /* d11 measurement basic report length */
+
+struct dot11_quiet {
+       uint8 id;
+       uint8 len;
+       uint8 count;    /* TBTTs until beacon interval in quiet starts */
+       uint8 period;   /* Beacon intervals between periodic quiet periods ? */
+       uint16 duration;        /* Length of quiet period, in TU's */
+       uint16 offset;  /* TU's offset from TBTT in Count field */
+} PACKED;
+typedef struct dot11_quiet dot11_quiet_t;
+
+struct chan_map_tuple {
+       uint8 channel;
+       uint8 map;
+} PACKED;
+typedef struct chan_map_tuple chan_map_tuple_t;
+
+struct dot11_ibss_dfs {
+       uint8 id;
+       uint8 len;
+       uint8 eaddr[ETHER_ADDR_LEN];
+       uint8 interval;
+       chan_map_tuple_t map[1];
+} PACKED;
+typedef struct dot11_ibss_dfs dot11_ibss_dfs_t;
+
+/* WME Elements */
+#define WME_OUI                        "\x00\x50\xf2"  /* WME OUI */
+#define WME_VER                        1       /* WME version */
+#define WME_TYPE               2       /* WME type */
+#define WME_SUBTYPE_IE         0       /* Information Element */
+#define WME_SUBTYPE_PARAM_IE   1       /* Parameter Element */
+#define WME_SUBTYPE_TSPEC      2       /* Traffic Specification */
+
+/* WME Access Category Indices (ACIs) */
+#define AC_BE                  0       /* Best Effort */
+#define AC_BK                  1       /* Background */
+#define AC_VI                  2       /* Video */
+#define AC_VO                  3       /* Voice */
+#define AC_COUNT               4       /* number of ACs */
+
+typedef uint8 ac_bitmap_t;     /* AC bitmap of (1 << AC_xx) */
+
+#define AC_BITMAP_NONE         0x0     /* No ACs */
+#define AC_BITMAP_ALL          0xf     /* All ACs */
+#define AC_BITMAP_TST(ab, ac)  (((ab) & (1 << (ac))) != 0)
+
+/* WME Information Element (IE) */
+struct wme_ie {
+       uint8 oui[3];
+       uint8 type;
+       uint8 subtype;
+       uint8 version;
+       uint8 qosinfo;
+} PACKED;
+typedef struct wme_ie wme_ie_t;
+#define WME_IE_LEN 7   /* WME IE length */
+
+struct edcf_acparam {
+       uint8   ACI;
+       uint8   ECW;
+       uint16  TXOP;           /* stored in network order (ls octet first) */
+} PACKED;
+typedef struct edcf_acparam edcf_acparam_t;
+
+/* WME Parameter Element (PE) */
+struct wme_param_ie {
+       uint8 oui[3];
+       uint8 type;
+       uint8 subtype;
+       uint8 version;
+       uint8 qosinfo;
+       uint8 rsvd;
+       edcf_acparam_t acparam[AC_COUNT];
+} PACKED;
+typedef struct wme_param_ie wme_param_ie_t;
+#define WME_PARAM_IE_LEN            24          /* WME Parameter IE length */
+
+/* QoS Info field for IE as sent from AP */
+#define WME_QI_AP_APSD_MASK         0x80        /* U-APSD Supported mask */
+#define WME_QI_AP_APSD_SHIFT        7           /* U-APSD Supported shift */
+#define WME_QI_AP_COUNT_MASK        0x0f        /* Parameter set count mask */
+#define WME_QI_AP_COUNT_SHIFT       0           /* Parameter set count shift */
+
+/* QoS Info field for IE as sent from STA */
+#define WME_QI_STA_MAXSPLEN_MASK    0x60        /* Max Service Period Length mask */
+#define WME_QI_STA_MAXSPLEN_SHIFT   5           /* Max Service Period Length shift */
+#define WME_QI_STA_APSD_ALL_MASK    0xf         /* APSD all AC bits mask */
+#define WME_QI_STA_APSD_ALL_SHIFT   0           /* APSD all AC bits shift */
+#define WME_QI_STA_APSD_BE_MASK     0x8         /* APSD AC_BE mask */
+#define WME_QI_STA_APSD_BE_SHIFT    3           /* APSD AC_BE shift */
+#define WME_QI_STA_APSD_BK_MASK     0x4         /* APSD AC_BK mask */
+#define WME_QI_STA_APSD_BK_SHIFT    2           /* APSD AC_BK shift */
+#define WME_QI_STA_APSD_VI_MASK     0x2         /* APSD AC_VI mask */
+#define WME_QI_STA_APSD_VI_SHIFT    1           /* APSD AC_VI shift */
+#define WME_QI_STA_APSD_VO_MASK     0x1         /* APSD AC_VO mask */
+#define WME_QI_STA_APSD_VO_SHIFT    0           /* APSD AC_VO shift */
+
+/* ACI */
+#define EDCF_AIFSN_MIN               1           /* AIFSN minimum value */
+#define EDCF_AIFSN_MAX               15          /* AIFSN maximum value */
+#define EDCF_AIFSN_MASK              0x0f        /* AIFSN mask */
+#define EDCF_ACM_MASK                0x10        /* ACM mask */
+#define EDCF_ACI_MASK                0x60        /* ACI mask */
+#define EDCF_ACI_SHIFT               5           /* ACI shift */
+
+/* ECW */
+#define EDCF_ECW_MIN                 0           /* cwmin/cwmax exponent minimum value */
+#define EDCF_ECW_MAX                 15          /* cwmin/cwmax exponent maximum value */
+#define EDCF_ECW2CW(exp)             ((1 << (exp)) - 1)
+#define EDCF_ECWMIN_MASK             0x0f        /* cwmin exponent form mask */
+#define EDCF_ECWMAX_MASK             0xf0        /* cwmax exponent form mask */
+#define EDCF_ECWMAX_SHIFT            4           /* cwmax exponent form shift */
+
+/* TXOP */
+#define EDCF_TXOP_MIN                0           /* TXOP minimum value */
+#define EDCF_TXOP_MAX                65535       /* TXOP maximum value */
+#define EDCF_TXOP2USEC(txop)         ((txop) << 5)
+
+/* Default EDCF parameters that AP advertises for STA to use; WMM draft Table 12 */
+#define EDCF_AC_BE_ACI_STA           0x03      /* STA ACI value for best effort AC */
+#define EDCF_AC_BE_ECW_STA           0xA4      /* STA ECW value for best effort AC */
+#define EDCF_AC_BE_TXOP_STA          0x0000    /* STA TXOP value for best effort AC */
+#define EDCF_AC_BK_ACI_STA           0x27      /* STA ACI value for background AC */
+#define EDCF_AC_BK_ECW_STA           0xA4      /* STA ECW value for background AC */
+#define EDCF_AC_BK_TXOP_STA          0x0000    /* STA TXOP value for background AC */
+#define EDCF_AC_VI_ACI_STA           0x42      /* STA ACI value for video AC */
+#define EDCF_AC_VI_ECW_STA           0x43      /* STA ECW value for video AC */
+#define EDCF_AC_VI_TXOP_STA          0x005e    /* STA TXOP value for video AC */
+#define EDCF_AC_VO_ACI_STA           0x62      /* STA ACI value for audio AC */
+#define EDCF_AC_VO_ECW_STA           0x32      /* STA ECW value for audio AC */
+#define EDCF_AC_VO_TXOP_STA          0x002f    /* STA TXOP value for audio AC */
+
+/* Default EDCF parameters that AP uses; WMM draft Table 14 */
+#define EDCF_AC_BE_ACI_AP            0x03      /* AP ACI value for best effort AC */
+#define EDCF_AC_BE_ECW_AP            0x64      /* AP ECW value for best effort AC */
+#define EDCF_AC_BE_TXOP_AP           0x0000    /* AP TXOP value for best effort AC */
+#define EDCF_AC_BK_ACI_AP            0x27      /* AP ACI value for background AC */
+#define EDCF_AC_BK_ECW_AP            0xA4      /* AP ECW value for background AC */
+#define EDCF_AC_BK_TXOP_AP           0x0000    /* AP TXOP value for background AC */
+#define EDCF_AC_VI_ACI_AP            0x41      /* AP ACI value for video AC */
+#define EDCF_AC_VI_ECW_AP            0x43      /* AP ECW value for video AC */
+#define EDCF_AC_VI_TXOP_AP           0x005e    /* AP TXOP value for video AC */
+#define EDCF_AC_VO_ACI_AP            0x61      /* AP ACI value for audio AC */
+#define EDCF_AC_VO_ECW_AP            0x32      /* AP ECW value for audio AC */
+#define EDCF_AC_VO_TXOP_AP           0x002f    /* AP TXOP value for audio AC */
+
+struct dot11_qbss_load_ie {
+       uint8 id;                       /* 11, DOT11_MNG_QBSS_LOAD_ID */
+       uint8 length;
+       uint16 station_count;           /* total number of STAs associated */
+       uint8 channel_utilization;      /* % of time, normalized to 255, QAP sensed medium busy */
+       uint16 aac;                     /* available admission capacity */
+} PACKED;
+typedef struct dot11_qbss_load_ie dot11_qbss_load_ie_t;
+
+/* nom_msdu_size */
+#define FIXED_MSDU_SIZE 0x8000         /* MSDU size is fixed */
+#define MSDU_SIZE_MASK 0x7fff          /* (Nominal or fixed) MSDU size */
+
+/* surplus_bandwidth */
+/* Represented as 3 bits of integer, binary point, 13 bits fraction */
+#define        INTEGER_SHIFT   13      /* integer shift */
+#define FRACTION_MASK  0x1FFF  /* fraction mask */
+
+/* Management Notification Frame */
+struct dot11_management_notification {
+       uint8 category;                 /* DOT11_ACTION_NOTIFICATION */
+       uint8 action;
+       uint8 token;
+       uint8 status;
+       uint8 data[1];                  /* Elements */
+} PACKED;
+#define DOT11_MGMT_NOTIFICATION_LEN 4  /* Fixed length */
+
+/* WME Action Codes */
+#define WME_ADDTS_REQUEST      0       /* WME ADDTS request */
+#define WME_ADDTS_RESPONSE     1       /* WME ADDTS response */
+#define WME_DELTS_REQUEST      2       /* WME DELTS request */
+
+/* WME Setup Response Status Codes */
+#define WME_ADMISSION_ACCEPTED 0       /* WME admission accepted */
+#define WME_INVALID_PARAMETERS 1       /* WME invalide parameters */
+#define WME_ADMISSION_REFUSED  3       /* WME admission refused */
+
+/* Macro to take a pointer to a beacon or probe response
+ * body and return the char* pointer to the SSID info element
+ */
+#define BCN_PRB_SSID(body) ((char*)(body) + DOT11_BCN_PRB_LEN)
+
+/* Authentication frame payload constants */
+#define DOT11_OPEN_SYSTEM      0       /* d11 open authentication */
+#define DOT11_SHARED_KEY       1       /* d11 shared authentication */
+#define DOT11_CHALLENGE_LEN    128     /* d11 challenge text length */
+
+/* Frame control macros */
+#define FC_PVER_MASK           0x3     /* PVER mask */
+#define FC_PVER_SHIFT          0       /* PVER shift */
+#define FC_TYPE_MASK           0xC     /* type mask */
+#define FC_TYPE_SHIFT          2       /* type shift */
+#define FC_SUBTYPE_MASK                0xF0    /* subtype mask */
+#define FC_SUBTYPE_SHIFT       4       /* subtype shift */
+#define FC_TODS                        0x100   /* to DS */
+#define FC_TODS_SHIFT          8       /* to DS shift */
+#define FC_FROMDS              0x200   /* from DS */
+#define FC_FROMDS_SHIFT                9       /* from DS shift */
+#define FC_MOREFRAG            0x400   /* more frag. */
+#define FC_MOREFRAG_SHIFT      10      /* more frag. shift */
+#define FC_RETRY               0x800   /* retry */
+#define FC_RETRY_SHIFT         11      /* retry shift */
+#define FC_PM                  0x1000  /* PM */
+#define FC_PM_SHIFT            12      /* PM shift */
+#define FC_MOREDATA            0x2000  /* more data */
+#define FC_MOREDATA_SHIFT      13      /* more data shift */
+#define FC_WEP                 0x4000  /* WEP */
+#define FC_WEP_SHIFT           14      /* WEP shift */
+#define FC_ORDER               0x8000  /* order */
+#define FC_ORDER_SHIFT         15      /* order shift */
+
+/* sequence control macros */
+#define SEQNUM_SHIFT           4       /* seq. number shift */
+#define SEQNUM_MAX             0x1000  /* max seqnum + 1 */
+#define FRAGNUM_MASK           0xF     /* frag. number mask */
+
+/* Frame Control type/subtype defs */
+
+/* FC Types */
+#define FC_TYPE_MNG            0       /* management type */
+#define FC_TYPE_CTL            1       /* control type */
+#define FC_TYPE_DATA           2       /* data type */
+
+/* Management Subtypes */
+#define FC_SUBTYPE_ASSOC_REQ           0       /* assoc. request */
+#define FC_SUBTYPE_ASSOC_RESP          1       /* assoc. response */
+#define FC_SUBTYPE_REASSOC_REQ         2       /* reassoc. request */
+#define FC_SUBTYPE_REASSOC_RESP                3       /* reassoc. response */
+#define FC_SUBTYPE_PROBE_REQ           4       /* probe request */
+#define FC_SUBTYPE_PROBE_RESP          5       /* probe response */
+#define FC_SUBTYPE_BEACON              8       /* beacon */
+#define FC_SUBTYPE_ATIM                        9       /* ATIM */
+#define FC_SUBTYPE_DISASSOC            10      /* disassoc. */
+#define FC_SUBTYPE_AUTH                        11      /* authentication */
+#define FC_SUBTYPE_DEAUTH              12      /* de-authentication */
+#define FC_SUBTYPE_ACTION              13      /* action */
+#define FC_SUBTYPE_ACTION_NOACK                14      /* action no-ack */
+
+/* Control Subtypes */
+#define FC_SUBTYPE_CTL_WRAPPER         7       /* Control Wrapper */
+#define FC_SUBTYPE_BLOCKACK_REQ                8       /* Block Ack Req */
+#define FC_SUBTYPE_BLOCKACK            9       /* Block Ack */
+#define FC_SUBTYPE_PS_POLL             10      /* PS poll */
+#define FC_SUBTYPE_RTS                 11      /* RTS */
+#define FC_SUBTYPE_CTS                 12      /* CTS */
+#define FC_SUBTYPE_ACK                 13      /* ACK */
+#define FC_SUBTYPE_CF_END              14      /* CF-END */
+#define FC_SUBTYPE_CF_END_ACK          15      /* CF-END ACK */
+
+/* Data Subtypes */
+#define FC_SUBTYPE_DATA                        0       /* Data */
+#define FC_SUBTYPE_DATA_CF_ACK         1       /* Data + CF-ACK */
+#define FC_SUBTYPE_DATA_CF_POLL                2       /* Data + CF-Poll */
+#define FC_SUBTYPE_DATA_CF_ACK_POLL    3       /* Data + CF-Ack + CF-Poll */
+#define FC_SUBTYPE_NULL                        4       /* Null */
+#define FC_SUBTYPE_CF_ACK              5       /* CF-Ack */
+#define FC_SUBTYPE_CF_POLL             6       /* CF-Poll */
+#define FC_SUBTYPE_CF_ACK_POLL         7       /* CF-Ack + CF-Poll */
+#define FC_SUBTYPE_QOS_DATA            8       /* QoS Data */
+#define FC_SUBTYPE_QOS_DATA_CF_ACK     9       /* QoS Data + CF-Ack */
+#define FC_SUBTYPE_QOS_DATA_CF_POLL    10      /* QoS Data + CF-Poll */
+#define FC_SUBTYPE_QOS_DATA_CF_ACK_POLL        11      /* QoS Data + CF-Ack + CF-Poll */
+#define FC_SUBTYPE_QOS_NULL            12      /* QoS Null */
+#define FC_SUBTYPE_QOS_CF_POLL         14      /* QoS CF-Poll */
+#define FC_SUBTYPE_QOS_CF_ACK_POLL     15      /* QoS CF-Ack + CF-Poll */
+
+/* Data Subtype Groups */
+#define FC_SUBTYPE_ANY_QOS(s)          (((s) & 8) != 0)
+#define FC_SUBTYPE_ANY_NULL(s)         (((s) & 4) != 0)
+#define FC_SUBTYPE_ANY_CF_POLL(s)      (((s) & 2) != 0)
+#define FC_SUBTYPE_ANY_CF_ACK(s)       (((s) & 1) != 0)
+
+/* Type/Subtype Combos */
+#define FC_KIND_MASK           (FC_TYPE_MASK | FC_SUBTYPE_MASK)        /* FC kind mask */
+
+#define FC_KIND(t, s)  (((t) << FC_TYPE_SHIFT) | ((s) << FC_SUBTYPE_SHIFT))    /* FC kind */
+
+#define FC_SUBTYPE(fc) (((fc) & FC_SUBTYPE_MASK) >> FC_SUBTYPE_SHIFT)  /* Subtype from FC */
+#define FC_TYPE(fc)    (((fc) & FC_TYPE_MASK) >> FC_TYPE_SHIFT)        /* Type from FC */
+
+#define FC_ASSOC_REQ   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_REQ)      /* assoc. request */
+#define FC_ASSOC_RESP  FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ASSOC_RESP)     /* assoc. response */
+#define FC_REASSOC_REQ FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_REQ)    /* reassoc. request */
+#define FC_REASSOC_RESP        FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_REASSOC_RESP)   /* reassoc. response */
+#define FC_PROBE_REQ   FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_REQ)      /* probe request */
+#define FC_PROBE_RESP  FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_PROBE_RESP)     /* probe response */
+#define FC_BEACON      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_BEACON)         /* beacon */
+#define FC_DISASSOC    FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DISASSOC)       /* disassoc */
+#define FC_AUTH                FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_AUTH)           /* authentication */
+#define FC_DEAUTH      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_DEAUTH)         /* deauthentication */
+#define FC_ACTION      FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION)         /* action */
+#define FC_ACTION_NOACK        FC_KIND(FC_TYPE_MNG, FC_SUBTYPE_ACTION_NOACK)   /* action no-ack */
+
+#define FC_CTL_WRAPPER FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTL_WRAPPER)    /* Control Wrapper */
+#define FC_BLOCKACK_REQ        FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK_REQ)   /* Block Ack Req */
+#define FC_BLOCKACK    FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_BLOCKACK)       /* Block Ack */
+#define FC_PS_POLL     FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_PS_POLL)        /* PS poll */
+#define FC_RTS         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_RTS)            /* RTS */
+#define FC_CTS         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CTS)            /* CTS */
+#define FC_ACK         FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_ACK)            /* ACK */
+#define FC_CF_END      FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END)         /* CF-END */
+#define FC_CF_END_ACK  FC_KIND(FC_TYPE_CTL, FC_SUBTYPE_CF_END_ACK)     /* CF-END ACK */
+
+#define FC_DATA                FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA)          /* data */
+#define FC_NULL_DATA   FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_NULL)          /* null data */
+#define FC_DATA_CF_ACK FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_DATA_CF_ACK)   /* data CF ACK */
+#define FC_QOS_DATA    FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_DATA)      /* QoS data */
+#define FC_QOS_NULL    FC_KIND(FC_TYPE_DATA, FC_SUBTYPE_QOS_NULL)      /* QoS null */
+
+/* QoS Control Field */
+
+/* 802.1D Priority */
+#define QOS_PRIO_SHIFT         0       /* QoS priority shift */
+#define QOS_PRIO_MASK          0x0007  /* QoS priority mask */
+#define QOS_PRIO(qos)          (((qos) & QOS_PRIO_MASK) >> QOS_PRIO_SHIFT)     /* QoS priority */
+
+/* Traffic Identifier */
+#define QOS_TID_SHIFT          0       /* QoS TID shift */
+#define QOS_TID_MASK           0x000f  /* QoS TID mask */
+#define QOS_TID(qos)           (((qos) & QOS_TID_MASK) >> QOS_TID_SHIFT)       /* QoS TID */
+
+/* End of Service Period (U-APSD) */
+#define QOS_EOSP_SHIFT         4       /* QoS End of Service Period shift */
+#define QOS_EOSP_MASK          0x0010  /* QoS End of Service Period mask */
+#define QOS_EOSP(qos)          (((qos) & QOS_EOSP_MASK) >> QOS_EOSP_SHIFT)     /* Qos EOSP */
+
+/* Ack Policy */
+#define QOS_ACK_NORMAL_ACK     0       /* Normal Ack */
+#define QOS_ACK_NO_ACK         1       /* No Ack (eg mcast) */
+#define QOS_ACK_NO_EXP_ACK     2       /* No Explicit Ack */
+#define QOS_ACK_BLOCK_ACK      3       /* Block Ack */
+#define QOS_ACK_SHIFT          5       /* QoS ACK shift */
+#define QOS_ACK_MASK           0x0060  /* QoS ACK mask */
+#define QOS_ACK(qos)           (((qos) & QOS_ACK_MASK) >> QOS_ACK_SHIFT)       /* QoS ACK */
+
+/* A-MSDU flag */
+#define QOS_AMSDU_SHIFT                7       /* AMSDU shift */
+#define QOS_AMSDU_MASK         0x0080  /* AMSDU mask */
+
+/* Management Frames */
+
+/* Management Frame Constants */
+
+/* Fixed fields */
+#define DOT11_MNG_AUTH_ALGO_LEN                2       /* d11 management auth. algo. length */
+#define DOT11_MNG_AUTH_SEQ_LEN         2       /* d11 management auth. seq. length */
+#define DOT11_MNG_BEACON_INT_LEN       2       /* d11 management beacon interval length */
+#define DOT11_MNG_CAP_LEN              2       /* d11 management cap. length */
+#define DOT11_MNG_AP_ADDR_LEN          6       /* d11 management AP address length */
+#define DOT11_MNG_LISTEN_INT_LEN       2       /* d11 management listen interval length */
+#define DOT11_MNG_REASON_LEN           2       /* d11 management reason length */
+#define DOT11_MNG_AID_LEN              2       /* d11 management AID length */
+#define DOT11_MNG_STATUS_LEN           2       /* d11 management status length */
+#define DOT11_MNG_TIMESTAMP_LEN                8       /* d11 management timestamp length */
+
+/* DUR/ID field in assoc resp is 0xc000 | AID */
+#define DOT11_AID_MASK                 0x3fff  /* d11 AID mask */
+
+/* Reason Codes */
+#define DOT11_RC_RESERVED              0       /* d11 RC reserved */
+#define DOT11_RC_UNSPECIFIED           1       /* Unspecified reason */
+#define DOT11_RC_AUTH_INVAL            2       /* Previous authentication no longer valid */
+#define DOT11_RC_DEAUTH_LEAVING                3       /* Deauthenticated because sending station
+                                                * is leaving (or has left) IBSS or ESS
+                                                */
+#define DOT11_RC_INACTIVITY            4       /* Disassociated due to inactivity */
+#define DOT11_RC_BUSY                  5       /* Disassociated because AP is unable to handle
+                                                * all currently associated stations
+                                                */
+#define DOT11_RC_INVAL_CLASS_2         6       /* Class 2 frame received from
+                                                * nonauthenticated station
+                                                */
+#define DOT11_RC_INVAL_CLASS_3         7       /* Class 3 frame received from
+                                                *  nonassociated station
+                                                */
+#define DOT11_RC_DISASSOC_LEAVING      8       /* Disassociated because sending station is
+                                                * leaving (or has left) BSS
+                                                */
+#define DOT11_RC_NOT_AUTH              9       /* Station requesting (re)association is not
+                                                * authenticated with responding station
+                                                */
+#define DOT11_RC_BAD_PC                        10      /* Unacceptable power capability element */
+#define DOT11_RC_BAD_CHANNELS          11      /* Unacceptable supported channels element */
+/* 12 is unused */
+
+/* 32-39 are QSTA specific reasons added in 11e */
+#define DOT11_RC_UNSPECIFIED_QOS       32      /* unspecified QoS-related reason */
+#define DOT11_RC_INSUFFCIENT_BW                33      /* QAP lacks sufficient bandwidth */
+#define DOT11_RC_EXCESSIVE_FRAMES      34      /* excessive number of frames need ack */
+#define DOT11_RC_TX_OUTSIDE_TXOP       35      /* transmitting outside the limits of txop */
+#define DOT11_RC_LEAVING_QBSS          36      /* QSTA is leaving the QBSS (or restting) */
+#define DOT11_RC_BAD_MECHANISM         37      /* does not want to use the mechanism */
+#define DOT11_RC_SETUP_NEEDED          38      /* mechanism needs a setup */
+#define DOT11_RC_TIMEOUT               39      /* timeout */
+
+#define DOT11_RC_MAX                   23      /* Reason codes > 23 are reserved */
+
+/* Status Codes */
+#define DOT11_SC_SUCCESS               0       /* Successful */
+#define DOT11_SC_FAILURE               1       /* Unspecified failure */
+#define DOT11_SC_CAP_MISMATCH          10      /* Cannot support all requested
+                                                * capabilities in the Capability
+                                                * Information field
+                                                */
+#define DOT11_SC_REASSOC_FAIL          11      /* Reassociation denied due to inability
+                                                * to confirm that association exists
+                                                */
+#define DOT11_SC_ASSOC_FAIL            12      /* Association denied due to reason
+                                                * outside the scope of this standard
+                                                */
+#define DOT11_SC_AUTH_MISMATCH         13      /* Responding station does not support
+                                                * the specified authentication
+                                                * algorithm
+                                                */
+#define DOT11_SC_AUTH_SEQ              14      /* Received an Authentication frame
+                                                * with authentication transaction
+                                                * sequence number out of expected
+                                                * sequence
+                                                */
+#define DOT11_SC_AUTH_CHALLENGE_FAIL   15      /* Authentication rejected because of
+                                                * challenge failure
+                                                */
+#define DOT11_SC_AUTH_TIMEOUT          16      /* Authentication rejected due to timeout
+                                                * waiting for next frame in sequence
+                                                */
+#define DOT11_SC_ASSOC_BUSY_FAIL       17      /* Association denied because AP is
+                                                * unable to handle additional
+                                                * associated stations
+                                                */
+#define DOT11_SC_ASSOC_RATE_MISMATCH   18      /* Association denied due to requesting
+                                                * station not supporting all of the
+                                                * data rates in the BSSBasicRateSet
+                                                * parameter
+                                                */
+#define DOT11_SC_ASSOC_SHORT_REQUIRED  19      /* Association denied due to requesting
+                                                * station not supporting the Short
+                                                * Preamble option
+                                                */
+#define DOT11_SC_ASSOC_PBCC_REQUIRED   20      /* Association denied due to requesting
+                                                * station not supporting the PBCC
+                                                * Modulation option
+                                                */
+#define DOT11_SC_ASSOC_AGILITY_REQUIRED        21      /* Association denied due to requesting
+                                                * station not supporting the Channel
+                                                * Agility option
+                                                */
+#define DOT11_SC_ASSOC_SPECTRUM_REQUIRED       22      /* Association denied because Spectrum
+                                                        * Management capability is required.
+                                                        */
+#define DOT11_SC_ASSOC_BAD_POWER_CAP   23      /* Association denied because the info
+                                                * in the Power Cap element is
+                                                * unacceptable.
+                                                */
+#define DOT11_SC_ASSOC_BAD_SUP_CHANNELS        24      /* Association denied because the info
+                                                * in the Supported Channel element is
+                                                * unacceptable
+                                                */
+#define DOT11_SC_ASSOC_SHORTSLOT_REQUIRED      25      /* Association denied due to requesting
+                                                        * station not supporting the Short Slot
+                                                        * Time option
+                                                        */
+#define DOT11_SC_ASSOC_ERPBCC_REQUIRED 26      /* Association denied due to requesting
+                                                * station not supporting the ER-PBCC
+                                                * Modulation option
+                                                */
+#define DOT11_SC_ASSOC_DSSOFDM_REQUIRED        27      /* Association denied due to requesting
+                                                * station not supporting the DSS-OFDM
+                                                * option
+                                                */
+
+#define        DOT11_SC_DECLINED               37      /* request declined */
+#define        DOT11_SC_INVALID_PARAMS         38      /* One or more params have invalid values */
+
+/* Info Elts, length of INFORMATION portion of Info Elts */
+#define DOT11_MNG_DS_PARAM_LEN                 1       /* d11 management DS parameter length */
+#define DOT11_MNG_IBSS_PARAM_LEN               2       /* d11 management IBSS parameter length */
+
+/* TIM Info element has 3 bytes fixed info in INFORMATION field,
+ * followed by 1 to 251 bytes of Partial Virtual Bitmap
+ */
+#define DOT11_MNG_TIM_FIXED_LEN                        3       /* d11 management TIM fixed length */
+#define DOT11_MNG_TIM_DTIM_COUNT               0       /* d11 management DTIM count */
+#define DOT11_MNG_TIM_DTIM_PERIOD              1       /* d11 management DTIM period */
+#define DOT11_MNG_TIM_BITMAP_CTL               2       /* d11 management TIM BITMAP control  */
+#define DOT11_MNG_TIM_PVB                      3       /* d11 management TIM PVB */
+
+/* TLV defines */
+#define TLV_TAG_OFF            0       /* tag offset */
+#define TLV_LEN_OFF            1       /* length offset */
+#define TLV_HDR_LEN            2       /* header length */
+#define TLV_BODY_OFF           2       /* body offset */
+
+/* Management Frame Information Element IDs */
+#define DOT11_MNG_SSID_ID                      0       /* d11 management SSID id */
+#define DOT11_MNG_RATES_ID                     1       /* d11 management rates id */
+#define DOT11_MNG_FH_PARMS_ID                  2       /* d11 management FH parameter id */
+#define DOT11_MNG_DS_PARMS_ID                  3       /* d11 management DS parameter id */
+#define DOT11_MNG_CF_PARMS_ID                  4       /* d11 management CF parameter id */
+#define DOT11_MNG_TIM_ID                       5       /* d11 management TIM id */
+#define DOT11_MNG_IBSS_PARMS_ID                        6       /* d11 management IBSS parameter id */
+#define DOT11_MNG_COUNTRY_ID                   7       /* d11 management country id */
+#define DOT11_MNG_HOPPING_PARMS_ID             8       /* d11 management hopping parameter id */
+#define DOT11_MNG_HOPPING_TABLE_ID             9       /* d11 management hopping table id */
+#define DOT11_MNG_REQUEST_ID                   10      /* d11 management request id */
+#define DOT11_MNG_QBSS_LOAD_ID                         11      /* d11 management QBSS Load id */
+#define DOT11_MNG_CHALLENGE_ID                 16      /* d11 management chanllenge id */
+#define DOT11_MNG_PWR_CONSTRAINT_ID            32      /* 11H PowerConstraint */
+#define DOT11_MNG_PWR_CAP_ID                   33      /* 11H PowerCapability */
+#define DOT11_MNG_TPC_REQUEST_ID               34      /* 11H TPC Request */
+#define DOT11_MNG_TPC_REPORT_ID                        35      /* 11H TPC Report */
+#define DOT11_MNG_SUPP_CHANNELS_ID             36      /* 11H Supported Channels */
+#define DOT11_MNG_CHANNEL_SWITCH_ID            37      /* 11H ChannelSwitch Announcement */
+#define DOT11_MNG_MEASURE_REQUEST_ID           38      /* 11H MeasurementRequest */
+#define DOT11_MNG_MEASURE_REPORT_ID            39      /* 11H MeasurementReport */
+#define DOT11_MNG_QUIET_ID                     40      /* 11H Quiet */
+#define DOT11_MNG_IBSS_DFS_ID                  41      /* 11H IBSS_DFS */
+#define DOT11_MNG_ERP_ID                       42      /* d11 management ERP id */
+#define DOT11_MNG_TS_DELAY_ID                  43      /* d11 management TS Delay id */
+#define        DOT11_MNG_HT_CAP                        45      /* d11 mgmt HT cap id */
+#define DOT11_MNG_NONERP_ID                    47      /* d11 management NON-ERP id */
+#define DOT11_MNG_RSN_ID                       48      /* d11 management RSN id */
+#define DOT11_MNG_EXT_RATES_ID                 50      /* d11 management ext. rates id */
+#define DOT11_MNG_EXT_CSA_ID                   60      /* d11 Extended CSA */
+#define        DOT11_MNG_HT_ADD                        61      /* d11 mgmt additional HT info */
+#define        DOT11_MNG_EXT_CHANNEL_OFFSET            62      /* d11 mgmt ext channel offset */
+#define        DOT11_MNG_EXT_CAP                       127     /* d11 mgmt ext capability */
+#define DOT11_MNG_WPA_ID                       221     /* d11 management WPA id */
+#define DOT11_MNG_PROPR_ID                     221     /* d11 management proprietary id */
+
+/* Rate element Basic flag and rate mask */
+#define DOT11_RATE_BASIC                       0x80    /* flag for a Basic Rate */
+#define DOT11_RATE_MASK                                0x7F    /* mask for numeric part of rate */
+
+/* ERP info element bit values */
+#define DOT11_MNG_ERP_LEN                      1       /* ERP is currently 1 byte long */
+#define DOT11_MNG_NONERP_PRESENT               0x01    /* NonERP (802.11b) STAs are present
+                                                        *in the BSS
+                                                        */
+#define DOT11_MNG_USE_PROTECTION               0x02    /* Use protection mechanisms for
+                                                        *ERP-OFDM frames
+                                                        */
+#define DOT11_MNG_BARKER_PREAMBLE              0x04    /* Short Preambles: 0 == allowed,
+                                                        * 1 == not allowed
+                                                        */
+/* TS Delay element offset & size */
+#define DOT11_MGN_TS_DELAY_LEN         4       /* length of TS DELAY IE */
+#define TS_DELAY_FIELD_SIZE                    4       /* TS DELAY field size */
+
+/* Capability Information Field */
+#define DOT11_CAP_ESS                          0x0001  /* d11 cap. ESS */
+#define DOT11_CAP_IBSS                         0x0002  /* d11 cap. IBSS */
+#define DOT11_CAP_POLLABLE                     0x0004  /* d11 cap. pollable */
+#define DOT11_CAP_POLL_RQ                      0x0008  /* d11 cap. poll request */
+#define DOT11_CAP_PRIVACY                      0x0010  /* d11 cap. privacy */
+#define DOT11_CAP_SHORT                                0x0020  /* d11 cap. short */
+#define DOT11_CAP_PBCC                         0x0040  /* d11 cap. PBCC */
+#define DOT11_CAP_AGILITY                      0x0080  /* d11 cap. agility */
+#define DOT11_CAP_SPECTRUM                     0x0100  /* d11 cap. spectrum */
+#define DOT11_CAP_SHORTSLOT                    0x0400  /* d11 cap. shortslot */
+#define DOT11_CAP_CCK_OFDM                     0x2000  /* d11 cap. CCK/OFDM */
+
+/* Extended Capability Information Field */
+#define DOT11_EXT_CAP_HT_IE_SUPPORT    0x01    /* support for info xchg action frame */
+
+/* Action Frame Constants */
+#define DOT11_ACTION_HDR_LEN           2       /* action frame header length */
+#define DOT11_ACTION_CAT_ERR_MASK      0x80    /* d11 action category error mask */
+#define DOT11_ACTION_CAT_MASK          0x7F    /* d11 action category mask */
+#define DOT11_ACTION_CAT_SPECT_MNG     0x00    /* d11 action category spectrum management */
+#define DOT11_ACTION_CAT_BLOCKACK      0x03    /* d11 action category block ack */
+#define DOT11_ACTION_CAT_HT            0x07    /* d11 action category for HT */
+#define DOT11_ACTION_NOTIFICATION      0x11    /* 17 */
+
+#define DOT11_ACTION_ID_M_REQ          0       /* d11 action measurement request */
+#define DOT11_ACTION_ID_M_REP          1       /* d11 action measurement response */
+#define DOT11_ACTION_ID_TPC_REQ                2       /* d11 action TPC request */
+#define DOT11_ACTION_ID_TPC_REP                3       /* d11 action TPC response */
+#define DOT11_ACTION_ID_CHANNEL_SWITCH 4       /* d11 action channel switch */
+#define DOT11_ACTION_ID_EXT_CSA                5       /* d11 extened CSA for 11n */
+
+/* HT action ids */
+#define DOT11_ACTION_ID_HT_CH_WIDTH    0       /* notify channel width action id */
+#define DOT11_ACTION_ID_HT_MIMO_PS     1       /* mimo ps action id */
+#define DOT11_ACTION_ID_HT_INFO_XCHG   8       /* HT Information Exchange action id */
+
+/* Block Ack action types */
+#define DOT11_BA_ACTION_ADDBA_REQ      0       /* ADDBA Req action frame type */
+#define DOT11_BA_ACTION_ADDBA_RESP     1       /* ADDBA Resp action frame type */
+#define DOT11_BA_ACTION_DELBA          2       /* DELBA action frame type */
+
+/* ADDBA action parameters */
+#define DOT11_ADDBA_PARAM_AMSDU_SUP    0x0001  /* AMSDU supported under BA */
+#define DOT11_ADDBA_PARAM_POLICY_MASK  0x0002  /* policy mask(ack vs delayed) */
+#define DOT11_ADDBA_PARAM_POLICY_SHIFT 1       /* policy shift */
+#define DOT11_ADDBA_PARAM_TID_MASK     0x003c  /* tid mask */
+#define DOT11_ADDBA_PARAM_TID_SHIFT    2       /* tid shift */
+#define DOT11_ADDBA_PARAM_BSIZE_MASK   0xffc0  /* buffer size mask */
+#define DOT11_ADDBA_PARAM_BSIZE_SHIFT  6       /* buffer size shift */
+
+#define DOT11_ADDBA_POLICY_DELAYED     0       /* delayed BA policy */
+#define DOT11_ADDBA_POLICY_IMMEDIATE   1       /* immediate BA policy */
+
+struct dot11_addba_req {
+       uint8 category;                         /* category of action frame (3) */
+       uint8 action;                           /* action: addba req */
+       uint8 token;                            /* identifier */
+       uint16 addba_param_set;                 /* parameter set */
+       uint16 timeout;                         /* timeout in seconds */
+       uint16 start_seqnum;                    /* starting sequence number */
+}PACKED;
+typedef struct dot11_addba_req dot11_addba_req_t;
+#define DOT11_ADDBA_REQ_LEN            9       /* length of addba req frame */
+
+struct dot11_addba_resp {
+       uint8 category;                         /* category of action frame (3) */
+       uint8 action;                           /* action: addba resp */
+       uint8 token;                            /* identifier */
+       uint16 status;                          /* status of add request */
+       uint16 addba_param_set;                 /* negotiated parameter set */
+       uint16 timeout;                         /* negotiated timeout in seconds */
+}PACKED;
+typedef struct dot11_addba_resp dot11_addba_resp_t;
+#define DOT11_ADDBA_RESP_LEN           9       /* length of addba resp frame */
+
+/* DELBA action parameters */
+#define DOT11_DELBA_PARAM_INIT_MASK    0x0800  /* initiator mask */
+#define DOT11_DELBA_PARAM_INIT_SHIFT   11      /* initiator shift */
+#define DOT11_DELBA_PARAM_TID_MASK     0xf000  /* tid mask */
+#define DOT11_DELBA_PARAM_TID_SHIFT    12      /* tid shift */
+
+struct dot11_delba {
+       uint8 category;                         /* category of action frame (3) */
+       uint8 action;                           /* action: addba req */
+       uint16 delba_param_set;                 /* paarmeter set */
+       uint16 reason;                          /* reason for dellba */
+}PACKED;
+typedef struct dot11_delba dot11_delba_t;
+#define DOT11_DELBA_LEN                        6       /* length of delba frame */
+
+/* MLME Enumerations */
+#define DOT11_BSSTYPE_INFRASTRUCTURE           0       /* d11 infrastructure */
+#define DOT11_BSSTYPE_INDEPENDENT              1       /* d11 independent */
+#define DOT11_BSSTYPE_ANY                      2       /* d11 any BSS type */
+#define DOT11_SCANTYPE_ACTIVE                  0       /* d11 scan active */
+#define DOT11_SCANTYPE_PASSIVE                 1       /* d11 scan passive */
+
+/* 802.11 BRCM "Compromise" Pre N constants */
+#define PREN_PREAMBLE          24      /* green field preamble time */
+#define PREN_MM_EXT            8       /* extra mixed mode preamble time */
+#define PREN_PREAMBLE_EXT      4       /* extra preamble (multiply by unique_streams-1) */
+
+/* 802.11 N PHY constants */
+#define NPHY_RIFS_TIME         2       /* NPHY RIFS time */
+
+/* 802.11 A PHY constants */
+#define APHY_SLOT_TIME         9       /* APHY slot time */
+#define APHY_SIFS_TIME         16      /* APHY SIFS time */
+#define APHY_DIFS_TIME         (APHY_SIFS_TIME + (2 * APHY_SLOT_TIME)) /* APHY DIFS time */
+#define APHY_PREAMBLE_TIME     16      /* APHY preamble time */
+#define APHY_SIGNAL_TIME       4       /* APHY signal time */
+#define APHY_SYMBOL_TIME       4       /* APHY symbol time */
+#define APHY_SERVICE_NBITS     16      /* APHY service nbits */
+#define APHY_TAIL_NBITS                6       /* APHY tail nbits */
+#define        APHY_CWMIN              15      /* APHY cwmin */
+
+/* 802.11 B PHY constants */
+#define BPHY_SLOT_TIME         20      /* BPHY slot time */
+#define BPHY_SIFS_TIME         10      /* BPHY SIFS time */
+#define BPHY_DIFS_TIME         50      /* BPHY DIFS time */
+#define BPHY_PLCP_TIME         192     /* BPHY PLCP time */
+#define BPHY_PLCP_SHORT_TIME   96      /* BPHY PLCP short time */
+#define        BPHY_CWMIN              31      /* BPHY cwmin */
+
+/* 802.11 G constants */
+#define DOT11_OFDM_SIGNAL_EXTENSION    6       /* d11 OFDM signal extension */
+
+#define PHY_CWMAX              1023    /* PHY cwmax */
+
+#define        DOT11_MAXNUMFRAGS       16      /* max # fragments per MSDU */
+
+/* dot11Counters Table - 802.11 spec., Annex D */
+typedef struct d11cnt {
+       uint32          txfrag;         /* dot11TransmittedFragmentCount */
+       uint32          txmulti;        /* dot11MulticastTransmittedFrameCount */
+       uint32          txfail;         /* dot11FailedCount */
+       uint32          txretry;        /* dot11RetryCount */
+       uint32          txretrie;       /* dot11MultipleRetryCount */
+       uint32          rxdup;          /* dot11FrameduplicateCount */
+       uint32          txrts;          /* dot11RTSSuccessCount */
+       uint32          txnocts;        /* dot11RTSFailureCount */
+       uint32          txnoack;        /* dot11ACKFailureCount */
+       uint32          rxfrag;         /* dot11ReceivedFragmentCount */
+       uint32          rxmulti;        /* dot11MulticastReceivedFrameCount */
+       uint32          rxcrc;          /* dot11FCSErrorCount */
+       uint32          txfrmsnt;       /* dot11TransmittedFrameCount */
+       uint32          rxundec;        /* dot11WEPUndecryptableCount */
+} d11cnt_t;
+
+/* BRCM OUI */
+#define BRCM_OUI               "\x00\x10\x18"  /* Broadcom OUI */
+
+/* OUI for BRCM proprietary IE */
+#define BRCM_PROP_OUI          "\x00\x90\x4C"  /* Broadcom proprietary OUI */
+
+/* BRCM info element */
+struct brcm_ie {
+       uint8   id;             /* IE ID, 221, DOT11_MNG_PROPR_ID */
+       uint8   len;            /* IE length */
+       uint8   oui[3];         /* Proprietary OUI, BRCM_OUI */
+       uint8   ver;            /* type/ver of this IE */
+       uint8   assoc;          /* # of assoc STAs */
+       uint8   flags;          /* misc flags */
+       uint8   flags1;         /* misc flags */
+       uint16  amsdu_mtu_pref; /* preferred A-MSDU MTU */
+} PACKED;
+typedef        struct brcm_ie brcm_ie_t;
+#define BRCM_IE_LEN            11      /* BRCM IE length */
+#define BRCM_IE_VER            2       /* BRCM IE version */
+#define BRCM_IE_LEGACY_AES_VER 1       /* BRCM IE legacy AES version */
+
+/* brcm_ie flags */
+#define        BRF_ABCAP               0x1     /* afterburner capable */
+#define        BRF_ABRQRD              0x2     /* afterburner requested */
+#define        BRF_LZWDS               0x4     /* lazy wds enabled */
+#define        BRF_BLOCKACK            0x8     /* BlockACK capable */
+#define BRF_ABCOUNTER_MASK     0xf0    /* afterburner wds "state" counter */
+#define BRF_ABCOUNTER_SHIFT    4       /* offset of afterburner wds "state" counter */
+
+/* brcm_ie flags1 */
+#define        BRF1_AMSDU              0x1     /* A-MSDU capable */
+#define        BRF1_DPT                0x2     /* DPT capable */
+
+#define AB_WDS_TIMEOUT_MAX     15      /* afterburner wds Max count indicating not
+                                        * locally capable
+                                        */
+#define AB_WDS_TIMEOUT_MIN     1       /* afterburner wds, use zero count as indicating
+                                        * "downrev"
+                                        */
+
+/* EWC definitions */
+#define MCSSET_LEN     16      /* 16-bits per 8-bit set to give 128-bits bitmap of MCS Index */
+#define MAX_MCS_NUM    (128)   /* max mcs number = 128 */
+
+struct ewc_cap_ie {
+       uint16  cap;
+       uint8   params;
+       uint8   supp_mcs[MCSSET_LEN];
+       uint16  ext_htcap;
+       uint32  txbf_cap;
+       uint8   as_cap;
+} PACKED;
+typedef struct ewc_cap_ie ewc_cap_ie_t;
+
+/* CAP IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
+/* the capability IE is primarily used to convey this nodes abilities */
+struct ewc_prop_cap_ie {
+       uint8   id;             /* IE ID, 221, DOT11_MNG_PROPR_ID */
+       uint8   len;            /* IE length */
+       uint8   oui[3];         /* Proprietary OUI, BRCM_PROP_OUI */
+       uint8   type;           /* type inidicates what follows */
+       ewc_cap_ie_t cap_ie;
+} PACKED;
+typedef struct ewc_prop_cap_ie ewc_prop_cap_ie_t;
+#define EWC_PROP_IE_OVERHEAD   4       /* overhead bytes for prop oui ie */
+#define EWC_CAP_IE_LEN 26      
+#define EWC_CAP_IE_TYPE        51      
+
+#define EWC_CAP_LDPC_CODING    0x0001  /* Support for rx of LDPC coded pkts */
+#define EWC_CAP_40MHZ          0x0002  /* FALSE:20Mhz, TRUE:20/40MHZ supported */
+#define EWC_CAP_MIMO_PS_MASK   0x000C  /* Mimo PS mask */
+#define EWC_CAP_MIMO_PS_SHIFT  0x0002  /* Mimo PS shift */
+#define EWC_CAP_MIMO_PS_OFF    0x0003  /* Mimo PS, no restriction */
+#define EWC_CAP_MIMO_PS_RTS    0x0001  /* Mimo PS, send RTS/CTS around MIMO frames */
+#define EWC_CAP_MIMO_PS_ON     0x0000  /* Mimo PS, MIMO disallowed */
+#define EWC_CAP_GF             0x0010  /* Greenfield preamble support */
+#define EWC_CAP_SHORT_GI_20    0x0020  /* 20MHZ short guard interval support */
+#define EWC_CAP_SHORT_GI_40    0x0040  /* 40Mhz short guard interval support */
+#define EWC_CAP_TX_STBC                0x0080  /* Tx STBC support */
+#define EWC_CAP_RX_STBC_MASK   0x0300  /* Rx STBC mask */
+#define EWC_CAP_RX_STBC_SHIFT  8       /* Rx STBC shift */
+#define EWC_CAP_DELAYED_BA     0x0400  /* delayed BA support */
+#define EWC_CAP_MAX_AMSDU      0x0800  /* Max AMSDU size in bytes , 0=3839, 1=7935 */
+#define EWC_CAP_DSSS_CCK       0x1000  /* DSSS/CCK supported by the BSS */
+#define EWC_CAP_PSMP           0x2000  /* Power Save Multi Poll support */
+#define EWC_CAP_40MHZ_INTOLERANT 0x4000        /* 40MHz Intolerant */
+#define EWC_CAP_LSIG_TXOP      0x8000  /* L-SIG TXOP protection support */
+
+#define EWC_CAP_RX_STBC_NO             0x0     /* no rx STBC support */
+#define EWC_CAP_RX_STBC_ONE_STREAM     0x1     /* rx STBC support of 1 spatial stream */
+#define EWC_CAP_RX_STBC_TWO_STREAM     0x2     /* rx STBC support of 1-2 spatial streams */
+#define EWC_CAP_RX_STBC_THREE_STREAM   0x3     /* rx STBC support of 1-3 spatial streams */
+
+#define EWC_MAX_AMSDU          7935    /* max amsdu size (bytes) per the EWC spec */
+#define EWC_MIN_AMSDU          3835    /* min amsdu size (bytes) per the EWC spec */
+
+#define EWC_PARAMS_RX_FACTOR_MASK      0x03    /* ampdu rcv factor mask */
+#define EWC_PARAMS_DENSITY_MASK                0x1C    /* ampdu density mask */
+#define EWC_PARAMS_DENSITY_SHIFT       2       /* ampdu density shift */
+
+/* EWC/AMPDU specific define */
+#define AMPDU_MAX_MPDU_DENSITY 7       /* max mpdu density; in 1/8 usec units */
+#define AMPDU_MAX_RX_FACTOR    3       /* max rcv ampdu len (64kb) */
+#define AMPDU_RX_FACTOR_BASE   8*1024  /* ampdu factor base for rx len */
+#define AMPDU_DELIMITER_LEN    4       /* length of ampdu delimiter */
+
+struct ewc_add_ie {
+       uint8   ctl_ch;                 /* control channel number */
+       uint8   byte1;                  /* ext ch,rec. ch. width, RIFS support */
+       uint16  opmode;                 /* operation mode */
+       uint16  misc_bits;              /* misc bits */
+       uint8   basic_mcs[MCSSET_LEN];  /* required MCS set */
+} PACKED;
+typedef struct ewc_add_ie ewc_add_ie_t;
+
+/* ADD IE: EWC 1.0 spec. simply stole a 802.11 IE, we use our prop. IE until this is resolved */
+/* the additional IE is primarily used to convey the current BSS configuration */
+struct ewc_prop_add_ie {
+       uint8   id;             /* IE ID, 221, DOT11_MNG_PROPR_ID */
+       uint8   len;            /* IE length */
+       uint8   oui[3];         /* Proprietary OUI, BRCM_PROP_OUI */
+       uint8   type;           /* indicates what follows */
+       ewc_add_ie_t add_ie;
+} PACKED;
+typedef struct ewc_prop_add_ie ewc_prop_add_ie_t;
+
+#define EWC_ADD_IE_LEN 22      
+#define EWC_ADD_IE_TYPE        52      
+
+/* byte1 defn's */
+#define EWC_BW_ANY             0x04    /* set, STA can use 20 or 40MHz */
+#define EWC_RIFS_PERMITTED             0x08    /* RIFS allowed */
+
+/* opmode defn's */
+#define EWC_OPMODE_MASK                0x0003  /* protection mode mask */
+#define EWC_OPMODE_SHIFT       0       /* protection mode shift */
+#define EWC_OPMODE_PURE                0x0000  /* protection mode PURE */
+#define EWC_OPMODE_OPTIONAL    0x0001  /* protection mode optional */
+#define EWC_OPMODE_HT20IN40    0x0002  /* protection mode 20MHz HT in 40MHz BSS */
+#define EWC_OPMODE_MIXED       0x0003  /* protection mode Mixed Mode */
+#define EWC_OPMODE_NONGF       0x0004  /* protection mode non-GF */
+#define DOT11N_TXBURST         0x0008  /* Tx burst limit */
+#define DOT11N_OBSS_NONHT      0x0010  /* OBSS Non-HT STA present */
+
+/* misc_bites defn's */
+#define EWC_BASIC_STBC_MCS     0x007f  /* basic STBC MCS */
+#define EWC_DUAL_STBC_PROT     0x0080  /* Dual STBC Protection */
+#define EWC_SECOND_BCN         0x0100  /* Secondary beacon support */
+#define EWC_LSIG_TXOP          0x0200  /* L-SIG TXOP Protection full support */
+#define EWC_PCO_ACTIVE         0x0400  /* PCO active */
+#define EWC_PCO_PHASE          0x0800  /* PCO phase */
+
+/* Tx Burst Limits */
+#define DOT11N_2G_TXBURST_LIMIT        6160    /* 2G band Tx burst limit per 802.11n Draft 1.10 (usec) */
+#define DOT11N_5G_TXBURST_LIMIT        3080    /* 5G band Tx burst limit per 802.11n Draft 1.10 (usec) */
+
+/* Macros for opmode */
+#define GET_EWC_OPMODE(add_ie)         ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+                                       >> EWC_OPMODE_SHIFT)
+#define EWC_MIXEDMODE_PRESENT(add_ie)  ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+                                       == EWC_OPMODE_MIXED)    /* mixed mode present */
+#define EWC_HT20_PRESENT(add_ie)       ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+                                       == EWC_OPMODE_HT20IN40) /* 20MHz HT present */
+#define EWC_OPTIONAL_PRESENT(add_ie)   ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_MASK) \
+                                       == EWC_OPMODE_OPTIONAL) /* Optional protection present */
+#define EWC_USE_PROTECTION(add_ie)     (EWC_HT20_PRESENT((add_ie)) || \
+                                       EWC_MIXEDMODE_PRESENT((add_ie))) /* use protection */
+#define EWC_NONGF_PRESENT(add_ie)      ((ltoh16_ua(&add_ie->opmode) & EWC_OPMODE_NONGF) \
+                                       == EWC_OPMODE_NONGF)    /* non-GF present */
+#define DOT11N_TXBURST_PRESENT(add_ie) ((ltoh16_ua(&add_ie->opmode) & DOT11N_TXBURST) \
+                                       == DOT11N_TXBURST)      /* Tx Burst present */
+#define DOT11N_OBSS_NONHT_PRESENT(add_ie)      ((ltoh16_ua(&add_ie->opmode) & DOT11N_OBSS_NONHT) \
+                                       == DOT11N_OBSS_NONHT)   /* OBSS Non-HT present */
+
+/* Vendor IE structure */
+struct vndr_ie {
+       uchar id;
+       uchar len;
+       uchar oui [3];
+       uchar data [1];         /* Variable size data */
+} PACKED;
+typedef struct vndr_ie vndr_ie_t;
+
+#define VNDR_IE_HDR_LEN                2       /* id + len field */
+#define VNDR_IE_MIN_LEN                3       /* size of the oui field */
+#define VNDR_IE_MAX_LEN                256     /* verdor IE max length */
+
+/* WPA definitions */
+#define WPA_VERSION            1       /* WPA version */
+#define WPA_OUI                        "\x00\x50\xF2"  /* WPA OUI */
+
+#define WPA2_VERSION           1       /* WPA2 version */
+#define WPA2_VERSION_LEN       2       /* WAP2 version length */
+#define WPA2_OUI               "\x00\x0F\xAC"  /* WPA2 OUI */
+
+#define WPA_OUI_LEN    3       /* WPA OUI length */
+
+/* RSN authenticated key managment suite */
+#define RSN_AKM_NONE           0       /* None (IBSS) */
+#define RSN_AKM_UNSPECIFIED    1       /* Over 802.1x */
+#define RSN_AKM_PSK            2       /* Pre-shared Key */
+
+/* Key related defines */
+#define DOT11_MAX_DEFAULT_KEYS 4       /* number of default keys */
+#define DOT11_MAX_KEY_SIZE     32      /* max size of any key */
+#define DOT11_MAX_IV_SIZE      16      /* max size of any IV */
+#define DOT11_EXT_IV_FLAG      (1<<5)  /* flag to indicate IV is > 4 bytes */
+
+#define WEP1_KEY_SIZE          5       /* max size of any WEP key */
+#define WEP1_KEY_HEX_SIZE      10      /* size of WEP key in hex. */
+#define WEP128_KEY_SIZE                13      /* max size of any WEP key */
+#define WEP128_KEY_HEX_SIZE    26      /* size of WEP key in hex. */
+#define TKIP_MIC_SIZE          8       /* size of TKIP MIC */
+#define TKIP_EOM_SIZE          7       /* max size of TKIP EOM */
+#define TKIP_EOM_FLAG          0x5a    /* TKIP EOM flag byte */
+#define TKIP_KEY_SIZE          32      /* size of any TKIP key */
+#define TKIP_MIC_AUTH_TX       16      /* offset to Authenticator MIC TX key */
+#define TKIP_MIC_AUTH_RX       24      /* offset to Authenticator MIC RX key */
+#define TKIP_MIC_SUP_RX                TKIP_MIC_AUTH_TX        /* offset to Supplicant MIC RX key */
+#define TKIP_MIC_SUP_TX                TKIP_MIC_AUTH_RX        /* offset to Supplicant MIC TX key */
+#define AES_KEY_SIZE           16      /* size of AES key */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _802_11_H_ */
diff --git a/package/broadcom-wl/src/driver/proto/802.11e.h b/package/broadcom-wl/src/driver/proto/802.11e.h
new file mode 100644 (file)
index 0000000..e1aa506
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * 802.11e protocol header file
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _802_11e_H_
+#define _802_11e_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#ifdef BCMDBG
+extern const char *aci_names[];
+#endif /* BCMDBG */
+
+/* WME Traffic Specification (TSPEC) element */
+#define WME_TSPEC_HDR_LEN           2           /* WME TSPEC header length */
+#define WME_TSPEC_BODY_OFF          2           /* WME TSPEC body offset */
+
+#define WME_CATEGORY_CODE_OFFSET       0               /* WME Category code offset */
+#define WME_ACTION_CODE_OFFSET         1               /* WME Action code offset */
+#define WME_TOKEN_CODE_OFFSET          2               /* WME Token code offset */
+#define WME_STATUS_CODE_OFFSET         3               /* WME Status code offset */
+
+struct tsinfo {
+       uint8 octets[3];
+} PACKED;
+
+typedef struct tsinfo tsinfo_t;
+
+/* 802.11e TSPEC IE */
+typedef struct tspec {
+       uint8 oui[DOT11_OUI_LEN];       /* WME_OUI */
+       uint8 type;                                     /* WME_TYPE */
+       uint8 subtype;                          /* WME_SUBTYPE_TSPEC */
+       uint8 version;                          /* WME_VERSION */
+       tsinfo_t tsinfo;                        /* TS Info bit field */
+       uint16 nom_msdu_size;           /* (Nominal or fixed) MSDU Size (bytes) */
+       uint16 max_msdu_size;           /* Maximum MSDU Size (bytes) */
+       uint32 min_srv_interval;        /* Minimum Service Interval (us) */
+       uint32 max_srv_interval;        /* Maximum Service Interval (us) */
+       uint32 inactivity_interval;     /* Inactivity Interval (us) */
+       uint32 suspension_interval; /* Suspension Interval (us) */
+       uint32 srv_start_time;          /* Service Start Time (us) */
+       uint32 min_data_rate;           /* Minimum Data Rate (bps) */
+       uint32 mean_data_rate;          /* Mean Data Rate (bps) */
+       uint32 peak_data_rate;          /* Peak Data Rate (bps) */
+       uint32 max_burst_size;          /* Maximum Burst Size (bytes) */
+       uint32 delay_bound;                     /* Delay Bound (us) */
+       uint32 min_phy_rate;            /* Minimum PHY Rate (bps) */
+       uint16 surplus_bw;                      /* Surplus Bandwidth Allowance Factor */
+       uint16 medium_time;                     /* Medium Time (32 us/s periods) */
+} PACKED tspec_t;
+
+#define WME_TSPEC_LEN  (sizeof(tspec_t))               /* not including 2-bytes of header */
+
+/* ts_info */
+/* 802.1D priority is duplicated - bits 13-11 AND bits 3-1 */
+#define TS_INFO_TID_SHIFT              1       /* TS info. TID shift */
+#define TS_INFO_TID_MASK               (0xf << TS_INFO_TID_SHIFT)      /* TS info. TID mask */
+#define TS_INFO_CONTENTION_SHIFT       7       /* TS info. contention shift */
+#define TS_INFO_CONTENTION_MASK        (0x1 << TS_INFO_CONTENTION_SHIFT) /* TS info. contention mask */
+#define TS_INFO_DIRECTION_SHIFT        5       /* TS info. direction shift */
+#define TS_INFO_DIRECTION_MASK (0x3 << TS_INFO_DIRECTION_SHIFT) /* TS info. direction mask */
+#define TS_INFO_PSB_SHIFT              2               /* TS info. PSB bit Shift */
+#define TS_INFO_PSB_MASK               (1 << TS_INFO_PSB_SHIFT)        /* TS info. PSB mask */
+#define TS_INFO_UPLINK                 (0 << TS_INFO_DIRECTION_SHIFT)  /* TS info. uplink */
+#define TS_INFO_DOWNLINK               (1 << TS_INFO_DIRECTION_SHIFT)  /* TS info. downlink */
+#define TS_INFO_BIDIRECTIONAL  (3 << TS_INFO_DIRECTION_SHIFT)  /* TS info. bidirectional */
+#define TS_INFO_USER_PRIO_SHIFT        3       /* TS info. user priority shift */
+/* TS info. user priority mask */
+#define TS_INFO_USER_PRIO_MASK (0x7 << TS_INFO_USER_PRIO_SHIFT)
+
+/* Macro to get/set bit(s) field in TSINFO */
+#define WLC_CAC_GET_TID(pt)    ((((pt).octets[0]) & TS_INFO_TID_MASK) >> TS_INFO_TID_SHIFT)
+#define WLC_CAC_GET_DIR(pt)    ((((pt).octets[0]) & \
+       TS_INFO_DIRECTION_MASK) >> TS_INFO_DIRECTION_SHIFT)
+#define WLC_CAC_GET_PSB(pt)    ((((pt).octets[1]) & WLC_CAC_PSB_MASK) >> WLC_CAC_PSB_SHIFT)
+#define WLC_CAC_GET_USER_PRIO(pt)      ((((pt).octets[1]) & \
+       TS_INFO_USER_PRIO_MASK) >> TS_INFO_USER_PRIO_SHIFT)
+
+#define WLC_CAC_SET_TID(pt, id)        ((((pt).octets[0]) & (~TS_INFO_TID_MASK)) | \
+       ((id) << TS_INFO_TID_SHIFT))
+#define WLC_CAC_SET_USER_PRIO(pt, prio)        ((((pt).octets[0]) & (~TS_INFO_USER_PRIO_MASK)) | \
+       ((prio) << TS_INFO_USER_PRIO_SHIFT))
+
+/* 802.11e QBSS Load IE */
+#define QBSS_LOAD_IE_LEN               5       /* QBSS Load IE length */
+#define QBSS_LOAD_AAC_OFF              3       /* AAC offset in IE */
+
+#define CAC_ADDTS_RESP_TIMEOUT         300     /* default ADDTS response timeout in ms */
+
+/* 802.11e ADDTS status code */
+#define DOT11E_STATUS_ADMISSION_ACCEPTED       0       /* TSPEC Admission accepted status */
+#define DOT11E_STATUS_ADDTS_INVALID_PARAM      1       /* TSPEC invalid parameter status */
+#define DOT11E_STATUS_ADDTS_REFUSED_NSBW       3       /* ADDTS refused (non-sufficient BW) */
+
+/* 802.11e DELTS status code */
+#define DOT11E_STATUS_QSTA_LEAVE_QBSS          36      /* STA leave QBSS */
+#define DOT11E_STATUS_END_TS                           37      /* END TS */
+#define DOT11E_STATUS_UNKNOWN_TS                       38      /* UNKNOWN TS */
+#define DOT11E_STATUS_QSTA_REQ_TIMEOUT         39      /* STA ADDTS request timeout */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _802_11e_CAC_H_ */
diff --git a/package/broadcom-wl/src/driver/proto/802.1d.h b/package/broadcom-wl/src/driver/proto/802.1d.h
new file mode 100644 (file)
index 0000000..421b963
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental types and constants relating to 802.1D
+ *
+ * $Id$
+ */
+
+#ifndef _802_1_D_
+#define _802_1_D_
+
+/* 802.1D priority defines */
+#define        PRIO_8021D_NONE         2       /* None = - */
+#define        PRIO_8021D_BK           1       /* BK - Background */
+#define        PRIO_8021D_BE           0       /* BE - Best-effort */
+#define        PRIO_8021D_EE           3       /* EE - Excellent-effort */
+#define        PRIO_8021D_CL           4       /* CL - Controlled Load */
+#define        PRIO_8021D_VI           5       /* Vi - Video */
+#define        PRIO_8021D_VO           6       /* Vo - Voice */
+#define        PRIO_8021D_NC           7       /* NC - Network Control */
+#define        MAXPRIO                 7       /* 0-7 */
+#define NUMPRIO                        (MAXPRIO + 1)
+
+#define ALLPRIO                -1      /* All prioirty */
+
+/* Converts prio to precedence since the numerical value of
+ * PRIO_8021D_BE and PRIO_8021D_NONE are swapped.
+ */
+#define PRIO2PREC(prio) \
+       (((prio) == PRIO_8021D_NONE || (prio) == PRIO_8021D_BE) ? ((prio^2)) : (prio))
+
+#endif /* _802_1_D__ */
diff --git a/package/broadcom-wl/src/driver/proto/802.3.h b/package/broadcom-wl/src/driver/proto/802.3.h
new file mode 100644 (file)
index 0000000..54a17c2
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.                
+ *                                     
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;   
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior      
+ * written permission of Broadcom Corporation.                            
+ *
+ * Fundamental constants relating to 802.3
+ *
+ * $Id$
+ */
+
+#ifndef _802_3_h_
+#define _802_3_h_
+
+#define SNAP_HDR_LEN   6       /* 802.3 LLC/SNAP header length */
+
+#endif /* #ifndef _802_3_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmarp.h b/package/broadcom-wl/src/driver/proto/bcmarp.h
new file mode 100644 (file)
index 0000000..f5058b6
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.                
+ *                                     
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;   
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior      
+ * written permission of Broadcom Corporation.                            
+ *
+ * Fundamental constants relating to ARP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmarp_h_
+#define _bcmarp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#define ARP_OPC_OFFSET         6               /* option code offset */
+#define ARP_SRC_ETH_OFFSET     8               /* src h/w address offset */
+#define ARP_SRC_IP_OFFSET      14              /* src IP address offset */
+#define ARP_TGT_ETH_OFFSET     18              /* target h/w address offset */
+#define ARP_TGT_IP_OFFSET      24              /* target IP address offset */
+
+#define ARP_OPC_REQUEST                1               /* ARP request */
+#define ARP_OPC_REPLY          2               /* ARP reply */
+
+#define ARP_DATA_LEN           28              /* ARP data length */
+
+struct bcmarp {
+       uint16  htype;                          /* Header type (1 = ethernet) */
+       uint16  ptype;                          /* Protocol type (0x800 = IP) */
+       uint8   hlen;                           /* Hardware address length (Eth = 6) */
+       uint8   plen;                           /* Protocol address length (IP = 4) */
+       uint16  oper;                           /* ARP_OPC_... */
+       uint8   src_eth[ETHER_ADDR_LEN];        /* Source hardware address */
+       uint8   src_ip[IPV4_ADDR_LEN];          /* Source protocol address (not aligned) */
+       uint8   dst_eth[ETHER_ADDR_LEN];        /* Destination hardware address */
+       uint8   dst_ip[IPV4_ADDR_LEN];          /* Destination protocol address */
+} PACKED;
+
+/* Ethernet header + Arp message */
+struct bcmetharp {
+       struct ether_header     eh;
+       struct bcmarp   arp;
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* !defined(_bcmarp_h_) */
diff --git a/package/broadcom-wl/src/driver/proto/bcmdhcp.h b/package/broadcom-wl/src/driver/proto/bcmdhcp.h
new file mode 100644 (file)
index 0000000..a2cdc58
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.                
+ *                                     
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;   
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior      
+ * written permission of Broadcom Corporation.                            
+ *
+ * Fundamental constants relating to DHCP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmdhcp_h_
+#define _bcmdhcp_h_
+
+/* DHCP params */
+#define DHCP_TYPE_OFFSET       0       /* DHCP type (request|reply) offset */
+#define DHCP_FLAGS_OFFSET      10      /* DHCP flags offset */
+#define DHCP_CIADDR_OFFSET     12      /* DHCP client IP address offset */
+#define DHCP_YIADDR_OFFSET     16      /* DHCP your IP address offset */
+#define DHCP_GIADDR_OFFSET     24      /* DHCP relay agent IP address offset */
+#define DHCP_CHADDR_OFFSET     28      /* DHCP client h/w address offset */
+
+#define DHCP_TYPE_REQUEST      1       /* DHCP request (discover|request) */
+#define DHCP_TYPE_REPLY                2       /* DHCP reply (offset|ack) */
+
+#define DHCP_PORT_SERVER       67      /* DHCP server UDP port */
+#define DHCP_PORT_CLIENT       68      /* DHCP client UDP port */
+
+#define DHCP_FLAG_BCAST        0x8000  /* DHCP broadcast flag */
+
+#define DHCP_FLAGS_LEN 2       /* DHCP flags field length */
+
+#endif /* #ifndef _bcmdhcp_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmeth.h b/package/broadcom-wl/src/driver/proto/bcmeth.h
new file mode 100644 (file)
index 0000000..23aa411
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Broadcom Ethernettype  protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+/*
+ * Broadcom Ethernet protocol defines
+ */
+
+#ifndef _BCMETH_H_
+#define _BCMETH_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+/* ETHER_TYPE_BRCM is defined in ethernet.h */
+
+/*
+ * Following the 2byte BRCM ether_type is a 16bit BRCM subtype field
+ * in one of two formats: (only subtypes 32768-65535 are in use now)
+ *
+ * subtypes 0-32767:
+ *     8 bit subtype (0-127)
+ *     8 bit length in bytes (0-255)
+ *
+ * subtypes 32768-65535:
+ *     16 bit big-endian subtype
+ *     16 bit big-endian length in bytes (0-65535)
+ *
+ * length is the number of additional bytes beyond the 4 or 6 byte header
+ *
+ * Reserved values:
+ * 0 reserved
+ * 5-15 reserved for iLine protocol assignments
+ * 17-126 reserved, assignable
+ * 127 reserved
+ * 32768 reserved
+ * 32769-65534 reserved, assignable
+ * 65535 reserved
+ */
+
+/* 
+ * While adding the subtypes and their specific processing code make sure
+ * bcmeth_bcm_hdr_t is the first data structure in the user specific data structure definition
+ */
+
+#define        BCMILCP_SUBTYPE_RATE            1
+#define        BCMILCP_SUBTYPE_LINK            2
+#define        BCMILCP_SUBTYPE_CSA             3
+#define        BCMILCP_SUBTYPE_LARQ            4
+#define BCMILCP_SUBTYPE_VENDOR         5
+#define        BCMILCP_SUBTYPE_FLH             17
+
+#define BCMILCP_SUBTYPE_VENDOR_LONG    32769
+#define BCMILCP_SUBTYPE_CERT           32770
+#define BCMILCP_SUBTYPE_SES            32771
+
+
+#define BCMILCP_BCM_SUBTYPE_RESERVED   0
+#define BCMILCP_BCM_SUBTYPE_EVENT              1
+#define BCMILCP_BCM_SUBTYPE_SES                        2
+/*
+ * The EAPOL type is not used anymore. Instead EAPOL messages are now embedded
+ * within BCMILCP_BCM_SUBTYPE_EVENT type messages
+ */
+/* #define BCMILCP_BCM_SUBTYPE_EAPOL           3 */
+
+#define BCMILCP_BCM_SUBTYPEHDR_MINLENGTH       8
+#define BCMILCP_BCM_SUBTYPEHDR_VERSION         0
+
+/* These fields are stored in network order */
+typedef  struct bcmeth_hdr
+{
+       uint16  subtype;        /* Vendor specific..32769 */
+       uint16  length;
+       uint8   version;        /* Version is 0 */
+       uint8   oui[3];         /* Broadcom OUI */
+       /* user specific Data */
+       uint16  usr_subtype;
+} PACKED bcmeth_hdr_t;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /*  _BCMETH_H_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmevent.h b/package/broadcom-wl/src/driver/proto/bcmevent.h
new file mode 100644 (file)
index 0000000..785ef22
--- /dev/null
@@ -0,0 +1,166 @@
+/*
+ * Broadcom Event  protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ *
+ * Dependencies: proto/bcmeth.h
+ *
+ * $Id$
+ *
+ */
+
+/*
+ * Broadcom Ethernet Events protocol defines
+ *
+ */
+
+#ifndef _BCMEVENT_H_
+#define _BCMEVENT_H_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif /* defined(__GNUC__) */
+
+#define BCM_EVENT_MSG_VERSION          1       /* wl_event_msg_t struct version */
+#define BCM_MSG_IFNAME_MAX             16      /* max length of interface name */
+
+/* flags */
+#define WLC_EVENT_MSG_LINK             0x01    /* link is up */
+#define WLC_EVENT_MSG_FLUSHTXQ         0x02    /* flush tx queue on MIC error */
+#define WLC_EVENT_MSG_GROUP            0x04    /* group MIC error */
+
+/* these fields are stored in network order */
+typedef struct
+{
+       uint16  version;
+       uint16  flags;                  /* see flags below */
+       uint32  event_type;             /* Message (see below) */
+       uint32  status;                 /* Status code (see below) */
+       uint32  reason;                 /* Reason code (if applicable) */
+       uint32  auth_type;              /* WLC_E_AUTH */
+       uint32  datalen;                /* data buf */
+       struct ether_addr       addr;   /* Station address (if applicable) */
+       char    ifname[BCM_MSG_IFNAME_MAX]; /* name of the packet incoming interface */
+} PACKED wl_event_msg_t;
+
+/* used by driver msgs */
+typedef struct bcm_event {
+       struct ether_header eth;
+       bcmeth_hdr_t            bcm_hdr;
+       wl_event_msg_t          event;
+       /* data portion follows */
+} PACKED bcm_event_t;
+
+#define BCM_MSG_LEN    (sizeof(bcm_event_t) - sizeof(bcmeth_hdr_t) - sizeof(struct ether_header))
+
+/* Event messages */
+#define WLC_E_SET_SSID         0       /* indicates status of set SSID */
+#define WLC_E_JOIN             1       /* differentiates join IBSS from found (WLC_E_START) IBSS */
+#define WLC_E_START            2       /* STA founded an IBSS or AP started a BSS */
+#define WLC_E_AUTH             3       /* 802.11 AUTH request */
+#define WLC_E_AUTH_IND         4       /* 802.11 AUTH indication */
+#define WLC_E_DEAUTH           5       /* 802.11 DEAUTH request */
+#define WLC_E_DEAUTH_IND       6       /* 802.11 DEAUTH indication */
+#define WLC_E_ASSOC            7       /* 802.11 ASSOC request */
+#define WLC_E_ASSOC_IND                8       /* 802.11 ASSOC indication */
+#define WLC_E_REASSOC          9       /* 802.11 REASSOC request */
+#define WLC_E_REASSOC_IND      10      /* 802.11 REASSOC indication */
+#define WLC_E_DISASSOC         11      /* 802.11 DISASSOC request */
+#define WLC_E_DISASSOC_IND     12      /* 802.11 DISASSOC indication */
+#define WLC_E_QUIET_START      13      /* 802.11h Quiet period started */
+#define WLC_E_QUIET_END                14      /* 802.11h Quiet period ended */
+#define WLC_E_BEACON_RX                15      /* BEACONS received/lost indication */
+#define WLC_E_LINK             16      /* generic link indication */
+#define WLC_E_MIC_ERROR                17      /* TKIP MIC error occurred */
+#define WLC_E_NDIS_LINK                18      /* NDIS style link indication */
+#define WLC_E_ROAM             19      /* roam attempt occurred: indicate status & reason */
+#define WLC_E_TXFAIL           20      /* change in dot11FailedCount (txfail) */
+#define WLC_E_PMKID_CACHE      21      /* WPA2 pmkid cache indication */
+#define WLC_E_RETROGRADE_TSF   22      /* current AP's TSF value went backward */
+#define WLC_E_PRUNE            23      /* AP was pruned from join list for reason */
+#define WLC_E_AUTOAUTH         24      /* report AutoAuth table entry match for join attempt */
+#define WLC_E_EAPOL_MSG                25      /* Event encapsulating an EAPOL message */
+#define WLC_E_SCAN_COMPLETE    26      /* Scan results are ready or scan was aborted */
+#define WLC_E_ADDTS_IND                27      /* indicate to host addts fail/success */
+#define WLC_E_DELTS_IND                28      /* indicate to host delts fail/success */
+#define WLC_E_BCNSENT_IND      29      /* indicate to host of beacon transmit */
+#define WLC_E_BCNRX_MSG                30      /* Send the received beacon up to the host */
+#define WLC_E_BCNLOST_MSG      31      /* indicate to host loss of beacon */
+#define WLC_E_ROAM_PREP                32      /* before attempting to roam */
+#define WLC_E_PFN_NET_FOUND    33      /* PFN network found event */
+#define WLC_E_PFN_NET_LOST     34      /* PFN network lost event */
+
+#ifdef EXT_STA
+#define WLC_E_RESET_COMPLETE   35
+#define WLC_E_JOIN_START       36
+#define WLC_E_ROAM_START       37
+#define WLC_E_ASSOC_START      38
+#define WLC_E_IBSS_ASSOC       39
+#define WLC_E_RADIO            40
+#define WLC_E_LAST             41 /* highest val + 1 for range checking */
+#else /* EXT_STA */
+#define WLC_E_LAST             35      /* highest val + 1 for range checking */
+#endif /* EXT_STA */
+
+/* Event status codes */
+#define WLC_E_STATUS_SUCCESS           0       /* operation was successful */
+#define WLC_E_STATUS_FAIL              1       /* operation failed */
+#define WLC_E_STATUS_TIMEOUT           2       /* operation timed out */
+#define WLC_E_STATUS_NO_NETWORKS       3       /* failed due to no matching network found */
+#define WLC_E_STATUS_ABORT             4       /* operation was aborted */
+#define WLC_E_STATUS_NO_ACK            5       /* protocol failure: packet not ack'd */
+#define WLC_E_STATUS_UNSOLICITED       6       /* AUTH or ASSOC packet was unsolicited */
+#define WLC_E_STATUS_ATTEMPT           7       /* attempt to assoc to an auto auth configuration */
+#define WLC_E_STATUS_PARTIAL           8       /* scan results are incomplete */
+#define WLC_E_STATUS_NEWSCAN   9       /* scan aborted by another scan */
+#define WLC_E_STATUS_NEWASSOC  10      /* scan aborted due to assoc in progress */
+#define WLC_E_STATUS_11HQUIET  11      /* 802.11h quiet period started */
+#define WLC_E_STATUS_SUPPRESS  12      /* user disabled scanning (WLC_SET_SCANSUPPRESS) */
+#define WLC_E_STATUS_NOCHANS   13      /* no allowable channels to scan */
+#define WLC_E_STATUS_CCXFASTRM 14      /* scan aborted due to CCX fast roam */
+
+/* roam reason codes */
+#define WLC_E_REASON_INITIAL_ASSOC     0       /* initial assoc */
+#define WLC_E_REASON_LOW_RSSI          1       /* roamed due to low RSSI */
+#define WLC_E_REASON_DEAUTH            2       /* roamed due to DEAUTH indication */
+#define WLC_E_REASON_DISASSOC          3       /* roamed due to DISASSOC indication */
+#define WLC_E_REASON_BCNS_LOST         4       /* roamed due to lost beacons */
+#define WLC_E_REASON_FAST_ROAM_FAILED  5       /* roamed due to fast roam failure */
+#define WLC_E_REASON_DIRECTED_ROAM     6       /* roamed due to request by AP */
+#define WLC_E_REASON_TSPEC_REJECTED    7       /* roamed due to TSPEC rejection */
+#define WLC_E_REASON_BETTER_AP         8       /* roamed due to finding better AP */
+
+/* prune reason codes */
+#define WLC_E_PRUNE_ENCR_MISMATCH      1       /* encryption mismatch */
+#define WLC_E_PRUNE_BCAST_BSSID                2       /* AP uses a broadcast BSSID */
+#define WLC_E_PRUNE_MAC_DENY           3       /* STA's MAC addr is in AP's MAC deny list */
+#define WLC_E_PRUNE_MAC_NA             4       /* STA's MAC addr is not in AP's MAC allow list */
+#define WLC_E_PRUNE_REG_PASSV          5       /* AP not allowed due to regulatory restriction */
+#define WLC_E_PRUNE_SPCT_MGMT          6       /* AP does not support STA locale spectrum mgmt */
+#define WLC_E_PRUNE_RADAR              7       /* AP is on a radar channel of STA locale */
+#define WLC_E_RSN_MISMATCH             8       /* STA does not support AP's RSN */
+#define WLC_E_PRUNE_NO_COMMON_RATES    9       /* No rates in common with AP */
+#define WLC_E_PRUNE_BASIC_RATES                10      /* STA does not support all basic rates of BSS */
+#define WLC_E_PRUNE_CIPHER_NA          12      /* BSS's cipher not supported */
+#define WLC_E_PRUNE_KNOWN_STA          13      /* AP is already known to us as a STA */
+#define WLC_E_PRUNE_WDS_PEER           15      /* AP is already known to us as a WDS peer */
+#define WLC_E_PRUNE_QBSS_LOAD          16      /* QBSS LOAD - AAC is too low */
+#define WLC_E_PRUNE_HOME_AP            17      /* prune home AP */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif /* PACKED */
+
+#endif /* _BCMEVENT_H_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmip.h b/package/broadcom-wl/src/driver/proto/bcmip.h
new file mode 100644 (file)
index 0000000..4169060
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental constants relating to IP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmip_h_
+#define _bcmip_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+
+/* IPV4 and IPV6 common */
+#define IP_VER_OFFSET          0x0     /* offset to version field */
+#define IP_VER_MASK            0xf0    /* version mask */
+#define IP_VER_SHIFT           4       /* version shift */
+#define IP_VER_4               4       /* version number for IPV4 */
+#define IP_VER_6               6       /* version number for IPV6 */
+
+#define IP_VER(ip_body) \
+       ((((uint8 *)(ip_body))[IP_VER_OFFSET] & IP_VER_MASK) >> IP_VER_SHIFT)
+
+#define IP_PROT_ICMP           0x1     /* ICMP protocol */
+#define IP_PROT_TCP            0x6     /* TCP protocol */
+#define IP_PROT_UDP            0x11    /* UDP protocol type */
+
+/* IPV4 field offsets */
+#define IPV4_VER_HL_OFFSET     0       /* version and ihl byte offset */
+#define IPV4_TOS_OFFSET                1       /* type of service offset */
+#define IPV4_PKTLEN_OFFSET     2       /* packet length offset */
+#define IPV4_PKTFLAG_OFFSET    6       /* more-frag,dont-frag flag offset */
+#define IPV4_PROT_OFFSET       9       /* protocol type offset */
+#define IPV4_CHKSUM_OFFSET     10      /* IP header checksum offset */
+#define IPV4_SRC_IP_OFFSET     12      /* src IP addr offset */
+#define IPV4_DEST_IP_OFFSET    16      /* dest IP addr offset */
+#define IPV4_OPTIONS_OFFSET    20      /* IP options offset */
+
+/* IPV4 field decodes */
+#define IPV4_VER_MASK          0xf0    /* IPV4 version mask */
+#define IPV4_VER_SHIFT         4       /* IPV4 version shift */
+
+#define IPV4_HLEN_MASK         0x0f    /* IPV4 header length mask */
+#define IPV4_HLEN(ipv4_body)   (4 * (((uint8 *)(ipv4_body))[IPV4_VER_HL_OFFSET] & IPV4_HLEN_MASK))
+
+#define IPV4_ADDR_LEN          4       /* IPV4 address length */
+
+#define IPV4_ADDR_NULL(a)      ((((uint8 *)(a))[0] | ((uint8 *)(a))[1] | \
+                                 ((uint8 *)(a))[2] | ((uint8 *)(a))[3]) == 0)
+
+#define IPV4_ADDR_BCAST(a)     ((((uint8 *)(a))[0] & ((uint8 *)(a))[1] & \
+                                 ((uint8 *)(a))[2] & ((uint8 *)(a))[3]) == 0xff)
+
+#define        IPV4_TOS_DSCP_MASK      0xfc    /* DiffServ codepoint mask */
+#define        IPV4_TOS_DSCP_SHIFT     2       /* DiffServ codepoint shift */
+
+#define        IPV4_TOS(ipv4_body)     (((uint8 *)(ipv4_body))[IPV4_TOS_OFFSET])
+
+#define        IPV4_TOS_PREC_MASK      0xe0    /* Historical precedence mask */
+#define        IPV4_TOS_PREC_SHIFT     5       /* Historical precedence shift */
+
+#define IPV4_TOS_LOWDELAY      0x10    /* Lowest delay requested */
+#define IPV4_TOS_THROUGHPUT    0x8     /* Best throughput requested */
+#define IPV4_TOS_RELIABILITY   0x4     /* Most reliable delivery requested */
+
+#define IPV4_PROT(ipv4_body)   (((uint8 *)(ipv4_body))[IPV4_PROT_OFFSET])
+
+#define IPV4_FRAG_RESV         0x8000  /* Reserved */
+#define IPV4_FRAG_DONT         0x4000  /* Don't fragment */
+#define IPV4_FRAG_MORE         0x2000  /* More fragments */
+#define IPV4_FRAG_OFFSET_MASK  0x1fff  /* Fragment offset */
+
+#define IPV4_ADDR_STR_LEN      16      /* Max IP address length in string format */
+
+/* IPv4, no options only.  */
+#define IPV4_NO_OPTIONS_HDR_LEN 20
+#define IPV4_NO_OPTIONS_PAYLOAD(ip_hdr)    (&(((uint8 *)(ip_hdr))[IPV4_NO_OPTIONS_HDR_LEN]))
+
+#define IPV4_PAYLOAD_LEN(ip_body) \
+       (((int)(((uint8 *)(ip_body))[IPV4_PKTLEN_OFFSET + 0]) << 8) | \
+        ((uint8 *)(ip_body))[IPV4_PKTLEN_OFFSET + 1])
+
+/* IPV4 packet formats */
+struct ipv4_addr {
+       uint8   addr[IPV4_ADDR_LEN];
+} PACKED;
+
+struct ipv4_hdr {
+       uint8   version_ihl;            /* Version and Internet Header Length */
+       uint8   tos;                    /* Type Of Service */
+       uint16  tot_len;                /* Number of bytes in packet (max 65535) */
+       uint16  id;
+       uint16  frag;                   /* 3 flag bits and fragment offset */
+       uint8   ttl;                    /* Time To Live */
+       uint8   prot;                   /* Protocol */
+       uint16  hdr_chksum;             /* IP header checksum */
+       uint8   src_ip[IPV4_ADDR_LEN];  /* Source IP Address */
+       uint8   dst_ip[IPV4_ADDR_LEN];  /* Destination IP Address */
+} PACKED;
+
+/* IPV6 field offsets */
+#define IPV6_PAYLOAD_LEN_OFFSET        4       /* payload length offset */
+#define IPV6_NEXT_HDR_OFFSET   6       /* next header/protocol offset */
+#define IPV6_HOP_LIMIT_OFFSET  7       /* hop limit offset */
+#define IPV6_SRC_IP_OFFSET     8       /* src IP addr offset */
+#define IPV6_DEST_IP_OFFSET    24      /* dst IP addr offset */
+
+/* IPV6 field decodes */
+#define IPV6_TRAFFIC_CLASS(ipv6_body) \
+       (((((uint8 *)(ipv6_body))[0] & 0x0f) << 4) | \
+        ((((uint8 *)(ipv6_body))[1] & 0xf0) >> 4))
+
+#define IPV6_FLOW_LABEL(ipv6_body) \
+       (((((uint8 *)(ipv6_body))[1] & 0x0f) << 16) | \
+        (((uint8 *)(ipv6_body))[2] << 8) | \
+        (((uint8 *)(ipv6_body))[3]))
+
+#define IPV6_PAYLOAD_LEN(ipv6_body) \
+       ((((uint8 *)(ipv6_body))[IPV6_PAYLOAD_LEN_OFFSET + 0] << 8) | \
+        ((uint8 *)(ipv6_body))[IPV6_PAYLOAD_LEN_OFFSET + 1])
+
+#define IPV6_NEXT_HDR(ipv6_body) \
+       (((uint8 *)(ipv6_body))[IPV6_NEXT_HDR_OFFSET])
+
+#define IPV6_PROT(ipv6_body)   IPV6_NEXT_HDR(ipv6_body)
+
+#define IPV6_ADDR_LEN          16      /* IPV6 address length */
+
+/* IPV4 TOS or IPV6 Traffic Classifier or 0 */
+#define IP_TOS(ip_body) \
+       (IP_VER(ip_body) == IP_VER_4 ? IPV4_TOS(ip_body) : \
+        IP_VER(ip_body) == IP_VER_6 ? IPV6_TRAFFIC_CLASS(ip_body) : 0)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _bcmip_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmtcp.h b/package/broadcom-wl/src/driver/proto/bcmtcp.h
new file mode 100644 (file)
index 0000000..832fd43
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * Fundamental constants relating to TCP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmtcp_h_
+#define _bcmtcp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#define TCP_SRC_PORT_OFFSET    0       /* TCP source port offset */
+#define TCP_DEST_PORT_OFFSET   2       /* TCP dest port offset */
+#define TCP_CHKSUM_OFFSET      16      /* TCP body checksum offset */
+
+/* These fields are stored in network order */
+struct bcmtcp_hdr
+{
+       uint16  src_port;       /* Source Port Address */
+       uint16  dst_port;       /* Destination Port Address */
+       uint32  seq_num;        /* TCP Sequence Number */
+       uint32  ack_num;        /* TCP Sequence Number */
+       uint16  hdrlen_rsvd_flags;      /* Header length, reserved bits and flags */
+       uint16  tcpwin;         /* TCP window */
+       uint16  chksum;         /* Segment checksum with pseudoheader */
+       uint16  urg_ptr;        /* Points to seq-num of byte following urg data */
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+/* Byte offset of flags in TCP header */
+#define TCP_FLAGS_OFFSET       13
+
+#define TCP_FLAGS_FIN          0x01
+#define TCP_FLAGS_SYN          0x02
+#define TCP_FLAGS_RST          0x03
+#define TCP_FLAGS_PSH          0x04
+#define TCP_FLAGS_ACK          0x10
+#define TCP_FLAGS_URG          0x20
+#define TCP_FLAGS_ECN          0x40
+#define TCP_FLAGS_CWR          0x80
+
+#define TCP_FLAGS(tcp_hdr)     (((uint8 *)(tcp_hdr))[TCP_FLAGS_OFFSET])
+#define TCP_IS_ACK(tcp_hdr)    (TCP_FLAGS(tcp_hdr) & TCP_FLAGS_ACK)
+
+#define TCP_SRC_PORT(tcp_hdr)  (ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->src_port))
+#define TCP_DST_PORT(tcp_hdr)  (ntoh16(((struct bcmtcp_hdr*)(tcp_hdr))->dst_port))
+#define TCP_SEQ_NUM(tcp_hdr)   (ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->seq_num))
+#define TCP_ACK_NUM(tcp_hdr)   (ntoh32(((struct bcmtcp_hdr*)(tcp_hdr))->ack_num))
+
+#endif /* #ifndef _bcmtcp_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/bcmudp.h b/package/broadcom-wl/src/driver/proto/bcmudp.h
new file mode 100644 (file)
index 0000000..5464284
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.                
+ *                                     
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;   
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior      
+ * written permission of Broadcom Corporation.                            
+ *
+ * Fundamental constants relating to UDP Protocol
+ *
+ * $Id$
+ */
+
+#ifndef _bcmudp_h_
+#define _bcmudp_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+/* UDP header */
+#define UDP_DEST_PORT_OFFSET   2       /* UDP dest port offset */
+#define UDP_LEN_OFFSET         4       /* UDP length offset */
+#define UDP_CHKSUM_OFFSET      6       /* UDP body checksum offset */
+
+#define UDP_HDR_LEN    8       /* UDP header length */
+#define UDP_PORT_LEN   2       /* UDP port length */
+
+/* These fields are stored in network order */
+struct bcmudp_hdr
+{
+       uint16  src_port;       /* Source Port Address */
+       uint16  dst_port;       /* Destination Port Address */
+       uint16  len;            /* Number of bytes in datagram including header */
+       uint16  chksum;         /* entire datagram checksum with pseudoheader */
+} PACKED;
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* #ifndef _bcmudp_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/eap.h b/package/broadcom-wl/src/driver/proto/eap.h
new file mode 100644 (file)
index 0000000..5548e2f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Extensible Authentication Protocol (EAP) definitions
+ *
+ * See
+ * RFC 2284: PPP Extensible Authentication Protocol (EAP)
+ *
+ * Copyright (C) 2002 Broadcom Corporation
+ *
+ * $Id$
+ */
+
+#ifndef _eap_h_
+#define _eap_h_
+
+/* EAP packet format */
+typedef struct {
+       unsigned char code;     /* EAP code */
+       unsigned char id;       /* Current request ID */
+       unsigned short length;  /* Length including header */
+       unsigned char type;     /* EAP type (optional) */
+       unsigned char data[1];  /* Type data (optional) */
+} eap_header_t;
+
+#define EAP_HEADER_LEN 4
+
+/* EAP codes */
+#define EAP_REQUEST    1
+#define EAP_RESPONSE   2
+#define EAP_SUCCESS    3
+#define EAP_FAILURE    4
+
+/* EAP types */
+#define EAP_IDENTITY           1
+#define EAP_NOTIFICATION       2
+#define EAP_NAK                        3
+#define EAP_MD5                        4
+#define EAP_OTP                        5
+#define EAP_GTC                        6
+#define EAP_TLS                        13
+#define EAP_EXPANDED           254
+#define BCM_EAP_SES            10
+#define BCM_EAP_EXP_LEN                12  /* EAP_LEN 5 + 3 bytes for SMI ID + 4 bytes for ven type */
+#define BCM_SMI_ID             0x113d
+
+#endif /* _eap_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/eapol.h b/package/broadcom-wl/src/driver/proto/eapol.h
new file mode 100644 (file)
index 0000000..9a1a58d
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+ * 802.1x EAPOL definitions
+ *
+ * See
+ * IEEE Std 802.1X-2001
+ * IEEE 802.1X RADIUS Usage Guidelines
+ *
+ * Copyright (C) 2002 Broadcom Corporation
+ *
+ * $Id$
+ */
+
+#ifndef _eapol_h_
+#define _eapol_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#include <bcmcrypto/aeskeywrap.h>
+
+/* EAPOL for 802.3/Ethernet */
+typedef struct {
+       struct ether_header eth;        /* 802.3/Ethernet header */
+       unsigned char version;          /* EAPOL protocol version */
+       unsigned char type;             /* EAPOL type */
+       unsigned short length;          /* Length of body */
+       unsigned char body[1];          /* Body (optional) */
+} eapol_header_t;
+
+#define EAPOL_HEADER_LEN 18
+
+/* EAPOL version */
+#define WPA2_EAPOL_VERSION     2
+#define WPA_EAPOL_VERSION      1
+#define LEAP_EAPOL_VERSION     1
+#define SES_EAPOL_VERSION      1
+
+/* EAPOL types */
+#define EAP_PACKET             0
+#define EAPOL_START            1
+#define EAPOL_LOGOFF           2
+#define EAPOL_KEY              3
+#define EAPOL_ASF              4
+
+/* EAPOL-Key types */
+#define EAPOL_RC4_KEY          1
+#ifdef BCMWPA2
+#define EAPOL_WPA2_KEY         2       /* 802.11i/WPA2 */
+#endif
+#define EAPOL_WPA_KEY          254     /* WPA */
+
+/* RC4 EAPOL-Key header field sizes */
+#define EAPOL_KEY_REPLAY_LEN   8
+#define EAPOL_KEY_IV_LEN       16
+#define EAPOL_KEY_SIG_LEN      16
+
+/* RC4 EAPOL-Key */
+typedef struct {
+       unsigned char type;                     /* Key Descriptor Type */
+       unsigned short length;                  /* Key Length (unaligned) */
+       unsigned char replay[EAPOL_KEY_REPLAY_LEN];     /* Replay Counter */
+       unsigned char iv[EAPOL_KEY_IV_LEN];             /* Key IV */
+       unsigned char index;                            /* Key Flags & Index */
+       unsigned char signature[EAPOL_KEY_SIG_LEN];     /* Key Signature */
+       unsigned char key[1];                           /* Key (optional) */
+} PACKED eapol_key_header_t;
+
+#define EAPOL_KEY_HEADER_LEN   44
+
+/* RC4 EAPOL-Key flags */
+#define EAPOL_KEY_FLAGS_MASK   0x80
+#define EAPOL_KEY_BROADCAST    0
+#define EAPOL_KEY_UNICAST      0x80
+
+/* RC4 EAPOL-Key index */
+#define EAPOL_KEY_INDEX_MASK   0x7f
+
+/* WPA/802.11i/WPA2 EAPOL-Key header field sizes */
+#define EAPOL_WPA_KEY_REPLAY_LEN       8
+#define EAPOL_WPA_KEY_NONCE_LEN                32
+#define EAPOL_WPA_KEY_IV_LEN           16
+#define EAPOL_WPA_KEY_RSC_LEN          8
+#define EAPOL_WPA_KEY_ID_LEN           8
+#define EAPOL_WPA_KEY_MIC_LEN          16
+#define EAPOL_WPA_KEY_DATA_LEN         (EAPOL_WPA_MAX_KEY_SIZE + AKW_BLOCK_LEN)
+#define EAPOL_WPA_MAX_KEY_SIZE         32
+
+/* WPA EAPOL-Key */
+typedef struct {
+       unsigned char type;             /* Key Descriptor Type */
+       unsigned short key_info;        /* Key Information (unaligned) */
+       unsigned short key_len;         /* Key Length (unaligned) */
+       unsigned char replay[EAPOL_WPA_KEY_REPLAY_LEN]; /* Replay Counter */
+       unsigned char nonce[EAPOL_WPA_KEY_NONCE_LEN];   /* Nonce */
+       unsigned char iv[EAPOL_WPA_KEY_IV_LEN];         /* Key IV */
+       unsigned char rsc[EAPOL_WPA_KEY_RSC_LEN];       /* Key RSC */
+       unsigned char id[EAPOL_WPA_KEY_ID_LEN];         /* WPA:Key ID, 802.11i/WPA2: Reserved */
+       unsigned char mic[EAPOL_WPA_KEY_MIC_LEN];       /* Key MIC */
+       unsigned short data_len;                        /* Key Data Length */
+       unsigned char data[EAPOL_WPA_KEY_DATA_LEN];     /* Key data */
+} PACKED eapol_wpa_key_header_t;
+
+#define EAPOL_WPA_KEY_LEN              95
+
+/* WPA/802.11i/WPA2 KEY KEY_INFO bits */
+#define WPA_KEY_DESC_V1                0x01
+#define WPA_KEY_DESC_V2                0x02
+#define WPA_KEY_PAIRWISE       0x08
+#define WPA_KEY_INSTALL                0x40
+#define WPA_KEY_ACK            0x80
+#define WPA_KEY_MIC            0x100
+#define WPA_KEY_SECURE         0x200
+#define WPA_KEY_ERROR          0x400
+#define WPA_KEY_REQ            0x800
+
+/* WPA-only KEY KEY_INFO bits */
+#define WPA_KEY_INDEX_0                0x00
+#define WPA_KEY_INDEX_1                0x10
+#define WPA_KEY_INDEX_2                0x20
+#define WPA_KEY_INDEX_3                0x30
+#define WPA_KEY_INDEX_MASK     0x30
+#define WPA_KEY_INDEX_SHIFT    0x04
+
+#ifdef BCMWPA2
+/* 802.11i/WPA2-only KEY KEY_INFO bits */
+#define WPA_KEY_ENCRYPTED_DATA 0x1000
+
+/* Key Data encapsulation */
+typedef struct {
+       uint8 type;
+       uint8 length;
+       uint8 oui[3];
+       uint8 subtype;
+       uint8 data[1];
+} PACKED eapol_wpa2_encap_data_t;
+
+#define EAPOL_WPA2_ENCAP_DATA_HDR_LEN  6
+
+#define WPA2_KEY_DATA_SUBTYPE_GTK      1
+#define WPA2_KEY_DATA_SUBTYPE_STAKEY   2
+#define WPA2_KEY_DATA_SUBTYPE_MAC      3
+#define WPA2_KEY_DATA_SUBTYPE_PMKID    4
+
+/* GTK encapsulation */
+typedef struct {
+       uint8   flags;
+       uint8   reserved;
+       uint8   gtk[EAPOL_WPA_MAX_KEY_SIZE];
+} PACKED eapol_wpa2_key_gtk_encap_t;
+
+#define EAPOL_WPA2_KEY_GTK_ENCAP_HDR_LEN       2
+
+#define WPA2_GTK_INDEX_MASK    0x03
+#define WPA2_GTK_INDEX_SHIFT   0x00
+
+#define WPA2_GTK_TRANSMIT      0x04
+
+/* STAKey encapsulation */
+typedef struct {
+       uint8   reserved[2];
+       uint8   mac[ETHER_ADDR_LEN];
+       uint8   stakey[EAPOL_WPA_MAX_KEY_SIZE];
+} PACKED eapol_wpa2_key_stakey_encap_t;
+
+#define WPA2_KEY_DATA_PAD      0xdd
+
+#endif /* BCMWPA2 */
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _eapol_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/ethernet.h b/package/broadcom-wl/src/driver/proto/ethernet.h
new file mode 100644 (file)
index 0000000..b674e0c
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * From FreeBSD 2.2.7: Fundamental constants relating to ethernet.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _NET_ETHERNET_H_           /* use native BSD ethernet.h when available */
+#define _NET_ETHERNET_H_
+
+#ifndef _TYPEDEFS_H_
+#include "typedefs.h"
+#endif
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+/*
+ * The number of bytes in an ethernet (MAC) address.
+ */
+#define        ETHER_ADDR_LEN          6
+
+/*
+ * The number of bytes in the type field.
+ */
+#define        ETHER_TYPE_LEN          2
+
+/*
+ * The number of bytes in the trailing CRC field.
+ */
+#define        ETHER_CRC_LEN           4
+
+/*
+ * The length of the combined header.
+ */
+#define        ETHER_HDR_LEN           (ETHER_ADDR_LEN * 2 + ETHER_TYPE_LEN)
+
+/*
+ * The minimum packet length.
+ */
+#define        ETHER_MIN_LEN           64
+
+/*
+ * The minimum packet user data length.
+ */
+#define        ETHER_MIN_DATA          46
+
+/*
+ * The maximum packet length.
+ */
+#define        ETHER_MAX_LEN           1518
+
+/*
+ * The maximum packet user data length.
+ */
+#define        ETHER_MAX_DATA          1500
+
+/* ether types */
+#define ETHER_TYPE_MIN         0x0600          /* Anything less than MIN is a length */
+#define        ETHER_TYPE_IP           0x0800          /* IP */
+#define ETHER_TYPE_ARP         0x0806          /* ARP */
+#define ETHER_TYPE_8021Q       0x8100          /* 802.1Q */
+#define        ETHER_TYPE_BRCM         0x886c          /* Broadcom Corp. */
+#define        ETHER_TYPE_802_1X       0x888e          /* 802.1x */
+#ifdef BCMWPA2
+#define        ETHER_TYPE_802_1X_PREAUTH 0x88c7        /* 802.1x preauthentication */
+#endif
+
+/* Broadcom subtype follows ethertype;  First 2 bytes are reserved; Next 2 are subtype; */
+#define        ETHER_BRCM_SUBTYPE_LEN  4               /* Broadcom 4 byte subtype */
+#define        ETHER_BRCM_CRAM         0x1             /* Broadcom subtype cram protocol */
+
+/* ether header */
+#define ETHER_DEST_OFFSET      (0 * ETHER_ADDR_LEN)    /* dest address offset */
+#define ETHER_SRC_OFFSET       (1 * ETHER_ADDR_LEN)    /* src address offset */
+#define ETHER_TYPE_OFFSET      (2 * ETHER_ADDR_LEN)    /* ether type offset */
+
+/*
+ * A macro to validate a length with
+ */
+#define        ETHER_IS_VALID_LEN(foo) \
+       ((foo) >= ETHER_MIN_LEN && (foo) <= ETHER_MAX_LEN)
+
+
+#ifndef __INCif_etherh     /* Quick and ugly hack for VxWorks */
+/*
+ * Structure of a 10Mb/s Ethernet header.
+ */
+struct ether_header {
+       uint8   ether_dhost[ETHER_ADDR_LEN];
+       uint8   ether_shost[ETHER_ADDR_LEN];
+       uint16  ether_type;
+} PACKED;
+
+/*
+ * Structure of a 48-bit Ethernet address.
+ */
+#ifndef NOETHREQ     /* Quick and ugly hack for VxWorks */
+struct ether_addr {
+       uint8 octet[ETHER_ADDR_LEN];
+} PACKED;
+#endif
+#endif /* !__INCif_etherh Quick and ugly hack for VxWorks */
+
+/*
+ * Takes a pointer, set, test, clear, toggle locally admininistered
+ * address bit in the 48-bit Ethernet address.
+ */
+#define ETHER_SET_LOCALADDR(ea)        (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] | 2))
+#define ETHER_IS_LOCALADDR(ea)         (((uint8 *)(ea))[0] & 2)
+#define ETHER_CLR_LOCALADDR(ea)        (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & 0xd))
+#define ETHER_TOGGLE_LOCALADDR(ea)     (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] ^ 2))
+
+/* Takes a pointer, marks unicast address bit in the MAC address */
+#define ETHER_SET_UNICAST(ea)  (((uint8 *)(ea))[0] = (((uint8 *)(ea))[0] & ~1))
+
+/*
+ * Takes a pointer, returns true if a 48-bit multicast address
+ * (including broadcast, since it is all ones)
+ */
+#define ETHER_ISMULTI(ea) (((const uint8 *)(ea))[0] & 1)
+
+
+/* compare two ethernet addresses - assumes the pointers can be referenced as shorts */
+#define        ether_cmp(a, b) (!(((short*)a)[0] == ((short*)b)[0]) | \
+                        !(((short*)a)[1] == ((short*)b)[1]) | \
+                        !(((short*)a)[2] == ((short*)b)[2]))
+
+/* copy an ethernet address - assumes the pointers can be referenced as shorts */
+#define        ether_copy(s, d) { \
+               ((short*)d)[0] = ((short*)s)[0]; \
+               ((short*)d)[1] = ((short*)s)[1]; \
+               ((short*)d)[2] = ((short*)s)[2]; }
+
+/*
+ * Takes a pointer, returns true if a 48-bit broadcast (all ones)
+ */
+#define ETHER_ISBCAST(ea) ((((uint8 *)(ea))[0] &               \
+                           ((uint8 *)(ea))[1] &                \
+                           ((uint8 *)(ea))[2] &                \
+                           ((uint8 *)(ea))[3] &                \
+                           ((uint8 *)(ea))[4] &                \
+                           ((uint8 *)(ea))[5]) == 0xff)
+
+static const struct ether_addr ether_bcast = {{255, 255, 255, 255, 255, 255}};
+static const struct ether_addr ether_null = {{0, 0, 0, 0, 0, 0}};
+
+/*
+ * Takes a pointer, returns true if a 48-bit null address (all zeros)
+ */
+#define ETHER_ISNULLADDR(ea) ((((uint8 *)(ea))[0] |            \
+                           ((uint8 *)(ea))[1] |                \
+                           ((uint8 *)(ea))[2] |                \
+                           ((uint8 *)(ea))[3] |                \
+                           ((uint8 *)(ea))[4] |                \
+                           ((uint8 *)(ea))[5]) == 0)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _NET_ETHERNET_H_ */
diff --git a/package/broadcom-wl/src/driver/proto/vlan.h b/package/broadcom-wl/src/driver/proto/vlan.h
new file mode 100644 (file)
index 0000000..2854b72
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * 802.1Q VLAN protocol definitions
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _vlan_h_
+#define _vlan_h_
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+#define VLAN_VID_MASK          0xfff   /* low 12 bits are vlan id */
+#define        VLAN_CFI_SHIFT          12      /* canonical format indicator bit */
+#define VLAN_PRI_SHIFT         13      /* user priority */
+
+#define VLAN_PRI_MASK          7       /* 3 bits of priority */
+
+#define        VLAN_TAG_LEN            4
+#define        VLAN_TAG_OFFSET         (2 * ETHER_ADDR_LEN)    /* offset in Ethernet II packet only */
+
+#define VLAN_TPID              0x8100  /* VLAN ethertype/Tag Protocol ID */
+
+struct ethervlan_header {
+       uint8   ether_dhost[ETHER_ADDR_LEN];
+       uint8   ether_shost[ETHER_ADDR_LEN];
+       uint16  vlan_type;              /* 0x8100 */
+       uint16  vlan_tag;               /* priority, cfi and vid */
+       uint16  ether_type;
+};
+
+#define        ETHERVLAN_HDR_LEN       (ETHER_HDR_LEN + VLAN_TAG_LEN)
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _vlan_h_ */
diff --git a/package/broadcom-wl/src/driver/proto/wpa.h b/package/broadcom-wl/src/driver/proto/wpa.h
new file mode 100644 (file)
index 0000000..c4b6dd1
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * Fundamental types and constants relating to WPA
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _proto_wpa_h_
+#define _proto_wpa_h_
+
+#include <typedefs.h>
+#include <proto/ethernet.h>
+
+/* enable structure packing */
+#if defined(__GNUC__)
+#define        PACKED  __attribute__((packed))
+#else
+#pragma pack(1)
+#define        PACKED
+#endif
+
+/* Reason Codes */
+
+/* 13 through 23 taken from IEEE Std 802.11i-2004 */
+#define DOT11_RC_INVALID_WPA_IE                13      /* Invalid info. element */
+#define DOT11_RC_MIC_FAILURE           14      /* Michael failure */
+#define DOT11_RC_4WH_TIMEOUT           15      /* 4-way handshake timeout */
+#define DOT11_RC_GTK_UPDATE_TIMEOUT    16      /* Group key update timeout */
+#define DOT11_RC_WPA_IE_MISMATCH       17      /* WPA IE in 4-way handshake differs from
+                                                * (re-)assoc. request/probe response
+                                                */
+#define DOT11_RC_INVALID_MC_CIPHER     18      /* Invalid multicast cipher */
+#define DOT11_RC_INVALID_UC_CIPHER     19      /* Invalid unicast cipher */
+#define DOT11_RC_INVALID_AKMP          20      /* Invalid authenticated key management protocol */
+#define DOT11_RC_BAD_WPA_VERSION       21      /* Unsupported WPA version */
+#define DOT11_RC_INVALID_WPA_CAP       22      /* Invalid WPA IE capabilities */
+#define DOT11_RC_8021X_AUTH_FAIL       23      /* 802.1X authentication failure */
+
+#define WPA2_PMKID_LEN 16
+
+/* WPA IE fixed portion */
+typedef struct
+{
+       uint8 tag;      /* TAG */
+       uint8 length;   /* TAG length */
+       uint8 oui[3];   /* IE OUI */
+       uint8 oui_type; /* OUI type */
+       struct {
+               uint8 low;
+               uint8 high;
+       } PACKED version;       /* IE version */
+} PACKED wpa_ie_fixed_t;
+#define WPA_IE_OUITYPE_LEN     4
+#define WPA_IE_FIXED_LEN       8
+#define WPA_IE_TAG_FIXED_LEN   6
+
+#ifdef BCMWPA2
+typedef struct {
+       uint8 tag;      /* TAG */
+       uint8 length;   /* TAG length */
+       struct {
+               uint8 low;
+               uint8 high;
+       } PACKED version;       /* IE version */
+} PACKED wpa_rsn_ie_fixed_t;
+#define WPA_RSN_IE_FIXED_LEN   4
+#define WPA_RSN_IE_TAG_FIXED_LEN       2
+typedef uint8 wpa_pmkid_t[WPA2_PMKID_LEN];
+#endif
+
+/* WPA suite/multicast suite */
+typedef struct
+{
+       uint8 oui[3];
+       uint8 type;
+} PACKED wpa_suite_t, wpa_suite_mcast_t;
+#define WPA_SUITE_LEN  4
+
+/* WPA unicast suite list/key management suite list */
+typedef struct
+{
+       struct {
+               uint8 low;
+               uint8 high;
+       } PACKED count;
+       wpa_suite_t list[1];
+} PACKED wpa_suite_ucast_t, wpa_suite_auth_key_mgmt_t;
+#define WPA_IE_SUITE_COUNT_LEN 2
+#ifdef BCMWPA2
+typedef struct
+{
+       struct {
+               uint8 low;
+               uint8 high;
+       } PACKED count;
+       wpa_pmkid_t list[1];
+} PACKED wpa_pmkid_list_t;
+#endif
+
+/* WPA cipher suites */
+#define WPA_CIPHER_NONE                0       /* None */
+#define WPA_CIPHER_WEP_40      1       /* WEP (40-bit) */
+#define WPA_CIPHER_TKIP                2       /* TKIP: default for WPA */
+#define WPA_CIPHER_AES_OCB     3       /* AES (OCB) */
+#define WPA_CIPHER_AES_CCM     4       /* AES (CCM) */
+#define WPA_CIPHER_WEP_104     5       /* WEP (104-bit) */
+
+#define IS_WPA_CIPHER(cipher)  ((cipher) == WPA_CIPHER_NONE || \
+                                (cipher) == WPA_CIPHER_WEP_40 || \
+                                (cipher) == WPA_CIPHER_WEP_104 || \
+                                (cipher) == WPA_CIPHER_TKIP || \
+                                (cipher) == WPA_CIPHER_AES_OCB || \
+                                (cipher) == WPA_CIPHER_AES_CCM)
+
+/* WPA TKIP countermeasures parameters */
+#define WPA_TKIP_CM_DETECT     60      /* multiple MIC failure window (seconds) */
+#define WPA_TKIP_CM_BLOCK      60      /* countermeasures active window (seconds) */
+
+/* RSN IE defines */
+#define RSN_CAP_LEN            2       /* Length of RSN capabilities field (2 octets) */
+
+/* RSN Capabilities defined in 802.11i */
+#define RSN_CAP_PREAUTH                        0x0001
+#define RSN_CAP_NOPAIRWISE             0x0002
+#define RSN_CAP_PTK_REPLAY_CNTR_MASK   0x000C
+#define RSN_CAP_PTK_REPLAY_CNTR_SHIFT  2
+#define RSN_CAP_GTK_REPLAY_CNTR_MASK   0x0030
+#define RSN_CAP_GTK_REPLAY_CNTR_SHIFT  4
+#define RSN_CAP_1_REPLAY_CNTR          0
+#define RSN_CAP_2_REPLAY_CNTRS         1
+#define RSN_CAP_4_REPLAY_CNTRS         2
+#define RSN_CAP_16_REPLAY_CNTRS                3
+
+/* WPA capabilities defined in 802.11i */
+#define WPA_CAP_4_REPLAY_CNTRS         RSN_CAP_4_REPLAY_CNTRS
+#define WPA_CAP_16_REPLAY_CNTRS                RSN_CAP_16_REPLAY_CNTRS
+#define WPA_CAP_REPLAY_CNTR_SHIFT      RSN_CAP_PTK_REPLAY_CNTR_SHIFT
+#define WPA_CAP_REPLAY_CNTR_MASK       RSN_CAP_PTK_REPLAY_CNTR_MASK
+
+/* WPA Specific defines */
+#define WPA_CAP_LEN    RSN_CAP_LEN     /* Length of RSN capabilities in RSN IE (2 octets) */
+
+#define        WPA_CAP_WPA2_PREAUTH            RSN_CAP_PREAUTH
+
+
+#undef PACKED
+#if !defined(__GNUC__)
+#pragma pack()
+#endif
+
+#endif /* _proto_wpa_h_ */
index a26db7395eeffc7d11d77f3bb1394c9fc86b2e4c..b83baeb614a164cfabbfce13fd51ee8c9834b960 100644 (file)
@@ -2,7 +2,7 @@
  * Generic Broadcom Home Networking Division (HND) DMA engine HW interface
  * This supports the following chips: BCM42xx, 44xx, 47xx .
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -10,7 +10,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbhnddma.h,v 1.1.1.2 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _sbhnddma_h_
index f5db9a76380b57785a4eef36b2a814cff7ab5acf..aa9a559f73daa346893fe8343665914f2bffa1a7 100644 (file)
@@ -56,7 +56,6 @@
 
 static char wlbuf[8192];
 static char interface[16] = "wl0";
-static unsigned long ptable[128];
 static unsigned long kmem_offset = 0;
 static int vif = 0, debug = 1, fromstdin = 0;
 
@@ -98,205 +97,6 @@ static inline int my_ether_ntoa(unsigned char *ea, char *buf)
                ea[0], ea[1], ea[2], ea[3], ea[4], ea[5]);
 }
 
-/*
- * find the starting point of wl.o in memory
- * by reading /proc/ksyms
- */
-static inline void wlc_get_mem_offset(void)
-{
-       FILE *f;
-       char s[64];
-
-       /* yes, i'm lazy ;) */
-       f = popen("grep '\\[wl]' /proc/ksyms | sort", "r");
-       if (fgets(s, 64, f) == 0)
-               return;
-
-       pclose(f);
-       
-       s[8] = 0;
-       kmem_offset = strtoul(s, NULL, 16);
-
-       /* sanity check */
-       if (kmem_offset < 0xc0000000)
-               kmem_offset = 0;
-}
-
-
-static int ptable_init(void)
-{
-       glob_t globbuf;
-       struct stat statbuf;
-       int fd;
-
-       if (ptable[0] == PTABLE_MAGIC)
-               return 0;
-       
-       glob("/lib/modules/2.4.*/wl.o.patch", 0, NULL, &globbuf);
-       
-       if (globbuf.gl_pathv[0] == NULL)
-               return -1;
-       
-       if ((fd = open(globbuf.gl_pathv[0], O_RDONLY)) < 0)
-               return -1;
-       
-       if (fstat(fd, &statbuf) < 0)
-               goto failed;
-
-       if (statbuf.st_size < 512)
-               goto failed;
-
-       if (read(fd, ptable, 512) < 512)
-               goto failed;
-       
-       if (ptable[0] != PTABLE_MAGIC)
-               goto failed;
-       
-       close(fd);
-
-       wlc_get_mem_offset();
-       if (kmem_offset == 0)
-               return -1;
-       
-       return 0;
-               
-failed:
-       close(fd);
-
-       return -1;
-}
-
-static inline unsigned long wlc_kmem_read(unsigned long offset)
-{
-       int fd;
-       unsigned long ret;
-
-       if ((fd = open("/dev/kmem", O_RDONLY )) < 0)
-               return -1;
-       
-       lseek(fd, 0x70000000, SEEK_SET);
-       lseek(fd, (kmem_offset - 0x70000000) + offset, SEEK_CUR);
-       read(fd, &ret, 4);
-       close(fd);
-
-       return ret;
-}
-
-static inline void wlc_kmem_write(unsigned long offset, unsigned long value)
-{
-       int fd;
-
-       if ((fd = open("/dev/kmem", O_WRONLY )) < 0)
-               return;
-       
-       lseek(fd, 0x70000000, SEEK_SET);
-       lseek(fd, (kmem_offset - 0x70000000) + offset, SEEK_CUR);
-       write(fd, &value, 4);
-       close(fd);
-}
-
-static int wlc_patcher_getval(unsigned long key, unsigned long *val)
-{
-       unsigned long *pt = &ptable[1];
-       unsigned long tmp;
-       
-       if (ptable_init() < 0) {
-               fprintf(stderr, "Could not load the ptable\n");
-               return -1;
-       }
-
-       while (*pt != PTABLE_END) {
-               if (*pt == key) {
-                       tmp = wlc_kmem_read(pt[1]);
-
-                       if (tmp == pt[2])
-                               *val = 0xffffffff;
-                       else
-                               *val = tmp;
-                       
-                       return 0;
-               }
-               pt += 3;
-       }
-       
-       return -1;
-}
-
-static int wlc_patcher_setval(unsigned long key, unsigned long val)
-{
-       unsigned long *pt = &ptable[1];
-       
-       if (ptable_init() < 0) {
-               fprintf(stderr, "Could not load the ptable\n");
-               return -1;
-       }
-
-       if (val != 0xffffffff)
-               val = (pt[2] & ~(0xffff)) | (val & 0xffff);
-       
-       while (*pt != PTABLE_END) {
-               if (*pt == key) {
-                       if (val == 0xffffffff) /* default */
-                               val = pt[2];
-
-                       wlc_kmem_write(pt[1], val);
-               }
-               pt += 3;
-       }
-       
-       return 0;
-}
-
-static int wlc_slottime(wlc_param param, void *data, void *value)
-{
-       int *val = (int *) value;
-       int ret = 0;
-
-       if ((param & PARAM_MODE) == SET) {
-               wlc_patcher_setval(PTABLE_SLT1, *val);
-               wlc_patcher_setval(PTABLE_SLT2, ((*val == -1) ? *val : *val + 510));
-       } else if ((param & PARAM_MODE) == GET) {
-               ret = wlc_patcher_getval(PTABLE_SLT1, (unsigned long *) val);
-               if (*val != 0xffffffff)
-                       *val &= 0xffff;
-       }
-
-       return ret;
-}
-
-static int wlc_noack(wlc_param param, void *data, void *value)
-{
-       int *val = (int *) value;
-       int ret = 0;
-
-       if ((param & PARAM_MODE) == SET) {
-               wlc_patcher_setval(PTABLE_ACKW, ((*val) ? 1 : 0));
-       } else if ((param & PARAM_MODE) == GET) {
-               ret = wlc_patcher_getval(PTABLE_ACKW, (unsigned long *) val);
-               *val &= 0xffff;
-               *val = (*val ? 1 : 0);
-       }
-
-       return ret;
-}
-
-static int wlc_ibss_merge(wlc_param param, void *data, void *value)
-{
-       int *val = (int *) value;
-       int ret = 0;
-
-       if ((param & PARAM_MODE) == SET) {
-               /* overwrite the instruction with 'lui v0,0x0' - fake a return
-                * status of 0 for wlc_bcn_tsf_later */
-               wlc_patcher_setval(PTABLE_ACKW, ((*val) ? -1 : 0x3c020000));
-       } else if ((param & PARAM_MODE) == GET) {
-               ret = wlc_patcher_getval(PTABLE_ACKW, (unsigned long *) val);
-               *val = ((*val == -1) ? 1 : 0);
-       }
-
-       return ret;
-}
-
 static int wlc_ioctl(wlc_param param, void *data, void *value)
 {
        unsigned int *var = ((unsigned int *) data);
@@ -956,6 +756,13 @@ static const struct wlc_call wlc_calls[] = {
                .data.str = "rtsthresh",
                .desc = "RTS threshold"
        },
+       {
+               .name = "slottime",
+               .param = INT,
+               .handler = wlc_iovar,
+               .data.str = "acktiming",
+               .desc = "Slot time"
+       },
        {
                .name = "rxant",
                .param = INT,
@@ -1052,24 +859,6 @@ static const struct wlc_call wlc_calls[] = {
                .handler = wlc_afterburner,
                .desc = "Broadcom Afterburner"
        },
-       {
-               .name = "slottime",
-               .param = INT,
-               .handler = wlc_slottime,
-               .desc = "Slot time (-1 = auto)"
-       },
-       {
-               .name = "txack",
-               .param = INT,
-               .handler = wlc_noack,
-               .desc = "Tx ACK enabled flag"
-       },
-       {
-               .name = "ibss_merge",
-               .param = INT,
-               .handler = wlc_ibss_merge,
-               .desc = "Allow IBSS merge in Ad-Hoc mode"
-       }
 };
 #define wlc_calls_size (sizeof(wlc_calls) / sizeof(struct wlc_call))
 
index 6f3224df146b36ed96902e6d226d8056893e57bd..31e54244e88ed21fafe62e66ed81cb3dad9dc9de 100644 (file)
@@ -15,6 +15,9 @@ ifneq ($(DEBUG),)
   EXTRA_CFLAGS += -DDEBUG=1
   _D=-debug
 endif
+ifneq ($(WL_WEXT),)
+  EXTRA_CFLAGS += -DWL_WEXT=1
+endif
 
 obj-m := wlcompat$(_D).o
 modules: wlcompat$(_D).o
index 2694a851c0087af394b554ffe2e8c0bd0d7fe193..5d2e74d4127842d67889330af5616efc3beb2449 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/wireless.h>
 #include <linux/timer.h>
 #include <linux/delay.h>
+#include <linux/random.h>
 #include <net/iw_handler.h>
 #include <asm/uaccess.h>
 
 #include <bcmutils.h>
 #include <wlioctl.h>
 
+char buf[WLC_IOCTL_MAXLEN];
 static struct net_device *dev;
-static struct iw_statistics wstats;
 #ifndef DEBUG
 static int random = 1;
 #endif
+#ifndef WL_WEXT
+static struct iw_statistics wstats;
 static int last_mode = -1;
 static int scan_cur = 0;
-char buf[WLC_IOCTL_MAXLEN];
 
 /* The frequency of each channel in MHz */
 const long channel_frequency[] = {
@@ -52,6 +54,7 @@ const long channel_frequency[] = {
        2447, 2452, 2457, 2462, 2467, 2472, 2484
 };
 #define NUM_CHANNELS ( sizeof(channel_frequency) / sizeof(channel_frequency[0]) )
+#endif
 
 #define SCAN_RETRY_MAX 5
 #define RNG_POLL_FREQ  1
@@ -88,6 +91,7 @@ static int wl_ioctl(struct net_device *dev, int cmd, void *buf, int len)
        return ret;
 }
 
+#if !defined(DEBUG) || !defined(WL_WEXT)
 static int
 wl_iovar_getbuf(struct net_device *dev, char *iovar, void *param, int paramlen, void *bufptr, int buflen)
 {
@@ -268,6 +272,9 @@ wl_bssiovar_get(struct net_device *dev, char *iovar, int bssidx, void *outbuf, i
        return err;
 }
 #endif
+#endif
+
+#ifndef WL_WEXT
 
 int get_primary_key(struct net_device *dev)
 {
@@ -903,6 +910,7 @@ static const struct iw_handler_def wlcompat_handler_def =
        .num_standard   = sizeof(wlcompat_handler)/sizeof(iw_handler),
 };
 
+#endif
 
 #ifdef DEBUG
 void print_buffer(int len, unsigned char *buf) {
@@ -923,8 +931,6 @@ void print_buffer(int len, unsigned char *buf) {
 static int (*old_ioctl)(struct net_device *dev, struct ifreq *ifr, int cmd);
 static int new_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) {
        int ret = 0;
-       struct iwreq *iwr = (struct iwreq *) ifr;
-       struct iw_request_info info;
        
 #ifdef DEBUG
        printk("dev: %s ioctl: 0x%04x\n",dev->name,cmd);
@@ -975,23 +981,25 @@ static int __init wlcompat_init()
 {
        int found = 0, i;
        char devname[4] = "wl0";
-       
+
        while (!found && (dev = dev_get_by_name(devname))) {
-               if ((dev->wireless_handlers == NULL) && ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && i == WLC_IOCTL_MAGIC))
+               if ((wl_ioctl(dev, WLC_GET_MAGIC, &i, sizeof(i)) == 0) && (i == WLC_IOCTL_MAGIC))
                        found = 1;
                devname[2]++;
        }
-       
+
+
        if (!found) {
                printk("No Broadcom devices found.\n");
                return -ENODEV;
        }
-               
 
        old_ioctl = dev->do_ioctl;
        dev->do_ioctl = new_ioctl;
+#ifndef WL_WEXT        
        dev->wireless_handlers = (struct iw_handler_def *)&wlcompat_handler_def;
        dev->get_wireless_stats = wlcompat_get_wireless_stats;
+#endif
 
 #ifndef DEBUG
        if (random) {
@@ -1014,8 +1022,10 @@ static void __exit wlcompat_exit()
        if (random)
                del_timer(&rng_timer);
 #endif
+#ifndef WL_WEXT        
        dev->get_wireless_stats = NULL;
        dev->wireless_handlers = NULL;
+#endif
        dev->do_ioctl = old_ioctl;
        return;
 }
diff --git a/target/linux/brcm-2.4/config-2.4.34 b/target/linux/brcm-2.4/config-2.4.34
deleted file mode 100644 (file)
index f992bbe..0000000
+++ /dev/null
@@ -1,390 +0,0 @@
-# CONFIG_60XX_WDT is not set
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_8139TOO_8129 is not set
-# CONFIG_8139TOO_PIO is not set
-# CONFIG_8139TOO_TUNE_TWISTER is not set
-# CONFIG_8139_OLD_RX_RESET is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADVANTECH_WDT is not set
-# CONFIG_AIRO is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_ALIM1535_WDT is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_AMD74XX_OVERRIDE is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_APRICOT is not set
-# CONFIG_ATM is not set
-CONFIG_AX25=m
-# CONFIG_AX25_DAMA_SLAVE is not set
-CONFIG_B44=y
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM4310=y
-CONFIG_BCM4704=y
-CONFIG_BCM4710=y
-CONFIG_BCM5365=y
-CONFIG_BCM947XX=y
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_ADMA100 is not set
-CONFIG_BLK_DEV_AEC62XX=m
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATARAID is not set
-# CONFIG_BLK_DEV_ATARAID_HPT is not set
-# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
-# CONFIG_BLK_DEV_ATARAID_PDC is not set
-# CONFIG_BLK_DEV_ATARAID_SII is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-CONFIG_BLK_DEV_IDE=m
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-CONFIG_BLK_DEV_IDEDISK=m
-CONFIG_BLK_DEV_IDEDMA=y
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-CONFIG_BLK_DEV_IDEPCI=y
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-CONFIG_BLK_DEV_OFFBOARD=y
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_PDC202XX=y
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-CONFIG_BLK_DEV_PDC202XX_OLD=m
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-CONFIG_BLUEZ=m
-CONFIG_BLUEZ_BNEP=m
-CONFIG_BLUEZ_BNEP_MC_FILTER=y
-CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
-# CONFIG_BLUEZ_HCIBFUSB is not set
-# CONFIG_BLUEZ_HCIBLUECARD is not set
-# CONFIG_BLUEZ_HCIBT3C is not set
-# CONFIG_BLUEZ_HCIBTUART is not set
-# CONFIG_BLUEZ_HCIDTL1 is not set
-CONFIG_BLUEZ_HCIUART=m
-CONFIG_BLUEZ_HCIUART_BCSP=y
-CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
-CONFIG_BLUEZ_HCIUART_H4=y
-CONFIG_BLUEZ_HCIUSB=m
-CONFIG_BLUEZ_HCIUSB_SCO=y
-# CONFIG_BLUEZ_HCIVHCI is not set
-CONFIG_BLUEZ_L2CAP=m
-CONFIG_BLUEZ_RFCOMM=m
-CONFIG_BLUEZ_RFCOMM_TTY=y
-CONFIG_BLUEZ_SCO=m
-# CONFIG_BPQETHER is not set
-CONFIG_CARDBUS=y
-CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
-# CONFIG_CMDLINE_BOOL is not set
-CONFIG_CRC32=y
-# CONFIG_CS89x0 is not set
-# CONFIG_DE4X5 is not set
-# CONFIG_DGRS is not set
-# CONFIG_DM9102 is not set
-# CONFIG_DMA_NONPCI is not set
-# CONFIG_E100 is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPRO100_PIO is not set
-# CONFIG_EPIC100 is not set
-# CONFIG_ES3210 is not set
-# CONFIG_EUROTECH_WDT is not set
-# CONFIG_FEALNX is not set
-CONFIG_FILTER=y
-# CONFIG_FORCEDETH is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HP100 is not set
-# CONFIG_HPT34X_AUTODMA is not set
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_PCI is not set
-# CONFIG_I2O_PROC is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I810_TCO is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IB700_WDT is not set
-CONFIG_IDE=m
-# CONFIG_IDEDISK_MULTI_MODE is not set
-CONFIG_IDEDISK_STROKE=y
-CONFIG_IDEDMA_AUTO=y
-CONFIG_IDEDMA_IVB=y
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_IDEDMA_PCI_AUTO=y
-# CONFIG_IDEDMA_PCI_WIP is not set
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_IDE_CHIPSETS is not set
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394 is not set
-CONFIG_IP6_NF_MATCH_LIMIT=m
-CONFIG_IP_VS=m
-# CONFIG_IP_VS_DEBUG is not set
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_FTP=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_NQ=m
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_TAB_BITS=12
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_WRR=m
-# CONFIG_LAN_SAA9730 is not set
-# CONFIG_LNE390 is not set
-CONFIG_LOG_BUF_SHIFT=0
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_MACHZ_WDT is not set
-# CONFIG_MIDI_EMU10K1 is not set
-# CONFIG_MIDI_VIA82CXXX is not set
-CONFIG_MINIX_FS=m
-CONFIG_MIPS_BRCM=y
-# CONFIG_MIXCOMWD is not set
-CONFIG_MKISS=m
-CONFIG_MSDOS_FS=m
-CONFIG_MTD_BCM947XX=y
-CONFIG_MTD_CFI_SSTSTD=y
-CONFIG_MTD_SFLASH=y
-# CONFIG_NATSEMI is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NE3210 is not set
-# CONFIG_NETROM is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-CONFIG_NET_SCH_ESFQ=m
-CONFIG_NET_WIRELESS=y
-CONFIG_NEW_IRQ=y
-CONFIG_NEW_TIME_C=y
-CONFIG_NLS=y
-CONFIG_PARPORT=m
-# CONFIG_PARPORT_1284 is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_IP22 is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_OTHER is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARPORT_SPLINK=m
-# CONFIG_PARPORT_SUNBPP is not set
-CONFIG_PCI=y
-CONFIG_PCI_AUTO=y
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_NAMES is not set
-# CONFIG_PCI_NEW is not set
-CONFIG_PCMCIA=m
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_HERMES is not set
-CONFIG_PCMCIA_SERIAL_CS=m
-# CONFIG_PCNET32 is not set
-# CONFIG_PCWATCHDOG is not set
-CONFIG_PDC202XX_BURST=y
-# CONFIG_PDC202XX_FORCE is not set
-# CONFIG_PLX_HERMES is not set
-CONFIG_PPDEV=m
-CONFIG_PRINTER=m
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_REMOTE_DEBUG is not set
-# CONFIG_ROSE is not set
-# CONFIG_SC1200_WDT is not set
-# CONFIG_SC520_WDT is not set
-# CONFIG_SCC_DELAY is not set
-# CONFIG_SCC_TRXECHO is not set
-# CONFIG_SCSI_CPQFCTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_IMM is not set
-# CONFIG_SCSI_NCR53C8XX is not set
-# CONFIG_SCSI_PCMCIA is not set
-# CONFIG_SCSI_PPA is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FC is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
-# CONFIG_SCSI_SYM53C8XX is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCx200_WDT is not set
-# CONFIG_SIS900 is not set
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_SOUND=m
-# CONFIG_SOUNDMODEM is not set
-# CONFIG_SOUND_AD1980 is not set
-# CONFIG_SOUND_ALI5455 is not set
-# CONFIG_SOUND_BT878 is not set
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_FORTE is not set
-# CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_TVMIXER is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_SOUND_WM97XX is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNDANCE_MMIO is not set
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_TCIC is not set
-# CONFIG_TIPAR is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TULIP is not set
-# CONFIG_TUNER_3036 is not set
-CONFIG_USB=m
-CONFIG_USB_ACM=m
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_AUDIO=m
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-# CONFIG_USB_BRLVGER is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CDCETHER is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DC2XX is not set
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-CONFIG_USB_EHCI_HCD=m
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT is not set
-# CONFIG_USB_HPUSBSCSI is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MIDI is not set
-# CONFIG_USB_MOUSE is not set
-CONFIG_USB_OHCI=m
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_POWERMATE is not set
-CONFIG_USB_PRINTER=m
-CONFIG_USB_PWC=m
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_SCANNER is not set
-# CONFIG_USB_SE401 is not set
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_BELKIN=m
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-CONFIG_USB_SERIAL_MCT_U232=m
-# CONFIG_USB_SERIAL_OMNINET is not set
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_VISOR=m
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-CONFIG_USB_STORAGE=m
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_HP8200e=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_TIGL is not set
-CONFIG_USB_UHCI=m
-CONFIG_USB_UHCI_ALT=m
-# CONFIG_USB_USS720 is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_RHINE_MMIO is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CQCAM is not set
-CONFIG_VIDEO_DEV=m
-# CONFIG_VIDEO_MEYE is not set
-# CONFIG_VIDEO_PMS is not set
-CONFIG_VIDEO_PROC_FS=y
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_ZORAN_BUZ is not set
-# CONFIG_VIDEO_ZORAN_DC10 is not set
-# CONFIG_VIDEO_ZORAN_LML33 is not set
-# CONFIG_VIDEO_ZR36120 is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_WAFER_WDT is not set
-# CONFIG_WDC_ALI15X3 is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-# CONFIG_WINBOND_840 is not set
-# CONFIG_YAM is not set
-CONFIG_USB_BLUETOOTH=n
diff --git a/target/linux/brcm-2.4/config-default b/target/linux/brcm-2.4/config-default
new file mode 100644 (file)
index 0000000..390a7d1
--- /dev/null
@@ -0,0 +1,409 @@
+# CONFIG_60XX_WDT is not set
+# CONFIG_6PACK is not set
+# CONFIG_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_ADVANTECH_WDT is not set
+# CONFIG_AIRO is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_ALIM1535_WDT is not set
+# CONFIG_ALIM7101_WDT is not set
+# CONFIG_AMD74XX_OVERRIDE is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_APRICOT is not set
+# CONFIG_ATM is not set
+CONFIG_AX25=m
+# CONFIG_AX25_DAMA_SLAVE is not set
+CONFIG_B44=y
+# CONFIG_BAYCOM_EPP is not set
+# CONFIG_BAYCOM_PAR is not set
+# CONFIG_BAYCOM_SER_FDX is not set
+# CONFIG_BAYCOM_SER_HDX is not set
+CONFIG_BCM4310=y
+CONFIG_BCM4704=y
+CONFIG_BCM4710=y
+CONFIG_BCM5365=y
+CONFIG_BCM947XX=y
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_BLK_DEV_ADMA100 is not set
+CONFIG_BLK_DEV_AEC62XX=m
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_ATARAID is not set
+# CONFIG_BLK_DEV_ATARAID_HPT is not set
+# CONFIG_BLK_DEV_ATARAID_MEDLEY is not set
+# CONFIG_BLK_DEV_ATARAID_PDC is not set
+# CONFIG_BLK_DEV_ATARAID_SII is not set
+# CONFIG_BLK_DEV_ATIIXP is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_DELKIN is not set
+# CONFIG_BLK_DEV_GENERIC is not set
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+CONFIG_BLK_DEV_IDE=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDEPCI=y
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+CONFIG_BLK_DEV_OFFBOARD=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_PDC202XX=y
+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+CONFIG_BLK_DEV_PDC202XX_OLD=m
+# CONFIG_BLK_DEV_PIIX is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_SIIMAGE is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_SVWKS is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+CONFIG_BLUEZ=m
+CONFIG_BLUEZ_BNEP=m
+CONFIG_BLUEZ_BNEP_MC_FILTER=y
+CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
+# CONFIG_BLUEZ_HCIBFUSB is not set
+# CONFIG_BLUEZ_HCIBLUECARD is not set
+# CONFIG_BLUEZ_HCIBT3C is not set
+# CONFIG_BLUEZ_HCIBTUART is not set
+# CONFIG_BLUEZ_HCIDTL1 is not set
+CONFIG_BLUEZ_HCIUART=m
+CONFIG_BLUEZ_HCIUART_BCSP=y
+CONFIG_BLUEZ_HCIUART_BCSP_TXCRC=y
+CONFIG_BLUEZ_HCIUART_H4=y
+CONFIG_BLUEZ_HCIUSB=m
+CONFIG_BLUEZ_HCIUSB_SCO=y
+# CONFIG_BLUEZ_HCIVHCI is not set
+CONFIG_BLUEZ_L2CAP=m
+CONFIG_BLUEZ_RFCOMM=m
+CONFIG_BLUEZ_RFCOMM_TTY=y
+CONFIG_BLUEZ_SCO=m
+# CONFIG_BPQETHER is not set
+# CONFIG_BRIDGE_EBT_802_3 is not set
+# CONFIG_BRIDGE_EBT_AMONG is not set
+# CONFIG_BRIDGE_EBT_ARPF is not set
+# CONFIG_BRIDGE_EBT_ARPREPLY is not set
+# CONFIG_BRIDGE_EBT_BROUTE is not set
+# CONFIG_BRIDGE_EBT_DNAT is not set
+# CONFIG_BRIDGE_EBT_IPF is not set
+# CONFIG_BRIDGE_EBT_LIMIT is not set
+# CONFIG_BRIDGE_EBT_LOG is not set
+# CONFIG_BRIDGE_EBT_MARKF is not set
+# CONFIG_BRIDGE_EBT_MARK_T is not set
+# CONFIG_BRIDGE_EBT_PKTTYPE is not set
+# CONFIG_BRIDGE_EBT_REDIRECT is not set
+# CONFIG_BRIDGE_EBT_SNAT is not set
+# CONFIG_BRIDGE_EBT_STP is not set
+# CONFIG_BRIDGE_EBT_T_FILTER is not set
+# CONFIG_BRIDGE_EBT_T_NAT is not set
+# CONFIG_BRIDGE_EBT_VLANF is not set
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+CONFIG_CARDBUS=y
+CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 init=/etc/preinit noinitrd console=ttyS0,115200"
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_CRC32=y
+# CONFIG_CS89x0 is not set
+# CONFIG_DE4X5 is not set
+# CONFIG_DGRS is not set
+# CONFIG_DM9102 is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_E100 is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_EEPRO100_PIO is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_ES3210 is not set
+# CONFIG_EUROTECH_WDT is not set
+# CONFIG_FEALNX is not set
+CONFIG_FILTER=y
+# CONFIG_FORCEDETH is not set
+CONFIG_HAMRADIO=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_HP100 is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_I2C_PARPORT is not set
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_PROC is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_IB700_WDT is not set
+CONFIG_IDE=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_IDEDISK_STROKE=y
+CONFIG_IDEDMA_AUTO=y
+CONFIG_IDEDMA_IVB=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_IDEPCI_SHARE_IRQ is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+# CONFIG_IEEE1394 is not set
+CONFIG_IP6_NF_MATCH_LIMIT=m
+# CONFIG_IP_NF_MATCH_PHYSDEV is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_FTP=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_NQ=m
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_TAB_BITS=12
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_WRR=m
+# CONFIG_LAN_SAA9730 is not set
+# CONFIG_LNE390 is not set
+CONFIG_LOG_BUF_SHIFT=0
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_MACHZ_WDT is not set
+# CONFIG_MIDI_EMU10K1 is not set
+# CONFIG_MIDI_VIA82CXXX is not set
+CONFIG_MINIX_FS=m
+CONFIG_MIPS_BRCM=y
+# CONFIG_MIXCOMWD is not set
+CONFIG_MKISS=m
+CONFIG_MSDOS_FS=m
+CONFIG_MTD_BCM947XX=y
+CONFIG_MTD_CFI_SSTSTD=y
+CONFIG_MTD_SFLASH=y
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_NE3210 is not set
+# CONFIG_NETROM is not set
+CONFIG_NET_PCI=y
+# CONFIG_NET_PCMCIA is not set
+CONFIG_NET_SCH_ESFQ=m
+CONFIG_NET_WIRELESS=y
+CONFIG_NEW_IRQ=y
+CONFIG_NEW_TIME_C=y
+CONFIG_NLS=y
+CONFIG_PARPORT=m
+# CONFIG_PARPORT_1284 is not set
+# CONFIG_PARPORT_AMIGA is not set
+# CONFIG_PARPORT_ATARI is not set
+# CONFIG_PARPORT_GSC is not set
+# CONFIG_PARPORT_IP22 is not set
+# CONFIG_PARPORT_MFC3 is not set
+# CONFIG_PARPORT_OTHER is not set
+# CONFIG_PARPORT_PC is not set
+CONFIG_PARPORT_SPLINK=m
+# CONFIG_PARPORT_SUNBPP is not set
+CONFIG_PCI=y
+CONFIG_PCI_AUTO=y
+# CONFIG_PCI_HERMES is not set
+# CONFIG_PCI_NAMES is not set
+# CONFIG_PCI_NEW is not set
+CONFIG_PCMCIA=m
+# CONFIG_PCMCIA_ATMEL is not set
+# CONFIG_PCMCIA_HERMES is not set
+CONFIG_PCMCIA_SERIAL_CS=m
+# CONFIG_PCNET32 is not set
+# CONFIG_PCWATCHDOG is not set
+CONFIG_PDC202XX_BURST=y
+# CONFIG_PDC202XX_FORCE is not set
+# CONFIG_PLX_HERMES is not set
+CONFIG_PPDEV=m
+CONFIG_PRINTER=m
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_REMOTE_DEBUG is not set
+# CONFIG_ROSE is not set
+# CONFIG_SC1200_WDT is not set
+# CONFIG_SC520_WDT is not set
+# CONFIG_SCC_DELAY is not set
+# CONFIG_SCC_TRXECHO is not set
+# CONFIG_SCSI_CPQFCTS is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_IMM is not set
+# CONFIG_SCSI_NCR53C8XX is not set
+# CONFIG_SCSI_PCMCIA is not set
+# CONFIG_SCSI_PPA is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_ISP is not set
+# CONFIG_SCSI_SYM53C8XX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCx200_WDT is not set
+# CONFIG_SIS900 is not set
+CONFIG_SOFT_WATCHDOG=m
+CONFIG_SOUND=m
+# CONFIG_SOUNDMODEM is not set
+# CONFIG_SOUND_AD1980 is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_TVMIXER is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_SOUND_WM97XX is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_SUNDANCE_MMIO is not set
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_TCIC is not set
+# CONFIG_TIPAR is not set
+# CONFIG_TLAN is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_TULIP is not set
+# CONFIG_TUNER_3036 is not set
+CONFIG_USB=m
+CONFIG_USB_ACM=m
+# CONFIG_USB_AIPTEK is not set
+CONFIG_USB_AUDIO=m
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_BRLVGER is not set
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_CDCETHER is not set
+# CONFIG_USB_DABUSB is not set
+# CONFIG_USB_DC2XX is not set
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DSBR is not set
+CONFIG_USB_EHCI_HCD=m
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_HID is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_HIDINPUT is not set
+# CONFIG_USB_HPUSBSCSI is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+# CONFIG_USB_MIDI is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_OHCI=m
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_POWERMATE is not set
+CONFIG_USB_PRINTER=m
+CONFIG_USB_PWC=m
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_BELKIN=m
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+CONFIG_USB_SERIAL_MCT_U232=m
+# CONFIG_USB_SERIAL_OMNINET is not set
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_VISOR=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+CONFIG_USB_STORAGE=m
+CONFIG_USB_STORAGE_DATAFAB=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_HP8200e=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_TIGL is not set
+CONFIG_USB_UHCI=m
+CONFIG_USB_UHCI_ALT=m
+# CONFIG_USB_USS720 is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_VIA_RHINE_MMIO is not set
+# CONFIG_VIDEO_BT848 is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CQCAM is not set
+CONFIG_VIDEO_DEV=m
+# CONFIG_VIDEO_MEYE is not set
+# CONFIG_VIDEO_PMS is not set
+CONFIG_VIDEO_PROC_FS=y
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_ZORAN_BUZ is not set
+# CONFIG_VIDEO_ZORAN_DC10 is not set
+# CONFIG_VIDEO_ZORAN_LML33 is not set
+# CONFIG_VIDEO_ZR36120 is not set
+# CONFIG_W83877F_WDT is not set
+# CONFIG_WAFER_WDT is not set
+# CONFIG_WDC_ALI15X3 is not set
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_YAM is not set
index 55e1757efc27694d2ea82217358045a6ae79d098..f2096137e458eab65171bf3daab5af20cb8ae4e0 100644 (file)
@@ -9,8 +9,8 @@ O_TARGET        := bcm947xx.o
 
 export-objs     := export.o
 obj-y          := prom.o setup.o time.o sbmips.o gpio.o
-obj-y          += nvram.o nvram_linux.o sflash.o
-obj-y          += sbutils.o bcmutils.o bcmsrom.o hndchipc.o
+obj-y          += nvram.o nvram_linux.o cfe_env.o hndpmu.o
+obj-y          += sbutils.o utils.o bcmsrom.o hndchipc.o
 obj-$(CONFIG_PCI) += sbpci.o pcibios.o
 obj-y          += export.o
 
index 1d08218a429687225ee900ac95d9980c1d4ebb9a..d5737d72fcb9d5d12bf21bc184634fe259f72f82 100644 (file)
 /*
- *  Misc useful routines to access NIC SROM/OTP .
+ *  Routines to access SPROM and to parse SROM/CIS variables.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmsrom.c,v 1.1.1.14 2006/04/15 01:28:25 michael Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
 #include <bcmdefs.h>
 #include <osl.h>
-#include <bcmutils.h>
-#include <bcmsrom.h>
+#include <stdarg.h>
+#include <sbchipc.h>
 #include <bcmdevs.h>
 #include <bcmendian.h>
 #include <sbpcmcia.h>
 #include <pcicfg.h>
+#include <sbconfig.h>
 #include <sbutils.h>
+#include <bcmsrom.h>
 #include <bcmnvram.h>
+#include "utils.h"
 
 /* debug/trace */
 #if defined(WLTEST)
 #define        BS_ERROR(args)  printf args
 #else
 #define        BS_ERROR(args)
-#endif /* BCMDBG_ERR || WLTEST */
-
-#define        VARS_MAX        4096    /* should be reduced */
+#endif
 
 #define WRITE_ENABLE_DELAY     500     /* 500 ms after write enable/disable toggle */
 #define WRITE_WORD_DELAY       20      /* 20 ms between each word write */
 
-static int initvars_srom_pci(void *sbh, void *curmap, char **vars, uint *count);
-static int initvars_cis_pcmcia(void *sbh, osl_t *osh, char **vars, uint *count);
-static int initvars_flash_sb(void *sbh, char **vars, uint *count);
-static int srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt, char **vars, uint *count);
-static int sprom_cmd_pcmcia(osl_t *osh, uint8 cmd);
-static int sprom_read_pcmcia(osl_t *osh, uint16 addr, uint16 *data);
-static int sprom_write_pcmcia(osl_t *osh, uint16 addr, uint16 data);
-static int sprom_read_pci(osl_t *osh, uint16 *sprom, uint wordoff, uint16 *buf, uint nwords,
-                          bool check_crc);
+typedef struct varbuf
+{
+  char *buf;                   /* pointer to current position */
+  unsigned int size;           /* current (residual) size in bytes */
+} varbuf_t;
+
+static int initvars_srom_sb (sb_t * sbh, osl_t * osh, void *curmap,
+                            char **vars, uint * count);
+static void _initvars_srom_pci (uint8 sromrev, uint16 * srom, uint off,
+                               varbuf_t * b);
+static int initvars_srom_pci (sb_t * sbh, void *curmap, char **vars,
+                             uint * count);
+static int initvars_cis_pcmcia (sb_t * sbh, osl_t * osh, char **vars,
+                               uint * count);
+#if !defined(BCMUSBDEV) && !defined(BCMSDIODEV)
+static int initvars_flash_sb (sb_t * sbh, char **vars, uint * count);
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
+static int sprom_cmd_pcmcia (osl_t * osh, uint8 cmd);
+static int sprom_read_pcmcia (osl_t * osh, uint16 addr, uint16 * data);
+static int sprom_write_pcmcia (osl_t * osh, uint16 addr, uint16 data);
+static int sprom_read_pci (osl_t * osh, uint16 * sprom, uint wordoff,
+                          uint16 * buf, uint nwords, bool check_crc);
+
+static int initvars_table (osl_t * osh, char *start, char *end, char **vars,
+                          uint * count);
+static int initvars_flash (sb_t * sbh, osl_t * osh, char **vp, uint len);
+
+#ifdef BCMUSBDEV
+static int get_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+                              uint boff, uint16 * srom, uint bsz);
+static int set_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+                              uint boff, uint16 * srom, uint bsz);
+static uint srom_size (sb_t * sbh, osl_t * osh);
+#endif /* def BCMUSBDEV */
+
+/* Initialization of varbuf structure */
+static void
+varbuf_init (varbuf_t * b, char *buf, uint size)
+{
+  b->size = size;
+  b->buf = buf;
+}
 
-static int initvars_table(osl_t *osh, char *start, char *end, char **vars, uint *count);
-static int initvars_flash(osl_t *osh, char **vp, uint len, char *devpath);
+/* append a null terminated var=value string */
+static int
+varbuf_append (varbuf_t * b, const char *fmt, ...)
+{
+  va_list ap;
+  int r;
+
+  if (b->size < 2)
+    return 0;
+
+  va_start (ap, fmt);
+  r = vsnprintf (b->buf, b->size, fmt, ap);
+  va_end (ap);
+
+  /* C99 snprintf behavior returns r >= size on overflow,
+   * others return -1 on overflow.
+   * All return -1 on format error.
+   * We need to leave room for 2 null terminations, one for the current var
+   * string, and one for final null of the var table. So check that the
+   * strlen written, r, leaves room for 2 chars.
+   */
+  if ((r == -1) || (r > (int) (b->size - 2)))
+    {
+      b->size = 0;
+      return 0;
+    }
+
+  /* skip over this string's null termination */
+  r++;
+  b->size -= r;
+  b->buf += r;
+
+  return r;
+}
 
 /*
  * Initialize local vars from the right source for this platform.
  * Return 0 on success, nonzero on error.
  */
 int
-srom_var_init(void *sbh, uint bustype, void *curmap, osl_t *osh, char **vars, uint *count)
+BCMINITFN (srom_var_init) (sb_t * sbh, uint bustype, void *curmap,
+                          osl_t * osh, char **vars, uint * count)
 {
-       ASSERT(bustype == BUSTYPE(bustype));
-       if (vars == NULL || count == NULL)
-               return (0);
+  ASSERT (bustype == BUSTYPE (bustype));
+  if (vars == NULL || count == NULL)
+    return (0);
 
-       switch (BUSTYPE(bustype)) {
-       case SB_BUS:
-       case JTAG_BUS:
-               return initvars_flash_sb(sbh, vars, count);
+  *vars = NULL;
+  *count = 0;
 
-       case PCI_BUS:
-               ASSERT(curmap); /* can not be NULL */
-               return initvars_srom_pci(sbh, curmap, vars, count);
+  switch (BUSTYPE (bustype))
+    {
+    case SB_BUS:
+    case JTAG_BUS:
+      return initvars_srom_sb (sbh, osh, curmap, vars, count);
 
-       case PCMCIA_BUS:
-               return initvars_cis_pcmcia(sbh, osh, vars, count);
+    case PCI_BUS:
+      ASSERT (curmap);         /* can not be NULL */
+      return initvars_srom_pci (sbh, curmap, vars, count);
 
+    case PCMCIA_BUS:
+      return initvars_cis_pcmcia (sbh, osh, vars, count);
 
-       default:
-               ASSERT(0);
-       }
-       return (-1);
+
+    default:
+      ASSERT (0);
+    }
+  return (-1);
 }
 
 /* support only 16-bit word read from srom */
 int
-srom_read(uint bustype, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf)
+srom_read (sb_t * sbh, uint bustype, void *curmap, osl_t * osh,
+          uint byteoff, uint nbytes, uint16 * buf)
 {
-       void *srom;
-       uint i, off, nw;
-
-       ASSERT(bustype == BUSTYPE(bustype));
-
-       /* check input - 16-bit access only */
-       if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
-               return 1;
-
-       off = byteoff / 2;
-       nw = nbytes / 2;
-
-       if (BUSTYPE(bustype) == PCI_BUS) {
-               if (!curmap)
-                       return 1;
-               srom = (uchar*)curmap + PCI_BAR0_SPROM_OFFSET;
-               if (sprom_read_pci(osh, srom, off, buf, nw, FALSE))
-                       return 1;
-       } else if (BUSTYPE(bustype) == PCMCIA_BUS) {
-               for (i = 0; i < nw; i++) {
-                       if (sprom_read_pcmcia(osh, (uint16)(off + i), (uint16*)(buf + i)))
-                               return 1;
-               }
-       } else {
-               return 1;
+  void *srom;
+  uint i, off, nw;
+
+  ASSERT (bustype == BUSTYPE (bustype));
+
+  /* check input - 16-bit access only */
+  if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
+    return 1;
+
+  off = byteoff / 2;
+  nw = nbytes / 2;
+
+  if (BUSTYPE (bustype) == PCI_BUS)
+    {
+      if (!curmap)
+       return 1;
+      srom = (uchar *) curmap + PCI_BAR0_SPROM_OFFSET;
+      if (sprom_read_pci (osh, srom, off, buf, nw, FALSE))
+       return 1;
+    }
+  else if (BUSTYPE (bustype) == PCMCIA_BUS)
+    {
+      for (i = 0; i < nw; i++)
+       {
+         if (sprom_read_pcmcia
+             (osh, (uint16) (off + i), (uint16 *) (buf + i)))
+           return 1;
        }
+    }
+  else if (BUSTYPE (bustype) == SB_BUS)
+    {
+#ifdef BCMUSBDEV
+      if (SPROMBUS == PCMCIA_BUS)
+       {
+         uint origidx;
+         void *regs;
+         int rc;
+         bool wasup;
+
+         origidx = sb_coreidx (sbh);
+         regs = sb_setcore (sbh, SB_PCMCIA, 0);
+         ASSERT (regs != NULL);
+
+         if (!(wasup = sb_iscoreup (sbh)))
+           sb_core_reset (sbh, 0, 0);
+
+         rc = get_sb_pcmcia_srom (sbh, osh, regs, byteoff, buf, nbytes);
+
+         if (!wasup)
+           sb_core_disable (sbh, 0);
+
+         sb_setcoreidx (sbh, origidx);
+         return rc;
+       }
+#endif /* def BCMUSBDEV */
 
-       return 0;
+      return 1;
+    }
+  else
+    {
+      return 1;
+    }
+
+  return 0;
 }
 
 /* support only 16-bit word write into srom */
 int
-srom_write(uint bustype, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf)
+srom_write (sb_t * sbh, uint bustype, void *curmap, osl_t * osh,
+           uint byteoff, uint nbytes, uint16 * buf)
 {
-       uint16 *srom;
-       uint i, nw, crc_range;
-       uint16 image[SPROM_SIZE];
-       uint8 crc;
-       volatile uint32 val32;
-
-       ASSERT(bustype == BUSTYPE(bustype));
-
-       /* check input - 16-bit access only */
-       if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2))
-               return 1;
-
-       /* Are we writing the whole thing at once? */
-       if ((byteoff == 0) &&
-           ((nbytes == SPROM_SIZE) ||
-            (nbytes == (SPROM_CRC_RANGE * 2)) ||
-            (nbytes == (SROM4_WORDS * 2)))) {
-               crc_range = nbytes;
-               bcopy((void*)buf, (void*)image, nbytes);
-               nw = nbytes / 2;
-       } else {
-               if ((BUSTYPE(bustype) == PCMCIA_BUS) || (BUSTYPE(bustype) == SDIO_BUS))
-                       crc_range = SPROM_SIZE;
-               else
-                       crc_range = SPROM_CRC_RANGE * 2;        /* Tentative */
-
-               nw = crc_range / 2;
-               /* read first 64 words from srom */
-               if (srom_read(bustype, curmap, osh, 0, crc_range, image))
-                       return 1;
-               if (image[SROM4_SIGN] == SROM4_SIGNATURE) {
-                       crc_range = SROM4_WORDS;
-                       nw = crc_range / 2;
-                       if (srom_read(bustype, curmap, osh, 0, crc_range, image))
-                               return 1;
-               }
-               /* make changes */
-               bcopy((void*)buf, (void*)&image[byteoff / 2], nbytes);
+  uint16 *srom;
+  uint i, nw, crc_range;
+  uint16 image[SPROM_SIZE];
+  uint8 crc;
+  volatile uint32 val32;
+
+  ASSERT (bustype == BUSTYPE (bustype));
+
+  /* check input - 16-bit access only */
+  if ((byteoff & 1) || (nbytes & 1))
+    return 1;
+
+  if (byteoff == 0x55aa)
+    {
+      /* Erase request */
+      crc_range = 0;
+      memset ((void *) image, 0xff, nbytes);
+      nw = nbytes / 2;
+    }
+  else if ((byteoff == 0) &&
+          ((nbytes == SPROM_SIZE * 2) ||
+           (nbytes == (SPROM_CRC_RANGE * 2)) ||
+           (nbytes == (SROM4_WORDS * 2))))
+    {
+      /* Are we writing the whole thing at once? */
+      crc_range = nbytes;
+      bcopy ((void *) buf, (void *) image, nbytes);
+      nw = nbytes / 2;
+    }
+  else
+    {
+      if ((byteoff + nbytes) > (SPROM_SIZE * 2))
+       return 1;
+
+      if (BUSTYPE (bustype) == PCMCIA_BUS)
+       {
+         crc_range = SPROM_SIZE * 2;
+       }
+      else
+       {
+         crc_range = SPROM_CRC_RANGE * 2;      /* Tentative */
        }
 
-       /* calculate crc */
-       htol16_buf(image, crc_range);
-       crc = ~hndcrc8((uint8 *)image, crc_range - 1, CRC8_INIT_VALUE);
-       ltoh16_buf(image, crc_range);
-       image[(crc_range / 2) - 1] = (crc << 8) | (image[(crc_range / 2) - 1] & 0xff);
-
-       if (BUSTYPE(bustype) == PCI_BUS) {
-               srom = (uint16*)((uchar*)curmap + PCI_BAR0_SPROM_OFFSET);
-               /* enable writes to the SPROM */
-               val32 = OSL_PCI_READ_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32));
-               val32 |= SPROM_WRITEEN;
-               OSL_PCI_WRITE_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32), val32);
-               bcm_mdelay(WRITE_ENABLE_DELAY);
-               /* write srom */
-               for (i = 0; i < nw; i++) {
-                       W_REG(osh, &srom[i], image[i]);
-                       bcm_mdelay(WRITE_WORD_DELAY);
-               }
-               /* disable writes to the SPROM */
-               OSL_PCI_WRITE_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32), val32 &
-                                    ~SPROM_WRITEEN);
-       } else if (BUSTYPE(bustype) == PCMCIA_BUS) {
-               /* enable writes to the SPROM */
-               if (sprom_cmd_pcmcia(osh, SROM_WEN))
-                       return 1;
-               bcm_mdelay(WRITE_ENABLE_DELAY);
-               /* write srom */
-               for (i = 0; i < nw; i++) {
-                       sprom_write_pcmcia(osh, (uint16)(i), image[i]);
-                       bcm_mdelay(WRITE_WORD_DELAY);
-               }
-               /* disable writes to the SPROM */
-               if (sprom_cmd_pcmcia(osh, SROM_WDS))
-                       return 1;
-       } else {
-               return 1;
+      nw = crc_range / 2;
+      /* read first 64 words from srom */
+      if (srom_read (sbh, bustype, curmap, osh, 0, crc_range, image))
+       return 1;
+      if (image[SROM4_SIGN] == SROM4_SIGNATURE)
+       {
+         nw = SROM4_WORDS;
+         crc_range = nw * 2;
+         if (srom_read (sbh, bustype, curmap, osh, 0, crc_range, image))
+           return 1;
+       }
+      /* make changes */
+      bcopy ((void *) buf, (void *) &image[byteoff / 2], nbytes);
+    }
+
+  if (crc_range)
+    {
+      /* calculate crc */
+      htol16_buf (image, crc_range);
+      crc = ~hndcrc8 ((uint8 *) image, crc_range - 1, 0xff);
+      ltoh16_buf (image, crc_range);
+      image[nw - 1] = (crc << 8) | (image[nw - 1] & 0xff);
+    }
+
+  if (BUSTYPE (bustype) == PCI_BUS)
+    {
+      srom = (uint16 *) ((uchar *) curmap + PCI_BAR0_SPROM_OFFSET);
+      /* enable writes to the SPROM */
+      val32 = OSL_PCI_READ_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32));
+      val32 |= SPROM_WRITEEN;
+      OSL_PCI_WRITE_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32), val32);
+      bcm_mdelay (WRITE_ENABLE_DELAY);
+      /* write srom */
+      for (i = 0; i < nw; i++)
+       {
+         W_REG (osh, &srom[i], image[i]);
+         bcm_mdelay (WRITE_WORD_DELAY);
+       }
+      /* disable writes to the SPROM */
+      OSL_PCI_WRITE_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32), val32 &
+                           ~SPROM_WRITEEN);
+    }
+  else if (BUSTYPE (bustype) == PCMCIA_BUS)
+    {
+      /* enable writes to the SPROM */
+      if (sprom_cmd_pcmcia (osh, SROM_WEN))
+       return 1;
+      bcm_mdelay (WRITE_ENABLE_DELAY);
+      /* write srom */
+      for (i = 0; i < nw; i++)
+       {
+         sprom_write_pcmcia (osh, (uint16) (i), image[i]);
+         bcm_mdelay (WRITE_WORD_DELAY);
        }
+      /* disable writes to the SPROM */
+      if (sprom_cmd_pcmcia (osh, SROM_WDS))
+       return 1;
+    }
+  else if (BUSTYPE (bustype) == SB_BUS)
+    {
+#ifdef BCMUSBDEV
+      if (SPROMBUS == PCMCIA_BUS)
+       {
+         uint origidx;
+         void *regs;
+         int rc;
+         bool wasup;
+
+         origidx = sb_coreidx (sbh);
+         regs = sb_setcore (sbh, SB_PCMCIA, 0);
+         ASSERT (regs != NULL);
+
+         if (!(wasup = sb_iscoreup (sbh)))
+           sb_core_reset (sbh, 0, 0);
+
+         rc = set_sb_pcmcia_srom (sbh, osh, regs, byteoff, buf, nbytes);
+
+         if (!wasup)
+           sb_core_disable (sbh, 0);
+
+         sb_setcoreidx (sbh, origidx);
+         return rc;
+       }
+#endif /* def BCMUSBDEV */
+      return 1;
+    }
+  else
+    {
+      return 1;
+    }
+
+  bcm_mdelay (WRITE_ENABLE_DELAY);
+  return 0;
+}
+
+#ifdef BCMUSBDEV
+#define SB_PCMCIA_READ(osh, regs, fcr) \
+               R_REG(osh, (volatile uint8 *)(regs) + 0x600 + (fcr) - 0x700 / 2)
+#define SB_PCMCIA_WRITE(osh, regs, fcr, v) \
+               W_REG(osh, (volatile uint8 *)(regs) + 0x600 + (fcr) - 0x700 / 2, v)
+
+/* set PCMCIA srom command register */
+static int
+srom_cmd_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint8 cmd)
+{
+  uint8 status = 0;
+  uint wait_cnt = 0;
+
+  /* write srom command register */
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_CS, cmd);
 
-       bcm_mdelay(WRITE_ENABLE_DELAY);
+  /* wait status */
+  while (++wait_cnt < 1000000)
+    {
+      status = SB_PCMCIA_READ (osh, pcmregs, SROM_CS);
+      if (status & SROM_DONE)
        return 0;
+      OSL_DELAY (1);
+    }
+
+  BS_ERROR (("sr_cmd: Give up after %d tries, stat = 0x%x\n", wait_cnt,
+            status));
+  return 1;
 }
 
+/* read a word from the PCMCIA srom over SB */
+static int
+srom_read_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint16 addr, uint16 * data)
+{
+  uint8 addr_l, addr_h, data_l, data_h;
+
+  addr_l = (uint8) ((addr * 2) & 0xff);
+  addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+
+  /* set address */
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRH, addr_h);
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRL, addr_l);
 
+  /* do read */
+  if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_READ))
+    return 1;
+
+  /* read data */
+  data_h = SB_PCMCIA_READ (osh, pcmregs, SROM_DATAH);
+  data_l = SB_PCMCIA_READ (osh, pcmregs, SROM_DATAL);
+  *data = ((uint16) data_h << 8) | data_l;
+
+  return 0;
+}
+
+/* write a word to the PCMCIA srom over SB */
 static int
-srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt, char **vars, uint *count)
+srom_write_sb_pcmcia (osl_t * osh, uint8 * pcmregs, uint16 addr, uint16 data)
 {
-       char eabuf[32];
-       char *vp, *base;
-       uint8 *cis, tup, tlen, sromrev = 1;
-       int i, j;
-       uint varsize;
-       bool ag_init = FALSE;
-       uint32 w32;
-
-       ASSERT(vars);
-       ASSERT(count);
-
-       base = vp = MALLOC(osh, VARS_MAX);
-       ASSERT(vp);
-       if (!vp)
-               return -2;
-
-       while (ciscnt--) {
-               cis = *pcis++;
-               i = 0;
-               do {
-                       tup = cis[i++];
-                       tlen = cis[i++];
-                       if ((i + tlen) >= CIS_SIZE)
-                               break;
-
-                       switch (tup) {
-                       case CISTPL_MANFID:
-                               vp += sprintf(vp, "manfid=%d", (cis[i + 1] << 8) + cis[i]);
-                               vp++;
-                               vp += sprintf(vp, "prodid=%d", (cis[i + 3] << 8) + cis[i + 2]);
-                               vp++;
-                               break;
-
-                       case CISTPL_FUNCE:
-                               switch (cis[i]) {
-                               case LAN_NID:
-                                       ASSERT(cis[i + 1] == 6);
-                                       bcm_ether_ntoa((struct ether_addr *)&cis[i + 2], eabuf);
-                                       vp += sprintf(vp, "il0macaddr=%s", eabuf);
-                                       vp++;
-                                       break;
-                               case 1:         /* SDIO Extended Data */
-                                       vp += sprintf(vp, "sdmaxblk=%d",
-                                                     (cis[i + 13] << 8) | cis[i + 12]);
-                                       vp++;
-                                       break;
-                               }
-                               break;
-
-                       case CISTPL_CFTABLE:
-                               vp += sprintf(vp, "regwindowsz=%d", (cis[i + 7] << 8) | cis[i + 6]);
-                               vp++;
-                               break;
-
-                       case CISTPL_BRCM_HNBU:
-                               switch (cis[i]) {
-                               case HNBU_SROMREV:
-                                       sromrev = cis[i + 1];
-                                       break;
-
-                               case HNBU_CHIPID:
-                                       vp += sprintf(vp, "vendid=%d", (cis[i + 2] << 8) +
-                                                     cis[i + 1]);
-                                       vp++;
-                                       vp += sprintf(vp, "devid=%d", (cis[i + 4] << 8) +
-                                                     cis[i + 3]);
-                                       vp++;
-                                       if (tlen == 7) {
-                                               vp += sprintf(vp, "chiprev=%d",
-                                                             (cis[i + 6] << 8) + cis[i + 5]);
-                                               vp++;
-                                       }
-                                       break;
-
-                               case HNBU_BOARDREV:
-                                       vp += sprintf(vp, "boardrev=%d", cis[i + 1]);
-                                       vp++;
-                                       break;
-
-                               case HNBU_AA:
-                                       vp += sprintf(vp, "aa2g=%d", cis[i + 1]);
-                                       vp++;
-                                       break;
-
-                               case HNBU_AG:
-                                       vp += sprintf(vp, "ag0=%d", cis[i + 1]);
-                                       vp++;
-                                       ag_init = TRUE;
-                                       break;
-
-                               case HNBU_CC:
-                                       ASSERT(sromrev == 1);
-                                       vp += sprintf(vp, "cc=%d", cis[i + 1]);
-                                       vp++;
-                                       break;
-
-                               case HNBU_PAPARMS:
-                                       if (tlen == 2) {
-                                               ASSERT(sromrev == 1);
-                                               vp += sprintf(vp, "pa0maxpwr=%d", cis[i + 1]);
-                                               vp++;
-                                       } else if (tlen >= 9) {
-                                               if (tlen == 10) {
-                                                       ASSERT(sromrev == 2);
-                                                       vp += sprintf(vp, "opo=%d", cis[i + 9]);
-                                                       vp++;
-                                               } else
-                                                       ASSERT(tlen == 9);
-
-                                               for (j = 0; j < 3; j++) {
-                                                       vp += sprintf(vp, "pa0b%d=%d", j,
-                                                                     (cis[i + (j * 2) + 2] << 8) +
-                                                                     cis[i + (j * 2) + 1]);
-                                                       vp++;
-                                               }
-                                               vp += sprintf(vp, "pa0itssit=%d", cis[i + 7]);
-                                               vp++;
-                                               vp += sprintf(vp, "pa0maxpwr=%d", cis[i + 8]);
-                                               vp++;
-                                       } else
-                                               ASSERT(tlen >= 9);
-                                       break;
-
-                               case HNBU_OEM:
-                                       ASSERT(sromrev == 1);
-                                       vp += sprintf(vp, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
-                                                     cis[i + 1], cis[i + 2],
-                                                     cis[i + 3], cis[i + 4],
-                                                     cis[i + 5], cis[i + 6],
-                                                     cis[i + 7], cis[i + 8]);
-                                       vp++;
-                                       break;
-
-                               case HNBU_BOARDFLAGS:
-                                       w32 = (cis[i + 2] << 8) + cis[i + 1];
-                                       if (tlen == 5)
-                                               w32 |= (cis[i + 4] << 24) + (cis[i + 3] << 16);
-                                       vp += sprintf(vp, "boardflags=0x%x", w32);
-                                       vp++;
-                                       break;
-
-                               case HNBU_LEDS:
-                                       if (cis[i + 1] != 0xff) {
-                                               vp += sprintf(vp, "ledbh0=%d", cis[i + 1]);
-                                               vp++;
-                                       }
-                                       if (cis[i + 2] != 0xff) {
-                                               vp += sprintf(vp, "ledbh1=%d", cis[i + 2]);
-                                               vp++;
-                                       }
-                                       if (cis[i + 3] != 0xff) {
-                                               vp += sprintf(vp, "ledbh2=%d", cis[i + 3]);
-                                               vp++;
-                                       }
-                                       if (cis[i + 4] != 0xff) {
-                                               vp += sprintf(vp, "ledbh3=%d", cis[i + 4]);
-                                               vp++;
-                                       }
-                                       break;
-
-                               case HNBU_CCODE:
-                               {
-                                       char str[3];
-                                       ASSERT(sromrev > 1);
-                                       str[0] = cis[i + 1];
-                                       str[1] = cis[i + 2];
-                                       str[2] = 0;
-                                       vp += sprintf(vp, "ccode=%s", str);
-                                       vp++;
-                                       vp += sprintf(vp, "cctl=0x%x", cis[i + 3]);
-                                       vp++;
-                                       break;
-                               }
-
-                               case HNBU_CCKPO:
-                                       ASSERT(sromrev > 2);
-                                       vp += sprintf(vp, "cckpo=0x%x",
-                                                     (cis[i + 2] << 8) | cis[i + 1]);
-                                       vp++;
-                                       break;
-
-                               case HNBU_OFDMPO:
-                                       ASSERT(sromrev > 2);
-                                       vp += sprintf(vp, "ofdmpo=0x%x",
-                                                     (cis[i + 4] << 24) |
-                                                     (cis[i + 3] << 16) |
-                                                     (cis[i + 2] << 8) |
-                                                     cis[i + 1]);
-                                       vp++;
-                                       break;
-                               }
-                               break;
+  uint8 addr_l, addr_h, data_l, data_h;
+  int rc;
 
-                       }
-                       i += tlen;
-               } while (tup != 0xff);
+  addr_l = (uint8) ((addr * 2) & 0xff);
+  addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+
+  /* set address */
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRH, addr_h);
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_ADDRL, addr_l);
+
+  data_l = (uint8) (data & 0xff);
+  data_h = (uint8) ((data >> 8) & 0xff);
+
+  /* write data */
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_DATAH, data_h);
+  SB_PCMCIA_WRITE (osh, pcmregs, SROM_DATAL, data_l);
+
+  /* do write */
+  rc = srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WRITE);
+  OSL_DELAY (20000);
+  return rc;
+}
+
+/*
+ * Read the srom for the pcmcia-srom over sb case.
+ * Return 0 on success, nonzero on error.
+ */
+static int
+get_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+                   uint boff, uint16 * srom, uint bsz)
+{
+  uint i, nw, woff, wsz;
+  int err = 0;
+
+  /* read must be at word boundary */
+  ASSERT ((boff & 1) == 0 && (bsz & 1) == 0);
+
+  /* read sprom size and validate the parms */
+  if ((nw = srom_size (sbh, osh)) == 0)
+    {
+      BS_ERROR (("get_sb_pcmcia_srom: sprom size unknown\n"));
+      err = -1;
+      goto out;
+    }
+  if (boff + bsz > 2 * nw)
+    {
+      BS_ERROR (("get_sb_pcmcia_srom: sprom size exceeded\n"));
+      err = -2;
+      goto out;
+    }
+
+  /* read in sprom contents */
+  for (woff = boff / 2, wsz = bsz / 2, i = 0;
+       woff < nw && i < wsz; woff++, i++)
+    {
+      if (srom_read_sb_pcmcia (osh, pcmregs, (uint16) woff, &srom[i]))
+       {
+         BS_ERROR (("get_sb_pcmcia_srom: sprom read failed\n"));
+         err = -3;
+         goto out;
        }
+    }
 
-       /* Set the srom version */
-       vp += sprintf(vp, "sromrev=%d", sromrev);
-       vp++;
+out:
+  return err;
+}
 
-       /* if there is no antenna gain field, set default */
-       if (ag_init == FALSE) {
-               ASSERT(sromrev == 1);
-               vp += sprintf(vp, "ag0=%d", 0xff);
-               vp++;
+/*
+ * Write the srom for the pcmcia-srom over sb case.
+ * Return 0 on success, nonzero on error.
+ */
+static int
+set_sb_pcmcia_srom (sb_t * sbh, osl_t * osh, uint8 * pcmregs,
+                   uint boff, uint16 * srom, uint bsz)
+{
+  uint i, nw, woff, wsz;
+  uint16 word;
+  uint8 crc;
+  int err = 0;
+
+  /* write must be at word boundary */
+  ASSERT ((boff & 1) == 0 && (bsz & 1) == 0);
+
+  /* read sprom size and validate the parms */
+  if ((nw = srom_size (sbh, osh)) == 0)
+    {
+      BS_ERROR (("set_sb_pcmcia_srom: sprom size unknown\n"));
+      err = -1;
+      goto out;
+    }
+  if (boff + bsz > 2 * nw)
+    {
+      BS_ERROR (("set_sb_pcmcia_srom: sprom size exceeded\n"));
+      err = -2;
+      goto out;
+    }
+
+  /* enable write */
+  if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WEN))
+    {
+      BS_ERROR (("set_sb_pcmcia_srom: sprom wen failed\n"));
+      err = -3;
+      goto out;
+    }
+
+  /* write buffer to sprom */
+  for (woff = boff / 2, wsz = bsz / 2, i = 0;
+       woff < nw && i < wsz; woff++, i++)
+    {
+      if (srom_write_sb_pcmcia (osh, pcmregs, (uint16) woff, srom[i]))
+       {
+         BS_ERROR (("set_sb_pcmcia_srom: sprom write failed\n"));
+         err = -4;
+         goto out;
+       }
+    }
+
+  /* fix crc */
+  crc = 0xff;
+  for (woff = 0; woff < nw; woff++)
+    {
+      if (srom_read_sb_pcmcia (osh, pcmregs, (uint16) woff, &word))
+       {
+         BS_ERROR (("set_sb_pcmcia_srom: sprom fix crc read failed\n"));
+         err = -5;
+         goto out;
        }
+      word = htol16 (word);
+      crc = hndcrc8 ((uint8 *) & word, woff != nw - 1 ? 2 : 1, crc);
+    }
+  word = (~crc << 8) + (ltoh16 (word) & 0xff);
+  if (srom_write_sb_pcmcia (osh, pcmregs, (uint16) (woff - 1), word))
+    {
+      BS_ERROR (("set_sb_pcmcia_srom: sprom fix crc write failed\n"));
+      err = -6;
+      goto out;
+    }
+
+  /* disable write */
+  if (srom_cmd_sb_pcmcia (osh, pcmregs, SROM_WDS))
+    {
+      BS_ERROR (("set_sb_pcmcia_srom: sprom wds failed\n"));
+      err = -7;
+      goto out;
+    }
+
+out:
+  return err;
+}
+#endif /* def BCMUSBDEV */
 
-       /* final nullbyte terminator */
-       *vp++ = '\0';
-       varsize = (uint)(vp - base);
-
-       ASSERT((vp - base) < VARS_MAX);
-
-       if (varsize == VARS_MAX) {
-               *vars = base;
-       } else {
-               vp = MALLOC(osh, varsize);
-               ASSERT(vp);
-               if (vp)
-                       bcopy(base, vp, varsize);
-               MFREE(osh, base, VARS_MAX);
-               *vars = vp;
-               if (!vp) {
-                       *count = 0;
-                       return -2;
+int
+srom_parsecis (osl_t * osh, uint8 * pcis[], uint ciscnt, char **vars,
+              uint * count)
+{
+  char eabuf[32];
+  char *base;
+  varbuf_t b;
+  uint8 *cis, tup, tlen, sromrev = 1;
+  int i, j;
+  uint varsize;
+  bool ag_init = FALSE;
+  uint32 w32;
+  uint funcid;
+  uint cisnum;
+  int32 boardnum = -1;
+
+  ASSERT (vars);
+  ASSERT (count);
+
+  base = MALLOC (osh, MAXSZ_NVRAM_VARS);
+  ASSERT (base);
+  if (!base)
+    return -2;
+
+  varbuf_init (&b, base, MAXSZ_NVRAM_VARS);
+
+  eabuf[0] = '\0';
+  for (cisnum = 0; cisnum < ciscnt; cisnum++)
+    {
+      cis = *pcis++;
+      i = 0;
+      funcid = 0;
+      do
+       {
+         tup = cis[i++];
+         tlen = cis[i++];
+         if ((i + tlen) >= CIS_SIZE)
+           break;
+
+         switch (tup)
+           {
+           case CISTPL_VERS_1:
+             /* assume the strings are good if the version field checks out */
+             if (((cis[i + 1] << 8) + cis[i]) >= 0x0008)
+               {
+                 varbuf_append (&b, "manf=%s", &cis[i + 2]);
+                 varbuf_append (&b, "productname=%s",
+                                &cis[i + 3 + strlen ((char *) &cis[i + 2])]);
+                 break;
                }
+
+           case CISTPL_MANFID:
+             varbuf_append (&b, "manfid=0x%x", (cis[i + 1] << 8) + cis[i]);
+             varbuf_append (&b, "prodid=0x%x",
+                            (cis[i + 3] << 8) + cis[i + 2]);
+             break;
+
+           case CISTPL_FUNCID:
+             funcid = cis[i];
+             break;
+
+           case CISTPL_FUNCE:
+             switch (funcid)
+               {
+               default:
+                 /* set macaddr if HNBU_MACADDR not seen yet */
+                 if (eabuf[0] == '\0' && cis[i] == LAN_NID)
+                   {
+                     ASSERT (cis[i + 1] == ETHER_ADDR_LEN);
+                     bcm_ether_ntoa ((struct ether_addr *) &cis[i + 2],
+                                     eabuf);
+                   }
+                 /* set boardnum if HNBU_BOARDNUM not seen yet */
+                 if (boardnum == -1)
+                   boardnum = (cis[i + 6] << 8) + cis[i + 7];
+                 break;
+               }
+             break;
+
+           case CISTPL_CFTABLE:
+             varbuf_append (&b, "regwindowsz=%d",
+                            (cis[i + 7] << 8) | cis[i + 6]);
+             break;
+
+           case CISTPL_BRCM_HNBU:
+             switch (cis[i])
+               {
+               case HNBU_SROMREV:
+                 sromrev = cis[i + 1];
+                 varbuf_append (&b, "sromrev=%d", sromrev);
+                 break;
+
+               case HNBU_CHIPID:
+                 varbuf_append (&b, "vendid=0x%x", (cis[i + 2] << 8) +
+                                cis[i + 1]);
+                 varbuf_append (&b, "devid=0x%x", (cis[i + 4] << 8) +
+                                cis[i + 3]);
+                 if (tlen >= 7)
+                   {
+                     varbuf_append (&b, "chiprev=%d",
+                                    (cis[i + 6] << 8) + cis[i + 5]);
+                   }
+                 if (tlen >= 9)
+                   {
+                     varbuf_append (&b, "subvendid=0x%x",
+                                    (cis[i + 8] << 8) + cis[i + 7]);
+                   }
+                 if (tlen >= 11)
+                   {
+                     varbuf_append (&b, "subdevid=0x%x",
+                                    (cis[i + 10] << 8) + cis[i + 9]);
+                     /* subdevid doubles for boardtype */
+                     varbuf_append (&b, "boardtype=0x%x",
+                                    (cis[i + 10] << 8) + cis[i + 9]);
+                   }
+                 break;
+
+               case HNBU_BOARDREV:
+                 varbuf_append (&b, "boardrev=0x%x", cis[i + 1]);
+                 break;
+
+               case HNBU_AA:
+                 varbuf_append (&b, "aa2g=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_AG:
+                 varbuf_append (&b, "ag0=%d", cis[i + 1]);
+                 ag_init = TRUE;
+                 break;
+
+               case HNBU_ANT5G:
+                 varbuf_append (&b, "aa5g=%d", cis[i + 1]);
+                 varbuf_append (&b, "ag1=%d", cis[i + 2]);
+                 break;
+
+               case HNBU_CC:
+                 ASSERT (sromrev == 1);
+                 varbuf_append (&b, "cc=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_PAPARMS:
+                 if (tlen == 2)
+                   {
+                     ASSERT (sromrev == 1);
+                     varbuf_append (&b, "pa0maxpwr=%d", cis[i + 1]);
+                   }
+                 else if (tlen >= 9)
+                   {
+                     if (tlen == 10)
+                       {
+                         ASSERT (sromrev >= 2);
+                         varbuf_append (&b, "opo=%d", cis[i + 9]);
+                       }
+                     else
+                       ASSERT (tlen == 9);
+
+                     for (j = 0; j < 3; j++)
+                       {
+                         varbuf_append (&b, "pa0b%d=%d", j,
+                                        (cis[i + (j * 2) + 2] << 8) +
+                                        cis[i + (j * 2) + 1]);
+                       }
+                     varbuf_append (&b, "pa0itssit=%d", cis[i + 7]);
+                     varbuf_append (&b, "pa0maxpwr=%d", cis[i + 8]);
+                   }
+                 else
+                   ASSERT (tlen >= 9);
+                 break;
+
+               case HNBU_PAPARMS5G:
+                 ASSERT ((sromrev == 2) || (sromrev == 3));
+                 for (j = 0; j < 3; j++)
+                   {
+                     varbuf_append (&b, "pa1b%d=%d", j,
+                                    (cis[i + (j * 2) + 2] << 8) +
+                                    cis[i + (j * 2) + 1]);
+                   }
+                 for (j = 3; j < 6; j++)
+                   {
+                     varbuf_append (&b, "pa1lob%d=%d", j - 3,
+                                    (cis[i + (j * 2) + 2] << 8) +
+                                    cis[i + (j * 2) + 1]);
+                   }
+                 for (j = 6; j < 9; j++)
+                   {
+                     varbuf_append (&b, "pa1hib%d=%d", j - 6,
+                                    (cis[i + (j * 2) + 2] << 8) +
+                                    cis[i + (j * 2) + 1]);
+                   }
+                 varbuf_append (&b, "pa1itssit=%d", cis[i + 19]);
+                 varbuf_append (&b, "pa1maxpwr=%d", cis[i + 20]);
+                 varbuf_append (&b, "pa1lomaxpwr=%d", cis[i + 21]);
+                 varbuf_append (&b, "pa1himaxpwr=%d", cis[i + 22]);
+                 break;
+
+               case HNBU_OEM:
+                 ASSERT (sromrev == 1);
+                 varbuf_append (&b, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
+                                cis[i + 1], cis[i + 2],
+                                cis[i + 3], cis[i + 4],
+                                cis[i + 5], cis[i + 6],
+                                cis[i + 7], cis[i + 8]);
+                 break;
+
+               case HNBU_BOARDFLAGS:
+                 w32 = (cis[i + 2] << 8) + cis[i + 1];
+                 if (tlen == 5)
+                   w32 |= (cis[i + 4] << 24) + (cis[i + 3] << 16);
+                 varbuf_append (&b, "boardflags=0x%x", w32);
+                 break;
+
+               case HNBU_LEDS:
+                 if (cis[i + 1] != 0xff)
+                   {
+                     varbuf_append (&b, "ledbh0=%d", cis[i + 1]);
+                   }
+                 if (cis[i + 2] != 0xff)
+                   {
+                     varbuf_append (&b, "ledbh1=%d", cis[i + 2]);
+                   }
+                 if (cis[i + 3] != 0xff)
+                   {
+                     varbuf_append (&b, "ledbh2=%d", cis[i + 3]);
+                   }
+                 if (cis[i + 4] != 0xff)
+                   {
+                     varbuf_append (&b, "ledbh3=%d", cis[i + 4]);
+                   }
+                 break;
+
+               case HNBU_CCODE:
+                 ASSERT (sromrev > 1);
+                 if ((cis[i + 1] == 0) || (cis[i + 2] == 0))
+                   varbuf_append (&b, "ccode=");
+                 else
+                   varbuf_append (&b, "ccode=%c%c", cis[i + 1], cis[i + 2]);
+                 varbuf_append (&b, "cctl=0x%x", cis[i + 3]);
+                 break;
+
+               case HNBU_CCKPO:
+                 ASSERT (sromrev > 2);
+                 varbuf_append (&b, "cckpo=0x%x",
+                                (cis[i + 2] << 8) | cis[i + 1]);
+                 break;
+
+               case HNBU_OFDMPO:
+                 ASSERT (sromrev > 2);
+                 varbuf_append (&b, "ofdmpo=0x%x",
+                                (cis[i + 4] << 24) |
+                                (cis[i + 3] << 16) |
+                                (cis[i + 2] << 8) | cis[i + 1]);
+                 break;
+
+               case HNBU_RDLID:
+                 varbuf_append (&b, "rdlid=0x%x",
+                                (cis[i + 2] << 8) | cis[i + 1]);
+                 break;
+
+               case HNBU_RDLRNDIS:
+                 varbuf_append (&b, "rdlrndis=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_RDLRWU:
+                 varbuf_append (&b, "rdlrwu=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_RDLSN:
+                 varbuf_append (&b, "rdlsn=%d",
+                                (cis[i + 2] << 8) | cis[i + 1]);
+                 break;
+
+               case HNBU_XTALFREQ:
+                 varbuf_append (&b, "xtalfreq=%d",
+                                (cis[i + 4] << 24) |
+                                (cis[i + 3] << 16) |
+                                (cis[i + 2] << 8) | cis[i + 1]);
+                 break;
+
+               case HNBU_RSSISMBXA2G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "rssismf2g=%d", cis[i + 1] & 0xf);
+                 varbuf_append (&b, "rssismc2g=%d", (cis[i + 1] >> 4) & 0xf);
+                 varbuf_append (&b, "rssisav2g=%d", cis[i + 2] & 0x7);
+                 varbuf_append (&b, "bxa2g=%d", (cis[i + 2] >> 3) & 0x3);
+                 break;
+
+               case HNBU_RSSISMBXA5G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "rssismf5g=%d", cis[i + 1] & 0xf);
+                 varbuf_append (&b, "rssismc5g=%d", (cis[i + 1] >> 4) & 0xf);
+                 varbuf_append (&b, "rssisav5g=%d", cis[i + 2] & 0x7);
+                 varbuf_append (&b, "bxa5g=%d", (cis[i + 2] >> 3) & 0x3);
+                 break;
+
+               case HNBU_TRI2G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "tri2g=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_TRI5G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "tri5gl=%d", cis[i + 1]);
+                 varbuf_append (&b, "tri5g=%d", cis[i + 2]);
+                 varbuf_append (&b, "tri5gh=%d", cis[i + 3]);
+                 break;
+
+               case HNBU_RXPO2G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "rxpo2g=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_RXPO5G:
+                 ASSERT (sromrev == 3);
+                 varbuf_append (&b, "rxpo5g=%d", cis[i + 1]);
+                 break;
+
+               case HNBU_BOARDNUM:
+                 boardnum = (cis[i + 2] << 8) + cis[i + 1];
+                 break;
+
+               case HNBU_MACADDR:
+                 bcm_ether_ntoa ((struct ether_addr *) &cis[i + 1], eabuf);
+                 break;
+
+               case HNBU_BOARDTYPE:
+                 varbuf_append (&b, "boardtype=0x%x",
+                                (cis[i + 2] << 8) + cis[i + 1]);
+                 break;
+
+#if defined(BCMCCISSR3)
+               case HNBU_SROM3SWRGN:
+                 {
+                   uint16 srom[35];
+                   uint8 srev = cis[i + 1 + 70];
+                   ASSERT (srev == 3);
+                   /* make tuple value 16-bit aligned and parse it */
+                   bcopy (&cis[i + 1], srom, sizeof (srom));
+                   _initvars_srom_pci (srev, srom, SROM3_SWRGN_OFF, &b);
+                   /* create extra variables */
+                   varbuf_append (&b, "vendid=0x%x",
+                                  (cis[i + 1 + 73] << 8) + cis[i + 1 + 72]);
+                   varbuf_append (&b, "devid=0x%x",
+                                  (cis[i + 1 + 75] << 8) + cis[i + 1 + 74]);
+                   varbuf_append (&b, "xtalfreq=%d",
+                                  (cis[i + 1 + 77] << 8) + cis[i + 1 + 76]);
+                   /* 2.4G antenna gain is included in SROM */
+                   ag_init = TRUE;
+                   /* Ethernet MAC address is included in SROM */
+                   eabuf[0] = 0;
+                   boardnum = -1;
+                   break;
+                 }
+#endif
+               }
+             break;
+           }
+         i += tlen;
        }
-       *count = varsize;
+      while (tup != CISTPL_END);
+    }
+
+  if (boardnum != -1)
+    {
+      varbuf_append (&b, "boardnum=%d", boardnum);
+    }
+
+  if (eabuf[0])
+    {
+      varbuf_append (&b, "macaddr=%s", eabuf);
+    }
+
+  /* if there is no antenna gain field, set default */
+  if (ag_init == FALSE)
+    {
+      varbuf_append (&b, "ag0=%d", 0xff);
+    }
+
+  /* final nullbyte terminator */
+  ASSERT (b.size >= 1);
+  *b.buf++ = '\0';
+  varsize = (uint) (b.buf - base);
+  ASSERT (varsize < MAXSZ_NVRAM_VARS);
+  if (varsize < MAXSZ_NVRAM_VARS)
+    {
+      char *new_buf;
+      new_buf = (char *) MALLOC (osh, varsize);
+      ASSERT (new_buf);
+      if (new_buf)
+       {
+         bcopy (base, new_buf, varsize);
+         MFREE (osh, base, MAXSZ_NVRAM_VARS);
+         base = new_buf;
+       }
+    }
+
+  *vars = base;
+  *count = varsize;
 
-       return (0);
+  return (0);
 }
 
 
 /* set PCMCIA sprom command register */
 static int
-sprom_cmd_pcmcia(osl_t *osh, uint8 cmd)
+sprom_cmd_pcmcia (osl_t * osh, uint8 cmd)
 {
-       uint8 status = 0;
-       uint wait_cnt = 1000;
+  uint8 status = 0;
+  uint wait_cnt = 1000;
 
-       /* write sprom command register */
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_CS, &cmd, 1);
+  /* write sprom command register */
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_CS, &cmd, 1);
 
-       /* wait status */
-       while (wait_cnt--) {
-               OSL_PCMCIA_READ_ATTR(osh, SROM_CS, &status, 1);
-               if (status & SROM_DONE)
-                       return 0;
-       }
+  /* wait status */
+  while (wait_cnt--)
+    {
+      OSL_PCMCIA_READ_ATTR (osh, SROM_CS, &status, 1);
+      if (status & SROM_DONE)
+       return 0;
+    }
 
-       return 1;
+  return 1;
 }
 
 /* read a word from the PCMCIA srom */
 static int
-sprom_read_pcmcia(osl_t *osh, uint16 addr, uint16 *data)
+sprom_read_pcmcia (osl_t * osh, uint16 addr, uint16 * data)
 {
-       uint8 addr_l, addr_h, data_l, data_h;
+  uint8 addr_l, addr_h, data_l, data_h;
 
-       addr_l = (uint8)((addr * 2) & 0xff);
-       addr_h = (uint8)(((addr * 2) >> 8) & 0xff);
+  addr_l = (uint8) ((addr * 2) & 0xff);
+  addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
 
-       /* set address */
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRH, &addr_h, 1);
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRL, &addr_l, 1);
+  /* set address */
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRH, &addr_h, 1);
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRL, &addr_l, 1);
 
-       /* do read */
-       if (sprom_cmd_pcmcia(osh, SROM_READ))
-               return 1;
+  /* do read */
+  if (sprom_cmd_pcmcia (osh, SROM_READ))
+    return 1;
 
-       /* read data */
-       data_h = data_l = 0;
-       OSL_PCMCIA_READ_ATTR(osh, SROM_DATAH, &data_h, 1);
-       OSL_PCMCIA_READ_ATTR(osh, SROM_DATAL, &data_l, 1);
+  /* read data */
+  data_h = data_l = 0;
+  OSL_PCMCIA_READ_ATTR (osh, SROM_DATAH, &data_h, 1);
+  OSL_PCMCIA_READ_ATTR (osh, SROM_DATAL, &data_l, 1);
 
-       *data = (data_h << 8) | data_l;
-       return 0;
+  *data = (data_h << 8) | data_l;
+  return 0;
 }
 
 /* write a word to the PCMCIA srom */
 static int
-sprom_write_pcmcia(osl_t *osh, uint16 addr, uint16 data)
+sprom_write_pcmcia (osl_t * osh, uint16 addr, uint16 data)
 {
-       uint8 addr_l, addr_h, data_l, data_h;
+  uint8 addr_l, addr_h, data_l, data_h;
 
-       addr_l = (uint8)((addr * 2) & 0xff);
-       addr_h = (uint8)(((addr * 2) >> 8) & 0xff);
-       data_l = (uint8)(data & 0xff);
-       data_h = (uint8)((data >> 8) & 0xff);
+  addr_l = (uint8) ((addr * 2) & 0xff);
+  addr_h = (uint8) (((addr * 2) >> 8) & 0xff);
+  data_l = (uint8) (data & 0xff);
+  data_h = (uint8) ((data >> 8) & 0xff);
 
-       /* set address */
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRH, &addr_h, 1);
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_ADDRL, &addr_l, 1);
+  /* set address */
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRH, &addr_h, 1);
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_ADDRL, &addr_l, 1);
 
-       /* write data */
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_DATAH, &data_h, 1);
-       OSL_PCMCIA_WRITE_ATTR(osh, SROM_DATAL, &data_l, 1);
+  /* write data */
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_DATAH, &data_h, 1);
+  OSL_PCMCIA_WRITE_ATTR (osh, SROM_DATAL, &data_l, 1);
 
-       /* do write */
-       return sprom_cmd_pcmcia(osh, SROM_WRITE);
+  /* do write */
+  return sprom_cmd_pcmcia (osh, SROM_WRITE);
 }
 
 /*
@@ -511,25 +1050,43 @@ sprom_write_pcmcia(osl_t *osh, uint16 addr, uint16 data)
  * Return 0 on success, nonzero on error.
  */
 static int
-sprom_read_pci(osl_t *osh, uint16 *sprom, uint wordoff, uint16 *buf, uint nwords, bool check_crc)
+sprom_read_pci (osl_t * osh, uint16 * sprom, uint wordoff, uint16 * buf,
+               uint nwords, bool check_crc)
 {
-       int err = 0;
-       uint i;
-
-       /* read the sprom */
-       for (i = 0; i < nwords; i++)
-               buf[i] = R_REG(osh, &sprom[wordoff + i]);
-
-       if (check_crc) {
-               /* fixup the endianness so crc8 will pass */
-               htol16_buf(buf, nwords * 2);
-               if (hndcrc8((uint8*)buf, nwords * 2, CRC8_INIT_VALUE) != CRC8_GOOD_VALUE)
-                       err = 1;
-               /* now correct the endianness of the byte array */
-               ltoh16_buf(buf, nwords * 2);
+  int err = 0;
+  uint i;
+
+  /* read the sprom */
+  for (i = 0; i < nwords; i++)
+    {
+#ifdef BCMQT
+      buf[i] = R_REG (osh, &sprom[wordoff + i]);
+#endif
+      buf[i] = R_REG (osh, &sprom[wordoff + i]);
+    }
+
+  if (check_crc)
+    {
+      if (buf[0] == 0xffff)
+       {
+         /* The hardware thinks that an srom that starts with 0xffff
+          * is blank, regardless of the rest of the content, so declare
+          * it bad.
+          */
+         BS_ERROR (("%s: buf[0] = 0x%x, returning bad-crc\n", __FUNCTION__,
+                    buf[0]));
+         return 1;
        }
 
-       return err;
+      /* fixup the endianness so crc8 will pass */
+      htol16_buf (buf, nwords * 2);
+      if (hndcrc8 ((uint8 *) buf, nwords * 2, 0xff) != 0x9f)
+       err = 1;
+      /* now correct the endianness of the byte array */
+      ltoh16_buf (buf, nwords * 2);
+    }
+
+  return err;
 }
 
 /*
@@ -537,26 +1094,29 @@ sprom_read_pci(osl_t *osh, uint16 *sprom, uint wordoff, uint16 *buf, uint nwords
 * Return 0 on success, nonzero on error.
 */
 static int
-initvars_table(osl_t *osh, char *start, char *end, char **vars, uint *count)
+BCMINITFN (initvars_table) (osl_t * osh, char *start, char *end, char **vars,
+                           uint * count)
 {
-       int c = (int)(end - start);
-
-       /* do it only when there is more than just the null string */
-       if (c > 1) {
-               char *vp = MALLOC(osh, c);
-               ASSERT(vp);
-               if (!vp)
-                       return BCME_NOMEM;
-               bcopy(start, vp, c);
-               *vars = vp;
-               *count = c;
-       }
-       else {
-               *vars = NULL;
-               *count = 0;
-       }
-
-       return 0;
+  int c = (int) (end - start);
+
+  /* do it only when there is more than just the null string */
+  if (c > 1)
+    {
+      char *vp = MALLOC (osh, c);
+      ASSERT (vp);
+      if (!vp)
+       return BCME_NOMEM;
+      bcopy (start, vp, c);
+      *vars = vp;
+      *count = c;
+    }
+  else
+    {
+      *vars = NULL;
+      *count = 0;
+    }
+
+  return 0;
 }
 
 /*
@@ -565,617 +1125,763 @@ initvars_table(osl_t *osh, char *start, char *end, char **vars, uint *count)
  * Return 0 on success, nonzero on error.
  */
 static int
-initvars_flash(osl_t *osh, char **base, uint len, char *devpath)
+initvars_flash (sb_t * sbh, osl_t * osh, char **base, uint len)
 {
-       char *vp = *base;
-       char *flash;
-       int err;
-       char *s;
-       uint l, dl, copy_len;
-
-       /* allocate memory and read in flash */
-       if (!(flash = MALLOC(osh, NVRAM_SPACE)))
-               return BCME_NOMEM;
-       if ((err = nvram_getall(flash, NVRAM_SPACE)))
-               goto exit;
-
-       /* grab vars with the <devpath> prefix in name */
-       dl = strlen(devpath);
-       for (s = flash; s && *s; s += l + 1) {
-               l = strlen(s);
-
-               /* skip non-matching variable */
-               if (strncmp(s, devpath, dl))
-                       continue;
-
-               /* is there enough room to copy? */
-               copy_len = l - dl + 1;
-               if (len < copy_len) {
-                       err = BCME_BUFTOOSHORT;
-                       goto exit;
-               }
-
-               /* no prefix, just the name=value */
-               strcpy(vp, &s[dl]);
-               vp += copy_len;
-               len -= copy_len;
+  char *vp = *base;
+  char *flash;
+  int err;
+  char *s;
+  uint l, dl, copy_len;
+  char devpath[SB_DEVPATH_BUFSZ];
+
+  /* allocate memory and read in flash */
+  if (!(flash = MALLOC (osh, NVRAM_SPACE)))
+    return BCME_NOMEM;
+  if ((err = nvram_getall (flash, NVRAM_SPACE)))
+    goto exit;
+
+  sb_devpath (sbh, devpath, sizeof (devpath));
+
+  /* grab vars with the <devpath> prefix in name */
+  dl = strlen (devpath);
+  for (s = flash; s && *s; s += l + 1)
+    {
+      l = strlen (s);
+
+      /* skip non-matching variable */
+      if (strncmp (s, devpath, dl))
+       continue;
+
+      /* is there enough room to copy? */
+      copy_len = l - dl + 1;
+      if (len < copy_len)
+       {
+         err = BCME_BUFTOOSHORT;
+         goto exit;
        }
 
-       /* add null string as terminator */
-       if (len < 1) {
-               err = BCME_BUFTOOSHORT;
-               goto exit;
-       }
-       *vp++ = '\0';
+      /* no prefix, just the name=value */
+      strncpy (vp, &s[dl], copy_len);
+      vp += copy_len;
+      len -= copy_len;
+    }
+
+  /* add null string as terminator */
+  if (len < 1)
+    {
+      err = BCME_BUFTOOSHORT;
+      goto exit;
+    }
+  *vp++ = '\0';
 
-       *base = vp;
+  *base = vp;
 
-exit:  MFREE(osh, flash, NVRAM_SPACE);
-       return err;
+exit:MFREE (osh, flash, NVRAM_SPACE);
+  return err;
 }
 
+#if !defined(BCMUSBDEV) && !defined(BCMSDIODEV)
 /*
  * Initialize nonvolatile variable table from flash.
  * Return 0 on success, nonzero on error.
  */
 static int
-initvars_flash_sb(void *sbh, char **vars, uint *count)
+initvars_flash_sb (sb_t * sbh, char **vars, uint * count)
 {
-       osl_t *osh = sb_osh(sbh);
-       char devpath[SB_DEVPATH_BUFSZ];
-       char *vp, *base;
-       int err;
+  osl_t *osh = sb_osh (sbh);
+  char *vp, *base;
+  int err;
 
-       ASSERT(vars);
-       ASSERT(count);
+  ASSERT (vars);
+  ASSERT (count);
 
-       if ((err = sb_devpath(sbh, devpath, sizeof(devpath))))
-               return err;
+  base = vp = MALLOC (osh, MAXSZ_NVRAM_VARS);
+  ASSERT (vp);
+  if (!vp)
+    return BCME_NOMEM;
 
-       base = vp = MALLOC(osh, VARS_MAX);
-       ASSERT(vp);
-       if (!vp)
-               return BCME_NOMEM;
+  if ((err = initvars_flash (sbh, osh, &vp, MAXSZ_NVRAM_VARS)) == 0)
+    err = initvars_table (osh, base, vp, vars, count);
 
-       if ((err = initvars_flash(osh, &vp, VARS_MAX, devpath)))
-               goto err;
+  MFREE (osh, base, MAXSZ_NVRAM_VARS);
 
-       err = initvars_table(osh, base, vp, vars, count);
-
-err:   MFREE(osh, base, VARS_MAX);
-       return err;
+  return err;
 }
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
 
 #ifdef WLTEST
 char mfgsromvars[256];
 char *defaultsromvars = "il0macaddr=00:11:22:33:44:51\0"
-               "et0macaddr=00:11:22:33:44:52\0"
-               "et1macaddr=00:11:22:33:44:53\0"
-               "boardtype=0xffff\0"
-               "boardrev=0x10\0"
-               "boardflags=8\0"
-               "sromrev=2\0"
-               "aa2g=3";
-#define        MFGSROM_DEFVARSLEN      147 /* default srom len */
+  "et0macaddr=00:11:22:33:44:52\0"
+  "et1macaddr=00:11:22:33:44:53\0"
+  "boardtype=0xffff\0"
+  "boardrev=0x10\0" "boardflags=8\0" "sromrev=2\0" "aa2g=3\0" "\0";
+#define        MFGSROM_DEFVARSLEN      149     /* default srom len */
 #endif /* WL_TEST */
 
 /*
  * Initialize nonvolatile variable table from sprom.
  * Return 0 on success, nonzero on error.
  */
-static int
-initvars_srom_pci(void *sbh, void *curmap, char **vars, uint *count)
-{
-       uint16 w, *b;
-       uint8 sromrev = 0;
-       struct ether_addr ea;
-       char eabuf[32];
-       uint32 w32;
-       int woff, i;
-       char *vp, *base;
-       osl_t *osh = sb_osh(sbh);
-       bool flash = FALSE;
-       char name[SB_DEVPATH_BUFSZ+16], *value;
-       char devpath[SB_DEVPATH_BUFSZ];
-       int err;
-
-       /*
-        * Apply CRC over SROM content regardless SROM is present or not,
-        * and use variable <devpath>sromrev's existance in flash to decide
-        * if we should return an error when CRC fails or read SROM variables
-        * from flash.
-        */
-       b = MALLOC(osh, SROM_MAX);
-       ASSERT(b);
-       if (!b)
-               return -2;
-
-       err = sprom_read_pci(osh, (void*)((int8*)curmap + PCI_BAR0_SPROM_OFFSET), 0, b,
-                            64, TRUE);
-       if (b[SROM4_SIGN] == SROM4_SIGNATURE) {
-               /* sromrev >= 4, read more */
-               err = sprom_read_pci(osh, (void*)((int8*)curmap + PCI_BAR0_SPROM_OFFSET), 0, b, SROM4_WORDS, TRUE);
-               sromrev = b[SROM4_WORDS - 1] & 0xff;
-       } else if (err == 0) {
-               /* srom is good and is rev < 4 */
-               /* top word of sprom contains version and crc8 */
-               sromrev = b[63] & 0xff;
-               /* bcm4401 sroms misprogrammed */
-               if (sromrev == 0x10)
-                       sromrev = 1;
-       }
-
-       if (err) {
-#ifdef WLTEST
-               BS_ERROR(("SROM Crc Error, so see if we could use a default\n"));
-               w32 = OSL_PCI_READ_CONFIG(osh, PCI_SPROM_CONTROL, sizeof(uint32));
-               if (w32 & SPROM_OTPIN_USE) {
-                       BS_ERROR(("srom crc failed with OTP, use default vars....\n"));
-                       vp = base =  mfgsromvars;
-                       if (sb_chip(sbh) == BCM4311_CHIP_ID) {
-                               BS_ERROR(("setting the devid to be 4311\n"));
-                               vp += sprintf(vp, "devid=0x4311");
-                               vp++;
-                       }
-                       bcopy(defaultsromvars,  vp, MFGSROM_DEFVARSLEN);
-                       vp += MFGSROM_DEFVARSLEN;
-                       goto varsdone;
-               } else {
-                       BS_ERROR(("srom crc failed with SPROM....\n"));
-#endif /* WLTEST */
-                       if ((err = sb_devpath(sbh, devpath, sizeof(devpath))))
-                               return err;
-                       sprintf(name, "%ssromrev", devpath);
-                       if (!(value = getvar(NULL, name)))
-                               return (-1);
-                       sromrev = (uint8)bcm_strtoul(value, NULL, 0);
-                       flash = TRUE;
-#ifdef WLTEST
-               }
-#endif /* WLTEST */
-       }
 
-       /* srom version check */
-       if (sromrev > 4)
-               return (-2);
-
-       ASSERT(vars);
-       ASSERT(count);
-
-       base = vp = MALLOC(osh, VARS_MAX);
-       ASSERT(vp);
-       if (!vp)
-               return -2;
-
-       /* read variables from flash */
-       if (flash) {
-               if ((err = initvars_flash(osh, &vp, VARS_MAX, devpath)))
-                       goto err;
-               goto varsdone;
-       }
-
-       vp += sprintf(vp, "sromrev=%d", sromrev);
-       vp++;
-
-       if (sromrev >= 4) {
-               uint path, pathbase;
-               const uint pathbases[MAX_PATH] = {SROM4_PATH0, SROM4_PATH1,
-                                                 SROM4_PATH2, SROM4_PATH3};
-
-               vp += sprintf(vp, "boardrev=%d", b[SROM4_BREV]);
-               vp++;
-
-               vp += sprintf(vp, "boardflags=%d", (b[SROM4_BFL1] << 16) | b[SROM4_BFL0]);
-               vp++;
-
-               vp += sprintf(vp, "boardflags2=%d", (b[SROM4_BFL3] << 16) | b[SROM4_BFL2]);
-               vp++;
-
-               /* The macaddr */
-               ea.octet[0] = (b[SROM4_MACHI] >> 8) & 0xff;
-               ea.octet[1] = b[SROM4_MACHI] & 0xff;
-               ea.octet[2] = (b[SROM4_MACMID] >> 8) & 0xff;
-               ea.octet[3] = b[SROM4_MACMID] & 0xff;
-               ea.octet[4] = (b[SROM4_MACLO] >> 8) & 0xff;
-               ea.octet[5] = b[SROM4_MACLO] & 0xff;
-               bcm_ether_ntoa(&ea, eabuf);
-               vp += sprintf(vp, "macaddr=%s", eabuf);
-               vp++;
-
-               w = b[SROM4_CCODE];
-               if (w == 0)
-                       vp += sprintf(vp, "ccode=");
-               else
-                       vp += sprintf(vp, "ccode=%c%c", (w >> 8), (w & 0xff));
-               vp++;
-               vp += sprintf(vp, "regrev=%d", b[SROM4_REGREV]);
-               vp++;
-
-               w = b[SROM4_LEDBH10];
-               if ((w != 0) && (w != 0xffff)) {
-                       /* ledbh0 */
-                       vp += sprintf(vp, "ledbh0=%d", (w & 0xff));
-                       vp++;
-
-                       /* ledbh1 */
-                       vp += sprintf(vp, "ledbh1=%d", (w >> 8) & 0xff);
-                       vp++;
-               }
-               w = b[SROM4_LEDBH32];
-               if ((w != 0) && (w != 0xffff)) {
-                       /* ledbh2 */
-                       vp += sprintf(vp, "ledbh2=%d", w & 0xff);
-                       vp++;
-
-                       /* ledbh3 */
-                       vp += sprintf(vp, "ledbh3=%d", (w >> 8) & 0xff);
-                       vp++;
-               }
-               /* LED Powersave duty cycle (oncount >> 24) (offcount >> 8) */
-               if (w != 0xffff) {
-                       w = b[SROM4_LEDDC];
-                       w32 = ((uint32)((unsigned char)(w >> 8) & 0xff) << 24) |  /* oncount */
-                               ((uint32)((unsigned char)(w & 0xff)) << 8); /* offcount */
-                       vp += sprintf(vp, "leddc=%d", w32);
-                       vp++;
-               }
-
-               w = b[SROM4_AA];
-               vp += sprintf(vp, "aa2g=%d", w & SROM4_AA2G_MASK);
-               vp++;
-               vp += sprintf(vp, "aa5g=%d", w >> SROM4_AA5G_SHIFT);
-               vp++;
-
-               w = b[SROM4_AG10];
-               vp += sprintf(vp, "ag0=%d", w & 0xff);
-               vp++;
-               vp += sprintf(vp, "ag1=%d", (w >> 8) & 0xff);
-               vp++;
-               w = b[SROM4_AG32];
-               vp += sprintf(vp, "ag2=%d", w & 0xff);
-               vp++;
-               vp += sprintf(vp, "ag3=%d", (w >> 8) & 0xff);
-               vp++;
-
-               /* Fixed power indices when power control is disabled */
-               for (i = 0; i < 2; i++) {
-                       w = b[SROM4_TXPID2G + i];
-                       vp += sprintf(vp, "txpid2ga%d=%d", 2 * i, w & 0xff);
-                       vp++;
-                       vp += sprintf(vp, "txpid2ga%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
-                       vp++;
-                       w = b[SROM4_TXPID5G + i];
-                       vp += sprintf(vp, "txpid5ga%d=%d", 2 * i, w & 0xff);
-                       vp++;
-                       vp += sprintf(vp, "txpid5ga%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
-                       vp++;
-                       w = b[SROM4_TXPID5GL + i];
-                       vp += sprintf(vp, "txpid5gla%d=%d", 2 * i, w & 0xff);
-                       vp++;
-                       vp += sprintf(vp, "txpid5gla%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
-                       vp++;
-                       w = b[SROM4_TXPID5GH + i];
-                       vp += sprintf(vp, "txpid5gha%d=%d", 2 * i, w & 0xff);
-                       vp++;
-                       vp += sprintf(vp, "txpid5gha%d=%d", (2 * i) + 1, (w >> 8) & 0xff);
-                       vp++;
-               }
+typedef struct
+{
+  const char *name;
+  uint32 revmask;
+  uint32 flags;
+  uint16 off;
+  uint16 mask;
+} sromvar_t;
+
+#define SRFL_MORE      1       /* value continues as described by the next entry */
+#define        SRFL_NOFFS      2       /* value bits can't be all one's */
+#define        SRFL_PRHEX      4       /* value is in hexdecimal format */
+#define        SRFL_PRSIGN     8       /* value is in signed decimal format */
+#define        SRFL_CCODE      0x10    /* value is in country code format */
+#define        SRFL_ETHADDR    0x20    /* value is an Ethernet address */
+#define SRFL_LEDDC     0x40    /* value is an LED duty cycle */
+
+/* Assumptions:
+ * - Ethernet address spins across 3 consective words
+ *
+ * Table rules:
+ * - Add multiple entries next to each other if a value spins across multiple words
+ *   (even multiple fields in the same word) with each entry except the last having
+ *   it's SRFL_MORE bit set.
+ * - Ethernet address entry does not follow above rule and must not have SRFL_MORE
+ *   bit set. Its SRFL_ETHADDR bit implies it takes multiple words.
+ * - The last entry's name field must be NULL to indicate the end of the table. Other
+ *   entries must have non-NULL name.
+ */
 
-               /* Per path variables */
-               for (path = 0; path < MAX_PATH; path++) {
-                       pathbase = pathbases[path];
-                       w = b[pathbase + SROM4_2G_ITT_MAXP];
-                       vp += sprintf(vp, "itt2ga%d=%d", path, w >> B2G_ITT_SHIFT);
-                       vp++;
-                       vp += sprintf(vp, "maxp2ga%d=%d", path, w & B2G_MAXP_MASK);
-                       vp++;
-
-                       for (i = 0; i < 4; i++) {
-                               vp += sprintf(vp, "pa2gw%da%d=%d", i, path,
-                                             b[pathbase + SROM4_2G_PA + i]);
-                               vp++;
-                       }
+static const sromvar_t pci_sromvars[] = {
+  {"boardrev", 0x0000000e, SRFL_PRHEX, SROM_AABREV, SROM_BR_MASK},
+  {"boardrev", 0x000000f0, SRFL_PRHEX, SROM4_BREV, 0xffff},
+  {"boardrev", 0xffffff00, SRFL_PRHEX, SROM8_BREV, 0xffff},
+  {"boardflags", 0x00000002, SRFL_PRHEX, SROM_BFL, 0xffff},
+  {"boardflags", 0x00000004, SRFL_PRHEX | SRFL_MORE, SROM_BFL, 0xffff},
+  {"", 0, 0, SROM_BFL2, 0xffff},
+  {"boardflags", 0x00000008, SRFL_PRHEX | SRFL_MORE, SROM_BFL, 0xffff},
+  {"", 0, 0, SROM3_BFL2, 0xffff},
+  {"boardflags", 0x00000010, SRFL_PRHEX | SRFL_MORE, SROM4_BFL0, 0xffff},
+  {"", 0, 0, SROM4_BFL1, 0xffff},
+  {"boardflags", 0x000000e0, SRFL_PRHEX | SRFL_MORE, SROM5_BFL0, 0xffff},
+  {"", 0, 0, SROM5_BFL1, 0xffff},
+  {"boardflags", 0xffffff00, SRFL_PRHEX | SRFL_MORE, SROM8_BFL0, 0xffff},
+  {"", 0, 0, SROM8_BFL1, 0xffff},
+  {"boardflags2", 0x00000010, SRFL_PRHEX | SRFL_MORE, SROM4_BFL2, 0xffff},
+  {"", 0, 0, SROM4_BFL3, 0xffff},
+  {"boardflags2", 0x000000e0, SRFL_PRHEX | SRFL_MORE, SROM5_BFL2, 0xffff},
+  {"", 0, 0, SROM5_BFL3, 0xffff},
+  {"boardflags2", 0xffffff00, SRFL_PRHEX | SRFL_MORE, SROM8_BFL2, 0xffff},
+  {"", 0, 0, SROM8_BFL3, 0xffff},
+  {"boardtype", 0xfffffffc, SRFL_PRHEX, SROM_SSID, 0xffff},
+  {"boardnum", 0x00000006, 0, SROM_MACLO_IL0, 0xffff},
+  {"boardnum", 0x00000008, 0, SROM3_MACLO, 0xffff},
+  {"boardnum", 0x00000010, 0, SROM4_MACLO, 0xffff},
+  {"boardnum", 0x000000e0, 0, SROM5_MACLO, 0xffff},
+  {"boardnum", 0xffffff00, 0, SROM8_MACLO, 0xffff},
+  {"cc", 0x00000002, 0, SROM_AABREV, SROM_CC_MASK},
+  {"regrev", 0x00000008, 0, SROM_OPO, 0xff00},
+  {"regrev", 0x00000010, 0, SROM4_REGREV, 0xff},
+  {"regrev", 0x000000e0, 0, SROM5_REGREV, 0xff},
+  {"regrev", 0xffffff00, 0, SROM8_REGREV, 0xff},
+  {"ledbh0", 0x0000000e, SRFL_NOFFS, SROM_LEDBH10, 0xff},
+  {"ledbh1", 0x0000000e, SRFL_NOFFS, SROM_LEDBH10, 0xff00},
+  {"ledbh2", 0x0000000e, SRFL_NOFFS, SROM_LEDBH32, 0xff},
+  {"ledbh3", 0x0000000e, SRFL_NOFFS, SROM_LEDBH32, 0xff00},
+  {"ledbh0", 0x00000010, SRFL_NOFFS, SROM4_LEDBH10, 0xff},
+  {"ledbh1", 0x00000010, SRFL_NOFFS, SROM4_LEDBH10, 0xff00},
+  {"ledbh2", 0x00000010, SRFL_NOFFS, SROM4_LEDBH32, 0xff},
+  {"ledbh3", 0x00000010, SRFL_NOFFS, SROM4_LEDBH32, 0xff00},
+  {"ledbh0", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH10, 0xff},
+  {"ledbh1", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH10, 0xff00},
+  {"ledbh2", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH32, 0xff},
+  {"ledbh3", 0x000000e0, SRFL_NOFFS, SROM5_LEDBH32, 0xff00},
+  {"ledbh0", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH10, 0xff},
+  {"ledbh1", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH10, 0xff00},
+  {"ledbh2", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH32, 0xff},
+  {"ledbh3", 0xffffff00, SRFL_NOFFS, SROM8_LEDBH32, 0xff00},
+  {"pa0b0", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB0, 0xffff},
+  {"pa0b1", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB1, 0xffff},
+  {"pa0b2", 0x0000000e, SRFL_PRHEX, SROM_WL0PAB2, 0xffff},
+  {"pa0itssit", 0x0000000e, 0, SROM_ITT, 0xff},
+  {"pa0maxpwr", 0x0000000e, 0, SROM_WL10MAXP, 0xff},
+  {"pa0b0", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB0, 0xffff},
+  {"pa0b1", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB1, 0xffff},
+  {"pa0b2", 0xffffff00, SRFL_PRHEX, SROM8_W0_PAB2, 0xffff},
+  {"pa0itssit", 0xffffff00, 0, SROM8_W0_ITTMAXP, 0xff00},
+  {"pa0maxpwr", 0xffffff00, 0, SROM8_W0_ITTMAXP, 0xff},
+  {"opo", 0x0000000c, 0, SROM_OPO, 0xff},
+  {"opo", 0xffffff00, 0, SROM8_2G_OFDMPO, 0xff},
+  {"aa2g", 0x0000000e, 0, SROM_AABREV, SROM_AA0_MASK},
+  {"aa2g", 0x000000f0, 0, SROM4_AA, 0xff},
+  {"aa2g", 0xffffff00, 0, SROM8_AA, 0xff},
+  {"aa5g", 0x0000000e, 0, SROM_AABREV, SROM_AA1_MASK},
+  {"aa5g", 0x000000f0, 0, SROM4_AA, 0xff00},
+  {"aa5g", 0xffffff00, 0, SROM8_AA, 0xff00},
+  {"ag0", 0x0000000e, 0, SROM_AG10, 0xff},
+  {"ag1", 0x0000000e, 0, SROM_AG10, 0xff00},
+  {"ag0", 0x000000f0, 0, SROM4_AG10, 0xff},
+  {"ag1", 0x000000f0, 0, SROM4_AG10, 0xff00},
+  {"ag2", 0x000000f0, 0, SROM4_AG32, 0xff},
+  {"ag3", 0x000000f0, 0, SROM4_AG32, 0xff00},
+  {"ag0", 0xffffff00, 0, SROM8_AG10, 0xff},
+  {"ag1", 0xffffff00, 0, SROM8_AG10, 0xff00},
+  {"ag2", 0xffffff00, 0, SROM8_AG32, 0xff},
+  {"ag3", 0xffffff00, 0, SROM8_AG32, 0xff00},
+  {"pa1b0", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB0, 0xffff},
+  {"pa1b1", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB1, 0xffff},
+  {"pa1b2", 0x0000000e, SRFL_PRHEX, SROM_WL1PAB2, 0xffff},
+  {"pa1lob0", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB0, 0xffff},
+  {"pa1lob1", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB1, 0xffff},
+  {"pa1lob2", 0x0000000c, SRFL_PRHEX, SROM_WL1LPAB2, 0xffff},
+  {"pa1hib0", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB0, 0xffff},
+  {"pa1hib1", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB1, 0xffff},
+  {"pa1hib2", 0x0000000c, SRFL_PRHEX, SROM_WL1HPAB2, 0xffff},
+  {"pa1itssit", 0x0000000e, 0, SROM_ITT, 0xff00},
+  {"pa1maxpwr", 0x0000000e, 0, SROM_WL10MAXP, 0xff00},
+  {"pa1lomaxpwr", 0x0000000c, 0, SROM_WL1LHMAXP, 0xff00},
+  {"pa1himaxpwr", 0x0000000c, 0, SROM_WL1LHMAXP, 0xff},
+  {"pa1b0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0, 0xffff},
+  {"pa1b1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1, 0xffff},
+  {"pa1b2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2, 0xffff},
+  {"pa1lob0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0_LC, 0xffff},
+  {"pa1lob1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1_LC, 0xffff},
+  {"pa1lob2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2_LC, 0xffff},
+  {"pa1hib0", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB0_HC, 0xffff},
+  {"pa1hib1", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB1_HC, 0xffff},
+  {"pa1hib2", 0xffffff00, SRFL_PRHEX, SROM8_W1_PAB2_HC, 0xffff},
+  {"pa1itssit", 0xffffff00, 0, SROM8_W1_ITTMAXP, 0xff00},
+  {"pa1maxpwr", 0xffffff00, 0, SROM8_W1_ITTMAXP, 0xff},
+  {"pa1lomaxpwr", 0xffffff00, 0, SROM8_W1_MAXP_LCHC, 0xff00},
+  {"pa1himaxpwr", 0xffffff00, 0, SROM8_W1_MAXP_LCHC, 0xff},
+  {"bxa2g", 0x00000008, 0, SROM_BXARSSI2G, 0x1800},
+  {"rssisav2g", 0x00000008, 0, SROM_BXARSSI2G, 0x0700},
+  {"rssismc2g", 0x00000008, 0, SROM_BXARSSI2G, 0x00f0},
+  {"rssismf2g", 0x00000008, 0, SROM_BXARSSI2G, 0x000f},
+  {"bxa2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x1800},
+  {"rssisav2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x0700},
+  {"rssismc2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x00f0},
+  {"rssismf2g", 0xffffff00, 0, SROM8_BXARSSI2G, 0x000f},
+  {"bxa5g", 0x00000008, 0, SROM_BXARSSI5G, 0x1800},
+  {"rssisav5g", 0x00000008, 0, SROM_BXARSSI5G, 0x0700},
+  {"rssismc5g", 0x00000008, 0, SROM_BXARSSI5G, 0x00f0},
+  {"rssismf5g", 0x00000008, 0, SROM_BXARSSI5G, 0x000f},
+  {"bxa5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x1800},
+  {"rssisav5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x0700},
+  {"rssismc5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x00f0},
+  {"rssismf5g", 0xffffff00, 0, SROM8_BXARSSI5G, 0x000f},
+  {"tri2g", 0x00000008, 0, SROM_TRI52G, 0xff},
+  {"tri5g", 0x00000008, 0, SROM_TRI52G, 0xff00},
+  {"tri5gl", 0x00000008, 0, SROM_TRI5GHL, 0xff},
+  {"tri5gh", 0x00000008, 0, SROM_TRI5GHL, 0xff00},
+  {"tri2g", 0xffffff00, 0, SROM8_TRI52G, 0xff},
+  {"tri5g", 0xffffff00, 0, SROM8_TRI52G, 0xff00},
+  {"tri5gl", 0xffffff00, 0, SROM8_TRI5GHL, 0xff},
+  {"tri5gh", 0xffffff00, 0, SROM8_TRI5GHL, 0xff00},
+  {"rxpo2g", 0x00000008, SRFL_PRSIGN, SROM_RXPO52G, 0xff},
+  {"rxpo5g", 0x00000008, SRFL_PRSIGN, SROM_RXPO52G, 0xff00},
+  {"rxpo2g", 0xffffff00, SRFL_PRSIGN, SROM8_RXPO52G, 0xff},
+  {"rxpo5g", 0xffffff00, SRFL_PRSIGN, SROM8_RXPO52G, 0xff00},
+  {"txchain", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_TXCHAIN_MASK},
+  {"rxchain", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_RXCHAIN_MASK},
+  {"antswitch", 0x000000f0, SRFL_NOFFS, SROM4_TXRXC, SROM4_SWITCH_MASK},
+  {"txchain", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_TXCHAIN_MASK},
+  {"rxchain", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_RXCHAIN_MASK},
+  {"antswitch", 0xffffff00, SRFL_NOFFS, SROM8_TXRXC, SROM4_SWITCH_MASK},
+  {"txpid2ga0", 0x000000f0, 0, SROM4_TXPID2G, 0xff},
+  {"txpid2ga1", 0x000000f0, 0, SROM4_TXPID2G, 0xff00},
+  {"txpid2ga2", 0x000000f0, 0, SROM4_TXPID2G + 1, 0xff},
+  {"txpid2ga3", 0x000000f0, 0, SROM4_TXPID2G + 1, 0xff00},
+  {"txpid5ga0", 0x000000f0, 0, SROM4_TXPID5G, 0xff},
+  {"txpid5ga1", 0x000000f0, 0, SROM4_TXPID5G, 0xff00},
+  {"txpid5ga2", 0x000000f0, 0, SROM4_TXPID5G + 1, 0xff},
+  {"txpid5ga3", 0x000000f0, 0, SROM4_TXPID5G + 1, 0xff00},
+  {"txpid5gla0", 0x000000f0, 0, SROM4_TXPID5GL, 0xff},
+  {"txpid5gla1", 0x000000f0, 0, SROM4_TXPID5GL, 0xff00},
+  {"txpid5gla2", 0x000000f0, 0, SROM4_TXPID5GL + 1, 0xff},
+  {"txpid5gla3", 0x000000f0, 0, SROM4_TXPID5GL + 1, 0xff00},
+  {"txpid5gha0", 0x000000f0, 0, SROM4_TXPID5GH, 0xff},
+  {"txpid5gha1", 0x000000f0, 0, SROM4_TXPID5GH, 0xff00},
+  {"txpid5gha2", 0x000000f0, 0, SROM4_TXPID5GH + 1, 0xff},
+  {"txpid5gha3", 0x000000f0, 0, SROM4_TXPID5GH + 1, 0xff00},
+  {"cck2gpo", 0x000000f0, 0, SROM4_2G_CCKPO, 0xffff},
+  {"cck2gpo", 0xffffff00, 0, SROM8_2G_CCKPO, 0xffff},
+  {"ofdm2gpo", 0x000000f0, SRFL_MORE, SROM4_2G_OFDMPO, 0xffff},
+  {"", 0, 0, SROM4_2G_OFDMPO + 1, 0xffff},
+  {"ofdm5gpo", 0x000000f0, SRFL_MORE, SROM4_5G_OFDMPO, 0xffff},
+  {"", 0, 0, SROM4_5G_OFDMPO + 1, 0xffff},
+  {"ofdm5glpo", 0x000000f0, SRFL_MORE, SROM4_5GL_OFDMPO, 0xffff},
+  {"", 0, 0, SROM4_5GL_OFDMPO + 1, 0xffff},
+  {"ofdm5ghpo", 0x000000f0, SRFL_MORE, SROM4_5GH_OFDMPO, 0xffff},
+  {"", 0, 0, SROM4_5GH_OFDMPO + 1, 0xffff},
+  {"ofdm2gpo", 0xffffff00, SRFL_MORE, SROM8_2G_OFDMPO, 0xffff},
+  {"", 0, 0, SROM8_2G_OFDMPO + 1, 0xffff},
+  {"ofdm5gpo", 0xffffff00, SRFL_MORE, SROM8_5G_OFDMPO, 0xffff},
+  {"", 0, 0, SROM8_5G_OFDMPO + 1, 0xffff},
+  {"ofdm5glpo", 0xffffff00, SRFL_MORE, SROM8_5GL_OFDMPO, 0xffff},
+  {"", 0, 0, SROM8_5GL_OFDMPO + 1, 0xffff},
+  {"ofdm5ghpo", 0xffffff00, SRFL_MORE, SROM8_5GH_OFDMPO, 0xffff},
+  {"", 0, 0, SROM8_5GH_OFDMPO + 1, 0xffff},
+  {"mcs2gpo0", 0x000000f0, 0, SROM4_2G_MCSPO, 0xffff},
+  {"mcs2gpo1", 0x000000f0, 0, SROM4_2G_MCSPO + 1, 0xffff},
+  {"mcs2gpo2", 0x000000f0, 0, SROM4_2G_MCSPO + 2, 0xffff},
+  {"mcs2gpo3", 0x000000f0, 0, SROM4_2G_MCSPO + 3, 0xffff},
+  {"mcs2gpo4", 0x000000f0, 0, SROM4_2G_MCSPO + 4, 0xffff},
+  {"mcs2gpo5", 0x000000f0, 0, SROM4_2G_MCSPO + 5, 0xffff},
+  {"mcs2gpo6", 0x000000f0, 0, SROM4_2G_MCSPO + 6, 0xffff},
+  {"mcs2gpo7", 0x000000f0, 0, SROM4_2G_MCSPO + 7, 0xffff},
+  {"mcs5gpo0", 0x000000f0, 0, SROM4_5G_MCSPO, 0xffff},
+  {"mcs5gpo1", 0x000000f0, 0, SROM4_5G_MCSPO + 1, 0xffff},
+  {"mcs5gpo2", 0x000000f0, 0, SROM4_5G_MCSPO + 2, 0xffff},
+  {"mcs5gpo3", 0x000000f0, 0, SROM4_5G_MCSPO + 3, 0xffff},
+  {"mcs5gpo4", 0x000000f0, 0, SROM4_5G_MCSPO + 4, 0xffff},
+  {"mcs5gpo5", 0x000000f0, 0, SROM4_5G_MCSPO + 5, 0xffff},
+  {"mcs5gpo6", 0x000000f0, 0, SROM4_5G_MCSPO + 6, 0xffff},
+  {"mcs5gpo7", 0x000000f0, 0, SROM4_5G_MCSPO + 7, 0xffff},
+  {"mcs5glpo0", 0x000000f0, 0, SROM4_5GL_MCSPO, 0xffff},
+  {"mcs5glpo1", 0x000000f0, 0, SROM4_5GL_MCSPO + 1, 0xffff},
+  {"mcs5glpo2", 0x000000f0, 0, SROM4_5GL_MCSPO + 2, 0xffff},
+  {"mcs5glpo3", 0x000000f0, 0, SROM4_5GL_MCSPO + 3, 0xffff},
+  {"mcs5glpo4", 0x000000f0, 0, SROM4_5GL_MCSPO + 4, 0xffff},
+  {"mcs5glpo5", 0x000000f0, 0, SROM4_5GL_MCSPO + 5, 0xffff},
+  {"mcs5glpo6", 0x000000f0, 0, SROM4_5GL_MCSPO + 6, 0xffff},
+  {"mcs5glpo7", 0x000000f0, 0, SROM4_5GL_MCSPO + 7, 0xffff},
+  {"mcs5ghpo0", 0x000000f0, 0, SROM4_5GH_MCSPO, 0xffff},
+  {"mcs5ghpo1", 0x000000f0, 0, SROM4_5GH_MCSPO + 1, 0xffff},
+  {"mcs5ghpo2", 0x000000f0, 0, SROM4_5GH_MCSPO + 2, 0xffff},
+  {"mcs5ghpo3", 0x000000f0, 0, SROM4_5GH_MCSPO + 3, 0xffff},
+  {"mcs5ghpo4", 0x000000f0, 0, SROM4_5GH_MCSPO + 4, 0xffff},
+  {"mcs5ghpo5", 0x000000f0, 0, SROM4_5GH_MCSPO + 5, 0xffff},
+  {"mcs5ghpo6", 0x000000f0, 0, SROM4_5GH_MCSPO + 6, 0xffff},
+  {"mcs5ghpo7", 0x000000f0, 0, SROM4_5GH_MCSPO + 7, 0xffff},
+  {"mcs2gpo0", 0xffffff00, 0, SROM8_2G_MCSPO, 0xffff},
+  {"mcs2gpo1", 0xffffff00, 0, SROM8_2G_MCSPO + 1, 0xffff},
+  {"mcs2gpo2", 0xffffff00, 0, SROM8_2G_MCSPO + 2, 0xffff},
+  {"mcs2gpo3", 0xffffff00, 0, SROM8_2G_MCSPO + 3, 0xffff},
+  {"mcs2gpo4", 0xffffff00, 0, SROM8_2G_MCSPO + 4, 0xffff},
+  {"mcs2gpo5", 0xffffff00, 0, SROM8_2G_MCSPO + 5, 0xffff},
+  {"mcs2gpo6", 0xffffff00, 0, SROM8_2G_MCSPO + 6, 0xffff},
+  {"mcs2gpo7", 0xffffff00, 0, SROM8_2G_MCSPO + 7, 0xffff},
+  {"mcs5gpo0", 0xffffff00, 0, SROM8_5G_MCSPO, 0xffff},
+  {"mcs5gpo1", 0xffffff00, 0, SROM8_5G_MCSPO + 1, 0xffff},
+  {"mcs5gpo2", 0xffffff00, 0, SROM8_5G_MCSPO + 2, 0xffff},
+  {"mcs5gpo3", 0xffffff00, 0, SROM8_5G_MCSPO + 3, 0xffff},
+  {"mcs5gpo4", 0xffffff00, 0, SROM8_5G_MCSPO + 4, 0xffff},
+  {"mcs5gpo5", 0xffffff00, 0, SROM8_5G_MCSPO + 5, 0xffff},
+  {"mcs5gpo6", 0xffffff00, 0, SROM8_5G_MCSPO + 6, 0xffff},
+  {"mcs5gpo7", 0xffffff00, 0, SROM8_5G_MCSPO + 7, 0xffff},
+  {"mcs5glpo0", 0xffffff00, 0, SROM8_5GL_MCSPO, 0xffff},
+  {"mcs5glpo1", 0xffffff00, 0, SROM8_5GL_MCSPO + 1, 0xffff},
+  {"mcs5glpo2", 0xffffff00, 0, SROM8_5GL_MCSPO + 2, 0xffff},
+  {"mcs5glpo3", 0xffffff00, 0, SROM8_5GL_MCSPO + 3, 0xffff},
+  {"mcs5glpo4", 0xffffff00, 0, SROM8_5GL_MCSPO + 4, 0xffff},
+  {"mcs5glpo5", 0xffffff00, 0, SROM8_5GL_MCSPO + 5, 0xffff},
+  {"mcs5glpo6", 0xffffff00, 0, SROM8_5GL_MCSPO + 6, 0xffff},
+  {"mcs5glpo7", 0xffffff00, 0, SROM8_5GL_MCSPO + 7, 0xffff},
+  {"mcs5ghpo0", 0xffffff00, 0, SROM8_5GH_MCSPO, 0xffff},
+  {"mcs5ghpo1", 0xffffff00, 0, SROM8_5GH_MCSPO + 1, 0xffff},
+  {"mcs5ghpo2", 0xffffff00, 0, SROM8_5GH_MCSPO + 2, 0xffff},
+  {"mcs5ghpo3", 0xffffff00, 0, SROM8_5GH_MCSPO + 3, 0xffff},
+  {"mcs5ghpo4", 0xffffff00, 0, SROM8_5GH_MCSPO + 4, 0xffff},
+  {"mcs5ghpo5", 0xffffff00, 0, SROM8_5GH_MCSPO + 5, 0xffff},
+  {"mcs5ghpo6", 0xffffff00, 0, SROM8_5GH_MCSPO + 6, 0xffff},
+  {"mcs5ghpo7", 0xffffff00, 0, SROM8_5GH_MCSPO + 7, 0xffff},
+  {"cddpo", 0x000000f0, 0, SROM4_CDDPO, 0xffff},
+  {"stbcpo", 0x000000f0, 0, SROM4_STBCPO, 0xffff},
+  {"bw40po", 0x000000f0, 0, SROM4_BW40PO, 0xffff},
+  {"bwduppo", 0x000000f0, 0, SROM4_BWDUPPO, 0xffff},
+  {"cddpo", 0xffffff00, 0, SROM8_CDDPO, 0xffff},
+  {"stbcpo", 0xffffff00, 0, SROM8_STBCPO, 0xffff},
+  {"bw40po", 0xffffff00, 0, SROM8_BW40PO, 0xffff},
+  {"bwduppo", 0xffffff00, 0, SROM8_BWDUPPO, 0xffff},
+  {"ccode", 0x0000000f, SRFL_CCODE, SROM_CCODE, 0xffff},
+  {"ccode", 0x00000010, SRFL_CCODE, SROM4_CCODE, 0xffff},
+  {"ccode", 0x000000e0, SRFL_CCODE, SROM5_CCODE, 0xffff},
+  {"ccode", 0xffffff00, SRFL_CCODE, SROM8_CCODE, 0xffff},
+  {"macaddr", 0xffffff00, SRFL_ETHADDR, SROM8_MACHI, 0xffff},
+  {"macaddr", 0x000000e0, SRFL_ETHADDR, SROM5_MACHI, 0xffff},
+  {"macaddr", 0x00000010, SRFL_ETHADDR, SROM4_MACHI, 0xffff},
+  {"macaddr", 0x00000008, SRFL_ETHADDR, SROM3_MACHI, 0xffff},
+  {"il0macaddr", 0x00000007, SRFL_ETHADDR, SROM_MACHI_IL0, 0xffff},
+  {"et1macaddr", 0x00000007, SRFL_ETHADDR, SROM_MACHI_ET1, 0xffff},
+  {"leddc", 0xffffff00, SRFL_NOFFS | SRFL_LEDDC, SROM8_LEDDC, 0xffff},
+  {"leddc", 0x000000e0, SRFL_NOFFS | SRFL_LEDDC, SROM5_LEDDC, 0xffff},
+  {"leddc", 0x00000010, SRFL_NOFFS | SRFL_LEDDC, SROM4_LEDDC, 0xffff},
+  {"leddc", 0x00000008, SRFL_NOFFS | SRFL_LEDDC, SROM3_LEDDC, 0xffff},
+  {NULL, 0, 0, 0, 0}
+};
+
+static const sromvar_t perpath_pci_sromvars[] = {
+  {"maxp2ga", 0x000000f0, 0, SROM4_2G_ITT_MAXP, 0xff},
+  {"itt2ga", 0x000000f0, 0, SROM4_2G_ITT_MAXP, 0xff00},
+  {"itt5ga", 0x000000f0, 0, SROM4_5G_ITT_MAXP, 0xff00},
+  {"pa2gw0a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA, 0xffff},
+  {"pa2gw1a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 1, 0xffff},
+  {"pa2gw2a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 2, 0xffff},
+  {"pa2gw3a", 0x000000f0, SRFL_PRHEX, SROM4_2G_PA + 3, 0xffff},
+  {"maxp5ga", 0x000000f0, 0, SROM4_5G_ITT_MAXP, 0xff},
+  {"maxp5gha", 0x000000f0, 0, SROM4_5GLH_MAXP, 0xff},
+  {"maxp5gla", 0x000000f0, 0, SROM4_5GLH_MAXP, 0xff00},
+  {"pa5gw0a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA, 0xffff},
+  {"pa5gw1a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 1, 0xffff},
+  {"pa5gw2a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 2, 0xffff},
+  {"pa5gw3a", 0x000000f0, SRFL_PRHEX, SROM4_5G_PA + 3, 0xffff},
+  {"pa5glw0a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA, 0xffff},
+  {"pa5glw1a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 1, 0xffff},
+  {"pa5glw2a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 2, 0xffff},
+  {"pa5glw3a", 0x000000f0, SRFL_PRHEX, SROM4_5GL_PA + 3, 0xffff},
+  {"pa5ghw0a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA, 0xffff},
+  {"pa5ghw1a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 1, 0xffff},
+  {"pa5ghw2a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 2, 0xffff},
+  {"pa5ghw3a", 0x000000f0, SRFL_PRHEX, SROM4_5GH_PA + 3, 0xffff},
+  {"maxp2ga", 0xffffff00, 0, SROM8_2G_ITT_MAXP, 0xff},
+  {"itt2ga", 0xffffff00, 0, SROM8_2G_ITT_MAXP, 0xff00},
+  {"itt5ga", 0xffffff00, 0, SROM8_5G_ITT_MAXP, 0xff00},
+  {"pa2gw0a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA, 0xffff},
+  {"pa2gw1a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA + 1, 0xffff},
+  {"pa2gw2a", 0xffffff00, SRFL_PRHEX, SROM8_2G_PA + 2, 0xffff},
+  {"maxp5ga", 0xffffff00, 0, SROM8_5G_ITT_MAXP, 0xff},
+  {"maxp5gha", 0xffffff00, 0, SROM8_5GLH_MAXP, 0xff},
+  {"maxp5gla", 0xffffff00, 0, SROM8_5GLH_MAXP, 0xff00},
+  {"pa5gw0a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA, 0xffff},
+  {"pa5gw1a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA + 1, 0xffff},
+  {"pa5gw2a", 0xffffff00, SRFL_PRHEX, SROM8_5G_PA + 2, 0xffff},
+  {"pa5glw0a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA, 0xffff},
+  {"pa5glw1a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA + 1, 0xffff},
+  {"pa5glw2a", 0xffffff00, SRFL_PRHEX, SROM8_5GL_PA + 2, 0xffff},
+  {"pa5ghw0a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA, 0xffff},
+  {"pa5ghw1a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA + 1, 0xffff},
+  {"pa5ghw2a", 0xffffff00, SRFL_PRHEX, SROM8_5GH_PA + 2, 0xffff},
+  {NULL, 0, 0, 0, 0}
+};
+
+/* Parse SROM and create name=value pairs. 'srom' points to
+ * the SROM word array. 'off' specifies the offset of the
+ * first word 'srom' points to, which should be either 0 or
+ * SROM3_SWRG_OFF (full SROM or software region).
+ */
 
-                       w = b[pathbase + SROM4_5G_ITT_MAXP];
-                       vp += sprintf(vp, "itt5ga%d=%d", path, w >> B5G_ITT_SHIFT);
-                       vp++;
-                       vp += sprintf(vp, "maxp5ga%d=%d", path, w & B5G_MAXP_MASK);
-                       vp++;
-
-                       w = b[pathbase + SROM4_5GLH_MAXP];
-                       vp += sprintf(vp, "maxp5lga%d=%d", path, w >> B5GL_MAXP_SHIFT);
-                       vp++;
-                       vp += sprintf(vp, "maxp5gha%d=%d", path, w & B5GH_MAXP_MASK);
-                       vp++;
-
-                       for (i = 0; i < 4; i++) {
-                               vp += sprintf(vp, "pa5gw%da%d=%d", i, path,
-                                             b[pathbase + SROM4_5G_PA + i]);
-                               vp++;
-                               vp += sprintf(vp, "pa5glw%da%d=%d", i, path,
-                                             b[pathbase + SROM4_5GL_PA + i]);
-                               vp++;
-                               vp += sprintf(vp, "pa5hgw%da%d=%d", i, path,
-                                             b[pathbase + SROM4_5GH_PA + i]);
-                               vp++;
-                       }
-               }
+static uint
+mask_shift (uint16 mask)
+{
+  uint i;
+  for (i = 0; i < (sizeof (mask) << 3); i++)
+    {
+      if (mask & (1 << i))
+       return i;
+    }
+  ASSERT (mask);
+  return 0;
+}
 
-               vp += sprintf(vp, "cck2gpo=%d", b[SROM4_2G_CCKPO]);
-               vp++;
-
-               w32 = ((uint32)b[SROM4_2G_OFDMPO + 1] << 16) | b[SROM4_2G_OFDMPO];
-               vp += sprintf(vp, "ofdm2gpo=%d", w32);
-               vp++;
-
-               w32 = ((uint32)b[SROM4_5G_OFDMPO + 1] << 16) | b[SROM4_5G_OFDMPO];
-               vp += sprintf(vp, "ofdm5gpo=%d", w32);
-               vp++;
-
-               w32 = ((uint32)b[SROM4_5GL_OFDMPO + 1] << 16) | b[SROM4_5GL_OFDMPO];
-               vp += sprintf(vp, "ofdm5glpo=%d", w32);
-               vp++;
-
-               w32 = ((uint32)b[SROM4_5GH_OFDMPO + 1] << 16) | b[SROM4_5GH_OFDMPO];
-               vp += sprintf(vp, "ofdm5ghpo=%d", w32);
-               vp++;
-
-               for (i = 0; i < 8; i++) {
-                       vp += sprintf(vp, "mcs2gpo%d=%d", i, b[SROM4_2G_MCSPO]);
-                       vp++;
-                       vp += sprintf(vp, "mcs5gpo%d=%d", i, b[SROM4_5G_MCSPO]);
-                       vp++;
-                       vp += sprintf(vp, "mcs5glpo%d=%d", i, b[SROM4_5GL_MCSPO]);
-                       vp++;
-                       vp += sprintf(vp, "mcs5ghpo%d=%d", i, b[SROM4_5GH_MCSPO]);
-                       vp++;
-               }
+static uint
+mask_width (uint16 mask)
+{
+  int i;
+  for (i = (sizeof (mask) << 3) - 1; i >= 0; i--)
+    {
+      if (mask & (1 << i))
+       return (uint) (i - mask_shift (mask) + 1);
+    }
+  ASSERT (mask);
+  return 0;
+}
 
-               vp += sprintf(vp, "ccdpo%d=%d", i, b[SROM4_CCDPO]);
-               vp++;
-               vp += sprintf(vp, "stbcpo%d=%d", i, b[SROM4_STBCPO]);
-               vp++;
-               vp += sprintf(vp, "bw40po%d=%d", i, b[SROM4_BW40PO]);
-               vp++;
-               vp += sprintf(vp, "bwduppo%d=%d", i, b[SROM4_BWDUPPO]);
-               vp++;
+#ifdef BCMDBG_ASSERT
+static bool
+mask_valid (uint16 mask)
+{
+  uint shift = mask_shift (mask);
+  uint width = mask_width (mask);
+  return mask == ((~0 << shift) & ~(~0 << (shift + width)));
+}
+#endif
 
-               goto done;
+static void
+_initvars_srom_pci (uint8 sromrev, uint16 * srom, uint off, varbuf_t * b)
+{
+  uint16 w;
+  uint32 val;
+  const sromvar_t *srv;
+  uint width;
+  uint flags;
+  uint32 sr = (1 << sromrev);
+
+  varbuf_append (b, "sromrev=%d", sromrev);
+
+  for (srv = pci_sromvars; srv->name != NULL; srv++)
+    {
+      const char *name;
+
+      if ((srv->revmask & sr) == 0)
+       continue;
+
+      if (srv->off < off)
+       continue;
+
+      flags = srv->flags;
+      name = srv->name;
+
+      if (flags & SRFL_ETHADDR)
+       {
+         char eabuf[ETHER_ADDR_STR_LEN];
+         struct ether_addr ea;
+
+         ea.octet[0] = (srom[srv->off - off] >> 8) & 0xff;
+         ea.octet[1] = srom[srv->off - off] & 0xff;
+         ea.octet[2] = (srom[srv->off + 1 - off] >> 8) & 0xff;
+         ea.octet[3] = srom[srv->off + 1 - off] & 0xff;
+         ea.octet[4] = (srom[srv->off + 2 - off] >> 8) & 0xff;
+         ea.octet[5] = srom[srv->off + 2 - off] & 0xff;
+         bcm_ether_ntoa (&ea, eabuf);
+
+         varbuf_append (b, "%s=%s", name, eabuf);
        }
-       if (sromrev >= 3) {
-               /* New section takes over the 3th hardware function space */
-
-               /* Words 22+23 are 11a (mid) ofdm power offsets */
-               w32 = ((uint32)b[23] << 16) | b[22];
-               vp += sprintf(vp, "ofdmapo=%d", w32);
-               vp++;
-
-               /* Words 24+25 are 11a (low) ofdm power offsets */
-               w32 = ((uint32)b[25] << 16) | b[24];
-               vp += sprintf(vp, "ofdmalpo=%d", w32);
-               vp++;
-
-               /* Words 26+27 are 11a (high) ofdm power offsets */
-               w32 = ((uint32)b[27] << 16) | b[26];
-               vp += sprintf(vp, "ofdmahpo=%d", w32);
-               vp++;
-
-               /* LED Powersave duty cycle (oncount >> 24) (offcount >> 8) */
-               w32 = ((uint32)((unsigned char)(b[21] >> 8) & 0xff) << 24) |  /* oncount */
-                       ((uint32)((unsigned char)(b[21] & 0xff)) << 8); /* offcount */
-               vp += sprintf(vp, "leddc=%d", w32);
-
-               vp++;
+      else
+       {
+         ASSERT (mask_valid (srv->mask));
+         ASSERT (mask_width (srv->mask));
+
+         w = srom[srv->off - off];
+         val = (w & srv->mask) >> mask_shift (srv->mask);
+         width = mask_width (srv->mask);
+
+         while (srv->flags & SRFL_MORE)
+           {
+             srv++;
+             ASSERT (srv->name);
+
+             if (srv->off == 0 || srv->off < off)
+               continue;
+
+             ASSERT (mask_valid (srv->mask));
+             ASSERT (mask_width (srv->mask));
+
+             w = srom[srv->off - off];
+             val += ((w & srv->mask) >> mask_shift (srv->mask)) << width;
+             width += mask_width (srv->mask);
+           }
+
+         if ((flags & SRFL_NOFFS) && ((int) val == (1 << width) - 1))
+           continue;
+
+         if (flags & SRFL_CCODE)
+           {
+             if (val == 0)
+               varbuf_append (b, "ccode=");
+             else
+               varbuf_append (b, "ccode=%c%c", (val >> 8), (val & 0xff));
+           }
+         /* LED Powersave duty cycle has to be scaled:
+          *(oncount >> 24) (offcount >> 8)
+          */
+         else if (flags & SRFL_LEDDC)
+           {
+             uint32 w32 = (((val >> 8) & 0xff) << 24) |        /* oncount */
+               (((val & 0xff)) << 8);  /* offcount */
+             varbuf_append (b, "leddc=%d", w32);
+           }
+         else if (flags & SRFL_PRHEX)
+           varbuf_append (b, "%s=0x%x", name, val);
+         else if ((flags & SRFL_PRSIGN) && (val & (1 << (width - 1))))
+           varbuf_append (b, "%s=%d", name, (int) (val | (~0 << width)));
+         else
+           varbuf_append (b, "%s=%u", name, val);
        }
+    }
 
-       if (sromrev >= 2) {
-               /* New section takes over the 4th hardware function space */
-
-               /* Word 29 is max power 11a high/low */
-               w = b[29];
-               vp += sprintf(vp, "pa1himaxpwr=%d", w & 0xff);
-               vp++;
-               vp += sprintf(vp, "pa1lomaxpwr=%d", (w >> 8) & 0xff);
-               vp++;
-
-               /* Words 30-32 set the 11alow pa settings,
-                * 33-35 are the 11ahigh ones.
-                */
-               for (i = 0; i < 3; i++) {
-                       vp += sprintf(vp, "pa1lob%d=%d", i, b[30 + i]);
-                       vp++;
-                       vp += sprintf(vp, "pa1hib%d=%d", i, b[33 + i]);
-                       vp++;
-               }
-               w = b[59];
-               if (w == 0)
-                       vp += sprintf(vp, "ccode=");
-               else
-                       vp += sprintf(vp, "ccode=%c%c", (w >> 8), (w & 0xff));
-               vp++;
+  if (sromrev >= 4)
+    {
+      /* Do per-path variables */
+      uint p, pb, psz;
 
+      if (sromrev >= 8)
+       {
+         pb = SROM8_PATH0;
+         psz = SROM8_PATH1 - SROM8_PATH0;
        }
-
-       /* parameter section of sprom starts at byte offset 72 */
-       woff = 72/2;
-
-       /* first 6 bytes are il0macaddr */
-       ea.octet[0] = (b[woff] >> 8) & 0xff;
-       ea.octet[1] = b[woff] & 0xff;
-       ea.octet[2] = (b[woff+1] >> 8) & 0xff;
-       ea.octet[3] = b[woff+1] & 0xff;
-       ea.octet[4] = (b[woff+2] >> 8) & 0xff;
-       ea.octet[5] = b[woff+2] & 0xff;
-       woff += 3;
-       bcm_ether_ntoa(&ea, eabuf);
-       vp += sprintf(vp, "il0macaddr=%s", eabuf);
-       vp++;
-
-       /* next 6 bytes are et0macaddr */
-       ea.octet[0] = (b[woff] >> 8) & 0xff;
-       ea.octet[1] = b[woff] & 0xff;
-       ea.octet[2] = (b[woff+1] >> 8) & 0xff;
-       ea.octet[3] = b[woff+1] & 0xff;
-       ea.octet[4] = (b[woff+2] >> 8) & 0xff;
-       ea.octet[5] = b[woff+2] & 0xff;
-       woff += 3;
-       bcm_ether_ntoa(&ea, eabuf);
-       vp += sprintf(vp, "et0macaddr=%s", eabuf);
-       vp++;
-
-       /* next 6 bytes are et1macaddr */
-       ea.octet[0] = (b[woff] >> 8) & 0xff;
-       ea.octet[1] = b[woff] & 0xff;
-       ea.octet[2] = (b[woff+1] >> 8) & 0xff;
-       ea.octet[3] = b[woff+1] & 0xff;
-       ea.octet[4] = (b[woff+2] >> 8) & 0xff;
-       ea.octet[5] = b[woff+2] & 0xff;
-       woff += 3;
-       bcm_ether_ntoa(&ea, eabuf);
-       vp += sprintf(vp, "et1macaddr=%s", eabuf);
-       vp++;
-
-       /*
-        * Enet phy settings one or two singles or a dual
-        * Bits 4-0 : MII address for enet0 (0x1f for not there)
-        * Bits 9-5 : MII address for enet1 (0x1f for not there)
-        * Bit 14   : Mdio for enet0
-        * Bit 15   : Mdio for enet1
-        */
-       w = b[woff];
-       vp += sprintf(vp, "et0phyaddr=%d", (w & 0x1f));
-       vp++;
-       vp += sprintf(vp, "et1phyaddr=%d", ((w >> 5) & 0x1f));
-       vp++;
-       vp += sprintf(vp, "et0mdcport=%d", ((w >> 14) & 0x1));
-       vp++;
-       vp += sprintf(vp, "et1mdcport=%d", ((w >> 15) & 0x1));
-       vp++;
-
-       /* Word 46 has board rev, antennas 0/1 & Country code/control */
-       w = b[46];
-       vp += sprintf(vp, "boardrev=%d", w & 0xff);
-       vp++;
-
-       if (sromrev > 1)
-               vp += sprintf(vp, "cctl=%d", (w >> 8) & 0xf);
-       else
-               vp += sprintf(vp, "cc=%d", (w >> 8) & 0xf);
-       vp++;
-
-       vp += sprintf(vp, "aa2g=%d", (w >> 12) & 0x3);
-       vp++;
-
-       vp += sprintf(vp, "aa5g=%d", (w >> 14) & 0x3);
-       vp++;
-
-       /* Words 47-49 set the (wl) pa settings */
-       woff = 47;
-
-       for (i = 0; i < 3; i++) {
-               vp += sprintf(vp, "pa0b%d=%d", i, b[woff+i]);
-               vp++;
-               vp += sprintf(vp, "pa1b%d=%d", i, b[woff+i+6]);
-               vp++;
+      else
+       {
+         pb = SROM4_PATH0;
+         psz = SROM4_PATH1 - SROM4_PATH0;
        }
 
-       /*
-        * Words 50-51 set the customer-configured wl led behavior.
-        * 8 bits/gpio pin.  High bit:  activehi=0, activelo=1;
-        * LED behavior values defined in wlioctl.h .
-        */
-       w = b[50];
-       if ((w != 0) && (w != 0xffff)) {
-               /* ledbh0 */
-               vp += sprintf(vp, "ledbh0=%d", (w & 0xff));
-               vp++;
-
-               /* ledbh1 */
-               vp += sprintf(vp, "ledbh1=%d", (w >> 8) & 0xff);
-               vp++;
-       }
-       w = b[51];
-       if ((w != 0) && (w != 0xffff)) {
-               /* ledbh2 */
-               vp += sprintf(vp, "ledbh2=%d", w & 0xff);
-               vp++;
-
-               /* ledbh */
-               vp += sprintf(vp, "ledbh3=%d", (w >> 8) & 0xff);
-               vp++;
+      for (p = 0; p < MAX_PATH; p++)
+       {
+         for (srv = perpath_pci_sromvars; srv->name != NULL; srv++)
+           {
+             if ((srv->revmask & sr) == 0)
+               continue;
+
+             if (pb + srv->off < off)
+               continue;
+
+             w = srom[pb + srv->off - off];
+             ASSERT (mask_valid (srv->mask));
+             val = (w & srv->mask) >> mask_shift (srv->mask);
+             width = mask_width (srv->mask);
+
+             /* Cheating: no per-path var is more than 1 word */
+
+             if ((srv->flags & SRFL_NOFFS)
+                 && ((int) val == (1 << width) - 1))
+               continue;
+
+             if (srv->flags & SRFL_PRHEX)
+               varbuf_append (b, "%s%d=0x%x", srv->name, p, val);
+             else
+               varbuf_append (b, "%s%d=%d", srv->name, p, val);
+           }
+         pb += psz;
        }
+    }
+}
 
-       /* Word 52 is max power 0/1 */
-       w = b[52];
-       vp += sprintf(vp, "pa0maxpwr=%d", w & 0xff);
-       vp++;
-       vp += sprintf(vp, "pa1maxpwr=%d", (w >> 8) & 0xff);
-       vp++;
-
-       /* Word 56 is idle tssi target 0/1 */
-       w = b[56];
-       vp += sprintf(vp, "pa0itssit=%d", w & 0xff);
-       vp++;
-       vp += sprintf(vp, "pa1itssit=%d", (w >> 8) & 0xff);
-       vp++;
-
-       /* Word 57 is boardflags, if not programmed make it zero */
-       w32 = (uint32)b[57];
-       if (w32 == 0xffff) w32 = 0;
-       if (sromrev > 1) {
-               /* Word 28 is the high bits of boardflags */
-               w32 |= (uint32)b[28] << 16;
+static int
+initvars_srom_pci (sb_t * sbh, void *curmap, char **vars, uint * count)
+{
+  uint16 *srom;
+  uint8 sromrev = 0;
+  uint32 sr;
+  varbuf_t b;
+  char *vp, *base = NULL;
+  osl_t *osh = sb_osh (sbh);
+  bool flash = FALSE;
+  char *value;
+  int err;
+
+  /*
+   * Apply CRC over SROM content regardless SROM is present or not,
+   * and use variable <devpath>sromrev's existance in flash to decide
+   * if we should return an error when CRC fails or read SROM variables
+   * from flash.
+   */
+  srom = MALLOC (osh, SROM_MAX);
+  ASSERT (srom);
+  if (!srom)
+    return -2;
+
+  err =
+    sprom_read_pci (osh, (void *) ((int8 *) curmap + PCI_BAR0_SPROM_OFFSET),
+                   0, srom, SROM_WORDS, TRUE);
+
+  if ((srom[SROM4_SIGN] == SROM4_SIGNATURE) ||
+      ((sbh->buscoretype == SB_PCIE) && (sbh->buscorerev >= 6)))
+    {
+      /* sromrev >= 4, read more */
+      err =
+       sprom_read_pci (osh,
+                       (void *) ((int8 *) curmap + PCI_BAR0_SPROM_OFFSET), 0,
+                       srom, SROM4_WORDS, TRUE);
+      sromrev = srom[SROM4_CRCREV] & 0xff;
+    }
+  else if (err == 0)
+    {
+      /* srom is good and is rev < 4 */
+      /* top word of sprom contains version and crc8 */
+      sromrev = srom[SROM_CRCREV] & 0xff;
+      /* bcm4401 sroms misprogrammed */
+      if (sromrev == 0x10)
+       sromrev = 1;
+    }
+
+  if (err)
+    {
+#ifdef WLTEST
+      uint32 val;
+
+      BS_ERROR (("SROM Crc Error, so see if we could use a default\n"));
+      val = OSL_PCI_READ_CONFIG (osh, PCI_SPROM_CONTROL, sizeof (uint32));
+      if (val & SPROM_OTPIN_USE)
+       {
+         BS_ERROR (("srom crc failed with OTP, use default vars....\n"));
+         vp = base = mfgsromvars;
+         if (sb_chip (sbh) == BCM4311_CHIP_ID)
+           {
+             const char *devid = "devid=0x4311";
+             const size_t devid_strlen = strlen (devid);
+             BS_ERROR (("setting the devid to be 4311\n"));
+             bcopy (devid, vp, devid_strlen + 1);
+             vp += devid_strlen + 1;
+           }
+         bcopy (defaultsromvars, vp, MFGSROM_DEFVARSLEN);
+         vp += MFGSROM_DEFVARSLEN;
+         goto varsdone;
        }
-       vp += sprintf(vp, "boardflags=%d", w32);
-       vp++;
-
-       /* Word 58 is antenna gain 0/1 */
-       w = b[58];
-       vp += sprintf(vp, "ag0=%d", w & 0xff);
-       vp++;
-
-       vp += sprintf(vp, "ag1=%d", (w >> 8) & 0xff);
-       vp++;
-
-       if (sromrev == 1) {
-               /* set the oem string */
-               vp += sprintf(vp, "oem=%02x%02x%02x%02x%02x%02x%02x%02x",
-                             ((b[59] >> 8) & 0xff), (b[59] & 0xff),
-                             ((b[60] >> 8) & 0xff), (b[60] & 0xff),
-                             ((b[61] >> 8) & 0xff), (b[61] & 0xff),
-                             ((b[62] >> 8) & 0xff), (b[62] & 0xff));
-               vp++;
-       } else if (sromrev == 2) {
-               /* Word 60 OFDM tx power offset from CCK level */
-               /* OFDM Power Offset - opo */
-               vp += sprintf(vp, "opo=%d", b[60] & 0xff);
-               vp++;
-       } else {
-               /* Word 60: cck power offsets */
-               vp += sprintf(vp, "cckpo=%d", b[60]);
-               vp++;
-
-               /* Words 61+62: 11g ofdm power offsets */
-               w32 = ((uint32)b[62] << 16) | b[61];
-               vp += sprintf(vp, "ofdmgpo=%d", w32);
-               vp++;
+      else
+       {
+#endif /* WLTEST */
+         BS_ERROR (("srom crc failed with SPROM....\n"));
+         if (!(value = sb_getdevpathvar (sbh, "sromrev")))
+           {
+             err = -1;
+             goto errout;
+           }
+         sromrev = (uint8) simple_strtoul (value, NULL, 0);
+         flash = TRUE;
+#ifdef WLTEST
        }
-
-       /* final nullbyte terminator */
-done:  *vp++ = '\0';
-
-       ASSERT((vp - base) <= VARS_MAX);
+#endif /* WLTEST */
+    }
+
+  /* Bitmask for the sromrev */
+  sr = 1 << sromrev;
+
+  /* srom version check
+   * Current valid versions: 1, 2, 3, 4, 5, 8
+   */
+  if ((sr & 0x13e) == 0)
+    {
+      err = -2;
+      goto errout;
+    }
+
+  ASSERT (vars);
+  ASSERT (count);
+
+  base = vp = MALLOC (osh, MAXSZ_NVRAM_VARS);
+  ASSERT (vp);
+  if (!vp)
+    {
+      err = -2;
+      goto errout;
+    }
+
+  /* read variables from flash */
+  if (flash)
+    {
+      if ((err = initvars_flash (sbh, osh, &vp, MAXSZ_NVRAM_VARS)))
+       goto errout;
+      goto varsdone;
+    }
+
+  varbuf_init (&b, base, MAXSZ_NVRAM_VARS);
+
+  /* parse SROM into name=value pairs. */
+  _initvars_srom_pci (sromrev, srom, 0, &b);
+
+  /* final nullbyte terminator */
+  ASSERT (b.size >= 1);
+  vp = b.buf;
+  *vp++ = '\0';
+
+  ASSERT ((vp - base) <= MAXSZ_NVRAM_VARS);
 
 varsdone:
-       err = initvars_table(osh, base, vp, vars, count);
+  err = initvars_table (osh, base, vp, vars, count);
 
-err:
+errout:
 #ifdef WLTEST
-       if (base != mfgsromvars)
+  if (base && (base != mfgsromvars))
+#else
+  if (base)
 #endif
-               MFREE(osh, base, VARS_MAX);
-       MFREE(osh, b, SROM_MAX);
-       return err;
+    MFREE (osh, base, MAXSZ_NVRAM_VARS);
+
+  MFREE (osh, srom, SROM_MAX);
+  return err;
 }
 
 /*
@@ -1183,31 +1889,217 @@ err:
  * Return 0 on success, nonzero on error.
  */
 static int
-initvars_cis_pcmcia(void *sbh, osl_t *osh, char **vars, uint *count)
+initvars_cis_pcmcia (sb_t * sbh, osl_t * osh, char **vars, uint * count)
 {
-       uint8 *cis = NULL;
-       int rc;
-       uint data_sz;
+  uint8 *cis = NULL;
+  int rc;
+  uint data_sz;
+
+  data_sz = (sb_pcmciarev (sbh) == 1) ? (SPROM_SIZE * 2) : CIS_SIZE;
+
+  if ((cis = MALLOC (osh, data_sz)) == NULL)
+    return (-2);
+
+  if (sb_pcmciarev (sbh) == 1)
+    {
+      if (srom_read
+         (sbh, PCMCIA_BUS, (void *) NULL, osh, 0, data_sz, (uint16 *) cis))
+       {
+         MFREE (osh, cis, data_sz);
+         return (-1);
+       }
+      /* fix up endianess for 16-bit data vs 8-bit parsing */
+      htol16_buf ((uint16 *) cis, data_sz);
+    }
+  else
+    OSL_PCMCIA_READ_ATTR (osh, 0, cis, data_sz);
+
+  rc = srom_parsecis (osh, &cis, 1, vars, count);
 
-       data_sz = (sb_pcmciarev(sbh) == 1) ? (SPROM_SIZE * 2) : CIS_SIZE;
+  MFREE (osh, cis, data_sz);
 
-       if ((cis = MALLOC(osh, data_sz)) == NULL)
-               return (-2);
+  return (rc);
+}
+
+
+static int
+BCMINITFN (initvars_srom_sb) (sb_t * sbh, osl_t * osh, void *curmap,
+                             char **vars, uint * varsz)
+{
+#if defined(BCMSDIODEV)
+  /* CIS is read and supplied by the host */
+  return BCME_OK;
+#elif defined(BCMUSBDEV)
+  static bool srvars = FALSE;  /* Use OTP/SPROM as global variables */
+
+  int sel = 0;                 /* where to read the srom. 0 - nowhere, 1 - otp, 2 - sprom */
+  uint sz = 0;                 /* srom size in bytes */
+  void *oh = NULL;
+  int rc = BCME_OK;
+
+  /* Bail out if we've dealt with OTP/SPROM before! */
+  if (srvars)
+    return 0;
+
+#if defined(BCM4328)
+  if (sbh->chip == BCM4328_CHIP_ID)
+    {
+      /* Access the SPROM if it is present */
+      if ((sz = srom_size (sbh, osh)) != 0)
+       {
+         sz <<= 1;
+         sel = 2;
+       }
+    }
+#endif
+#if defined(BCM4325)
+  if (sbh->chip == BCM4325_CHIP_ID)
+    {
+      uint32 cst = sbh->chipst & CST4325_SPROM_OTP_SEL_MASK;
+
+      /* Access OTP if it is present, powered on, and programmed */
+      if ((oh = otp_init (sbh)) != NULL && (otp_status (oh) & OTPS_GUP_SW))
+       {
+         sz = otp_size (oh);
+         sel = 1;
+       }
+      /* Access the SPROM if it is present and allow to be accessed */
+      else if ((cst == CST4325_OTP_PWRDN || cst == CST4325_SPROM_SEL) &&
+              (sz = srom_size (sbh, osh)) != 0)
+       {
+         sz <<= 1;
+         sel = 2;
+       }
+    }
+#endif /* BCM4325 */
+
+  /* Read CIS in OTP/SPROM */
+  if (sel != 0)
+    {
+      uint16 *srom;
+      uint8 *body = NULL;
+
+      ASSERT (sz);
+
+      /* Allocate memory */
+      if ((srom = (uint16 *) MALLOC (osh, sz)) == NULL)
+       return BCME_NOMEM;
+
+      /* Read CIS */
+      switch (sel)
+       {
+       case 1:
+         rc = otp_read_region (oh, OTP_SW_RGN, srom, sz);
+         body = (uint8 *) srom;
+         break;
+       case 2:
+         rc = srom_read (sbh, SB_BUS, curmap, osh, 0, sz, srom);
+         /* sprom has 8 byte h/w header */
+         body = (uint8 *) srom + SBSDIO_SPROM_CIS_OFFSET;
+         break;
+       default:
+         /* impossible to come here */
+         ASSERT (0);
+         break;
+       }
 
-       if (sb_pcmciarev(sbh) == 1) {
-               if (srom_read(PCMCIA_BUS, (void *)NULL, osh, 0, data_sz, (uint16 *)cis)) {
-                       MFREE(osh, cis, data_sz);
-                       return (-1);
+      /* Parse CIS */
+      if (rc == BCME_OK)
+       {
+         uint i, tpls = 0xffffffff;
+         /* # sdiod fns + common + extra */
+         uint8 *cis[SBSDIO_NUM_FUNCTION + 2];
+         uint ciss = 0;
+
+         /* each word is in host endian */
+         htol16_buf ((uint8 *) srom, sz);
+
+         ASSERT (body);
+
+         /* count cis tuple chains */
+         for (i = 0; i < sz && ciss < ARRAYSIZE (cis) && tpls != 0; i++)
+           {
+             cis[ciss++] = &body[i];
+             for (tpls = 0; i < sz - 1; tpls++)
+               {
+                 if (body[i++] == CISTPL_END)
+                   break;
+                 i += body[i] + 1;
                }
-               /* fix up endianess for 16-bit data vs 8-bit parsing */
-               ltoh16_buf((uint16 *)cis, data_sz);
-       } else
-               OSL_PCMCIA_READ_ATTR(osh, 0, cis, data_sz);
+           }
 
-       rc = srom_parsecis(osh, &cis, 1, vars, count);
+         /* call parser routine only when there are tuple chains */
+         if (ciss > 1)
+           rc = srom_parsecis (osh, cis, ciss, vars, varsz);
+       }
+
+      /* Clean up */
+      MFREE (osh, srom, sz);
 
-       MFREE(osh, cis, data_sz);
+      /* Make SROM variables global */
+      if (rc == BCME_OK)
+       {
+         rc = nvram_append ((void *) sbh, *vars, *varsz);
+         srvars = TRUE;
 
-       return (rc);
+         /* Tell the caller there is no individual SROM variables */
+         *vars = NULL;
+         *varsz = 0;
+       }
+    }
+
+  return rc;
+#else /* !BCMUSBDEV && !BCMSDIODEV */
+  /* Search flash nvram section for srom variables */
+  return initvars_flash_sb (sbh, vars, varsz);
+#endif /* !BCMUSBDEV && !BCMSDIODEV */
 }
 
+#ifdef BCMUSBDEV
+/* Return sprom size in 16-bit words */
+static uint
+srom_size (sb_t * sbh, osl_t * osh)
+{
+  uint size = 0;
+  if (SPROMBUS == PCMCIA_BUS)
+    {
+      uint32 origidx;
+      sdpcmd_regs_t *pcmregs;
+      bool wasup;
+
+      origidx = sb_coreidx (sbh);
+      pcmregs = sb_setcore (sbh, SB_PCMCIA, 0);
+      ASSERT (pcmregs);
+
+      if (!(wasup = sb_iscoreup (sbh)))
+       sb_core_reset (sbh, 0, 0);
+
+      /* not worry about earlier core revs */
+      if (sb_corerev (sbh) < 8)
+       goto done;
+
+      /* SPROM is accessible only in PCMCIA mode unless there is SDIO clock */
+      if (!(R_REG (osh, &pcmregs->corestatus) & CS_PCMCIAMODE))
+       goto done;
+
+      switch (SB_PCMCIA_READ (osh, pcmregs, SROM_INFO) & SRI_SZ_MASK)
+       {
+       case 1:
+         size = 256;           /* SROM_INFO == 1 means 4kbit */
+         break;
+       case 2:
+         size = 1024;          /* SROM_INFO == 2 means 16kbit */
+         break;
+       default:
+         break;
+       }
+
+    done:
+      if (!wasup)
+       sb_core_disable (sbh, 0);
+
+      sb_setcoreidx (sbh, origidx);
+    }
+  return size;
+}
+#endif /* def BCMUSBDEV */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/bcmutils.c b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/bcmutils.c
deleted file mode 100644 (file)
index c7b0b3d..0000000
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Misc useful OS-independent routines.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- * 
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.c,v 1.1.1.12 2006/02/27 03:43:16 honor Exp $
- */
-
-#include <typedefs.h>
-#include <bcmdefs.h>
-#include <stdarg.h>
-#include <bcmutils.h>
-#include <osl.h>
-#include <sbutils.h>
-#include <bcmnvram.h>
-#include <bcmendian.h>
-#include <bcmdevs.h>
-
-unsigned char bcm_ctype[] = {
-       _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,                        /* 0-7 */
-       _BCM_C, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C|_BCM_S, _BCM_C,
-       _BCM_C, /* 8-15 */
-       _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,                        /* 16-23 */
-       _BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,_BCM_C,                        /* 24-31 */
-       _BCM_S|_BCM_SP,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,                /* 32-39 */
-       _BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,                        /* 40-47 */
-       _BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,_BCM_D,                        /* 48-55 */
-       _BCM_D,_BCM_D,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,                        /* 56-63 */
-       _BCM_P, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X, _BCM_U|_BCM_X,
-       _BCM_U|_BCM_X, _BCM_U, /* 64-71 */
-       _BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,                        /* 72-79 */
-       _BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,_BCM_U,                        /* 80-87 */
-       _BCM_U,_BCM_U,_BCM_U,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_P,                        /* 88-95 */
-       _BCM_P, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X, _BCM_L|_BCM_X,
-       _BCM_L|_BCM_X, _BCM_L, /* 96-103 */
-       _BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L, /* 104-111 */
-       _BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L,_BCM_L, /* 112-119 */
-       _BCM_L,_BCM_L,_BCM_L,_BCM_P,_BCM_P,_BCM_P,_BCM_P,_BCM_C, /* 120-127 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,         /* 128-143 */
-       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,         /* 144-159 */
-       _BCM_S|_BCM_SP, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
-       _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 160-175 */
-       _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P,
-       _BCM_P, _BCM_P, _BCM_P, _BCM_P, _BCM_P, /* 176-191 */
-       _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U,
-       _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, /* 192-207 */
-       _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_P, _BCM_U, _BCM_U, _BCM_U,
-       _BCM_U, _BCM_U, _BCM_U, _BCM_U, _BCM_L, /* 208-223 */
-       _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L,
-       _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, /* 224-239 */
-       _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_P, _BCM_L, _BCM_L, _BCM_L,
-       _BCM_L, _BCM_L, _BCM_L, _BCM_L, _BCM_L /* 240-255 */
-};
-
-
-ulong
-bcm_strtoul(char *cp, char **endp, uint base)
-{
-       ulong result, value;
-       bool minus;
-
-       minus = FALSE;
-
-       while (bcm_isspace(*cp))
-               cp++;
-
-       if (cp[0] == '+')
-               cp++;
-       else if (cp[0] == '-') {
-               minus = TRUE;
-               cp++;
-       }
-
-       if (base == 0) {
-               if (cp[0] == '0') {
-                       if ((cp[1] == 'x') || (cp[1] == 'X')) {
-                               base = 16;
-                               cp = &cp[2];
-                       } else {
-                               base = 8;
-                               cp = &cp[1];
-                       }
-               } else
-                       base = 10;
-       } else if (base == 16 && (cp[0] == '0') && ((cp[1] == 'x') || (cp[1] == 'X'))) {
-               cp = &cp[2];
-       }
-
-       result = 0;
-
-       while (bcm_isxdigit(*cp) &&
-              (value = bcm_isdigit(*cp) ? *cp-'0' : bcm_toupper(*cp)-'A'+10) < base) {
-               result = result*base + value;
-               cp++;
-       }
-
-       if (minus)
-               result = (ulong)(result * -1);
-
-       if (endp)
-               *endp = (char *)cp;
-
-       return (result);
-}
-
-uchar
-bcm_toupper(uchar c)
-{
-       if (bcm_islower(c))
-               c -= 'a'-'A';
-       return (c);
-}
-
-char*
-bcm_ether_ntoa(struct ether_addr *ea, char *buf)
-{
-       sprintf(buf, "%02x:%02x:%02x:%02x:%02x:%02x",
-               ea->octet[0]&0xff, ea->octet[1]&0xff, ea->octet[2]&0xff,
-               ea->octet[3]&0xff, ea->octet[4]&0xff, ea->octet[5]&0xff);
-       return (buf);
-}
-
-
-/*
- * Search the name=value vars for a specific one and return its value.
- * Returns NULL if not found.
- */
-char*
-getvar(char *vars, char *name)
-{
-       char *s;
-       int len;
-
-       len = strlen(name);
-
-       /* first look in vars[] */
-       for (s = vars; s && *s;) {
-               /* CSTYLED */
-               if ((memcmp(s, name, len) == 0) && (s[len] == '='))
-                       return (&s[len+1]);
-
-               while (*s++)
-                       ;
-       }
-
-       /* then query nvram */
-       return (nvram_get(name));
-}
-
-/*
- * Search the vars for a specific one and return its value as
- * an integer. Returns 0 if not found.
- */
-int
-getintvar(char *vars, char *name)
-{
-       char *val;
-
-       if ((val = getvar(vars, name)) == NULL)
-               return (0);
-
-       return (bcm_strtoul(val, NULL, 0));
-}
-
-
-/*******************************************************************************
- * crc8
- *
- * Computes a crc8 over the input data using the polynomial:
- *
- *       x^8 + x^7 +x^6 + x^4 + x^2 + 1
- *
- * The caller provides the initial value (either CRC8_INIT_VALUE
- * or the previous returned value) to allow for processing of
- * discontiguous blocks of data.  When generating the CRC the
- * caller is responsible for complementing the final return value
- * and inserting it into the byte stream.  When checking, a final
- * return value of CRC8_GOOD_VALUE indicates a valid CRC.
- *
- * Reference: Dallas Semiconductor Application Note 27
- *   Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
- *     ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
- *     ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
- *
- * ****************************************************************************
- */
-
-static uint8 crc8_table[256] = {
-    0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
-    0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
-    0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
-    0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
-    0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
-    0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
-    0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
-    0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
-    0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
-    0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
-    0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
-    0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
-    0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
-    0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
-    0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
-    0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
-    0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
-    0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
-    0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
-    0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
-    0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
-    0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
-    0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
-    0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
-    0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
-    0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
-    0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
-    0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
-    0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
-    0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
-    0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
-    0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
-};
-
-#define CRC_INNER_LOOP(n, c, x) \
-       (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
-
-uint8
-hndcrc8(
-       uint8 *pdata,   /* pointer to array of data to process */
-       uint  nbytes,   /* number of input data bytes to process */
-       uint8 crc       /* either CRC8_INIT_VALUE or previous return value */
-)
-{
-       /* hard code the crc loop instead of using CRC_INNER_LOOP macro
-        * to avoid the undefined and unnecessary (uint8 >> 8) operation.
-        */
-       while (nbytes-- > 0)
-               crc = crc8_table[(crc ^ *pdata++) & 0xff];
-
-       return crc;
-}
-
-
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/cfe_env.c b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/cfe_env.c
new file mode 100644 (file)
index 0000000..9dd4eee
--- /dev/null
@@ -0,0 +1,233 @@
+/*
+ * NVRAM variable manipulation (Linux kernel half)
+ *
+ * Copyright 2001-2003, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+
+#include <typedefs.h>
+#include <osl.h>
+#include <bcmendian.h>
+
+#define NVRAM_SIZE       (0x1ff0)
+static char _nvdata[NVRAM_SIZE] __initdata;
+static char _valuestr[256] __initdata;
+
+/*
+ * TLV types.  These codes are used in the "type-length-value"
+ * encoding of the items stored in the NVRAM device (flash or EEPROM)
+ *
+ * The layout of the flash/nvram is as follows:
+ *
+ * <type> <length> <data ...> <type> <length> <data ...> <type_end>
+ *
+ * The type code of "ENV_TLV_TYPE_END" marks the end of the list.
+ * The "length" field marks the length of the data section, not
+ * including the type and length fields.
+ *
+ * Environment variables are stored as follows:
+ *
+ * <type_env> <length> <flags> <name> = <value>
+ *
+ * If bit 0 (low bit) is set, the length is an 8-bit value.
+ * If bit 0 (low bit) is clear, the length is a 16-bit value
+ * 
+ * Bit 7 set indicates "user" TLVs.  In this case, bit 0 still
+ * indicates the size of the length field.  
+ *
+ * Flags are from the constants below:
+ *
+ */
+#define ENV_LENGTH_16BITS      0x00    /* for low bit */
+#define ENV_LENGTH_8BITS       0x01
+
+#define ENV_TYPE_USER          0x80
+
+#define ENV_CODE_SYS(n,l) (((n)<<1)|(l))
+#define ENV_CODE_USER(n,l) ((((n)<<1)|(l)) | ENV_TYPE_USER)
+
+/*
+ * The actual TLV types we support
+ */
+
+#define ENV_TLV_TYPE_END       0x00    
+#define ENV_TLV_TYPE_ENV       ENV_CODE_SYS(0,ENV_LENGTH_8BITS)
+
+/*
+ * Environment variable flags 
+ */
+
+#define ENV_FLG_NORMAL         0x00    /* normal read/write */
+#define ENV_FLG_BUILTIN                0x01    /* builtin - not stored in flash */
+#define ENV_FLG_READONLY       0x02    /* read-only - cannot be changed */
+
+#define ENV_FLG_MASK           0xFF    /* mask of attributes we keep */
+#define ENV_FLG_ADMIN          0x100   /* lets us internally override permissions */
+
+
+/*  *********************************************************************
+    *  _nvram_read(buffer,offset,length)
+    *  
+    *  Read data from the NVRAM device
+    *  
+    *  Input parameters: 
+    *             buffer - destination buffer
+    *             offset - offset of data to read
+    *             length - number of bytes to read
+    *             
+    *  Return value:
+    *             number of bytes read, or <0 if error occured
+    ********************************************************************* */
+static int
+_nvram_read(unsigned char *nv_buf, unsigned char *buffer, int offset, int length)
+{
+    int i;
+    if (offset > NVRAM_SIZE)
+       return -1; 
+
+    for ( i = 0; i < length; i++) {
+       buffer[i] = ((volatile unsigned char*)nv_buf)[offset + i];
+    }
+    return length;
+}
+
+
+static char*
+_strnchr(const char *dest,int c,size_t cnt)
+{
+       while (*dest && (cnt > 0)) {
+       if (*dest == c) return (char *) dest;
+       dest++;
+       cnt--;
+       }
+       return NULL;
+}
+
+
+
+/*
+ * Core support API: Externally visible.
+ */
+
+/*
+ * Get the value of an NVRAM variable
+ * @param      name    name of variable to get
+ * @return     value of variable or NULL if undefined
+ */
+
+char* 
+cfe_env_get(unsigned char *nv_buf, char* name)
+{
+    int size;
+    unsigned char *buffer;
+    unsigned char *ptr;
+    unsigned char *envval;
+    unsigned int reclen;
+    unsigned int rectype;
+    int offset;
+    int flg;
+    
+    size = NVRAM_SIZE;
+    buffer = &_nvdata[0];
+
+    ptr = buffer;
+    offset = 0;
+
+    /* Read the record type and length */
+    if (_nvram_read(nv_buf, ptr,offset,1) != 1) {
+       goto error;
+    }
+    
+    while ((*ptr != ENV_TLV_TYPE_END)  && (size > 1)) {
+
+       /* Adjust pointer for TLV type */
+       rectype = *(ptr);
+       offset++;
+       size--;
+
+       /* 
+        * Read the length.  It can be either 1 or 2 bytes
+        * depending on the code 
+        */
+       if (rectype & ENV_LENGTH_8BITS) {
+           /* Read the record type and length - 8 bits */
+           if (_nvram_read(nv_buf, ptr,offset,1) != 1) {
+               goto error;
+           }
+           reclen = *(ptr);
+           size--;
+           offset++;
+       }
+       else {
+           /* Read the record type and length - 16 bits, MSB first */
+           if (_nvram_read(nv_buf, ptr,offset,2) != 2) {
+               goto error;
+           }
+           reclen = (((unsigned int) *(ptr)) << 8) + (unsigned int) *(ptr+1);
+           size -= 2;
+           offset += 2;
+       }
+
+       if (reclen > size)
+           break;      /* should not happen, bad NVRAM */
+
+       switch (rectype) {
+           case ENV_TLV_TYPE_ENV:
+               /* Read the TLV data */
+               if (_nvram_read(nv_buf, ptr,offset,reclen) != reclen)
+                   goto error;
+               flg = *ptr++;
+               envval = (unsigned char *) _strnchr(ptr,'=',(reclen-1));
+               if (envval) {
+                   *envval++ = '\0';
+                   memcpy(_valuestr,envval,(reclen-1)-(envval-ptr));
+                   _valuestr[(reclen-1)-(envval-ptr)] = '\0';
+#if 0                  
+                   printk(KERN_INFO "NVRAM:%s=%s\n", ptr, _valuestr);
+#endif
+                   if(!strcmp(ptr, name)){
+                       return _valuestr;
+                   }
+                   if((strlen(ptr) > 1) && !strcmp(&ptr[1], name))
+                       return _valuestr;
+               }
+               break;
+               
+           default: 
+               /* Unknown TLV type, skip it. */
+               break;
+           }
+
+       /*
+        * Advance to next TLV 
+        */
+               
+       size -= (int)reclen;
+       offset += reclen;
+
+       /* Read the next record type */
+       ptr = buffer;
+       if (_nvram_read(nv_buf, ptr,offset,1) != 1)
+           goto error;
+       }
+
+error:
+    return NULL;
+
+}
+
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/compressed/Makefile b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/compressed/Makefile
deleted file mode 100644 (file)
index 2942c8e..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Makefile for Broadcom BCM947XX boards
-#
-# Copyright 2001-2003, Broadcom Corporation
-# All Rights Reserved.
-# 
-# THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
-# KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
-# SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
-# FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
-#
-# $Id: Makefile,v 1.2 2005/04/02 12:12:57 wbx Exp $
-#
-
-OBJCOPY_ARGS   = -O binary -R .reginfo -R .note -R .comment -R .mdebug -S
-SYSTEM         ?= $(TOPDIR)/vmlinux
-
-all: vmlinuz
-
-# Don't build dependencies, this may die if $(CC) isn't gcc
-dep:
-
-# Create a gzipped version named vmlinuz for compatibility
-vmlinuz: piggy
-       gzip -c9 $< > $@
-
-piggy: $(SYSTEM)
-       $(OBJCOPY) $(OBJCOPY_ARGS) $< $@
-
-mrproper: clean
-
-clean:
-       rm -f vmlinuz piggy
index 9da9572aba4b5efa4d2b7a0c6d9706cff171c398..ff3e031978f4aa7caea3f84d93698cbecbd34566 100644 (file)
@@ -6,8 +6,10 @@
 
 _export(bcm947xx_sbh)
 
+_export(sb_alp_clock)
 _export(sb_attach)
 _export(sb_kattach)
+_export(sb_backplane64)
 _export(sb_boardtype)
 _export(sb_boardvendor)
 _export(sb_btcgpiowar)
@@ -24,6 +26,7 @@ _export(sb_core_disable)
 _export(sb_core_reset)
 _export(sb_core_tofixup)
 _export(sb_coreflags)
+_export(sb_coreflags_wo)
 _export(sb_coreflagshi)
 _export(sb_coreidx)
 _export(sb_coreregs)
@@ -39,26 +42,30 @@ _export(sb_gpioled)
 _export(sb_gpioin)
 _export(sb_gpioout)
 _export(sb_gpioouten)
+_export(sb_gpiopull)
 _export(sb_gpiotimerval)
 _export(sb_irq)
 _export(sb_iscoreup)
 _export(sb_pci_setup)
+_export(sb_pci_sleep)
+_export(sb_pci_down)
+_export(sb_pci_up)
 _export(sb_pcirev)
 _export(sb_pcmcia_init)
 _export(sb_pcmciarev)
+_export(sb_pmu_paref_ldo_enable)
+_export(sb_pmu_rcal)
+_export(sb_pmu_set_ldo_voltage)
+_export(sb_deregister_intr_callback)
 _export(sb_register_intr_callback)
 _export(sb_setcore)
 _export(sb_setcoreidx)
 _export(sb_war16165)
-_export(sb_war32414_forceHT)
+_export(sb_war42780_clkreq)
 _export(sb_osh)
-               
+
 _export(getvar)
 _export(getintvar)
-_export(bcm_strtoul)
-_export(bcm_ctype)
-_export(bcm_toupper)
-_export(bcm_ether_ntoa)
 
 _export(nvram_get)
 _export(nvram_getall)
index c31f58bac6350208386b22cf908306a6d68adc54..37b41e1ec3b9001e986f8879e32e0c7d3adb6e17 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <typedefs.h>
 #include <osl.h>
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <bcmdevs.h>
 
@@ -122,7 +121,7 @@ gpio_init(void)
 {
        int i;
 
-       if (!(gpio_sbh = sb_kattach()))
+       if (!(gpio_sbh = sb_kattach(SB_OSH)))
                return -ENODEV;
 
        sb_gpiosetcore(gpio_sbh);
index 6502078de1df76bef157139f9deed8cea2e4641e..1f1dc10efaa279ef3620ea1dcf900933562ee09f 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * BCM47XX support code for some chipcommon (old extif) facilities (uart)
+ * BCM47XX support code for some chipcommon facilities (uart, jtagm)
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,28 +9,52 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: hndchipc.c,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
 #include <bcmdefs.h>
 #include <osl.h>
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <bcmdevs.h>
 #include <bcmnvram.h>
 #include <sbconfig.h>
-#include <sbextif.h>
 #include <sbchipc.h>
+#include <sbextif.h>
+#include <hndchipc.h>
 #include <hndcpu.h>
 
-/*
- * Returns TRUE if an external UART exists at the given base
- * register.
+/* debug/trace */
+#define        CC_ERROR(args)
+
+#ifdef BCMDBG
+#define        CC_MSG(args)    printf args
+#else
+#define        CC_MSG(args)
+#endif /* BCMDBG */
+
+/* interested chipcommon interrupt source
+ *  - GPIO
+ *  - EXTIF
+ *  - ECI
+ *  - PMU
+ *  - UART
  */
-static bool
-BCMINITFN(serial_exists)(osl_t *osh, uint8 *regs)
-{
+#define        MAX_CC_INT_SOURCE 5
+
+/* chipc secondary isr info */
+typedef struct {
+       uint intmask;           /* int mask */
+       cc_isr_fn isr;          /* secondary isr handler */
+       void *cbdata;           /* pointer to private data */
+} cc_isr_info_t;
+
+static cc_isr_info_t cc_isr_desc[MAX_CC_INT_SOURCE];
+
+/* chip common intmask */
+static uint32 cc_intmask = 0;
+
+static bool BCMINITFN(serial_exists) (osl_t * osh, uint8 * regs) {
        uint8 save_mcr, status1;
 
        save_mcr = R_REG(osh, &regs[UART_MCR]);
@@ -41,118 +65,276 @@ BCMINITFN(serial_exists)(osl_t *osh, uint8 *regs)
        return (status1 == 0x90);
 }
 
+static void __init sb_extif_serial_init(sb_t * sbh, void *regs,
+                                       sb_serial_init_fn add)
+{
+       osl_t *osh = sb_osh(sbh);
+       extifregs_t *eir = (extifregs_t *) regs;
+       sbconfig_t *sb;
+       ulong base;
+       uint irq;
+       int i, n;
+
+       /* Determine external UART register base */
+       sb = (sbconfig_t *) ((ulong) eir + SBCONFIGOFF);
+       base = EXTIF_CFGIF_BASE(sb_base(R_REG(osh, &sb->sbadmatch1)));
+
+       /* Determine IRQ */
+       irq = sb_irq(sbh);
+
+       /* Disable GPIO interrupt initially */
+       W_REG(osh, &eir->gpiointpolarity, 0);
+       W_REG(osh, &eir->gpiointmask, 0);
+
+       /* Search for external UARTs */
+       n = 2;
+       for (i = 0; i < 2; i++) {
+               regs = (void *)REG_MAP(base + (i * 8), 8);
+               if (serial_exists(osh, regs)) {
+                       /* Set GPIO 1 to be the external UART IRQ */
+                       W_REG(osh, &eir->gpiointmask, 2);
+                       /* XXXDetermine external UART clock */
+                       if (add)
+                               add(regs, irq, 13500000, 0);
+               }
+       }
+
+       /* Add internal UART if enabled */
+       if (R_REG(osh, &eir->corecontrol) & CC_UE)
+               if (add)
+                       add((void *)&eir->uartdata, irq, sb_clock(sbh), 2);
+}
+
 /*
  * Initializes UART access. The callback function will be called once
  * per found UART.
  */
-void
-BCMINITFN(sb_serial_init)(sb_t *sbh, void (*add)(void *regs, uint irq, uint baud_base,
-                                                 uint reg_shift))
-{
+void BCMINITFN(sb_serial_init) (sb_t * sbh, sb_serial_init_fn add) {
        osl_t *osh;
        void *regs;
-       ulong base;
+       chipcregs_t *cc;
+       uint32 rev, cap, pll, baud_base, div;
        uint irq;
        int i, n;
 
        osh = sb_osh(sbh);
 
-       if ((regs = sb_setcore(sbh, SB_EXTIF, 0))) {
-               extifregs_t *eir = (extifregs_t *) regs;
-               sbconfig_t *sb;
-
-               /* Determine external UART register base */
-               sb = (sbconfig_t *)((ulong) eir + SBCONFIGOFF);
-               base = EXTIF_CFGIF_BASE(sb_base(R_REG(osh, &sb->sbadmatch1)));
-
-               /* Determine IRQ */
-               irq = sb_irq(sbh);
-
-               /* Disable GPIO interrupt initially */
-               W_REG(osh, &eir->gpiointpolarity, 0);
-               W_REG(osh, &eir->gpiointmask, 0);
-
-               /* Search for external UARTs */
-               n = 2;
-               for (i = 0; i < 2; i++) {
-                       regs = (void *) REG_MAP(base + (i * 8), 8);
-                       if (serial_exists(osh, regs)) {
-                               /* Set GPIO 1 to be the external UART IRQ */
-                               W_REG(osh, &eir->gpiointmask, 2);
-                               /* XXXDetermine external UART clock */
-                               if (add)
-                                       add(regs, irq, 13500000, 0);
-                       }
-               }
+       regs = sb_setcore(sbh, SB_EXTIF, 0);
+       if (regs) {
+               sb_extif_serial_init(sbh, regs, add);
+               return;
+       }
 
-               /* Add internal UART if enabled */
-               if (R_REG(osh, &eir->corecontrol) & CC_UE)
-                       if (add)
-                               add((void *) &eir->uartdata, irq, sb_clock(sbh), 2);
-       } else if ((regs = sb_setcore(sbh, SB_CC, 0))) {
-               chipcregs_t *cc = (chipcregs_t *) regs;
-               uint32 rev, cap, pll, baud_base, div;
+       cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
+       ASSERT(cc);
 
-               /* Determine core revision and capabilities */
-               rev = sb_corerev(sbh);
-               cap = R_REG(osh, &cc->capabilities);
-               pll = cap & CAP_PLL_MASK;
+       /* Determine core revision and capabilities */
+       rev = sbh->ccrev;
+       cap = sbh->cccaps;
+       pll = cap & CC_CAP_PLL_MASK;
 
-               /* Determine IRQ */
-               irq = sb_irq(sbh);
+       /* Determine IRQ */
+       irq = sb_irq(sbh);
 
-               if (pll == PLL_TYPE1) {
-                       /* PLL clock */
-                       baud_base = sb_clock_rate(pll,
-                                                 R_REG(osh, &cc->clockcontrol_n),
-                                                 R_REG(osh, &cc->clockcontrol_m2));
-                       div = 1;
-               } else {
+       if (pll == PLL_TYPE1) {
+               /* PLL clock */
+               baud_base = sb_clock_rate(pll,
+                                         R_REG(osh, &cc->clockcontrol_n),
+                                         R_REG(osh, &cc->clockcontrol_m2));
+               div = 1;
+       } else {
+               /* 5354 chip common uart uses a constant clock
+                * frequency of 25MHz */
+               if (sb_corerev(sbh) == 20) {
+                       /* Set the override bit so we don't divide it */
+                       W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
+                       baud_base = 25000000;
+               } else if (rev >= 11 && rev != 15) {
                        /* Fixed ALP clock */
-                       if (rev >= 11 && rev != 15) {
-                               baud_base = 20000000;
-                               div = 1;
-                               /* Set the override bit so we don't divide it */
-                               W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
-                       }
+                       baud_base = sb_alp_clock(sbh);
+                       div = 1;
+                       /* Turn off UART clock before switching clock source */
+                       if (rev >= 21)
+                               AND_REG(osh, &cc->corecontrol, ~CC_UARTCLKEN);
+                       /* Set the override bit so we don't divide it */
+                       OR_REG(osh, &cc->corecontrol, CC_UARTCLKO);
+                       if (rev >= 21)
+                               OR_REG(osh, &cc->corecontrol, CC_UARTCLKEN);
+               } else if (rev >= 3) {
                        /* Internal backplane clock */
-                       else if (rev >= 3) {
-                               baud_base = sb_clock(sbh);
-                               div = 2;        /* Minimum divisor */
-                               W_REG(osh, &cc->clkdiv,
-                                     ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
-                       }
+                       baud_base = sb_clock(sbh);
+                       div = 2;        /* Minimum divisor */
+                       W_REG(osh, &cc->clkdiv,
+                             ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
+               } else {
                        /* Fixed internal backplane clock */
-                       else {
-                               baud_base = 88000000;
-                               div = 48;
-                       }
+                       baud_base = 88000000;
+                       div = 48;
+               }
 
-                       /* Clock source depends on strapping if UartClkOverride is unset */
-                       if ((rev > 0) &&
-                           ((R_REG(osh, &cc->corecontrol) & CC_UARTCLKO) == 0)) {
-                               if ((cap & CAP_UCLKSEL) == CAP_UINTCLK) {
-                                       /* Internal divided backplane clock */
-                                       baud_base /= div;
-                               } else {
-                                       /* Assume external clock of 1.8432 MHz */
-                                       baud_base = 1843200;
-                               }
+               /* Clock source depends on strapping if UartClkOverride is unset */
+               if ((rev > 0)
+                   && ((R_REG(osh, &cc->corecontrol) & CC_UARTCLKO) == 0)) {
+                       if ((cap & CC_CAP_UCLKSEL) == CC_CAP_UINTCLK) {
+                               /* Internal divided backplane clock */
+                               baud_base /= div;
+                       } else {
+                               /* Assume external clock of 1.8432 MHz */
+                               baud_base = 1843200;
                        }
                }
+       }
 
-               /* Add internal UARTs */
-               n = cap & CAP_UARTS_MASK;
-               for (i = 0; i < n; i++) {
-                       /* Register offset changed after revision 0 */
-                       if (rev)
-                               regs = (void *)((ulong) &cc->uart0data + (i * 256));
-                       else
-                               regs = (void *)((ulong) &cc->uart0data + (i * 8));
+       /* Add internal UARTs */
+       n = cap & CC_CAP_UARTS_MASK;
+       for (i = 0; i < n; i++) {
+               /* Register offset changed after revision 0 */
+               if (rev)
+                       regs = (void *)((ulong) & cc->uart0data + (i * 256));
+               else
+                       regs = (void *)((ulong) & cc->uart0data + (i * 8));
 
-                       if (add)
-                               add(regs, irq, baud_base, 0);
+               if (add)
+                       add(regs, irq, baud_base, 0);
+       }
+}
+
+#if 0
+/*
+ * Initialize jtag master and return handle for
+ * jtag_rwreg. Returns NULL on failure.
+ */
+void *sb_jtagm_init(sb_t * sbh, uint clkd, bool exttap)
+{
+       void *regs;
+
+       if ((regs = sb_setcore(sbh, SB_CC, 0)) != NULL) {
+               chipcregs_t *cc = (chipcregs_t *) regs;
+               uint32 tmp;
+
+               /*
+                * Determine jtagm availability from
+                * core revision and capabilities.
+                */
+
+               /*
+                * Corerev 10 has jtagm, but the only chip
+                * with it does not have a mips, and
+                * the layout of the jtagcmd register is
+                * different. We'll only accept >= 11.
+                */
+               if (sbh->ccrev < 11)
+                       return (NULL);
+
+               if ((sbh->cccaps & CC_CAP_JTAGP) == 0)
+                       return (NULL);
+
+               /* Set clock divider if requested */
+               if (clkd != 0) {
+                       tmp = R_REG(osh, &cc->clkdiv);
+                       tmp =
+                           (tmp & ~CLKD_JTAG) | ((clkd << CLKD_JTAG_SHIFT) &
+                                                 CLKD_JTAG);
+                       W_REG(osh, &cc->clkdiv, tmp);
                }
+
+               /* Enable jtagm */
+               tmp = JCTRL_EN | (exttap ? JCTRL_EXT_EN : 0);
+               W_REG(osh, &cc->jtagctrl, tmp);
        }
+
+       return (regs);
+}
+
+void sb_jtagm_disable(osl_t * osh, void *h)
+{
+       chipcregs_t *cc = (chipcregs_t *) h;
+
+       W_REG(osh, &cc->jtagctrl, R_REG(osh, &cc->jtagctrl) & ~JCTRL_EN);
 }
 
+/*
+ * Read/write a jtag register. Assumes a target with
+ * 8 bit IR and 32 bit DR.
+ */
+#define        IRWIDTH         8       /* Default Instruction Register width */
+#define        DRWIDTH         32      /* Default Data Register width */
+
+uint32 jtag_rwreg(osl_t * osh, void *h, uint32 ir, uint32 dr)
+{
+       chipcregs_t *cc = (chipcregs_t *) h;
+       uint32 tmp;
+
+       W_REG(osh, &cc->jtagir, ir);
+       W_REG(osh, &cc->jtagdr, dr);
+       tmp = JCMD_START | JCMD_ACC_IRDR |
+           ((IRWIDTH - 1) << JCMD_IRW_SHIFT) | (DRWIDTH - 1);
+       W_REG(osh, &cc->jtagcmd, tmp);
+       while (((tmp = R_REG(osh, &cc->jtagcmd)) & JCMD_BUSY) == JCMD_BUSY) {
+               /* OSL_DELAY(1); */
+       }
+
+       tmp = R_REG(osh, &cc->jtagdr);
+       return (tmp);
+}
+#endif
+
+/*
+ * Interface to register chipc secondary isr
+ */
+bool
+BCMINITFN(sb_cc_register_isr) (sb_t * sbh, cc_isr_fn isr, uint32 ccintmask,
+                              void *cbdata) {
+       bool done = FALSE;
+       chipcregs_t *regs;
+       uint origidx;
+       uint i;
+
+       /* Save the current core index */
+       origidx = sb_coreidx(sbh);
+       regs = sb_setcore(sbh, SB_CC, 0);
+       ASSERT(regs);
+
+       for (i = 0; i < MAX_CC_INT_SOURCE; i++) {
+               if (cc_isr_desc[i].isr == NULL) {
+                       cc_isr_desc[i].isr = isr;
+                       cc_isr_desc[i].cbdata = cbdata;
+                       cc_isr_desc[i].intmask = ccintmask;
+                       done = TRUE;
+                       break;
+               }
+       }
+
+       if (done) {
+               cc_intmask = R_REG(sb_osh(sbh), &regs->intmask);
+               cc_intmask |= ccintmask;
+               W_REG(sb_osh(sbh), &regs->intmask, cc_intmask);
+       }
+
+       /* restore original coreidx */
+       sb_setcoreidx(sbh, origidx);
+       return done;
+}
+
+/* 
+ * chipc primary interrupt handler
+ */
+void sb_cc_isr(sb_t * sbh, chipcregs_t * regs)
+{
+       uint32 ccintstatus;
+       uint32 intstatus;
+       uint32 i;
+
+       /* prior to rev 21 chipc interrupt means uart and gpio */
+       if (sbh->ccrev >= 21)
+               ccintstatus = R_REG(sb_osh(sbh), &regs->intstatus) & cc_intmask;
+       else
+               ccintstatus = (CI_UART | CI_GPIO);
+
+       for (i = 0; i < MAX_CC_INT_SOURCE; i++) {
+               if ((cc_isr_desc[i].isr != NULL) &&
+                   (intstatus = (cc_isr_desc[i].intmask & ccintstatus))) {
+                       (cc_isr_desc[i].isr) (cc_isr_desc[i].cbdata, intstatus);
+               }
+       }
+}
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/hndpmu.c b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/hndpmu.c
new file mode 100644 (file)
index 0000000..c7d7b3b
--- /dev/null
@@ -0,0 +1,1257 @@
+/*
+ * Misc utility routines for accessing PMU corerev specific features
+ * of the SiliconBackplane-based Broadcom chips.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#include <typedefs.h>
+#include <bcmdefs.h>
+#include <osl.h>
+#include <sbutils.h>
+#include <bcmdevs.h>
+#include <sbconfig.h>
+#include <sbchipc.h>
+#include <hndpmu.h>
+
+/* debug/trace */
+#define        PMU_ERROR(args)
+
+#ifdef BCMDBG
+#define        PMU_MSG(args)   printf args
+#else
+#define        PMU_MSG(args)
+#endif /* BCMDBG */
+
+/* PMU & control */
+/* PMU rev 0 pll control for BCM4328 and BCM5354 */
+static void sb_pmu0_pllinit0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+                             uint32 xtal);
+static uint32 sb_pmu0_alpclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+static uint32 sb_pmu0_cpuclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+/* PMU rev 0 pll control for BCM4325 BCM4329 */
+static void sb_pmu1_pllinit0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+                             uint32 xtal);
+static uint32 sb_pmu1_cpuclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+static uint32 sb_pmu1_alpclk0 (sb_t * sbh, osl_t * osh, chipcregs_t * cc);
+
+/* Setup switcher voltage */
+void
+BCMINITFN (sb_pmu_set_switcher_voltage) (sb_t * sbh, osl_t * osh,
+                                        uint8 bb_voltage, uint8 rf_voltage)
+{
+  chipcregs_t *cc;
+  uint origidx;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  W_REG (osh, &cc->regcontrol_addr, 0x01);
+  W_REG (osh, &cc->regcontrol_data, (uint32) (bb_voltage & 0x1f) << 22);
+
+  W_REG (osh, &cc->regcontrol_addr, 0x00);
+  W_REG (osh, &cc->regcontrol_data, (uint32) (rf_voltage & 0x1f) << 14);
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+
+void
+sb_pmu_set_ldo_voltage (sb_t * sbh, osl_t * osh, uint8 ldo, uint8 voltage)
+{
+  uint8 sr_cntl_shift, rc_shift, shift, mask;
+  uint32 addr;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+    case BCM5354_CHIP_ID:
+      switch (ldo)
+       {
+       case SET_LDO_VOLTAGE_LDO1:
+         addr = 2;
+         sr_cntl_shift = 8;
+         rc_shift = 17;
+         mask = 0xf;
+         break;
+       case SET_LDO_VOLTAGE_LDO2:
+         addr = 3;
+         sr_cntl_shift = 0;
+         rc_shift = 1;
+         mask = 0xf;
+         break;
+       case SET_LDO_VOLTAGE_LDO3:
+         addr = 3;
+         sr_cntl_shift = 0;
+         rc_shift = 9;
+         mask = 0xf;
+         break;
+       case SET_LDO_VOLTAGE_PAREF:
+         addr = 3;
+         sr_cntl_shift = 0;
+         rc_shift = 17;
+         mask = 0x3f;
+         break;
+       default:
+         ASSERT (FALSE);
+         return;
+       }
+      break;
+    case BCM4312_CHIP_ID:
+      switch (ldo)
+       {
+       case SET_LDO_VOLTAGE_PAREF:
+         addr = 0;
+         sr_cntl_shift = 0;
+         rc_shift = 21;
+         mask = 0x3f;
+         break;
+       default:
+         ASSERT (FALSE);
+         return;
+       }
+      break;
+    default:
+      ASSERT (FALSE);
+      return;
+    }
+
+  shift = sr_cntl_shift + rc_shift;
+
+  sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, regcontrol_addr),
+             ~0, addr);
+  sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, regcontrol_data),
+             mask << shift, (voltage & mask) << shift);
+}
+
+void
+sb_pmu_paref_ldo_enable (sb_t * sbh, osl_t * osh, bool enable)
+{
+  uint ldo = 0;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      ldo = RES4328_PA_REF_LDO;
+      break;
+    case BCM5354_CHIP_ID:
+      ldo = RES5354_PA_REF_LDO;
+      break;
+    case BCM4312_CHIP_ID:
+      ldo = RES4312_PA_REF_LDO;
+      break;
+    default:
+      return;
+    }
+
+  sb_corereg (sbh, SB_CC_IDX, OFFSETOF (chipcregs_t, min_res_mask),
+             PMURES_BIT (ldo), enable ? PMURES_BIT (ldo) : 0);
+}
+
+uint16 BCMINITFN (sb_pmu_fast_pwrup_delay) (sb_t * sbh, osl_t * osh)
+{
+  uint16 delay = PMU_MAX_TRANSITION_DLY;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      delay = 7000;
+      break;
+
+    case BCM4325_CHIP_ID:
+    case BCM4312_CHIP_ID:
+#ifdef BCMQT
+      delay = 70;
+#else
+      delay = 2800;
+#endif
+      break;
+
+    default:
+      PMU_MSG (("No PMU fast power up delay specified "
+               "for chip %x rev %d, using default %d us\n",
+               sbh->chip, sbh->chiprev, delay));
+      break;
+    }
+
+  return delay;
+}
+
+uint32 BCMINITFN (sb_pmu_force_ilp) (sb_t * sbh, osl_t * osh, bool force)
+{
+  chipcregs_t *cc;
+  uint origidx;
+  uint32 oldpmucontrol;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  oldpmucontrol = R_REG (osh, &cc->pmucontrol);
+  if (force)
+    W_REG (osh, &cc->pmucontrol, oldpmucontrol &
+          ~(PCTL_HT_REQ_EN | PCTL_ALP_REQ_EN));
+  else
+    W_REG (osh, &cc->pmucontrol, oldpmucontrol |
+          (PCTL_HT_REQ_EN | PCTL_ALP_REQ_EN));
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+
+  return oldpmucontrol;
+}
+
+/* Setup min/max resources and up/down timers */
+typedef struct
+{
+  uint8 resnum;
+  uint16 updown;
+} pmu_res_updown_t;
+
+typedef struct
+{
+  uint8 resnum;
+  int8 action;                 /* 0 - set, 1 - add, -1 - remove */
+  uint32 depend_mask;
+} pmu_res_depend_t;
+
+static const pmu_res_updown_t
+BCMINITDATA (bcm4328a0_res_updown)[] =
+{
+  {
+  RES4328_EXT_SWITCHER_PWM, 0x0101},
+  {
+  RES4328_BB_SWITCHER_PWM, 0x1f01},
+  {
+  RES4328_BB_SWITCHER_BURST, 0x010f},
+  {
+  RES4328_BB_EXT_SWITCHER_BURST, 0x0101},
+  {
+  RES4328_ILP_REQUEST, 0x0202},
+  {
+  RES4328_RADIO_SWITCHER_PWM, 0x0f01},
+  {
+  RES4328_RADIO_SWITCHER_BURST, 0x0f01},
+  {
+  RES4328_ROM_SWITCH, 0x0101},
+  {
+  RES4328_PA_REF_LDO, 0x0f01},
+  {
+  RES4328_RADIO_LDO, 0x0f01},
+  {
+  RES4328_AFE_LDO, 0x0f01},
+  {
+  RES4328_PLL_LDO, 0x0f01},
+  {
+  RES4328_BG_FILTBYP, 0x0101},
+  {
+  RES4328_TX_FILTBYP, 0x0101},
+  {
+  RES4328_RX_FILTBYP, 0x0101},
+  {
+  RES4328_XTAL_PU, 0x0101},
+  {
+  RES4328_XTAL_EN, 0xa001},
+  {
+  RES4328_BB_PLL_FILTBYP, 0x0101},
+  {
+  RES4328_RF_PLL_FILTBYP, 0x0101},
+  {
+  RES4328_BB_PLL_PU, 0x0701}
+};
+
+static const pmu_res_depend_t
+BCMINITDATA (bcm4328a0_res_depend)[] =
+{
+  /* Adjust ILP request resource not to force ext/BB switchers into burst mode */
+  {
+  RES4328_ILP_REQUEST, 0,
+      PMURES_BIT (RES4328_EXT_SWITCHER_PWM) |
+      PMURES_BIT (RES4328_BB_SWITCHER_PWM)}
+};
+
+#ifdef BCMQT                   /* for power save on slow QT/small beacon interval */
+static const pmu_res_updown_t
+BCMINITDATA (bcm4325a0_res_updown_qt)[] =
+{
+  {
+  RES4325_HT_AVAIL, 0x0300},
+  {
+  RES4325_BBPLL_PWRSW_PU, 0x0101},
+  {
+  RES4325_RFPLL_PWRSW_PU, 0x0101},
+  {
+  RES4325_ALP_AVAIL, 0x0100},
+  {
+  RES4325_XTAL_PU, 0x1000},
+  {
+  RES4325_LNLDO1_PU, 0x0800},
+  {
+  RES4325_CLDO_CBUCK_PWM, 0x0101},
+  {
+  RES4325_CBUCK_PWM, 0x0803}
+};
+#else
+static const pmu_res_updown_t
+BCMINITDATA (bcm4325a0_res_updown)[] =
+{
+  {
+  RES4325_XTAL_PU, 0x1501}
+};
+#endif /* !BCMQT */
+
+static const pmu_res_depend_t
+BCMINITDATA (bcm4325a0_res_depend)[] =
+{
+  /* Adjust HT Avail resource dependencies */
+  {
+  RES4325_HT_AVAIL, 1,
+      PMURES_BIT (RES4325_RX_PWRSW_PU) | PMURES_BIT (RES4325_TX_PWRSW_PU) |
+      PMURES_BIT (RES4325_LOGEN_PWRSW_PU) | PMURES_BIT (RES4325_AFE_PWRSW_PU)}
+};
+
+void BCMINITFN (sb_pmu_res_init) (sb_t * sbh, osl_t * osh)
+{
+  chipcregs_t *cc;
+  uint origidx;
+  const pmu_res_updown_t *pmu_res_updown_table = NULL;
+  int pmu_res_updown_table_sz = 0;
+  const pmu_res_depend_t *pmu_res_depend_table = NULL;
+  int pmu_res_depend_table_sz = 0;
+  uint32 min_mask = 0, max_mask = 0;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      /* Down to ILP request excluding ROM */
+      min_mask = PMURES_BIT (RES4328_EXT_SWITCHER_PWM) |
+       PMURES_BIT (RES4328_BB_SWITCHER_PWM) | PMURES_BIT (RES4328_XTAL_EN);
+#ifdef BCMROMOFFLOAD
+      /* Including ROM */
+      min_mask |= PMURES_BIT (RES4328_ROM_SWITCH);
+#endif
+      /* Allow (but don't require) PLL to turn on */
+      max_mask = 0xfffff;
+      pmu_res_updown_table = bcm4328a0_res_updown;
+      pmu_res_updown_table_sz = ARRAYSIZE (bcm4328a0_res_updown);
+      pmu_res_depend_table = bcm4328a0_res_depend;
+      pmu_res_depend_table_sz = ARRAYSIZE (bcm4328a0_res_depend);
+      break;
+    case BCM4312_CHIP_ID:
+      /* keep default
+       * min_mask = 0xcbb; max_mask = 0x7ffff;
+       * pmu_res_updown_table_sz = 0;
+       * pmu_res_depend_table_sz = 0;
+       */
+      break;
+    case BCM5354_CHIP_ID:
+      /* Allow (but don't require) PLL to turn on */
+      max_mask = 0xfffff;
+      break;
+
+    case BCM4325_CHIP_ID:
+      /* Leave OTP powered up and power it down later. */
+      min_mask =
+       PMURES_BIT (RES4325_CBUCK_BURST) | PMURES_BIT (RES4325_LNLDO2_PU);
+      if (((sbh->chipst & CST4325_PMUTOP_2B_MASK) >>
+          CST4325_PMUTOP_2B_SHIFT) == 1)
+       min_mask |= PMURES_BIT (RES4325_CLDO_CBUCK_BURST);
+      /* Allow (but don't require) PLL to turn on */
+      max_mask = 0x3fffff;
+#ifdef BCMQT
+      pmu_res_updown_table = bcm4325a0_res_updown_qt;
+      pmu_res_updown_table_sz = ARRAYSIZE (bcm4325a0_res_updown_qt);
+#else
+      pmu_res_updown_table = bcm4325a0_res_updown;
+      pmu_res_updown_table_sz = ARRAYSIZE (bcm4325a0_res_updown);
+      pmu_res_depend_table = bcm4325a0_res_depend;
+      pmu_res_depend_table_sz = ARRAYSIZE (bcm4325a0_res_depend);
+#endif
+      break;
+
+    default:
+      break;
+    }
+
+  /* Program up/down timers */
+  while (pmu_res_updown_table_sz--)
+    {
+      ASSERT (pmu_res_updown_table);
+      W_REG (osh, &cc->res_table_sel,
+            pmu_res_updown_table[pmu_res_updown_table_sz].resnum);
+      W_REG (osh, &cc->res_updn_timer,
+            pmu_res_updown_table[pmu_res_updown_table_sz].updown);
+    }
+
+  /* Program resource dependencies table */
+  while (pmu_res_depend_table_sz--)
+    {
+      ASSERT (pmu_res_depend_table);
+      W_REG (osh, &cc->res_table_sel,
+            pmu_res_depend_table[pmu_res_depend_table_sz].resnum);
+      switch (pmu_res_depend_table[pmu_res_depend_table_sz].action)
+       {
+       case 0:
+         W_REG (osh, &cc->res_dep_mask,
+                pmu_res_depend_table[pmu_res_depend_table_sz].depend_mask);
+         break;
+       case 1:
+         OR_REG (osh, &cc->res_dep_mask,
+                 pmu_res_depend_table[pmu_res_depend_table_sz].depend_mask);
+         break;
+       case -1:
+         AND_REG (osh, &cc->res_dep_mask,
+                  ~pmu_res_depend_table[pmu_res_depend_table_sz].
+                  depend_mask);
+         break;
+       default:
+         ASSERT (0);
+         break;
+       }
+    }
+
+  /* program min resource mask */
+  if (min_mask)
+    {
+      PMU_MSG (("Changing min_res_mask to 0x%x\n", min_mask));
+      W_REG (osh, &cc->min_res_mask, min_mask);
+    }
+  /* program max resource mask */
+  if (max_mask)
+    {
+      PMU_MSG (("Changing max_res_mask to 0x%x\n", max_mask));
+      W_REG (osh, &cc->max_res_mask, max_mask);
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+
+/* setup pll and query clock speed */
+typedef struct
+{
+  uint16 freq;
+  uint8 xf;
+  uint8 wbint;
+  uint32 wbfrac;
+} pmu0_xtaltab0_t;
+
+/* the following table is based on 880Mhz Fvco */
+#define PMU0_PLL0_FVCO 880000  /* Fvco 880Mhz */
+static const pmu0_xtaltab0_t
+BCMINITDATA (pmu0_xtaltab0)[] =
+{
+  {
+  12000, 1, 73, 349525},
+  {
+  13000, 2, 67, 725937},
+  {
+  14400, 3, 61, 116508},
+  {
+  15360, 4, 57, 305834},
+  {
+  16200, 5, 54, 336579},
+  {
+  16800, 6, 52, 399457},
+  {
+  19200, 7, 45, 873813},
+  {
+  19800, 8, 44, 466033},
+  {
+  20000, 9, 44, 0},
+  {
+  25000, 10, 70, 419430},
+  {
+  26000, 11, 67, 725937},
+  {
+  30000, 12, 58, 699050},
+  {
+  38400, 13, 45, 873813},
+  {
+  40000, 14, 45, 0},
+  {
+  0, 0, 0, 0}
+};
+
+#ifdef BCMUSBDEV
+#define        PMU0_XTAL0_DEFAULT      11
+#else
+#define PMU0_XTAL0_DEFAULT     8
+#endif
+
+#ifdef BCMUSBDEV
+/*
+ * Set new backplane PLL clock frequency
+ */
+static void BCMINITFN (sb_pmu0_sbclk4328) (sb_t * sbh, int freq)
+{
+  uint32 tmp, oldmax, oldmin, origidx;
+  chipcregs_t *cc;
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  /* Set new backplane PLL clock */
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  tmp &= ~(PMU0_PLL0_PC0_DIV_ARM_MASK);
+  tmp |= freq << PMU0_PLL0_PC0_DIV_ARM_SHIFT;
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  /* Power cycle BB_PLL_PU by disabling/enabling it to take on new freq */
+  /* Disable PLL */
+  oldmin = R_REG (osh, &cc->min_res_mask);
+  oldmax = R_REG (osh, &cc->max_res_mask);
+  W_REG (osh, &cc->min_res_mask, oldmin & ~PMURES_BIT (RES4328_BB_PLL_PU));
+  W_REG (osh, &cc->max_res_mask, oldmax & ~PMURES_BIT (RES4328_BB_PLL_PU));
+
+  /* It takes over several hundred usec to re-enable the PLL since the
+   * sequencer state machines run on ILP clock. Set delay at 450us to be safe.
+   *
+   * Be sure PLL is powered down first before re-enabling it.
+   */
+
+  OSL_DELAY (PLL_DELAY);
+  SPINWAIT ((R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU)),
+           PLL_DELAY * 3);
+
+  if (R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU))
+    {
+      /* If BB_PLL not powered down yet, new backplane PLL clock
+       *  may not take effect.
+       *
+       * Still early during bootup so no serial output here.
+       */
+      PMU_ERROR (("Fatal: BB_PLL not power down yet!\n"));
+      ASSERT (!
+             (R_REG (osh, &cc->res_state) & PMURES_BIT (RES4328_BB_PLL_PU)));
+    }
+
+  /* Enable PLL */
+  W_REG (osh, &cc->max_res_mask, oldmax);
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+#endif /* BCMUSBDEV */
+
+/* Set up PLL registers in the PMU as per the crystal speed.
+ * Uses xtalfreq variable, or passed-in default.
+ */
+static void
+BCMINITFN (sb_pmu0_pllinit0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+                             uint32 xtal)
+{
+  uint32 tmp;
+  const pmu0_xtaltab0_t *xt;
+
+  if ((sb_chip (sbh) == BCM5354_CHIP_ID) && (xtal == 0))
+    {
+      /* 5354 has xtal freq of 25MHz */
+      xtal = 25000;
+    }
+
+  /* Find the frequency in the table */
+  for (xt = pmu0_xtaltab0; xt->freq; xt++)
+    if (xt->freq == xtal)
+      break;
+  if (xt->freq == 0)
+    xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+  PMU_MSG (("XTAL %d (%d)\n", xtal, xt->xf));
+
+  /* Check current PLL state */
+  tmp = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+    PCTL_XTALFREQ_SHIFT;
+  if (tmp == xt->xf)
+    {
+      PMU_MSG (("PLL already programmed for %d.%d MHz\n",
+               (xt->freq / 1000), (xt->freq % 1000)));
+
+#ifdef BCMUSBDEV
+      if (sbh->chip == BCM4328_CHIP_ID)
+       sb_pmu0_sbclk4328 (sbh, PMU0_PLL0_PC0_DIV_ARM_88MHZ);
+#endif
+      return;
+    }
+
+  if (tmp)
+    {
+      PMU_MSG (("Reprogramming PLL for %d.%d MHz (was %d.%dMHz)\n",
+               (xt->freq / 1000), (xt->freq % 1000),
+               (pmu0_xtaltab0[tmp - 1].freq / 1000),
+               (pmu0_xtaltab0[tmp - 1].freq % 1000)));
+    }
+  else
+    {
+      PMU_MSG (("Programming PLL for %d.%d MHz\n", (xt->freq / 1000),
+               (xt->freq % 1000)));
+    }
+
+  /* Make sure the PLL is off */
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES4328_BB_PLL_PU));
+      AND_REG (osh, &cc->max_res_mask, ~PMURES_BIT (RES4328_BB_PLL_PU));
+      break;
+    case BCM5354_CHIP_ID:
+      AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES5354_BB_PLL_PU));
+      AND_REG (osh, &cc->max_res_mask, ~PMURES_BIT (RES5354_BB_PLL_PU));
+      break;
+    default:
+      ASSERT (0);
+    }
+  SPINWAIT (R_REG (osh, &cc->clk_ctl_st) & CCS0_HTAVAIL,
+           PMU_MAX_TRANSITION_DLY);
+  ASSERT (!(R_REG (osh, &cc->clk_ctl_st) & CCS0_HTAVAIL));
+
+  PMU_MSG (("Done masking\n"));
+
+  /* Write PDIV in pllcontrol[0] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  if (xt->freq >= PMU0_PLL0_PC0_PDIV_FREQ)
+    tmp |= PMU0_PLL0_PC0_PDIV_MASK;
+  else
+    tmp &= ~PMU0_PLL0_PC0_PDIV_MASK;
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  /* Write WILD in pllcontrol[1] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL1);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  tmp =
+    ((tmp & ~(PMU0_PLL0_PC1_WILD_INT_MASK | PMU0_PLL0_PC1_WILD_FRAC_MASK)) |
+     (((xt->
+       wbint << PMU0_PLL0_PC1_WILD_INT_SHIFT) & PMU0_PLL0_PC1_WILD_INT_MASK)
+      | ((xt->wbfrac << PMU0_PLL0_PC1_WILD_FRAC_SHIFT) &
+        PMU0_PLL0_PC1_WILD_FRAC_MASK)));
+  if (xt->wbfrac == 0)
+    tmp |= PMU0_PLL0_PC1_STOP_MOD;
+  else
+    tmp &= ~PMU0_PLL0_PC1_STOP_MOD;
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  /* Write WILD in pllcontrol[2] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL2);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  tmp = ((tmp & ~PMU0_PLL0_PC2_WILD_INT_MASK) |
+        ((xt->wbint >> PMU0_PLL0_PC2_WILD_INT_SHIFT) &
+         PMU0_PLL0_PC2_WILD_INT_MASK));
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  PMU_MSG (("Done pll\n"));
+
+  /* Write XtalFreq. Set the divisor also. */
+  tmp = R_REG (osh, &cc->pmucontrol);
+  tmp = ((tmp & ~PCTL_ILP_DIV_MASK) |
+        (((((xt->freq + 127) / 128) - 1) << PCTL_ILP_DIV_SHIFT) &
+         PCTL_ILP_DIV_MASK));
+  tmp = ((tmp & ~PCTL_XTALFREQ_MASK) |
+        ((xt->xf << PCTL_XTALFREQ_SHIFT) & PCTL_XTALFREQ_MASK));
+  W_REG (osh, &cc->pmucontrol, tmp);
+}
+
+static uint32
+BCMINITFN (sb_pmu0_alpclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+  const pmu0_xtaltab0_t *xt;
+  uint32 xf;
+
+  /* Find the frequency in the table */
+  xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+    PCTL_XTALFREQ_SHIFT;
+  for (xt = pmu0_xtaltab0; xt->freq; xt++)
+    if (xt->xf == xf)
+      break;
+  if (xt->freq == 0)
+    xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+  return xt->freq * 1000;
+}
+
+static uint32
+BCMINITFN (sb_pmu0_cpuclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+  const pmu0_xtaltab0_t *xt;
+  uint32 xf, tmp, divarm;
+#ifdef BCMDBG
+  uint32 pdiv, wbint, wbfrac, fvco;
+#endif
+
+  if (sb_chip (sbh) == BCM5354_CHIP_ID)
+    {
+      /* 5354 gets sb clock of 120MHz from main pll */
+      return 120000000;
+    }
+
+  /* Find the xtal frequency in the table */
+  xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+    PCTL_XTALFREQ_SHIFT;
+  for (xt = pmu0_xtaltab0; xt->freq; xt++)
+    if (xt->xf == xf)
+      break;
+  if (xt->freq == 0)
+    xt = &pmu0_xtaltab0[PMU0_XTAL0_DEFAULT];
+
+  /* Read divarm from pllcontrol[0] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL0);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  divarm = (tmp & PMU0_PLL0_PC0_DIV_ARM_MASK) >> PMU0_PLL0_PC0_DIV_ARM_SHIFT;
+
+#ifdef BCMDBG
+  /* Calculate Fvco based on xtal freq, pdiv, and wild */
+  pdiv = tmp & PMU0_PLL0_PC0_PDIV_MASK;
+
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL1);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  wbfrac =
+    (tmp & PMU0_PLL0_PC1_WILD_FRAC_MASK) >> PMU0_PLL0_PC1_WILD_FRAC_SHIFT;
+  wbint = (tmp & PMU0_PLL0_PC1_WILD_INT_MASK) >> PMU0_PLL0_PC1_WILD_INT_SHIFT;
+
+  W_REG (osh, &cc->pllcontrol_addr, PMU0_PLL0_PLLCTL2);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  wbint +=
+    (tmp & PMU0_PLL0_PC2_WILD_INT_MASK) << PMU0_PLL0_PC2_WILD_INT_SHIFT;
+
+  fvco = (xt->freq * wbint) << 8;
+  fvco += (xt->freq * (wbfrac >> 10)) >> 2;
+  fvco += (xt->freq * (wbfrac & 0x3ff)) >> 10;
+  fvco >>= 8;
+  fvco >>= pdiv;
+  fvco /= 1000;
+  fvco *= 1000;
+
+  PMU_MSG (("sb_pmu0_cpuclk0: wbint %u wbfrac %u fvco %u\n",
+           wbint, wbfrac, fvco));
+  ASSERT (fvco == PMU0_PLL0_FVCO);
+#endif /* BCMDBG */
+
+  /* Return ARM/SB clock */
+  return PMU0_PLL0_FVCO / (divarm + PMU0_PLL0_PC0_DIV_ARM_BASE) * 1000;
+}
+
+/* PMU corerev 1 pll programming for BCM4325 */
+/* setup pll and query clock speed */
+typedef struct
+{
+  uint16 fref;
+  uint8 xf;
+  uint8 p1div;
+  uint8 p2div;
+  uint8 ndiv_int;
+  uint32 ndiv_frac;
+} pmu1_xtaltab0_t;
+
+/* the following table is based on 880Mhz Fvco */
+#define PMU1_PLL0_FVCO 880000  /* Fvco 880Mhz */
+static const pmu1_xtaltab0_t
+BCMINITDATA (pmu1_xtaltab0)[] =
+{
+  {
+  12000, 1, 3, 22, 0x9, 0xFFFFEF},
+  {
+  13000, 2, 1, 6, 0xb, 0x483483},
+  {
+  14400, 3, 1, 10, 0xa, 0x1C71C7},
+  {
+  15360, 4, 1, 5, 0xb, 0x755555},
+  {
+  16200, 5, 1, 10, 0x5, 0x6E9E06},
+  {
+  16800, 6, 1, 10, 0x5, 0x3Cf3Cf},
+  {
+  19200, 7, 1, 9, 0x5, 0x17B425},
+  {
+  19800, 8, 1, 11, 0x4, 0xA57EB},
+  {
+  20000, 9, 1, 11, 0x4, 0x0},
+  {
+  24000, 10, 3, 11, 0xa, 0x0},
+  {
+  25000, 11, 5, 16, 0xb, 0x0},
+  {
+  26000, 12, 1, 2, 0x10, 0xEC4EC4},
+  {
+  30000, 13, 3, 8, 0xb, 0x0},
+  {
+  38400, 14, 1, 5, 0x4, 0x955555},
+  {
+  40000, 15, 1, 2, 0xb, 0},
+  {
+  0, 0, 0, 0, 0, 0}
+};
+
+/* Default to 15360Khz crystal */
+#define PMU1_XTAL0_DEFAULT     3
+
+static uint32
+BCMINITFN (sb_pmu1_alpclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+  const pmu1_xtaltab0_t *xt;
+  uint32 xf;
+
+  /* Find the frequency in the table */
+  xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+    PCTL_XTALFREQ_SHIFT;
+  for (xt = pmu1_xtaltab0; xt->fref; xt++)
+    if (xt->xf == xf)
+      break;
+  if (xt->fref == 0)
+    xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+  return xt->fref * 1000;
+}
+
+/* Set up PLL registers in the PMU as per the crystal speed.
+ * Uses xtalfreq variable, or passed-in default.
+ */
+static void
+BCMINITFN (sb_pmu1_pllinit0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc,
+                             uint32 xtal)
+{
+  const pmu1_xtaltab0_t *xt;
+  uint32 tmp;
+  uint32 buf_strength = 0;
+
+  /* 4312: assume default works */
+  if (sbh->chip == BCM4312_CHIP_ID)
+    return;
+
+  /* Find the frequency in the table */
+  for (xt = pmu1_xtaltab0; xt->fref; xt++)
+    if (xt->fref == xtal)
+      break;
+  if (xt->fref == 0)
+    xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+  PMU_MSG (("XTAL %d (%d)\n", xtal, xt->xf));
+
+  /* Check current PLL state */
+  if (((R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+       PCTL_XTALFREQ_SHIFT) == xt->xf)
+    {
+      PMU_MSG (("PLL already programmed for %d.%d MHz\n",
+               (xt->fref / 1000), (xt->fref % 1000)));
+      return;
+    }
+
+  PMU_MSG (("Programming PLL for %d.%d MHz\n", (xt->fref / 1000),
+           (xt->fref % 1000)));
+
+  /* Make sure the PLL is off */
+  switch (sbh->chip)
+    {
+    case BCM4325_CHIP_ID:
+      AND_REG (osh, &cc->min_res_mask,
+              ~(PMURES_BIT (RES4325_BBPLL_PWRSW_PU) |
+                PMURES_BIT (RES4325_HT_AVAIL)));
+      AND_REG (osh, &cc->max_res_mask,
+              ~(PMURES_BIT (RES4325_BBPLL_PWRSW_PU) |
+                PMURES_BIT (RES4325_HT_AVAIL)));
+
+      /* Change the BBPLL drive strength to 2 for all channels */
+      buf_strength = 0x222222;
+      break;
+    default:
+      ASSERT (0);
+    }
+  SPINWAIT (R_REG (osh, &cc->clk_ctl_st) & CCS_HTAVAIL,
+           PMU_MAX_TRANSITION_DLY);
+  ASSERT (!(R_REG (osh, &cc->clk_ctl_st) & CCS_HTAVAIL));
+
+  PMU_MSG (("Done masking\n"));
+
+  /* Write p1div and p2div to pllcontrol[0] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL0);
+  tmp = R_REG (osh, &cc->pllcontrol_data) &
+    ~(PMU1_PLL0_PC0_P1DIV_MASK | PMU1_PLL0_PC0_P2DIV_MASK);
+  tmp |=
+    ((xt->
+      p1div << PMU1_PLL0_PC0_P1DIV_SHIFT) & PMU1_PLL0_PC0_P1DIV_MASK) | ((xt->
+                                                                         p2div
+                                                                         <<
+                                                                         PMU1_PLL0_PC0_P2DIV_SHIFT)
+                                                                        &
+                                                                        PMU1_PLL0_PC0_P2DIV_MASK);
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  /* Write ndiv_int and ndiv_mode to pllcontrol[2] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2);
+  tmp = R_REG (osh, &cc->pllcontrol_data) &
+    ~(PMU1_PLL0_PC2_NDIV_INT_MASK | PMU1_PLL0_PC2_NDIV_MODE_MASK);
+  tmp |=
+    ((xt->
+      ndiv_int << PMU1_PLL0_PC2_NDIV_INT_SHIFT) & PMU1_PLL0_PC2_NDIV_INT_MASK)
+    | ((1 << PMU1_PLL0_PC2_NDIV_MODE_SHIFT) & PMU1_PLL0_PC2_NDIV_MODE_MASK);
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  /* Write ndiv_frac to pllcontrol[3] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL3);
+  tmp = R_REG (osh, &cc->pllcontrol_data) & ~PMU1_PLL0_PC3_NDIV_FRAC_MASK;
+  tmp |= ((xt->ndiv_frac << PMU1_PLL0_PC3_NDIV_FRAC_SHIFT) &
+         PMU1_PLL0_PC3_NDIV_FRAC_MASK);
+  W_REG (osh, &cc->pllcontrol_data, tmp);
+
+  if (buf_strength)
+    {
+      PMU_MSG (("Adjusting PLL buffer drive strength: %x\n", buf_strength));
+
+      W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL5);
+      tmp = R_REG (osh, &cc->pllcontrol_data) & ~PMU1_PLL0_PC5_CLK_DRV_MASK;
+      tmp |= (buf_strength << PMU1_PLL0_PC5_CLK_DRV_SHIFT);
+      W_REG (osh, &cc->pllcontrol_data, tmp);
+    }
+
+  PMU_MSG (("Done pll\n"));
+
+  /* Write XtalFreq. Set the divisor also. */
+  tmp = R_REG (osh, &cc->pmucontrol) &
+    ~(PCTL_ILP_DIV_MASK | PCTL_XTALFREQ_MASK);
+  tmp |= (((((xt->fref + 127) / 128) - 1) << PCTL_ILP_DIV_SHIFT) &
+         PCTL_ILP_DIV_MASK) |
+    ((xt->xf << PCTL_XTALFREQ_SHIFT) & PCTL_XTALFREQ_MASK);
+  W_REG (osh, &cc->pmucontrol, tmp);
+}
+
+
+static uint32
+BCMINITFN (sb_pmu1_cpuclk0) (sb_t * sbh, osl_t * osh, chipcregs_t * cc)
+{
+  const pmu1_xtaltab0_t *xt;
+  uint32 xf, tmp, m1div;
+#ifdef BCMDBG
+  uint32 ndiv_int, ndiv_frac, p2div, p1div, fvco;
+#endif
+
+  /* Find the xtal frequency in the table */
+  xf = (R_REG (osh, &cc->pmucontrol) & PCTL_XTALFREQ_MASK) >>
+    PCTL_XTALFREQ_SHIFT;
+  for (xt = pmu1_xtaltab0; xt->fref; xt++)
+    if (xt->xf == xf)
+      break;
+  if (xt->fref == 0)
+    xt = &pmu1_xtaltab0[PMU1_XTAL0_DEFAULT];
+
+  /* Read m1div from pllcontrol[1] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL1);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  m1div = (tmp & PMU1_PLL0_PC1_M1DIV_MASK) >> PMU1_PLL0_PC1_M1DIV_SHIFT;
+
+#ifdef BCMDBG
+  /* Read p2div/p1div from pllcontrol[0] */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL0);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  p2div = (tmp & PMU1_PLL0_PC0_P2DIV_MASK) >> PMU1_PLL0_PC0_P2DIV_SHIFT;
+  p1div = (tmp & PMU1_PLL0_PC0_P1DIV_MASK) >> PMU1_PLL0_PC0_P1DIV_SHIFT;
+
+  /* Calculate Fvco based on xtal freq and ndiv and pdiv */
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL2);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  ndiv_int =
+    (tmp & PMU1_PLL0_PC2_NDIV_INT_MASK) >> PMU1_PLL0_PC2_NDIV_INT_SHIFT;
+
+  W_REG (osh, &cc->pllcontrol_addr, PMU1_PLL0_PLLCTL3);
+  tmp = R_REG (osh, &cc->pllcontrol_data);
+  ndiv_frac =
+    (tmp & PMU1_PLL0_PC3_NDIV_FRAC_MASK) >> PMU1_PLL0_PC3_NDIV_FRAC_SHIFT;
+
+  fvco = (xt->fref * ndiv_int) << 8;
+  fvco += (xt->fref * (ndiv_frac >> 12)) >> 4;
+  fvco += (xt->fref * (ndiv_frac & 0xfff)) >> 12;
+  fvco >>= 8;
+  fvco *= p2div;
+  fvco /= p1div;
+  fvco /= 1000;
+  fvco *= 1000;
+
+  PMU_MSG (("sb_pmu0_cpuclk0: ndiv_int %u ndiv_frac %u "
+           "p2div %u p1div %u fvco %u\n",
+           ndiv_int, ndiv_frac, p2div, p1div, fvco));
+  ASSERT (fvco == PMU1_PLL0_FVCO);
+#endif /* BCMDBG */
+
+  /* Return ARM/SB clock */
+  return PMU1_PLL0_FVCO / m1div * 1000;
+}
+
+void BCMINITFN (sb_pmu_pll_init) (sb_t * sbh, osl_t * osh, uint xtalfreq)
+{
+  chipcregs_t *cc;
+  uint origidx;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      sb_pmu0_pllinit0 (sbh, osh, cc, xtalfreq);
+      break;
+    case BCM5354_CHIP_ID:
+      sb_pmu0_pllinit0 (sbh, osh, cc, xtalfreq);
+      break;
+    case BCM4325_CHIP_ID:
+      sb_pmu1_pllinit0 (sbh, osh, cc, xtalfreq);
+      break;
+    case BCM4312_CHIP_ID:
+      sb_pmu1_pllinit0 (sbh, osh, cc, xtalfreq);
+      break;
+    default:
+      PMU_MSG (("No PLL init done for chip %x rev %d pmurev %d\n",
+               sbh->chip, sbh->chiprev, sbh->pmurev));
+      break;
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+
+uint32 BCMINITFN (sb_pmu_alp_clock) (sb_t * sbh, osl_t * osh)
+{
+  chipcregs_t *cc;
+  uint origidx;
+  uint32 clock = ALP_CLOCK;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      clock = sb_pmu0_alpclk0 (sbh, osh, cc);
+      break;
+    case BCM5354_CHIP_ID:
+      clock = sb_pmu0_alpclk0 (sbh, osh, cc);
+      break;
+    case BCM4325_CHIP_ID:
+      clock = sb_pmu1_alpclk0 (sbh, osh, cc);
+      break;
+    case BCM4312_CHIP_ID:
+      clock = sb_pmu1_alpclk0 (sbh, osh, cc);
+      /* always 20Mhz */
+      clock = 20000 * 1000;
+      break;
+    default:
+      PMU_MSG (("No ALP clock specified "
+               "for chip %x rev %d pmurev %d, using default %d Hz\n",
+               sbh->chip, sbh->chiprev, sbh->pmurev, clock));
+      break;
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+  return clock;
+}
+
+uint BCMINITFN (sb_pmu_cpu_clock) (sb_t * sbh, osl_t * osh)
+{
+  chipcregs_t *cc;
+  uint origidx;
+  uint32 clock = HT_CLOCK;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4328_CHIP_ID:
+      clock = sb_pmu0_cpuclk0 (sbh, osh, cc);
+      break;
+    case BCM5354_CHIP_ID:
+      clock = sb_pmu0_cpuclk0 (sbh, osh, cc);
+      break;
+    case BCM4325_CHIP_ID:
+      clock = sb_pmu1_cpuclk0 (sbh, osh, cc);
+      break;
+    case BCM4312_CHIP_ID:
+      clock = sb_pmu1_cpuclk0 (sbh, osh, cc);
+      break;
+    default:
+      PMU_MSG (("No CPU clock specified "
+               "for chip %x rev %d pmurev %d, using default %d Hz\n",
+               sbh->chip, sbh->chiprev, sbh->pmurev, clock));
+      break;
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+  return clock;
+}
+
+void BCMINITFN (sb_pmu_init) (sb_t * sbh, osl_t * osh)
+{
+  chipcregs_t *cc;
+  uint origidx;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  if (sbh->pmurev >= 1)
+    {
+      if (sbh->chip == BCM4325_CHIP_ID && sbh->chiprev <= 1)
+       AND_REG (osh, &cc->pmucontrol, ~PCTL_NOILP_ON_WAIT);
+      else
+       OR_REG (osh, &cc->pmucontrol, PCTL_NOILP_ON_WAIT);
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+
+void BCMINITFN (sb_pmu_otp_power) (sb_t * sbh, osl_t * osh, bool on)
+{
+  chipcregs_t *cc;
+  uint origidx;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4325_CHIP_ID:
+      if (on)
+       {
+         OR_REG (osh, &cc->min_res_mask, PMURES_BIT (RES4325_LNLDO2_PU));
+         if (sbh->boardflags & BFL_BUCKBOOST)
+           AND_REG (osh, &cc->min_res_mask,
+                    ~PMURES_BIT (RES4325_BUCK_BOOST_PWM));
+         OSL_DELAY (500);
+       }
+      else
+       {
+         if (sbh->boardflags & BFL_BUCKBOOST)
+           OR_REG (osh, &cc->min_res_mask,
+                   PMURES_BIT (RES4325_BUCK_BOOST_PWM));
+         AND_REG (osh, &cc->min_res_mask, ~PMURES_BIT (RES4325_LNLDO2_PU));
+       }
+      break;
+    default:
+      break;
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
+
+void
+sb_pmu_rcal (sb_t * sbh, osl_t * osh)
+{
+  chipcregs_t *cc;
+  uint origidx;
+
+  ASSERT (sbh->cccaps & CC_CAP_PMU);
+
+  /* Remember original core before switch to chipc */
+  origidx = sb_coreidx (sbh);
+  cc = sb_setcore (sbh, SB_CC, 0);
+  ASSERT (cc);
+
+  switch (sbh->chip)
+    {
+    case BCM4325_CHIP_ID:
+      {
+       uint8 rcal_code;
+       uint32 val;
+
+       /* Kick RCal */
+       W_REG (osh, &cc->chipcontrol_addr, 1);
+       AND_REG (osh, &cc->chipcontrol_data, ~0x04);
+       OR_REG (osh, &cc->chipcontrol_data, 0x04);
+
+       /* Wait for completion */
+       SPINWAIT (0 == (R_REG (osh, &cc->chipstatus) & 0x08),
+                 10 * 1000 * 1000);
+       ASSERT (R_REG (osh, &cc->chipstatus) & 0x08);
+
+       /* Drop the LSB to convert from 5 bit code to 4 bit code */
+       rcal_code = (uint8) (R_REG (osh, &cc->chipstatus) >> 5) & 0x0f;
+       PMU_MSG (("RCal completed, status 0x%x, code 0x%x\n",
+                 R_REG (osh, &cc->chipstatus), rcal_code));
+
+       /* Write RCal code into pmu_vreg_ctrl[32:29] */
+       W_REG (osh, &cc->regcontrol_addr, 0);
+       val = R_REG (osh, &cc->regcontrol_data) & ~((uint32) 0x07 << 29);
+       val |= (uint32) (rcal_code & 0x07) << 29;
+       W_REG (osh, &cc->regcontrol_data, val);
+       W_REG (osh, &cc->regcontrol_addr, 1);
+       val = R_REG (osh, &cc->regcontrol_data) & ~(uint32) 0x01;
+       val |= (uint32) ((rcal_code >> 3) & 0x01);
+       W_REG (osh, &cc->regcontrol_data, val);
+
+       /* Write RCal code into pmu_chip_ctrl[33:30] */
+       W_REG (osh, &cc->chipcontrol_addr, 0);
+       val = R_REG (osh, &cc->chipcontrol_data) & ~((uint32) 0x03 << 30);
+       val |= (uint32) (rcal_code & 0x03) << 30;
+       W_REG (osh, &cc->chipcontrol_data, val);
+       W_REG (osh, &cc->chipcontrol_addr, 1);
+       val = R_REG (osh, &cc->chipcontrol_data) & ~(uint32) 0x03;
+       val |= (uint32) ((rcal_code >> 2) & 0x03);
+       W_REG (osh, &cc->chipcontrol_data, val);
+
+       /* Set override in pmu_chip_ctrl[29] */
+       W_REG (osh, &cc->chipcontrol_addr, 0);
+       OR_REG (osh, &cc->chipcontrol_data, (0x01 << 29));
+
+       /* Power off RCal block */
+       W_REG (osh, &cc->chipcontrol_addr, 1);
+       AND_REG (osh, &cc->chipcontrol_data, ~0x04);
+
+       break;
+      }
+    default:
+      break;
+    }
+
+  /* Return to original core */
+  sb_setcoreidx (sbh, origidx);
+}
index 8b5abe5d26e6792bc1ee5f519569f1848d084568..9cb669bd919b2d7fb91f60ae21df478bf6de8ff5 100644 (file)
@@ -101,6 +101,8 @@ extern bool bcmreclaimed;
  */
 #define BCMDONGLEHDRSZ 8
 
+/* Max. nvram variable table size */
+#define    MAXSZ_NVRAM_VARS    4096
 
 
 #endif /* _bcmdefs_h_ */
index 2e80658da39f44ada05070cf109803f0110d2bc9..f03e0b6b1ba59cffe9f9ad928f814aff87320d1b 100644 (file)
@@ -1,22 +1,20 @@
 /*
  * Broadcom device-specific manifest constants.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmdevs.h,v 1.1.1.17 2006/04/15 01:29:08 michael Exp $
+ * $Id$
  */
 
 #ifndef        _BCMDEVS_H
 #define        _BCMDEVS_H
 
-#include "bcm4710.h"
-
-/* Known PCI vendor Id's */
+/* PCI vendor IDs */
 #define        VENDOR_EPIGRAM          0xfeda
 #define        VENDOR_BROADCOM         0x14e4
 #define        VENDOR_3COM             0x10b7
 #define        VENDOR_DELL             0x1028
 #define        VENDOR_HP               0x0e11
 #define        VENDOR_APPLE            0x106b
+#define VENDOR_SI_IMAGE                0x1095          /* Silicon Image, used by Arasan SDIO Host */
+#define VENDOR_BUFFALO         0x1154          /* Buffalo vendor id */
+#define VENDOR_TI              0x104c          /* Texas Instruments */
+
+/* PCMCIA vendor IDs */
+#define        VENDOR_BROADCOM_PCMCIA  0x02d0
+
+/* SDIO vendor IDs */
+#define        VENDOR_BROADCOM_SDIO    0x00BF
 
-/* PCI Device Id's */
+/* PCI Device IDs */
 #define        BCM4210_DEVICE_ID       0x1072          /* never used */
-#define        BCM4211_DEVICE_ID       0x4211
 #define        BCM4230_DEVICE_ID       0x1086          /* never used */
+#define        BCM4401_ENET_ID         0x170c          /* 4401b0 production enet cards */
+#define        BCM3352_DEVICE_ID       0x3352          /* bcm3352 device id */
+#define        BCM3360_DEVICE_ID       0x3360          /* bcm3360 device id */
+#define        BCM4211_DEVICE_ID       0x4211
 #define        BCM4231_DEVICE_ID       0x4231
-
+#define        BCM4303_D11B_ID         0x4303          /* 4303 802.11b */
+#define        BCM4311_D11G_ID         0x4311          /* 4311 802.11b/g id */
+#define        BCM4311_D11DUAL_ID      0x4312          /* 4311 802.11a/b/g id */
+#define        BCM4311_D11A_ID         0x4313          /* 4311 802.11a id */
+#define        BCM4328_D11DUAL_ID      0x4314          /* 4328 802.11a/g id */
+#define        BCM4328_D11G_ID         0x4315          /* 4328 802.11g 2.4Ghz band id */
+#define        BCM4328_D11A_ID         0x4316          /* 4328 802.11a 5Ghz band id */
+#define        BCM4318_D11G_ID         0x4318          /* 4318 802.11b/g id */
+#define        BCM4318_D11DUAL_ID      0x4319          /* 4318 802.11a/b/g id */
+#define        BCM4318_D11A_ID         0x431a          /* 4318 802.11a id */
+#define        BCM4325_D11DUAL_ID      0x431b          /* 4325 802.11a/g id */
+#define        BCM4325_D11G_ID         0x431c          /* 4325 802.11g 2.4Ghz band id */
+#define        BCM4325_D11A_ID         0x431d          /* 4325 802.11a 5Ghz band id */
+#define        BCM4306_D11G_ID         0x4320          /* 4306 802.11g */
+#define        BCM4306_D11A_ID         0x4321          /* 4306 802.11a */
+#define        BCM4306_UART_ID         0x4322          /* 4306 uart */
+#define        BCM4306_V90_ID          0x4323          /* 4306 v90 codec */
+#define        BCM4306_D11DUAL_ID      0x4324          /* 4306 dual A+B */
+#define        BCM4306_D11G_ID2        0x4325          
+#define        BCM4321_D11N_ID         0x4328          /* 4321 802.11n dualband id */
+#define        BCM4321_D11N2G_ID       0x4329          /* 4321 802.11n 2.4Ghz band id */
+#define        BCM4321_D11N5G_ID       0x432a          /* 4321 802.11n 5Ghz band id */
+#define        BCMGPRS_UART_ID         0x4333          /* Uart id used by 4306/gprs card */
+#define        BCMGPRS2_UART_ID        0x4344          /* Uart id used by 4306/gprs card */
+#define FPGA_JTAGM_ID          0x43f0          /* FPGA jtagm device id */
+#define BCM_JTAGM_ID           0x43f1          /* BCM jtagm device id */
+#define SDIOH_FPGA_ID          0x43f2          /* sdio host fpga */
+#define BCM_SDIOH_ID           0x43f3          /* BCM sdio host id */
+#define SDIOD_FPGA_ID          0x43f4          /* sdio device fpga */
+#define SPIH_FPGA_ID           0x43f5          /* PCI SPI Host Controller FPGA */
+#define MIMO_FPGA_ID           0x43f8          /* FPGA mimo minimacphy device id */
+#define        BCM4402_ENET_ID         0x4402          /* 4402 enet */
+#define        BCM4402_V90_ID          0x4403          /* 4402 v90 codec */
 #define        BCM4410_DEVICE_ID       0x4410          /* bcm44xx family pci iline */
-#define        BCM4430_DEVICE_ID       0x4430          /* bcm44xx family cardbus iline */
 #define        BCM4412_DEVICE_ID       0x4412          /* bcm44xx family pci enet */
+#define        BCM4430_DEVICE_ID       0x4430          /* bcm44xx family cardbus iline */
 #define        BCM4432_DEVICE_ID       0x4432          /* bcm44xx family cardbus enet */
-
-#define        BCM3352_DEVICE_ID       0x3352          /* bcm3352 device id */
-#define        BCM3360_DEVICE_ID       0x3360          /* bcm3360 device id */
-
-#define        EPI41210_DEVICE_ID      0xa0fa          /* bcm4210 */
-#define        EPI41230_DEVICE_ID      0xa10e          /* bcm4230 */
-
+#define        BCM4704_ENET_ID         0x4706          /* 4704 enet (Use 47XX_ENET_ID instead!) */
+#define        BCM4710_DEVICE_ID       0x4710          /* 4710 primary function 0 */
 #define        BCM47XX_ILINE_ID        0x4711          /* 47xx iline20 */
 #define        BCM47XX_V90_ID          0x4712          /* 47xx v90 codec */
 #define        BCM47XX_ENET_ID         0x4713          /* 47xx enet */
 #define        BCM47XX_ATA100_ID       0x471d          /* 47xx parallel ATA */
 #define        BCM47XX_SATAXOR_ID      0x471e          /* 47xx serial ATA & XOR DMA */
 #define        BCM47XX_GIGETH_ID       0x471f          /* 47xx GbE (5700) */
-
+#define        BCM4712_MIPS_ID         0x4720          /* 4712 base devid */
 #define BCM47XX_SMBUS_EMU_ID   0x47fe          /* 47xx emulated SMBus device */
 #define        BCM47XX_XOR_EMU_ID      0x47ff          /* 47xx emulated XOR engine */
+#define        EPI41210_DEVICE_ID      0xa0fa          /* bcm4210 */
+#define        EPI41230_DEVICE_ID      0xa10e          /* bcm4230 */
+#define JINVANI_SDIOH_ID       0x4743          /* Jinvani SDIO Gold Host */
+#define BCM27XX_SDIOH_ID       0x2702          /* BCM27xx Standard SDIO Host */
+#define PCIXX21_FLASHMEDIA_ID  0x803b          /* TI PCI xx21 Standard Host Controller */
+#define PCIXX21_SDIOH_ID       0x803c          /* TI PCI xx21 Standard Host Controller */
 
+/* Chip IDs */
 #define        BCM4710_CHIP_ID         0x4710          /* 4710 chipid returned by sb_chip() */
-#define        BCM4710_DEVICE_ID       0x4710          /* 4710 primary function 0 */
-
 #define        BCM4402_CHIP_ID         0x4402          /* 4402 chipid */
-#define        BCM4402_ENET_ID         0x4402          /* 4402 enet */
-#define        BCM4402_V90_ID          0x4403          /* 4402 v90 codec */
-#define        BCM4401_ENET_ID         0x170c          /* 4401b0 production enet cards */
-
 #define        BCM4306_CHIP_ID         0x4306          /* 4306 chipcommon chipid */
-#define        BCM4306_D11G_ID         0x4320          /* 4306 802.11g */
-#define        BCM4306_D11G_ID2        0x4325          
-#define        BCM4306_D11A_ID         0x4321          /* 4306 802.11a */
-#define        BCM4306_UART_ID         0x4322          /* 4306 uart */
-#define        BCM4306_V90_ID          0x4323          /* 4306 v90 codec */
-#define        BCM4306_D11DUAL_ID      0x4324          /* 4306 dual A+B */
-
-#define        BCM4309_PKG_ID          1               /* 4309 package id */
-
 #define        BCM4311_CHIP_ID         0x4311          /* 4311 PCIe 802.11a/b/g */
-#define        BCM4311_D11G_ID         0x4311          /* 4311 802.11b/g id */
-#define        BCM4311_D11DUAL_ID      0x4312          /* 4311 802.11a/b/g id */
-#define        BCM4311_D11A_ID         0x4313          /* 4311 802.11a id */
-
-#define        BCM4303_D11B_ID         0x4303          /* 4303 802.11b */
-#define        BCM4303_PKG_ID          2               /* 4303 package id */
-
-#define        BCMGPRS_UART_ID         0x4333          /* Uart id used by 4306/gprs card */
-#define        BCMGPRS2_UART_ID        0x4344          /* Uart id used by 4306/gprs card */
-
 #define        BCM4704_CHIP_ID         0x4704          /* 4704 chipcommon chipid */
-#define        BCM4704_ENET_ID         0x4706          /* 4704 enet (Use 47XX_ENET_ID instead!) */
-
+#define        BCM4312_CHIP_ID         0x4312          /* 4312 chip common chipid */
 #define        BCM4318_CHIP_ID         0x4318          /* 4318 chip common chipid */
-#define        BCM4318_D11G_ID         0x4318          /* 4318 802.11b/g id */
-#define        BCM4318_D11DUAL_ID      0x4319          /* 4318 802.11a/b/g id */
-#define        BCM4318_D11A_ID         0x431a          /* 4318 802.11a id */
-
 #define        BCM4321_CHIP_ID         0x4321          /* 4321 chip common chipid */
-#define        BCM4321_D11N_ID         0x4328          /* 4321 802.11n dualband id */
-#define        BCM4321_D11N2G_ID       0x4329          /* 4321 802.11n 2.4Hgz band id */
-#define        BCM4321_D11N5G_ID       0x432a          /* 4321 802.11n 5Ghz band id */
-
-#define BCM4331_CHIP_ID                0x4331          /* 4331 chip common chipid */
-#define BCM4331_D11N2G_ID      0x4330          /* 4331 802.11n 2.4Ghz band id */
-#define BCM4331_D11N_ID                0x4331          /* 4331 802.11n dualband id */
-#define BCM4331_D11N5G_ID      0x4332          /* 4331 802.11n 5Ghz band id */
-
-#define HDLSIM5350_PKG_ID      1               /* HDL simulator package id for a 5350 */
-#define HDLSIM_PKG_ID          14              /* HDL simulator package id */
-#define HWSIM_PKG_ID           15              /* Hardware simulator package id */
-
+#define        BCM4328_CHIP_ID         0x4328          /* 4328 chip common chipid */
+#define        BCM4325_CHIP_ID         0x4325          /* 4325 chip common chipid */
 #define        BCM4712_CHIP_ID         0x4712          /* 4712 chipcommon chipid */
-#define        BCM4712_MIPS_ID         0x4720          /* 4712 base devid */
-#define        BCM4712LARGE_PKG_ID     0               /* 340pin 4712 package id */
-#define        BCM4712SMALL_PKG_ID     1               /* 200pin 4712 package id */
-#define        BCM4712MID_PKG_ID       2               /* 225pin 4712 package id */
-
 #define BCM5365_CHIP_ID                0x5365          /* 5365 chipcommon chipid */
 #define        BCM5350_CHIP_ID         0x5350          /* bcm5350 chipcommon chipid */
 #define        BCM5352_CHIP_ID         0x5352          /* bcm5352 chipcommon chipid */
-
+#define        BCM5354_CHIP_ID         0x5354          /* bcm5354 chipcommon chipid */
 #define        BCM4320_CHIP_ID         0x4320          /* bcm4320 chipcommon chipid */
-
-#define BCM4328_CHIP_ID                0x4328          /* bcm4328 chipcommon chipid */
-
-#define FPGA_JTAGM_ID          0x43f0          /* FPGA jtagm device id */
-#define BCM43XX_JTAGM_ID       0x43f1          /* 43xx jtagm device id */
-#define BCM43XXOLD_JTAGM_ID    0x4331          /* 43xx old jtagm device id */
-
-#define SDIOH_FPGA_ID          0x43f2          /* sdio host fpga */
-#define SDIOD_FPGA_ID          0x43f4          /* sdio device fpga */
-
-#define MIMO_FPGA_ID           0x43f8          /* FPGA mimo minimacphy device id */
-
 #define BCM4785_CHIP_ID                0x4785          /* 4785 chipcommon chipid */
 
-/* PCMCIA vendor Id's */
-
-#define        VENDOR_BROADCOM_PCMCIA  0x02d0
-
-/* SDIO vendor Id's */
-#define        VENDOR_BROADCOM_SDIO    0x00BF
-
+/* Package IDs */
+#define        BCM4303_PKG_ID          2               /* 4303 package id */
+#define        BCM4309_PKG_ID          1               /* 4309 package id */
+#define        BCM4712LARGE_PKG_ID     0               /* 340pin 4712 package id */
+#define        BCM4712SMALL_PKG_ID     1               /* 200pin 4712 package id */
+#define        BCM4712MID_PKG_ID       2               /* 225pin 4712 package id */
+#define BCM4328USBD11G_PKG_ID  2               /* 4328 802.11g USB package id */
+#define BCM4328USBDUAL_PKG_ID  3               /* 4328 802.11a/g USB package id */
+#define BCM4328SDIOD11G_PKG_ID 4               /* 4328 802.11g SDIO package id */
+#define BCM4328SDIODUAL_PKG_ID 5               /* 4328 802.11a/g SDIO package id */
+#define BCM5354E_PKG_ID                1               /* 5354E package id */
+#define HDLSIM5350_PKG_ID      1               /* HDL simulator package id for a 5350 */
+#define HDLSIM_PKG_ID          14              /* HDL simulator package id */
+#define HWSIM_PKG_ID           15              /* Hardware simulator package id */
 
+#define PCIXX21_FLASHMEDIA0_ID 0x8033          /* TI PCI xx21 Standard Host Controller */
+#define PCIXX21_SDIOH0_ID      0x8034          /* TI PCI xx21 Standard Host Controller */
 /* boardflags */
-#define        BFL_BTCOEXIST           0x0001  /* This board implements Bluetooth coexistance */
-#define        BFL_PACTRL              0x0002  /* This board has gpio 9 controlling the PA */
-#define        BFL_AIRLINEMODE         0x0004  /* This board implements gpio13 radio disable indication */
-#define        BFL_ENETROBO            0x0010  /* This board has robo switch or core */
-#define        BFL_CCKHIPWR            0x0040  /* Can do high-power CCK transmission */
-#define        BFL_ENETADM             0x0080  /* This board has ADMtek switch */
-#define        BFL_ENETVLAN            0x0100  /* This board has vlan capability */
-#define        BFL_AFTERBURNER         0x0200  /* This board supports Afterburner mode */
-#define BFL_NOPCI              0x0400  /* This board leaves PCI floating */
-#define BFL_FEM                        0x0800  /* This board supports the Front End Module */
-#define BFL_EXTLNA             0x1000  /* This board has an external LNA */
-#define BFL_HGPA               0x2000  /* This board has a high gain PA */
-#define        BFL_BTCMOD              0x4000  /* This board' BTCOEXIST is in the alternate gpios */
-#define        BFL_ALTIQ               0x8000  /* Alternate I/Q settings */
-
+#define        BFL_BTCOEXIST           0x00000001      /* This board implements Bluetooth coexistance */
+#define        BFL_PACTRL              0x00000002      /* This board has gpio 9 controlling the PA */
+#define        BFL_AIRLINEMODE 0x00000004      /* This board implements gpio13 radio disable indication */
+#define        BFL_ADCDIV              0x00000008      /* This board has the rssi ADC divider */
+#define        BFL_ENETROBO            0x00000010      /* This board has robo switch or core */
+#define        BFL_NOPLLDOWN   0x00000020      /* Not ok to power down the chip pll and oscillator */
+#define        BFL_CCKHIPWR            0x00000040      /* Can do high-power CCK transmission */
+#define        BFL_ENETADM             0x00000080      /* This board has ADMtek switch */
+#define        BFL_ENETVLAN            0x00000100      /* This board has vlan capability */
+#define        BFL_AFTERBURNER         0x00000200      /* This board supports Afterburner mode */
+#define BFL_NOPCI              0x00000400      /* This board leaves PCI floating */
+#define BFL_FEM                        0x00000800  /* This board supports the Front End Module */
+#define BFL_EXTLNA             0x00001000      /* This board has an external LNA */
+#define BFL_HGPA               0x00002000      /* This board has a high gain PA */
+#define        BFL_BTCMOD      0x00004000      /* This board' BTCOEXIST is in the alternate gpios */
+#define        BFL_ALTIQ               0x00008000      /* Alternate I/Q settings */
+#define BFL_NOPA       0x00010000      /* This board has no PA */
+#define BFL_RSSIINV            0x00020000      /* This board's RSSI uses positive slope */
+#define BFL_PAREF              0x00040000      /* This board uses the PARef LDO */
+#define BFL_3TSWITCH   0x00080000      /* This board uses a triple throw switch shared with BT */
+#define BFL_PHASESHIFTER       0x00100000      /* This board can support phase shifter */
+#define BFL_BUCKBOOST  0x00200000      /* This board has buck/booster */
 /* boardflags2 */
 #define BFL2_RXBB_INT_REG_DIS  0x00000001      /* This board has an external rxbb regulator */
-#define BFL2_SSWITCH_AVAIL     0x00000002      /* This board has a superswitch for > 2 antennas */
-#define BFL2_TXPWRCTRL_EN      0x00000004      /* This board permits TX Power Control to be enabled */
+#define BFL2_DEPRECIATED_STUB  0x00000002      /* This board flag is depreciated */
+#define BFL2_TXPWRCTRL_EN      0x00000004      /* This board permits enabling TX Power Control */
+#define BFL2_2X4_DIV           0x00000008      /* This board supports the 2X4 diversity switch */
+#define BFL2_5G_PWRGAIN                0x00000010      /* This board supports 5G band power gain */
+#define BFL2_PCIEWAR_OVR       0x00000020      /* This board overrides ASPM and Clkreq settings */
+#define BFL2_CAESERS_BRD       0x00000040      /* This board is Dell Caeser's brd (unused by sw) */
 
 /* board specific GPIO assignment, gpio 0-3 are also customer-configurable led */
 #define        BOARD_GPIO_BTCMOD_IN    0x010   /* bit 4 is the alternate BT Coexistance Input */
 #define        BOARD_GPIO_BTC_IN       0x080   /* bit 7 is BT Coexistance Input */
 #define        BOARD_GPIO_BTC_OUT      0x100   /* bit 8 is BT Coexistance Out */
 #define        BOARD_GPIO_PACTRL       0x200   /* bit 9 controls the PA on new 4306 boards */
+#define BOARD_GPIO_ANT0_SEL    0x100   /* With BFL2_2X4_DIV */
+#define BOARD_GPIO_ANT1_SEL    0x200   /* With BFL2_2X4_DIV */
+
 #define        PCI_CFG_GPIO_SCS        0x10    /* PCI config space bit 4 for 4306c0 slow clock source */
 #define PCI_CFG_GPIO_HWRAD     0x20    /* PCI config space GPIO 13 for hw radio disable */
 #define PCI_CFG_GPIO_XTAL      0x40    /* PCI config space GPIO 14 for Xtal powerup */
 #define        XTAL_ON_DELAY           1000            /* us crystal power-on delay */
 
 /* Reference Board Types */
-
 #define        BU4710_BOARD            0x0400
 #define        VSIM4710_BOARD          0x0401
 #define        QT4710_BOARD            0x0402
 /* BCM63XX boards */
 #define BCM96338_BOARD         0x6338
 #define BCM96348_BOARD         0x6348
+#define BCM96358_BOARD         0x6358
 
 /* Another mp4306 with SiGe */
 #define        BCM94306P_BOARD         0x044c
 #define CB2_4321_BOARD         0x046d
 #define MC4321_BOARD           0x046e
 
+/* 4328 boards */
+#define BU4328_BOARD           0x0481
+#define BCM4328SDG_BOARD       0x0482
+#define BCM4328SDAG_BOARD      0x0483
+#define BCM4328UG_BOARD                0x0484
+#define BCM4328UAG_BOARD       0x0485
+#define BCM4328PC_BOARD                0x0486
+#define BCM4328CF_BOARD                0x0487
+
+/* 4325 boards */
+#define BU4325_BOARD           0x0490
+
 /* # of GPIO pins */
 #define GPIO_NUMPINS           16
 
 #define BCM2062_IDCODE         0x02062000
 #define BCM2062A0_IDCODE       0x0206217f
 
+#define BCM2063_ID             0x2063
+#define BCM2063_IDCODE         0x02063000
+#define BCM2063A0_IDCODE       0x0206317f
+
 /* parts of an idcode: */
 #define        IDCODE_MFG_MASK         0x00000fff
 #define        IDCODE_MFG_SHIFT        0
index 906129c82eb91bf0c48eba61b039a1d1a2794d35..0f68451132830fca226b7e16320cc91c7eca26fa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * local version of endian.h - byte order defines
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- *  $Id: bcmendian.h,v 1.1.1.10 2006/02/27 03:43:16 honor Exp $
+ *  $Id$
 */
 
 #ifndef _BCMENDIAN_H_
index c713b4be690578c4bf0b4bcf080b1fa105ba1a65..f6754b6fb31cbedd72dd309a153c31d724fc7cfe 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * NVRAM variable manipulation
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: bcmnvram.h,v 1.17 2006/03/02 12:33:44 honor Exp $
+ * $Id$
  */
 
 #ifndef _bcmnvram_h_
@@ -35,10 +35,19 @@ struct nvram_tuple {
 };
 
 /*
- * Initialize NVRAM access. May be unnecessary or undefined on certain
- * platforms.
+ * Get default value for an NVRAM variable
+ */
+extern char *nvram_default_get(const char *name);
+
+/*
+ * Append a chunk of nvram variables to the global list
+ */
+extern int nvram_append(void *sb, char *vars, uint varsz);
+
+/*
+ * Check for reset button press for restoring factory defaults.
  */
-extern int nvram_init(void *sbh);
+extern bool nvram_reset(void *sbh);
 
 /*
  * Disable NVRAM access. May be unnecessary or undefined on certain
@@ -59,8 +68,6 @@ extern char * nvram_get(const char *name);
  * as input
  */
 extern int BCMINITFN(nvram_resetgpio_init)(void *sbh);
-extern int BCMINITFN(nvram_gpio_init)(const char *name, void *sbh);
-extern int BCMINITFN(nvram_gpio_set)(const char *name, void *sbh, int type);
 
 /* 
  * Get the value of an NVRAM variable.
@@ -69,16 +76,6 @@ extern int BCMINITFN(nvram_gpio_set)(const char *name, void *sbh, int type);
  */
 #define nvram_safe_get(name) (nvram_get(name) ? : "")
 
-#define nvram_safe_unset(name) ({ \
-       if(nvram_get(name)) \
-               nvram_unset(name); \
-})
-
-#define nvram_safe_set(name, value) ({ \
-       if(!nvram_get(name) || strcmp(nvram_get(name), value)) \
-               nvram_set(name, value); \
-})
-
 /*
  * Match an NVRAM variable.
  * @param      name    name of variable to match
@@ -139,15 +136,24 @@ extern int nvram_commit(void);
  * @param      count   size of buffer in bytes
  * @return     0 on success and errno on failure
  */
-extern int nvram_getall(char *buf, int count);
+extern int nvram_getall(char *nvram_buf, int count);
 
-extern int file2nvram(char *filename, char *varname);
-extern int nvram2file(char *varname, char *filename);
+/*
+ * returns the crc value of the nvram
+ * @param      nvh     nvram header pointer
+ */
+extern uint8 nvram_calc_crc(struct nvram_header * nvh);
+
+extern char* getvar(char *vars, const char *name);
+extern int getintvar(char *vars, const char *name);
 
 #endif /* _LANGUAGE_ASSEMBLY */
 
+/* The NVRAM version number stored as an NVRAM variable */
+#define NVRAM_SOFTWARE_VERSION "1"
+
 #define NVRAM_MAGIC            0x48534C46      /* 'FLSH' */
-#define NVRAM_CLEAR_MAGIC              0x0
+#define NVRAM_CLEAR_MAGIC      0x0
 #define NVRAM_INVALID_MAGIC    0xFFFFFFFF
 #define NVRAM_VERSION          1
 #define NVRAM_HEADER_SIZE      20
@@ -156,4 +162,7 @@ extern int nvram2file(char *varname, char *filename);
 #define NVRAM_MAX_VALUE_LEN 255
 #define NVRAM_MAX_PARAM_LEN 64
 
+#define NVRAM_CRC_START_POSITION       9 /* magic, len, crc8 to be skipped */
+#define NVRAM_CRC_VER_MASK     0xffffff00 /* for crc_ver_init */
+
 #endif /* _bcmnvram_h_ */
index 4f99e95914a70a2400a639c916f6f11e626ee007..1db4fbd63878d24e6accdbd83c03f889a7e09404 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Misc useful routines to access NIC local SROM/OTP .
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,14 +9,93 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: bcmsrom.h,v 1.1.1.13 2006/04/15 01:29:08 michael Exp $
+ * $Id$
  */
 
 #ifndef        _bcmsrom_h_
 #define        _bcmsrom_h_
 
 /* Maximum srom: 4 Kilobits == 512 bytes */
-#define        SROM_MAX        512
+#define        SROM_MAX                512
+
+
+#define        SROM_WORDS              64
+
+#define SROM3_SWRGN_OFF                28      /* s/w region offset in words */
+
+#define        SROM_SSID               2
+
+#define        SROM_WL1LHMAXP          29
+
+#define        SROM_WL1LPAB0           30
+#define        SROM_WL1LPAB1           31
+#define        SROM_WL1LPAB2           32
+
+#define        SROM_WL1HPAB0           33
+#define        SROM_WL1HPAB1           34
+#define        SROM_WL1HPAB2           35
+
+#define        SROM_MACHI_IL0          36
+#define        SROM_MACMID_IL0         37
+#define        SROM_MACLO_IL0          38
+#define        SROM_MACHI_ET0          39
+#define        SROM_MACMID_ET0         40
+#define        SROM_MACLO_ET0          41
+#define        SROM_MACHI_ET1          42
+#define        SROM_MACMID_ET1         43
+#define        SROM_MACLO_ET1          44
+#define        SROM3_MACHI             37
+#define        SROM3_MACMID            38
+#define        SROM3_MACLO             39
+
+#define        SROM_BXARSSI2G          40
+#define        SROM_BXARSSI5G          41
+
+#define        SROM_TRI52G             42
+#define        SROM_TRI5GHL            43
+
+#define        SROM_RXPO52G            45
+
+#define        SROM2_ENETPHY           45
+
+#define        SROM_AABREV             46
+/* Fields in AABREV */
+#define        SROM_BR_MASK            0x00ff
+#define        SROM_CC_MASK            0x0f00
+#define        SROM_CC_SHIFT           8
+#define        SROM_AA0_MASK           0x3000
+#define        SROM_AA0_SHIFT          12
+#define        SROM_AA1_MASK           0xc000
+#define        SROM_AA1_SHIFT          14
+
+#define        SROM_WL0PAB0            47
+#define        SROM_WL0PAB1            48
+#define        SROM_WL0PAB2            49
+
+#define        SROM_LEDBH10            50
+#define        SROM_LEDBH32            51
+
+#define        SROM_WL10MAXP           52
+
+#define        SROM_WL1PAB0            53
+#define        SROM_WL1PAB1            54
+#define        SROM_WL1PAB2            55
+
+#define        SROM_ITT                56
+
+#define        SROM_BFL                57
+#define        SROM_BFL2               28
+#define        SROM3_BFL2              61
+
+#define        SROM_AG10               58
+
+#define        SROM_CCODE              59
+
+#define        SROM_OPO                60
+
+#define        SROM3_LEDDC             62
+
+#define        SROM_CRCREV             63
 
 /* SROM Rev 4: Reallocate the software part of the srom to accomodate
  * MIMO features. It assumes up to two PCIE functions and 440 bytes
 #define        SROM4_BFL1              35
 #define        SROM4_BFL2              36
 #define        SROM4_BFL3              37
+#define        SROM5_BFL0              37
+#define        SROM5_BFL1              38
+#define        SROM5_BFL2              39
+#define        SROM5_BFL3              40
 
 #define        SROM4_MACHI             38
 #define        SROM4_MACMID            39
 #define        SROM4_MACLO             40
+#define        SROM5_MACHI             41
+#define        SROM5_MACMID            42
+#define        SROM5_MACLO             43
 
 #define        SROM4_CCODE             41
 #define        SROM4_REGREV            42
+#define        SROM5_CCODE             34
+#define        SROM5_REGREV            35
 
 #define        SROM4_LEDBH10           43
 #define        SROM4_LEDBH32           44
+#define        SROM5_LEDBH10           59
+#define        SROM5_LEDBH32           60
 
 #define        SROM4_LEDDC             45
+#define        SROM5_LEDDC             45
 
 #define        SROM4_AA                46
 #define        SROM4_AA2G_MASK         0x00ff
 #define        SROM4_TXPID5GL          53
 #define        SROM4_TXPID5GH          55
 
+#define SROM4_TXRXC            61
+#define SROM4_TXCHAIN_MASK     0x000f
+#define SROM4_TXCHAIN_SHIFT    0
+#define SROM4_RXCHAIN_MASK     0x00f0
+#define SROM4_RXCHAIN_SHIFT    4
+#define SROM4_SWITCH_MASK      0xff00
+#define SROM4_SWITCH_SHIFT     8
+
 /* Per-path fields */
 #define        MAX_PATH                4
 #define        SROM4_PATH0             64
 #define        SROM4_5G_MCSPO          173
 #define        SROM4_5GL_MCSPO         181
 #define        SROM4_5GH_MCSPO         189
-#define        SROM4_CCDPO             197
+#define        SROM4_CDDPO             197
 #define        SROM4_STBCPO            198
 #define        SROM4_BW40PO            199
 #define        SROM4_BWDUPPO           200
 
-extern int srom_var_init(void *sbh, uint bus, void *curmap, osl_t *osh, char **vars, uint *count);
+#define        SROM4_CRCREV            219
+
+
+/*SROM Rev 8: Make space for a 48word hardware header for PCIe rev >= 6.
+ * This is acombined srom for both MIMO and SISO boards, usable in
+ * the .130 4Kilobit OTP with hardware redundancy.
+ */
+
+#define        SROM8_SIGN              64
+
+#define        SROM8_BREV              65
+
+#define        SROM8_BFL0              66
+#define        SROM8_BFL1              67
+#define        SROM8_BFL2              68
+#define        SROM8_BFL3              69
+
+#define        SROM8_MACHI             70
+#define        SROM8_MACMID            71
+#define        SROM8_MACLO             72
+
+#define        SROM8_CCODE             73
+#define        SROM8_REGREV            74
+
+#define        SROM8_LEDBH10           75
+#define        SROM8_LEDBH32           76
+
+#define        SROM8_LEDDC             77
+
+#define        SROM8_AA                78
+
+#define        SROM8_AG10              79
+#define        SROM8_AG32              80
+
+#define        SROM8_TXRXC             81
+
+#define        SROM8_BXARSSI2G         82
+#define        SROM8_BXARSSI5G         83
+#define        SROM8_TRI52G            84
+#define        SROM8_TRI5GHL           85
+#define        SROM8_RXPO52G           86
+
+/* Per-path offsets & fields */
+#define        SROM8_PATH0             96
+#define        SROM8_PATH1             112
+#define        SROM8_PATH2             128
+#define        SROM8_PATH3             144
+
+#define        SROM8_2G_ITT_MAXP       0
+#define        SROM8_2G_PA             1
+#define        SROM8_5G_ITT_MAXP       4
+#define        SROM8_5GLH_MAXP         5
+#define        SROM8_5G_PA             6
+#define        SROM8_5GL_PA            9
+#define        SROM8_5GH_PA            12
+
+/* All the miriad power offsets */
+#define        SROM8_2G_CCKPO          160
+
+#define        SROM8_2G_OFDMPO         161
+#define        SROM8_5G_OFDMPO         163
+#define        SROM8_5GL_OFDMPO        165
+#define        SROM8_5GH_OFDMPO        167
+
+#define        SROM8_2G_MCSPO          169
+#define        SROM8_5G_MCSPO          177
+#define        SROM8_5GL_MCSPO         185
+#define        SROM8_5GH_MCSPO         193
+
+#define        SROM8_CDDPO             201
+#define        SROM8_STBCPO            202
+#define        SROM8_BW40PO            203
+#define        SROM8_BWDUPPO           204
+
+/* SISO PA parameters are in the path0 spaces */
+#define        SROM8_SISO              96
+
+/* Legacy names for SISO PA paramters */
+#define        SROM8_W0_ITTMAXP        (SROM8_SISO + SROM8_2G_ITT_MAXP)
+#define        SROM8_W0_PAB0           (SROM8_SISO + SROM8_2G_PA)
+#define        SROM8_W0_PAB1           (SROM8_SISO + SROM8_2G_PA + 1)
+#define        SROM8_W0_PAB2           (SROM8_SISO + SROM8_2G_PA + 2)
+#define        SROM8_W1_ITTMAXP        (SROM8_SISO + SROM8_5G_ITT_MAXP)
+#define        SROM8_W1_MAXP_LCHC      (SROM8_SISO + SROM8_5GLH_MAXP)
+#define        SROM8_W1_PAB0           (SROM8_SISO + SROM8_5G_PA)
+#define        SROM8_W1_PAB1           (SROM8_SISO + SROM8_5G_PA + 1)
+#define        SROM8_W1_PAB2           (SROM8_SISO + SROM8_5G_PA + 2)
+#define        SROM8_W1_PAB0_LC        (SROM8_SISO + SROM8_5GL_PA)
+#define        SROM8_W1_PAB1_LC        (SROM8_SISO + SROM8_5GL_PA + 1)
+#define        SROM8_W1_PAB2_LC        (SROM8_SISO + SROM8_5GL_PA + 2)
+#define        SROM8_W1_PAB0_HC        (SROM8_SISO + SROM8_5GH_PA)
+#define        SROM8_W1_PAB1_HC        (SROM8_SISO + SROM8_5GH_PA + 1)
+#define        SROM8_W1_PAB2_HC        (SROM8_SISO + SROM8_5GH_PA + 2)
+
+#define        SROM8_CRCREV            219
+
+/* Prototypes */
+extern int srom_var_init(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+                         char **vars, uint *count);
+
+extern int srom_read(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+                     uint byteoff, uint nbytes, uint16 *buf);
+extern int srom_write(sb_t *sbh, uint bus, void *curmap, osl_t *osh,
+                      uint byteoff, uint nbytes, uint16 *buf);
 
-extern int srom_read(uint bus, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf);
-extern int srom_write(uint bus, void *curmap, osl_t *osh, uint byteoff, uint nbytes, uint16 *buf);
+extern int srom_parsecis(osl_t *osh, uint8 **pcis, uint ciscnt,
+                         char **vars, uint *count);
 
 #endif /* _bcmsrom_h_ */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmutils.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/bcmutils.h
deleted file mode 100644 (file)
index b200f62..0000000
+++ /dev/null
@@ -1,433 +0,0 @@
-/*
- * Misc useful os-independent macros and functions.
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- * 
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: bcmutils.h,v 1.1.1.16 2006/04/08 06:13:39 honor Exp $
- */
-
-#ifndef        _bcmutils_h_
-#define        _bcmutils_h_
-
-/* ** driver-only section ** */
-#ifdef BCMDRIVER
-
-#define _BCM_U 0x01    /* upper */
-#define _BCM_L 0x02    /* lower */
-#define _BCM_D 0x04    /* digit */
-#define _BCM_C 0x08    /* cntrl */
-#define _BCM_P 0x10    /* punct */
-#define _BCM_S 0x20    /* white space (space/lf/tab) */
-#define _BCM_X 0x40    /* hex digit */
-#define _BCM_SP        0x80    /* hard space (0x20) */
-
-#define GPIO_PIN_NOTDEFINED    0x20    /* Pin not defined */
-
-extern unsigned char bcm_ctype[];
-#define bcm_ismask(x) (bcm_ctype[(int)(unsigned char)(x)])
-
-#define bcm_isalnum(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L|_BCM_D)) != 0)
-#define bcm_isalpha(c) ((bcm_ismask(c)&(_BCM_U|_BCM_L)) != 0)
-#define bcm_iscntrl(c) ((bcm_ismask(c)&(_BCM_C)) != 0)
-#define bcm_isdigit(c) ((bcm_ismask(c)&(_BCM_D)) != 0)
-#define bcm_isgraph(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D)) != 0)
-#define bcm_islower(c) ((bcm_ismask(c)&(_BCM_L)) != 0)
-#define bcm_isprint(c) ((bcm_ismask(c)&(_BCM_P|_BCM_U|_BCM_L|_BCM_D|_BCM_SP)) != 0)
-#define bcm_ispunct(c) ((bcm_ismask(c)&(_BCM_P)) != 0)
-#define bcm_isspace(c) ((bcm_ismask(c)&(_BCM_S)) != 0)
-#define bcm_isupper(c) ((bcm_ismask(c)&(_BCM_U)) != 0)
-#define bcm_isxdigit(c)        ((bcm_ismask(c)&(_BCM_D|_BCM_X)) != 0)
-
-/*
- * Spin at most 'us' microseconds while 'exp' is true.
- * Caller should explicitly test 'exp' when this completes
- * and take appropriate error action if 'exp' is still true.
- */
-#define SPINWAIT(exp, us) { \
-       uint countdown = (us) + 9; \
-       while ((exp) && (countdown >= 10)) {\
-               OSL_DELAY(10); \
-               countdown -= 10; \
-       } \
-}
-
-struct  ether_addr {
-       uint8 octet[6];
-} __attribute__((packed));
-
-/* string */
-extern uchar bcm_toupper(uchar c);
-extern ulong bcm_strtoul(char *cp, char **endp, uint base);
-extern char *bcmstrstr(char *haystack, char *needle);
-extern char *bcmstrcat(char *dest, const char *src);
-extern ulong wchar2ascii(char *abuf, ushort *wbuf, ushort wbuflen, ulong abuflen);
-/* ethernet address */
-extern char *bcm_ether_ntoa(struct ether_addr *ea, char *buf);
-/* variable access */
-extern char *getvar(char *vars, char *name);
-extern int getintvar(char *vars, char *name);
-extern uint getgpiopin(char *vars, char *pin_name, uint def_pin);
-#ifdef BCMPERFSTATS
-extern void bcm_perf_enable(void);
-extern void bcmstats(char *fmt);
-extern void bcmlog(char *fmt, uint a1, uint a2);
-extern void bcmdumplog(char *buf, int size);
-extern int bcmdumplogent(char *buf, uint idx);
-#else
-#define bcm_perf_enable()
-#define bcmstats(fmt)
-#define        bcmlog(fmt, a1, a2)
-#define        bcmdumplog(buf, size)   *buf = '\0'
-#define        bcmdumplogent(buf, idx) -1
-#endif /* BCMPERFSTATS */
-extern char *bcm_nvram_vars(uint *length);
-extern int bcm_nvram_cache(void *sbh);
-
-/* Support for sharing code across in-driver iovar implementations.
- * The intent is that a driver use this structure to map iovar names
- * to its (private) iovar identifiers, and the lookup function to
- * find the entry.  Macros are provided to map ids and get/set actions
- * into a single number space for a switch statement.
- */
-
-/* iovar structure */
-typedef struct bcm_iovar {
-       const char *name;       /* name for lookup and display */
-       uint16 varid;           /* id for switch */
-       uint16 flags;           /* driver-specific flag bits */
-       uint16 type;            /* base type of argument */
-       uint16 minlen;          /* min length for buffer vars */
-} bcm_iovar_t;
-
-/* varid definitions are per-driver, may use these get/set bits */
-
-/* IOVar action bits for id mapping */
-#define IOV_GET 0 /* Get an iovar */
-#define IOV_SET 1 /* Set an iovar */
-
-/* Varid to actionid mapping */
-#define IOV_GVAL(id)           ((id)*2)
-#define IOV_SVAL(id)           (((id)*2)+IOV_SET)
-#define IOV_ISSET(actionid)    ((actionid & IOV_SET) == IOV_SET)
-
-/* flags are per-driver based on driver attributes */
-
-/* Base type definitions */
-#define IOVT_VOID      0       /* no value (implictly set only) */
-#define IOVT_BOOL      1       /* any value ok (zero/nonzero) */
-#define IOVT_INT8      2       /* integer values are range-checked */
-#define IOVT_UINT8     3       /* unsigned int 8 bits */
-#define IOVT_INT16     4       /* int 16 bits */
-#define IOVT_UINT16    5       /* unsigned int 16 bits */
-#define IOVT_INT32     6       /* int 32 bits */
-#define IOVT_UINT32    7       /* unsigned int 32 bits */
-#define IOVT_BUFFER    8       /* buffer is size-checked as per minlen */
-
-extern const bcm_iovar_t *bcm_iovar_lookup(const bcm_iovar_t *table, const char *name);
-extern int bcm_iovar_lencheck(const bcm_iovar_t *table, void *arg, int len, bool set);
-
-#endif /* #ifdef BCMDRIVER */
-
-/* ** driver/apps-shared section ** */
-
-#define BCME_STRLEN            64      /* Max string length for BCM errors */
-#define VALID_BCMERROR(e)  ((e <= 0) && (e >= BCME_LAST))
-
-
-/*
- * error codes could be added but the defined ones shouldn't be changed/deleted
- * these error codes are exposed to the user code
- * when ever a new error code is added to this list
- * please update errorstring table with the related error string and
- * update osl files with os specific errorcode map
-*/
-
-#define BCME_OK                                0       /* Success */
-#define BCME_ERROR                     -1      /* Error generic */
-#define BCME_BADARG                    -2      /* Bad Argument */
-#define BCME_BADOPTION                 -3      /* Bad option */
-#define BCME_NOTUP                     -4      /* Not up */
-#define BCME_NOTDOWN                   -5      /* Not down */
-#define BCME_NOTAP                     -6      /* Not AP */
-#define BCME_NOTSTA                    -7      /* Not STA  */
-#define BCME_BADKEYIDX                 -8      /* BAD Key Index */
-#define BCME_RADIOOFF                  -9      /* Radio Off */
-#define BCME_NOTBANDLOCKED             -10     /* Not  band locked */
-#define BCME_NOCLK                     -11     /* No Clock */
-#define BCME_BADRATESET                        -12     /* BAD Rate valueset */
-#define BCME_BADBAND                   -13     /* BAD Band */
-#define BCME_BUFTOOSHORT               -14     /* Buffer too short */
-#define BCME_BUFTOOLONG                        -15     /* Buffer too long */
-#define BCME_BUSY                      -16     /* Busy */
-#define BCME_NOTASSOCIATED             -17     /* Not Associated */
-#define BCME_BADSSIDLEN                        -18     /* Bad SSID len */
-#define BCME_OUTOFRANGECHAN            -19     /* Out of Range Channel */
-#define BCME_BADCHAN                   -20     /* Bad Channel */
-#define BCME_BADADDR                   -21     /* Bad Address */
-#define BCME_NORESOURCE                        -22     /* Not Enough Resources */
-#define BCME_UNSUPPORTED               -23     /* Unsupported */
-#define BCME_BADLEN                    -24     /* Bad length */
-#define BCME_NOTREADY                  -25     /* Not Ready */
-#define BCME_EPERM                     -26     /* Not Permitted */
-#define BCME_NOMEM                     -27     /* No Memory */
-#define BCME_ASSOCIATED                        -28     /* Associated */
-#define BCME_RANGE                     -29     /* Not In Range */
-#define BCME_NOTFOUND                  -30     /* Not Found */
-#define BCME_WME_NOT_ENABLED           -31     /* WME Not Enabled */
-#define BCME_TSPEC_NOTFOUND            -32     /* TSPEC Not Found */
-#define BCME_ACM_NOTSUPPORTED          -33     /* ACM Not Supported */
-#define BCME_NOT_WME_ASSOCIATION       -34     /* Not WME Association */
-#define BCME_SDIO_ERROR                        -35     /* SDIO Bus Error */
-#define BCME_DONGLE_DOWN               -36     /* Dongle Not Accessible */
-#define BCME_LAST                      BCME_DONGLE_DOWN
-
-/* These are collection of BCME Error strings */
-#define BCMERRSTRINGTABLE {            \
-       "OK",                           \
-       "Undefined error",              \
-       "Bad Argument",                 \
-       "Bad Option",                   \
-       "Not up",                       \
-       "Not down",                     \
-       "Not AP",                       \
-       "Not STA",                      \
-       "Bad Key Index",                \
-       "Radio Off",                    \
-       "Not band locked",              \
-       "No clock",                     \
-       "Bad Rate valueset",            \
-       "Bad Band",                     \
-       "Buffer too short",             \
-       "Buffer too long",              \
-       "Busy",                         \
-       "Not Associated",               \
-       "Bad SSID len",                 \
-       "Out of Range Channel",         \
-       "Bad Channel",                  \
-       "Bad Address",                  \
-       "Not Enough Resources",         \
-       "Unsupported",                  \
-       "Bad length",                   \
-       "Not Ready",                    \
-       "Not Permitted",                \
-       "No Memory",                    \
-       "Associated",                   \
-       "Not In Range",                 \
-       "Not Found",                    \
-       "WME Not Enabled",              \
-       "TSPEC Not Found",              \
-       "ACM Not Supported",            \
-       "Not WME Association",          \
-       "SDIO Bus Error",               \
-       "Dongle Not Accessible"         \
-}
-
-#ifndef ABS
-#define        ABS(a)                  (((a) < 0)?-(a):(a))
-#endif /* ABS */
-
-#ifndef MIN
-#define        MIN(a, b)               (((a) < (b))?(a):(b))
-#endif /* MIN */
-
-#ifndef MAX
-#define        MAX(a, b)               (((a) > (b))?(a):(b))
-#endif /* MAX */
-
-#define CEIL(x, y)             (((x) + ((y)-1)) / (y))
-#define        ROUNDUP(x, y)           ((((x)+((y)-1))/(y))*(y))
-#define        ISALIGNED(a, x)         (((a) & ((x)-1)) == 0)
-#define        ISPOWEROF2(x)           ((((x)-1)&(x)) == 0)
-#define VALID_MASK(mask)       !((mask) & ((mask) + 1))
-#define        OFFSETOF(type, member)  ((uint)(uintptr)&((type *)0)->member)
-#define ARRAYSIZE(a)           (sizeof(a)/sizeof(a[0]))
-
-/* bit map related macros */
-#ifndef setbit
-#ifndef NBBY               /* the BSD family defines NBBY */
-#define        NBBY    8       /* 8 bits per byte */
-#endif /* #ifndef NBBY */
-#define        setbit(a, i)    (((uint8 *)a)[(i)/NBBY] |= 1<<((i)%NBBY))
-#define        clrbit(a, i)    (((uint8 *)a)[(i)/NBBY] &= ~(1<<((i)%NBBY)))
-#define        isset(a, i)     (((uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY)))
-#define        isclr(a, i)     ((((uint8 *)a)[(i)/NBBY] & (1<<((i)%NBBY))) == 0)
-#endif /* setbit */
-
-#define        NBITS(type)     (sizeof(type) * 8)
-#define NBITVAL(nbits) (1 << (nbits))
-#define MAXBITVAL(nbits)       ((1 << (nbits)) - 1)
-#define        NBITMASK(nbits) MAXBITVAL(nbits)
-#define MAXNBVAL(nbyte)        MAXBITVAL((nbyte) * 8)
-
-/* basic mux operation - can be optimized on several architectures */
-#define MUX(pred, true, false) ((pred) ? (true) : (false))
-
-/* modulo inc/dec - assumes x E [0, bound - 1] */
-#define MODDEC(x, bound) MUX((x) == 0, (bound) - 1, (x) - 1)
-#define MODINC(x, bound) MUX((x) == (bound) - 1, 0, (x) + 1)
-
-/* modulo inc/dec, bound = 2^k */
-#define MODDEC_POW2(x, bound) (((x) - 1) & ((bound) - 1))
-#define MODINC_POW2(x, bound) (((x) + 1) & ((bound) - 1))
-
-/* modulo add/sub - assumes x, y E [0, bound - 1] */
-#define MODADD(x, y, bound) \
-    MUX((x) + (y) >= (bound), (x) + (y) - (bound), (x) + (y))
-#define MODSUB(x, y, bound) \
-    MUX(((int)(x)) - ((int)(y)) < 0, (x) - (y) + (bound), (x) - (y))
-
-/* module add/sub, bound = 2^k */
-#define MODADD_POW2(x, y, bound) (((x) + (y)) & ((bound) - 1))
-#define MODSUB_POW2(x, y, bound) (((x) - (y)) & ((bound) - 1))
-
-/* crc defines */
-#define CRC8_INIT_VALUE  0xff          /* Initial CRC8 checksum value */
-#define CRC8_GOOD_VALUE  0x9f          /* Good final CRC8 checksum value */
-#define CRC16_INIT_VALUE 0xffff                /* Initial CRC16 checksum value */
-#define CRC16_GOOD_VALUE 0xf0b8                /* Good final CRC16 checksum value */
-#define CRC32_INIT_VALUE 0xffffffff    /* Initial CRC32 checksum value */
-#define CRC32_GOOD_VALUE 0xdebb20e3    /* Good final CRC32 checksum value */
-
-/* bcm_format_flags() bit description structure */
-typedef struct bcm_bit_desc {
-       uint32  bit;
-       char*   name;
-} bcm_bit_desc_t;
-
-/* tag_ID/length/value_buffer tuple */
-typedef struct bcm_tlv {
-       uint8   id;
-       uint8   len;
-       uint8   data[1];
-} bcm_tlv_t;
-
-/* Check that bcm_tlv_t fits into the given buflen */
-#define bcm_valid_tlv(elt, buflen) ((buflen) >= 2 && (int)(buflen) >= (int)(2 + (elt)->len))
-
-/* buffer length for ethernet address from bcm_ether_ntoa() */
-#define ETHER_ADDR_STR_LEN     18      /* 18-bytes of Ethernet address buffer length */
-
-/* unaligned load and store macros */
-#ifdef IL_BIGENDIAN
-static INLINE uint32
-load32_ua(uint8 *a)
-{
-       return ((a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3]);
-}
-
-static INLINE void
-store32_ua(uint8 *a, uint32 v)
-{
-       a[0] = (v >> 24) & 0xff;
-       a[1] = (v >> 16) & 0xff;
-       a[2] = (v >> 8) & 0xff;
-       a[3] = v & 0xff;
-}
-
-static INLINE uint16
-load16_ua(uint8 *a)
-{
-       return ((a[0] << 8) | a[1]);
-}
-
-static INLINE void
-store16_ua(uint8 *a, uint16 v)
-{
-       a[0] = (v >> 8) & 0xff;
-       a[1] = v & 0xff;
-}
-
-#else
-
-static INLINE uint32
-load32_ua(uint8 *a)
-{
-       return ((a[3] << 24) | (a[2] << 16) | (a[1] << 8) | a[0]);
-}
-
-static INLINE void
-store32_ua(uint8 *a, uint32 v)
-{
-       a[3] = (v >> 24) & 0xff;
-       a[2] = (v >> 16) & 0xff;
-       a[1] = (v >> 8) & 0xff;
-       a[0] = v & 0xff;
-}
-
-static INLINE uint16
-load16_ua(uint8 *a)
-{
-       return ((a[1] << 8) | a[0]);
-}
-
-static INLINE void
-store16_ua(uint8 *a, uint16 v)
-{
-       a[1] = (v >> 8) & 0xff;
-       a[0] = v & 0xff;
-}
-
-#endif /* IL_BIGENDIAN */
-
-/* externs */
-/* crc */
-extern uint8 hndcrc8(uint8 *p, uint nbytes, uint8 crc);
-extern uint16 hndcrc16(uint8 *p, uint nbytes, uint16 crc);
-extern uint32 hndcrc32(uint8 *p, uint nbytes, uint32 crc);
-/* format/print */
-extern void printfbig(char *buf);
-
-/* IE parsing */
-extern bcm_tlv_t *bcm_next_tlv(bcm_tlv_t *elt, int *buflen);
-extern bcm_tlv_t *bcm_parse_tlvs(void *buf, int buflen, uint key);
-extern bcm_tlv_t *bcm_parse_ordered_tlvs(void *buf, int buflen, uint key);
-
-/* bcmerror */
-extern const char *bcmerrorstr(int bcmerror);
-
-/* multi-bool data type: set of bools, mbool is true if any is set */
-typedef uint32 mbool;
-#define mboolset(mb, bit)              (mb |= bit)             /* set one bool */
-#define mboolclr(mb, bit)              (mb &= ~bit)            /* clear one bool */
-#define mboolisset(mb, bit)            ((mb & bit) != 0)       /* TRUE if one bool is set */
-#define        mboolmaskset(mb, mask, val)     ((mb) = (((mb) & ~(mask)) | (val)))
-
-/* power conversion */
-extern uint16 bcm_qdbm_to_mw(uint8 qdbm);
-extern uint8 bcm_mw_to_qdbm(uint16 mw);
-
-/* generic datastruct to help dump routines */
-struct fielddesc {
-       char    *nameandfmt;
-       uint32  offset;
-       uint32  len;
-};
-
-/* Buffer structure for collecting string-formatted data 
-* using bcm_bprintf() API.
-* Use bcm_binit() to initialize before use
-*/
-struct bcmstrbuf
-{
-       char *buf;      /* pointer to current position in origbuf */
-       uint size;      /* current (residual) size in bytes */
-       char *origbuf;  /* unmodified pointer to orignal buffer */
-       uint origsize;  /* unmodified orignal buffer size in bytes */
-};
-
-extern void bcm_binit(struct bcmstrbuf *b, char *buf, uint size);
-extern int bcm_bprintf(struct bcmstrbuf *b, const char *fmt, ...);
-
-typedef  uint32 (*readreg_rtn)(void *arg0, void *arg1, uint32 offset);
-extern uint bcmdumpfields(readreg_rtn func_ptr, void *arg0, void *arg1, struct fielddesc *str,
-                          char *buf, uint32 bufsize);
-
-extern uint bcm_mkiovar(char *name, char *data, uint datalen, char *buf, uint len);
-extern uint bcm_bitcount(uint8 *bitmap, uint bytelength);
-
-#endif /* _bcmutils_h_ */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndchipc.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndchipc.h
new file mode 100644 (file)
index 0000000..44423aa
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * HND SiliconBackplane chipcommon support.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _hndchipc_h_
+#define _hndchipc_h_
+
+typedef void (*sb_serial_init_fn)(void *regs, uint irq, uint baud_base, uint reg_shift);
+
+extern void sb_serial_init(sb_t *sbh, sb_serial_init_fn add);
+
+extern void *sb_jtagm_init(sb_t *sbh, uint clkd, bool exttap);
+extern void sb_jtagm_disable(osl_t *osh, void *h);
+extern uint32 jtag_rwreg(osl_t *osh, void *h, uint32 ir, uint32 dr);
+
+typedef        void (*cc_isr_fn)(void* cbdata, uint32 ccintst);
+
+extern bool sb_cc_register_isr(sb_t *sbh, cc_isr_fn isr, uint32 ccintmask, void *cbdata);
+extern void sb_cc_isr(sb_t *sbh, chipcregs_t *regs);
+
+#endif /* _hndchipc_h_ */
index b9844b02e8c5355e84f2dbb1a8522ca93ae56735..78afb5256cc335de805d3aebf60d03b74e90fafe 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HND SiliconBackplane MIPS/ARM cores software interface.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: hndcpu.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef _hndcpu_h_
 
 #if defined(mips)
 #include <hndmips.h>
-#elif defined(__ARM_ARCH_4T__)
+#elif defined(__arm__) || defined(__thumb__) || defined(__thumb2__)
 #include <hndarm.h>
 #endif
 
 extern uint sb_irq(sb_t *sbh);
 extern uint32 sb_cpu_clock(sb_t *sbh);
-extern void sb_cpu_wait(void);
+extern void hnd_cpu_wait(sb_t *sbh);
+extern void hnd_cpu_jumpto(void *addr);
+extern void hnd_cpu_reset(sb_t *sbh);
 
 #endif /* _hndcpu_h_ */
index cd771cac3f349aa31ba6c0a5b3f5c5d42279fa51..95dc68c633c07a513f6e3b0eee624b1e6e5ef8bd 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HND SiliconBackplane MIPS core software interface.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: hndmips.h,v 1.1.1.8 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef _hndmips_h_
@@ -22,6 +22,7 @@ extern uint32 sb_memc_get_ncdl(sb_t *sbh);
 
 #if defined(BCMPERFSTATS)
 /* enable counting - exclusive version. Only one set of counters allowed at a time */
+extern void hndmips_perf_cyclecount_enable(void);
 extern void hndmips_perf_instrcount_enable(void);
 extern void hndmips_perf_icachecount_enable(void);
 extern void hndmips_perf_dcachecount_enable(void);
@@ -40,6 +41,6 @@ extern void hndmips_perf_icache_miss_enable(void);
 extern uint32 hndmips_perf_read_instrcount(void);
 extern uint32 hndmips_perf_read_cache_miss(void);
 extern uint32 hndmips_perf_read_cache_hit(void);
-#endif /*  defined(BCMINTERNAL) || defined (BCMPERFSTATS) */
+#endif 
 
 #endif /* _hndmips_h_ */
index 6ae0efff484b3511f9636234f7d88057a43691bf..d190ea99cda12c0fa67c03aaf752e815c3049045 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * HND SiliconBackplane PCI core software interface.
  *
- * $Id: hndpci.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
- * Copyright 2006, Broadcom Corporation
+ * $Id$
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -25,6 +25,9 @@ extern int extpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint of
 extern void sbpci_ban(uint16 core);
 extern int sbpci_init(sb_t *sbh);
 extern int sbpci_init_pci(sb_t *sbh);
-extern void sbpci_check(sb_t *sbh);
+extern void sbpci_init_cores(sb_t *sbh);
+extern void sbpci_arb_park(sb_t *sbh, uint parkid);
+
+#define PCI_PARK_NVRAM    0xff
 
 #endif /* _hndpci_h_ */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndpmu.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/hndpmu.h
new file mode 100644 (file)
index 0000000..1bd6872
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * HND SiliconBackplane PMU support.
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _hndpmu_h_
+#define _hndpmu_h_
+
+#define SET_LDO_VOLTAGE_LDO1   1
+#define SET_LDO_VOLTAGE_LDO2   2
+#define SET_LDO_VOLTAGE_LDO3   3
+#define SET_LDO_VOLTAGE_PAREF  4
+
+extern void sb_pmu_init(sb_t *sbh, osl_t *osh);
+extern void sb_pmu_pll_init(sb_t *sbh, osl_t *osh, uint32 xtalfreq);
+extern void sb_pmu_res_init(sb_t *sbh, osl_t *osh);
+extern uint32 sb_pmu_force_ilp(sb_t *sbh, osl_t *osh, bool force);
+extern uint32 sb_pmu_cpu_clock(sb_t *sbh, osl_t *osh);
+extern uint32 sb_pmu_alp_clock(sb_t *sbh, osl_t *osh);
+
+extern void sb_pmu_set_switcher_voltage(sb_t *sbh, osl_t *osh, uint8 bb_voltage, uint8 rf_voltage);
+extern void sb_pmu_set_ldo_voltage(sb_t *sbh, osl_t *osh, uint8 ldo, uint8 voltage);
+extern void sb_pmu_paref_ldo_enable(sb_t *sbh, osl_t *osh, bool enable);
+extern uint16 sb_pmu_fast_pwrup_delay(sb_t *sbh, osl_t *osh);
+extern void sb_pmu_otp_power(sb_t *sbh, osl_t *osh, bool on);
+extern void sb_pmu_rcal(sb_t *sbh, osl_t *osh);
+
+#endif /* _hndpmu_h_ */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/linux_gpio.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/linux_gpio.h
new file mode 100644 (file)
index 0000000..f74e92c
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Linux Broadcom BCM47xx GPIO char driver
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ *
+ * $Id$
+ */
+
+#ifndef _linux_gpio_h_
+#define _linux_gpio_h_
+
+struct gpio_ioctl {
+       uint32 mask;
+       uint32 val;
+};
+
+#define GPIO_IOC_MAGIC  'G'
+
+/* reserve/release a gpio to the caller */
+#define  GPIO_IOC_RESERVE      _IOWR(GPIO_IOC_MAGIC, 1, struct gpio_ioctl)
+#define  GPIO_IOC_RELEASE      _IOWR(GPIO_IOC_MAGIC, 2, struct gpio_ioctl)
+/* ioctls to read/write the gpio registers */
+#define  GPIO_IOC_OUT          _IOWR(GPIO_IOC_MAGIC, 3, struct gpio_ioctl)
+#define  GPIO_IOC_IN           _IOWR(GPIO_IOC_MAGIC, 4, struct gpio_ioctl)
+#define  GPIO_IOC_OUTEN                _IOWR(GPIO_IOC_MAGIC, 5, struct gpio_ioctl)
+
+#endif /* _linux_gpio_h_ */
index c6a12ae92181b70005e904c247becf17a33b22c8..e1dac33c5d7e341f4262a84da156c4af6af132c5 100644 (file)
@@ -2,7 +2,7 @@
  * Linux-specific abstractions to gain some independence from linux kernel versions.
  * Pave over some 2.2 versus 2.4 versus 2.6 kernel differences.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: linuxver.h,v 1.1.1.10 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef _linuxver_h_
 #define _linuxver_h_
 
-#include <linux/config.h>
 #include <linux/version.h>
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
+#include <linux/config.h>
+#else
+#include <linux/autoconf.h>
+#endif
+#include <linux/module.h>
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0))
 /* __NO_VERSION__ must be defined for all linkables except one in 2.2 */
 #endif
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0) */
 
-#if defined(MODULE) && defined(MODVERSIONS)
-#include <linux/modversions.h>
-#endif
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 0)
-#include <linux/moduleparam.h>
-#endif
-
-
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
 #define module_param(_name_, _type_, _perm_)   MODULE_PARM(_name_, "i")
 #define module_param_string(_name_, _string_, _size_, _perm_) \
 #endif
 #endif /* LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 41) */
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 20)
+#define        MY_INIT_WORK(_work, _func, _data)       INIT_WORK(_work, _func)
+#else
+#define        MY_INIT_WORK(_work, _func, _data)       INIT_WORK(_work, _func, _data)
+typedef void (*work_func_t)(void *work);
+#endif /* < 2.6.20 */
+
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0))
 /* Some distributions have their own 2.6.x compatibility layers */
 #ifndef IRQ_NONE
@@ -110,6 +113,12 @@ cs_error(client_handle_t handle, int func, int ret)
 }
 #endif
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 15))
+
+typedef        struct pcmcia_device dev_link_t;
+
+#endif
+
 #endif /* CONFIG_PCMCIA */
 
 #ifndef __exit
@@ -414,4 +423,11 @@ pci_restore_state(struct pci_dev *dev, u32 *buffer)
 #define af_packet_priv                 data
 #endif
 
+/* suspend args */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
+#define DRV_SUSPEND_STATE_TYPE pm_message_t
+#else
+#define DRV_SUSPEND_STATE_TYPE uint32
+#endif
+
 #endif /* _linuxver_h_ */
index 2c87031fea977815fb5ef890270efc8219eec807..b291ea30b5e62ffbf30f120b083754c8d658a2b5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HND Run Time Environment for standalone MIPS programs.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: mipsinc.h,v 1.1.1.5 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _MISPINC_H
@@ -69,6 +69,7 @@
 #define C0_CTEXT       $4
 #define C0_PGMASK      $5
 #define C0_WIRED       $6
+#define C0_INFO                $7
 #define C0_BADVADDR    $8
 #define C0_COUNT       $9
 #define C0_TLBHI       $10
@@ -145,6 +146,7 @@ symbol:             .frame  sp, 0, ra
 #define C0_CTEXT       4               /* CP0: Context */
 #define C0_PGMASK      5               /* CP0: TLB PageMask */
 #define C0_WIRED       6               /* CP0: TLB Wired */
+#define C0_INFO                7               /* CP0: Info */
 #define C0_BADVADDR    8               /* CP0: Bad Virtual Address */
 #define C0_COUNT       9               /* CP0: Count */
 #define C0_TLBHI       10              /* CP0: TLB EntryHi */
index 9be443215c18a64ad9a74323aa98a84b433eda2a..fddd1983e812aac4e4154dd2f764cb8cc85925e3 100644 (file)
@@ -4,26 +4,66 @@
 #include <linux/delay.h>
 #include <typedefs.h>
 #include <linuxver.h>
-#include <bcmutils.h>
 #include <pcicfg.h>
 
 #define ASSERT(n)
 
+#ifndef ABS
+#define        ABS(a)                  (((a) < 0)?-(a):(a))
+#endif /* ABS */
+
+#ifndef MIN
+#define        MIN(a, b)               (((a) < (b))?(a):(b))
+#endif /* MIN */
+
+#ifndef MAX
+#define        MAX(a, b)               (((a) > (b))?(a):(b))
+#endif /* MAX */
+
+#define CEIL(x, y)             (((x) + ((y)-1)) / (y))
+#define        ROUNDUP(x, y)           ((((x)+((y)-1))/(y))*(y))
+#define        ISALIGNED(a, x)         (((a) & ((x)-1)) == 0)
+#define        ISPOWEROF2(x)           ((((x)-1)&(x)) == 0)
+#define VALID_MASK(mask)       !((mask) & ((mask) + 1))
+#ifndef OFFSETOF
+#define        OFFSETOF(type, member)  ((uint)(uintptr)&((type *)0)->member)
+#endif /* OFFSETOF */
+#ifndef ARRAYSIZE
+#define ARRAYSIZE(a)           (sizeof(a)/sizeof(a[0]))
+#endif
+
+/*
+ * Spin at most 'us' microseconds while 'exp' is true.
+ * Caller should explicitly test 'exp' when this completes
+ * and take appropriate error action if 'exp' is still true.
+ */
+#define SPINWAIT(exp, us) { \
+       uint countdown = (us) + 9; \
+       while ((exp) && (countdown >= 10)) {\
+               OSL_DELAY(10); \
+               countdown -= 10; \
+       } \
+}
+
+
+typedef void (*pktfree_cb_fn_t)(void *ctx, void *pkt, unsigned int status);
 /* Pkttag flag should be part of public information */
 typedef struct {
        bool pkttag;
-       uint pktalloced; /* Number of allocated packet buffers */
-       void *tx_fn;
-       void *tx_ctx;
+       uint pktalloced;        /* Number of allocated packet buffers */
+       bool mmbus;             /* Bus supports memory-mapped register accesses */
+       pktfree_cb_fn_t tx_fn;  /* Callback function for PKTFREE */
+       void *tx_ctx;           /* Context to the callback function */
 } osl_pubinfo_t;
 
 struct osl_info {
-       osl_pubinfo_t pub;
-       uint magic;
-       void *pdev;
-       uint malloced;
-       uint failed;
-       void *dbgmem_list;
+  osl_pubinfo_t pub;
+  uint magic;
+  void *pdev;
+  uint malloced;
+  uint failed;
+  uint bustype;
+  void *dbgmem_list;
 };
 
 typedef struct osl_info osl_t;
@@ -101,8 +141,8 @@ typedef struct osl_info osl_t;
 #define        MFREE(osh, addr, size)  kfree((addr))
 #define MALLOCED(osh)  (0)     
 
-#define        osl_delay               OSL_DELAY
-static inline void OSL_DELAY(uint usec)
+#define        OSL_DELAY       _osl_delay
+static inline void _osl_delay(uint usec)
 {
        uint d;
 
@@ -128,10 +168,10 @@ bcm_mdelay(uint ms)
 #define        OSL_PCMCIA_WRITE_ATTR(osh, offset, buf, size)
 
 #define        OSL_PCI_READ_CONFIG(osh, offset, size) \
-       osl_pci_read_config((osh), (offset), (size))
+       _osl_pci_read_config((osh), (offset), (size))
 
 static inline uint32
-osl_pci_read_config(osl_t *osh, uint offset, uint size)
+_osl_pci_read_config(osl_t *osh, uint offset, uint size)
 {
        uint val;
        uint retry = PCI_CFG_RETRY;      
@@ -146,9 +186,9 @@ osl_pci_read_config(osl_t *osh, uint offset, uint size)
 }
 
 #define        OSL_PCI_WRITE_CONFIG(osh, offset, size, val) \
-       osl_pci_write_config((osh), (offset), (size), (val))
+       _osl_pci_write_config((osh), (offset), (size), (val))
 static inline void
-osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val)
+_osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val)
 {
        uint retry = PCI_CFG_RETRY;      
 
@@ -156,24 +196,24 @@ osl_pci_write_config(osl_t *osh, uint offset, uint size, uint val)
                pci_write_config_dword(osh->pdev, offset, val);
                if (offset != PCI_BAR0_WIN)
                        break;
-               if (osl_pci_read_config(osh, offset, size) == val)
+               if (_osl_pci_read_config(osh, offset, size) == val)
                        break;
        } while (retry--);
 }
 
 
 /* return bus # for the pci device pointed by osh->pdev */
-#define OSL_PCI_BUS(osh)       osl_pci_bus(osh)
+#define OSL_PCI_BUS(osh)       _osl_pci_bus(osh)
 static inline uint
-osl_pci_bus(osl_t *osh)
+_osl_pci_bus(osl_t *osh)
 {
        return ((struct pci_dev *)osh->pdev)->bus->number;
 }
 
 /* return slot # for the pci device pointed by osh->pdev */
-#define OSL_PCI_SLOT(osh)      osl_pci_slot(osh)
+#define OSL_PCI_SLOT(osh)      _osl_pci_slot(osh)
 static inline uint
-osl_pci_slot(osl_t *osh)
+_osl_pci_slot(osl_t *osh)
 {
        return PCI_SLOT(((struct pci_dev *)osh->pdev)->devfn);
 }
index 8bb45957a7a929b4879a7e19fe31248cebb7daa6..dd468db76c3ae234c48c3be532ca7e1b9d64a06e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * pcicfg.h: PCI configuration constants and structures.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: pcicfg.h,v 1.1.1.11 2006/04/08 06:13:40 honor Exp $
+ * $Id$
  */
 
 #ifndef        _h_pcicfg_
@@ -170,6 +170,14 @@ typedef struct _pci_config_regs {
 #undef PCI_CLASS_DOCK
 #endif /* __NetBSD__ */
 
+#ifdef EFI
+#undef PCI_CLASS_BRIDGE
+#undef PCI_CLASS_OLD
+#undef PCI_CLASS_DISPLAY
+#undef PCI_CLASS_SERIAL
+#undef PCI_CLASS_SATELLITE
+#endif /* EFI */
+
 /* Classes and subclasses */
 
 typedef enum {
@@ -406,6 +414,11 @@ typedef struct _pciconfig_cap_pwrmgmt {
        unsigned char data;
 } pciconfig_cap_pwrmgmt;
 
+#define PME_CAP_PM_STATES (0x1f << 27) /* Bits 31:27 states that can generate PME */
+#define PME_CSR_OFFSET     0x4         /* 4-bytes offset */
+#define PME_CSR_PME_EN   (1 << 8)      /* Bit 8 Enable generating of PME */
+#define PME_CSR_PME_STAT  (1 << 15)    /* Bit 15 PME got asserted */
+
 /* Data structure to define the PCIE capability */
 typedef struct _pciconfig_cap_pcie {
        unsigned char capID;
@@ -463,7 +476,7 @@ typedef struct _pcie_enhanced_caphdr {
                                                 * 8KB window, so their address is the "regular"
                                                 * address plus 4K
                                                 */
-#define PCI_BAR0_WINSZ         8192            /* bar0 window size */
+#define PCI_BAR0_WINSZ         (16 * 1024)     /* bar0 window size Match with corerev 13 */
 
 /* On pci corerev >= 13 and all pcie, the bar0 is now 16KB and it maps: */
 #define        PCI_16KB0_PCIREGS_OFFSET (8 * 1024)     /* bar0 + 8K accesses pci/pcie core registers */
index 03c5cf19a09a043b09546e82c431c10766cf0f40..c3d4c6110e66fa9b306dc2cdd7b7f03b2770f85d 100644 (file)
@@ -5,8 +5,8 @@
  * jtag, 0/1/2 uarts, clock frequency control, a watchdog interrupt timer,
  * gpio interface, extbus, and support for serial and parallel flashes.
  *
- * $Id: sbchipc.h,v 1.1.1.14 2006/04/15 01:29:08 michael Exp $
- * Copyright 2006, Broadcom Corporation
+ * $Id$
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -19,7 +19,6 @@
 #ifndef        _SBCHIPC_H
 #define        _SBCHIPC_H
 
-
 #ifndef _LANGUAGE_ASSEMBLY
 
 /* cpp contortions to concatenate w/arg prescan */
@@ -29,6 +28,7 @@
 #define        PAD             _XSTR(__LINE__)
 #endif /* PAD */
 
+
 typedef volatile struct {
        uint32  chipid;                 /* 0x0 */
        uint32  capabilities;
@@ -62,20 +62,26 @@ typedef volatile struct {
        /* Silicon backplane configuration broadcast control */
        uint32  broadcastaddress;       /* 0x50 */
        uint32  broadcastdata;
-       uint32  PAD[2];
 
        /* gpio - cleared only by power-on-reset */
+       uint32  gpiopullup;             /* 0x58, corerev >= 20 */
+       uint32  gpiopulldown;           /* 0x5c, corerev >= 20 */
        uint32  gpioin;                 /* 0x60 */
        uint32  gpioout;
        uint32  gpioouten;
        uint32  gpiocontrol;
        uint32  gpiointpolarity;
        uint32  gpiointmask;
-       uint32  PAD[2];
+
+       /* GPIO events corerev >= 11 */
+       uint32  gpioevent;
+       uint32  gpioeventintmask;
 
        /* Watchdog timer */
        uint32  watchdog;               /* 0x80 */
-       uint32  PAD[1];
+
+       /* GPIO events corerev >= 11 */
+       uint32  gpioeventintpolarity;
 
        /* GPIO based LED powersave registers corerev >= 16 */
        uint32  gpiotimerval;           /* 0x88 */
@@ -114,10 +120,31 @@ typedef volatile struct {
        uint32  prog_waitcount;
        uint32  flash_config;
        uint32  flash_waitcount;
-       uint32  PAD[44];
-
-       /* Clock control and hardware workarounds */
-       uint32  clk_ctl_st;
+       uint32  PAD[4];
+
+       /* Enhanced Coexistance Interface (ECI) registers (corerev >= 21) */
+       uint32  eci_output;             /* 0x140 */
+       uint32  eci_control;
+       uint32  eci_inputlo;
+       uint32  eci_inputmi;
+       uint32  eci_inputhi;
+       uint32  eci_inputintpolaritylo;
+       uint32  eci_inputintpolaritymi;
+       uint32  eci_inputintpolarityhi;
+       uint32  eci_intmasklo;
+       uint32  eci_intmaskmi;
+       uint32  eci_intmaskhi;
+       uint32  eci_eventlo;
+       uint32  eci_eventmi;
+       uint32  eci_eventhi;
+       uint32  eci_eventmasklo;
+       uint32  eci_eventmaskmi;
+       uint32  eci_eventmaskhi;
+       uint32  PAD[23];
+
+
+       /* Clock control and hardware workarounds (corerev >= 20) */
+       uint32  clk_ctl_st;             /* 0x1e0 */
        uint32  hw_war;
        uint32  PAD[70];
 
@@ -140,12 +167,47 @@ typedef volatile struct {
        uint8   uart1lsr;
        uint8   uart1msr;
        uint8   uart1scratch;
+       uint32  PAD[126];
+
+       /* PMU registers (corerev >= 20) */
+       uint32  pmucontrol;             /* 0x600 */
+       uint32  pmucapabilities;
+       uint32  pmustatus;
+       uint32  res_state;
+       uint32  res_pending;
+       uint32  pmutimer;
+       uint32  min_res_mask;
+       uint32  max_res_mask;
+       uint32  res_table_sel;
+       uint32  res_dep_mask;
+       uint32  res_updn_timer;
+       uint32  res_timer;
+       uint32  clkstretch;
+       uint32  pmuwatchdog;
+       uint32  PAD[2];
+       uint32  res_req_timer_sel;
+       uint32  res_req_timer;
+       uint32  res_req_mask;
+       uint32  PAD;
+       uint32  chipcontrol_addr;
+       uint32  chipcontrol_data;
+       uint32  regcontrol_addr;
+       uint32  regcontrol_data;
+       uint32  pllcontrol_addr;
+       uint32  pllcontrol_data;
+       uint32  PAD[102];
+       uint16  otp[512];
 } chipcregs_t;
 
 #endif /* _LANGUAGE_ASSEMBLY */
 
+/* corecontrol */
+#define        CC_UE           (1 << 0)                /* uart enable */
+
 #define        CC_CHIPID               0
 #define        CC_CAPABILITIES         4
+#define CC_OTPST               0x10
+#define CC_CHIPST              0x2c
 #define        CC_JTAGCMD              0x30
 #define        CC_JTAGIR               0x34
 #define        CC_JTAGDR               0x38
@@ -158,7 +220,18 @@ typedef volatile struct {
 #define        CC_CLKC_M3              0xa0
 #define        CC_CLKDIV               0xa4
 #define        CC_SYS_CLK_CTL          0xc0
-#define        CC_OTP                  0x800
+#define        CC_CLK_CTL_ST           SB_CLK_CTL_ST
+#define        PMU_CTL                 0x600
+#define        PMU_CAP                 0x604
+#define        PMU_ST                  0x608
+#define PMU_TIMER              0x614
+#define        PMU_MIN_RES_MASK        0x618
+#define        PMU_MAX_RES_MASK        0x61c
+#define PMU_REG_CONTROL_ADDR   0x658
+#define PMU_REG_CONTROL_DATA   0x65C
+#define PMU_PLL_CONTROL_ADDR   0x660
+#define PMU_PLL_CONTROL_DATA   0x664
+#define        CC_OTP                  0x800           /* OTP address space */
 
 /* chipid */
 #define        CID_ID_MASK             0x0000ffff      /* Chip Id mask */
@@ -170,24 +243,26 @@ typedef volatile struct {
 #define CID_CC_SHIFT           24
 
 /* capabilities */
-#define        CAP_UARTS_MASK          0x00000003      /* Number of uarts */
-#define CAP_MIPSEB             0x00000004      /* MIPS is in big-endian mode */
-#define CAP_UCLKSEL            0x00000018      /* UARTs clock select */
-#define CAP_UINTCLK            0x00000008      /* UARTs are driven by internal divided clock */
-#define CAP_UARTGPIO           0x00000020      /* UARTs own Gpio's 15:12 */
-#define CAP_EXTBUS_MASK                0x000000c0      /* External bus mask */
-#define CAP_EXTBUS_NONE                0x00000000      /* No ExtBus present */
-#define CAP_EXTBUS_FULL                0x00000040      /* ExtBus: PCMCIA, IDE & Prog */
-#define CAP_EXTBUS_PROG                0x00000080      /* ExtBus: ProgIf only */
-#define        CAP_FLASH_MASK          0x00000700      /* Type of flash */
-#define        CAP_PLL_MASK            0x00038000      /* Type of PLL */
-#define CAP_PWR_CTL            0x00040000      /* Power control */
-#define CAP_OTPSIZE            0x00380000      /* OTP Size (0 = none) */
-#define CAP_OTPSIZE_SHIFT      19              /* OTP Size shift */
-#define CAP_OTPSIZE_BASE       5               /* OTP Size base */
-#define CAP_JTAGP              0x00400000      /* JTAG Master Present */
-#define CAP_ROM                        0x00800000      /* Internal boot rom active */
-#define CAP_BKPLN64            0x08000000      /* 64-bit backplane */
+#define        CC_CAP_UARTS_MASK       0x00000003      /* Number of uarts */
+#define CC_CAP_MIPSEB          0x00000004      /* MIPS is in big-endian mode */
+#define CC_CAP_UCLKSEL         0x00000018      /* UARTs clock select */
+#define CC_CAP_UINTCLK         0x00000008      /* UARTs are driven by internal divided clock */
+#define CC_CAP_UARTGPIO                0x00000020      /* UARTs own Gpio's 15:12 */
+#define CC_CAP_EXTBUS_MASK     0x000000c0      /* External bus mask */
+#define CC_CAP_EXTBUS_NONE     0x00000000      /* No ExtBus present */
+#define CC_CAP_EXTBUS_FULL     0x00000040      /* ExtBus: PCMCIA, IDE & Prog */
+#define CC_CAP_EXTBUS_PROG     0x00000080      /* ExtBus: ProgIf only */
+#define        CC_CAP_FLASH_MASK       0x00000700      /* Type of flash */
+#define        CC_CAP_PLL_MASK         0x00038000      /* Type of PLL */
+#define CC_CAP_PWR_CTL         0x00040000      /* Power control */
+#define CC_CAP_OTPSIZE         0x00380000      /* OTP Size (0 = none) */
+#define CC_CAP_OTPSIZE_SHIFT   19              /* OTP Size shift */
+#define CC_CAP_OTPSIZE_BASE    5               /* OTP Size base */
+#define CC_CAP_JTAGP           0x00400000      /* JTAG Master Present */
+#define CC_CAP_ROM             0x00800000      /* Internal boot rom active */
+#define CC_CAP_BKPLN64         0x08000000      /* 64-bit backplane */
+#define        CC_CAP_PMU              0x10000000      /* PMU Present, rev >= 20 */
+#define        CC_CAP_ECI              0x20000000      /* ECI Present, rev >= 21 */
 
 /* PLL type */
 #define PLL_NONE               0x00000000
@@ -199,39 +274,72 @@ typedef volatile struct {
 #define PLL_TYPE6              0x00028000      /* 100/200 or 120/240 only */
 #define PLL_TYPE7              0x00038000      /* 25Mhz, 4 dividers */
 
+/* ALP clock on pre-PMU chips */
+#define        ALP_CLOCK               20000000
+
+/* HT clock */
+#define        HT_CLOCK                80000000
+
+/* watchdog clock */
+#define WATCHDOG_CLOCK_5354    32000           /* Hz */
+
 /* corecontrol */
 #define CC_UARTCLKO            0x00000001      /* Drive UART with internal clock */
 #define        CC_SE                   0x00000002      /* sync clk out enable (corerev >= 3) */
+#define CC_UARTCLKEN           0x00000008      /* enable UART Clock (corerev > = 21 */
 
 /* chipcontrol */
 #define CHIPCTRL_4321A0_DEFAULT        0x3a4           
 #define CHIPCTRL_4321A1_DEFAULT        0x0a4           
 
-/* Fields in the otpstatus register */
-#define        OTPS_PROGFAIL           0x80000000
-#define        OTPS_PROTECT            0x00000007
-#define        OTPS_HW_PROTECT         0x00000001
-#define        OTPS_SW_PROTECT         0x00000002
-#define        OTPS_CID_PROTECT        0x00000004
-
-/* Fields in the otpcontrol register */
-#define        OTPC_RECWAIT            0xff000000
-#define        OTPC_PROGWAIT           0x00ffff00
-#define        OTPC_PRW_SHIFT          8
-#define        OTPC_MAXFAIL            0x00000038
-#define        OTPC_VSEL               0x00000006
-#define        OTPC_SELVL              0x00000001
-
-/* Fields in otpprog */
-#define        OTPP_COL_MASK           0x000000ff
-#define        OTPP_ROW_MASK           0x0000ff00
-#define        OTPP_ROW_SHIFT          8
-#define        OTPP_READERR            0x10000000
-#define        OTPP_VALUE              0x20000000
-#define        OTPP_VALUE_SHIFT                29
-#define        OTPP_READ               0x40000000
-#define        OTPP_START              0x80000000
-#define        OTPP_BUSY               0x80000000
+/* Fields in the otpstatus register in rev >= 21 */
+#define OTPS_OL_MASK           0x000000ff
+#define OTPS_OL_MFG            0x00000001      /* manuf row is locked */
+#define OTPS_OL_OR1            0x00000002      /* otp redundancy row 1 is locked */
+#define OTPS_OL_OR2            0x00000004      /* otp redundancy row 2 is locked */
+#define OTPS_OL_GU             0x00000008      /* general use region is locked */
+#define OTPS_GUP_MASK          0x00000f00
+#define OTPS_GUP_SHIFT         8
+#define OTPS_GUP_HW            0x00000100      /* h/w subregion is programmed */
+#define OTPS_GUP_SW            0x00000200      /* s/w subregion is programmed */
+#define OTPS_GUP_CI            0x00000400      /* chipid/pkgopt subregion is programmed */
+#define OTPS_GUP_FUSE          0x00000800      /* fuse subregion is programmed */
+#define OTPS_READY             0x00001000
+#define OTPS_RV(x)             (1 << (16 + (x)))
+
+/* Fields in the otpcontrol register in rev >= 21 */
+#define OTPC_PROGSEL           0x00000001
+#define OTPC_PCOUNT_MASK       0x0000000e
+#define OTPC_PCOUNT_SHIFT      1
+#define OTPC_VSEL_MASK         0x000000f0
+#define OTPC_VSEL_SHIFT                4
+#define OTPC_TMM_MASK          0x00000700
+#define OTPC_TMM_SHIFT         8
+#define OTPC_ODM               0x00000800
+#define OTPC_PROGEN            0x80000000
+
+/* Fields in otpprog in rev >= 21 */
+#define OTPP_COL_MASK          0x000000ff
+#define OTPP_COL_SHIFT         0
+#define OTPP_ROW_MASK          0x0000ff00
+#define OTPP_ROW_SHIFT         8
+#define OTPP_OC_MASK           0x0f000000
+#define OTPP_OC_SHIFT          24
+#define OTPP_READERR           0x10000000
+#define OTPP_VALUE_MASK                0x20000000
+#define OTPP_VALUE_SHIFT       29
+#define OTPP_START_BUSY                0x80000000
+
+/* Opcodes for OTPP_OC field */
+#define OTPPOC_READ            0
+#define OTPPOC_BIT_PROG                1
+#define OTPPOC_VERIFY          3
+#define OTPPOC_INIT            4
+#define OTPPOC_SET             5
+#define OTPPOC_RESET           6
+#define OTPPOC_OCST            7
+#define OTPPOC_ROW_LOCK                8
+#define OTPPOC_PRESCN_TEST     9
 
 /* jtagcmd */
 #define JCMD_START             0x80000000
@@ -272,7 +380,12 @@ typedef volatile struct {
 
 /* intstatus/intmask */
 #define        CI_GPIO                 0x00000001      /* gpio intr */
-#define        CI_EI                   0x00000002      /* ro: ext intr pin (corerev >= 3) */
+#define        CI_EI                   0x00000002      /* extif intr (corerev >= 3) */
+#define        CI_TEMP                 0x00000004      /* temp. ctrl intr (corerev >= 15) */
+#define        CI_SIRQ                 0x00000008      /* serial IRQ intr (corerev >= 15) */
+#define        CI_ECI                  0x00000010      /* eci intr (corerev >= 21) */
+#define        CI_PMU                  0x00000020      /* pmu intr (corerev >= 21) */
+#define        CI_UART                 0x00000040      /* uart intr (corerev >= 21) */
 #define        CI_WDRESET              0x80000000      /* watchdog reset occurred */
 
 /* slow_clk_ctl */
@@ -306,6 +419,43 @@ typedef volatile struct {
 #define SYCC_CD_MASK           0xffff0000      /* ClkDiv  (ILP = 1/(4 * (divisor + 1)) */
 #define SYCC_CD_SHIFT          16
 
+/* pcmcia_iowait */
+#define        PI_W0_MASK              0x0000003f      /* waitcount0 */
+#define        PI_W1_MASK              0x00001f00      /* waitcount1 */
+#define        PI_W1_SHIFT             8
+#define        PI_W2_MASK              0x001f0000      /* waitcount2 */
+#define        PI_W2_SHIFT             16
+#define        PI_W3_MASK              0x1f000000      /* waitcount3 */
+#define        PI_W3_SHIFT             24
+
+/* prog_waitcount */
+#define        PW_W0_MASK              0x0000001f      /* waitcount0 */
+#define        PW_W1_MASK              0x00001f00      /* waitcount1 */
+#define        PW_W1_SHIFT             8
+#define        PW_W2_MASK              0x001f0000      /* waitcount2 */
+#define        PW_W2_SHIFT             16
+#define        PW_W3_MASK              0x1f000000      /* waitcount3 */
+#define        PW_W3_SHIFT             24
+
+#define PW_W0                  0x0000000c
+#define PW_W1                  0x00000a00
+#define PW_W2                  0x00020000
+#define PW_W3                  0x01000000
+
+/* watchdog */
+#define WATCHDOG_CLOCK 48000000                /* Hz */
+
+/* Fields in pmucontrol */
+#define        PCTL_ILP_DIV_MASK       0xffff0000
+#define        PCTL_ILP_DIV_SHIFT      16
+#define PCTL_NOILP_ON_WAIT     0x00000200
+#define        PCTL_HT_REQ_EN          0x00000100
+#define        PCTL_ALP_REQ_EN         0x00000080
+#define        PCTL_XTALFREQ_MASK      0x0000007c
+#define        PCTL_XTALFREQ_SHIFT     2
+#define        PCTL_ILP_DIV_EN         0x00000002
+#define        PCTL_LPO_SEL            0x00000001
+
 /* gpiotimerval */
 #define GPIO_ONTIME_SHIFT      16
 
@@ -377,9 +527,10 @@ typedef volatile struct {
 #define        CC_CFG_EM_PCMCIA        0x0004          /*   PCMCIA */
 #define        CC_CFG_EM_IDE           0x0006          /*   IDE */
 #define        CC_CFG_DS               0x0010          /* Data size, 0=8bit, 1=16bit */
-#define        CC_CFG_CD_MASK          0x0060          /* Sync: Clock divisor */
-#define        CC_CFG_CE               0x0080          /* Sync: Clock enable */
-#define        CC_CFG_SB               0x0100          /* Sync: Size/Bytestrobe */
+#define        CC_CFG_CD_MASK          0x00e0          /* Sync: Clock divisor, rev >= 20 */
+#define        CC_CFG_CE               0x0100          /* Sync: Clock enable, rev >= 20 */
+#define        CC_CFG_SB               0x0200          /* Sync: Size/Bytestrobe, rev >= 20 */
+#define        CC_CFG_IS               0x0400          /* Extif Sync Clk Select, rev >= 20 */
 
 /* ExtBus address space */
 #define        CC_EB_BASE              0x1a000000      /* Chipc ExtBus base address */
@@ -396,6 +547,7 @@ typedef volatile struct {
 /* Start/busy bit in flashcontrol */
 #define SFLASH_OPCODE          0x000000ff
 #define SFLASH_ACTION          0x00000700
+#define        SFLASH_CS_ACTIVE        0x00001000      /* Chip Select Active, rev >= 20 */
 #define SFLASH_START           0x80000000
 #define SFLASH_BUSY            SFLASH_START
 
@@ -419,6 +571,7 @@ typedef volatile struct {
 #define SFLASH_ST_BE           0x00c7          /* Bulk Erase */
 #define SFLASH_ST_DP           0x00b9          /* Deep Power-down */
 #define SFLASH_ST_RES          0x03ab          /* Read Electronic Signature */
+#define SFLASH_ST_CSA          0x1000          /* Keep chip select asserted */
 
 /* Status register bits for ST flashes */
 #define SFLASH_ST_WIP          0x01            /* Write In Progress */
@@ -456,31 +609,6 @@ typedef volatile struct {
 #define SFLASH_AT_ID_MASK                      0x38
 #define SFLASH_AT_ID_SHIFT                     3
 
-/* OTP regions */
-#define        OTP_HW_REGION   OTPS_HW_PROTECT
-#define        OTP_SW_REGION   OTPS_SW_PROTECT
-#define        OTP_CID_REGION  OTPS_CID_PROTECT
-
-/* OTP regions (Byte offsets from otp size) */
-#define        OTP_SWLIM_OFF   (-8)
-#define        OTP_CIDBASE_OFF 0
-#define        OTP_CIDLIM_OFF  8
-
-/* Predefined OTP words (Word offset from otp size) */
-#define        OTP_BOUNDARY_OFF (-4)
-#define        OTP_HWSIGN_OFF  (-3)
-#define        OTP_SWSIGN_OFF  (-2)
-#define        OTP_CIDSIGN_OFF (-1)
-
-#define        OTP_CID_OFF     0
-#define        OTP_PKG_OFF     1
-#define        OTP_FID_OFF     2
-#define        OTP_RSV_OFF     3
-#define        OTP_LIM_OFF     4
-
-#define        OTP_SIGNATURE   0x578a
-#define        OTP_MAGIC       0x4e56
-
 /* 
  * These are the UART port assignments, expressed as offsets from the base
  * register.  These assignments should hold for any serial port based on
@@ -507,10 +635,223 @@ typedef volatile struct {
 #define UART_LSR_RXRDY 0x01    /* Receiver ready */
 #define UART_FCR_FIFO_ENABLE 1 /* FIFO control register bit controlling FIFO enable/disable */
 
+/* Interrupt Identity Register (IIR) bits */
+#define UART_IIR_FIFO_MASK     0xc0    /* IIR FIFO disable/enabled mask */
+#define UART_IIR_INT_MASK      0xf     /* IIR interrupt ID source */
+#define UART_IIR_MDM_CHG       0x0     /* Modem status changed */
+#define UART_IIR_NOINT         0x1     /* No interrupt pending */
+#define UART_IIR_THRE          0x2     /* THR empty */
+#define UART_IIR_RCVD_DATA     0x4     /* Received data available */
+#define UART_IIR_RCVR_STATUS   0x6     /* Receiver status */
+#define UART_IIR_CHAR_TIME     0xc     /* Character time */
+
 /* Interrupt Enable Register (IER) bits */
 #define UART_IER_EDSSI 8       /* enable modem status interrupt */
 #define UART_IER_ELSI  4       /* enable receiver line status interrupt */
 #define UART_IER_ETBEI  2      /* enable transmitter holding register empty interrupt */
 #define UART_IER_ERBFI 1       /* enable data available interrupt */
 
+/* pmustatus */
+#define        PST_INTPEND     0x0040
+#define        PST_SBCLKST     0x0030
+#define        PST_ALPAVAIL    0x0008
+#define        PST_HTAVAIL     0x0004
+#define        PST_RESINIT     0x0003
+
+/* pmucapabilities */
+#define PCAP_REV_MASK  0x000000ff
+
+/* PMU Resource Request Timer registers */
+/* This is based on PmuRev0 */
+#define        PRRT_TIME_MASK  0x03ff
+#define        PRRT_INTEN      0x0400
+#define        PRRT_REQ_ACTIVE 0x0800
+#define        PRRT_ALP_REQ    0x1000
+#define        PRRT_HT_REQ     0x2000
+
+/* PMU resource bit position */
+#define PMURES_BIT(bit)        (1 << (bit))
+
+/* PMU corerev and chip specific PLL controls.
+ * PMU<rev>_PLL<num>_XXXX where <rev> is PMU corerev and <num> is an arbitary number
+ * to differentiate different PLLs controlled by the same PMU rev.
+ */
+/* pllcontrol registers */
+/* PDIV, div_phy, div_arm, div_adc, dith_sel, ioff, kpd_scale, lsb_sel, mash_sel, lf_c & lf_r */
+#define        PMU0_PLL0_PLLCTL0               0
+#define        PMU0_PLL0_PC0_PDIV_MASK         1
+#define        PMU0_PLL0_PC0_PDIV_FREQ         25000
+#define PMU0_PLL0_PC0_DIV_ARM_MASK     0x00000038
+#define PMU0_PLL0_PC0_DIV_ARM_SHIFT    3
+#define PMU0_PLL0_PC0_DIV_ARM_BASE     8
+
+/* PC0_DIV_ARM for PLLOUT_ARM */
+#define PMU0_PLL0_PC0_DIV_ARM_110MHZ   0
+#define PMU0_PLL0_PC0_DIV_ARM_97_7MHZ  1
+#define PMU0_PLL0_PC0_DIV_ARM_88MHZ    2
+#define PMU0_PLL0_PC0_DIV_ARM_80MHZ    3 /* Default */
+#define PMU0_PLL0_PC0_DIV_ARM_73_3MHZ  4
+#define PMU0_PLL0_PC0_DIV_ARM_67_7MHZ  5
+#define PMU0_PLL0_PC0_DIV_ARM_62_9MHZ  6
+#define PMU0_PLL0_PC0_DIV_ARM_58_6MHZ  7
+
+/* Wildcard base, stop_mod, en_lf_tp, en_cal & lf_r2 */
+#define        PMU0_PLL0_PLLCTL1               1
+#define        PMU0_PLL0_PC1_WILD_INT_MASK     0xf0000000
+#define        PMU0_PLL0_PC1_WILD_INT_SHIFT    28
+#define        PMU0_PLL0_PC1_WILD_FRAC_MASK    0x0fffff00
+#define        PMU0_PLL0_PC1_WILD_FRAC_SHIFT   8
+#define        PMU0_PLL0_PC1_STOP_MOD          0x00000040
+
+/* Wildcard base, vco_calvar, vco_swc, vco_var_selref, vso_ical & vco_sel_avdd */
+#define        PMU0_PLL0_PLLCTL2               2
+#define        PMU0_PLL0_PC2_WILD_INT_MASK     0xf
+#define        PMU0_PLL0_PC2_WILD_INT_SHIFT    4
+
+/* Chip specific PMU resources. */
+#define RES4328_EXT_SWITCHER_PWM       0       /* 0x00001 */
+#define RES4328_BB_SWITCHER_PWM                1       /* 0x00002 */
+#define RES4328_BB_SWITCHER_BURST      2       /* 0x00004 */
+#define RES4328_BB_EXT_SWITCHER_BURST  3       /* 0x00008 */
+#define RES4328_ILP_REQUEST            4       /* 0x00010 */
+#define RES4328_RADIO_SWITCHER_PWM     5       /* 0x00020 */
+#define RES4328_RADIO_SWITCHER_BURST   6       /* 0x00040 */
+#define RES4328_ROM_SWITCH             7       /* 0x00080 */
+#define RES4328_PA_REF_LDO             8       /* 0x00100 */
+#define RES4328_RADIO_LDO              9       /* 0x00200 */
+#define RES4328_AFE_LDO                        10      /* 0x00400 */
+#define RES4328_PLL_LDO                        11      /* 0x00800 */
+#define RES4328_BG_FILTBYP             12      /* 0x01000 */
+#define RES4328_TX_FILTBYP             13      /* 0x02000 */
+#define RES4328_RX_FILTBYP             14      /* 0x04000 */
+#define RES4328_XTAL_PU                        15      /* 0x08000 */
+#define RES4328_XTAL_EN                        16      /* 0x10000 */
+#define RES4328_BB_PLL_FILTBYP         17      /* 0x20000 */
+#define RES4328_RF_PLL_FILTBYP         18      /* 0x40000 */
+#define RES4328_BB_PLL_PU              19      /* 0x80000 */
+
+#define RES5354_EXT_SWITCHER_PWM       0       /* 0x00001 */
+#define RES5354_BB_SWITCHER_PWM                1       /* 0x00002 */
+#define RES5354_BB_SWITCHER_BURST      2       /* 0x00004 */
+#define RES5354_BB_EXT_SWITCHER_BURST  3       /* 0x00008 */
+#define RES5354_ILP_REQUEST            4       /* 0x00010 */
+#define RES5354_RADIO_SWITCHER_PWM     5       /* 0x00020 */
+#define RES5354_RADIO_SWITCHER_BURST   6       /* 0x00040 */
+#define RES5354_ROM_SWITCH             7       /* 0x00080 */
+#define RES5354_PA_REF_LDO             8       /* 0x00100 */
+#define RES5354_RADIO_LDO              9       /* 0x00200 */
+#define RES5354_AFE_LDO                        10      /* 0x00400 */
+#define RES5354_PLL_LDO                        11      /* 0x00800 */
+#define RES5354_BG_FILTBYP             12      /* 0x01000 */
+#define RES5354_TX_FILTBYP             13      /* 0x02000 */
+#define RES5354_RX_FILTBYP             14      /* 0x04000 */
+#define RES5354_XTAL_PU                        15      /* 0x08000 */
+#define RES5354_XTAL_EN                        16      /* 0x10000 */
+#define RES5354_BB_PLL_FILTBYP         17      /* 0x20000 */
+#define RES5354_RF_PLL_FILTBYP         18      /* 0x40000 */
+#define RES5354_BB_PLL_PU              19      /* 0x80000 */
+
+/* pllcontrol registers */
+/* ndiv_pwrdn, pwrdn_ch<x>, refcomp_pwrdn, dly_ch<x>, p1div, p2div, _bypsss_sdmod */
+#define PMU1_PLL0_PLLCTL0              0
+#define PMU1_PLL0_PC0_P1DIV_MASK       0x00f00000
+#define PMU1_PLL0_PC0_P1DIV_SHIFT      20
+#define PMU1_PLL0_PC0_P2DIV_MASK       0x0f000000
+#define PMU1_PLL0_PC0_P2DIV_SHIFT      24
+
+/* m<x>div */
+#define PMU1_PLL0_PLLCTL1              1
+#define PMU1_PLL0_PC1_M1DIV_MASK       0x000000ff
+#define PMU1_PLL0_PC1_M1DIV_SHIFT      0
+#define PMU1_PLL0_PC1_M2DIV_MASK       0x0000ff00
+#define PMU1_PLL0_PC1_M2DIV_SHIFT      8
+#define PMU1_PLL0_PC1_M3DIV_MASK       0x00ff0000
+#define PMU1_PLL0_PC1_M3DIV_SHIFT      16
+#define PMU1_PLL0_PC1_M4DIV_MASK       0xff000000
+#define PMU1_PLL0_PC1_M4DIV_SHIFT      24
+
+/* m<x>div, ndiv_dither_mfb, ndiv_mode, ndiv_int */
+#define PMU1_PLL0_PLLCTL2              2
+#define PMU1_PLL0_PC2_M5DIV_MASK       0x000000ff
+#define PMU1_PLL0_PC2_M5DIV_SHIFT      0
+#define PMU1_PLL0_PC2_M6DIV_MASK       0x0000ff00
+#define PMU1_PLL0_PC2_M6DIV_SHIFT      8
+#define PMU1_PLL0_PC2_NDIV_MODE_MASK   0x000e0000
+#define PMU1_PLL0_PC2_NDIV_MODE_SHIFT  17
+#define PMU1_PLL0_PC2_NDIV_INT_MASK    0x1ff00000
+#define PMU1_PLL0_PC2_NDIV_INT_SHIFT   20
+
+/* ndiv_frac */
+#define PMU1_PLL0_PLLCTL3              3
+#define PMU1_PLL0_PC3_NDIV_FRAC_MASK   0x00ffffff
+#define PMU1_PLL0_PC3_NDIV_FRAC_SHIFT  0
+
+/* pll_ctrl */
+#define PMU1_PLL0_PLLCTL4              4
+
+/* pll_ctrl, vco_rng, clkdrive_ch<x> */
+#define PMU1_PLL0_PLLCTL5              5
+#define PMU1_PLL0_PC5_CLK_DRV_MASK 0xffffff00
+#define PMU1_PLL0_PC5_CLK_DRV_SHIFT 8
+
+#define RES4325_BUCK_BOOST_BURST       0       /* 0x00000001 */
+#define RES4325_CBUCK_BURST            1       /* 0x00000002 */
+#define RES4325_CBUCK_PWM              2       /* 0x00000004 */
+#define RES4325_CLDO_CBUCK_BURST       3       /* 0x00000008 */
+#define RES4325_CLDO_CBUCK_PWM         4       /* 0x00000010 */
+#define RES4325_BUCK_BOOST_PWM         5       /* 0x00000020 */
+#define RES4325_ILP_REQUEST            6       /* 0x00000040 */
+#define RES4325_ABUCK_BURST            7       /* 0x00000080 */
+#define RES4325_ABUCK_PWM              8       /* 0x00000100 */
+#define RES4325_LNLDO1_PU              9       /* 0x00000200 */
+#define RES4325_LNLDO2_PU              10      /* 0x00000400 */
+#define RES4325_LNLDO3_PU              11      /* 0x00000800 */
+#define RES4325_LNLDO4_PU              12      /* 0x00001000 */
+#define RES4325_XTAL_PU                        13      /* 0x00002000 */
+#define RES4325_ALP_AVAIL              14      /* 0x00004000 */
+#define RES4325_RX_PWRSW_PU            15      /* 0x00008000 */
+#define RES4325_TX_PWRSW_PU            16      /* 0x00010000 */
+#define RES4325_RFPLL_PWRSW_PU         17      /* 0x00020000 */
+#define RES4325_LOGEN_PWRSW_PU         18      /* 0x00040000 */
+#define RES4325_AFE_PWRSW_PU           19      /* 0x00080000 */
+#define RES4325_BBPLL_PWRSW_PU         20      /* 0x00100000 */
+#define RES4325_HT_AVAIL               21      /* 0x00200000 */
+
+/* Chip specific ChipStatus register bits */
+#define CST4325_SPROM_OTP_SEL_MASK     0x00000003
+#define CST4325_DEFCIS_SEL             0       /* OTP is powered up, use def. CIS, no SPROM */
+#define CST4325_SPROM_SEL              1       /* OTP is powered up, SPROM is present */
+#define CST4325_OTP_SEL                        2       /* OTP is powered up, no SPROM */
+#define CST4325_OTP_PWRDN              3       /* OTP is powered down, SPROM is present */
+#define CST4325_SDIO_USB_MODE_MASK     0x00000004
+#define CST4325_SDIO_USB_MODE_SHIFT    2
+#define CST4325_RCAL_VALID_MASK                0x00000008
+#define CST4325_RCAL_VALID_SHIFT       3
+#define CST4325_RCAL_VALUE_MASK                0x000001f0
+#define CST4325_RCAL_VALUE_SHIFT       4
+#define CST4325_PMUTOP_2B_MASK                 0x00000200      /* 1 for 2b, 0 for to 2a */
+#define CST4325_PMUTOP_2B_SHIFT        9
+
+#define RES4312_SWITCHER_BURST         0       /* 0x00000001 */
+#define RES4312_SWITCHER_PWM           1       /* 0x00000002 */
+#define RES4312_PA_REF_LDO             2       /* 0x00000004 */
+#define RES4312_CORE_LDO_BURST         3       /* 0x00000008 */
+#define RES4312_CORE_LDO_PWM           4       /* 0x00000010 */
+#define RES4312_RADIO_LDO              5       /* 0x00000020 */
+#define RES4312_ILP_REQUEST            6       /* 0x00000040 */
+#define RES4312_BG_FILTBYP             7       /* 0x00000080 */
+#define RES4312_TX_FILTBYP             8       /* 0x00000100 */
+#define RES4312_RX_FILTBYP             9       /* 0x00000200 */
+#define RES4312_XTAL_PU                        10      /* 0x00000400 */
+#define RES4312_ALP_AVAIL              11      /* 0x00000800 */
+#define RES4312_BB_PLL_FILTBYP         12      /* 0x00001000 */
+#define RES4312_RF_PLL_FILTBYP         13      /* 0x00002000 */
+#define RES4312_HT_AVAIL               14      /* 0x00004000 */
+
+/*
+* Maximum delay for the PMU state transition.
+* This is an upper bound intended for spinwaits etc.
+*/
+#define PMU_MAX_TRANSITION_DLY 15000
+
 #endif /* _SBCHIPC_H */
index 7a44e5fbaab2b8747c4f59f335ce03c027c72fff..f609f3c2eb45a9c4cc26c3c1fc291338204efdba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Broadcom SiliconBackplane hardware register definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,11 +9,12 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbconfig.h,v 1.1.1.11 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBCONFIG_H
 #define        _SBCONFIG_H
+#include "linuxver.h"
 
 /* cpp contortions to concatenate w/arg prescan */
 #ifndef PAD
 
 #define        SB_FLASH2               0x1c000000      /* Flash Region 2 (region 1 shadowed here) */
 #define        SB_FLASH2_SZ            0x02000000      /* Size of Flash Region 2 */
-
 #define        SB_EXTIF_BASE           0x1f000000      /* External Interface region base address */
+#define        SB_ARMCM3_ROM           0x1e000000      /* ARM Cortex-M3 ROM */
 #define        SB_FLASH1               0x1fc00000      /* MIPS Flash Region 1 */
 #define        SB_FLASH1_SZ            0x00400000      /* MIPS Size of Flash Region 1 */
-
-#define        SB_ROM                  0x20000000      /* ARM ROM */
-#define        SB_SRAM2                0x80000000      /* ARM SRAM Region 2 */
+#define        SB_ARM7S_ROM            0x20000000      /* ARM7TDMI-S ROM */
+#define        SB_ARMCM3_SRAM2         0x60000000      /* ARM Cortex-M3 SRAM Region 2 */
+#define        SB_ARM7S_SRAM2          0x80000000      /* ARM7TDMI-S SRAM Region 2 */
 #define        SB_ARM_FLASH1           0xffff0000      /* ARM Flash Region 1 */
 #define        SB_ARM_FLASH1_SZ        0x00010000      /* ARM Size of Flash Region 1 */
 
@@ -196,7 +197,7 @@ typedef volatile struct _sbconfig {
 #define        SBTMH_INT               0x2             /* interrupt */
 #define        SBTMH_BUSY              0x4             /* busy */
 #define        SBTMH_TO                0x00000020      /* timeout (sonics >= 2.3) */
-#define        SBTMH_FL_MASK           0x1fff0000      /* core-specific flags */
+#define        SBTMH_FL_MASK           0x0fff0000      /* core-specific flags */
 #define SBTMH_DMA64            0x10000000      /* supports DMA with 64-bit addresses */
 #define        SBTMH_GCR               0x20000000      /* gated clock request */
 #define        SBTMH_BISTF             0x40000000      /* bist failed */
@@ -323,7 +324,6 @@ typedef volatile struct _sbconfig {
 #define        SB_ILINE100             0x80a           /* iline100 core */
 #define        SB_IPSEC                0x80b           /* ipsec core */
 #define        SB_PCMCIA               0x80d           /* pcmcia core */
-#define SB_SDIOD               SB_PCMCIA       /* pcmcia core has sdio device */
 #define        SB_SOCRAM               0x80e           /* internal memory core */
 #define        SB_MEMC                 0x80f           /* memc sdram core */
 #define        SB_EXTIF                0x811           /* external interface core */
@@ -342,11 +342,32 @@ typedef volatile struct _sbconfig {
 #define        SB_MIMO                 0x821           /* MIMO phy core */
 #define        SB_SRAMC                0x822           /* SRAM controller core */
 #define        SB_MINIMAC              0x823           /* MINI MAC/phy core */
-#define        SB_ARM11                0x824           /* ARM 1176 core */
-#define        SB_ARM7                 0x825           /* ARM 7tdmi core */
+#define        SB_ARM7S                0x825           /* ARM7tdmi-s core */
+#define SB_SDIOD               0x829           /* SDIO device core */
+#define SB_ARMCM3              0x82a           /* ARM Cortex M3 core */
+#define SB_OCP                 0x830           /* OCP2OCP bridge core */
+#define SB_SC                  0x831           /* shared common core */
+#define SB_AHB                 0x832           /* OCP2AHB bridge core */
 
 #define        SB_CC_IDX               0               /* chipc, when present, is always core 0 */
 
+/* Not an enumeration space register, but common to all cores to
+ * communicate w/PMU regarding Silicon Backplane clocking.
+ */
+#define SB_CLK_CTL_ST          0x1e0           /* clock control and status */
+
+/* clk_ctl_st register */
+#define        CCS_FORCEALP            0x00000001      /* force ALP request */
+#define        CCS_FORCEHT             0x00000002      /* force HT request */
+#define        CCS_FORCEILP            0x00000004      /* force ILP request */
+#define        CCS_ALPAREQ             0x00000008      /* ALP Avail Request */
+#define        CCS_HTAREQ              0x00000010      /* HT Avail Request */
+#define        CCS_FORCEHWREQOFF       0x00000020      /* Force HW Clock Request Off */
+#define        CCS_ALPAVAIL            0x00010000      /* ALP is available */
+#define        CCS_HTAVAIL             0x00020000      /* HT is available */
+#define        CCS0_HTAVAIL            0x00010000      /* HT avail in chipc and pcmcia on 4328a0 */
+#define        CCS0_ALPAVAIL           0x00020000      /* ALP avail in chipc and pcmcia on 4328a0 */
+
 /* Not really related to Silicon Backplane, but a couple of software
  * conventions for the use the flash space:
  */
@@ -359,11 +380,11 @@ typedef volatile struct _sbconfig {
 #define        BISZ_MAGIC              0x4249535a      /* Marked with this value: 'BISZ' */
 #define        BISZ_MAGIC_IDX          0               /* Word 0: magic */
 #define        BISZ_TXTST_IDX          1               /*      1: text start */
-#define        BISZ_TXTEND_IDX         2               /*      2: text start */
-#define        BISZ_DATAST_IDX         3               /*      3: text start */
-#define        BISZ_DATAEND_IDX        4               /*      4: text start */
-#define        BISZ_BSSST_IDX          5               /*      5: text start */
-#define        BISZ_BSSEND_IDX         6               /*      6: text start */
+#define        BISZ_TXTEND_IDX         2               /*      2: text end */
+#define        BISZ_DATAST_IDX         3               /*      3: data start */
+#define        BISZ_DATAEND_IDX        4               /*      4: data end */
+#define        BISZ_BSSST_IDX          5               /*      5: bss start */
+#define        BISZ_BSSEND_IDX         6               /*      6: bss end */
 #define BISZ_SIZE              7               /* descriptor size in 32-bit intergers */
 
 #endif /* _SBCONFIG_H */
index 7c3f2a0d6c40aaba5922bfc5d3c263a2ea570f8c..078d7b2344136fc8619017e1bf702b8addef2ee5 100644 (file)
@@ -161,15 +161,6 @@ typedef volatile struct {
 #define        PA_W3_MASK      0x1f000000              /* waitcount3 */
 #define        PA_W3_SHIFT     24
 
-/* pcmcia_iowait */
-#define        PI_W0_MASK      0x3f                    /* waitcount0 */
-#define        PI_W1_MASK      0x1f00                  /* waitcount1 */
-#define        PI_W1_SHIFT     8
-#define        PI_W2_MASK      0x1f0000                /* waitcount2 */
-#define        PI_W2_SHIFT     16
-#define        PI_W3_MASK      0x1f000000              /* waitcount3 */
-#define        PI_W3_SHIFT     24
-
 /* prog_waitcount */
 #define        PW_W0_MASK      0x0000001f                      /* waitcount0 */
 #define        PW_W1_MASK      0x00001f00                      /* waitcount1 */
index 93f5ace8b8ec3c5ca2b0492ae13552fa9b7fb863..3fc442ee2b2b8e051ff99ef6c61a523f99339487 100644 (file)
@@ -7,7 +7,7 @@
  * interface. The core revision is stored in the SB ID register in SB
  * configuration space.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -15,7 +15,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbhndmips.h,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _sbhndmips_h_
index 74af8e1693cff95d4498bb91c4c1c0f22a11f482..f20cdf77f238fa69de00b09d550597d8166d4a09 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM47XX Sonics SiliconBackplane DDR/SDRAM controller core hardware definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbmemc.h,v 1.6 2006/03/02 12:33:44 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBMEMC_H
index 761e5b45136d96a308ec06985454aad1c175f66b..f35ed910e31aedc43aeea6de7a21b94f6cdc4796 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * HND SiliconBackplane PCI core hardware definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbpci.h,v 1.1.1.11 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _sbpci_h_
@@ -68,8 +68,11 @@ typedef struct sbpciregs {
 #define PCI_PARKID_EXT0                0       /* External master 0 */
 #define PCI_PARKID_EXT1                1       /* External master 1 */
 #define PCI_PARKID_EXT2                2       /* External master 2 */
-#define PCI_PARKID_INT         3       /* Internal master */
-#define PCI_PARKID_LAST                4       /* Last active master */
+#define PCI_PARKID_EXT3                3       /* External master 3 (rev >= 11) */
+#define PCI_PARKID_INT         3       /* Internal master (rev < 11) */
+#define PCI11_PARKID_INT       4       /* Internal master (rev >= 11) */
+#define PCI_PARKID_LAST                4       /* Last active master (rev < 11) */
+#define PCI11_PARKID_LAST      5       /* Last active master (rev >= 11) */
 
 /* Interrupt status/mask */
 #define PCI_INTA       0x01    /* PCI INTA# is asserted */
index 58990c9774b9c3f1f28c43731f11c137cf308778..9819c0c41a653b26fa4473ddba8774a2d359145c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM43XX SiliconBackplane PCIE core hardware definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbpcie.h,v 1.1.1.2 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBPCIE_H
 #define PCIE_BAR0_PCIECORE_OFFSET      0x2000
 #define PCIE_BAR0_CCCOREREG_OFFSET     0x3000
 
+/* different register spaces to access thr'u pcie indirect access */
+#define PCIE_CONFIGREGS        1               /* Access to config space */
+#define PCIE_PCIEREGS          2               /* Access to pcie registers */
+
 /* SB side: PCIE core and host control registers */
 typedef struct sbpcieregs {
        uint32 PAD[3];
        uint32 biststatus;      /* bist Status: 0x00C */
-       uint32 PAD[6];
+       uint32 gpiosel;         /* PCIE gpio sel: 0x010 */
+       uint32 gpioouten;       /* PCIE gpio outen: 0x14 */
+       uint32 PAD[4];
        uint32 sbtopcimailbox;  /* sb to pcie mailbox: 0x028 */
        uint32 PAD[54];
        uint32 sbtopcie0;       /* sb to pcie translation 0: 0x100 */
@@ -58,11 +64,12 @@ typedef struct sbpcieregs {
        uint32 mdiocontrol;     /* controls the mdio access: 0x128 */
        uint32 mdiodata;        /* Data to the mdio access: 0x12c */
 
-       /* pcie protocol phy/dllp/tlp register access mechanism */
-       uint32 pcieaddr;        /* address of the internal registeru: 0x130 */
-       uint32 pciedata;        /* Data to/from the internal regsiter: 0x134 */
+       /* pcie protocol phy/dllp/tlp register indirect access mechanism */
+       uint32 pcieindaddr;     /* indirect access to the internal register: 0x130 */
+       uint32 pcieinddata;     /* Data to/from the internal regsiter: 0x134 */
 
-       uint32 PAD[434];
+       uint32 clkreqenctrl;    /* >= rev 6, Clkreq rdma control : 0x138 */
+       uint32 PAD[433];
        uint16 sprom[36];       /* SPROM shadow Area */
 } sbpcieregs_t;
 
@@ -136,6 +143,7 @@ typedef struct sbpcieregs {
 #define PCIE_DLLP_NAKRXCTRREG          0x148 /* NAK Received Counter */
 #define PCIE_DLLP_TESTREG              0x14C /* Test */
 #define PCIE_DLLP_PKTBIST              0x150 /* Packet BIST */
+#define PCIE_DLLP_PCIE11               0x154 /* DLLP PCIE 1.1 reg */
 
 /* PCIE protocol TLP diagnostic registers */
 #define PCIE_TLP_CONFIGREG             0x000 /* Configuration */
@@ -192,9 +200,38 @@ typedef struct sbpcieregs {
 #define MDIODATA_DEV_TX                        0x1e    /* SERDES TX Dev */
 #define MDIODATA_DEV_RX                        0x1f    /* SERDES RX Dev */
 
-/* SERDES registers */
+/* SERDES RX registers */
+#define SERDES_RX_CTRL                 1       /* Rx cntrl */
 #define SERDES_RX_TIMER1               2       /* Rx Timer1 */
 #define SERDES_RX_CDR                  6       /* CDR */
 #define SERDES_RX_CDRBW                        7       /* CDR BW */
 
+/* SERDES RX control register */
+#define SERDES_RX_CTRL_FORCE           0x80    /* rxpolarity_force */
+#define SERDES_RX_CTRL_POLARITY                0x40    /* rxpolarity_value */
+
+/* SERDES PLL registers */
+#define SERDES_PLL_CTRL                 1       /* PLL control reg */
+#define PLL_CTRL_FREQDET_EN             0x4000  /* bit 14 is FREQDET on */
+
+#define PCIE_L1THRESHOLDTIME_MASK       0xFF00 /* bits 8 - 15 */
+#define PCIE_L1THRESHOLDTIME_SHIFT      8      /* PCIE_L1THRESHOLDTIME_SHIFT */
+#define PCIE_L1THRESHOLD_WARVAL         0x72   /* WAR value */
+
+/* SPROM offsets */
+#define SRSH_ASPM_OFFSET               4       /* word 4 */
+#define SRSH_ASPM_ENB                  0x18    /* bit 3, 4 */
+#define SRSH_CLKREQ_OFFSET             20      /* word 20 */
+#define SRSH_CLKREQ_ENB                        0x0800  /* bit 11 */
+
+/* Linkcontrol reg offset in PCIE Cap */
+#define PCIE_CAP_LINKCTRL_OFFSET       16      /* linkctrl offset in pcie cap */
+#define PCIE_CAP_LCREG_ASPML0s         0x01    /* ASPM L0s in linkctrl */
+#define PCIE_CAP_LCREG_ASPML1          0x02    /* ASPM L1 in linkctrl */
+#define PCIE_ASPM_ENAB                 0x03    /* ASPM L0s & L1 in linkctrl */
+#define PCIE_CLKREQ_ENAB               0x100   /* CLKREQ Enab in linkctrl */
+
+/* Status reg PCIE_PLP_STATUSREG */
+#define PCIE_PLP_POLARITYINV_STAT      0x10
+
 #endif /* _SBPCIE_H */
index 08fd453f4937e3680b8d88c0c003f339dd66829b..651bc139f4e65e45cfbaea55626bc4f3f1057cd0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM43XX Sonics SiliconBackplane PCMCIA core hardware definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbpcmcia.h,v 1.1.1.9 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBPCMCIA_H
@@ -75,6 +75,8 @@
 #define SROM_DATAH             (0x073a / 2)
 #define SROM_ADDRL             (0x073c / 2)
 #define SROM_ADDRH             (0x073e / 2)
+#define        SROM_INFO2              (0x0772 / 2)    /* Corerev >= 2 && <= 5 */
+#define        SROM_INFO               (0x07be / 2)    /* Corerev >= 6 */
 
 /*  Values for srom_cs: */
 #define SROM_IDLE              0
 #define SROM_WDS               7
 #define SROM_DONE              8
 
+/* Fields in srom_info: */
+#define        SRI_SZ_MASK             0x03
+#define        SRI_BLANK               0x04
+#define        SRI_OTP                 0x80
+
 /* CIS stuff */
 
 /* The CIS stops where the FCRs start */
 #define        CIS_SIZE                PCMCIA_FCR
 
+/* CIS tuple length field max */
+#define CIS_TUPLE_LEN_MAX      0xff
+
 /* Standard tuples we know about */
 
+#define        CISTPL_VERS_1           0x15            /* CIS ver, manf, dev & ver strings */
 #define        CISTPL_MANFID           0x20            /* Manufacturer and device id */
+#define CISTPL_FUNCID          0x21            /* Function identification */
 #define        CISTPL_FUNCE            0x22            /* Function extensions */
 #define        CISTPL_CFTABLE          0x1b            /* Config table entry */
+#define        CISTPL_END              0xff            /* End of the CIS tuple chain */
+
+/* Function identifier provides context for the function extentions tuple */
+
 
 /* Function extensions for LANs */
 
 #define HNBU_CCKPO             0x0b            /* 2 byte cck power offsets in rev 3 */
 #define HNBU_OFDMPO            0x0c            /* 4 byte 11g ofdm power offsets in rev 3 */
 #define HNBU_GPIOTIMER         0x0d            /* 2 bytes with on/off values in rev 3 */
-
+#define HNBU_PAPARMS5G         0x0e            /* 5G PA params */
+#define HNBU_ANT5G             0x0f            /* 4328 5G antennas available/gain */
+#define HNBU_RDLID             0x10            /* 2 byte USB remote downloader (RDL) product Id */
+#define HNBU_RSSISMBXA2G       0x11            /* 4328 2G RSSI mid pt sel & board switch arch,
+                                                * 2 bytes, rev 3.
+                                                */
+#define HNBU_RSSISMBXA5G       0x12            /* 4328 5G RSSI mid pt sel & board switch arch,
+                                                * 2 bytes, rev 3.
+                                                */
+#define HNBU_XTALFREQ          0x13            /* 4 byte Crystal frequency in kilohertz */
+#define HNBU_TRI2G             0x14            /* 4328 2G TR isolation, 1 byte */
+#define HNBU_TRI5G             0x15            /* 4328 5G TR isolation, 3 bytes */
+#define HNBU_RXPO2G            0x16            /* 4328 2G RX power offset, 1 byte */
+#define HNBU_RXPO5G            0x17            /* 4328 5G RX power offset, 1 byte */
+#define HNBU_BOARDNUM  0x18            /* board serial number, independent of mac addr */
+#define HNBU_MACADDR   0x19            /* mac addr override for the standard CIS LAN_NID */
+#define HNBU_RDLSN             0x1a            /* 2 bytes; serial # advertised in USB descriptor */
+#define HNBU_BOARDTYPE         0x1b            /* 2 bytes; boardtype */
+#define HNBU_RDLRNDIS          0x20            /* 1 byte; 1 = RDL advertises RNDIS config */
+#define HNBU_RDLRWU            0x30            /* 1 byte; 1 = RDL advertises Remote Wake-up */
+#define HNBU_SROM3SWRGN                0x80    /* 78 bytes; srom rev 3 s/w region without crc8
+                                        * plus extra info appended.
+                                        */
 
 /* sbtmstatelow */
 #define SBTML_INT_ACK          0x40000         /* ack the sb interrupt */
index dec6c2928932d15f0e81bafd6ad900e69f9e1154..615edabb8ef5cf11bdc25f5317445c90f331ba7b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM47XX Sonics SiliconBackplane SDRAM controller core hardware definitions.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbsdram.h,v 1.1.1.9 2006/03/02 13:03:52 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBSDRAM_H
@@ -26,16 +26,7 @@ typedef volatile struct sbsdramregs {
        uint32  pad2;
 } sbsdramregs_t;
 
-/* SDRAM simulation */
-#ifdef RAMSZ
-#define        SDRAMSZ         RAMSZ
-#else
-#define SDRAMSZ                (4 * 1024 * 1024)
-#endif
-
-extern uchar sdrambuf[SDRAMSZ];
-
-#endif /* _LANGUAGE_ASSEMBLY */
+#endif /* !_LANGUAGE_ASSEMBLY */
 
 /* SDRAM initialization control (initcontrol) register bits */
 #define SDRAM_CBR      0x0001  /* Writing 1 generates refresh cycle and toggles bit */
index f13bc2e408da8575026abb5277d47a4134f294a8..6dd49b763248a11f3490e1e45dfd979b30e21790 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM47XX Sonics SiliconBackplane embedded ram core
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,21 +9,21 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbsocram.h,v 1.1.1.3 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef        _SBSOCRAM_H
 #define        _SBSOCRAM_H
 
-#define        SR_COREINFO             0x00
-#define        SR_BWALLOC              0x04
-#define        SR_BISTSTAT             0x0c
-#define        SR_BANKINDEX            0x10
-#define        SR_BANKSTBYCTL          0x14
-
-
 #ifndef _LANGUAGE_ASSEMBLY
 
+/* cpp contortions to concatenate w/arg prescan */
+#ifndef PAD
+#define        _PADLINE(line)  pad ## line
+#define        _XSTR(line)     _PADLINE(line)
+#define        PAD             _XSTR(__LINE__)
+#endif /* PAD */
+
 /* Memcsocram core registers */
 typedef volatile struct sbsocramregs {
        uint32  coreinfo;
@@ -32,13 +32,28 @@ typedef volatile struct sbsocramregs {
        uint32  biststat;
        uint32  bankidx;
        uint32  standbyctrl;
+       uint32  PAD[116];
+       uint32  pwrctl;         /* corerev >= 2 */
 } sbsocramregs_t;
 
-#endif
+#endif /* _LANGUAGE_ASSEMBLY */
+
+/* Register offsets */
+#define        SR_COREINFO             0x00
+#define        SR_BWALLOC              0x04
+#define        SR_BISTSTAT             0x0c
+#define        SR_BANKINDEX            0x10
+#define        SR_BANKSTBYCTL          0x14
+#define SR_PWRCTL              0x1e8
 
 /* Coreinfo register */
-#define        SRCI_PT_MASK            0x30000
+#define        SRCI_PT_MASK            0x00030000
 #define        SRCI_PT_SHIFT           16
+/* corerev >= 3 */
+#define SRCI_LSS_MASK          0x00f00000
+#define SRCI_LSS_SHIFT         20
+#define SRCI_LRS_MASK          0x0f000000
+#define SRCI_LRS_SHIFT         24
 
 /* In corerev 0, the memory size is 2 to the power of the
  * base plus 16 plus to the contents of the memsize field plus 1.
@@ -61,4 +76,11 @@ typedef volatile struct sbsocramregs {
 #define        SRCI_SRBSZ_SHIFT        0
 
 #define SR_BSZ_BASE            14
+
+/* Standby control register */
+#define        SRSC_SBYOVR_MASK                0x80000000
+#define        SRSC_SBYOVR_SHIFT               31
+#define        SRSC_SBYOVRVAL_MASK             0x60000000
+#define        SRSC_SBYOVRVAL_SHIFT            29
+
 #endif /* _SBSOCRAM_H */
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbsprom.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/include/sbsprom.h
new file mode 100644 (file)
index 0000000..042ef04
--- /dev/null
@@ -0,0 +1,277 @@
+/*
+ * SPROM format definitions for the Broadcom 47xx and 43xx chip family.
+ *
+ * $Id$
+ * Copyright(c) 2002 Broadcom Corporation
+ */
+
+#ifndef        _SBSPROM_H
+#define        _SBSPROM_H
+
+#include "typedefs.h"
+#include "bcmdevs.h"
+
+/* A word is this many bytes */
+#define SRW            2
+
+/* offset into PCI config space for write enable bit */
+#define CFG_SROM_WRITABLE_OFFSET       0x88
+#define SROM_WRITEABLE                 0x10
+
+/* enumeration space consists of N contiguous 4Kbyte core register sets */
+#define SBCORES_BASE   0x18000000
+#define SBCORES_EACH   0x1000
+
+/* offset from BAR0 for srom space */
+#define SROM_BASE      4096
+
+/* number of 2-byte words in srom */
+#define SROM_SIZE      64
+
+#define SROM_BYTES     (SROM_SIZE * SRW)
+
+#define MAX_FN         4
+
+/* Word 0, Hardware control */
+#define SROM_HWCTL     0
+#define HW_FUNMSK      0x000f
+#define HW_FCLK                0x0200
+#define HW_CBM         0x0400
+#define HW_PIMSK       0xf000
+#define HW_PISHIFT     12
+#define HW_4301PISHIFT 13
+#define HW_PI4402      0x2
+#define HW_FUN4401     0x0001
+#define HW_FCLK4402    0x0000
+
+/* Word 1, common-power/boot-rom */
+#define SROM_COMMPW            1
+/* boot rom present bit */
+#define BR_PRESSHIFT   8
+/* 15:9 for n; boot rom size is 2^(14 + n) bytes */
+#define BR_SIZESHIFT   9
+
+/* Word 2, SubsystemId */
+#define SROM_SSID      2
+
+/* Word 3, VendorId */
+#define SROM_VID       3
+
+/* Function 0 info, function info length */
+#define SROM_FN0       4
+#define SROM_FNSZ      8
+
+/* Within each function: */
+/* Word 0, deviceID */
+#define SRFN_DID       0
+
+/* Words 1-2, ClassCode */
+#define SRFN_CCL       1
+/* Word 2, D0 Power */
+#define SRFN_CCHD0     2
+
+/* Word 3, PME and D1D2D3 power */
+#define SRFN_PMED123   3
+
+#define PME_IL         0
+#define PME_ENET0      1
+#define PME_ENET1      2
+#define PME_CODEC      3
+
+#define PME_4402_ENET  0
+#define PME_4402_CODEC 1
+#define PME_4301_WL    2
+#define PMEREP_4402_ENET       (PMERD3CV | PMERD3CA | PMERD3H | PMERD2 | PMERD1 | PMERD0 | PME)
+
+/* Word 4, Bar1 enable, pme reports */
+#define SRFN_B1PMER    4
+#define B1E            1
+#define B1SZMSK        0xe
+#define B1SZSH         1
+#define PMERMSK        0x0ff0
+#define PME            0x0010
+#define PMERD0         0x0020
+#define PMERD1         0x0040
+#define PMERD2         0x0080
+#define PMERD3H        0x0100
+#define PMERD3CA       0x0200
+#define PMERD3CV       0x0400
+#define IGNCLKRR       0x0800
+#define B0LMSK         0xf000
+
+/* Words 4-5, Bar0 Sonics value */
+#define SRFN_B0H       5
+/* Words 6-7, CIS Pointer */
+#define SRFN_CISL      6
+#define SRFN_CISH      7
+
+/* Words 36-38: iLine MAC address */
+#define SROM_I_MACHI   36
+#define SROM_I_MACMID  37
+#define SROM_I_MACLO   38
+
+/* Words 36-38: wireless0 MAC address on 43xx */
+#define SROM_W0_MACHI  36
+#define SROM_W0_MACMID 37
+#define SROM_W0_MACLO  38
+
+/* Words 39-41: enet0 MAC address */
+#define SROM_E0_MACHI  39
+#define SROM_E0_MACMID 40
+#define SROM_E0_MACLO  41
+
+/* Words 42-44: enet1 MAC address */
+#define SROM_E1_MACHI  42
+#define SROM_E1_MACMID 43
+#define SROM_E1_MACLO  44
+
+/* Words 42-44: wireless1 MAC address on 4309 */
+#define SROM_W1_MACHI  42
+#define SROM_W1_MACMID 43
+#define SROM_W1_MACLO  44
+
+#define SROM_EPHY      45
+
+/* Word 46: BdRev & Antennas0/1 & ccLock for 430x */
+#define SROM_REV_AA_LOCK       46
+
+/* Words 47-51 wl0 PA bx */
+#define SROM_WL0_PAB0  47
+#define SROM_WL0_PAB1  48
+#define SROM_WL0_PAB2  49
+#define SROM_WL0_PAB3  50
+#define SROM_WL0_PAB4  51
+
+/* Word 52: wl0/wl1 MaxPower */
+#define SROM_WL_MAXPWR 52
+
+/* Words 53-55 wl1 PA bx */
+#define SROM_WL1_PAB0  53
+#define SROM_WL1_PAB1  54
+#define SROM_WL1_PAB2  55
+
+/* Woprd 56: itt */
+#define SROM_ITT        56
+
+/* Words 59-62: OEM Space */
+#define SROM_WL_OEM    59
+#define SROM_OEM_SIZE  4
+
+/* Contents for the srom */
+
+#define BU4710_SSID    0x0400
+#define VSIM4710_SSID  0x0401
+#define QT4710_SSID    0x0402
+
+#define BU4610_SSID    0x0403
+#define VSIM4610_SSID  0x0404
+
+#define BU4307_SSID    0x0405
+#define BCM94301CB_SSID        0x0406
+#define BCM94301MP_SSID        0x0407
+#define BCM94307MP_SSID        0x0408
+#define AP4307_SSID    0x0409
+
+#define BU4309_SSID    0x040a
+#define BCM94309CB_SSID        0x040b
+#define BCM94309MP_SSID        0x040c
+#define AP4309_SSID    0x040d
+
+#define BU4402_SSID    0x4402
+
+#define CLASS_OTHER    0x8000
+#define CLASS_ETHER    0x0000
+#define CLASS_NET      0x0002
+#define CLASS_COMM     0x0007
+#define CLASS_MODEM    0x0300
+#define CLASS_MIPS     0x3000
+#define CLASS_PROC     0x000b
+#define CLASS_FLASH    0x0100
+#define CLASS_MEM      0x0005
+#define CLASS_SERIALBUS 0x000c
+#define CLASS_OHCI     0x0310
+
+/* Broadcom IEEE MAC addresses are 00:90:4c:xx:xx:xx */
+#define MACHI                  0x90
+
+#define MACMID_BU4710I         0x4c17
+#define MACMID_BU4710E0                0x4c18
+#define MACMID_BU4710E1                0x4c19
+
+#define MACMID_94710R1I                0x4c1a
+#define MACMID_94710R1E0       0x4c1b
+#define MACMID_94710R1E1       0x4c1c
+
+#define MACMID_94710R4I                0x4c1d
+#define MACMID_94710R4E0       0x4c1e
+#define MACMID_94710R4E1       0x4c1f
+
+#define MACMID_94710DEVI       0x4c20
+#define MACMID_94710DEVE0      0x4c21
+#define MACMID_94710DEVE1      0x4c22
+
+#define MACMID_BU4402          0x4c23
+
+#define MACMID_BU4610I         0x4c24
+#define MACMID_BU4610E0                0x4c25
+#define MACMID_BU4610E1                0x4c26
+
+#define MACMID_BU4307W         0x4c27
+#define MACMID_BU4307E         0x4c28
+
+#define MACMID_94301CB         0x4c29
+
+#define MACMID_94301MP         0x4c2a
+
+#define MACMID_94307MPW                0x4c2b
+#define MACMID_94307MPE                0x4c2c
+
+#define MACMID_AP4307W         0x4c2d
+#define MACMID_AP4307E         0x4c2e
+
+#define MACMID_BU4309W0                0x4c2f
+#define MACMID_BU4309W1                0x4c30
+#define MACMID_BU4309E         0x4c31
+
+#define MACMID_94309CBW0       0x4c32
+#define MACMID_94309CBW1       0x4c33
+
+#define MACMID_94309MPW0       0x4c34
+#define MACMID_94309MPW1       0x4c35
+#define MACMID_94309MPE                0x4c36
+
+#define MACMID_BU4401          0x4c37
+
+/* Enet phy settings one or two singles or a dual      */
+/* Bits 4-0 : MII address for enet0 (0x1f for not there */
+/* Bits 9-5 : MII address for enet1 (0x1f for not there */
+/* Bit 14   : Mdio for enet0  */
+/* Bit 15   : Mdio for enet1  */
+
+/* bu4710 with only one phy on enet1 with address 7: */
+#define SROM_EPHY_ONE  0x80ff
+
+/* bu4710 with two individual phys, at 6 and 7, */
+/* each mdio connected to its own mac: */
+#define SROM_EPHY_TWO  0x80e6
+
+/* bu4710 with a dual phy addresses 0 & 1, mdio-connected to enet0 */
+#define SROM_EPHY_DUAL 0x0001
+
+/* r1 board with a dual phy at 0, 1 (NOT swapped and mdc0 */
+#define SROM_EPHY_R1   0x0010
+
+/* r4 board with a single phy on enet0 at address 5 and a switch */
+/* chip on enet1 (speciall case: 0x1e */
+#define SROM_EPHY_R4   0x83e5
+
+/* 4402 uses an internal phy at phyaddr 1; want mdcport == coreunit == 0 */
+#define SROM_EPHY_INTERNAL 0x0001
+
+/* 4307 uses an external phy at phyaddr 0; want mdcport == coreunit == 0 */
+#define SROM_EPHY_ZERO 0x0000
+
+#define SROM_VERS      0x0001
+
+
+#endif /* _SBSPROM_H */
index db4d27136f3fa685b241996f96a30861b06471f7..ed95cb3815ef5c5a51c266db1e1cb5b37c5a4e32 100644 (file)
@@ -2,7 +2,7 @@
  * Misc utility routines for accessing chip-specific features
  * of Broadcom HNBU SiliconBackplane-based chips.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sbutils.h,v 1.4 2006/04/08 07:12:42 honor Exp $
+ * $Id$
  */
 
 #ifndef        _sbutils_h_
 #define        _sbutils_h_
 
 /* 
- * Datastructure to export all chip specific common variables
+ * Data structure to export all chip specific common variables
  * public (read-only) portion of sbutils handle returned by
  * sb_attach()/sb_kattach()
 */
@@ -29,15 +29,22 @@ struct sb_pub {
        uint    buscorerev;             /* buscore rev */
        uint    buscoreidx;             /* buscore index */
        int     ccrev;                  /* chip common core rev */
+       uint32  cccaps;                 /* chip common capabilities */
+       int     pmurev;                 /* pmu core rev */
+       uint32  pmucaps;                /* pmu capabilities */
        uint    boardtype;              /* board type */
        uint    boardvendor;            /* board vendor */
+       uint    boardflags;             /* board flags */
        uint    chip;                   /* chip number */
        uint    chiprev;                /* chip revision */
        uint    chippkg;                /* chip package option */
+       uint32  chipst;                 /* chip status */
        uint    sonicsrev;              /* sonics backplane rev */
+       bool    pr42780;                /* whether PCIE 42780 WAR applies to this chip */
+       bool    pr32414;                /* whether 432414 WAR applis to the chip */
 };
 
-typedef const struct sb_pub  sb_t;
+typedef const struct sb_pub sb_t;
 
 /*
  * Many of the routines below take an 'sbh' handle as their first arg.
@@ -48,10 +55,11 @@ typedef const struct sb_pub  sb_t;
  */
 
 #define        SB_OSH          NULL    /* Use for sb_kattach when no osh is available */
+
 /* exported externs */
 extern sb_t *sb_attach(uint pcidev, osl_t *osh, void *regs, uint bustype,
                        void *sdh, char **vars, uint *varsz);
-extern sb_t *sb_kattach(void);
+extern sb_t *sb_kattach(osl_t *osh);
 extern void sb_detach(sb_t *sbh);
 extern uint sb_chip(sb_t *sbh);
 extern uint sb_chiprev(sb_t *sbh);
@@ -67,16 +75,20 @@ extern uint sb_buscoretype(sb_t *sbh);
 extern uint sb_buscorerev(sb_t *sbh);
 extern uint sb_corelist(sb_t *sbh, uint coreid[]);
 extern uint sb_coreid(sb_t *sbh);
+extern uint sb_flag(sb_t *sbh);
 extern uint sb_coreidx(sb_t *sbh);
 extern uint sb_coreunit(sb_t *sbh);
 extern uint sb_corevendor(sb_t *sbh);
 extern uint sb_corerev(sb_t *sbh);
 extern void *sb_osh(sb_t *sbh);
 extern void sb_setosh(sb_t *sbh, osl_t *osh);
+extern uint sb_corereg(sb_t *sbh, uint coreidx, uint regoff, uint mask, uint val);
 extern void *sb_coreregs(sb_t *sbh);
 extern uint32 sb_coreflags(sb_t *sbh, uint32 mask, uint32 val);
+extern void sb_coreflags_wo(sb_t *sbh, uint32 mask, uint32 val);
 extern uint32 sb_coreflagshi(sb_t *sbh, uint32 mask, uint32 val);
 extern bool sb_iscoreup(sb_t *sbh);
+extern uint sb_findcoreidx(sb_t *sbh, uint coreid, uint coreunit);
 extern void *sb_setcoreidx(sb_t *sbh, uint coreidx);
 extern void *sb_setcore(sb_t *sbh, uint coreid, uint coreunit);
 extern int sb_corebist(sb_t *sbh);
@@ -88,6 +100,7 @@ extern void sb_core_tofixup(sb_t *sbh);
 extern void sb_core_disable(sb_t *sbh, uint32 bits);
 extern uint32 sb_clock_rate(uint32 pll_type, uint32 n, uint32 m);
 extern uint32 sb_clock(sb_t *sbh);
+extern uint32 sb_alp_clock(sb_t *sbh);
 extern void sb_pci_setup(sb_t *sbh, uint coremask);
 extern void sb_pcmcia_init(sb_t *sbh);
 extern void sb_watchdog(sb_t *sbh, uint ticks);
@@ -101,6 +114,17 @@ extern uint32 sb_gpiointmask(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
 extern uint32 sb_gpioled(sb_t *sbh, uint32 mask, uint32 val);
 extern uint32 sb_gpioreserve(sb_t *sbh, uint32 gpio_num, uint8 priority);
 extern uint32 sb_gpiorelease(sb_t *sbh, uint32 gpio_num, uint8 priority);
+extern uint32 sb_gpiopull(sb_t *sbh, bool updown, uint32 mask, uint32 val);
+extern uint32 sb_gpioevent(sb_t *sbh, uint regtype, uint32 mask, uint32 val);
+extern uint32 sb_gpio_int_enable(sb_t *sbh, bool enable);
+
+/* GPIO event handlers */
+typedef void (*gpio_handler_t)(uint32 stat, void *arg);
+
+extern void *sb_gpio_handler_register(sb_t *sbh, uint32 event,
+       bool level, gpio_handler_t cb, void *arg);
+extern void sb_gpio_handler_unregister(sb_t *sbh, void* gpioh);
+extern void sb_gpio_handler_process(sb_t *sbh);
 
 extern void sb_clkctl_init(sb_t *sbh);
 extern uint16 sb_clkctl_fast_pwrup_delay(sb_t *sbh);
@@ -108,7 +132,9 @@ extern bool sb_clkctl_clk(sb_t *sbh, uint mode);
 extern int sb_clkctl_xtal(sb_t *sbh, uint what, bool on);
 extern void sb_register_intr_callback(sb_t *sbh, void *intrsoff_fn, void *intrsrestore_fn,
                                       void *intrsenabled_fn, void *intr_arg);
-extern uint32 sb_set_initiator_to(sb_t *sbh, uint32 to);
+extern void sb_deregister_intr_callback(sb_t *sbh);
+extern uint32 sb_set_initiator_to(sb_t *sbh, uint32 to, uint idx);
+extern uint16 sb_d11_devid(sb_t *sbh);
 extern int sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
                         uint8 *pciclass, uint8 *pcisubclass, uint8 *pciprogif,
                         uint8 *pciheader);
@@ -119,7 +145,19 @@ extern bool sb_backplane64(sb_t *sbh);
 extern void sb_btcgpiowar(sb_t *sbh);
 
 
+#if defined(BCMDBG_ASSERT)
+extern bool sb_taclear(sb_t *sbh);
+#endif 
 
+#ifdef BCMDBG
+extern void sb_dump(sb_t *sbh, struct bcmstrbuf *b);
+extern void sb_dumpregs(sb_t *sbh, struct bcmstrbuf *b);
+extern void sb_view(sb_t *sbh);
+extern void sb_viewall(sb_t *sbh);
+extern void sb_clkctl_dump(sb_t *sbh, struct bcmstrbuf *b);
+extern uint8 sb_pcieL1plldown(sb_t *sbh);
+extern uint32 sb_pcielcreg(sb_t *sbh, uint32 mask, uint32 val);
+#endif
 
 extern bool sb_deviceremoved(sb_t *sbh);
 extern uint32 sb_socram_size(sb_t *sbh);
@@ -130,6 +168,20 @@ extern uint32 sb_socram_size(sb_t *sbh);
 * Return 0 on success, nonzero otherwise.
 */
 extern int sb_devpath(sb_t *sbh, char *path, int size);
+/* Read variable with prepending the devpath to the name */
+extern char *sb_getdevpathvar(sb_t *sbh, const char *name);
+extern int sb_getdevpathintvar(sb_t *sbh, const char *name);
+
+extern uint8 sb_pcieclkreq(sb_t *sbh, uint32 mask, uint32 val);
+extern void sb_war42780_clkreq(sb_t *sbh, bool clkreq);
+extern void sb_pci_sleep(sb_t *sbh);
+extern void sb_pci_down(sb_t *sbh);
+extern void sb_pci_up(sb_t *sbh);
+
+/* Wake-on-wireless-LAN (WOWL) */
+extern bool sb_pci_pmecap(sb_t *sbh);
+extern bool sb_pci_pmeclr(sb_t *sbh);
+extern void sb_pci_pmeen(sb_t *sbh);
 
 /* clkctl xtal what flags */
 #define        XTAL                    0x1             /* primary crystal oscillator (2050) */
@@ -143,7 +195,16 @@ extern int sb_devpath(sb_t *sbh, char *path, int size);
 /* GPIO usage priorities */
 #define GPIO_DRV_PRIORITY      0               /* Driver */
 #define GPIO_APP_PRIORITY      1               /* Application */
-#define GPIO_HI_PRIORITY   2           /* Highest priority. Ignore GPIO reservation */
+#define GPIO_HI_PRIORITY       2               /* Highest priority. Ignore GPIO reservation */
+
+/* GPIO pull up/down */
+#define GPIO_PULLUP            0
+#define GPIO_PULLDN            1
+
+/* GPIO event regtype */
+#define GPIO_REGEVT                    0       /* GPIO register event */
+#define GPIO_REGEVT_INTMSK             1       /* GPIO register event int mask */
+#define GPIO_REGEVT_INTPOL             2       /* GPIO register event int polarity */
 
 /* device path */
 #define SB_DEVPATH_BUFSZ       16              /* min buffer size in bytes */
index 21a6788fb2267e492579578ff9a01c5006a91dad..2bdd5fc13c1fd905a508382e64870715448a92ac 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Broadcom SiliconBackplane chipcommon serial flash interface
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,7 +9,7 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sflash.h,v 1.1.1.8 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #ifndef _sflash_h_
@@ -17,6 +17,7 @@
 
 #include <typedefs.h>
 #include <sbchipc.h>
+#include <sbutils.h>
 
 struct sflash {
        uint blocksize;         /* Block size */
@@ -26,11 +27,14 @@ struct sflash {
 };
 
 /* Utility functions */
-extern int sflash_poll(chipcregs_t *cc, uint offset);
-extern int sflash_read(chipcregs_t *cc, uint offset, uint len, uchar *buf);
-extern int sflash_write(chipcregs_t *cc, uint offset, uint len, const uchar *buf);
-extern int sflash_erase(chipcregs_t *cc, uint offset);
-extern int sflash_commit(chipcregs_t *cc, uint offset, uint len, const uchar *buf);
-extern struct sflash * sflash_init(chipcregs_t *cc);
+extern int sflash_poll(sb_t *sbh, chipcregs_t *cc, uint offset);
+extern int sflash_read(sb_t *sbh, chipcregs_t *cc,
+                       uint offset, uint len, uchar *buf);
+extern int sflash_write(sb_t *sbh, chipcregs_t *cc,
+                        uint offset, uint len, const uchar *buf);
+extern int sflash_erase(sb_t *sbh, chipcregs_t *cc, uint offset);
+extern int sflash_commit(sb_t *sbh, chipcregs_t *cc,
+                         uint offset, uint len, const uchar *buf);
+extern struct sflash *sflash_init(sb_t *sbh, chipcregs_t *cc);
 
 #endif /* _sflash_h_ */
index 4b48dfd2fe4736c56b3d00b273a5cbab3a4d7142..4620725f89bebcb2616aa5db218351a0da946bb4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * TRX image file header format.
  *
- * Copyright 2005, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
  * $Id$
- */ 
+ */
 
 #include <typedefs.h>
 
 #define TRX_MAGIC      0x30524448      /* "HDR0" */
-#define TRX_VERSION    1
-#define TRX_MAX_LEN    0x3A0000
-#define TRX_NO_HEADER  1               /* Do not write TRX header */   
+#define TRX_VERSION    1               /* Version 1 */
+#define TRX_MAX_LEN    0x7A0000        /* Max length */
+#define TRX_NO_HEADER  1               /* Do not write TRX header */
 #define TRX_GZ_FILES   0x2     /* Contains up to TRX_MAX_OFFSET individual gzip files */
-#define TRX_MAX_OFFSET 3
+#define TRX_MAX_OFFSET 3               /* Max number of individual files */
 
 struct trx_header {
        uint32 magic;           /* "HDR0" */
index 9c91e2cc57d717d0e4a8d744624fe5b6114aa5b5..adb6b1589d20b604a31dd8817a706510e60be0a8 100644 (file)
@@ -1,12 +1,12 @@
 /*
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: typedefs.h,v 1.1.1.12 2006/04/08 06:13:40 honor Exp $
+ * $Id$
  */
 
 #ifndef _TYPEDEFS_H_
@@ -69,10 +69,13 @@ typedef     unsigned char   bool;                   /* consistent w/BOOL */
 #endif /* ! __cplusplus */
 
 /* use the Windows ULONG_PTR type when compiling for 64 bit */
-#if defined(_WIN64)
+#if defined(_WIN64) && !defined(EFI)
 #include <basetsd.h>
 #define TYPEDEF_UINTPTR
-typedef ULONG_PTR      uintptr;
+typedef ULONG_PTR uintptr;
+#elif defined(__x86_64__)
+#define TYPEDEF_UINTPTR
+typedef unsigned long long int uintptr;
 #endif
 
 
@@ -80,6 +83,10 @@ typedef ULONG_PTR    uintptr;
 #define _NEED_SIZE_T_
 #endif
 
+#if defined(EFI) && !defined(_WIN64)
+#define _NEED_SIZE_T_
+#endif
+
 #if defined(_NEED_SIZE_T_)
 typedef long unsigned int size_t;
 #endif
@@ -104,14 +111,20 @@ typedef unsigned __int64 uint64;
 #endif
 
 
-#if defined(linux)
+#ifdef linux
 #define TYPEDEF_UINT
 #define TYPEDEF_USHORT
 #define TYPEDEF_ULONG
-#endif
+#ifdef __KERNEL__
+#include <linux/version.h>
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 19))
+#define TYPEDEF_BOOL
+#endif /* >= 2.6.19 */
+#endif /* __KERNEL__ */
+#endif /* linux */
 
 #if !defined(linux) && !defined(_WIN32) && !defined(_CFE_) && \
-       !defined(_HNDRTE_) && !defined(_MINOSL_) && !defined(__DJGPP__)
+       !defined(_HNDRTE_) && !defined(_MINOSL_) && !defined(__DJGPP__) && !defined(__IOPOS__)
 #define TYPEDEF_UINT
 #define TYPEDEF_USHORT
 #endif
@@ -137,7 +150,7 @@ typedef unsigned __int64 uint64;
 #endif /* __ICL */
 
 #if !defined(_WIN32) && !defined(_CFE_) && !defined(_MINOSL_) && \
-       !defined(__DJGPP__)
+       !defined(__DJGPP__) && !defined(__IOPOS__)
 
 /* pick up ushort & uint from standard types.h */
 #if defined(linux) && defined(__KERNEL__)
@@ -150,7 +163,7 @@ typedef unsigned __int64 uint64;
 
 #endif
 
-#endif /* !_WIN32 && !PMON && !_CFE_ && !_HNDRTE_  && !_MINOSL_ && !__DJGPP__ */
+#endif 
 
 #if defined(MACOSX)
 
@@ -320,7 +333,7 @@ typedef float64 float_t;
 
 #define INLINE __inline
 
-#elif __GNUC__
+#elif defined(__GNUC__)
 
 #define INLINE __inline__
 
@@ -353,8 +366,8 @@ typedef float64 float_t;
 #endif /* USE_TYPEDEF_DEFAULTS */
 
 /* 
- * Including the bcmdefs.h here, to make sure everyone including typedefs.h 
- * gets this automatically 
+ * Including the bcmdefs.h here, to make sure everyone including typedefs.h
+ * gets this automatically
 */
 #include "bcmdefs.h"
 
index d9af5ff8f82ff950fbd383a33b8ff42203880067..c37023bce7cb8519c14d8fe3c314bac5d09b0ab1 100644 (file)
@@ -15,7 +15,6 @@
 #include <osl.h>
 #include <bcmendian.h>
 #include <bcmnvram.h>
-#include <bcmutils.h>
 #include <sbsdram.h>
 
 extern struct nvram_tuple * BCMINIT(_nvram_realloc)(struct nvram_tuple *t, const char *name, const char *value);
@@ -244,10 +243,10 @@ BCMINITFN(_nvram_commit)(struct nvram_header *header)
                header->config_refresh |= SDRAM_REFRESH << 16;
                header->config_ncdl = 0;
        } else {
-               header->crc_ver_init |= (bcm_strtoul(init, NULL, 0) & 0xffff) << 16;
-               header->config_refresh = bcm_strtoul(config, NULL, 0) & 0xffff;
-               header->config_refresh |= (bcm_strtoul(refresh, NULL, 0) & 0xffff) << 16;
-               header->config_ncdl = bcm_strtoul(ncdl, NULL, 0);
+               header->crc_ver_init |= (simple_strtoul(init, NULL, 0) & 0xffff) << 16;
+               header->config_refresh = simple_strtoul(config, NULL, 0) & 0xffff;
+               header->config_refresh |= (simple_strtoul(refresh, NULL, 0) & 0xffff) << 16;
+               header->config_ncdl = simple_strtoul(ncdl, NULL, 0);
        }
 
        /* Clear data area */
@@ -276,7 +275,7 @@ BCMINITFN(_nvram_commit)(struct nvram_header *header)
        tmp.crc_ver_init = htol32(header->crc_ver_init);
        tmp.config_refresh = htol32(header->config_refresh);
        tmp.config_ncdl = htol32(header->config_ncdl);
-       crc = hndcrc8((char *) &tmp + 9, sizeof(struct nvram_header) - 9, CRC8_INIT_VALUE);
+       crc = hndcrc8((char *) &tmp + 9, sizeof(struct nvram_header) - 9, 0xff);
 
        /* Continue CRC8 over data bytes */
        crc = hndcrc8((char *) &header[1], header->len - sizeof(struct nvram_header), crc);
@@ -313,3 +312,46 @@ BCMINITFN(_nvram_exit)(void)
 {
        BCMINIT(nvram_free)();
 }
+
+/*
+ * Search the name=value vars for a specific one and return its value.
+ * Returns NULL if not found.
+ */
+char*
+getvar(char *vars, const char *name)
+{
+       char *s;
+       int len;
+
+       len = strlen(name);
+
+       /* first look in vars[] */
+       for (s = vars; s && *s;) {
+               /* CSTYLED */
+               if ((memcmp(s, name, len) == 0) && (s[len] == '='))
+                       return (&s[len+1]);
+
+               while (*s++)
+                       ;
+       }
+
+       /* then query nvram */
+       return (nvram_get(name));
+}
+
+/*
+ * Search the vars for a specific one and return its value as
+ * an integer. Returns 0 if not found.
+ */
+int
+getintvar(char *vars, const char *name)
+{
+       char *val;
+
+       if ((val = getvar(vars, name)) == NULL)
+               return (0);
+
+       return (simple_strtoul(val, NULL, 0));
+}
+
+
index 25104786d5c61dc2046c24cc3c53531fd07450a9..32278b37785570a8ad870ea36fbfbe426c72e62e 100644 (file)
@@ -33,7 +33,6 @@
 #include <osl.h>
 #include <bcmendian.h>
 #include <bcmnvram.h>
-#include <bcmutils.h>
 #include <sbconfig.h>
 #include <sbchipc.h>
 #include <sbutils.h>
@@ -53,6 +52,9 @@ static char nvram_buf[NVRAM_SPACE] __attribute__((aligned(PAGE_SIZE)));
 extern void *bcm947xx_sbh;
 extern spinlock_t bcm947xx_sbh_lock;
 
+static int cfe_env;
+extern char *cfe_env_get(char *nv_buf, const char *name);
+
 /* Convenience */
 #define sbh bcm947xx_sbh
 #define sbh_lock bcm947xx_sbh_lock
@@ -72,14 +74,14 @@ early_nvram_init(void)
 
        if ((cc = sb_setcore(sbh, SB_CC, 0)) != NULL) {
                base = KSEG1ADDR(SB_FLASH2);
-               switch (readl(&cc->capabilities) & CAP_FLASH_MASK) {
+               switch (readl(&cc->capabilities) & CC_CAP_FLASH_MASK) {
                case PFLASH:
                        lim = SB_FLASH2_SZ;
                        break;
 
                case SFLASH_ST:
                case SFLASH_AT:
-                       if ((info = sflash_init(cc)) == NULL)
+                       if ((info = sflash_init(sbh,cc)) == NULL)
                                return;
                        lim = info->size;
                        break;
@@ -105,6 +107,7 @@ early_nvram_init(void)
                                break;
                        *dst++ = *src++;
                }
+               cfe_env = 1;
                return;
        }
 
@@ -154,6 +157,9 @@ early_nvram_get(const char *name)
        if (!nvram_buf[0])
                early_nvram_init();
 
+       if (cfe_env)
+               return cfe_env_get(nvram_buf, name);
+
        /* Look for name=value and return value */
        var = &nvram_buf[sizeof(struct nvram_header)];
        end = nvram_buf + sizeof(nvram_buf) - 2;
index 8c8f6aab59e63e82d7fa8c19a0a2c1dcf58443dc..2d8549623a3970f9e06b64fdfc07384332db7453 100644 (file)
@@ -25,7 +25,6 @@
 
 #include <typedefs.h>
 #include <osl.h>
-#include <bcmutils.h>
 #include <sbconfig.h>
 #include <sbutils.h>
 #include <hndpci.h>
@@ -134,7 +133,7 @@ pcibios_init(void)
 {
        ulong flags;
 
-       if (!(sbh = sb_kattach()))
+       if (!(sbh = sb_kattach(SB_OSH)))
                panic("sb_kattach failed");
        spin_lock_init(&sbh_lock);
 
@@ -312,6 +311,25 @@ pcibios_enable_device(struct pci_dev *dev, int mask)
                        writel(0x7FF, (ulong)regs + 0x200);
                        udelay(1);
                }
+               /* PRxxxx: War for 5354 failures. */
+               if (sb_corerev(sbh) == 1) {
+                       uint32 tmp;
+
+                       /* Change Flush control reg */
+                       tmp = readl((uintptr)regs + 0x400);
+                       tmp &= ~8;
+                       writel(tmp, (uintptr)regs + 0x400);
+                       tmp = readl((uintptr)regs + 0x400);
+                       printk("USB20H fcr: 0x%x\n", tmp);
+
+                       /* Change Shim control reg */
+                       tmp = readl((uintptr)regs + 0x304);
+                       tmp &= ~0x100;
+                       writel(tmp, (uintptr)regs + 0x304);
+                       tmp = readl((uintptr)regs + 0x304);
+                       printk("USB20H shim cr: 0x%x\n", tmp);
+               }
+
        } else
                sb_core_reset(sbh, 0, 0);
 
index 4a18bb9563d4502c0320aba896455e73c3521b12..86e2970d24244725d7580d623c78a0364c70de36 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * BCM47XX Sonics SiliconBackplane MIPS core routines
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
@@ -9,27 +9,27 @@
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: hndmips.c,v 1.1.1.1 2006/02/27 03:43:16 honor Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
 #include <bcmdefs.h>
 #include <osl.h>
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <bcmdevs.h>
 #include <bcmnvram.h>
 #include <sbconfig.h>
-#include <sbextif.h>
 #include <sbchipc.h>
+#include <sbextif.h>
 #include <sbmemc.h>
 #include <mipsinc.h>
 #include <sbhndmips.h>
 #include <hndcpu.h>
+#include <hndmips.h>
 
 /* sbipsflag register format, indexed by irq. */
 static const uint32 sbips_int_mask[] = {
-       0,      /* placeholder */
+       0,                      /* placeholder */
        SBIPS_INT1_MASK,
        SBIPS_INT2_MASK,
        SBIPS_INT3_MASK,
@@ -37,7 +37,7 @@ static const uint32 sbips_int_mask[] = {
 };
 
 static const uint32 sbips_int_shift[] = {
-       0,      /* placeholder */
+       0,                      /* placeholder */
        SBIPS_INT1_SHIFT,
        SBIPS_INT2_SHIFT,
        SBIPS_INT3_SHIFT,
@@ -54,8 +54,7 @@ static const uint32 sbips_int_shift[] = {
 static uint shirq_map_base = 0;
 
 /* Returns the SB interrupt flag of the current core. */
-static uint32
-sb_getflag(sb_t *sbh)
+static uint32 sb_getflag(sb_t * sbh)
 {
        osl_t *osh;
        void *regs;
@@ -63,7 +62,7 @@ sb_getflag(sb_t *sbh)
 
        osh = sb_osh(sbh);
        regs = sb_coreregs(sbh);
-       sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+       sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
        return (R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK);
 }
@@ -72,8 +71,7 @@ sb_getflag(sb_t *sbh)
  * Returns the MIPS IRQ assignment of the current core. If unassigned,
  * 0 is returned.
  */
-uint
-sb_irq(sb_t *sbh)
+uint sb_irq(sb_t * sbh)
 {
        osl_t *osh;
        uint idx;
@@ -89,12 +87,13 @@ sb_irq(sb_t *sbh)
 
        if ((regs = sb_setcore(sbh, SB_MIPS, 0)) ||
            (regs = sb_setcore(sbh, SB_MIPS33, 0))) {
-               sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+               sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
                /* sbipsflag specifies which core is routed to interrupts 1 to 4 */
                sbipsflag = R_REG(osh, &sb->sbipsflag);
                for (irq = 1; irq <= 4; irq++) {
-                       if (((sbipsflag & sbips_int_mask[irq]) >> sbips_int_shift[irq]) == flag)
+                       if (((sbipsflag & sbips_int_mask[irq]) >>
+                            sbips_int_shift[irq]) == flag)
                                break;
                }
                if (irq == 5)
@@ -107,9 +106,7 @@ sb_irq(sb_t *sbh)
 }
 
 /* Clears the specified MIPS IRQ. */
-static void
-BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
-{
+static void BCMINITFN(sb_clearirq) (sb_t * sbh, uint irq) {
        osl_t *osh;
        void *regs;
        sbconfig_t *sb;
@@ -119,7 +116,7 @@ BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
        if (!(regs = sb_setcore(sbh, SB_MIPS, 0)) &&
            !(regs = sb_setcore(sbh, SB_MIPS33, 0)))
                ASSERT(regs);
-       sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+       sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
        if (irq == 0)
                W_REG(osh, &sb->sbintvec, 0);
@@ -134,8 +131,7 @@ BCMINITFN(sb_clearirq)(sb_t *sbh, uint irq)
  * The old assignment to the specified core is removed first.
  */
 static void
-BCMINITFN(sb_setirq)(sb_t *sbh, uint irq, uint coreid, uint coreunit)
-{
+BCMINITFN(sb_setirq) (sb_t * sbh, uint irq, uint coreid, uint coreunit) {
        osl_t *osh;
        void *regs;
        sbconfig_t *sb;
@@ -154,7 +150,7 @@ BCMINITFN(sb_setirq)(sb_t *sbh, uint irq, uint coreid, uint coreunit)
        if (!(regs = sb_setcore(sbh, SB_MIPS, 0)) &&
            !(regs = sb_setcore(sbh, SB_MIPS33, 0)))
                ASSERT(regs);
-       sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+       sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
        if (!oldirq)
                AND_REG(osh, &sb->sbintvec, ~(1 << flag));
@@ -175,9 +171,7 @@ BCMINITFN(sb_setirq)(sb_t *sbh, uint irq, uint coreid, uint coreunit)
  *
  * 'shirqmap' enables virtual dedicated OS IRQ mapping if non-zero.
  */
-void
-BCMINITFN(sb_mips_init)(sb_t *sbh, uint shirqmap)
-{
+void BCMINITFN(sb_mips_init) (sb_t * sbh, uint shirqmap) {
        osl_t *osh;
        ulong hz, ns, tmp;
        extifregs_t *eir;
@@ -199,28 +193,27 @@ BCMINITFN(sb_mips_init)(sb_t *sbh, uint shirqmap)
 
                /* Set timing for the flash */
                tmp = CEIL(10, ns) << FW_W3_SHIFT;      /* W3 = 10nS */
-               tmp = tmp | (CEIL(40, ns) << FW_W1_SHIFT); /* W1 = 40nS */
-               tmp = tmp | CEIL(120, ns);              /* W0 = 120nS */
+               tmp = tmp | (CEIL(40, ns) << FW_W1_SHIFT);      /* W1 = 40nS */
+               tmp = tmp | CEIL(120, ns);      /* W0 = 120nS */
                W_REG(osh, &eir->prog_waitcount, tmp);  /* 0x01020a0c for a 100Mhz clock */
 
                /* Set programmable interface timing for external uart */
                tmp = CEIL(10, ns) << FW_W3_SHIFT;      /* W3 = 10nS */
-               tmp = tmp | (CEIL(20, ns) << FW_W2_SHIFT); /* W2 = 20nS */
-               tmp = tmp | (CEIL(100, ns) << FW_W1_SHIFT); /* W1 = 100nS */
-               tmp = tmp | CEIL(120, ns);              /* W0 = 120nS */
+               tmp = tmp | (CEIL(20, ns) << FW_W2_SHIFT);      /* W2 = 20nS */
+               tmp = tmp | (CEIL(100, ns) << FW_W1_SHIFT);     /* W1 = 100nS */
+               tmp = tmp | CEIL(120, ns);      /* W0 = 120nS */
                W_REG(osh, &eir->prog_waitcount, tmp);  /* 0x01020a0c for a 100Mhz clock */
        } else if ((cc = sb_setcore(sbh, SB_CC, 0))) {
                /* Set timing for the flash */
                tmp = CEIL(10, ns) << FW_W3_SHIFT;      /* W3 = 10nS */
                tmp |= CEIL(10, ns) << FW_W1_SHIFT;     /* W1 = 10nS */
-               tmp |= CEIL(120, ns);                   /* W0 = 120nS */
-               if ((sb_corerev(sbh) < 9) ||
-                       (BCMINIT(sb_chip)(sbh) == 0x5365))
+               tmp |= CEIL(120, ns);   /* W0 = 120nS */
+               if ((sb_corerev(sbh) < 9) || (sb_chip(sbh) == 0x5365))
                        W_REG(osh, &cc->flash_waitcount, tmp);
 
                if ((sb_corerev(sbh) < 9) ||
-                   ((sb_chip(sbh) == BCM5350_CHIP_ID) && sb_chiprev(sbh) == 0) ||
-                       (BCMINIT(sb_chip)(sbh) == 0x5365)) {
+                   ((sb_chip(sbh) == BCM5350_CHIP_ID) && sb_chiprev(sbh) == 0)
+                   || (sb_chip(sbh) == 0x5365)) {
                        W_REG(osh, &cc->pcmcia_memwait, tmp);
                }
 
@@ -290,18 +283,21 @@ BCMINITFN(sb_cpu_clock)(sb_t *sbh)
                n = R_REG(osh, &eir->clockcontrol_n);
                m = R_REG(osh, &eir->clockcontrol_sb);
        } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-               pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
+               /* 5354 chip uses a non programmable PLL of frequency 240MHz */
+               if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+                       rate = 240000000;
+                       goto out;
+               }
+               pll_type = R_REG(osh, &cc->capabilities) & CC_CAP_PLL_MASK;
                n = R_REG(osh, &cc->clockcontrol_n);
                if ((pll_type == PLL_TYPE2) ||
                    (pll_type == PLL_TYPE4) ||
-                   (pll_type == PLL_TYPE6) ||
-                   (pll_type == PLL_TYPE7))
+                   (pll_type == PLL_TYPE6) || (pll_type == PLL_TYPE7))
                        m = R_REG(osh, &cc->clockcontrol_m3);
                else if (pll_type == PLL_TYPE5) {
                        rate = 200000000;
                        goto out;
-               }
-               else if (pll_type == PLL_TYPE3) {
+               } else if (pll_type == PLL_TYPE3) {
                        if (sb_chip(sbh) == BCM5365_CHIP_ID) {
                                rate = 200000000;
                                goto out;
@@ -314,9 +310,8 @@ BCMINITFN(sb_cpu_clock)(sb_t *sbh)
        } else
                goto out;
 
-
        /* calculate rate */
-       if (BCMINIT(sb_chip)(sbh) == 0x5365)
+       if (sb_chip(sbh) == 0x5365)
                rate = 100000000;
        else
                rate = sb_clock_rate(pll_type, n, m);
@@ -324,7 +319,7 @@ BCMINITFN(sb_cpu_clock)(sb_t *sbh)
        if (pll_type == PLL_TYPE6)
                rate = SB2MIPS_T6(rate);
 
-out:
+      out:
        /* switch back to previous core */
        sb_setcoreidx(sbh, idx);
 
@@ -333,30 +328,20 @@ out:
 
 #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4)
 
-static void
-BCMINITFN(handler)(void)
-{
-       __asm__(
-               ".set\tmips32\n\t"
-               "ssnop\n\t"
-               "ssnop\n\t"
-       /* Disable interrupts */
-       /*      MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~(ALLINTS | STO_IE)); */
+static void BCMINITFN(handler) (void) {
+       __asm__(".set\tmips32\n\t" "ssnop\n\t" "ssnop\n\t"
+               /* Disable interrupts */
+               /*      MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~(ALLINTS | STO_IE)); */
                "mfc0 $15, $12\n\t"
-       /* Just a Hack to not to use reg 'at' which was causing problems on 4704 A2 */
+               /* Just a Hack to not to use reg 'at' which was causing problems on 4704 A2 */
                "li $14, -31746\n\t"
                "and $15, $15, $14\n\t"
-               "mtc0 $15, $12\n\t"
-               "eret\n\t"
-               "nop\n\t"
-               "nop\n\t"
+               "mtc0 $15, $12\n\t" "eret\n\t" "nop\n\t" "nop\n\t"
                ".set\tmips0");
 }
 
 /* The following MUST come right after handler() */
-static void
-BCMINITFN(afterhandler)(void)
-{
+static void BCMINITFN(afterhandler) (void) {
 }
 
 /*
@@ -366,13 +351,15 @@ BCMINITFN(afterhandler)(void)
  * core rev. 15 to a DLL inside the MIPS core in 4785.
  */
 bool
-BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32 pciclock)
-{
+BCMINITFN(sb_mips_setclock) (sb_t * sbh, uint32 mipsclock, uint32 sbclock,
+                            uint32 pciclock) {
        extifregs_t *eir = NULL;
        chipcregs_t *cc = NULL;
        mipsregs_t *mipsr = NULL;
-       volatile uint32 *clockcontrol_n, *clockcontrol_sb, *clockcontrol_pci, *clockcontrol_m2;
-       uint32 orig_n, orig_sb, orig_pci, orig_m2, orig_mips, orig_ratio_parm, orig_ratio_cfg;
+       volatile uint32 *clockcontrol_n, *clockcontrol_sb, *clockcontrol_pci,
+           *clockcontrol_m2;
+       uint32 orig_n, orig_sb, orig_pci, orig_m2, orig_mips, orig_ratio_parm,
+           orig_ratio_cfg;
        uint32 pll_type, sync_mode;
        uint ic_size, ic_lsize;
        uint idx, i;
@@ -387,63 +374,83 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
        } n3m_table_t;
        static n3m_table_t BCMINITDATA(type1_table)[] = {
                /* 96.000 32.000 24.000 */
-               { 96000000, 0x0303, 0x04020011, 0x11030011, 0x11050011 },
-               /* 100.000 33.333 25.000 */
-               { 100000000, 0x0009, 0x04020011, 0x11030011, 0x11050011 },
-               /* 104.000 31.200 24.960 */
-               { 104000000, 0x0802, 0x04020011, 0x11050009, 0x11090009 },
-               /* 108.000 32.400 24.923 */
-               { 108000000, 0x0403, 0x04020011, 0x11050009, 0x02000802 },
-               /* 112.000 32.000 24.889 */
-               { 112000000, 0x0205, 0x04020011, 0x11030021, 0x02000403 },
-               /* 115.200 32.000 24.000 */
-               { 115200000, 0x0303, 0x04020009, 0x11030011, 0x11050011 },
-               /* 120.000 30.000 24.000 */
-               { 120000000, 0x0011, 0x04020011, 0x11050011, 0x11090011 },
-               /* 124.800 31.200 24.960 */
-               { 124800000, 0x0802, 0x04020009, 0x11050009, 0x11090009 },
-               /* 128.000 32.000 24.000 */
-               { 128000000, 0x0305, 0x04020011, 0x11050011, 0x02000305 },
-               /* 132.000 33.000 24.750 */
-               { 132000000, 0x0603, 0x04020011, 0x11050011, 0x02000305 },
-               /* 136.000 32.640 24.727 */
-               { 136000000, 0x0c02, 0x04020011, 0x11090009, 0x02000603 },
-               /* 140.000 30.000 24.706 */
-               { 140000000, 0x0021, 0x04020011, 0x11050021, 0x02000c02 },
-               /* 144.000 30.857 24.686 */
-               { 144000000, 0x0405, 0x04020011, 0x01020202, 0x11090021 },
-               /* 150.857 33.000 24.000 */
-               { 150857142, 0x0605, 0x04020021, 0x02000305, 0x02000605 },
-               /* 152.000 32.571 24.000 */
-               { 152000000, 0x0e02, 0x04020011, 0x11050021, 0x02000e02 },
-               /* 156.000 31.200 24.960 */
-               { 156000000, 0x0802, 0x04020005, 0x11050009, 0x11090009 },
-               /* 160.000 32.000 24.000 */
-               { 160000000, 0x0309, 0x04020011, 0x11090011, 0x02000309 },
-               /* 163.200 32.640 24.727 */
-               { 163200000, 0x0c02, 0x04020009, 0x11090009, 0x02000603 },
-               /* 168.000 32.000 24.889 */
-               { 168000000, 0x0205, 0x04020005, 0x11030021, 0x02000403 },
-               /* 176.000 33.000 24.000 */
-               { 176000000, 0x0602, 0x04020003, 0x11050005, 0x02000602 },
-               };
+               {
+               96000000, 0x0303, 0x04020011, 0x11030011, 0x11050011},
+                   /* 100.000 33.333 25.000 */
+               {
+               100000000, 0x0009, 0x04020011, 0x11030011, 0x11050011},
+                   /* 104.000 31.200 24.960 */
+               {
+               104000000, 0x0802, 0x04020011, 0x11050009, 0x11090009},
+                   /* 108.000 32.400 24.923 */
+               {
+               108000000, 0x0403, 0x04020011, 0x11050009, 0x02000802},
+                   /* 112.000 32.000 24.889 */
+               {
+               112000000, 0x0205, 0x04020011, 0x11030021, 0x02000403},
+                   /* 115.200 32.000 24.000 */
+               {
+               115200000, 0x0303, 0x04020009, 0x11030011, 0x11050011},
+                   /* 120.000 30.000 24.000 */
+               {
+               120000000, 0x0011, 0x04020011, 0x11050011, 0x11090011},
+                   /* 124.800 31.200 24.960 */
+               {
+               124800000, 0x0802, 0x04020009, 0x11050009, 0x11090009},
+                   /* 128.000 32.000 24.000 */
+               {
+               128000000, 0x0305, 0x04020011, 0x11050011, 0x02000305},
+                   /* 132.000 33.000 24.750 */
+               {
+               132000000, 0x0603, 0x04020011, 0x11050011, 0x02000305},
+                   /* 136.000 32.640 24.727 */
+               {
+               136000000, 0x0c02, 0x04020011, 0x11090009, 0x02000603},
+                   /* 140.000 30.000 24.706 */
+               {
+               140000000, 0x0021, 0x04020011, 0x11050021, 0x02000c02},
+                   /* 144.000 30.857 24.686 */
+               {
+               144000000, 0x0405, 0x04020011, 0x01020202, 0x11090021},
+                   /* 150.857 33.000 24.000 */
+               {
+               150857142, 0x0605, 0x04020021, 0x02000305, 0x02000605},
+                   /* 152.000 32.571 24.000 */
+               {
+               152000000, 0x0e02, 0x04020011, 0x11050021, 0x02000e02},
+                   /* 156.000 31.200 24.960 */
+               {
+               156000000, 0x0802, 0x04020005, 0x11050009, 0x11090009},
+                   /* 160.000 32.000 24.000 */
+               {
+               160000000, 0x0309, 0x04020011, 0x11090011, 0x02000309},
+                   /* 163.200 32.640 24.727 */
+               {
+               163200000, 0x0c02, 0x04020009, 0x11090009, 0x02000603},
+                   /* 168.000 32.000 24.889 */
+               {
+               168000000, 0x0205, 0x04020005, 0x11030021, 0x02000403},
+                   /* 176.000 33.000 24.000 */
+               {
+       176000000, 0x0602, 0x04020003, 0x11050005, 0x02000602},};
 
        /* PLL configuration: type 3 */
        typedef struct {
                uint32 mipsclock;
                uint16 n;
-               uint32 m2; /* that is the clockcontrol_m2 */
+               uint32 m2;      /* that is the clockcontrol_m2 */
        } type3_table_t;
        static type3_table_t type3_table[] = {
                /* for 5350, mips clock is always double sb clock */
-               { 150000000, 0x311, 0x4020005 },
-               { 200000000, 0x311, 0x4020003 },
-               };
+               {150000000, 0x311, 0x4020005},
+               {200000000, 0x311, 0x4020003},
+       };
 
        /* PLL configuration: type 2, 4, 7 */
        typedef struct {
                uint32 mipsclock;
                uint32 sbclock;
+               uint32 pciclock;
                uint16 n;
                uint32 sb;
                uint32 pci33;
@@ -455,142 +462,252 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                uint32 d11_r2;
        } n4m_table_t;
        static n4m_table_t BCMINITDATA(type2_table)[] = {
-               { 120000000, 60000000, 0x0303, 0x01000200, 0x01000600, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 150000000, 75000000, 0x0303, 0x01000100, 0x01000600, 0x01000100, 0x05000100, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 180000000, 80000000, 0x0403, 0x01010000, 0x01020300, 0x01020600, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 180000000, 90000000, 0x0403, 0x01000100, 0x01020300, 0x01000100, 0x05000100, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 200000000, 100000000, 0x0303, 0x02010000, 0x02040001, 0x02010000, 0x06000001, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 211200000, 105600000, 0x0902, 0x01000200, 0x01030400, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 220800000, 110400000, 0x1500, 0x01000200, 0x01030400, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 230400000, 115200000, 0x0604, 0x01000200, 0x01020600, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 234000000, 104000000, 0x0b01, 0x01010000, 0x01010700, 0x01020600, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 240000000, 120000000, 0x0803, 0x01000200, 0x01020600, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 252000000, 126000000, 0x0504, 0x01000100, 0x01020500, 0x01000100, 0x05000100, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 264000000, 132000000, 0x0903, 0x01000200, 0x01020700, 0x01000200, 0x05000200, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 270000000, 120000000, 0x0703, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 276000000, 122666666, 0x1500, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 280000000, 140000000, 0x0503, 0x01000000, 0x01010600, 0x01000000, 0x05000000, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 288000000, 128000000, 0x0604, 0x01010000, 0x01030400, 0x01020600, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 288000000, 144000000, 0x0404, 0x01000000, 0x01010600, 0x01000000, 0x05000000, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 300000000, 133333333, 0x0803, 0x01010000, 0x01020600, 0x01010100, 0x05000100, 8,
-               0x012a00a9, 9 /* ratio  4/9 */, 0x012a00a9 },
-               { 300000000, 150000000, 0x0803, 0x01000100, 0x01020600, 0x01010100, 0x05000100, 11,
-               0x0aaa0555, 8 /* ratio  4/8 */, 0x00aa0055 },
-               { 330000000, 132000000, 0x0903, 0x01000200, 0x00020200, 0x01010100, 0x05000100, 0,
-               0, 10 /* ratio 4/10 */, 0x02520129 },
-               { 330000000, 146666666, 0x0903, 0x01010000, 0x00020200, 0x01010100, 0x05000100, 0,
-               0, 9 /* ratio 4/9 */, 0x012a00a9 },
-               { 330000000, 165000000, 0x0903, 0x01000100, 0x00020200, 0x01010100, 0x05000100, 0,
-               0, 8 /* ratio 4/8 */, 0x00aa0055 },
-               { 360000000, 120000000, 0x0a03, 0x01000300, 0x00010201, 0x01010200, 0x05000100, 0,
-               0, 12 /* ratio 4/12 */, 0x04920492 },
-               { 360000000, 144000000, 0x0a03, 0x01000200, 0x00010201, 0x01010200, 0x05000100, 0,
-               0, 10 /* ratio 4/10 */, 0x02520129 },
-               { 360000000, 160000000, 0x0a03, 0x01010000, 0x00010201, 0x01010200, 0x05000100, 0,
-               0, 9 /* ratio 4/9 */, 0x012a00a9 },
-               { 360000000, 180000000, 0x0a03, 0x01000100, 0x00010201, 0x01010200, 0x05000100, 0,
-               0, 8 /* ratio 4/8 */, 0x00aa0055 },
-               { 390000000, 130000000, 0x0b03, 0x01010100, 0x00020101, 0x01020100, 0x05000100, 0,
-               0, 12 /* ratio 4/12 */, 0x04920492 },
-               { 390000000, 156000000, 0x0b03, 0x01000200, 0x00020101, 0x01020100, 0x05000100, 0,
-               0, 10 /* ratio 4/10 */, 0x02520129 },
-               { 390000000, 173000000, 0x0b03, 0x01010000, 0x00020101, 0x01020100, 0x05000100, 0,
-               0, 9 /* ratio 4/9 */, 0x012a00a9 },
-               { 390000000, 195000000, 0x0b03, 0x01000100, 0x00020101, 0x01020100, 0x05000100, 0,
-               0, 8 /* ratio 4/8 */, 0x00aa0055 },
+               {
+                       120000000, 60000000, 32000000, 0x0303, 0x01000200,
+                           0x01000600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       150000000, 75000000, 33333333, 0x0303, 0x01000100,
+                           0x01000600, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       180000000, 80000000, 30000000, 0x0403, 0x01010000,
+                           0x01020300, 0x01020600, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       180000000, 90000000, 30000000, 0x0403, 0x01000100,
+                           0x01020300, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       200000000, 100000000, 33333333, 0x0303, 0x02010000,
+                           0x02040001, 0x02010000, 0x06000001, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       211200000, 105600000, 30171428, 0x0902, 0x01000200,
+                           0x01030400, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       220800000, 110400000, 31542857, 0x1500, 0x01000200,
+                           0x01030400, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       230400000, 115200000, 32000000, 0x0604, 0x01000200,
+                           0x01020600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       234000000, 104000000, 31200000, 0x0b01, 0x01010000,
+                           0x01010700, 0x01020600, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       240000000, 120000000, 33333333, 0x0803, 0x01000200,
+                           0x01020600, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       252000000, 126000000, 33333333, 0x0504, 0x01000100,
+                           0x01020500, 0x01000100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       264000000, 132000000, 33000000, 0x0903, 0x01000200,
+                           0x01020700, 0x01000200, 0x05000200, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       270000000, 120000000, 30000000, 0x0703, 0x01010000,
+                           0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       276000000, 122666666, 31542857, 0x1500, 0x01010000,
+                           0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       280000000, 140000000, 31111111, 0x0503, 0x01000000,
+                           0x01010600, 0x01000000, 0x05000000, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       288000000, 128000000, 32914285, 0x0604, 0x01010000,
+                           0x01030400, 0x01020600, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       288000000, 144000000, 32000000, 0x0404, 0x01000000,
+                           0x01010600, 0x01000000, 0x05000000, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       300000000, 133333333, 33333333, 0x0803, 0x01010000,
+                           0x01020600, 0x01010100, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       300000000, 133333333, 37500000, 0x0803, 0x01010000,
+                           0x01020500, 0x01010100, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       300000000, 133333333, 42857142, 0x0803, 0x01010000,
+                           0x01020400, 0x01010100, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       300000000, 133333333, 50000000, 0x0803, 0x01010000,
+                           0x01020300, 0x01010100, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       300000000, 133333333, 60000000, 0x0803, 0x01010000,
+                           0x01020200, 0x01010100, 0x05000100, 8, 0x012a00a9,
+                           9 /* ratio  4/9 */ ,
+               0x012a00a9}, {
+                       300000000, 150000000, 33333333, 0x0803, 0x01000100,
+                           0x01020600, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       300000000, 150000000, 37500000, 0x0803, 0x01000100,
+                           0x01020500, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       300000000, 150000000, 42857142, 0x0803, 0x01000100,
+                           0x01020400, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       300000000, 150000000, 50000000, 0x0803, 0x01000100,
+                           0x01020300, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+                       300000000, 150000000, 60000000, 0x0803, 0x01000100,
+                           0x01020200, 0x01010100, 0x05000100, 11, 0x0aaa0555,
+                           8 /* ratio  4/8 */ ,
+               0x00aa0055}, {
+               330000000, 132000000, 33000000, 0x0903, 0x01000200,
+                           0x00020200, 0x01010100, 0x05000100, 0, 0,
+                           10 /* ratio 4/10 */ , 0x02520129},
+               {
+               330000000, 146666666, 33000000, 0x0903, 0x01010000,
+                           0x00020200, 0x01010100, 0x05000100, 0, 0,
+                           9 /* ratio 4/9 */ , 0x012a00a9},
+               {
+               330000000, 165000000, 33000000, 0x0903, 0x01000100,
+                           0x00020200, 0x01010100, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               330000000, 165000000, 41250000, 0x0903, 0x01000100,
+                           0x00020100, 0x01010100, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               330000000, 165000000, 55000000, 0x0903, 0x01000100,
+                           0x00020000, 0x01010100, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               360000000, 120000000, 32000000, 0x0a03, 0x01000300,
+                           0x00010201, 0x01010200, 0x05000100, 0, 0,
+                           12 /* ratio 4/12 */ , 0x04920492},
+               {
+               360000000, 144000000, 32000000, 0x0a03, 0x01000200,
+                           0x00010201, 0x01010200, 0x05000100, 0, 0,
+                           10 /* ratio 4/10 */ , 0x02520129},
+               {
+               360000000, 160000000, 32000000, 0x0a03, 0x01010000,
+                           0x00010201, 0x01010200, 0x05000100, 0, 0,
+                           9 /* ratio 4/9 */ , 0x012a00a9},
+               {
+               360000000, 180000000, 32000000, 0x0a03, 0x01000100,
+                           0x00010201, 0x01010200, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               360000000, 180000000, 40000000, 0x0a03, 0x01000100,
+                           0x00010101, 0x01010200, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               360000000, 180000000, 53333333, 0x0a03, 0x01000100,
+                           0x00010001, 0x01010200, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
+               {
+               390000000, 130000000, 32500000, 0x0b03, 0x01010100,
+                           0x00020101, 0x01020100, 0x05000100, 0, 0,
+                           12 /* ratio 4/12 */ , 0x04920492},
+               {
+               390000000, 156000000, 32500000, 0x0b03, 0x01000200,
+                           0x00020101, 0x01020100, 0x05000100, 0, 0,
+                           10 /* ratio 4/10 */ , 0x02520129},
+               {
+               390000000, 173000000, 32500000, 0x0b03, 0x01010000,
+                           0x00020101, 0x01020100, 0x05000100, 0, 0,
+                           9 /* ratio 4/9 */ , 0x012a00a9},
+               {
+               390000000, 195000000, 32500000, 0x0b03, 0x01000100,
+                           0x00020101, 0x01020100, 0x05000100, 0, 0,
+                           8 /* ratio 4/8 */ , 0x00aa0055},
        };
        static n4m_table_t BCMINITDATA(type4_table)[] = {
-               { 120000000, 60000000, 0x0009, 0x11020009, 0x01030203, 0x11020009, 0x04000009, 11,
-               0x0aaa0555 },
-               { 150000000, 75000000, 0x0009, 0x11050002, 0x01030203, 0x11050002, 0x04000005, 11,
-               0x0aaa0555 },
-               { 192000000, 96000000, 0x0702, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
-               0x0aaa0555 },
-               { 198000000, 99000000, 0x0603, 0x11020005, 0x11030011, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 200000000, 100000000, 0x0009, 0x04020011, 0x11030011, 0x04020011, 0x04020003, 11,
-               0x0aaa0555 },
-               { 204000000, 102000000, 0x0c02, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 208000000, 104000000, 0x0802, 0x11030002, 0x11090005, 0x11030002, 0x04000003, 11,
-               0x0aaa0555 },
-               { 210000000, 105000000, 0x0209, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 216000000, 108000000, 0x0111, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 224000000, 112000000, 0x0205, 0x11030002, 0x02002103, 0x11030002, 0x04000003, 11,
-               0x0aaa0555 },
-               { 228000000, 101333333, 0x0e02, 0x11030003, 0x11210005, 0x01030305, 0x04000005, 8,
-               0x012a00a9 },
-               { 228000000, 114000000, 0x0e02, 0x11020005, 0x11210005, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 240000000, 102857143, 0x0109, 0x04000021, 0x01050203, 0x11030021, 0x04000003, 13,
-               0x254a14a9 },
-               { 240000000, 120000000, 0x0109, 0x11030002, 0x01050203, 0x11030002, 0x04000003, 11,
-               0x0aaa0555 },
-               { 252000000, 100800000, 0x0203, 0x04000009, 0x11050005, 0x02000209, 0x04000002, 9,
-               0x02520129 },
-               { 252000000, 126000000, 0x0203, 0x04000005, 0x11050005, 0x04000005, 0x04000002, 11,
-               0x0aaa0555 },
-               { 264000000, 132000000, 0x0602, 0x04000005, 0x11050005, 0x04000005, 0x04000002, 11,
-               0x0aaa0555 },
-               { 272000000, 116571428, 0x0c02, 0x04000021, 0x02000909, 0x02000221, 0x04000003, 13,
-               0x254a14a9 },
-               { 280000000, 120000000, 0x0209, 0x04000021, 0x01030303, 0x02000221, 0x04000003, 13,
-               0x254a14a9 },
-               { 288000000, 123428571, 0x0111, 0x04000021, 0x01030303, 0x02000221, 0x04000003, 13,
-               0x254a14a9 },
-               { 300000000, 120000000, 0x0009, 0x04000009, 0x01030203, 0x02000902, 0x04000002, 9,
-               0x02520129 },
-               { 300000000, 150000000, 0x0009, 0x04000005, 0x01030203, 0x04000005, 0x04000002, 11,
-               0x0aaa0555 }
+               {
+               120000000, 60000000, 0, 0x0009, 0x11020009, 0x01030203,
+                           0x11020009, 0x04000009, 11, 0x0aaa0555}, {
+               150000000, 75000000, 0, 0x0009, 0x11050002, 0x01030203,
+                           0x11050002, 0x04000005, 11, 0x0aaa0555}, {
+               192000000, 96000000, 0, 0x0702, 0x04000011, 0x11030011,
+                           0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+               198000000, 99000000, 0, 0x0603, 0x11020005, 0x11030011,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               200000000, 100000000, 0, 0x0009, 0x04020011, 0x11030011,
+                           0x04020011, 0x04020003, 11, 0x0aaa0555}, {
+               204000000, 102000000, 0, 0x0c02, 0x11020005, 0x01030303,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               208000000, 104000000, 0, 0x0802, 0x11030002, 0x11090005,
+                           0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+               210000000, 105000000, 0, 0x0209, 0x11020005, 0x01030303,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               216000000, 108000000, 0, 0x0111, 0x11020005, 0x01030303,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               224000000, 112000000, 0, 0x0205, 0x11030002, 0x02002103,
+                           0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+               228000000, 101333333, 0, 0x0e02, 0x11030003, 0x11210005,
+                           0x01030305, 0x04000005, 8, 0x012a00a9}, {
+               228000000, 114000000, 0, 0x0e02, 0x11020005, 0x11210005,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               240000000, 102857143, 0, 0x0109, 0x04000021, 0x01050203,
+                           0x11030021, 0x04000003, 13, 0x254a14a9}, {
+               240000000, 120000000, 0, 0x0109, 0x11030002, 0x01050203,
+                           0x11030002, 0x04000003, 11, 0x0aaa0555}, {
+               252000000, 100800000, 0, 0x0203, 0x04000009, 0x11050005,
+                           0x02000209, 0x04000002, 9, 0x02520129}, {
+               252000000, 126000000, 0, 0x0203, 0x04000005, 0x11050005,
+                           0x04000005, 0x04000002, 11, 0x0aaa0555}, {
+               264000000, 132000000, 0, 0x0602, 0x04000005, 0x11050005,
+                           0x04000005, 0x04000002, 11, 0x0aaa0555}, {
+               272000000, 116571428, 0, 0x0c02, 0x04000021, 0x02000909,
+                           0x02000221, 0x04000003, 13, 0x254a14a9}, {
+               280000000, 120000000, 0, 0x0209, 0x04000021, 0x01030303,
+                           0x02000221, 0x04000003, 13, 0x254a14a9}, {
+               288000000, 123428571, 0, 0x0111, 0x04000021, 0x01030303,
+                           0x02000221, 0x04000003, 13, 0x254a14a9}, {
+               300000000, 120000000, 0, 0x0009, 0x04000009, 0x01030203,
+                           0x02000902, 0x04000002, 9, 0x02520129}, {
+               300000000, 150000000, 0, 0x0009, 0x04000005, 0x01030203,
+                           0x04000005, 0x04000002, 11, 0x0aaa0555}
        };
        static n4m_table_t BCMINITDATA(type7_table)[] = {
-               { 183333333, 91666666, 0x0605, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
-               0x0aaa0555 },
-               { 187500000, 93750000, 0x0a03, 0x04000011, 0x11030011, 0x04000011, 0x04000003, 11,
-               0x0aaa0555 },
-               { 196875000, 98437500, 0x1003, 0x11020005, 0x11050011, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 200000000, 100000000, 0x0311, 0x04000011, 0x11030011, 0x04000009, 0x04000003, 11,
-               0x0aaa0555 },
-               { 200000000, 100000000, 0x0311, 0x04020011, 0x11030011, 0x04020011, 0x04020003, 11,
-               0x0aaa0555 },
-               { 206250000, 103125000, 0x1103, 0x11020005, 0x11050011, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 212500000, 106250000, 0x0c05, 0x11020005, 0x01030303, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 215625000, 107812500, 0x1203, 0x11090009, 0x11050005, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 216666666, 108333333, 0x0805, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
-               0x0aaa0555 },
-               { 225000000, 112500000, 0x0d03, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
-               0x0aaa0555 },
-               { 233333333, 116666666, 0x0905, 0x11020003, 0x11030011, 0x11020003, 0x04000003, 11,
-               0x0aaa0555 },
-               { 237500000, 118750000, 0x0e05, 0x11020005, 0x11210005, 0x11020005, 0x04000005, 11,
-               0x0aaa0555 },
-               { 240000000, 120000000, 0x0b11, 0x11020009, 0x11210009, 0x11020009, 0x04000009, 11,
-               0x0aaa0555 },
-               { 250000000, 125000000, 0x0f03, 0x11020003, 0x11210003, 0x11020003, 0x04000003, 11,
-               0x0aaa0555 }
+               {
+               183333333, 91666666, 0, 0x0605, 0x04000011, 0x11030011,
+                           0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+               187500000, 93750000, 0, 0x0a03, 0x04000011, 0x11030011,
+                           0x04000011, 0x04000003, 11, 0x0aaa0555}, {
+               196875000, 98437500, 0, 0x1003, 0x11020005, 0x11050011,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               200000000, 100000000, 0, 0x0311, 0x04000011, 0x11030011,
+                           0x04000009, 0x04000003, 11, 0x0aaa0555}, {
+               200000000, 100000000, 0, 0x0311, 0x04020011, 0x11030011,
+                           0x04020011, 0x04020003, 11, 0x0aaa0555}, {
+               206250000, 103125000, 0, 0x1103, 0x11020005, 0x11050011,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               212500000, 106250000, 0, 0x0c05, 0x11020005, 0x01030303,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               215625000, 107812500, 0, 0x1203, 0x11090009, 0x11050005,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               216666666, 108333333, 0, 0x0805, 0x11020003, 0x11030011,
+                           0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+               225000000, 112500000, 0, 0x0d03, 0x11020003, 0x11030011,
+                           0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+               233333333, 116666666, 0, 0x0905, 0x11020003, 0x11030011,
+                           0x11020003, 0x04000003, 11, 0x0aaa0555}, {
+               237500000, 118750000, 0, 0x0e05, 0x11020005, 0x11210005,
+                           0x11020005, 0x04000005, 11, 0x0aaa0555}, {
+               240000000, 120000000, 0, 0x0b11, 0x11020009, 0x11210009,
+                           0x11020009, 0x04000009, 11, 0x0aaa0555}, {
+               250000000, 125000000, 0, 0x0f03, 0x11020003, 0x11210003,
+                           0x11020003, 0x04000003, 11, 0x0aaa0555}
        };
 
        ulong start, end, dst;
@@ -604,6 +721,7 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
        idx = sb_coreidx(sbh);
        clockcontrol_m2 = NULL;
 
+       /* switch to chipc core */
        /* switch to extif or chipc core */
        if ((eir = (extifregs_t *) sb_setcore(sbh, SB_EXTIF, 0))) {
                pll_type = PLL_TYPE1;
@@ -612,7 +730,15 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                clockcontrol_pci = &eir->clockcontrol_pci;
                clockcontrol_m2 = &cc->clockcontrol_m2;
        } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-               pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
+               /* 5354 chipcommon pll setting can't be changed. 
+                * The PMU on power up comes up with the default clk frequency
+                * of 240MHz
+                */
+               if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+                       ret = TRUE;
+                       goto done;
+               }
+               pll_type = R_REG(osh, &cc->capabilities) & CC_CAP_PLL_MASK;
                if (pll_type == PLL_TYPE6) {
                        clockcontrol_n = NULL;
                        clockcontrol_sb = NULL;
@@ -639,8 +765,9 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
        if (pll_type == PLL_TYPE1) {
                /* Keep the current PCI clock if not specified */
                if (pciclock == 0) {
-                       pciclock = sb_clock_rate(pll_type, R_REG(osh, clockcontrol_n),
-                                                R_REG(osh, clockcontrol_pci));
+                       pciclock =
+                           sb_clock_rate(pll_type, R_REG(osh, clockcontrol_n),
+                                         R_REG(osh, clockcontrol_pci));
                        pciclock = (pciclock <= 25000000) ? 25000000 : 33000000;
                }
 
@@ -648,7 +775,7 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                for (i = 0; i < ARRAYSIZE(type1_table); i++) {
                        ASSERT(type1_table[i].mipsclock ==
                               sb_clock_rate(pll_type, type1_table[i].n,
-                              type1_table[i].sb));
+                                            type1_table[i].sb));
                        if (type1_table[i].mipsclock > mipsclock)
                                break;
                }
@@ -677,7 +804,7 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
 
                /* Reset */
                sb_watchdog(sbh, 1);
-               while (1);
+               while (1) ;
        } else if (pll_type == PLL_TYPE3) {
                /* 5350 */
                if (sb_chip(sbh) != BCM5365_CHIP_ID) {
@@ -700,8 +827,8 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
 
                        /* No PLL change */
                        orig_m2 = R_REG(osh, &cc->clockcontrol_m2);
-                       if ((orig_n == type3_table[i].n) &&
-                           (orig_m2 == type3_table[i].m2)) {
+                       if ((orig_n == type3_table[i].n)
+                           && (orig_m2 == type3_table[i].m2)) {
                                goto done;
                        }
 
@@ -711,12 +838,11 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
 
                        /* Reset */
                        sb_watchdog(sbh, 1);
-                       while (1);
+                       while (1) ;
                }
        } else if ((pll_type == PLL_TYPE2) ||
-                  (pll_type == PLL_TYPE4) ||
-                  (pll_type == PLL_TYPE6) ||
-                  (pll_type == PLL_TYPE7)) {
+                  (pll_type == PLL_TYPE4) ||
+                  (pll_type == PLL_TYPE6) || (pll_type == PLL_TYPE7)) {
                n4m_table_t *table = NULL, *te;
                uint tabsz = 0;
 
@@ -725,19 +851,20 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                orig_mips = R_REG(osh, &cc->clockcontrol_m3);
 
                switch (pll_type) {
-               case PLL_TYPE6: {
-                       uint32 new_mips = 0;
+               case PLL_TYPE6:
+                       {
+                               uint32 new_mips = 0;
 
-                       ret = TRUE;
-                       if (mipsclock <= SB2MIPS_T6(CC_T6_M1))
-                               new_mips = CC_T6_MMASK;
+                               ret = TRUE;
+                               if (mipsclock <= SB2MIPS_T6(CC_T6_M1))
+                                       new_mips = CC_T6_MMASK;
 
-                       if (orig_mips == new_mips)
-                               goto done;
+                               if (orig_mips == new_mips)
+                                       goto done;
 
-                       W_REG(osh, &cc->clockcontrol_m3, new_mips);
-                       goto end_fill;
-               }
+                               W_REG(osh, &cc->clockcontrol_m3, new_mips);
+                               goto end_fill;
+                       }
                case PLL_TYPE2:
                        table = type2_table;
                        tabsz = ARRAYSIZE(type2_table);
@@ -765,8 +892,8 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                        if ((orig_n == table[i].n) &&
                            (orig_sb == table[i].sb) &&
                            (orig_pci == table[i].pci33) &&
-                           (orig_m2 == table[i].m2) &&
-                           (orig_mips == table[i].m3)) {
+                           (orig_m2 == table[i].m2)
+                           && (orig_mips == table[i].m3)) {
                                orig_ratio_parm = table[i].ratio_parm;
                                orig_ratio_cfg = table[i].ratio_cfg;
                                break;
@@ -776,9 +903,12 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                /* Search for the closest MIPS clock greater or equal to a preferred value */
                for (i = 0; i < tabsz; i++) {
                        ASSERT(table[i].mipsclock ==
-                              sb_clock_rate(pll_type, table[i].n, table[i].m3));
-                       if ((mipsclock <= table[i].mipsclock) &&
-                           ((sbclock == 0) || (sbclock <= table[i].sbclock)))
+                              sb_clock_rate(pll_type, table[i].n,
+                                            table[i].m3));
+                       if ((mipsclock <= table[i].mipsclock)
+                           && ((sbclock == 0) || (sbclock <= table[i].sbclock))
+                           && ((pciclock == 0)
+                               || (pciclock <= table[i].pciclock)))
                                break;
                }
                if (i == tabsz) {
@@ -793,8 +923,7 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                if ((orig_n == te->n) &&
                    (orig_sb == te->sb) &&
                    (orig_pci == te->pci33) &&
-                   (orig_m2 == te->m2) &&
-                   (orig_mips == te->m3))
+                   (orig_m2 == te->m2) && (orig_mips == te->m3))
                        goto done;
 
                /* Set the PLL controls */
@@ -819,38 +948,23 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                /* Preload the code into the cache */
                icache_probe(MFC0(C0_CONFIG, 1), &ic_size, &ic_lsize);
                if (sb_chip(sbh) == BCM4785_CHIP_ID) {
-                       start = ((ulong) &&start_fill_4785) & ~(ic_lsize - 1);
-                       end = ((ulong) &&end_fill_4785 + (ic_lsize - 1)) & ~(ic_lsize - 1);
-               }
-               else {
-                       start = ((ulong) &&start_fill) & ~(ic_lsize - 1);
-                       end = ((ulong) &&end_fill + (ic_lsize - 1)) & ~(ic_lsize - 1);
+                       start = ((ulong) && start_fill_4785) & ~(ic_lsize - 1);
+                       end = ((ulong)
+                              && end_fill_4785 + (ic_lsize - 1)) & ~(ic_lsize -
+                                                                     1);
+               } else {
+                       start = ((ulong) && start_fill) & ~(ic_lsize - 1);
+                       end = ((ulong)
+                              && end_fill + (ic_lsize - 1)) & ~(ic_lsize - 1);
                }
                while (start < end) {
                        cache_op(start, Fill_I);
                        start += ic_lsize;
                }
 
-               /* Copy the handler */
-               start = (ulong) &handler;
-               end = (ulong) &afterhandler;
-               dst = KSEG1ADDR(0x180);
-               for (i = 0; i < (end - start); i += 4)
-                       *((ulong *)(dst + i)) = *((ulong *)(start + i));
-
-               /* Preload the handler into the cache one line at a time */
-               for (i = 0; i < (end - start); i += ic_lsize)
-                       cache_op(dst + i, Fill_I);
-
-               /* Clear BEV bit */
-               MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~ST0_BEV);
-
-               /* Enable interrupts */
-               MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) | (ALLINTS | ST0_IE));
-
                /* 4785 clock freq change procedures */
                if (sb_chip(sbh) == BCM4785_CHIP_ID) {
-       start_fill_4785:
+                     start_fill_4785:
                        /* Switch to async */
                        MTC0(C0_BROADCOM, 4, (1 << 22));
 
@@ -862,7 +976,8 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                        *dll_r1 = *dll_r1 | 0xc0000000;
 
                        /* Set active cfg */
-                       MTC0(C0_BROADCOM, 2, MFC0(C0_BROADCOM, 2) | (1 << 3) | 1);
+                       MTC0(C0_BROADCOM, 2,
+                            MFC0(C0_BROADCOM, 2) | (1 << 3) | 1);
 
                        /* Fake soft reset (clock cfg registers not reset) */
                        MTC0(C0_BROADCOM, 5, MFC0(C0_BROADCOM, 5) | (1 << 2));
@@ -872,33 +987,50 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
 
                        /* set watchdog timer */
                        W_REG(osh, &cc->watchdog, 20);
-                       (void) R_REG(osh, &cc->chipid);
+                       (void)R_REG(osh, &cc->chipid);
 
                        /* wait for timer interrupt */
-                       __asm__ __volatile__(
-                               ".set\tmips3\n\t"
-                               "sync\n\t"
-                               "wait\n\t"
-                               ".set\tmips0");
-       end_fill_4785:
-                       while (1);
+                       __asm__ __volatile__(".set\tmips3\n\t"
+                                            "sync\n\t" "wait\n\t"
+                                            ".set\tmips0");
+                     end_fill_4785:
+                       while (1) ;
                }
                /* Generic clock freq change procedures */
                else {
+                       /* Copy the handler */
+                       start = (ulong) & handler;
+                       end = (ulong) & afterhandler;
+                       dst = KSEG1ADDR(0x180);
+                       for (i = 0; i < (end - start); i += 4)
+                               *((ulong *) (dst + i)) =
+                                   *((ulong *) (start + i));
+
+                       /* Preload the handler into the cache one line at a time */
+                       for (i = 0; i < (end - start); i += ic_lsize)
+                               cache_op(dst + i, Fill_I);
+
+                       /* Clear BEV bit */
+                       MTC0(C0_STATUS, 0, MFC0(C0_STATUS, 0) & ~ST0_BEV);
+
+                       /* Enable interrupts */
+                       MTC0(C0_STATUS, 0,
+                            MFC0(C0_STATUS, 0) | (ALLINTS | ST0_IE));
+
                        /* Enable MIPS timer interrupt */
                        if (!(mipsr = sb_setcore(sbh, SB_MIPS, 0)) &&
                            !(mipsr = sb_setcore(sbh, SB_MIPS33, 0)))
                                ASSERT(mipsr);
                        W_REG(osh, &mipsr->intmask, 1);
 
-       start_fill:
+                     start_fill:
                        /* step 1, set clock ratios */
                        MTC0(C0_BROADCOM, 3, te->ratio_parm);
                        MTC0(C0_BROADCOM, 1, te->ratio_cfg);
 
                        /* step 2: program timer intr */
                        W_REG(osh, &mipsr->timer, 100);
-                       (void) R_REG(osh, &mipsr->timer);
+                       (void)R_REG(osh, &mipsr->timer);
 
                        /* step 3, switch to async */
                        sync_mode = MFC0(C0_BROADCOM, 4);
@@ -908,10 +1040,8 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                        MTC0(C0_BROADCOM, 2, (1 << 3) | 1);
 
                        /* steps 5 & 6 */
-                       __asm__ __volatile__(
-                               ".set\tmips3\n\t"
-                               "wait\n\t"
-                               ".set\tmips0");
+                       __asm__ __volatile__(".set\tmips3\n\t" "wait\n\t"
+                                            ".set\tmips0");
 
                        /* step 7, clear cfg active */
                        MTC0(C0_BROADCOM, 2, 0);
@@ -922,22 +1052,20 @@ BCMINITFN(sb_mips_setclock)(sb_t *sbh, uint32 mipsclock, uint32 sbclock, uint32
                        /* step 8, fake soft reset */
                        MTC0(C0_BROADCOM, 5, MFC0(C0_BROADCOM, 5) | (1 << 2));
 
-       end_fill:
+                     end_fill:
                        /* set watchdog timer */
                        W_REG(osh, &cc->watchdog, 20);
-                       (void) R_REG(osh, &cc->chipid);
+                       (void)R_REG(osh, &cc->chipid);
 
                        /* wait for timer interrupt */
-                       __asm__ __volatile__(
-                               ".set\tmips3\n\t"
-                               "sync\n\t"
-                               "wait\n\t"
-                               ".set\tmips0");
-                       while (1);
+                       __asm__ __volatile__(".set\tmips3\n\t"
+                                            "sync\n\t" "wait\n\t"
+                                            ".set\tmips0");
+                       while (1) ;
                }
        }
 
-done:
+      done:
        /* Enable 4785 DLL */
        if (sb_chip(sbh) == BCM4785_CHIP_ID) {
                uint32 tmp;
@@ -949,7 +1077,7 @@ done:
                *dll_ctrl |= 0x00000080;
 
                /* wait for lock flag to clear */
-               while ((*dll_ctrl & 0x2) == 0);
+               while ((*dll_ctrl & 0x2) == 0) ;
 
                /* clear sticky flags (clear on write 1) */
                tmp = *dll_ctrl;
@@ -969,9 +1097,7 @@ done:
        return ret;
 }
 
-void
-BCMINITFN(enable_pfc)(uint32 mode)
-{
+void BCMINITFN(enable_pfc) (uint32 mode) {
        ulong start, end;
        uint ic_size, ic_lsize;
 
@@ -985,8 +1111,9 @@ BCMINITFN(enable_pfc)(uint32 mode)
 
        /* enable prefetch cache if available */
        if (MFC0(C0_BROADCOM, 0) & BRCM_PFC_AVAIL) {
-               start = ((ulong) &&setpfc_start) & ~(ic_lsize - 1);
-               end = ((ulong) &&setpfc_end + (ic_lsize - 1)) & ~(ic_lsize - 1);
+               start = ((ulong) && setpfc_start) & ~(ic_lsize - 1);
+               end = ((ulong)
+                      && setpfc_end + (ic_lsize - 1)) & ~(ic_lsize - 1);
 
                /* Preload setpfc code into the cache one line at a time */
                while (start < end) {
@@ -995,22 +1122,20 @@ BCMINITFN(enable_pfc)(uint32 mode)
                }
 
                /* Now set the pfc */
-       setpfc_start:
+             setpfc_start:
                /* write range */
                *(volatile uint32 *)PFC_CR1 = 0xffff0000;
 
                /* enable */
                *(volatile uint32 *)PFC_CR0 = mode;
-       setpfc_end:
+             setpfc_end:
                /* Compiler foder */
                ic_size = 0;
        }
 }
 
 /* returns the ncdl value to be programmed into sdram_ncdl for calibration */
-uint32
-BCMINITFN(sb_memc_get_ncdl)(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_memc_get_ncdl) (sb_t * sbh) {
        osl_t *osh;
        sbmemcregs_t *memc;
        uint32 ret = 0;
@@ -1021,7 +1146,7 @@ BCMINITFN(sb_memc_get_ncdl)(sb_t *sbh)
 
        idx = sb_coreidx(sbh);
 
-       memc = (sbmemcregs_t *)sb_setcore(sbh, SB_MEMC, 0);
+       memc = (sbmemcregs_t *) sb_setcore(sbh, SB_MEMC, 0);
        if (memc == 0)
                goto out;
 
@@ -1043,19 +1168,33 @@ BCMINITFN(sb_memc_get_ncdl)(sb_t *sbh)
                if (rev > 0)
                        cd = rd;
                else
-                       cd = (rd == MEMC_CD_THRESHOLD) ? rd : (wr + MEMC_CD_THRESHOLD);
+                       cd = (rd ==
+                             MEMC_CD_THRESHOLD) ? rd : (wr +
+                                                        MEMC_CD_THRESHOLD);
                sm = (misc & MEMC_MISC_SM_MASK) >> MEMC_MISC_SM_SHIFT;
                sd = (misc & MEMC_MISC_SD_MASK) >> MEMC_MISC_SD_SHIFT;
                ret = (sm << 16) | (sd << 8) | cd;
        }
 
-out:
+      out:
        /* switch back to previous core */
        sb_setcoreidx(sbh, idx);
 
        return ret;
 }
 
+void hnd_cpu_reset(sb_t * sbh)
+{
+       if (sb_chip(sbh) == BCM4785_CHIP_ID)
+               MTC0(C0_BROADCOM, 4, (1 << 22));
+       sb_watchdog(sbh, 1);
+       if (sb_chip(sbh) == BCM4785_CHIP_ID) {
+               __asm__ __volatile__(".set\tmips3\n\t"
+                                    "sync\n\t" "wait\n\t" ".set\tmips0");
+       }
+       while (1) ;
+}
+
 #if defined(BCMPERFSTATS)
 /*
  * CP0 Register 25 supports 4 semi-independent 32bit performance counters.
@@ -1065,68 +1204,64 @@ out:
  */
 /* enable and start instruction counting */
 
-void
-hndmips_perf_instrcount_enable()
+void hndmips_perf_cyclecount_enable(void)
 {
        MTC0(C0_PERFORMANCE, 6, 0x80000200);    /* global enable perf counters */
-       MTC0(C0_PERFORMANCE, 4,
-            0x8044 | MFC0(C0_PERFORMANCE, 4)); /* enable instruction counting for counter 0 */
-       MTC0(C0_PERFORMANCE, 0, 0);             /* zero counter zero */
+       MTC0(C0_PERFORMANCE, 4, 0x8048 | MFC0(C0_PERFORMANCE, 4));      /* enable cycles counting for counter 0 */
+       MTC0(C0_PERFORMANCE, 0, 0);     /* zero counter zero */
+}
+
+void hndmips_perf_instrcount_enable(void)
+{
+       MTC0(C0_PERFORMANCE, 6, 0x80000200);    /* global enable perf counters */
+       MTC0(C0_PERFORMANCE, 4, 0x8044 | MFC0(C0_PERFORMANCE, 4));      /* enable instructions counting for counter 0 */
+       MTC0(C0_PERFORMANCE, 0, 0);     /* zero counter zero */
 }
 
 /* enable and start I$ hit and I$ miss counting */
-void
-hndmips_perf_icachecount_enable(void)
+void hndmips_perf_icachecount_enable(void)
 {
        MTC0(C0_PERFORMANCE, 6, 0x80000218);    /* enable I$ counting */
        MTC0(C0_PERFORMANCE, 4, 0x80148018);    /* count I$ hits in cntr 0 and misses in cntr 1 */
-       MTC0(C0_PERFORMANCE, 0, 0);             /* zero counter 0 - # I$ hits */
-       MTC0(C0_PERFORMANCE, 1, 0);             /* zero counter 1 - # I$ misses */
+       MTC0(C0_PERFORMANCE, 0, 0);     /* zero counter 0 - # I$ hits */
+       MTC0(C0_PERFORMANCE, 1, 0);     /* zero counter 1 - # I$ misses */
 }
 
 /* enable and start D$ hit and I$ miss counting */
-void
-hndmips_perf_dcachecount_enable(void)
+void hndmips_perf_dcachecount_enable(void)
 {
        MTC0(C0_PERFORMANCE, 6, 0x80000211);    /* enable D$ counting */
        MTC0(C0_PERFORMANCE, 4, 0x80248028);    /* count D$ hits in cntr 0 and misses in cntr 1 */
-       MTC0(C0_PERFORMANCE, 0, 0);             /* zero counter 0 - # D$ hits */
-       MTC0(C0_PERFORMANCE, 1, 0);             /* zero counter 1 - # D$ misses */
+       MTC0(C0_PERFORMANCE, 0, 0);     /* zero counter 0 - # D$ hits */
+       MTC0(C0_PERFORMANCE, 1, 0);     /* zero counter 1 - # D$ misses */
 }
 
-void
-hndmips_perf_icache_miss_enable()
+void hndmips_perf_icache_miss_enable()
 {
-       MTC0(C0_PERFORMANCE, 4,
-            0x80140000 | MFC0(C0_PERFORMANCE, 4)); /* enable cache misses counting for counter 1 */
-       MTC0(C0_PERFORMANCE, 1, 0); /* zero counter one */
+       MTC0(C0_PERFORMANCE, 4, 0x80140000 | MFC0(C0_PERFORMANCE, 4));  /* enable cache misses counting for counter 1 */
+       MTC0(C0_PERFORMANCE, 1, 0);     /* zero counter one */
 }
 
-
-void
-hndmips_perf_icache_hit_enable()
+void hndmips_perf_icache_hit_enable()
 {
        MTC0(C0_PERFORMANCE, 5, 0x8018 | MFC0(C0_PERFORMANCE, 5));
        /* enable cache hits counting for counter 2 */
-       MTC0(C0_PERFORMANCE, 2, 0);             /* zero counter 2 */
+       MTC0(C0_PERFORMANCE, 2, 0);     /* zero counter 2 */
 }
 
-uint32
-hndmips_perf_read_instrcount()
+uint32 hndmips_perf_read_instrcount()
 {
        return -(long)(MFC0(C0_PERFORMANCE, 0));
 }
 
-uint32
-hndmips_perf_read_cache_miss()
+uint32 hndmips_perf_read_cache_miss()
 {
        return -(long)(MFC0(C0_PERFORMANCE, 1));
 }
 
-uint32
-hndmips_perf_read_cache_hit()
+uint32 hndmips_perf_read_cache_hit()
 {
        return -(long)(MFC0(C0_PERFORMANCE, 2));
 }
 
-#endif /* BCMINTERNAL | BCMPERFSTATS */
+#endif
index 2738efaa88a0ca4b30e08d5f23ac04c3920a4633..f841ad119db39263e1534d2c0879910954c4519c 100644 (file)
@@ -17,7 +17,6 @@
 #include <pcicfg.h>
 #include <bcmdevs.h>
 #include <sbconfig.h>
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <sbpci.h>
 #include <bcmendian.h>
@@ -31,7 +30,7 @@
 #define        PCI_MSG(args)   printf args
 #else
 #define        PCI_MSG(args)
-#endif /* BCMDBG_PCI */
+#endif /* BCMDBG_PCI */
 
 /* Can free sbpci_init() memory after boot */
 #ifndef linux
 
 /* Emulated configuration space */
 typedef struct {
-       int     n;
-       uint    size0;
-       uint    size1;
-       uint    size2;
-       uint    size3;
+       int n;
+       uint size0;
+       uint size1;
+       uint size2;
+       uint size3;
 } sb_bar_cfg_t;
 static pci_config_regs sb_config_regs[SB_MAXCORES];
 static sb_bar_cfg_t sb_bar_cfg[SB_MAXCORES];
@@ -86,10 +85,9 @@ static uint8 pci_hbslot = 0;
  */
 
 /* Assume one-hot slot wiring */
-#define PCI_SLOT_MAX 16        /* Max. PCI Slots */
+#define PCI_SLOT_MAX 16                /* Max. PCI Slots */
 
-static uint32
-config_cmd(sb_t *sbh, uint bus, uint dev, uint func, uint off)
+static uint32 config_cmd(sb_t * sbh, uint bus, uint dev, uint func, uint off)
 {
        uint coreidx;
        sbpciregs_t *regs;
@@ -112,21 +110,21 @@ config_cmd(sb_t *sbh, uint bus, uint dev, uint func, uint off)
                        uint32 win;
 
                        /* Slide the PCI window to the appropriate slot */
-                       win = (SBTOPCI_CFG0 | ((1 << (dev + PCI_SLOTAD_MAP)) & SBTOPCI1_MASK));
+                       win =
+                           (SBTOPCI_CFG0 |
+                            ((1 << (dev + PCI_SLOTAD_MAP)) & SBTOPCI1_MASK));
                        W_REG(osh, &regs->sbtopci1, win);
                        addr = SB_PCI_CFG |
-                               ((1 << (dev + PCI_SLOTAD_MAP)) & ~SBTOPCI1_MASK) |
-                               (func << PCICFG_FUN_SHIFT) |
-                               (off & ~3);
+                           ((1 << (dev + PCI_SLOTAD_MAP)) & ~SBTOPCI1_MASK) |
+                           (func << PCICFG_FUN_SHIFT) | (off & ~3);
                }
        } else {
                /* Type 1 transaction */
                W_REG(osh, &regs->sbtopci1, SBTOPCI_CFG1);
                addr = SB_PCI_CFG |
-                       (bus << PCICFG_BUS_SHIFT) |
-                       (dev << PCICFG_SLOT_SHIFT) |
-                       (func << PCICFG_FUN_SHIFT) |
-                       (off & ~3);
+                   (bus << PCICFG_BUS_SHIFT) |
+                   (dev << PCICFG_SLOT_SHIFT) |
+                   (func << PCICFG_FUN_SHIFT) | (off & ~3);
        }
 
        sb_setcoreidx(sbh, coreidx);
@@ -145,8 +143,8 @@ config_cmd(sb_t *sbh, uint bus, uint dev, uint func, uint off)
  * the register address where value in 'val' is read.
  */
 static bool
-sb_pcihb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off,
-                  uint32 **addr, uint32 *val)
+sb_pcihb_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+                    uint32 ** addr, uint32 * val)
 {
        sbpciregs_t *regs;
        osl_t *osh;
@@ -162,9 +160,9 @@ sb_pcihb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off,
 
        /* read pci config when core rev >= 8 */
        coreidx = sb_coreidx(sbh);
-       regs = (sbpciregs_t *)sb_setcore(sbh, SB_PCI, 0);
+       regs = (sbpciregs_t *) sb_setcore(sbh, SB_PCI, 0);
        if (regs && sb_corerev(sbh) >= PCI_HBSBCFG_REV) {
-               *addr = (uint32 *)&regs->pcicfg[func][off >> 2];
+               *addr = (uint32 *) & regs->pcicfg[func][off >> 2];
                *val = R_REG(osh, *addr);
                ret = TRUE;
        }
@@ -174,30 +172,30 @@ sb_pcihb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off,
 }
 
 int
-extpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+extpci_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+                  void *buf, int len)
 {
        uint32 addr = 0, *reg = NULL, val;
        int ret = 0;
 
        /*
         * Set value to -1 when:
-        *      flag 'pci_disabled' is true;
-        *      value of 'addr' is zero;
-        *      REG_MAP() fails;
-        *      BUSPROBE() fails;
+        *      flag 'pci_disabled' is true;
+        *      value of 'addr' is zero;
+        *      REG_MAP() fails;
+        *      BUSPROBE() fails;
         */
        if (pci_disabled)
                val = 0xffffffff;
        else if (bus == 1 && dev == pci_hbslot && func == 0 &&
-                sb_pcihb_read_config(sbh, bus, dev, func, off, &reg, &val))
-               ;
+                sb_pcihb_read_config(sbh, bus, dev, func, off, &reg, &val)) ;
        else if (((addr = config_cmd(sbh, bus, dev, func, off)) == 0) ||
-                ((reg = (uint32 *)REG_MAP(addr, len)) == 0) ||
-                (BUSPROBE(val, reg) != 0))
+                ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
+                (BUSPROBE(val, reg) != 0))
                val = 0xffffffff;
 
        PCI_MSG(("%s: 0x%x <= 0x%p(0x%x), len %d, off 0x%x, buf 0x%p\n",
-              __FUNCTION__, val, reg, addr, len, off, buf));
+                __FUNCTION__, val, reg, addr, len, off, buf));
 
        val >>= 8 * (off & 3);
        if (len == 4)
@@ -216,7 +214,8 @@ extpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf
 }
 
 int
-extpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+extpci_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+                   void *buf, int len)
 {
        osl_t *osh;
        uint32 addr = 0, *reg = NULL, val;
@@ -226,19 +225,18 @@ extpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *bu
 
        /*
         * Ignore write attempt when:
-        *      flag 'pci_disabled' is true;
-        *      value of 'addr' is zero;
-        *      REG_MAP() fails;
-        *      BUSPROBE() fails;
+        *      flag 'pci_disabled' is true;
+        *      value of 'addr' is zero;
+        *      REG_MAP() fails;
+        *      BUSPROBE() fails;
         */
        if (pci_disabled)
                return 0;
        else if (bus == 1 && dev == pci_hbslot && func == 0 &&
-                sb_pcihb_read_config(sbh, bus, dev, func, off, &reg, &val))
-               ;
+                sb_pcihb_read_config(sbh, bus, dev, func, off, &reg, &val)) ;
        else if (((addr = config_cmd(sbh, bus, dev, func, off)) == 0) ||
-                ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
-                (BUSPROBE(val, reg) != 0))
+                ((reg = (uint32 *) REG_MAP(addr, len)) == 0) ||
+                (BUSPROBE(val, reg) != 0))
                goto done;
 
        if (len == 4)
@@ -258,7 +256,7 @@ extpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *bu
 
        W_REG(osh, reg, val);
 
-done:
+      done:
        if (reg && addr)
                REG_UNMAP(reg);
 
@@ -287,8 +285,8 @@ done:
 
 /* Sync the emulation registers and the real PCI config registers. */
 static void
-sb_pcid_read_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
-                    uint off, uint len)
+sb_pcid_read_config(sb_t * sbh, uint coreidx, sb_pci_cfg_t * cfg,
+                   uint off, uint len)
 {
        osl_t *osh;
        uint oldidx;
@@ -308,21 +306,23 @@ sb_pcid_read_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
        sb_setcoreidx(sbh, coreidx);
        if (sb_iscoreup(sbh)) {
                if (len == 4)
-                       *(uint32 *)((ulong)cfg->emu + off) =
-                               htol32(R_REG(osh, (uint32 *)((ulong)cfg->pci + off)));
+                       *(uint32 *) ((ulong) cfg->emu + off) =
+                           htol32(R_REG
+                                  (osh, (uint32 *) ((ulong) cfg->pci + off)));
                else if (len == 2)
-                       *(uint16 *)((ulong)cfg->emu + off) =
-                               htol16(R_REG(osh, (uint16 *)((ulong)cfg->pci + off)));
+                       *(uint16 *) ((ulong) cfg->emu + off) =
+                           htol16(R_REG
+                                  (osh, (uint16 *) ((ulong) cfg->pci + off)));
                else if (len == 1)
-                       *(uint8 *)((ulong)cfg->emu + off) =
-                               R_REG(osh, (uint8 *)((ulong)cfg->pci + off));
+                       *(uint8 *) ((ulong) cfg->emu + off) =
+                           R_REG(osh, (uint8 *) ((ulong) cfg->pci + off));
        }
        sb_setcoreidx(sbh, oldidx);
 }
 
 static void
-sb_pcid_write_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
-                     uint off, uint len)
+sb_pcid_write_config(sb_t * sbh, uint coreidx, sb_pci_cfg_t * cfg,
+                    uint off, uint len)
 {
        osl_t *osh;
        uint oldidx;
@@ -342,14 +342,14 @@ sb_pcid_write_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
        sb_setcoreidx(sbh, coreidx);
        if (sb_iscoreup(sbh)) {
                if (len == 4)
-                       W_REG(osh, (uint32 *)((ulong)cfg->pci + off),
-                             ltoh32(*(uint32 *)((ulong)cfg->emu + off)));
+                       W_REG(osh, (uint32 *) ((ulong) cfg->pci + off),
+                             ltoh32(*(uint32 *) ((ulong) cfg->emu + off)));
                else if (len == 2)
-                       W_REG(osh, (uint16 *)((ulong)cfg->pci + off),
-                             ltoh16(*(uint16 *)((ulong)cfg->emu + off)));
+                       W_REG(osh, (uint16 *) ((ulong) cfg->pci + off),
+                             ltoh16(*(uint16 *) ((ulong) cfg->emu + off)));
                else if (len == 1)
-                       W_REG(osh, (uint8 *)((ulong)cfg->pci + off),
-                             *(uint8 *)((ulong)cfg->emu + off));
+                       W_REG(osh, (uint8 *) ((ulong) cfg->pci + off),
+                             *(uint8 *) ((ulong) cfg->emu + off));
        }
        sb_setcoreidx(sbh, oldidx);
 }
@@ -358,16 +358,18 @@ sb_pcid_write_config(sb_t *sbh, uint coreidx, sb_pci_cfg_t *cfg,
  * Functions for accessing translated SB configuration space
  */
 static int
-sb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sb_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off, void *buf,
+              int len)
 {
        pci_config_regs *cfg;
 
-       if (dev >= SB_MAXCORES || func >= MAXFUNCS || (off + len) > sizeof(pci_config_regs))
+       if (dev >= SB_MAXCORES || func >= MAXFUNCS
+           || (off + len) > sizeof(pci_config_regs))
                return -1;
        cfg = sb_pci_cfg[dev][func].emu;
 
        ASSERT(ISALIGNED(off, len));
-       ASSERT(ISALIGNED((uintptr)buf, len));
+       ASSERT(ISALIGNED((uintptr) buf, len));
 
        /* use special config space if the device does not exist */
        if (!cfg)
@@ -377,11 +379,11 @@ sb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, in
                sb_pcid_read_config(sbh, dev, &sb_pci_cfg[dev][func], off, len);
 
        if (len == 4)
-               *((uint32 *) buf) = ltoh32(*((uint32 *)((ulong) cfg + off)));
+               *((uint32 *) buf) = ltoh32(*((uint32 *) ((ulong) cfg + off)));
        else if (len == 2)
-               *((uint16 *) buf) = ltoh16(*((uint16 *)((ulong) cfg + off)));
+               *((uint16 *) buf) = ltoh16(*((uint16 *) ((ulong) cfg + off)));
        else if (len == 1)
-               *((uint8 *) buf) = *((uint8 *)((ulong) cfg + off));
+               *((uint8 *) buf) = *((uint8 *) ((ulong) cfg + off));
        else
                return -1;
 
@@ -389,7 +391,8 @@ sb_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, in
 }
 
 static int
-sb_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sb_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off, void *buf,
+               int len)
 {
        uint coreidx;
        void *regs;
@@ -397,14 +400,15 @@ sb_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, i
        osl_t *osh;
        sb_bar_cfg_t *bar;
 
-       if (dev >= SB_MAXCORES || func >= MAXFUNCS || (off + len) > sizeof(pci_config_regs))
+       if (dev >= SB_MAXCORES || func >= MAXFUNCS
+           || (off + len) > sizeof(pci_config_regs))
                return -1;
        cfg = sb_pci_cfg[dev][func].emu;
        if (!cfg)
                return -1;
 
        ASSERT(ISALIGNED(off, len));
-       ASSERT(ISALIGNED((uintptr)buf, len));
+       ASSERT(ISALIGNED((uintptr) buf, len));
 
        osh = sb_osh(sbh);
 
@@ -418,33 +422,37 @@ sb_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, i
                        /* Highest numbered address match register */
                        if (off == OFFSETOF(pci_config_regs, base[0]))
                                cfg->base[0] = ~(bar->size0 - 1);
-                       else if (off == OFFSETOF(pci_config_regs, base[1]) && bar->n >= 1)
+                       else if (off == OFFSETOF(pci_config_regs, base[1])
+                                && bar->n >= 1)
                                cfg->base[1] = ~(bar->size1 - 1);
-                       else if (off == OFFSETOF(pci_config_regs, base[2]) && bar->n >= 2)
+                       else if (off == OFFSETOF(pci_config_regs, base[2])
+                                && bar->n >= 2)
                                cfg->base[2] = ~(bar->size2 - 1);
-                       else if (off == OFFSETOF(pci_config_regs, base[3]) && bar->n >= 3)
+                       else if (off == OFFSETOF(pci_config_regs, base[3])
+                                && bar->n >= 3)
                                cfg->base[3] = ~(bar->size3 - 1);
                }
                sb_setcoreidx(sbh, coreidx);
-       }
-       else if (len == 4)
-               *((uint32 *)((ulong) cfg + off)) = htol32(*((uint32 *) buf));
+       } else if (len == 4)
+               *((uint32 *) ((ulong) cfg + off)) = htol32(*((uint32 *) buf));
        else if (len == 2)
-               *((uint16 *)((ulong) cfg + off)) = htol16(*((uint16 *) buf));
+               *((uint16 *) ((ulong) cfg + off)) = htol16(*((uint16 *) buf));
        else if (len == 1)
-               *((uint8 *)((ulong) cfg + off)) = *((uint8 *) buf);
+               *((uint8 *) ((ulong) cfg + off)) = *((uint8 *) buf);
        else
                return -1;
 
        /* sync emulation with real PCI config if necessary */
        if (sb_pci_cfg[dev][func].pci)
-               sb_pcid_write_config(sbh, dev, &sb_pci_cfg[dev][func], off, len);
+               sb_pcid_write_config(sbh, dev, &sb_pci_cfg[dev][func], off,
+                                    len);
 
        return 0;
 }
 
 int
-sbpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sbpci_read_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+                 void *buf, int len)
 {
        if (bus == 0)
                return sb_read_config(sbh, bus, dev, func, off, buf, len);
@@ -453,7 +461,8 @@ sbpci_read_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf,
 }
 
 int
-sbpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf, int len)
+sbpci_write_config(sb_t * sbh, uint bus, uint dev, uint func, uint off,
+                  void *buf, int len)
 {
        if (bus == 0)
                return sb_write_config(sbh, bus, dev, func, off, buf, len);
@@ -461,8 +470,7 @@ sbpci_write_config(sb_t *sbh, uint bus, uint dev, uint func, uint off, void *buf
                return extpci_write_config(sbh, bus, dev, func, off, buf, len);
 }
 
-void
-sbpci_ban(uint16 core)
+void sbpci_ban(uint16 core)
 {
        if (pci_banned < ARRAYSIZE(pci_ban))
                pci_ban[pci_banned++] = core;
@@ -473,8 +481,7 @@ sbpci_ban(uint16 core)
  * Otherwise return -1 to indicate there is no PCI core and return 1
  * to indicate PCI core is disabled.
  */
-int __init
-sbpci_init_pci(sb_t *sbh)
+int __init sbpci_init_pci(sb_t * sbh)
 {
        uint chip, chiprev, chippkg, host;
        uint32 boardflags;
@@ -499,8 +506,8 @@ sbpci_init_pci(sb_t *sbh)
 
        if ((chip == 0x4310) && (chiprev == 0))
                pci_disabled = TRUE;
-       
-       sb = (sbconfig_t *)((ulong) pci + SBCONFIGOFF);
+
+       sb = (sbconfig_t *) ((ulong) pci + SBCONFIGOFF);
 
        boardflags = (uint32) getintvar(NULL, "boardflags");
 
@@ -511,8 +518,7 @@ sbpci_init_pci(sb_t *sbh)
         */
        if (((chip == BCM4712_CHIP_ID) &&
             ((chippkg == BCM4712SMALL_PKG_ID) ||
-             (chippkg == BCM4712MID_PKG_ID))) ||
-           (boardflags & BFL_NOPCI))
+             (chippkg == BCM4712MID_PKG_ID))) || (boardflags & BFL_NOPCI))
                pci_disabled = TRUE;
 
        /* Enable the core */
@@ -550,13 +556,13 @@ sbpci_init_pci(sb_t *sbh)
                }
 
                /* Reset the external PCI bus and enable the clock */
-               W_REG(osh, &pci->control, 0x5);         /* enable the tristate drivers */
-               W_REG(osh, &pci->control, 0xd);         /* enable the PCI clock */
-               OSL_DELAY(150);                         /* delay > 100 us */
-               W_REG(osh, &pci->control, 0xf);         /* deassert PCI reset */
+               W_REG(osh, &pci->control, 0x5); /* enable the tristate drivers */
+               W_REG(osh, &pci->control, 0xd); /* enable the PCI clock */
+               OSL_DELAY(150); /* delay > 100 us */
+               W_REG(osh, &pci->control, 0xf); /* deassert PCI reset */
                /* Use internal arbiter and park REQ/GRNT at external master 0 */
                W_REG(osh, &pci->arbcontrol, PCI_INT_ARB);
-               OSL_DELAY(1);                           /* delay 1 us */
+               OSL_DELAY(1);   /* delay 1 us */
                if (sb_corerev(sbh) >= 8) {
                        val = getintvar(NULL, "parkid");
                        ASSERT(val <= PCI_PARKID_LAST);
@@ -571,7 +577,8 @@ sbpci_init_pci(sb_t *sbh)
                        /* GPIO 1 resets the CardBus device on bcm94710ap */
                        sb_gpioout(sbh, 1, 1, GPIO_DRV_PRIORITY);
                        sb_gpioouten(sbh, 1, 1, GPIO_DRV_PRIORITY);
-                       W_REG(osh, &pci->sprom[0], R_REG(osh, &pci->sprom[0]) | 0x400);
+                       W_REG(osh, &pci->sprom[0],
+                             R_REG(osh, &pci->sprom[0]) | 0x400);
                }
 
                /* 64 MB I/O access window */
@@ -583,13 +590,14 @@ sbpci_init_pci(sb_t *sbh)
 
                /* Host bridge slot # nvram overwrite */
                if ((hbslot = nvram_get("pcihbslot"))) {
-                       pci_hbslot = bcm_strtoul(hbslot, NULL, 0);
+                       pci_hbslot = simple_strtoul(hbslot, NULL, 0);
                        ASSERT(pci_hbslot < PCI_MAX_DEVICES);
                }
 
                /* Enable PCI bridge BAR0 prefetch and burst */
                val = 6;
-               sbpci_write_config(sbh, 1, pci_hbslot, 0, PCI_CFG_CMD, &val, sizeof(val));
+               sbpci_write_config(sbh, 1, pci_hbslot, 0, PCI_CFG_CMD, &val,
+                                  sizeof(val));
 
                /* Enable PCI interrupts */
                W_REG(osh, &pci->intmask, PCI_INTA);
@@ -602,7 +610,8 @@ sbpci_init_pci(sb_t *sbh)
  * Get the PCI region address and size information.
  */
 static void __init
-sbpci_init_regions(sb_t *sbh, uint func, pci_config_regs *cfg, sb_bar_cfg_t *bar)
+sbpci_init_regions(sb_t * sbh, uint func, pci_config_regs * cfg,
+                  sb_bar_cfg_t * bar)
 {
        osl_t *osh;
        uint16 coreid;
@@ -610,26 +619,26 @@ sbpci_init_regions(sb_t *sbh, uint func, pci_config_regs *cfg, sb_bar_cfg_t *bar
        sbconfig_t *sb;
        uint32 base;
 
-       osh     = sb_osh(sbh);
-       coreid  = sb_coreid(sbh);
-       regs    = sb_coreregs(sbh);
-       sb      = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+       osh = sb_osh(sbh);
+       coreid = sb_coreid(sbh);
+       regs = sb_coreregs(sbh);
+       sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
        switch (coreid) {
        case SB_USB20H:
                base = htol32(sb_base(R_REG(osh, &sb->sbadmatch0)));
 
-               cfg->base[0] = func == 0 ? base : base + 0x800;  /* OHCI/EHCI */
+               cfg->base[0] = func == 0 ? base : base + 0x800; /* OHCI/EHCI */
                cfg->base[1] = 0;
                cfg->base[2] = 0;
                cfg->base[3] = 0;
                cfg->base[4] = 0;
                cfg->base[5] = 0;
-               bar->n       = 1;
-               bar->size0   = func == 0 ? 0x200 : 0x100;  /* OHCI/EHCI */
-               bar->size1   = 0;
-               bar->size2   = 0;
-               bar->size3   = 0;
+               bar->n = 1;
+               bar->size0 = func == 0 ? 0x200 : 0x100; /* OHCI/EHCI */
+               bar->size1 = 0;
+               bar->size2 = 0;
+               bar->size3 = 0;
                break;
        default:
                cfg->base[0] = htol32(sb_base(R_REG(osh, &sb->sbadmatch0)));
@@ -638,11 +647,13 @@ sbpci_init_regions(sb_t *sbh, uint func, pci_config_regs *cfg, sb_bar_cfg_t *bar
                cfg->base[3] = htol32(sb_base(R_REG(osh, &sb->sbadmatch3)));
                cfg->base[4] = 0;
                cfg->base[5] = 0;
-               bar->n       = (R_REG(osh, &sb->sbidlow) & SBIDL_AR_MASK) >> SBIDL_AR_SHIFT;
-               bar->size0   = sb_size(R_REG(osh, &sb->sbadmatch0));
-               bar->size1   = sb_size(R_REG(osh, &sb->sbadmatch1));
-               bar->size2   = sb_size(R_REG(osh, &sb->sbadmatch2));
-               bar->size3   = sb_size(R_REG(osh, &sb->sbadmatch3));
+               bar->n =
+                   (R_REG(osh, &sb->sbidlow) & SBIDL_AR_MASK) >>
+                   SBIDL_AR_SHIFT;
+               bar->size0 = sb_size(R_REG(osh, &sb->sbadmatch0));
+               bar->size1 = sb_size(R_REG(osh, &sb->sbadmatch1));
+               bar->size2 = sb_size(R_REG(osh, &sb->sbadmatch2));
+               bar->size3 = sb_size(R_REG(osh, &sb->sbadmatch3));
                break;
        }
 }
@@ -651,8 +662,7 @@ sbpci_init_regions(sb_t *sbh, uint func, pci_config_regs *cfg, sb_bar_cfg_t *bar
  * Construct PCI config spaces for SB cores so that they
  * can be accessed as if they were PCI devices.
  */
-static void __init
-sbpci_init_cores(sb_t *sbh)
+static void __init sbpci_init_cores(sb_t * sbh)
 {
        uint chiprev, coreidx, i;
        sbconfig_t *sb;
@@ -679,11 +689,11 @@ sbpci_init_cores(sb_t *sbh)
        memset(&sb_pci_null, -1, sizeof(sb_pci_null));
        cfg = sb_config_regs;
        bar = sb_bar_cfg;
-       for (dev = 0; dev < SB_MAXCORES; dev ++) {
+       for (dev = 0; dev < SB_MAXCORES; dev++) {
                /* Check if the core exists */
                if (!(regs = sb_setcoreidx(sbh, dev)))
                        continue;
-               sb = (sbconfig_t *)((ulong) regs + SBCONFIGOFF);
+               sb = (sbconfig_t *) ((ulong) regs + SBCONFIGOFF);
 
                /* Check if this core is banned */
                coreid = sb_coreid(sbh);
@@ -701,8 +711,9 @@ sbpci_init_cores(sb_t *sbh)
                        }
 
                        /* Convert core id to pci id */
-                       if (sb_corepciid(sbh, func, &vendor, &device, &class, &subclass,
-                                        &progif, &header))
+                       if (sb_corepciid
+                           (sbh, func, &vendor, &device, &class, &subclass,
+                            &progif, &header))
                                continue;
 
                        /*
@@ -712,13 +723,16 @@ sbpci_init_cores(sb_t *sbh)
                         */
                        switch (device) {
                        case BCM47XX_GIGETH_ID:
-                               pci = (pci_config_regs *)((uint32)regs + 0x800);
+                               pci =
+                                   (pci_config_regs *) ((uint32) regs + 0x800);
                                break;
                        case BCM47XX_SATAXOR_ID:
-                               pci = (pci_config_regs *)((uint32)regs + 0x400);
+                               pci =
+                                   (pci_config_regs *) ((uint32) regs + 0x400);
                                break;
                        case BCM47XX_ATA100_ID:
-                               pci = (pci_config_regs *)((uint32)regs + 0x800);
+                               pci =
+                                   (pci_config_regs *) ((uint32) regs + 0x800);
                                break;
                        default:
                                pci = NULL;
@@ -734,22 +748,23 @@ sbpci_init_cores(sb_t *sbh)
                        cfg->header_type = header;
                        sbpci_init_regions(sbh, func, cfg, bar);
                        /* Save core interrupt flag */
-                       cfg->int_pin = R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
+                       cfg->int_pin =
+                           R_REG(osh, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
                        /* Save core interrupt assignment */
                        cfg->int_line = sb_irq(sbh);
                        /* Indicate there is no SROM */
-                       *((uint32 *) &cfg->sprom_control) = 0xffffffff;
+                       *((uint32 *) & cfg->sprom_control) = 0xffffffff;
 
                        /* Point to the PCI config spaces */
                        sb_pci_cfg[dev][func].emu = cfg;
                        sb_pci_cfg[dev][func].pci = pci;
                        sb_pci_cfg[dev][func].bar = bar;
-                       cfg ++;
-                       bar ++;
+                       cfg++;
+                       bar++;
                }
        }
 
-done:
+      done:
        sb_setcoreidx(sbh, coreidx);
 }
 
@@ -758,11 +773,9 @@ done:
  * Must propagate sbpci_init_pci() return value to the caller to let
  * them know the PCI core initialization status.
  */
-int __init
-sbpci_init(sb_t *sbh)
+int __init sbpci_init(sb_t * sbh)
 {
        int status = sbpci_init_pci(sbh);
        sbpci_init_cores(sbh);
        return status;
 }
-
index 672e027d888b27217714d952e3afff7fb65ad907..244a1324f67d20677ce05607ca0cef8ef5bcd045 100644 (file)
  * Misc utility routines for accessing chip-specific features
  * of the SiliconBackplane-based Broadcom chips.
  *
- * Copyright 2006, Broadcom Corporation
+ * Copyright 2007, Broadcom Corporation
  * All Rights Reserved.
  * 
  * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
  * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
  * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
  * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- * $Id: sbutils.c,v 1.10 2006/04/08 07:12:42 honor Exp $
+ * $Id$
  */
 
 #include <typedefs.h>
 #include <bcmdefs.h>
 #include <osl.h>
-#include <bcmutils.h>
 #include <sbutils.h>
 #include <bcmdevs.h>
 #include <sbconfig.h>
 #include <sbchipc.h>
+#include <sbextif.h>
 #include <sbpci.h>
 #include <sbpcie.h>
 #include <pcicfg.h>
 #include <sbpcmcia.h>
-#include <sbextif.h>
 #include <sbsocram.h>
+#include <bcmnvram.h>
 #include <bcmsrom.h>
-#ifdef __mips__
-#include <mipsinc.h>
-#endif /* __mips__ */
+#include <hndpmu.h>
 
 /* debug/trace */
 #define        SB_ERROR(args)
 
-typedef uint32 (*sb_intrsoff_t)(void *intr_arg);
-typedef void (*sb_intrsrestore_t)(void *intr_arg, uint32 arg);
-typedef bool (*sb_intrsenabled_t)(void *intr_arg);
+#ifdef BCMDBG
+#define        SB_MSG(args)    printf args
+#else
+#define        SB_MSG(args)
+#endif /* BCMDBG */
+
+typedef uint32(*sb_intrsoff_t) (void *intr_arg);
+typedef void (*sb_intrsrestore_t) (void *intr_arg, uint32 arg);
+typedef bool(*sb_intrsenabled_t) (void *intr_arg);
+
+typedef struct gpioh_item {
+       void *arg;
+       bool level;
+       gpio_handler_t handler;
+       uint32 event;
+       struct gpioh_item *next;
+} gpioh_item_t;
 
 /* misc sb info needed by some of the routines */
 typedef struct sb_info {
 
-       struct sb_pub   sb;             /* back plane public state (must be first field) */
+       struct sb_pub sb;       /* back plane public state (must be first field) */
+
+       void *osh;              /* osl os handle */
+       void *sdh;              /* bcmsdh handle */
+
+       void *curmap;           /* current regs va */
+       void *regs[SB_MAXCORES];        /* other regs va */
+
+       uint curidx;            /* current core index */
+       uint dev_coreid;        /* the core provides driver functions */
 
-       void    *osh;                   /* osl os handle */
-       void    *sdh;                   /* bcmsdh handle */
+       bool memseg;            /* flag to toggle MEM_SEG register */
 
-       void    *curmap;                /* current regs va */
-       void    *regs[SB_MAXCORES];     /* other regs va */
+       uint gpioidx;           /* gpio control core index */
+       uint gpioid;            /* gpio control coretype */
 
-       uint    curidx;                 /* current core index */
-       uint    dev_coreid;             /* the core provides driver functions */
+       uint numcores;          /* # discovered cores */
+       uint coreid[SB_MAXCORES];       /* id of each core */
 
-       bool    memseg;                 /* flag to toggle MEM_SEG register */
+       void *intr_arg;         /* interrupt callback function arg */
+       sb_intrsoff_t intrsoff_fn;      /* turns chip interrupts off */
+       sb_intrsrestore_t intrsrestore_fn;      /* restore chip interrupts */
+       sb_intrsenabled_t intrsenabled_fn;      /* check if interrupts are enabled */
 
-       uint    gpioidx;                /* gpio control core index */
-       uint    gpioid;                 /* gpio control coretype */
+       uint8 pciecap_lcreg_offset;     /* PCIE capability LCreg offset in the config space */
+       bool pr42767_war;
+       uint8 pcie_polarity;
+       bool pcie_war_ovr;      /* Override ASPM/Clkreq settings */
 
-       uint    numcores;               /* # discovered cores */
-       uint    coreid[SB_MAXCORES];    /* id of each core */
+       uint8 pmecap_offset;    /* PM Capability offset in the config space */
+       bool pmecap;            /* Capable of generating PME */
 
-       void    *intr_arg;              /* interrupt callback function arg */
-       sb_intrsoff_t           intrsoff_fn;            /* turns chip interrupts off */
-       sb_intrsrestore_t       intrsrestore_fn;        /* restore chip interrupts */
-       sb_intrsenabled_t       intrsenabled_fn;        /* check if interrupts are enabled */
+       gpioh_item_t *gpioh_head;       /* GPIO event handlers list */
 
+       char *vars;
+       uint varsz;
 } sb_info_t;
 
 /* local prototypes */
-static sb_info_t * sb_doattach(sb_info_t *si, uint devid, osl_t *osh, void *regs,
-       uint bustype, void *sdh, char **vars, uint *varsz);
-static void sb_scan(sb_info_t *si);
-static uint sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val);
-static uint _sb_coreidx(sb_info_t *si);
-static uint sb_findcoreidx(sb_info_t *si, uint coreid, uint coreunit);
+static sb_info_t *sb_doattach(sb_info_t * si, uint devid, osl_t * osh,
+                             void *regs, uint bustype, void *sdh,
+                             char **vars, uint * varsz);
+static void sb_scan(sb_info_t * si);
+static uint _sb_coreidx(sb_info_t * si);
 static uint sb_pcidev2chip(uint pcidev);
 static uint sb_chip2numcores(uint chip);
-static bool sb_ispcie(sb_info_t *si);
-static bool sb_find_pci_capability(sb_info_t *si, uint8 req_cap_id, uchar *buf, uint32 *buflen);
-static int sb_pci_fixcfg(sb_info_t *si);
-
+static bool sb_ispcie(sb_info_t * si);
+static uint8 sb_find_pci_capability(sb_info_t * si, uint8 req_cap_id,
+                                   uchar * buf, uint32 * buflen);
+static int sb_pci_fixcfg(sb_info_t * si);
 /* routines to access mdio slave device registers */
-static int sb_pcie_mdiowrite(sb_info_t *si,  uint physmedia, uint readdr, uint val);
-static void sb_war30841(sb_info_t *si);
+static int sb_pcie_mdiowrite(sb_info_t * si, uint physmedia, uint readdr,
+                            uint val);
+static int sb_pcie_mdioread(sb_info_t * si, uint physmedia, uint readdr,
+                           uint * ret_val);
+
+/* dev path concatenation util */
+static char *sb_devpathvar(sb_t * sbh, char *var, int len, const char *name);
+
+/* WARs */
+static void sb_war43448(sb_t * sbh);
+static void sb_war43448_aspm(sb_t * sbh);
+static void sb_war32414_forceHT(sb_t * sbh, bool forceHT);
+static void sb_war30841(sb_info_t * si);
+static void sb_war42767(sb_t * sbh);
+static void sb_war42767_clkreq(sb_t * sbh);
 
 /* delay needed between the mdio control/ mdiodata register data access */
 #define PR28829_DELAY() OSL_DELAY(10)
@@ -93,19 +129,24 @@ static void sb_war30841(sb_info_t *si);
 /* global variable to indicate reservation/release of gpio's */
 static uint32 sb_gpioreservation = 0;
 
-#define        SB_INFO(sbh)    (sb_info_t*)sbh
+/* global flag to prevent shared resources from being initialized multiple times in sb_attach() */
+static bool sb_onetimeinit = FALSE;
+
+#define        SB_INFO(sbh)    (sb_info_t*)(uintptr)sbh
 #define        SET_SBREG(si, r, mask, val)     \
                W_SBREG((si), (r), ((R_SBREG((si), (r)) & ~(mask)) | (val)))
-#define        GOODCOREADDR(x) (((x) >= SB_ENUM_BASE) && ((x) <= SB_ENUM_LIM) && \
+#define        GOODCOREADDR(x) (((x) >= SB_ENUM_BASE) && ((x) <= SB_ENUM_LIM) && \
                ISALIGNED((x), SB_CORE_SIZE))
 #define        GOODREGS(regs)  ((regs) && ISALIGNED((uintptr)(regs), SB_CORE_SIZE))
 #define        REGS2SB(va)     (sbconfig_t*) ((int8*)(va) + SBCONFIGOFF)
+#define BADCOREADDR    0
 #define        GOODIDX(idx)    (((uint)idx) < SB_MAXCORES)
 #define        BADIDX          (SB_MAXCORES+1)
-#define        NOREV           -1              /* Invalid rev */
+#define        NOREV           -1      /* Invalid rev */
 
 #define PCI(si)                ((BUSTYPE(si->sb.bustype) == PCI_BUS) && (si->sb.buscoretype == SB_PCI))
 #define PCIE(si)       ((BUSTYPE(si->sb.bustype) == PCI_BUS) && (si->sb.buscoretype == SB_PCIE))
+#define PCMCIA(si)     ((BUSTYPE(si->sb.bustype) == PCMCIA_BUS) && (si->memseg == TRUE))
 
 /* sonicsrev */
 #define        SONICS_2_2      (SBIDL_RV_2_2 >> SBIDL_RV_SHIFT)
@@ -128,54 +169,51 @@ static uint32 sb_gpioreservation = 0;
                (*(si)->intrsrestore_fn)((si)->intr_arg, intr_val); }
 
 /* dynamic clock control defines */
-#define        LPOMINFREQ              25000           /* low power oscillator min */
-#define        LPOMAXFREQ              43000           /* low power oscillator max */
+#define        LPOMINFREQ              25000   /* low power oscillator min */
+#define        LPOMAXFREQ              43000   /* low power oscillator max */
 #define        XTALMINFREQ             19800000        /* 20 MHz - 1% */
 #define        XTALMAXFREQ             20200000        /* 20 MHz + 1% */
 #define        PCIMINFREQ              25000000        /* 25 MHz */
 #define        PCIMAXFREQ              34000000        /* 33 MHz + fudge */
 
-#define        ILP_DIV_5MHZ            0               /* ILP = 5 MHz */
-#define        ILP_DIV_1MHZ            4               /* ILP = 1 MHz */
-
-/* different register spaces to access thr'u pcie indirect access */
-#define PCIE_CONFIGREGS        1               /* Access to config space */
-#define PCIE_PCIEREGS          2               /* Access to pcie registers */
+#define        ILP_DIV_5MHZ            0       /* ILP = 5 MHz */
+#define        ILP_DIV_1MHZ            4       /* ILP = 1 MHz */
 
 /* force HT war check */
-#define FORCEHT_WAR32414(si)   \
-   ((PCIE(si)) && (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 1)) ||  \
-   ((si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev <= 3))))
+#define FORCEHT_WAR32414(si)   \
+       (((PCIE(si)) && (si->sb.chip == BCM4311_CHIP_ID) && ((si->sb.chiprev <= 1))) || \
+       ((PCI(si) || PCIE(si)) && (si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev <= 3)))
+
+#define PCIE_ASPMWARS(si)      \
+       ((PCIE(si)) && ((si->sb.buscorerev >= 3) && (si->sb.buscorerev <= 5)))
 
 /* GPIO Based LED powersave defines */
-#define DEFAULT_GPIO_ONTIME    10              /* Default: 10% on */
-#define DEFAULT_GPIO_OFFTIME   90              /* Default: 10% on */
+#define DEFAULT_GPIO_ONTIME    10      /* Default: 10% on */
+#define DEFAULT_GPIO_OFFTIME   90      /* Default: 10% on */
 
 #define DEFAULT_GPIOTIMERVAL  ((DEFAULT_GPIO_ONTIME << GPIO_ONTIME_SHIFT) | DEFAULT_GPIO_OFFTIME)
 
-static uint32
-sb_read_sbreg(sb_info_t *si, volatile uint32 *sbr)
+static uint32 sb_read_sbreg(sb_info_t * si, volatile uint32 * sbr)
 {
        uint8 tmp;
        uint32 val, intr_val = 0;
 
-
        /*
         * compact flash only has 11 bits address, while we needs 12 bits address.
         * MEM_SEG will be OR'd with other 11 bits address in hardware,
         * so we program MEM_SEG with 12th bit when necessary(access sb regsiters).
         * For normal PCMCIA bus(CFTable_regwinsz > 2k), do nothing special
         */
-       if (si->memseg) {
+       if (PCMCIA(si)) {
                INTR_OFF(si, intr_val);
                tmp = 1;
                OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
-               sbr = (volatile uint32 *)((uintptr)sbr & ~(1 << 11)); /* mask out bit 11 */
+               sbr = (volatile uint32 *)((uintptr) sbr & ~(1 << 11));  /* mask out bit 11 */
        }
 
        val = R_REG(si->osh, sbr);
 
-       if (si->memseg) {
+       if (PCMCIA(si)) {
                tmp = 0;
                OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
                INTR_RESTORE(si, intr_val);
@@ -184,43 +222,43 @@ sb_read_sbreg(sb_info_t *si, volatile uint32 *sbr)
        return (val);
 }
 
-static void
-sb_write_sbreg(sb_info_t *si, volatile uint32 *sbr, uint32 v)
+static void sb_write_sbreg(sb_info_t * si, volatile uint32 * sbr, uint32 v)
 {
        uint8 tmp;
        volatile uint32 dummy;
        uint32 intr_val = 0;
 
-
        /*
         * compact flash only has 11 bits address, while we needs 12 bits address.
         * MEM_SEG will be OR'd with other 11 bits address in hardware,
         * so we program MEM_SEG with 12th bit when necessary(access sb regsiters).
         * For normal PCMCIA bus(CFTable_regwinsz > 2k), do nothing special
         */
-       if (si->memseg) {
+       if (PCMCIA(si)) {
                INTR_OFF(si, intr_val);
                tmp = 1;
                OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
-               sbr = (volatile uint32 *)((uintptr)sbr & ~(1 << 11)); /* mask out bit 11 */
+               sbr = (volatile uint32 *)((uintptr) sbr & ~(1 << 11));  /* mask out bit 11 */
        }
 
        if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
 #ifdef IL_BIGENDIAN
                dummy = R_REG(si->osh, sbr);
-               W_REG(si->osh, ((volatile uint16 *)sbr + 1), (uint16)((v >> 16) & 0xffff));
+               W_REG(si->osh, ((volatile uint16 *)sbr + 1),
+                     (uint16) ((v >> 16) & 0xffff));
                dummy = R_REG(si->osh, sbr);
-               W_REG(si->osh, (volatile uint16 *)sbr, (uint16)(v & 0xffff));
+               W_REG(si->osh, (volatile uint16 *)sbr, (uint16) (v & 0xffff));
 #else
                dummy = R_REG(si->osh, sbr);
-               W_REG(si->osh, (volatile uint16 *)sbr, (uint16)(v & 0xffff));
+               W_REG(si->osh, (volatile uint16 *)sbr, (uint16) (v & 0xffff));
                dummy = R_REG(si->osh, sbr);
-               W_REG(si->osh, ((volatile uint16 *)sbr + 1), (uint16)((v >> 16) & 0xffff));
-#endif /* IL_BIGENDIAN */
+               W_REG(si->osh, ((volatile uint16 *)sbr + 1),
+                     (uint16) ((v >> 16) & 0xffff));
+#endif /* IL_BIGENDIAN */
        } else
                W_REG(si->osh, sbr, v);
 
-       if (si->memseg) {
+       if (PCMCIA(si)) {
                tmp = 0;
                OSL_PCMCIA_WRITE_ATTR(si->osh, MEM_SEG, &tmp, 1);
                INTR_RESTORE(si, intr_val);
@@ -236,24 +274,27 @@ sb_write_sbreg(sb_info_t *si, volatile uint32 *sbr, uint32 v)
  * vars - pointer to a pointer area for "environment" variables
  * varsz - pointer to int to return the size of the vars
  */
-sb_t *
-BCMINITFN(sb_attach)(uint devid, osl_t *osh, void *regs,
-                     uint bustype, void *sdh, char **vars, uint *varsz)
-{
+sb_t *sb_attach(uint devid, osl_t * osh, void *regs,
+                           uint bustype, void *sdh, char **vars,
+                           uint * varsz) {
        sb_info_t *si;
 
        /* alloc sb_info_t */
-       if ((si = MALLOC(osh, sizeof (sb_info_t))) == NULL) {
-               SB_ERROR(("sb_attach: malloc failed! malloced %d bytes\n", MALLOCED(osh)));
+       if ((si = MALLOC(osh, sizeof(sb_info_t))) == NULL) {
+               SB_ERROR(("sb_attach: malloc failed! malloced %d bytes\n",
+                         MALLOCED(osh)));
                return (NULL);
        }
 
-       if (sb_doattach(si, devid, osh, regs, bustype, sdh, vars, (uint*)varsz) == NULL) {
+       if (sb_doattach(si, devid, osh, regs, bustype, sdh, vars, varsz) ==
+           NULL) {
                MFREE(osh, si, sizeof(sb_info_t));
                return (NULL);
        }
+       si->vars = vars ? *vars : NULL;
+       si->varsz = varsz ? *varsz : 0;
 
-       return (sb_t *)si;
+       return (sb_t *) si;
 }
 
 /* Using sb_kattach depends on SB_BUS support, either implicit  */
@@ -262,74 +303,55 @@ BCMINITFN(sb_attach)(uint devid, osl_t *osh, void *regs,
 
 /* global kernel resource */
 static sb_info_t ksi;
-static bool ksi_attached = FALSE;
 
 /* generic kernel variant of sb_attach() */
-sb_t *
-BCMINITFN(sb_kattach)(void)
-{
-       osl_t *osh = NULL;
+sb_t *BCMINITFN(sb_kattach) (osl_t * osh) {
+       static bool ksi_attached = FALSE;
        uint32 *regs;
 
        if (!ksi_attached) {
                uint32 cid;
 
-               regs = (uint32 *)REG_MAP(SB_ENUM_BASE, SB_CORE_SIZE);
-               cid = R_REG(osh, (uint32 *)regs);
+               regs = (uint32 *) REG_MAP(SB_ENUM_BASE, SB_CORE_SIZE);
+               cid = R_REG(osh, (uint32 *) regs);
                if (((cid & CID_ID_MASK) == BCM4712_CHIP_ID) &&
                    ((cid & CID_PKG_MASK) != BCM4712LARGE_PKG_ID) &&
                    ((cid & CID_REV_MASK) <= (3 << CID_REV_SHIFT))) {
                        uint32 *scc, val;
 
-                       scc = (uint32 *)((uchar*)regs + OFFSETOF(chipcregs_t, slow_clk_ctl));
+                       scc =
+                           (uint32 *) ((uchar *) regs +
+                                       OFFSETOF(chipcregs_t, slow_clk_ctl));
                        val = R_REG(osh, scc);
                        SB_ERROR(("    initial scc = 0x%x\n", val));
                        val |= SCC_SS_XTAL;
                        W_REG(osh, scc, val);
                }
 
-               if (sb_doattach(&ksi, BCM4710_DEVICE_ID, osh, (void*)regs,
-                       SB_BUS, NULL, NULL, NULL) == NULL) {
+               if (sb_doattach(&ksi, BCM4710_DEVICE_ID, osh, (void *)regs, SB_BUS, NULL,
+                               osh != SB_OSH ? &ksi.vars : NULL,
+                               osh != SB_OSH ? &ksi.varsz : NULL) == NULL)
                        return NULL;
-               }
-               else
-                       ksi_attached = TRUE;
+               ksi_attached = TRUE;
        }
 
-       return (sb_t *)&ksi;
-}
-#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
-
-void
-BCMINITFN(sb_war32414_forceHT)(sb_t *sbh, bool forceHT)
-{
-   sb_info_t *si;
-
-   si = SB_INFO(sbh);
-
-   
-   if (FORCEHT_WAR32414(si)) {
-       uint32 val = 0;
-       if (forceHT)
-           val = SYCC_HR;
-       sb_corereg((void*)si, SB_CC_IDX, OFFSETOF(chipcregs_t, system_clk_ctl),
-           SYCC_HR, val);
-   }
+       return &ksi.sb;
 }
+#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
 
-static sb_info_t  *
-BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
-                       uint bustype, void *sdh, char **vars, uint *varsz)
-{
+static sb_info_t *BCMINITFN(sb_doattach) (sb_info_t * si, uint devid,
+                                         osl_t * osh, void *regs,
+                                         uint bustype, void *sdh,
+                                         char **vars, uint * varsz) {
        uint origidx;
        chipcregs_t *cc;
        sbconfig_t *sb;
        uint32 w;
+       char *pvars;
 
        ASSERT(GOODREGS(regs));
 
-       bzero((uchar*)si, sizeof(sb_info_t));
-
+       bzero((uchar *) si, sizeof(sb_info_t));
        si->sb.buscoreidx = si->gpioidx = BADIDX;
 
        si->curmap = regs;
@@ -338,17 +360,16 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
 
        /* check to see if we are a sb core mimic'ing a pci core */
        if (bustype == PCI_BUS) {
-               if (OSL_PCI_READ_CONFIG(si->osh, PCI_SPROM_CONTROL, sizeof(uint32)) == 0xffffffff) {
-                       SB_ERROR(("%s: incoming bus is PCI but it's a lie, switching to SB "
-                                 "devid:0x%x\n", __FUNCTION__, devid));
+               if (OSL_PCI_READ_CONFIG
+                   (si->osh, PCI_SPROM_CONTROL,
+                    sizeof(uint32)) == 0xffffffff) {
+                       SB_ERROR(("%s: incoming bus is PCI but it's a lie, switching to SB " "devid:0x%x\n", __FUNCTION__, devid));
                        bustype = SB_BUS;
                }
        }
-
        si->sb.bustype = bustype;
        if (si->sb.bustype != BUSTYPE(si->sb.bustype)) {
-               SB_ERROR(("sb_doattach: bus type %d does not match configured bus type %d\n",
-                         si->sb.bustype, BUSTYPE(si->sb.bustype)));
+               SB_ERROR(("sb_doattach: bus type %d does not match configured bus type %d\n", si->sb.bustype, BUSTYPE(si->sb.bustype)));
                return NULL;
        }
 
@@ -357,13 +378,14 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
                si->memseg = TRUE;
 
        /* kludge to enable the clock on the 4306 which lacks a slowclock */
-       if (BUSTYPE(si->sb.bustype) == PCI_BUS)
-               sb_clkctl_xtal(&si->sb, XTAL|PLL, ON);
+       if (BUSTYPE(si->sb.bustype) == PCI_BUS && !sb_ispcie(si))
+               sb_clkctl_xtal(&si->sb, XTAL | PLL, ON);
 
        if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
                w = OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
                if (!GOODCOREADDR(w))
-                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32), SB_ENUM_BASE);
+                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN,
+                                            sizeof(uint32), SB_ENUM_BASE);
        }
 
        /* initialize current core index value */
@@ -375,9 +397,9 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
        }
 
        /* get sonics backplane revision */
-       sb = REGS2SB(si->curmap);
-       si->sb.sonicsrev = (R_SBREG(si, &sb->sbidlow) & SBIDL_RV_MASK) >> SBIDL_RV_SHIFT;
-
+       sb = REGS2SB(regs);
+       si->sb.sonicsrev =
+           (R_SBREG(si, &sb->sbidlow) & SBIDL_RV_MASK) >> SBIDL_RV_SHIFT;
        /* keep and reuse the initial register mapping */
        origidx = si->curidx;
        if (BUSTYPE(si->sb.bustype) == SB_BUS)
@@ -385,7 +407,7 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
 
        /* is core-0 a chipcommon core? */
        si->numcores = 1;
-       cc = (chipcregs_t*) sb_setcoreidx(&si->sb, 0);
+       cc = (chipcregs_t *) sb_setcoreidx(&si->sb, 0);
        if (sb_coreid(&si->sb) != SB_CC)
                cc = NULL;
 
@@ -393,8 +415,12 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
        if (cc) {
                /* chip common core found! */
                si->sb.chip = R_REG(si->osh, &cc->chipid) & CID_ID_MASK;
-               si->sb.chiprev = (R_REG(si->osh, &cc->chipid) & CID_REV_MASK) >> CID_REV_SHIFT;
-               si->sb.chippkg = (R_REG(si->osh, &cc->chipid) & CID_PKG_MASK) >> CID_PKG_SHIFT;
+               si->sb.chiprev =
+                   (R_REG(si->osh, &cc->chipid) & CID_REV_MASK) >>
+                   CID_REV_SHIFT;
+               si->sb.chippkg =
+                   (R_REG(si->osh, &cc->chipid) & CID_PKG_MASK) >>
+                   CID_PKG_SHIFT;
        } else {
                /* no chip common core -- must convert device id to chip id */
                if ((si->sb.chip = sb_pcidev2chip(devid)) == 0) {
@@ -407,9 +433,13 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
        /* get chipcommon rev */
        si->sb.ccrev = cc ? (int)sb_corerev(&si->sb) : NOREV;
 
+       /* get chipcommon capabilites */
+       si->sb.cccaps = cc ? R_REG(si->osh, &cc->capabilities) : 0;
+
        /* determine numcores */
        if (cc && ((si->sb.ccrev == 4) || (si->sb.ccrev >= 6)))
-               si->numcores = (R_REG(si->osh, &cc->chipid) & CID_CC_MASK) >> CID_CC_SHIFT;
+               si->numcores =
+                   (R_REG(si->osh, &cc->chipid) & CID_CC_MASK) >> CID_CC_SHIFT;
        else
                si->numcores = sb_chip2numcores(si->sb.chip);
 
@@ -423,19 +453,27 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
        sb_scan(si);
 
        /* fixup necessary chip/core configurations */
-       if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
-               if (sb_pci_fixcfg(si)) {
-                       SB_ERROR(("sb_doattach: sb_pci_fixcfg failed\n"));
-                       return NULL;
-               }
+       if (BUSTYPE(si->sb.bustype) == PCI_BUS && sb_pci_fixcfg(si)) {
+               SB_ERROR(("sb_doattach: sb_pci_fixcfg failed\n"));
+               return NULL;
        }
 
-       /* srom_var_init() depends on sb_scan() info */
-       if (srom_var_init(si, si->sb.bustype, si->curmap, si->osh, vars, varsz)) {
+       /* Init nvram from sprom/otp if they exist */
+       if (srom_var_init
+           (&si->sb, BUSTYPE(si->sb.bustype), regs, si->osh, vars, varsz)) {
                SB_ERROR(("sb_doattach: srom_var_init failed: bad srom\n"));
                return (NULL);
        }
-
+       pvars = vars ? *vars : NULL;
+
+       /* PMU specific initializations */
+       if ((si->sb.cccaps & CC_CAP_PMU) && !sb_onetimeinit) {
+               sb_pmu_init(&si->sb, si->osh);
+               /* Find out Crystal frequency and init PLL */
+               sb_pmu_pll_init(&si->sb, si->osh, getintvar(pvars, "xtalfreq"));
+               /* Initialize PMU resources (up/dn timers, dep masks, etc.) */
+               sb_pmu_res_init(&si->sb, si->osh);
+       }
        if (cc == NULL) {
                /*
                 * The chip revision number is hardwired into all
@@ -448,17 +486,17 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
                        ASSERT(vars);
                        si->sb.chiprev = getintvar(*vars, "chiprev");
                } else if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
-                       w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_REV, sizeof(uint32));
+                       w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_REV,
+                                               sizeof(uint32));
                        si->sb.chiprev = w & 0xff;
                } else
                        si->sb.chiprev = 0;
        }
 
        if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
-               w = getintvar(*vars, "regwindowsz");
+               w = getintvar(pvars, "regwindowsz");
                si->memseg = (w <= CFTABLE_REGWIN_2K) ? TRUE : FALSE;
        }
-
        /* gpio control core is required */
        if (!GOODIDX(si->gpioidx)) {
                SB_ERROR(("sb_doattach: gpio control core not found\n"));
@@ -470,21 +508,32 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
        case PCI_BUS:
                /* do a pci config read to get subsystem id and subvendor id */
                w = OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_SVID, sizeof(uint32));
-               si->sb.boardvendor = w & 0xffff;
-               si->sb.boardtype = (w >> 16) & 0xffff;
+               /* Let nvram variables override subsystem Vend/ID */
+               if ((si->sb.boardvendor =
+                    (uint16) sb_getdevpathintvar(&si->sb, "boardvendor")) == 0)
+                       si->sb.boardvendor = w & 0xffff;
+               else
+                       SB_ERROR(("Overriding boardvendor: 0x%x instead of 0x%x\n", si->sb.boardvendor, w & 0xffff));
+               if ((si->sb.boardtype =
+                    (uint16) sb_getdevpathintvar(&si->sb, "boardtype")) == 0)
+                       si->sb.boardtype = (w >> 16) & 0xffff;
+               else
+                       SB_ERROR(("Overriding boardtype: 0x%x instead of 0x%x\n", si->sb.boardtype, (w >> 16) & 0xffff));
                break;
 
        case PCMCIA_BUS:
-       case SDIO_BUS:
-               si->sb.boardvendor = getintvar(*vars, "manfid");
-               si->sb.boardtype = getintvar(*vars, "prodid");
+               si->sb.boardvendor = getintvar(pvars, "manfid");
+               si->sb.boardtype = getintvar(pvars, "prodid");
                break;
 
        case SB_BUS:
        case JTAG_BUS:
                si->sb.boardvendor = VENDOR_BROADCOM;
-               if ((si->sb.boardtype = getintvar(NULL, "boardtype")) == 0)
-                       si->sb.boardtype = 0xffff;
+               if (pvars == NULL
+                   || ((si->sb.boardtype = getintvar(pvars, "prodid")) == 0))
+                       if ((si->sb.boardtype =
+                            getintvar(NULL, "boardtype")) == 0)
+                               si->sb.boardtype = 0xffff;
                break;
        }
 
@@ -493,25 +542,147 @@ BCMINITFN(sb_doattach)(sb_info_t *si, uint devid, osl_t *osh, void *regs,
                ASSERT(si->sb.boardtype);
        }
 
+       si->sb.boardflags = getintvar(pvars, "boardflags");
+
        /* setup the GPIO based LED powersave register */
        if (si->sb.ccrev >= 16) {
-               if ((vars == NULL) || ((w = getintvar(*vars, "leddc")) == 0))
+               if ((pvars == NULL) || ((w = getintvar(pvars, "leddc")) == 0))
                        w = DEFAULT_GPIOTIMERVAL;
-               sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimerval), ~0, w);
+               sb_corereg(&si->sb, SB_CC_IDX,
+                          OFFSETOF(chipcregs_t, gpiotimerval), ~0, w);
+       }
+
+       /* Determine if this board needs override */
+       if (PCIE(si) && (si->sb.chip == BCM4321_CHIP_ID))
+               si->pcie_war_ovr = ((si->sb.boardvendor == VENDOR_APPLE) &&
+                                   ((uint8) getintvar(pvars, "sromrev") == 4)
+                                   && ((uint8) getintvar(pvars, "boardrev") <=
+                                       0x71))
+                   || ((uint32) getintvar(pvars, "boardflags2") &
+                       BFL2_PCIEWAR_OVR);
+
+       if (PCIE_ASPMWARS(si)) {
+               sb_war43448_aspm((void *)si);
+               sb_war42767_clkreq((void *)si);
        }
+
        if (FORCEHT_WAR32414(si)) {
-               /* set proper clk setup delays before forcing HT */
-               sb_clkctl_init((void *)si);
-               sb_war32414_forceHT((void *)si, 1);
+               si->sb.pr32414 = TRUE;
+               sb_clkctl_init(&si->sb);
+               sb_war32414_forceHT(&si->sb, 1);
+       }
+
+       if (PCIE(si) && ((si->sb.buscorerev == 6) || (si->sb.buscorerev == 7)))
+               si->sb.pr42780 = TRUE;
+
+       if (PCIE_ASPMWARS(si))
+               sb_pcieclkreq(&si->sb, 1, 0);
+
+       if (PCIE(si) &&
+           (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 2)) ||
+            ((si->sb.chip == BCM4312_CHIP_ID) && (si->sb.chiprev == 0))))
+               sb_set_initiator_to(&si->sb, 0x3,
+                                   sb_findcoreidx(&si->sb, SB_D11, 0));
+
+       /* Disable gpiopullup and gpiopulldown */
+       if (!sb_onetimeinit && si->sb.ccrev >= 20) {
+               cc = (chipcregs_t *) sb_setcore(&si->sb, SB_CC, 0);
+               W_REG(osh, &cc->gpiopullup, 0);
+               W_REG(osh, &cc->gpiopulldown, 0);
+               sb_setcoreidx(&si->sb, origidx);
        }
+#ifdef BCMDBG
+       /* clear any previous epidiag-induced target abort */
+       sb_taclear(&si->sb);
+#endif /* BCMDBG */
 
+#ifdef HNDRTE
+       sb_onetimeinit = TRUE;
+#endif
 
        return (si);
 }
 
+/* Enable/Disable clkreq for PCIE (4311B0/4321B1) */
+void sb_war42780_clkreq(sb_t * sbh, bool clkreq) {
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       /* Don't change clkreq value if serdespll war has not yet been applied */
+       if (!si->pr42767_war && PCIE_ASPMWARS(si))
+               return;
+
+       sb_pcieclkreq(sbh, 1, (int32) clkreq);
+}
+
+static void BCMINITFN(sb_war43448) (sb_t * sbh) {
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       /* if not pcie bus, we're done */
+       if (!PCIE(si) || !PCIE_ASPMWARS(si))
+               return;
+
+       /* Restore the polarity */
+       if (si->pcie_polarity != 0)
+               sb_pcie_mdiowrite((void *)(uintptr) & si->sb, MDIODATA_DEV_RX,
+                                 SERDES_RX_CTRL, si->pcie_polarity);
+}
+
+static void BCMINITFN(sb_war43448_aspm) (sb_t * sbh) {
+       uint32 w;
+       uint16 val16, *reg16;
+       sbpcieregs_t *pcieregs;
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       /* if not pcie bus, we're done */
+       if (!PCIE(si) || !PCIE_ASPMWARS(si))
+               return;
+
+       /* no ASPM stuff on QT or VSIM */
+       if (si->sb.chippkg == HDLSIM_PKG_ID || si->sb.chippkg == HWSIM_PKG_ID)
+               return;
+
+       pcieregs = (sbpcieregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
+
+       /* Enable ASPM in the shadow SROM and Link control */
+       reg16 = &pcieregs->sprom[SRSH_ASPM_OFFSET];
+       val16 = R_REG(si->osh, reg16);
+       if (!si->pcie_war_ovr)
+               val16 |= SRSH_ASPM_ENB;
+       else
+               val16 &= ~SRSH_ASPM_ENB;
+       W_REG(si->osh, reg16, val16);
+
+       w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+                               sizeof(uint32));
+       if (!si->pcie_war_ovr)
+               w |= PCIE_ASPM_ENAB;
+       else
+               w &= ~PCIE_ASPM_ENAB;
+       OSL_PCI_WRITE_CONFIG(si->osh, si->pciecap_lcreg_offset, sizeof(uint32),
+                            w);
+}
+
+static void BCMINITFN(sb_war32414_forceHT) (sb_t * sbh, bool forceHT) {
+       sb_info_t *si;
+       uint32 val = 0;
+
+       si = SB_INFO(sbh);
+
+       ASSERT(FORCEHT_WAR32414(si));
 
-uint
-sb_coreid(sb_t *sbh)
+       if (forceHT)
+               val = SYCC_HR;
+       sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, system_clk_ctl),
+                  SYCC_HR, val);
+}
+
+uint sb_coreid(sb_t * sbh)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -522,8 +693,18 @@ sb_coreid(sb_t *sbh)
        return ((R_SBREG(si, &sb->sbidhigh) & SBIDH_CC_MASK) >> SBIDH_CC_SHIFT);
 }
 
-uint
-sb_coreidx(sb_t *sbh)
+uint sb_flag(sb_t * sbh)
+{
+       sb_info_t *si;
+       sbconfig_t *sb;
+
+       si = SB_INFO(sbh);
+       sb = REGS2SB(si->curmap);
+
+       return R_SBREG(si, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
+}
+
+uint sb_coreidx(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -531,10 +712,9 @@ sb_coreidx(sb_t *sbh)
        return (si->curidx);
 }
 
-/* return current index of core */
-static uint
-_sb_coreidx(sb_info_t *si)
+static uint _sb_coreidx(sb_info_t * si)
 {
+
        sbconfig_t *sb;
        uint32 sbaddr = 0;
 
@@ -547,26 +727,27 @@ _sb_coreidx(sb_info_t *si)
                break;
 
        case PCI_BUS:
-               sbaddr = OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
+               sbaddr =
+                   OSL_PCI_READ_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32));
                break;
 
-       case PCMCIA_BUS: {
-               uint8 tmp = 0;
+       case PCMCIA_BUS:{
+                       uint8 tmp = 0;
 
-               OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR0, &tmp, 1);
-               sbaddr  = (uint)tmp << 12;
-               OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR1, &tmp, 1);
-               sbaddr |= (uint)tmp << 16;
-               OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR2, &tmp, 1);
-               sbaddr |= (uint)tmp << 24;
-               break;
-       }
+                       OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR0, &tmp, 1);
+                       sbaddr = (uint) tmp << 12;
+                       OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR1, &tmp, 1);
+                       sbaddr |= (uint) tmp << 16;
+                       OSL_PCMCIA_READ_ATTR(si->osh, PCMCIA_ADDR2, &tmp, 1);
+                       sbaddr |= (uint) tmp << 24;
+                       break;
+               }
 
 #ifdef BCMJTAG
        case JTAG_BUS:
-               sbaddr = (uint32)si->curmap;
+               sbaddr = (uint32) si->curmap;
                break;
-#endif /* BCMJTAG */
+#endif /* BCMJTAG */
 
        default:
                ASSERT(0);
@@ -578,8 +759,7 @@ _sb_coreidx(sb_info_t *si)
        return ((sbaddr - SB_ENUM_BASE) / SB_CORE_SIZE);
 }
 
-uint
-sb_corevendor(sb_t *sbh)
+uint sb_corevendor(sb_t * sbh)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -590,8 +770,7 @@ sb_corevendor(sb_t *sbh)
        return ((R_SBREG(si, &sb->sbidhigh) & SBIDH_VC_MASK) >> SBIDH_VC_SHIFT);
 }
 
-uint
-sb_corerev(sb_t *sbh)
+uint sb_corerev(sb_t * sbh)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -604,8 +783,7 @@ sb_corerev(sb_t *sbh)
        return (SBCOREREV(sbidh));
 }
 
-void *
-sb_osh(sb_t *sbh)
+void *sb_osh(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -613,8 +791,7 @@ sb_osh(sb_t *sbh)
        return si->osh;
 }
 
-void
-sb_setosh(sb_t *sbh, osl_t *osh)
+void sb_setosh(sb_t * sbh, osl_t * osh)
 {
        sb_info_t *si;
 
@@ -626,9 +803,25 @@ sb_setosh(sb_t *sbh, osl_t *osh)
        si->osh = osh;
 }
 
+/* set sbtmstatelow core-specific flags */
+void sb_coreflags_wo(sb_t * sbh, uint32 mask, uint32 val)
+{
+       sb_info_t *si;
+       sbconfig_t *sb;
+       uint32 w;
+
+       si = SB_INFO(sbh);
+       sb = REGS2SB(si->curmap);
+
+       ASSERT((val & ~mask) == 0);
+
+       /* mask and set */
+       w = (R_SBREG(si, &sb->sbtmstatelow) & ~mask) | val;
+       W_SBREG(si, &sb->sbtmstatelow, w);
+}
+
 /* set/clear sbtmstatelow core-specific flags */
-uint32
-sb_coreflags(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_coreflags(sb_t * sbh, uint32 mask, uint32 val)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -645,13 +838,14 @@ sb_coreflags(sb_t *sbh, uint32 mask, uint32 val)
                W_SBREG(si, &sb->sbtmstatelow, w);
        }
 
-       /* return the new value */
+       /* return the new value
+        * for write operation, the following readback ensures the completion of write opration.
+        */
        return (R_SBREG(si, &sb->sbtmstatelow));
 }
 
 /* set/clear sbtmstatehigh core-specific flags */
-uint32
-sb_coreflagshi(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_coreflagshi(sb_t * sbh, uint32 mask, uint32 val)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -670,12 +864,11 @@ sb_coreflagshi(sb_t *sbh, uint32 mask, uint32 val)
        }
 
        /* return the new value */
-       return (R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_FL_MASK);
+       return (R_SBREG(si, &sb->sbtmstatehigh));
 }
 
 /* Run bist on current core. Caller needs to take care of core-specific bist hazards */
-int
-sb_corebist(sb_t *sbh)
+int sb_corebist(sb_t * sbh)
 {
        uint32 sblo;
        sb_info_t *si;
@@ -688,18 +881,18 @@ sb_corebist(sb_t *sbh)
        sblo = R_SBREG(si, &sb->sbtmstatelow);
        W_SBREG(si, &sb->sbtmstatelow, (sblo | SBTML_FGC | SBTML_BE));
 
-       SPINWAIT(((R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTD) == 0), 100000);
+       SPINWAIT(((R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTD) == 0),
+                100000);
 
        if (R_SBREG(si, &sb->sbtmstatehigh) & SBTMH_BISTF)
-               result = BCME_ERROR;
+               result = -1;
 
        W_SBREG(si, &sb->sbtmstatelow, sblo);
 
        return result;
 }
 
-bool
-sb_iscoreup(sb_t *sbh)
+bool sb_iscoreup(sb_t * sbh)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -708,7 +901,7 @@ sb_iscoreup(sb_t *sbh)
        sb = REGS2SB(si->curmap);
 
        return ((R_SBREG(si, &sb->sbtmstatelow) &
-                (SBTML_RESET | SBTML_REJ_MASK | SBTML_CLK)) == SBTML_CLK);
+                (SBTML_RESET | SBTML_REJ_MASK | SBTML_CLK)) == SBTML_CLK);
 }
 
 /*
@@ -720,51 +913,62 @@ sb_iscoreup(sb_t *sbh)
  * Also, when using pci/pcie, we can optimize away the core switching for pci registers
  * and (on newer pci cores) chipcommon registers.
  */
-static uint
-sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val)
+uint sb_corereg(sb_t * sbh, uint coreidx, uint regoff, uint mask, uint val)
 {
        uint origidx = 0;
        uint32 *r = NULL;
        uint w;
        uint intr_val = 0;
        bool fast = FALSE;
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
 
        ASSERT(GOODIDX(coreidx));
        ASSERT(regoff < SB_CORE_SIZE);
        ASSERT((val & ~mask) == 0);
 
-#ifdef notyet
-       if (si->sb.bustype == SB_BUS) {
+#if 0
+       if (BUSTYPE(si->sb.bustype) == SB_BUS) {
                /* If internal bus, we can always get at everything */
                fast = TRUE;
-               r = (uint32 *)((uchar *)si->regs[coreidx] + regoff);
-       } else if (si->sb.bustype == PCI_BUS) {
+               /* map if does not exist */
+               if (!si->regs[coreidx]) {
+                       si->regs[coreidx] =
+                           (void *)REG_MAP(si->coresba[coreidx], SB_CORE_SIZE);
+                       ASSERT(GOODREGS(si->regs[coreidx]));
+               }
+               r = (uint32 *) ((uchar *) si->regs[coreidx] + regoff);
+       } else if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
                /* If pci/pcie, we can get at pci/pcie regs and on newer cores to chipc */
 
                if ((si->coreid[coreidx] == SB_CC) &&
-                   ((si->sb.buscoretype == SB_PCIE) ||
-                    (si->sb.buscorerev >= 13))) {
+                   ((si->sb.buscoretype == SB_PCIE)
+                    || (si->sb.buscorerev >= 13))) {
                        /* Chipc registers are mapped at 12KB */
 
                        fast = TRUE;
-                       r = (uint32 *)((char *)si->curmap + PCI_16KB0_CCREGS_OFFSET + regoff);
+                       r = (uint32 *) ((char *)si->curmap +
+                                       PCI_16KB0_CCREGS_OFFSET + regoff);
                } else if (si->sb.buscoreidx == coreidx) {
                        /* pci registers are at either in the last 2KB of an 8KB window
                         * or, in pcie and pci rev 13 at 8KB
                         */
                        fast = TRUE;
-                       if ((si->sb.buscoretype == SB_PCIE) ||
-                           (si->sb.buscorerev >= 13))
-                               r = (uint32 *)((char *)si->curmap +
-                                              PCI_16KB0_PCIREGS_OFFSET + regoff);
+                       if ((si->sb.buscoretype == SB_PCIE)
+                           || (si->sb.buscorerev >= 13))
+                               r = (uint32 *) ((char *)si->curmap +
+                                               PCI_16KB0_PCIREGS_OFFSET +
+                                               regoff);
                        else
-                               r = (uint32 *)((char *)si->curmap +
-                                              ((regoff >= SBCONFIGOFF) ?
-                                               PCI_BAR0_PCISBR_OFFSET : PCI_BAR0_PCIREGS_OFFSET) +
-                                              regoff);
+                               r = (uint32 *) ((char *)si->curmap +
+                                               ((regoff >= SBCONFIGOFF) ?
+                                                PCI_BAR0_PCISBR_OFFSET :
+                                                PCI_BAR0_PCIREGS_OFFSET)
+                                               + regoff);
                }
        }
-#endif /* notyet */
+#endif
 
        if (!fast) {
                INTR_OFF(si, intr_val);
@@ -773,7 +977,8 @@ sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val)
                origidx = sb_coreidx(&si->sb);
 
                /* switch core */
-               r = (uint32*) ((uchar*) sb_setcoreidx(&si->sb, coreidx) + regoff);
+               r = (uint32 *) ((uchar *) sb_setcoreidx(&si->sb, coreidx) +
+                               regoff);
        }
        ASSERT(r);
 
@@ -791,8 +996,14 @@ sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val)
        /* readback */
        if (regoff >= SBCONFIGOFF)
                w = R_SBREG(si, r);
-       else
-               w = R_REG(si->osh, r);
+       else {
+               if ((si->sb.chip == BCM5354_CHIP_ID) &&
+                   (coreidx == SB_CC_IDX) &&
+                   (regoff == OFFSETOF(chipcregs_t, watchdog))) {
+                       w = val;
+               } else
+                       w = R_REG(si->osh, r);
+       }
 
        if (!fast) {
                /* restore core index */
@@ -821,78 +1032,290 @@ sb_corereg(sb_info_t *si, uint coreidx, uint regoff, uint mask, uint val)
 #define read_pci_cfg_word(a) \
        (WORD_VAL(OSL_PCI_READ_CONFIG(si->osh, DWORD_ALIGN(a), 4), a) & 0xffff)
 
-
-/* return TRUE if requested capability exists in the PCI config space */
-static bool
-sb_find_pci_capability(sb_info_t *si, uint8 req_cap_id, uchar *buf, uint32 *buflen)
+/* return cap_offset if requested capability exists in the PCI config space */
+static uint8
+sb_find_pci_capability(sb_info_t * si, uint8 req_cap_id, uchar * buf,
+                      uint32 * buflen)
 {
        uint8 cap_id;
-       uint8 cap_ptr;
-       uint32  bufsize;
+       uint8 cap_ptr = 0;
+       uint32 bufsize;
        uint8 byte_val;
 
        if (BUSTYPE(si->sb.bustype) != PCI_BUS)
-               return FALSE;
+               goto end;
 
        /* check for Header type 0 */
        byte_val = read_pci_cfg_byte(PCI_CFG_HDR);
        if ((byte_val & 0x7f) != PCI_HEADER_NORMAL)
-               return FALSE;
+               goto end;
 
        /* check if the capability pointer field exists */
        byte_val = read_pci_cfg_byte(PCI_CFG_STAT);
        if (!(byte_val & PCI_CAPPTR_PRESENT))
-               return FALSE;
+               goto end;
 
        cap_ptr = read_pci_cfg_byte(PCI_CFG_CAPPTR);
        /* check if the capability pointer is 0x00 */
        if (cap_ptr == 0x00)
-               return FALSE;
-
+               goto end;
 
        /* loop thr'u the capability list and see if the pcie capabilty exists */
 
        cap_id = read_pci_cfg_byte(cap_ptr);
 
        while (cap_id != req_cap_id) {
-               cap_ptr = read_pci_cfg_byte((cap_ptr+1));
-               if (cap_ptr == 0x00) break;
+               cap_ptr = read_pci_cfg_byte((cap_ptr + 1));
+               if (cap_ptr == 0x00)
+                       break;
                cap_id = read_pci_cfg_byte(cap_ptr);
        }
        if (cap_id != req_cap_id) {
-               return FALSE;
+               goto end;
        }
        /* found the caller requested capability */
        if ((buf != NULL) && (buflen != NULL)) {
+               uint8 cap_data;
+
                bufsize = *buflen;
-               if (!bufsize) goto end;
+               if (!bufsize)
+                       goto end;
                *buflen = 0;
                /* copy the cpability data excluding cap ID and next ptr */
-               cap_ptr += 2;
-               if ((bufsize + cap_ptr)  > SZPCR)
-                       bufsize = SZPCR - cap_ptr;
+               cap_data = cap_ptr + 2;
+               if ((bufsize + cap_data) > SZPCR)
+                       bufsize = SZPCR - cap_data;
                *buflen = bufsize;
                while (bufsize--) {
-                       *buf = read_pci_cfg_byte(cap_ptr);
-                       cap_ptr++;
+                       *buf = read_pci_cfg_byte(cap_data);
+                       cap_data++;
                        buf++;
                }
        }
-end:
+      end:
+       return cap_ptr;
+}
+
+uint8 sb_pcieclkreq(sb_t * sbh, uint32 mask, uint32 val)
+{
+       sb_info_t *si;
+       uint32 reg_val;
+       uint8 offset;
+
+       si = SB_INFO(sbh);
+
+       offset = si->pciecap_lcreg_offset;
+       if (!offset)
+               return 0;
+
+       reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+       /* set operation */
+       if (mask) {
+               if (val)
+                       reg_val |= PCIE_CLKREQ_ENAB;
+               else
+                       reg_val &= ~PCIE_CLKREQ_ENAB;
+               OSL_PCI_WRITE_CONFIG(si->osh, offset, sizeof(uint32), reg_val);
+               reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+       }
+       if (reg_val & PCIE_CLKREQ_ENAB)
+               return 1;
+       else
+               return 0;
+}
+
+#ifdef BCMDBG
+
+uint32 sb_pcielcreg(sb_t * sbh, uint32 mask, uint32 val)
+{
+       sb_info_t *si;
+       uint32 reg_val;
+       uint8 offset;
+
+       si = SB_INFO(sbh);
+
+       if (!PCIE(si))
+               return 0;
+
+       offset = si->pciecap_lcreg_offset;
+       if (!offset)
+               return 0;
+
+       /* set operation */
+       if (mask)
+               OSL_PCI_WRITE_CONFIG(si->osh, offset, sizeof(uint32), val);
+
+       reg_val = OSL_PCI_READ_CONFIG(si->osh, offset, sizeof(uint32));
+
+       return reg_val;
+}
+
+uint8 sb_pcieL1plldown(sb_t * sbh)
+{
+       sb_info_t *si;
+       uint intr_val = 0;
+       uint origidx;
+       uint32 reg_val;
+
+       si = SB_INFO(sbh);
+
+       if (!PCIE(si))
+               return 0;
+       if (!((si->sb.buscorerev == 3) || (si->sb.buscorerev == 4)))
+               return 0;
+
+       if (!sb_pcieclkreq((void *)(uintptr) sbh, 0, 0)) {
+               SB_ERROR(("PCIEL1PLLDOWN requires Clkreq be enabled, so enable it\n"));
+               sb_pcieclkreq((void *)(uintptr) sbh, 1, 1);
+       }
+       reg_val = sb_pcielcreg((void *)(uintptr) sbh, 0, 0);
+       if (reg_val & PCIE_CAP_LCREG_ASPML0s) {
+               SB_ERROR(("PCIEL1PLLDOWN requires L0s to be disabled\n"));
+               reg_val &= ~PCIE_CAP_LCREG_ASPML0s;
+               sb_pcielcreg((void *)(uintptr) sbh, 1, reg_val);
+       } else
+               SB_ERROR(("PCIEL1PLLDOWN: L0s is already disabled\n"));
+
+       /* turnoff intrs, change core, set original back, turn on intrs back on  */
+       origidx = si->curidx;
+       INTR_OFF(si, intr_val);
+       sb_setcore(sbh, SB_PCIE, 0);
+
+       sb_pcie_writereg((void *)(uintptr) sbh, (void *)PCIE_PCIEREGS,
+                        PCIE_DLLP_PCIE11, 0);
+
+       sb_setcoreidx(sbh, origidx);
+       INTR_RESTORE(si, intr_val);
+       return 1;
+}
+#endif /* BCMDBG */
+
+/* return TRUE if PCIE capability exists in the pci config space */
+static bool sb_ispcie(sb_info_t * si)
+{
+       uint8 cap_ptr;
+
+       cap_ptr = sb_find_pci_capability(si, PCI_CAP_PCIECAP_ID, NULL, NULL);
+       if (!cap_ptr)
+               return FALSE;
+
+       si->pciecap_lcreg_offset = cap_ptr + PCIE_CAP_LINKCTRL_OFFSET;
+
        return TRUE;
 }
 
-/* return TRUE if PCIE capability exists the pci config space */
-static inline bool
-sb_ispcie(sb_info_t *si)
+/* Wake-on-wireless-LAN (WOWL) support functions */
+/* return TRUE if PM capability exists in the pci config space */
+bool sb_pci_pmecap(sb_t * sbh)
+{
+       uint8 cap_ptr;
+       uint32 pmecap;
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       if (si == NULL || !(PCI(si) || PCIE(si)))
+               return FALSE;
+
+       if (!si->pmecap_offset) {
+               cap_ptr =
+                   sb_find_pci_capability(si, PCI_CAP_POWERMGMTCAP_ID, NULL,
+                                          NULL);
+               if (!cap_ptr)
+                       return FALSE;
+
+               si->pmecap_offset = cap_ptr;
+
+               pmecap =
+                   OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset,
+                                       sizeof(uint32));
+
+               /* At least one state can generate PME */
+               si->pmecap = (pmecap & PME_CAP_PM_STATES) != 0;
+       }
+
+       return (si->pmecap);
+}
+
+/* Enable PME generation and disable clkreq */
+void sb_pci_pmeen(sb_t * sbh)
 {
-       return (sb_find_pci_capability(si, PCI_CAP_PCIECAP_ID, NULL, NULL));
+       sb_info_t *si;
+       uint32 w;
+       si = SB_INFO(sbh);
+
+       /* if not pmecapable return */
+       if (!sb_pci_pmecap(sbh))
+               return;
+
+       w = OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+                               sizeof(uint32));
+       w |= (PME_CSR_PME_EN);
+       OSL_PCI_WRITE_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+                            sizeof(uint32), w);
+
+       /* Disable clkreq */
+       if (si->pr42767_war) {
+               sb_pcieclkreq(sbh, 1, 0);
+               si->pr42767_war = FALSE;
+       } else if (si->sb.pr42780) {
+               sb_pcieclkreq(sbh, 1, 1);
+       }
 }
 
-/* scan the sb enumerated space to identify all cores */
-static void
-BCMINITFN(sb_scan)(sb_info_t *si)
+/* Disable PME generation, clear the PME status bit if set and
+ * return TRUE if PME status set
+ */
+bool sb_pci_pmeclr(sb_t * sbh)
 {
+       sb_info_t *si;
+       uint32 w;
+       bool ret = FALSE;
+
+       si = SB_INFO(sbh);
+
+       if (!sb_pci_pmecap(sbh))
+               return ret;
+
+       w = OSL_PCI_READ_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+                               sizeof(uint32));
+
+       SB_ERROR(("sb_pci_pmeclr PMECSR : 0x%x\n", w));
+       ret = (w & PME_CSR_PME_STAT) == PME_CSR_PME_STAT;
+
+       /* PMESTAT is cleared by writing 1 to it */
+       w &= ~(PME_CSR_PME_EN);
+
+       OSL_PCI_WRITE_CONFIG(si->osh, si->pmecap_offset + PME_CSR_OFFSET,
+                            sizeof(uint32), w);
+
+       return ret;
+}
+
+/* use pci dev id to determine chip id for chips not having a chipcommon core */
+static uint BCMINITFN(sb_pcidev2chip) (uint pcidev) {
+       if ((pcidev >= BCM4710_DEVICE_ID) && (pcidev <= BCM47XX_USB_ID))
+               return (BCM4710_CHIP_ID);
+       if ((pcidev >= BCM4402_ENET_ID) && (pcidev <= BCM4402_V90_ID))
+               return (BCM4402_CHIP_ID);
+       if (pcidev == BCM4401_ENET_ID)
+               return (BCM4402_CHIP_ID);
+       if (pcidev == SDIOH_FPGA_ID)
+               return (SDIOH_FPGA_ID);
+
+       return (0);
+}
+
+/* Scan the enumeration space to find all cores starting from the given
+ * bus 'sbba'. Append coreid and other info to the lists in 'si'. 'sba'
+ * is the default core address at chip POR time and 'regs' is the virtual
+ * address that the default core is mapped at. 'ncores' is the number of
+ * cores expected on bus 'sbba'. It returns the total number of cores
+ * starting from bus 'sbba', inclusive.
+ */
+
+static void BCMINITFN(sb_scan) (sb_info_t * si) {
+       sb_t *sbh;
        uint origidx;
        uint i;
        bool pci;
@@ -902,6 +1325,7 @@ BCMINITFN(sb_scan)(sb_info_t *si)
        uint pcirev;
        uint pcierev;
 
+       sbh = (sb_t *) si;
 
        /* numcores should already be set */
        ASSERT((si->numcores > 0) && (si->numcores <= SB_MAXCORES));
@@ -959,14 +1383,14 @@ BCMINITFN(sb_scan)(sb_info_t *si)
         * - else if there's a pci core (rev >= 2) - use that
         * - else there had better be an extif core (4710 only)
         */
-       if (GOODIDX(sb_findcoreidx(si, SB_CC, 0))) {
-               si->gpioidx = sb_findcoreidx(si, SB_CC, 0);
+       if (GOODIDX(sb_findcoreidx(sbh, SB_CC, 0))) {
+               si->gpioidx = sb_findcoreidx(sbh, SB_CC, 0);
                si->gpioid = SB_CC;
        } else if (PCI(si) && (si->sb.buscorerev >= 2)) {
                si->gpioidx = si->sb.buscoreidx;
                si->gpioid = SB_PCI;
-       } else if (sb_findcoreidx(si, SB_EXTIF, 0)) {
-               si->gpioidx = sb_findcoreidx(si, SB_EXTIF, 0);
+       } else if (sb_findcoreidx(sbh, SB_EXTIF, 0)) {
+               si->gpioidx = sb_findcoreidx(sbh, SB_EXTIF, 0);
                si->gpioid = SB_EXTIF;
        } else
                ASSERT(si->gpioidx != BADIDX);
@@ -976,8 +1400,7 @@ BCMINITFN(sb_scan)(sb_info_t *si)
 }
 
 /* may be called with core in reset */
-void
-sb_detach(sb_t *sbh)
+void sb_detach(sb_t * sbh)
 {
        sb_info_t *si;
        uint idx;
@@ -995,29 +1418,13 @@ sb_detach(sb_t *sbh)
                        }
 #if !defined(BCMBUSTYPE) || (BCMBUSTYPE == SB_BUS)
        if (si != &ksi)
-#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
+#endif /* !BCMBUSTYPE || (BCMBUSTYPE == SB_BUS) */
                MFREE(si->osh, si, sizeof(sb_info_t));
-
 }
 
-/* use pci dev id to determine chip id for chips not having a chipcommon core */
-static uint
-BCMINITFN(sb_pcidev2chip)(uint pcidev)
-{
-       if ((pcidev >= BCM4710_DEVICE_ID) && (pcidev <= BCM47XX_USB_ID))
-               return (BCM4710_CHIP_ID);
-       if ((pcidev >= BCM4402_ENET_ID) && (pcidev <= BCM4402_V90_ID))
-               return (BCM4402_CHIP_ID);
-       if (pcidev == BCM4401_ENET_ID)
-               return (BCM4402_CHIP_ID);
-
-       return (0);
-}
 
 /* convert chip number to number of i/o cores */
-static uint
-BCMINITFN(sb_chip2numcores)(uint chip)
-{
+static uint BCMINITFN(sb_chip2numcores) (uint chip) {
        if (chip == BCM4710_CHIP_ID)
                return (9);
        if (chip == BCM4402_CHIP_ID)
@@ -1028,6 +1435,8 @@ BCMINITFN(sb_chip2numcores)(uint chip)
                return (9);
        if (chip == BCM5365_CHIP_ID)
                return (7);
+       if (chip == SDIOH_FPGA_ID)
+               return (2);
 
        SB_ERROR(("sb_chip2numcores: unsupported chip 0x%x\n", chip));
        ASSERT(0);
@@ -1035,12 +1444,14 @@ BCMINITFN(sb_chip2numcores)(uint chip)
 }
 
 /* return index of coreid or BADIDX if not found */
-static uint
-sb_findcoreidx(sb_info_t *si, uint coreid, uint coreunit)
+uint sb_findcoreidx(sb_t * sbh, uint coreid, uint coreunit)
 {
+       sb_info_t *si;
        uint found;
        uint i;
 
+       si = SB_INFO(sbh);
+
        found = 0;
 
        for (i = 0; i < si->numcores; i++)
@@ -1058,8 +1469,7 @@ sb_findcoreidx(sb_info_t *si, uint coreid, uint coreunit)
  * must be called with interrupt off.
  * Moreover, callers should keep interrupts off during switching out of and back to d11 core
  */
-void*
-sb_setcoreidx(sb_t *sbh, uint coreidx)
+void *sb_setcoreidx(sb_t * sbh, uint coreidx)
 {
        sb_info_t *si;
        uint32 sbaddr;
@@ -1074,7 +1484,8 @@ sb_setcoreidx(sb_t *sbh, uint coreidx)
         * If the user has provided an interrupt mask enabled function,
         * then assert interrupts are disabled before switching the core.
         */
-       ASSERT((si->intrsenabled_fn == NULL) || !(*(si)->intrsenabled_fn)((si)->intr_arg));
+       ASSERT((si->intrsenabled_fn == NULL)
+              || !(*(si)->intrsenabled_fn) ((si)->intr_arg));
 
        sbaddr = SB_ENUM_BASE + (coreidx * SB_CORE_SIZE);
 
@@ -1082,7 +1493,8 @@ sb_setcoreidx(sb_t *sbh, uint coreidx)
        case SB_BUS:
                /* map new one */
                if (!si->regs[coreidx]) {
-                       si->regs[coreidx] = (void*)REG_MAP(sbaddr, SB_CORE_SIZE);
+                       si->regs[coreidx] =
+                           (void *)REG_MAP(sbaddr, SB_CORE_SIZE);
                        ASSERT(GOODREGS(si->regs[coreidx]));
                }
                si->curmap = si->regs[coreidx];
@@ -1110,7 +1522,7 @@ sb_setcoreidx(sb_t *sbh, uint coreidx)
                }
                si->curmap = si->regs[coreidx];
                break;
-#endif /* BCMJTAG */
+#endif /* BCMJTAG */
        }
 
        si->curidx = coreidx;
@@ -1123,14 +1535,11 @@ sb_setcoreidx(sb_t *sbh, uint coreidx)
  * must be called with interrupt off.
  * Moreover, callers should keep interrupts off during switching out of and back to d11 core
  */
-void*
-sb_setcore(sb_t *sbh, uint coreid, uint coreunit)
+void *sb_setcore(sb_t * sbh, uint coreid, uint coreunit)
 {
-       sb_info_t *si;
        uint idx;
 
-       si = SB_INFO(sbh);
-       idx = sb_findcoreidx(si, coreid, coreunit);
+       idx = sb_findcoreidx(sbh, coreid, coreunit);
        if (!GOODIDX(idx))
                return (NULL);
 
@@ -1138,9 +1547,7 @@ sb_setcore(sb_t *sbh, uint coreid, uint coreunit)
 }
 
 /* return chip number */
-uint
-sb_chip(sb_t *sbh)
-{
+uint BCMINITFN(sb_chip) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1148,9 +1555,7 @@ sb_chip(sb_t *sbh)
 }
 
 /* return chip revision number */
-uint
-sb_chiprev(sb_t *sbh)
-{
+uint BCMINITFN(sb_chiprev) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1158,9 +1563,7 @@ sb_chiprev(sb_t *sbh)
 }
 
 /* return chip common revision number */
-uint
-sb_chipcrev(sb_t *sbh)
-{
+uint BCMINITFN(sb_chipcrev) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1168,9 +1571,7 @@ sb_chipcrev(sb_t *sbh)
 }
 
 /* return chip package option */
-uint
-sb_chippkg(sb_t *sbh)
-{
+uint BCMINITFN(sb_chippkg) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1178,18 +1579,14 @@ sb_chippkg(sb_t *sbh)
 }
 
 /* return PCI core rev. */
-uint
-sb_pcirev(sb_t *sbh)
-{
+uint BCMINITFN(sb_pcirev) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
        return (si->sb.buscorerev);
 }
 
-bool
-BCMINITFN(sb_war16165)(sb_t *sbh)
-{
+bool BCMINITFN(sb_war16165) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1197,18 +1594,14 @@ BCMINITFN(sb_war16165)(sb_t *sbh)
        return (PCI(si) && (si->sb.buscorerev <= 10));
 }
 
-static void
-BCMINITFN(sb_war30841)(sb_info_t *si)
-{
+static void BCMINITFN(sb_war30841) (sb_info_t * si) {
        sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_TIMER1, 0x8128);
        sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_CDR, 0x0100);
        sb_pcie_mdiowrite(si, MDIODATA_DEV_RX, SERDES_RX_CDRBW, 0x1466);
 }
 
 /* return PCMCIA core rev. */
-uint
-BCMINITFN(sb_pcmciarev)(sb_t *sbh)
-{
+uint BCMINITFN(sb_pcmciarev) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1216,9 +1609,7 @@ BCMINITFN(sb_pcmciarev)(sb_t *sbh)
 }
 
 /* return board vendor id */
-uint
-sb_boardvendor(sb_t *sbh)
-{
+uint BCMINITFN(sb_boardvendor) (sb_t * sbh) {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
@@ -1226,9 +1617,7 @@ sb_boardvendor(sb_t *sbh)
 }
 
 /* return boardtype */
-uint
-sb_boardtype(sb_t *sbh)
-{
+uint BCMINITFN(sb_boardtype) (sb_t * sbh) {
        sb_info_t *si;
        char *var;
 
@@ -1239,7 +1628,8 @@ sb_boardtype(sb_t *sbh)
                si->sb.boardtype = getintvar(NULL, "boardtype");
 
                /* backward compatibility for older boardtype string format */
-               if ((si->sb.boardtype == 0) && (var = getvar(NULL, "boardtype"))) {
+               if ((si->sb.boardtype == 0)
+                   && (var = getvar(NULL, "boardtype"))) {
                        if (!strcmp(var, "bcm94710dev"))
                                si->sb.boardtype = BCM94710D_BOARD;
                        else if (!strcmp(var, "bcm94710ap"))
@@ -1263,8 +1653,7 @@ sb_boardtype(sb_t *sbh)
 }
 
 /* return bus type of sbh device */
-uint
-sb_bus(sb_t *sbh)
+uint sb_bus(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -1273,8 +1662,7 @@ sb_bus(sb_t *sbh)
 }
 
 /* return bus core type */
-uint
-sb_buscoretype(sb_t *sbh)
+uint sb_buscoretype(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -1284,8 +1672,7 @@ sb_buscoretype(sb_t *sbh)
 }
 
 /* return bus core revision */
-uint
-sb_buscorerev(sb_t *sbh)
+uint sb_buscorerev(sb_t * sbh)
 {
        sb_info_t *si;
        si = SB_INFO(sbh);
@@ -1294,20 +1681,19 @@ sb_buscorerev(sb_t *sbh)
 }
 
 /* return list of found cores */
-uint
-sb_corelist(sb_t *sbh, uint coreid[])
+uint sb_corelist(sb_t * sbh, uint coreid[])
 {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
 
-       bcopy((uchar*)si->coreid, (uchar*)coreid, (si->numcores * sizeof(uint)));
+       bcopy((uchar *) si->coreid, (uchar *) coreid,
+             (si->numcores * sizeof(uint)));
        return (si->numcores);
 }
 
 /* return current register mapping */
-void *
-sb_coreregs(sb_t *sbh)
+void *sb_coreregs(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -1317,10 +1703,166 @@ sb_coreregs(sb_t *sbh)
        return (si->curmap);
 }
 
+#if defined(BCMDBG_ASSERT)
+/* traverse all cores to find and clear source of serror */
+static void sb_serr_clear(sb_info_t * si)
+{
+       sbconfig_t *sb;
+       uint origidx;
+       uint i, intr_val = 0;
+       void *corereg = NULL;
+
+       INTR_OFF(si, intr_val);
+       origidx = sb_coreidx(&si->sb);
+
+       for (i = 0; i < si->numcores; i++) {
+               corereg = sb_setcoreidx(&si->sb, i);
+               if (NULL != corereg) {
+                       sb = REGS2SB(corereg);
+                       if ((R_SBREG(si, &sb->sbtmstatehigh)) & SBTMH_SERR) {
+                               AND_SBREG(si, &sb->sbtmstatehigh, ~SBTMH_SERR);
+                               SB_ERROR(("sb_serr_clear: SError at core 0x%x\n", sb_coreid(&si->sb)));
+                       }
+               }
+       }
+
+       sb_setcoreidx(&si->sb, origidx);
+       INTR_RESTORE(si, intr_val);
+}
+
+/*
+ * Check if any inband, outband or timeout errors has happened and clear them.
+ * Must be called with chip clk on !
+ */
+bool sb_taclear(sb_t * sbh)
+{
+       sb_info_t *si;
+       sbconfig_t *sb;
+       uint origidx;
+       uint intr_val = 0;
+       bool rc = FALSE;
+       uint32 inband = 0, serror = 0, timeout = 0;
+       void *corereg = NULL;
+       volatile uint32 imstate, tmstate;
+
+       si = SB_INFO(sbh);
+
+       if (BUSTYPE(si->sb.bustype) == PCI_BUS) {
+               volatile uint32 stcmd;
+
+               /* inband error is Target abort for PCI */
+               stcmd =
+                   OSL_PCI_READ_CONFIG(si->osh, PCI_CFG_CMD, sizeof(uint32));
+               inband = stcmd & PCI_CFG_CMD_STAT_TA;
+               if (inband) {
+#ifdef BCMDBG
+                       SB_ERROR(("inband:\n"));
+                       sb_viewall((void *)si);
+#endif
+                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_CFG_CMD,
+                                            sizeof(uint32), stcmd);
+               }
+
+               /* serror */
+               stcmd =
+                   OSL_PCI_READ_CONFIG(si->osh, PCI_INT_STATUS,
+                                       sizeof(uint32));
+               serror = stcmd & PCI_SBIM_STATUS_SERR;
+               if (serror) {
+#ifdef BCMDBG
+                       SB_ERROR(("serror:\n"));
+                       sb_viewall((void *)si);
+#endif
+                       sb_serr_clear(si);
+                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_INT_STATUS,
+                                            sizeof(uint32), stcmd);
+               }
+
+               /* timeout */
+               imstate = sb_corereg(sbh, si->sb.buscoreidx,
+                                    SBCONFIGOFF + OFFSETOF(sbconfig_t,
+                                                           sbimstate), 0, 0);
+               if ((imstate != 0xffffffff) && (imstate & (SBIM_IBE | SBIM_TO))) {
+                       sb_corereg(sbh, si->sb.buscoreidx,
+                                  SBCONFIGOFF + OFFSETOF(sbconfig_t,
+                                                         sbimstate), ~0,
+                                  (imstate & ~(SBIM_IBE | SBIM_TO)));
+                       /* inband = imstate & SBIM_IBE; same as TA above */
+                       timeout = imstate & SBIM_TO;
+                       if (timeout) {
+#ifdef BCMDBG
+                               SB_ERROR(("timeout:\n"));
+                               sb_viewall((void *)si);
+#endif
+                       }
+               }
+
+               if (inband) {
+                       /* dump errlog for sonics >= 2.3 */
+                       if (si->sb.sonicsrev == SONICS_2_2) ;
+                       else {
+                               uint32 imerrlog, imerrloga;
+                               imerrlog =
+                                   sb_corereg(sbh, si->sb.buscoreidx,
+                                              SBIMERRLOG, 0, 0);
+                               if (imerrlog & SBTMEL_EC) {
+                                       imerrloga =
+                                           sb_corereg(sbh, si->sb.buscoreidx,
+                                                      SBIMERRLOGA, 0, 0);
+                                       /* clear errlog */
+                                       sb_corereg(sbh, si->sb.buscoreidx,
+                                                  SBIMERRLOG, ~0, 0);
+                                       SB_ERROR(("sb_taclear: ImErrLog 0x%x, ImErrLogA 0x%x\n", imerrlog, imerrloga));
+                               }
+                       }
+               }
+
+       } else if (BUSTYPE(si->sb.bustype) == PCMCIA_BUS) {
+
+               INTR_OFF(si, intr_val);
+               origidx = sb_coreidx(sbh);
+
+               corereg = sb_setcore(sbh, SB_PCMCIA, 0);
+               if (NULL != corereg) {
+                       sb = REGS2SB(corereg);
+
+                       imstate = R_SBREG(si, &sb->sbimstate);
+                       /* handle surprise removal */
+                       if ((imstate != 0xffffffff)
+                           && (imstate & (SBIM_IBE | SBIM_TO))) {
+                               AND_SBREG(si, &sb->sbimstate,
+                                         ~(SBIM_IBE | SBIM_TO));
+                               inband = imstate & SBIM_IBE;
+                               timeout = imstate & SBIM_TO;
+                       }
+                       tmstate = R_SBREG(si, &sb->sbtmstatehigh);
+                       if ((tmstate != 0xffffffff)
+                           && (tmstate & SBTMH_INT_STATUS)) {
+                               if (!inband) {
+                                       serror = 1;
+                                       sb_serr_clear(si);
+                               }
+                               OR_SBREG(si, &sb->sbtmstatelow, SBTML_INT_ACK);
+                               AND_SBREG(si, &sb->sbtmstatelow,
+                                         ~SBTML_INT_ACK);
+                       }
+               }
+               sb_setcoreidx(sbh, origidx);
+               INTR_RESTORE(si, intr_val);
+
+       }
+
+       if (inband | timeout | serror) {
+               rc = TRUE;
+               SB_ERROR(("sb_taclear: inband 0x%x, serror 0x%x, timeout 0x%x!\n", inband, serror, timeout));
+       }
+
+       return (rc);
+}
+#endif /* BCMDBG */
 
 /* do buffered registers update */
-void
-sb_commit(sb_t *sbh)
+void sb_commit(sb_t * sbh)
 {
        sb_info_t *si;
        uint origidx;
@@ -1335,13 +1877,14 @@ sb_commit(sb_t *sbh)
 
        /* switch over to chipcommon core if there is one, else use pci */
        if (si->sb.ccrev != NOREV) {
-               chipcregs_t *ccregs = (chipcregs_t *)sb_setcore(sbh, SB_CC, 0);
+               chipcregs_t *ccregs = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
 
                /* do the buffer registers update */
                W_REG(si->osh, &ccregs->broadcastaddress, SB_COMMIT);
                W_REG(si->osh, &ccregs->broadcastdata, 0x0);
        } else if (PCI(si)) {
-               sbpciregs_t *pciregs = (sbpciregs_t *)sb_setcore(sbh, SB_PCI, 0);
+               sbpciregs_t *pciregs =
+                   (sbpciregs_t *) sb_setcore(sbh, SB_PCI, 0);
 
                /* do the buffer registers update */
                W_REG(si->osh, &pciregs->bcastaddr, SB_COMMIT);
@@ -1359,8 +1902,7 @@ sb_commit(sb_t *sbh)
  * bits - core specific bits that are set during and after reset sequence
  * resetbits - core specific bits that are set only during reset sequence
  */
-void
-sb_core_reset(sb_t *sbh, uint32 bits, uint32 resetbits)
+void sb_core_reset(sb_t * sbh, uint32 bits, uint32 resetbits)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -1380,7 +1922,8 @@ sb_core_reset(sb_t *sbh, uint32 bits, uint32 resetbits)
         */
 
        /* set reset while enabling the clock and forcing them on throughout the core */
-       W_SBREG(si, &sb->sbtmstatelow, (SBTML_FGC | SBTML_CLK | SBTML_RESET | bits | resetbits));
+       W_SBREG(si, &sb->sbtmstatelow,
+               (SBTML_FGC | SBTML_CLK | SBTML_RESET | bits | resetbits));
        dummy = R_SBREG(si, &sb->sbtmstatelow);
        OSL_DELAY(1);
 
@@ -1402,8 +1945,7 @@ sb_core_reset(sb_t *sbh, uint32 bits, uint32 resetbits)
        OSL_DELAY(1);
 }
 
-void
-sb_core_tofixup(sb_t *sbh)
+void sb_core_tofixup(sb_t * sbh)
 {
        sb_info_t *si;
        sbconfig_t *sb;
@@ -1419,15 +1961,16 @@ sb_core_tofixup(sb_t *sbh)
 
        if (BUSTYPE(si->sb.bustype) == SB_BUS) {
                SET_SBREG(si, &sb->sbimconfiglow,
-                         SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
-                         (0x5 << SBIMCL_RTO_SHIFT) | 0x3);
+                         SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+                         (0x5 << SBIMCL_RTO_SHIFT) | 0x3);
        } else {
                if (sb_coreid(sbh) == SB_PCI) {
                        SET_SBREG(si, &sb->sbimconfiglow,
-                                 SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
-                                 (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
+                                 SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+                                 (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
                } else {
-                       SET_SBREG(si, &sb->sbimconfiglow, (SBIMCL_RTO_MASK | SBIMCL_STO_MASK), 0);
+                       SET_SBREG(si, &sb->sbimconfiglow,
+                                 (SBIMCL_RTO_MASK | SBIMCL_STO_MASK), 0);
                }
        }
 
@@ -1458,11 +2001,10 @@ sb_core_tofixup(sb_t *sbh)
 
 #define        TO_MASK (SBIMCL_RTO_MASK | SBIMCL_STO_MASK)
 
-uint32
-sb_set_initiator_to(sb_t *sbh, uint32 to)
+uint32 sb_set_initiator_to(sb_t * sbh, uint32 to, uint idx)
 {
        sb_info_t *si;
-       uint origidx, idx;
+       uint origidx;
        uint intr_val = 0;
        uint32 tmp, ret = 0xffffffff;
        sbconfig_t *sb;
@@ -1473,27 +2015,28 @@ sb_set_initiator_to(sb_t *sbh, uint32 to)
                return ret;
 
        /* Figure out the master core */
-       idx = BADIDX;
-       switch (BUSTYPE(si->sb.bustype)) {
-       case PCI_BUS:
-               idx = si->sb.buscoreidx;
-               break;
-       case JTAG_BUS:
-               idx = SB_CC_IDX;
-               break;
-       case PCMCIA_BUS:
-       case SDIO_BUS:
-               idx = sb_findcoreidx(si, SB_PCMCIA, 0);
-               break;
-       case SB_BUS:
-               if ((idx = sb_findcoreidx(si, SB_MIPS33, 0)) == BADIDX)
-                       idx = sb_findcoreidx(si, SB_MIPS, 0);
-               break;
-       default:
-               ASSERT(0);
+       if (idx == BADIDX) {
+               switch (BUSTYPE(si->sb.bustype)) {
+               case PCI_BUS:
+                       idx = si->sb.buscoreidx;
+                       break;
+               case JTAG_BUS:
+                       idx = SB_CC_IDX;
+                       break;
+               case PCMCIA_BUS:
+               case SDIO_BUS:
+                       idx = sb_findcoreidx(sbh, SB_PCMCIA, 0);
+                       break;
+               case SB_BUS:
+                       if ((idx = sb_findcoreidx(sbh, SB_MIPS33, 0)) == BADIDX)
+                               idx = sb_findcoreidx(sbh, SB_MIPS, 0);
+                       break;
+               default:
+                       ASSERT(0);
+               }
+               if (idx == BADIDX)
+                       return ret;
        }
-       if (idx == BADIDX)
-               return ret;
 
        INTR_OFF(si, intr_val);
        origidx = sb_coreidx(sbh);
@@ -1510,8 +2053,7 @@ sb_set_initiator_to(sb_t *sbh, uint32 to)
        return ret;
 }
 
-void
-sb_core_disable(sb_t *sbh, uint32 bits)
+void sb_core_disable(sb_t * sbh, uint32 bits)
 {
        sb_info_t *si;
        volatile uint32 dummy;
@@ -1553,7 +2095,8 @@ sb_core_disable(sb_t *sbh, uint32 bits)
        }
 
        /* set reset and reject while enabling the clocks */
-       W_SBREG(si, &sb->sbtmstatelow, (bits | SBTML_FGC | SBTML_CLK | rej | SBTML_RESET));
+       W_SBREG(si, &sb->sbtmstatelow,
+               (bits | SBTML_FGC | SBTML_CLK | rej | SBTML_RESET));
        dummy = R_SBREG(si, &sb->sbtmstatelow);
        OSL_DELAY(10);
 
@@ -1561,50 +2104,43 @@ sb_core_disable(sb_t *sbh, uint32 bits)
        if (R_SBREG(si, &sb->sbidlow) & SBIDL_INIT)
                AND_SBREG(si, &sb->sbimstate, ~SBIM_RJ);
 
-disable:
+      disable:
        /* leave reset and reject asserted */
        W_SBREG(si, &sb->sbtmstatelow, (bits | rej | SBTML_RESET));
        OSL_DELAY(1);
 }
 
 /* set chip watchdog reset timer to fire in 'ticks' backplane cycles */
-void
-sb_watchdog(sb_t *sbh, uint ticks)
+void sb_watchdog(sb_t * sbh, uint ticks)
 {
        sb_info_t *si = SB_INFO(sbh);
 
-       /* make sure we come up in fast clock mode */
-       sb_clkctl_clk(sbh, CLK_FAST);
+       /* make sure we come up in fast clock mode; or if clearing, clear clock */
+       if (ticks)
+               sb_clkctl_clk(sbh, CLK_FAST);
+       else
+               sb_clkctl_clk(sbh, CLK_DYNAMIC);
+
+       if (sbh->chip == BCM4328_CHIP_ID && ticks != 0)
+               sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, min_res_mask),
+                          PMURES_BIT(RES4328_ROM_SWITCH),
+                          PMURES_BIT(RES4328_ROM_SWITCH));
 
        /* instant NMI */
        switch (si->gpioid) {
        case SB_CC:
-#ifdef __mips__
-               if (sb_chip(sbh) == BCM4785_CHIP_ID && ticks <= 1)
-                       MTC0(C0_BROADCOM, 4, (1 << 22));
-#endif /* __mips__ */
-               sb_corereg(si, 0, OFFSETOF(chipcregs_t, watchdog), ~0, ticks);
-#ifdef __mips__
-               if (sb_chip(sbh) == BCM4785_CHIP_ID && ticks <= 1) {
-                       __asm__ __volatile__ (
-                               ".set\tmips3\n\t"
-                               "sync\n\t"
-                               "wait\n\t"
-                               ".set\tmips0"
-                       );
-                       while (1);
-               }
-#endif /* __mips__ */
+               sb_corereg(sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, watchdog), ~0,
+                          ticks);
                break;
        case SB_EXTIF:
-               sb_corereg(si, si->gpioidx, OFFSETOF(extifregs_t, watchdog), ~0, ticks);
+               sb_corereg(sbh, si->gpioidx, OFFSETOF(extifregs_t, watchdog),
+                          ~0, ticks);
                break;
        }
 }
 
 /* initialize the pcmcia core */
-void
-sb_pcmcia_init(sb_t *sbh)
+void sb_pcmcia_init(sb_t * sbh)
 {
        sb_info_t *si;
        uint8 cor = 0;
@@ -1618,21 +2154,120 @@ sb_pcmcia_init(sb_t *sbh)
 
 }
 
+void BCMINITFN(sb_pci_up) (sb_t * sbh) {
+       sb_info_t *si = SB_INFO(sbh);
+       if (si->gpioid == SB_EXTIF)
+               return;
+
+       /* if not pci bus, we're done */
+       if (BUSTYPE(si->sb.bustype) != PCI_BUS)
+               return;
+
+       if (FORCEHT_WAR32414(si))
+               sb_war32414_forceHT(sbh, 1);
+
+       if (PCIE_ASPMWARS(si) || si->sb.pr42780)
+               sb_pcieclkreq(sbh, 1, 0);
+
+       if (PCIE(si) &&
+           (((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev == 2)) ||
+            ((si->sb.chip == BCM4312_CHIP_ID) && (si->sb.chiprev == 0))))
+               sb_set_initiator_to((void *)si, 0x3,
+                                   sb_findcoreidx((void *)si, SB_D11, 0));
+}
+
+/* Unconfigure and/or apply various WARs when system is going to sleep mode */
+void BCMUNINITFN(sb_pci_sleep) (sb_t * sbh) {
+       sb_info_t *si = SB_INFO(sbh);
+       if (si->gpioid == SB_EXTIF)
+               return;
+       uint32 w;
+
+       /* if not pci bus, we're done */
+       if (!PCIE(si) || !PCIE_ASPMWARS(si))
+               return;
+
+       w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+                               sizeof(uint32));
+       w &= ~PCIE_CAP_LCREG_ASPML1;
+       OSL_PCI_WRITE_CONFIG(si->osh, si->pciecap_lcreg_offset, sizeof(uint32),
+                            w);
+}
+
+/* Unconfigure and/or apply various WARs when going down */
+void BCMINITFN(sb_pci_down) (sb_t * sbh) {
+       sb_info_t *si = SB_INFO(sbh);
+       if (si->gpioid == SB_EXTIF)
+               return;
+
+       /* if not pci bus, we're done */
+       if (BUSTYPE(si->sb.bustype) != PCI_BUS)
+               return;
+
+       if (FORCEHT_WAR32414(si))
+               sb_war32414_forceHT(sbh, 0);
+
+       if (si->pr42767_war) {
+               sb_pcieclkreq(sbh, 1, 1);
+               si->pr42767_war = FALSE;
+       } else if (si->sb.pr42780) {
+               sb_pcieclkreq(sbh, 1, 1);
+       }
+}
+
+static void BCMINITFN(sb_war42767_clkreq) (sb_t * sbh) {
+       sbpcieregs_t *pcieregs;
+       uint16 val16, *reg16;
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       /* if not pcie bus, we're done */
+       if (!PCIE(si) || !PCIE_ASPMWARS(si))
+               return;
+
+       pcieregs = (sbpcieregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
+       reg16 = &pcieregs->sprom[SRSH_CLKREQ_OFFSET];
+       val16 = R_REG(si->osh, reg16);
+       /* if clockreq is not advertized advertize it */
+       if (!si->pcie_war_ovr) {
+               val16 |= SRSH_CLKREQ_ENB;
+               si->pr42767_war = TRUE;
+
+               si->sb.pr42780 = TRUE;
+       } else
+               val16 &= ~SRSH_CLKREQ_ENB;
+       W_REG(si->osh, reg16, val16);
+}
+
+static void BCMINITFN(sb_war42767) (sb_t * sbh) {
+       uint32 w = 0;
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+
+       /* if not pcie bus, we're done */
+       if (!PCIE(si) || !PCIE_ASPMWARS(si))
+               return;
+
+       sb_pcie_mdioread(si, MDIODATA_DEV_PLL, SERDES_PLL_CTRL, &w);
+       if (w & PLL_CTRL_FREQDET_EN) {
+               w &= ~PLL_CTRL_FREQDET_EN;
+               sb_pcie_mdiowrite(si, MDIODATA_DEV_PLL, SERDES_PLL_CTRL, w);
+       }
+}
 
 /*
  * Configure the pci core for pci client (NIC) action
  * coremask is the bitvec of cores by index to be enabled.
  */
-void
-BCMINITFN(sb_pci_setup)(sb_t *sbh, uint coremask)
-{
+void BCMINITFN(sb_pci_setup) (sb_t * sbh, uint coremask) {
        sb_info_t *si;
        sbconfig_t *sb;
        sbpciregs_t *pciregs;
        uint32 sbflag;
        uint32 w;
        uint idx;
-       int reg_val;
 
        si = SB_INFO(sbh);
 
@@ -1652,7 +2287,7 @@ BCMINITFN(sb_pci_setup)(sb_t *sbh, uint coremask)
        sbflag = R_SBREG(si, &sb->sbtpsflag) & SBTPS_NUM0_MASK;
 
        /* switch over to pci core */
-       pciregs = (sbpciregs_t*) sb_setcoreidx(sbh, si->sb.buscoreidx);
+       pciregs = (sbpciregs_t *) sb_setcoreidx(sbh, si->sb.buscoreidx);
        sb = REGS2SB(pciregs);
 
        /*
@@ -1670,45 +2305,69 @@ BCMINITFN(sb_pci_setup)(sb_t *sbh, uint coremask)
        }
 
        if (PCI(si)) {
-               OR_REG(si->osh, &pciregs->sbtopci2, (SBTOPCI_PREF|SBTOPCI_BURST));
+               OR_REG(si->osh, &pciregs->sbtopci2,
+                      (SBTOPCI_PREF | SBTOPCI_BURST));
                if (si->sb.buscorerev >= 11)
-                       OR_REG(si->osh, &pciregs->sbtopci2, SBTOPCI_RC_READMULTI);
+                       OR_REG(si->osh, &pciregs->sbtopci2,
+                              SBTOPCI_RC_READMULTI);
                if (si->sb.buscorerev < 5) {
-                       SET_SBREG(si, &sb->sbimconfiglow, SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
-                               (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
+                       SET_SBREG(si, &sb->sbimconfiglow,
+                                 SBIMCL_RTO_MASK | SBIMCL_STO_MASK,
+                                 (0x3 << SBIMCL_RTO_SHIFT) | 0x2);
                        sb_commit(sbh);
                }
        }
 
-#ifdef PCIE_SUPPOER
        /* PCIE workarounds */
        if (PCIE(si)) {
                if ((si->sb.buscorerev == 0) || (si->sb.buscorerev == 1)) {
-                       reg_val = sb_pcie_readreg((void *)sbh, (void *)PCIE_PCIEREGS,
-                               PCIE_TLP_WORKAROUNDSREG);
-                       reg_val |= 0x8;
-                       sb_pcie_writereg((void *)sbh, (void *)PCIE_PCIEREGS,
-                               PCIE_TLP_WORKAROUNDSREG, reg_val);
+                       w = sb_pcie_readreg((void *)(uintptr) sbh,
+                                           (void *)(uintptr) PCIE_PCIEREGS,
+                                           PCIE_TLP_WORKAROUNDSREG);
+                       w |= 0x8;
+                       sb_pcie_writereg((void *)(uintptr) sbh,
+                                        (void *)(uintptr) PCIE_PCIEREGS,
+                                        PCIE_TLP_WORKAROUNDSREG, w);
                }
 
                if (si->sb.buscorerev == 1) {
-                       reg_val = sb_pcie_readreg((void *)sbh, (void *)PCIE_PCIEREGS,
-                               PCIE_DLLP_LCREG);
-                       reg_val |= (0x40);
-                       sb_pcie_writereg(sbh, (void *)PCIE_PCIEREGS, PCIE_DLLP_LCREG, reg_val);
+                       w = sb_pcie_readreg((void *)(uintptr) sbh,
+                                           (void *)(uintptr) PCIE_PCIEREGS,
+                                           PCIE_DLLP_LCREG);
+                       w |= (0x40);
+                       sb_pcie_writereg((void *)(uintptr) sbh,
+                                        (void *)(uintptr) PCIE_PCIEREGS,
+                                        PCIE_DLLP_LCREG, w);
                }
 
                if (si->sb.buscorerev == 0)
                        sb_war30841(si);
+
+               if ((si->sb.buscorerev >= 3) && (si->sb.buscorerev <= 5)) {
+                       w = sb_pcie_readreg((void *)(uintptr) sbh,
+                                           (void *)(uintptr) PCIE_PCIEREGS,
+                                           PCIE_DLLP_PMTHRESHREG);
+                       w &= ~(PCIE_L1THRESHOLDTIME_MASK);
+                       w |= (PCIE_L1THRESHOLD_WARVAL <<
+                             PCIE_L1THRESHOLDTIME_SHIFT);
+                       sb_pcie_writereg((void *)(uintptr) sbh,
+                                        (void *)(uintptr) PCIE_PCIEREGS,
+                                        PCIE_DLLP_PMTHRESHREG, w);
+
+                       sb_war43448(sbh);
+
+                       sb_war42767(sbh);
+
+                       sb_war43448_aspm(sbh);
+                       sb_war42767_clkreq(sbh);
+               }
        }
-#endif
 
        /* switch back to previous core */
        sb_setcoreidx(sbh, idx);
 }
 
-uint32
-sb_base(uint32 admatch)
+uint32 sb_base(uint32 admatch)
 {
        uint32 base;
        uint type;
@@ -1731,8 +2390,7 @@ sb_base(uint32 admatch)
        return (base);
 }
 
-uint32
-sb_size(uint32 admatch)
+uint32 sb_size(uint32 admatch)
 {
        uint32 size;
        uint type;
@@ -1743,21 +2401,26 @@ sb_size(uint32 admatch)
        size = 0;
 
        if (type == 0) {
-               size = 1 << (((admatch & SBAM_ADINT0_MASK) >> SBAM_ADINT0_SHIFT) + 1);
+               size =
+                   1 << (((admatch & SBAM_ADINT0_MASK) >> SBAM_ADINT0_SHIFT) +
+                         1);
        } else if (type == 1) {
                ASSERT(!(admatch & SBAM_ADNEG));        /* neg not supported */
-               size = 1 << (((admatch & SBAM_ADINT1_MASK) >> SBAM_ADINT1_SHIFT) + 1);
+               size =
+                   1 << (((admatch & SBAM_ADINT1_MASK) >> SBAM_ADINT1_SHIFT) +
+                         1);
        } else if (type == 2) {
                ASSERT(!(admatch & SBAM_ADNEG));        /* neg not supported */
-               size = 1 << (((admatch & SBAM_ADINT2_MASK) >> SBAM_ADINT2_SHIFT) + 1);
+               size =
+                   1 << (((admatch & SBAM_ADINT2_MASK) >> SBAM_ADINT2_SHIFT) +
+                         1);
        }
 
        return (size);
 }
 
 /* return the core-type instantiation # of the current core */
-uint
-sb_coreunit(sb_t *sbh)
+uint sb_coreunit(sb_t * sbh)
 {
        sb_info_t *si;
        uint idx;
@@ -1781,24 +2444,27 @@ sb_coreunit(sb_t *sbh)
        return (coreunit);
 }
 
-static INLINE uint32
-factor6(uint32 x)
-{
+static uint32 BCMINITFN(factor6) (uint32 x) {
        switch (x) {
-       case CC_F6_2:   return 2;
-       case CC_F6_3:   return 3;
-       case CC_F6_4:   return 4;
-       case CC_F6_5:   return 5;
-       case CC_F6_6:   return 6;
-       case CC_F6_7:   return 7;
-       default:        return 0;
+       case CC_F6_2:
+               return 2;
+       case CC_F6_3:
+               return 3;
+       case CC_F6_4:
+               return 4;
+       case CC_F6_5:
+               return 5;
+       case CC_F6_6:
+               return 6;
+       case CC_F6_7:
+               return 7;
+       default:
+               return 0;
        }
 }
 
 /* calculate the speed the SB would run at given a set of clockcontrol values */
-uint32
-sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
-{
+uint32 BCMINITFN(sb_clock_rate) (uint32 pll_type, uint32 n, uint32 m) {
        uint32 n1, n2, clock, m1, m2, m3, mc;
 
        n1 = n & CN_N1_MASK;
@@ -1810,9 +2476,8 @@ sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
                else
                        return CC_T6_M0;
        } else if ((pll_type == PLL_TYPE1) ||
-                  (pll_type == PLL_TYPE3) ||
-                  (pll_type == PLL_TYPE4) ||
-                  (pll_type == PLL_TYPE7)) {
+                  (pll_type == PLL_TYPE3) ||
+                  (pll_type == PLL_TYPE4) || (pll_type == PLL_TYPE7)) {
                n1 = factor6(n1);
                n2 += CC_F5_BIAS;
        } else if (pll_type == PLL_TYPE2) {
@@ -1825,9 +2490,8 @@ sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
        } else
                ASSERT(0);
        /* PLL types 3 and 7 use BASE2 (25Mhz) */
-       if ((pll_type == PLL_TYPE3) ||
-           (pll_type == PLL_TYPE7)) {
-               clock =  CC_CLOCK_BASE2 * n1 * n2;
+       if ((pll_type == PLL_TYPE3) || (pll_type == PLL_TYPE7)) {
+               clock = CC_CLOCK_BASE2 * n1 * n2;
        } else
                clock = CC_CLOCK_BASE1 * n1 * n2;
 
@@ -1841,8 +2505,7 @@ sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
 
        if ((pll_type == PLL_TYPE1) ||
            (pll_type == PLL_TYPE3) ||
-           (pll_type == PLL_TYPE4) ||
-           (pll_type == PLL_TYPE7)) {
+           (pll_type == PLL_TYPE4) || (pll_type == PLL_TYPE7)) {
                m1 = factor6(m1);
                if ((pll_type == PLL_TYPE1) || (pll_type == PLL_TYPE3))
                        m2 += CC_F5_BIAS;
@@ -1851,12 +2514,18 @@ sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
                m3 = factor6(m3);
 
                switch (mc) {
-               case CC_MC_BYPASS:      return (clock);
-               case CC_MC_M1:          return (clock / m1);
-               case CC_MC_M1M2:        return (clock / (m1 * m2));
-               case CC_MC_M1M2M3:      return (clock / (m1 * m2 * m3));
-               case CC_MC_M1M3:        return (clock / (m1 * m3));
-               default:                return (0);
+               case CC_MC_BYPASS:
+                       return (clock);
+               case CC_MC_M1:
+                       return (clock / m1);
+               case CC_MC_M1M2:
+                       return (clock / (m1 * m2));
+               case CC_MC_M1M2M3:
+                       return (clock / (m1 * m2 * m3));
+               case CC_MC_M1M3:
+                       return (clock / (m1 * m3));
+               default:
+                       return (0);
                }
        } else {
                ASSERT(pll_type == PLL_TYPE2);
@@ -1880,15 +2549,13 @@ sb_clock_rate(uint32 pll_type, uint32 n, uint32 m)
 }
 
 /* returns the current speed the SB is running at */
-uint32
-sb_clock(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_clock) (sb_t * sbh) {
        sb_info_t *si;
        extifregs_t *eir;
        chipcregs_t *cc;
        uint32 n, m;
        uint idx;
-       uint32 pll_type, rate;
+       uint32 cap, pll_type, rate;
        uint intr_val = 0;
 
        si = SB_INFO(sbh);
@@ -1902,7 +2569,24 @@ sb_clock(sb_t *sbh)
                n = R_REG(si->osh, &eir->clockcontrol_n);
                m = R_REG(si->osh, &eir->clockcontrol_sb);
        } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-               pll_type = R_REG(si->osh, &cc->capabilities) & CAP_PLL_MASK;
+
+               cap = R_REG(si->osh, &cc->capabilities);
+
+               if (cap & CC_CAP_PMU) {
+
+                       if (sb_chip(sbh) == BCM5354_CHIP_ID) {
+                               /* 5354 has a constant sb clock of 120MHz */
+                               rate = 120000000;
+                               goto end;
+                       } else
+                       if (sb_chip(sbh) == BCM4328_CHIP_ID) {
+                               rate = 80000000;
+                               goto end;
+                       } else
+                               ASSERT(0);
+               }
+
+               pll_type = cap & CC_CAP_PLL_MASK;
                if (pll_type == PLL_NONE) {
                        INTR_RESTORE(si, intr_val);
                        return 80000000;
@@ -1910,7 +2594,8 @@ sb_clock(sb_t *sbh)
                n = R_REG(si->osh, &cc->clockcontrol_n);
                if (pll_type == PLL_TYPE6)
                        m = R_REG(si->osh, &cc->clockcontrol_m3);
-               else if ((pll_type == PLL_TYPE3) && !(BCMINIT(sb_chip)(sbh) == 0x5365))
+               else if (pll_type == PLL_TYPE3
+                        && !(BCMINIT(sb_chip) (sbh) == 0x5365))
                        m = R_REG(si->osh, &cc->clockcontrol_m2);
                else
                        m = R_REG(si->osh, &cc->clockcontrol_sb);
@@ -1920,7 +2605,7 @@ sb_clock(sb_t *sbh)
        }
 
        /* calculate rate */
-       if (BCMINIT(sb_chip)(sbh) == 0x5365)
+       if (BCMINIT(sb_chip) (sbh) == 0x5365)
                rate = 100000000;
        else {
                rate = sb_clock_rate(pll_type, n, m);
@@ -1929,6 +2614,7 @@ sb_clock(sb_t *sbh)
                        rate = rate / 2;
        }
 
+      end:
        /* switch back to previous core */
        sb_setcoreidx(sbh, idx);
 
@@ -1937,9 +2623,17 @@ sb_clock(sb_t *sbh)
        return rate;
 }
 
+uint32 BCMINITFN(sb_alp_clock) (sb_t * sbh) {
+       uint32 clock = ALP_CLOCK;
+
+       if (sbh->cccaps & CC_CAP_PMU)
+               clock = sb_pmu_alp_clock(sbh, sb_osh(sbh));
+
+       return clock;
+}
+
 /* change logical "focus" to the gpio core for optimized access */
-void*
-sb_gpiosetcore(sb_t *sbh)
+void *sb_gpiosetcore(sb_t * sbh)
 {
        sb_info_t *si;
 
@@ -1949,8 +2643,7 @@ sb_gpiosetcore(sb_t *sbh)
 }
 
 /* mask&set gpiocontrol bits */
-uint32
-sb_gpiocontrol(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiocontrol(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
 {
        sb_info_t *si;
        uint regoff;
@@ -1958,12 +2651,13 @@ sb_gpiocontrol(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
        si = SB_INFO(sbh);
        regoff = 0;
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
-       /* gpios could be shared on router platforms */
-       if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+       /* gpios could be shared on router platforms
+        * ignore reservation if it's high priority (e.g., test apps)
+        */
+       if ((priority != GPIO_HI_PRIORITY) &&
+           (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
                mask = priority ? (sb_gpioreservation & mask) :
-                       ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+                   ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
                val &= mask;
        }
 
@@ -1980,12 +2674,11 @@ sb_gpiocontrol(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
                return (0);
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+       return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
 }
 
 /* mask&set gpio output enable bits */
-uint32
-sb_gpioouten(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpioouten(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
 {
        sb_info_t *si;
        uint regoff;
@@ -1993,12 +2686,13 @@ sb_gpioouten(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
        si = SB_INFO(sbh);
        regoff = 0;
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
-       /* gpios could be shared on router platforms */
-       if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+       /* gpios could be shared on router platforms
+        * ignore reservation if it's high priority (e.g., test apps)
+        */
+       if ((priority != GPIO_HI_PRIORITY) &&
+           (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
                mask = priority ? (sb_gpioreservation & mask) :
-                       ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+                   ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
                val &= mask;
        }
 
@@ -2016,12 +2710,11 @@ sb_gpioouten(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
                break;
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+       return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
 }
 
 /* mask&set gpio output bits */
-uint32
-sb_gpioout(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpioout(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
 {
        sb_info_t *si;
        uint regoff;
@@ -2029,12 +2722,13 @@ sb_gpioout(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
        si = SB_INFO(sbh);
        regoff = 0;
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
-       /* gpios could be shared on router platforms */
-       if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
+       /* gpios could be shared on router platforms
+        * ignore reservation if it's high priority (e.g., test apps)
+        */
+       if ((priority != GPIO_HI_PRIORITY) &&
+           (BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
                mask = priority ? (sb_gpioreservation & mask) :
-                       ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+                   ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
                val &= mask;
        }
 
@@ -2052,29 +2746,27 @@ sb_gpioout(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
                break;
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+       return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
 }
 
 /* reserve one gpio */
-uint32
-sb_gpioreserve(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
+uint32 sb_gpioreserve(sb_t * sbh, uint32 gpio_bitmask, uint8 priority)
 {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
        /* only cores on SB_BUS share GPIO's and only applcation users need to
         * reserve/release GPIO
         */
-       if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority))  {
+       if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
                ASSERT((BUSTYPE(si->sb.bustype) == SB_BUS) && (priority));
                return -1;
        }
        /* make sure only one bit is set */
        if ((!gpio_bitmask) || ((gpio_bitmask) & (gpio_bitmask - 1))) {
-               ASSERT((gpio_bitmask) && !((gpio_bitmask) & (gpio_bitmask - 1)));
+               ASSERT((gpio_bitmask)
+                      && !((gpio_bitmask) & (gpio_bitmask - 1)));
                return -1;
        }
 
@@ -2093,25 +2785,23 @@ sb_gpioreserve(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
  * persists till some one overwrites it
 */
 
-uint32
-sb_gpiorelease(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
+uint32 sb_gpiorelease(sb_t * sbh, uint32 gpio_bitmask, uint8 priority)
 {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
        /* only cores on SB_BUS share GPIO's and only applcation users need to
         * reserve/release GPIO
         */
-       if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority))  {
+       if ((BUSTYPE(si->sb.bustype) != SB_BUS) || (!priority)) {
                ASSERT((BUSTYPE(si->sb.bustype) == SB_BUS) && (priority));
                return -1;
        }
        /* make sure only one bit is set */
        if ((!gpio_bitmask) || ((gpio_bitmask) & (gpio_bitmask - 1))) {
-               ASSERT((gpio_bitmask) && !((gpio_bitmask) & (gpio_bitmask - 1)));
+               ASSERT((gpio_bitmask)
+                      && !((gpio_bitmask) & (gpio_bitmask - 1)));
                return -1;
        }
 
@@ -2126,8 +2816,7 @@ sb_gpiorelease(sb_t *sbh, uint32 gpio_bitmask, uint8 priority)
 }
 
 /* return the current gpioin register value */
-uint32
-sb_gpioin(sb_t *sbh)
+uint32 sb_gpioin(sb_t * sbh)
 {
        sb_info_t *si;
        uint regoff;
@@ -2149,12 +2838,11 @@ sb_gpioin(sb_t *sbh)
                break;
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, 0, 0));
+       return (sb_corereg(sbh, si->gpioidx, regoff, 0, 0));
 }
 
 /* mask&set gpio interrupt polarity bits */
-uint32
-sb_gpiointpolarity(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiointpolarity(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
 {
        sb_info_t *si;
        uint regoff;
@@ -2162,12 +2850,10 @@ sb_gpiointpolarity(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
        si = SB_INFO(sbh);
        regoff = 0;
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
        /* gpios could be shared on router platforms */
        if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
                mask = priority ? (sb_gpioreservation & mask) :
-                       ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+                   ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
                val &= mask;
        }
 
@@ -2186,12 +2872,11 @@ sb_gpiointpolarity(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
                break;
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+       return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
 }
 
 /* mask&set gpio interrupt mask bits */
-uint32
-sb_gpiointmask(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
+uint32 sb_gpiointmask(sb_t * sbh, uint32 mask, uint32 val, uint8 priority)
 {
        sb_info_t *si;
        uint regoff;
@@ -2199,12 +2884,10 @@ sb_gpiointmask(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
        si = SB_INFO(sbh);
        regoff = 0;
 
-       priority = GPIO_DRV_PRIORITY; /* compatibility hack */
-
        /* gpios could be shared on router platforms */
        if ((BUSTYPE(si->sb.bustype) == SB_BUS) && (val || mask)) {
                mask = priority ? (sb_gpioreservation & mask) :
-                       ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
+                   ((sb_gpioreservation | mask) & ~(sb_gpioreservation));
                val &= mask;
        }
 
@@ -2223,12 +2906,11 @@ sb_gpiointmask(sb_t *sbh, uint32 mask, uint32 val, uint8 priority)
                break;
        }
 
-       return (sb_corereg(si, si->gpioidx, regoff, mask, val));
+       return (sb_corereg(sbh, si->gpioidx, regoff, mask, val));
 }
 
 /* assign the gpio to an led */
-uint32
-sb_gpioled(sb_t *sbh, uint32 mask, uint32 val)
+uint32 sb_gpioled(sb_t * sbh, uint32 mask, uint32 val)
 {
        sb_info_t *si;
 
@@ -2237,12 +2919,13 @@ sb_gpioled(sb_t *sbh, uint32 mask, uint32 val)
                return -1;
 
        /* gpio led powersave reg */
-       return (sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimeroutmask), mask, val));
+       return (sb_corereg
+               (sbh, SB_CC_IDX, OFFSETOF(chipcregs_t, gpiotimeroutmask), mask,
+                val));
 }
 
-/* mask & set gpio timer val */
-uint32
-sb_gpiotimerval(sb_t *sbh, uint32 mask, uint32 gpiotimerval)
+/* mask&set gpio timer val */
+uint32 sb_gpiotimerval(sb_t * sbh, uint32 mask, uint32 gpiotimerval)
 {
        sb_info_t *si;
        si = SB_INFO(sbh);
@@ -2250,79 +2933,319 @@ sb_gpiotimerval(sb_t *sbh, uint32 mask, uint32 gpiotimerval)
        if (si->sb.ccrev < 16)
                return -1;
 
-       return (sb_corereg(si, 0, OFFSETOF(chipcregs_t, gpiotimerval), mask, gpiotimerval));
+       return (sb_corereg(sbh, SB_CC_IDX,
+                          OFFSETOF(chipcregs_t, gpiotimerval), mask,
+                          gpiotimerval));
 }
 
-
-/* return the slow clock source - LPO, XTAL, or PCI */
-static uint
-sb_slowclk_src(sb_info_t *si)
+uint32 sb_gpiopull(sb_t * sbh, bool updown, uint32 mask, uint32 val)
 {
-       chipcregs_t *cc;
-
+       sb_info_t *si;
+       uint offs;
 
-       ASSERT(sb_coreid(&si->sb) == SB_CC);
+       si = SB_INFO(sbh);
+       if (si->sb.ccrev < 20)
+               return -1;
 
-       if (si->sb.ccrev < 6) {
-               if ((BUSTYPE(si->sb.bustype) == PCI_BUS) &&
-                   (OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32)) &
-                    PCI_CFG_GPIO_SCS))
-                       return (SCC_SS_PCI);
-               else
-                       return (SCC_SS_XTAL);
-       } else if (si->sb.ccrev < 10) {
-               cc = (chipcregs_t*) sb_setcoreidx(&si->sb, si->curidx);
-               return (R_REG(si->osh, &cc->slow_clk_ctl) & SCC_SS_MASK);
-       } else  /* Insta-clock */
-               return (SCC_SS_XTAL);
+       offs =
+           (updown ? OFFSETOF(chipcregs_t, gpiopulldown) :
+            OFFSETOF(chipcregs_t, gpiopullup));
+       return (sb_corereg(sbh, SB_CC_IDX, offs, mask, val));
 }
 
-/* return the ILP (slowclock) min or max frequency */
-static uint
-sb_slowclk_freq(sb_info_t *si, bool max)
+uint32 sb_gpioevent(sb_t * sbh, uint regtype, uint32 mask, uint32 val)
 {
-       chipcregs_t *cc;
-       uint32 slowclk;
-       uint div;
+       sb_info_t *si;
+       uint offs;
 
+       si = SB_INFO(sbh);
+       if (si->sb.ccrev < 11)
+               return -1;
 
-       ASSERT(sb_coreid(&si->sb) == SB_CC);
+       if (regtype == GPIO_REGEVT)
+               offs = OFFSETOF(chipcregs_t, gpioevent);
+       else if (regtype == GPIO_REGEVT_INTMSK)
+               offs = OFFSETOF(chipcregs_t, gpioeventintmask);
+       else if (regtype == GPIO_REGEVT_INTPOL)
+               offs = OFFSETOF(chipcregs_t, gpioeventintpolarity);
+       else
+               return -1;
 
-       cc = (chipcregs_t*) sb_setcoreidx(&si->sb, si->curidx);
+       return (sb_corereg(sbh, SB_CC_IDX, offs, mask, val));
+}
 
-       /* shouldn't be here unless we've established the chip has dynamic clk control */
-       ASSERT(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL);
+void *BCMINITFN(sb_gpio_handler_register) (sb_t * sbh, uint32 event,
+                                          bool level, gpio_handler_t cb,
+                                          void *arg) {
+       sb_info_t *si;
+       gpioh_item_t *gi;
 
-       slowclk = sb_slowclk_src(si);
-       if (si->sb.ccrev < 6) {
-               if (slowclk == SCC_SS_PCI)
-                       return (max? (PCIMAXFREQ/64) : (PCIMINFREQ/64));
-               else
-                       return (max? (XTALMAXFREQ/32) : (XTALMINFREQ/32));
-       } else if (si->sb.ccrev < 10) {
-               div = 4 * (((R_REG(si->osh, &cc->slow_clk_ctl) & SCC_CD_MASK) >> SCC_CD_SHIFT) + 1);
-               if (slowclk == SCC_SS_LPO)
-                       return (max? LPOMAXFREQ : LPOMINFREQ);
-               else if (slowclk == SCC_SS_XTAL)
-                       return (max? (XTALMAXFREQ/div) : (XTALMINFREQ/div));
-               else if (slowclk == SCC_SS_PCI)
-                       return (max? (PCIMAXFREQ/div) : (PCIMINFREQ/div));
-               else
-                       ASSERT(0);
-       } else {
-               /* Chipc rev 10 is InstaClock */
-               div = R_REG(si->osh, &cc->system_clk_ctl) >> SYCC_CD_SHIFT;
-               div = 4 * (div + 1);
-               return (max ? XTALMAXFREQ : (XTALMINFREQ/div));
-       }
-       return (0);
-}
+       ASSERT(event);
+       ASSERT(cb);
 
-static void
-BCMINITFN(sb_clkctl_setdelay)(sb_info_t *si, void *chipcregs)
-{
-       chipcregs_t * cc;
-       uint slowmaxfreq, pll_delay, slowclk;
+       si = SB_INFO(sbh);
+       if (si->sb.ccrev < 11)
+               return NULL;
+
+       if ((gi = MALLOC(si->osh, sizeof(gpioh_item_t))) == NULL)
+               return NULL;
+
+       bzero(gi, sizeof(gpioh_item_t));
+       gi->event = event;
+       gi->handler = cb;
+       gi->arg = arg;
+       gi->level = level;
+
+       gi->next = si->gpioh_head;
+       si->gpioh_head = gi;
+
+       return (void *)(gi);
+}
+
+void BCMINITFN(sb_gpio_handler_unregister) (sb_t * sbh, void *gpioh) {
+       sb_info_t *si;
+       gpioh_item_t *p, *n;
+
+       si = SB_INFO(sbh);
+       if (si->sb.ccrev < 11)
+               return;
+
+       ASSERT(si->gpioh_head);
+       if ((void *)si->gpioh_head == gpioh) {
+               si->gpioh_head = si->gpioh_head->next;
+               MFREE(si->osh, gpioh, sizeof(gpioh_item_t));
+               return;
+       } else {
+               p = si->gpioh_head;
+               n = p->next;
+               while (n) {
+                       if ((void *)n == gpioh) {
+                               p->next = n->next;
+                               MFREE(si->osh, gpioh, sizeof(gpioh_item_t));
+                               return;
+                       }
+                       p = n;
+                       n = n->next;
+               }
+       }
+
+       ASSERT(0);              /* Not found in list */
+}
+
+void sb_gpio_handler_process(sb_t * sbh)
+{
+       sb_info_t *si;
+       gpioh_item_t *h;
+       uint32 status;
+       uint32 level = sb_gpioin(sbh);
+       uint32 edge = sb_gpioevent(sbh, GPIO_REGEVT, 0, 0);
+
+       si = SB_INFO(sbh);
+       for (h = si->gpioh_head; h != NULL; h = h->next) {
+               if (h->handler) {
+                       status = (h->level ? level : edge);
+
+                       if (status & h->event)
+                               h->handler(status, h->arg);
+               }
+       }
+
+       sb_gpioevent(sbh, GPIO_REGEVT, edge, edge);     /* clear edge-trigger status */
+}
+
+uint32 sb_gpio_int_enable(sb_t * sbh, bool enable)
+{
+       sb_info_t *si;
+       uint offs;
+
+       si = SB_INFO(sbh);
+       if (si->sb.ccrev < 11)
+               return -1;
+
+       offs = OFFSETOF(chipcregs_t, intmask);
+       return (sb_corereg
+               (sbh, SB_CC_IDX, offs, CI_GPIO, (enable ? CI_GPIO : 0)));
+}
+
+#ifdef BCMDBG
+void sb_dump(sb_t * sbh, struct bcmstrbuf *b)
+{
+       sb_info_t *si;
+       uint i;
+
+       si = SB_INFO(sbh);
+
+       bcm_bprintf(b,
+                   "si %p chip 0x%x chiprev 0x%x boardtype 0x%x boardvendor 0x%x bus %d\n",
+                   si, si->sb.chip, si->sb.chiprev, si->sb.boardtype,
+                   si->sb.boardvendor, si->sb.bustype);
+       bcm_bprintf(b, "osh %p curmap %p\n", si->osh, si->curmap);
+       bcm_bprintf(b,
+                   "sonicsrev %d ccrev %d buscoretype 0x%x buscorerev %d curidx %d\n",
+                   si->sb.sonicsrev, si->sb.ccrev, si->sb.buscoretype,
+                   si->sb.buscorerev, si->curidx);
+
+       bcm_bprintf(b, "forceHT %d ASPM overflowPR42780 %d pcie_polarity %d\n",
+                   si->sb.pr32414, si->sb.pr42780, si->pcie_polarity);
+
+       bcm_bprintf(b, "cores:  ");
+       for (i = 0; i < si->numcores; i++)
+               bcm_bprintf(b, "0x%x ", si->coreid[i]);
+       bcm_bprintf(b, "\n");
+}
+
+/* print interesting sbconfig registers */
+void sb_dumpregs(sb_t * sbh, struct bcmstrbuf *b)
+{
+       sb_info_t *si;
+       sbconfig_t *sb;
+       uint origidx;
+       uint curidx, i, intr_val = 0;
+
+       si = SB_INFO(sbh);
+       origidx = si->curidx;
+
+       INTR_OFF(si, intr_val);
+       curidx = si->curidx;
+
+       for (i = 0; i < si->numcores; i++) {
+               sb = REGS2SB(sb_setcoreidx(sbh, i));
+
+               bcm_bprintf(b, "core 0x%x: \n", si->coreid[i]);
+               bcm_bprintf(b,
+                           "sbtmstatelow 0x%x sbtmstatehigh 0x%x sbidhigh 0x%x "
+                           "sbimstate 0x%x\n sbimconfiglow 0x%x sbimconfighigh 0x%x\n",
+                           R_SBREG(si, &sb->sbtmstatelow), R_SBREG(si,
+                                                                   &sb->
+                                                                   sbtmstatehigh),
+                           R_SBREG(si, &sb->sbidhigh), R_SBREG(si,
+                                                               &sb->sbimstate),
+                           R_SBREG(si, &sb->sbimconfiglow), R_SBREG(si,
+                                                                    &sb->
+                                                                    sbimconfighigh));
+       }
+
+       sb_setcoreidx(sbh, origidx);
+       INTR_RESTORE(si, intr_val);
+}
+
+void sb_view(sb_t * sbh)
+{
+       sb_info_t *si;
+       sbconfig_t *sb;
+
+       si = SB_INFO(sbh);
+       sb = REGS2SB(si->curmap);
+
+       if (si->sb.sonicsrev > SONICS_2_2)
+               SB_ERROR(("sbimerrlog 0x%x sbimerrloga 0x%x\n",
+                         sb_corereg(sbh, sb_coreidx(&si->sb), SBIMERRLOG, 0,
+                                    0), sb_corereg(sbh, sb_coreidx(&si->sb),
+                                                   SBIMERRLOGA, 0, 0)));
+
+       SB_ERROR(("sbipsflag 0x%x sbtpsflag 0x%x sbtmerrloga 0x%x sbtmerrlog 0x%x\n", R_SBREG(si, &sb->sbipsflag), R_SBREG(si, &sb->sbtpsflag), R_SBREG(si, &sb->sbtmerrloga), R_SBREG(si, &sb->sbtmerrlog)));
+       SB_ERROR(("sbadmatch3 0x%x sbadmatch2 0x%x sbadmatch1 0x%x\n",
+                 R_SBREG(si, &sb->sbadmatch3), R_SBREG(si, &sb->sbadmatch2),
+                 R_SBREG(si, &sb->sbadmatch1)));
+       SB_ERROR(("sbimstate 0x%x sbintvec 0x%x sbtmstatelow 0x%x sbtmstatehigh 0x%x\n", R_SBREG(si, &sb->sbimstate), R_SBREG(si, &sb->sbintvec), R_SBREG(si, &sb->sbtmstatelow), R_SBREG(si, &sb->sbtmstatehigh)));
+       SB_ERROR(("sbbwa0 0x%x sbimconfiglow 0x%x sbimconfighigh 0x%x sbadmatch0 0x%x\n", R_SBREG(si, &sb->sbbwa0), R_SBREG(si, &sb->sbimconfiglow), R_SBREG(si, &sb->sbimconfighigh), R_SBREG(si, &sb->sbadmatch0)));
+       SB_ERROR(("sbtmconfiglow 0x%x sbtmconfighigh 0x%x sbbconfig 0x%x sbbstate 0x%x\n", R_SBREG(si, &sb->sbtmconfiglow), R_SBREG(si, &sb->sbtmconfighigh), R_SBREG(si, &sb->sbbconfig), R_SBREG(si, &sb->sbbstate)));
+       SB_ERROR(("sbactcnfg 0x%x sbflagst 0x%x sbidlow 0x%x sbidhigh 0x%x\n",
+                 R_SBREG(si, &sb->sbactcnfg), R_SBREG(si, &sb->sbflagst),
+                 R_SBREG(si, &sb->sbidlow), R_SBREG(si, &sb->sbidhigh)));
+}
+
+void sb_viewall(sb_t * sbh)
+{
+       sb_info_t *si;
+       uint curidx, i;
+       uint intr_val = 0;
+
+       si = SB_INFO(sbh);
+       curidx = si->curidx;
+
+       for (i = 0; i < si->numcores; i++) {
+               INTR_OFF(si, intr_val);
+               sb_setcoreidx(sbh, i);
+               sb_view(sbh);
+               INTR_RESTORE(si, intr_val);
+       }
+
+       sb_setcoreidx(sbh, curidx);
+}
+#endif /* BCMDBG */
+
+/* return the slow clock source - LPO, XTAL, or PCI */
+static uint sb_slowclk_src(sb_info_t * si)
+{
+       chipcregs_t *cc;
+
+       ASSERT(sb_coreid(&si->sb) == SB_CC);
+
+       if (si->sb.ccrev < 6) {
+               if ((BUSTYPE(si->sb.bustype) == PCI_BUS) &&
+                   (OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32))
+                    & PCI_CFG_GPIO_SCS))
+                       return (SCC_SS_PCI);
+               else
+                       return (SCC_SS_XTAL);
+       } else if (si->sb.ccrev < 10) {
+               cc = (chipcregs_t *) sb_setcoreidx(&si->sb, si->curidx);
+               return (R_REG(si->osh, &cc->slow_clk_ctl) & SCC_SS_MASK);
+       } else                  /* Insta-clock */
+               return (SCC_SS_XTAL);
+}
+
+/* return the ILP (slowclock) min or max frequency */
+static uint sb_slowclk_freq(sb_info_t * si, bool max_freq)
+{
+       chipcregs_t *cc;
+       uint32 slowclk;
+       uint div;
+
+       ASSERT(sb_coreid(&si->sb) == SB_CC);
+
+       cc = (chipcregs_t *) sb_setcoreidx(&si->sb, si->curidx);
+
+       /* shouldn't be here unless we've established the chip has dynamic clk control */
+       ASSERT(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL);
+
+       slowclk = sb_slowclk_src(si);
+       if (si->sb.ccrev < 6) {
+               if (slowclk == SCC_SS_PCI)
+                       return (max_freq ? (PCIMAXFREQ / 64)
+                               : (PCIMINFREQ / 64));
+               else
+                       return (max_freq ? (XTALMAXFREQ / 32)
+                               : (XTALMINFREQ / 32));
+       } else if (si->sb.ccrev < 10) {
+               div =
+                   4 *
+                   (((R_REG(si->osh, &cc->slow_clk_ctl) & SCC_CD_MASK) >>
+                     SCC_CD_SHIFT)
+                    + 1);
+               if (slowclk == SCC_SS_LPO)
+                       return (max_freq ? LPOMAXFREQ : LPOMINFREQ);
+               else if (slowclk == SCC_SS_XTAL)
+                       return (max_freq ? (XTALMAXFREQ / div)
+                               : (XTALMINFREQ / div));
+               else if (slowclk == SCC_SS_PCI)
+                       return (max_freq ? (PCIMAXFREQ / div)
+                               : (PCIMINFREQ / div));
+               else
+                       ASSERT(0);
+       } else {
+               /* Chipc rev 10 is InstaClock */
+               div = R_REG(si->osh, &cc->system_clk_ctl) >> SYCC_CD_SHIFT;
+               div = 4 * (div + 1);
+               return (max_freq ? XTALMAXFREQ : (XTALMINFREQ / div));
+       }
+       return (0);
+}
+
+static void BCMINITFN(sb_clkctl_setdelay) (sb_info_t * si, void *chipcregs) {
+       chipcregs_t *cc;
+       uint slowmaxfreq, pll_delay, slowclk;
        uint pll_on_delay, fref_sel_delay;
 
        pll_delay = PLL_DELAY;
@@ -2341,15 +3264,13 @@ BCMINITFN(sb_clkctl_setdelay)(sb_info_t *si, void *chipcregs)
        pll_on_delay = ((slowmaxfreq * pll_delay) + 999999) / 1000000;
        fref_sel_delay = ((slowmaxfreq * FREF_DELAY) + 999999) / 1000000;
 
-       cc = (chipcregs_t *)chipcregs;
+       cc = (chipcregs_t *) chipcregs;
        W_REG(si->osh, &cc->pll_on_delay, pll_on_delay);
        W_REG(si->osh, &cc->fref_sel_delay, fref_sel_delay);
 }
 
 /* initialize power control delay registers */
-void
-BCMINITFN(sb_clkctl_init)(sb_t *sbh)
-{
+void BCMINITFN(sb_clkctl_init) (sb_t * sbh) {
        sb_info_t *si;
        uint origidx;
        chipcregs_t *cc;
@@ -2358,31 +3279,30 @@ BCMINITFN(sb_clkctl_init)(sb_t *sbh)
 
        origidx = si->curidx;
 
-       if ((cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0)) == NULL)
+       if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL)
                return;
 
        if ((si->sb.chip == BCM4321_CHIP_ID) && (si->sb.chiprev < 2))
                W_REG(si->osh, &cc->chipcontrol,
-                     (si->sb.chiprev == 0) ? CHIPCTRL_4321A0_DEFAULT : CHIPCTRL_4321A1_DEFAULT);
+                     (si->sb.chiprev ==
+                      0) ? CHIPCTRL_4321A0_DEFAULT : CHIPCTRL_4321A1_DEFAULT);
 
-       if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+       if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL))
                goto done;
 
        /* set all Instaclk chip ILP to 1 MHz */
-       else if (si->sb.ccrev >= 10)
+       if (si->sb.ccrev >= 10)
                SET_REG(si->osh, &cc->system_clk_ctl, SYCC_CD_MASK,
-                       (ILP_DIV_1MHZ << SYCC_CD_SHIFT));
+                       (ILP_DIV_1MHZ << SYCC_CD_SHIFT));
 
-       sb_clkctl_setdelay(si, (void *)cc);
+       sb_clkctl_setdelay(si, (void *)(uintptr) cc);
 
-done:
+      done:
        sb_setcoreidx(sbh, origidx);
 }
 
 /* return the value suitable for writing to the dot11 core FAST_PWRUP_DELAY register */
-uint16
-sb_clkctl_fast_pwrup_delay(sb_t *sbh)
-{
+uint16 BCMINITFN(sb_clkctl_fast_pwrup_delay) (sb_t * sbh) {
        sb_info_t *si;
        uint origidx;
        chipcregs_t *cc;
@@ -2396,25 +3316,29 @@ sb_clkctl_fast_pwrup_delay(sb_t *sbh)
 
        INTR_OFF(si, intr_val);
 
-       if ((cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0)) == NULL)
+       if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL)
                goto done;
 
-       if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+       if (sbh->cccaps & CC_CAP_PMU) {
+               fpdelay = sb_pmu_fast_pwrup_delay(sbh, si->osh);
+               goto done;
+       }
+
+       if (!(sbh->cccaps & CC_CAP_PWR_CTL))
                goto done;
 
        slowminfreq = sb_slowclk_freq(si, FALSE);
        fpdelay = (((R_REG(si->osh, &cc->pll_on_delay) + 2) * 1000000) +
-                  (slowminfreq - 1)) / slowminfreq;
+                  (slowminfreq - 1)) / slowminfreq;
 
-done:
+      done:
        sb_setcoreidx(sbh, origidx);
        INTR_RESTORE(si, intr_val);
        return (fpdelay);
 }
 
 /* turn primary xtal and/or pll off/on */
-int
-sb_clkctl_xtal(sb_t *sbh, uint what, bool on)
+int sb_clkctl_xtal(sb_t * sbh, uint what, bool on)
 {
        sb_info_t *si;
        uint32 in, out, outen;
@@ -2423,66 +3347,68 @@ sb_clkctl_xtal(sb_t *sbh, uint what, bool on)
 
        switch (BUSTYPE(si->sb.bustype)) {
 
+       case PCMCIA_BUS:
+               return (0);
 
-               case PCMCIA_BUS:
-                       return (0);
-
-
-               case PCI_BUS:
+       case PCI_BUS:
 
-                       /* pcie core doesn't have any mapping to control the xtal pu */
-                       if (PCIE(si))
-                               return -1;
+               /* pcie core doesn't have any mapping to control the xtal pu */
+               if (PCIE(si))
+                       return -1;
 
-                       in = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_IN, sizeof(uint32));
-                       out = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32));
-                       outen = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN, sizeof(uint32));
+               in = OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_IN, sizeof(uint32));
+               out =
+                   OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32));
+               outen =
+                   OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN,
+                                       sizeof(uint32));
 
-                       /*
-                        * Avoid glitching the clock if GPRS is already using it.
-                        * We can't actually read the state of the PLLPD so we infer it
-                        * by the value of XTAL_PU which *is* readable via gpioin.
-                        */
-                       if (on && (in & PCI_CFG_GPIO_XTAL))
-                               return (0);
+               /*
+                * Avoid glitching the clock if GPRS is already using it.
+                * We can't actually read the state of the PLLPD so we infer it
+                * by the value of XTAL_PU which *is* readable via gpioin.
+                */
+               if (on && (in & PCI_CFG_GPIO_XTAL))
+                       return (0);
 
-                       if (what & XTAL)
-                               outen |= PCI_CFG_GPIO_XTAL;
-                       if (what & PLL)
-                               outen |= PCI_CFG_GPIO_PLL;
-
-                       if (on) {
-                               /* turn primary xtal on */
-                               if (what & XTAL) {
-                                       out |= PCI_CFG_GPIO_XTAL;
-                                       if (what & PLL)
-                                               out |= PCI_CFG_GPIO_PLL;
-                                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
-                                                            sizeof(uint32), out);
-                                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
-                                                            sizeof(uint32), outen);
-                                       OSL_DELAY(XTAL_ON_DELAY);
-                               }
+               if (what & XTAL)
+                       outen |= PCI_CFG_GPIO_XTAL;
+               if (what & PLL)
+                       outen |= PCI_CFG_GPIO_PLL;
 
-                               /* turn pll on */
-                               if (what & PLL) {
-                                       out &= ~PCI_CFG_GPIO_PLL;
-                                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
-                                                            sizeof(uint32), out);
-                                       OSL_DELAY(2000);
-                               }
-                       } else {
-                               if (what & XTAL)
-                                       out &= ~PCI_CFG_GPIO_XTAL;
+               if (on) {
+                       /* turn primary xtal on */
+                       if (what & XTAL) {
+                               out |= PCI_CFG_GPIO_XTAL;
                                if (what & PLL)
                                        out |= PCI_CFG_GPIO_PLL;
-                               OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT, sizeof(uint32), out);
-                               OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN, sizeof(uint32),
-                                                    outen);
+                               OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+                                                    sizeof(uint32), out);
+                               OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
+                                                    sizeof(uint32), outen);
+                               OSL_DELAY(XTAL_ON_DELAY);
                        }
 
-               default:
-                       return (-1);
+                       /* turn pll on */
+                       if (what & PLL) {
+                               out &= ~PCI_CFG_GPIO_PLL;
+                               OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+                                                    sizeof(uint32), out);
+                               OSL_DELAY(2000);
+                       }
+               } else {
+                       if (what & XTAL)
+                               out &= ~PCI_CFG_GPIO_XTAL;
+                       if (what & PLL)
+                               out |= PCI_CFG_GPIO_PLL;
+                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUT,
+                                            sizeof(uint32), out);
+                       OSL_PCI_WRITE_CONFIG(si->osh, PCI_GPIO_OUTEN,
+                                            sizeof(uint32), outen);
+               }
+
+       default:
+               return (-1);
        }
 
        return (0);
@@ -2490,8 +3416,7 @@ sb_clkctl_xtal(sb_t *sbh, uint what, bool on)
 
 /* set dynamic clk control mode (forceslow, forcefast, dynamic) */
 /*   returns true if we are forcing fast clock */
-bool
-sb_clkctl_clk(sb_t *sbh, uint mode)
+bool sb_clkctl_clk(sb_t * sbh, uint mode)
 {
        sb_info_t *si;
        uint origidx;
@@ -2505,7 +3430,6 @@ sb_clkctl_clk(sb_t *sbh, uint mode)
        if (si->sb.ccrev < 6)
                return (FALSE);
 
-
        /* Chips with ccrev 10 are EOL and they don't have SYCC_HR which we use below */
        ASSERT(si->sb.ccrev != 10);
 
@@ -2517,31 +3441,41 @@ sb_clkctl_clk(sb_t *sbh, uint mode)
            (BUSTYPE(si->sb.bustype) == SB_BUS) && (si->sb.ccrev >= 10))
                goto done;
 
-       /* PR32414WAR  "Force HT clock on" all the time, no dynamic clk ctl */
-       if ((si->sb.chip == BCM4311_CHIP_ID) && (si->sb.chiprev <= 1))
+       if (FORCEHT_WAR32414(si))
                goto done;
 
-       cc = (chipcregs_t*) sb_setcore(sbh, SB_CC, 0);
+       cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
        ASSERT(cc != NULL);
 
-       if (!(R_REG(si->osh, &cc->capabilities) & CAP_PWR_CTL))
+       if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL)
+           && (si->sb.ccrev < 20))
                goto done;
 
        switch (mode) {
-       case CLK_FAST:  /* force fast (pll) clock */
+       case CLK_FAST:          /* force fast (pll) clock */
                if (si->sb.ccrev < 10) {
                        /* don't forget to force xtal back on before we clear SCC_DYN_XTAL.. */
                        sb_clkctl_xtal(&si->sb, XTAL, ON);
 
-                       SET_REG(si->osh, &cc->slow_clk_ctl, (SCC_XC | SCC_FS | SCC_IP), SCC_IP);
-               } else
+                       SET_REG(si->osh, &cc->slow_clk_ctl,
+                               (SCC_XC | SCC_FS | SCC_IP), SCC_IP);
+               } else if (si->sb.ccrev < 20) {
                        OR_REG(si->osh, &cc->system_clk_ctl, SYCC_HR);
+               } else {
+                       OR_REG(si->osh, &cc->clk_ctl_st, CCS_FORCEHT);
+               }
+
                /* wait for the PLL */
-               OSL_DELAY(PLL_DELAY);
+               if (R_REG(si->osh, &cc->capabilities) & CC_CAP_PMU) {
+                       SPINWAIT(((R_REG(si->osh, &cc->clk_ctl_st) &
+                                  CCS_HTAVAIL) == 0), PMU_MAX_TRANSITION_DLY);
+                       ASSERT(R_REG(si->osh, &cc->clk_ctl_st) & CCS_HTAVAIL);
+               } else {
+                       OSL_DELAY(PLL_DELAY);
+               }
                break;
 
        case CLK_DYNAMIC:       /* enable dynamic clock control */
-
                if (si->sb.ccrev < 10) {
                        scc = R_REG(si->osh, &cc->slow_clk_ctl);
                        scc &= ~(SCC_FS | SCC_IP | SCC_XC);
@@ -2552,9 +3486,11 @@ sb_clkctl_clk(sb_t *sbh, uint mode)
                        /* for dynamic control, we have to release our xtal_pu "force on" */
                        if (scc & SCC_XC)
                                sb_clkctl_xtal(&si->sb, XTAL, OFF);
-               } else {
+               } else if (si->sb.ccrev < 20) {
                        /* Instaclock */
                        AND_REG(si->osh, &cc->system_clk_ctl, ~SYCC_HR);
+               } else {
+                       AND_REG(si->osh, &cc->clk_ctl_st, ~CCS_FORCEHT);
                }
                break;
 
@@ -2562,7 +3498,7 @@ sb_clkctl_clk(sb_t *sbh, uint mode)
                ASSERT(0);
        }
 
-done:
+      done:
        sb_setcoreidx(sbh, origidx);
        INTR_RESTORE(si, intr_val);
        return (mode == CLK_FAST);
@@ -2570,50 +3506,124 @@ done:
 
 /* register driver interrupt disabling and restoring callback functions */
 void
-sb_register_intr_callback(sb_t *sbh, void *intrsoff_fn, void *intrsrestore_fn,
-                          void *intrsenabled_fn, void *intr_arg)
+sb_register_intr_callback(sb_t * sbh, void *intrsoff_fn,
+                         void *intrsrestore_fn, void *intrsenabled_fn,
+                         void *intr_arg)
 {
        sb_info_t *si;
 
        si = SB_INFO(sbh);
        si->intr_arg = intr_arg;
-       si->intrsoff_fn = (sb_intrsoff_t)intrsoff_fn;
-       si->intrsrestore_fn = (sb_intrsrestore_t)intrsrestore_fn;
-       si->intrsenabled_fn = (sb_intrsenabled_t)intrsenabled_fn;
+       si->intrsoff_fn = (sb_intrsoff_t) intrsoff_fn;
+       si->intrsrestore_fn = (sb_intrsrestore_t) intrsrestore_fn;
+       si->intrsenabled_fn = (sb_intrsenabled_t) intrsenabled_fn;
        /* save current core id.  when this function called, the current core
         * must be the core which provides driver functions(il, et, wl, etc.)
         */
        si->dev_coreid = si->coreid[si->curidx];
 }
 
+void sb_deregister_intr_callback(sb_t * sbh)
+{
+       sb_info_t *si;
 
-int
-sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
-             uint8 *pciclass, uint8 *pcisubclass, uint8 *pciprogif,
-             uint8 *pciheader)
+       si = SB_INFO(sbh);
+       si->intrsoff_fn = NULL;
+}
+
+#ifdef BCMDBG
+/* dump dynamic clock control related registers */
+void sb_clkctl_dump(sb_t * sbh, struct bcmstrbuf *b)
 {
-       uint16 vendor = 0xffff, device = 0xffff;
-       uint core, unit;
-       uint chip, chippkg;
-       uint nfunc;
-       char varname[SB_DEVPATH_BUFSZ + 8];
-       uint8 class, subclass, progif;
-       char devpath[SB_DEVPATH_BUFSZ];
-       uint8 header;
+       sb_info_t *si;
+       chipcregs_t *cc;
+       uint origidx;
+       uint intr_val = 0;
+
+       si = SB_INFO(sbh);
+
+       INTR_OFF(si, intr_val);
+
+       origidx = si->curidx;
+
+       if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0)) == NULL) {
+               INTR_RESTORE(si, intr_val);
+               return;
+       }
+
+       if (!(R_REG(si->osh, &cc->capabilities) & CC_CAP_PWR_CTL))
+               goto done;
+
+       bcm_bprintf(b, "pll_on_delay 0x%x fref_sel_delay 0x%x ",
+                   cc->pll_on_delay, cc->fref_sel_delay);
+       if ((si->sb.ccrev >= 6) && (si->sb.ccrev < 10))
+               bcm_bprintf(b, "slow_clk_ctl 0x%x ", cc->slow_clk_ctl);
+       if (si->sb.ccrev >= 10) {
+               bcm_bprintf(b, "system_clk_ctl 0x%x ", cc->system_clk_ctl);
+               bcm_bprintf(b, "clkstatestretch 0x%x ", cc->clkstatestretch);
+       }
+       if (BUSTYPE(si->sb.bustype) == PCI_BUS)
+               bcm_bprintf(b, "gpioout 0x%x gpioouten 0x%x ",
+                           OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUT,
+                                               sizeof(uint32)),
+                           OSL_PCI_READ_CONFIG(si->osh, PCI_GPIO_OUTEN,
+                                               sizeof(uint32)));
+       bcm_bprintf(b, "\n");
+
+      done:
+       sb_setcoreidx(sbh, origidx);
+       INTR_RESTORE(si, intr_val);
+}
+#endif /* BCMDBG */
 
-       core = sb_coreid(sbh);
-       unit = sb_coreunit(sbh);
+uint16 BCMINITFN(sb_d11_devid) (sb_t * sbh) {
+       sb_info_t *si = SB_INFO(sbh);
+       uint16 device;
+
+#if defined(BCM4328)
+       /* Fix device id for dual band BCM4328 */
+       if (sbh->chip == BCM4328_CHIP_ID &&
+           (sbh->chippkg == BCM4328USBDUAL_PKG_ID
+            || sbh->chippkg == BCM4328SDIODUAL_PKG_ID))
+               device = BCM4328_D11DUAL_ID;
+       else
+#endif /* BCM4328 */
+               /* Let an nvram variable with devpath override devid */
+       if ((device = (uint16) sb_getdevpathintvar(sbh, "devid")) != 0) ;
+       /* Get devid from OTP/SPROM depending on where the SROM is read */
+       else if ((device = (uint16) getintvar(si->vars, "devid")) != 0) ;
+       /*
+        * no longer support wl0id, but keep the code
+        * here for backward compatibility.
+        */
+       else if ((device = (uint16) getintvar(si->vars, "wl0id")) != 0) ;
+       /* Chip specific conversion */
+       else if (sbh->chip == BCM4712_CHIP_ID) {
+               if (sbh->chippkg == BCM4712SMALL_PKG_ID)
+                       device = BCM4306_D11G_ID;
+               else
+                       device = BCM4306_D11DUAL_ID;
+       }
+       /* ignore it */
+       else
+               device = 0xffff;
 
-       chip = sb_chip(sbh);
-       chippkg = sb_chippkg(sbh);
+       return device;
+}
 
-       progif = 0;
-       header = PCI_HEADER_NORMAL;
+int
+BCMINITFN(sb_corepciid) (sb_t * sbh, uint func, uint16 * pcivendor,
+                        uint16 * pcidevice, uint8 * pciclass,
+                        uint8 * pcisubclass, uint8 * pciprogif,
+                        uint8 * pciheader) {
+       uint16 vendor = 0xffff, device = 0xffff;
+       uint8 class, subclass, progif = 0;
+       uint8 header = PCI_HEADER_NORMAL;
+       uint32 core = sb_coreid(sbh);
 
        /* Verify whether the function exists for the core */
-       nfunc = (core == SB_USB20H) ? 2 : 1;
-       if (func >= nfunc)
-               return BCME_ERROR;
+       if (func >= (uint) (core == SB_USB20H ? 2 : 1))
+               return -1;
 
        /* Known vendor translations */
        switch (sb_corevendor(sbh)) {
@@ -2621,7 +3631,7 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
                vendor = VENDOR_BROADCOM;
                break;
        default:
-               return BCME_ERROR;
+               return -1;
        }
 
        /* Determine class based on known core codes */
@@ -2645,20 +3655,20 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
        case SB_MEMC:
                class = PCI_CLASS_MEMORY;
                subclass = PCI_MEMORY_RAM;
-               device = (uint16)core;
+               device = (uint16) core;
                break;
        case SB_PCI:
        case SB_PCIE:
                class = PCI_CLASS_BRIDGE;
                subclass = PCI_BRIDGE_PCI;
-               device = (uint16)core;
+               device = (uint16) core;
                header = PCI_HEADER_BRIDGE;
                break;
        case SB_MIPS:
        case SB_MIPS33:
                class = PCI_CLASS_CPU;
                subclass = PCI_CPU_MIPS;
-               device = (uint16)core;
+               device = (uint16) core;
                break;
        case SB_CODEC:
                class = PCI_CLASS_COMM;
@@ -2668,31 +3678,21 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
        case SB_USB:
                class = PCI_CLASS_SERIAL;
                subclass = PCI_SERIAL_USB;
-               progif = 0x10; /* OHCI */
+               progif = 0x10;  /* OHCI */
                device = BCM47XX_USB_ID;
                break;
        case SB_USB11H:
                class = PCI_CLASS_SERIAL;
                subclass = PCI_SERIAL_USB;
-               progif = 0x10; /* OHCI */
+               progif = 0x10;  /* OHCI */
                device = BCM47XX_USBH_ID;
                break;
        case SB_USB20H:
                class = PCI_CLASS_SERIAL;
                subclass = PCI_SERIAL_USB;
-               progif = func == 0 ? 0x10 : 0x20; /* OHCI/EHCI */
+               progif = func == 0 ? 0x10 : 0x20;       /* OHCI/EHCI */
                device = BCM47XX_USB20H_ID;
-               header = 0x80; /* multifunction */
-               break;
-       case SB_USB11D:
-               class = PCI_CLASS_SERIAL;
-               subclass = PCI_SERIAL_USB;
-               device = BCM47XX_USBD_ID;
-               break;
-       case SB_USB20D:
-               class = PCI_CLASS_SERIAL;
-               subclass = PCI_SERIAL_USB;
-               device = BCM47XX_USB20D_ID;
+               header = 0x80;  /* multifunction */
                break;
        case SB_IPSEC:
                class = PCI_CLASS_CRYPT;
@@ -2708,33 +3708,7 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
        case SB_CC:
                class = PCI_CLASS_MEMORY;
                subclass = PCI_MEMORY_FLASH;
-               device = (uint16)core;
-               break;
-       case SB_D11:
-               class = PCI_CLASS_NET;
-               subclass = PCI_NET_OTHER;
-               /* Let nvram variable override core ID */
-               sb_devpath(sbh, devpath, sizeof(devpath));
-               sprintf(varname, "%sdevid", devpath);
-               if ((device = (uint16)getintvar(NULL, varname)))
-                       break;
-               /*
-               * no longer support wl%did, but keep the code
-               * here for backward compatibility.
-               */
-               sprintf(varname, "wl%did", unit);
-               if ((device = (uint16)getintvar(NULL, varname)))
-                       break;
-               /* Chip specific conversion */
-               if (chip == BCM4712_CHIP_ID) {
-                       if (chippkg == BCM4712SMALL_PKG_ID)
-                               device = BCM4306_D11G_ID;
-                       else
-                               device = BCM4306_D11DUAL_ID;
-                       break;
-               }
-               /* ignore it */
-               device = 0xffff;
+               device = (uint16) core;
                break;
        case SB_SATAXOR:
                class = PCI_CLASS_XOR;
@@ -2746,10 +3720,25 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
                subclass = PCI_DASDI_IDE;
                device = BCM47XX_ATA100_ID;
                break;
+       case SB_USB11D:
+               class = PCI_CLASS_SERIAL;
+               subclass = PCI_SERIAL_USB;
+               device = BCM47XX_USBD_ID;
+               break;
+       case SB_USB20D:
+               class = PCI_CLASS_SERIAL;
+               subclass = PCI_SERIAL_USB;
+               device = BCM47XX_USB20D_ID;
+               break;
+       case SB_D11:
+               class = PCI_CLASS_NET;
+               subclass = PCI_NET_OTHER;
+               device = sb_d11_devid(sbh);
+               break;
 
        default:
                class = subclass = progif = 0xff;
-               device = (uint16)core;
+               device = (uint16) core;
                break;
        }
 
@@ -2763,25 +3752,69 @@ sb_corepciid(sb_t *sbh, uint func, uint16 *pcivendor, uint16 *pcidevice,
        return 0;
 }
 
+/* use the mdio interface to read from mdio slaves */
+static int
+sb_pcie_mdioread(sb_info_t * si, uint physmedia, uint regaddr, uint * regval)
+{
+       uint mdiodata;
+       uint i = 0;
+       sbpcieregs_t *pcieregs;
+
+       pcieregs = (sbpcieregs_t *) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
+       ASSERT(pcieregs);
+
+       /* enable mdio access to SERDES */
+       W_REG(si->osh, (&pcieregs->mdiocontrol),
+             MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
+
+       mdiodata = MDIODATA_START | MDIODATA_READ |
+           (physmedia << MDIODATA_DEVADDR_SHF) |
+           (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA;
+
+       W_REG(si->osh, &pcieregs->mdiodata, mdiodata);
+
+       PR28829_DELAY();
+
+       /* retry till the transaction is complete */
+       while (i < 10) {
+               if (R_REG(si->osh, &(pcieregs->mdiocontrol)) &
+                   MDIOCTL_ACCESS_DONE) {
+                       PR28829_DELAY();
+                       *regval =
+                           (R_REG(si->osh, &(pcieregs->mdiodata)) &
+                            MDIODATA_MASK);
+                       /* Disable mdio access to SERDES */
+                       W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
+                       return 0;
+               }
+               OSL_DELAY(1000);
+               i++;
+       }
 
+       SB_ERROR(("sb_pcie_mdioread: timed out\n"));
+       /* Disable mdio access to SERDES */
+       W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
+       return 1;
+}
 
 /* use the mdio interface to write to mdio slaves */
 static int
-sb_pcie_mdiowrite(sb_info_t *si,  uint physmedia, uint regaddr, uint val)
+sb_pcie_mdiowrite(sb_info_t * si, uint physmedia, uint regaddr, uint val)
 {
        uint mdiodata;
        uint i = 0;
        sbpcieregs_t *pcieregs;
 
-       pcieregs = (sbpcieregs_t*) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
+       pcieregs = (sbpcieregs_t *) sb_setcoreidx(&si->sb, si->sb.buscoreidx);
        ASSERT(pcieregs);
 
        /* enable mdio access to SERDES */
-       W_REG(si->osh, (&pcieregs->mdiocontrol), MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
+       W_REG(si->osh, (&pcieregs->mdiocontrol),
+             MDIOCTL_PREAM_EN | MDIOCTL_DIVISOR_VAL);
 
        mdiodata = MDIODATA_START | MDIODATA_WRITE |
-               (physmedia << MDIODATA_DEVADDR_SHF) |
-               (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA | val;
+           (physmedia << MDIODATA_DEVADDR_SHF) |
+           (regaddr << MDIODATA_REGADDR_SHF) | MDIODATA_TA | val;
 
        W_REG(si->osh, (&pcieregs->mdiodata), mdiodata);
 
@@ -2789,7 +3822,8 @@ sb_pcie_mdiowrite(sb_info_t *si,  uint physmedia, uint regaddr, uint val)
 
        /* retry till the transaction is complete */
        while (i < 10) {
-               if (R_REG(si->osh, &(pcieregs->mdiocontrol)) & MDIOCTL_ACCESS_DONE) {
+               if (R_REG(si->osh, &(pcieregs->mdiocontrol)) &
+                   MDIOCTL_ACCESS_DONE) {
                        /* Disable mdio access to SERDES */
                        W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
                        return 0;
@@ -2801,48 +3835,45 @@ sb_pcie_mdiowrite(sb_info_t *si,  uint physmedia, uint regaddr, uint val)
        SB_ERROR(("sb_pcie_mdiowrite: timed out\n"));
        /* Disable mdio access to SERDES */
        W_REG(si->osh, (&pcieregs->mdiocontrol), 0);
-       ASSERT(0);
        return 1;
 
 }
 
 /* indirect way to read pcie config regs */
-uint
-sb_pcie_readreg(void *sb, void* arg1, uint offset)
+uint sb_pcie_readreg(void *sb, void *arg1, uint offset)
 {
        sb_info_t *si;
-       sb_t   *sbh;
+       sb_t *sbh;
        uint retval = 0xFFFFFFFF;
        sbpcieregs_t *pcieregs;
        uint addrtype;
 
-       sbh = (sb_t *)sb;
+       sbh = (sb_t *) sb;
        si = SB_INFO(sbh);
        ASSERT(PCIE(si));
 
-       pcieregs = (sbpcieregs_t *)sb_setcore(sbh, SB_PCIE, 0);
+       pcieregs = (sbpcieregs_t *) sb_setcore(sbh, SB_PCIE, 0);
        ASSERT(pcieregs);
 
-       addrtype = (uint)((uintptr)arg1);
+       addrtype = (uint) ((uintptr) arg1);
        switch (addrtype) {
-               case PCIE_CONFIGREGS:
-                       W_REG(si->osh, (&pcieregs->configaddr), offset);
-                       retval = R_REG(si->osh, &(pcieregs->configdata));
-                       break;
-               case PCIE_PCIEREGS:
-                       W_REG(si->osh, &(pcieregs->pcieaddr), offset);
-                       retval = R_REG(si->osh, &(pcieregs->pciedata));
-                       break;
-               default:
-                       ASSERT(0);
-                       break;
+       case PCIE_CONFIGREGS:
+               W_REG(si->osh, (&pcieregs->configaddr), offset);
+               retval = R_REG(si->osh, &(pcieregs->configdata));
+               break;
+       case PCIE_PCIEREGS:
+               W_REG(si->osh, &(pcieregs->pcieindaddr), offset);
+               retval = R_REG(si->osh, &(pcieregs->pcieinddata));
+               break;
+       default:
+               ASSERT(0);
+               break;
        }
        return retval;
 }
 
 /* indirect way to write pcie config/mdio/pciecore regs */
-uint
-sb_pcie_writereg(sb_t *sbh, void *arg1,  uint offset, uint val)
+uint sb_pcie_writereg(sb_t * sbh, void *arg1, uint offset, uint val)
 {
        sb_info_t *si;
        sbpcieregs_t *pcieregs;
@@ -2851,74 +3882,119 @@ sb_pcie_writereg(sb_t *sbh, void *arg1,  uint offset, uint val)
        si = SB_INFO(sbh);
        ASSERT(PCIE(si));
 
-       pcieregs = (sbpcieregs_t *)sb_setcore(sbh, SB_PCIE, 0);
+       pcieregs = (sbpcieregs_t *) sb_setcore(sbh, SB_PCIE, 0);
        ASSERT(pcieregs);
 
-       addrtype = (uint)((uintptr)arg1);
+       addrtype = (uint) ((uintptr) arg1);
 
        switch (addrtype) {
-               case PCIE_CONFIGREGS:
-                       W_REG(si->osh, (&pcieregs->configaddr), offset);
-                       W_REG(si->osh, (&pcieregs->configdata), val);
-                       break;
-               case PCIE_PCIEREGS:
-                       W_REG(si->osh, (&pcieregs->pcieaddr), offset);
-                       W_REG(si->osh, (&pcieregs->pciedata), val);
-                       break;
-               default:
-                       ASSERT(0);
-                       break;
+       case PCIE_CONFIGREGS:
+               W_REG(si->osh, (&pcieregs->configaddr), offset);
+               W_REG(si->osh, (&pcieregs->configdata), val);
+               break;
+       case PCIE_PCIEREGS:
+               W_REG(si->osh, (&pcieregs->pcieindaddr), offset);
+               W_REG(si->osh, (&pcieregs->pcieinddata), val);
+               break;
+       default:
+               ASSERT(0);
+               break;
        }
        return 0;
 }
 
 /* Build device path. Support SB, PCI, and JTAG for now. */
-int
-sb_devpath(sb_t *sbh, char *path, int size)
-{
+int BCMINITFN(sb_devpath) (sb_t * sbh, char *path, int size) {
+       int slen;
        ASSERT(path);
        ASSERT(size >= SB_DEVPATH_BUFSZ);
 
+       if (!path || size <= 0)
+               return -1;
+
        switch (BUSTYPE((SB_INFO(sbh))->sb.bustype)) {
        case SB_BUS:
        case JTAG_BUS:
-               sprintf(path, "sb/%u/", sb_coreidx(sbh));
+               slen = snprintf(path, (size_t) size, "sb/%u/", sb_coreidx(sbh));
                break;
        case PCI_BUS:
                ASSERT((SB_INFO(sbh))->osh);
-               sprintf(path, "pci/%u/%u/", OSL_PCI_BUS((SB_INFO(sbh))->osh),
-                       OSL_PCI_SLOT((SB_INFO(sbh))->osh));
+               slen = snprintf(path, (size_t) size, "pci/%u/%u/",
+                               OSL_PCI_BUS((SB_INFO(sbh))->osh),
+                               OSL_PCI_SLOT((SB_INFO(sbh))->osh));
                break;
        case PCMCIA_BUS:
                SB_ERROR(("sb_devpath: OSL_PCMCIA_BUS() not implemented, bus 1 assumed\n"));
                SB_ERROR(("sb_devpath: OSL_PCMCIA_SLOT() not implemented, slot 1 assumed\n"));
-               sprintf(path, "pc/%u/%u/", 1, 1);
-               break;
-       case SDIO_BUS:
-               SB_ERROR(("sb_devpath: device 0 assumed\n"));
-               sprintf(path, "sd/%u/", sb_coreidx(sbh));
+               slen = snprintf(path, (size_t) size, "pc/1/1/");
                break;
        default:
+               slen = -1;
                ASSERT(0);
                break;
        }
 
+       if (slen < 0 || slen >= size) {
+               path[0] = '\0';
+               return -1;
+       }
+
        return 0;
 }
 
+/* Get a variable, but only if it has a devpath prefix */
+char *BCMINITFN(sb_getdevpathvar) (sb_t * sbh, const char *name) {
+       char varname[SB_DEVPATH_BUFSZ + 32];
+
+       sb_devpathvar(sbh, varname, sizeof(varname), name);
+
+       return (getvar(NULL, varname));
+}
+
+/* Get a variable, but only if it has a devpath prefix */
+int BCMINITFN(sb_getdevpathintvar) (sb_t * sbh, const char *name) {
+       char varname[SB_DEVPATH_BUFSZ + 32];
+
+       sb_devpathvar(sbh, varname, sizeof(varname), name);
+
+       return (getintvar(NULL, varname));
+}
+
+/* Concatenate the dev path with a varname into the given 'var' buffer
+ * and return the 'var' pointer.
+ * Nothing is done to the arguments if len == 0 or var is NULL, var is still returned.
+ * On overflow, the first char will be set to '\0'.
+ */
+static char *BCMINITFN(sb_devpathvar) (sb_t * sbh, char *var, int len,
+                                      const char *name) {
+       uint path_len;
+
+       if (!var || len <= 0)
+               return var;
+
+       if (sb_devpath(sbh, var, len) == 0) {
+               path_len = strlen(var);
+
+               if (strlen(name) + 1 > (uint) (len - path_len))
+                       var[0] = '\0';
+               else
+                       strncpy(var + path_len, name, len - path_len - 1);
+       }
+
+       return var;
+}
+
 /*
  * Fixup SROMless PCI device's configuration.
  * The current core may be changed upon return.
  */
-static int
-sb_pci_fixcfg(sb_info_t *si)
+static int sb_pci_fixcfg(sb_info_t * si)
 {
        uint origidx, pciidx;
        sbpciregs_t *pciregs;
-       sbpcieregs_t *pcieregs;
+       sbpcieregs_t *pcieregs = NULL;
        uint16 val16, *reg16;
-       char name[SB_DEVPATH_BUFSZ+16], *value;
-       char devpath[SB_DEVPATH_BUFSZ];
+       uint32 w;
 
        ASSERT(BUSTYPE(si->sb.bustype) == PCI_BUS);
 
@@ -2928,11 +4004,11 @@ sb_pci_fixcfg(sb_info_t *si)
 
        /* check 'pi' is correct and fix it if not */
        if (si->sb.buscoretype == SB_PCIE) {
-               pcieregs = (sbpcieregs_t *)sb_setcore(&si->sb, SB_PCIE, 0);
+               pcieregs = (sbpcieregs_t *) sb_setcore(&si->sb, SB_PCIE, 0);
                ASSERT(pcieregs);
                reg16 = &pcieregs->sprom[SRSH_PI_OFFSET];
        } else if (si->sb.buscoretype == SB_PCI) {
-               pciregs = (sbpciregs_t *)sb_setcore(&si->sb, SB_PCI, 0);
+               pciregs = (sbpciregs_t *) sb_setcore(&si->sb, SB_PCI, 0);
                ASSERT(pciregs);
                reg16 = &pciregs->sprom[SRSH_PI_OFFSET];
        } else {
@@ -2941,59 +4017,59 @@ sb_pci_fixcfg(sb_info_t *si)
        }
        pciidx = sb_coreidx(&si->sb);
        val16 = R_REG(si->osh, reg16);
-       if (((val16 & SRSH_PI_MASK) >> SRSH_PI_SHIFT) != (uint16)pciidx) {
-               val16 = (uint16)(pciidx << SRSH_PI_SHIFT) | (val16 & ~SRSH_PI_MASK);
+       if (((val16 & SRSH_PI_MASK) >> SRSH_PI_SHIFT) != (uint16) pciidx) {
+               val16 =
+                   (uint16) (pciidx << SRSH_PI_SHIFT) | (val16 &
+                                                         ~SRSH_PI_MASK);
                W_REG(si->osh, reg16, val16);
        }
 
-       /* restore the original index */
-       sb_setcoreidx(&si->sb, origidx);
+       if (PCIE_ASPMWARS(si)) {
+               w = sb_pcie_readreg((void *)(uintptr) & si->sb,
+                                   (void *)PCIE_PCIEREGS, PCIE_PLP_STATUSREG);
 
-       /*
-        * Fixup bar0window in PCI config space to make the core indicated
-        * by the nvram variable the current core.
-        * !Do it last, it may change the current core!
-        */
-       if (sb_devpath(&si->sb, devpath, sizeof(devpath)))
-               return -1;
-       sprintf(name, "%sb0w", devpath);
-       if ((value = getvar(NULL, name))) {
-               OSL_PCI_WRITE_CONFIG(si->osh, PCI_BAR0_WIN, sizeof(uint32),
-                       bcm_strtoul(value, NULL, 16));
-               /* update curidx since the current core is changed */
-               si->curidx = _sb_coreidx(si);
-               if (si->curidx == BADIDX) {
-                       SB_ERROR(("sb_pci_fixcfg: bad core index\n"));
-                       return -1;
+               /* Detect the current polarity at attach and force that polarity and
+                * disable changing the polarity
+                */
+               if ((w & PCIE_PLP_POLARITYINV_STAT) == 0) {
+                       si->pcie_polarity = (SERDES_RX_CTRL_FORCE);
+               } else {
+                       si->pcie_polarity = (SERDES_RX_CTRL_FORCE |
+                                            SERDES_RX_CTRL_POLARITY);
                }
-       }
 
-       return 0;
-}
+               w = OSL_PCI_READ_CONFIG(si->osh, si->pciecap_lcreg_offset,
+                                       sizeof(uint32));
+               if (w & PCIE_CLKREQ_ENAB) {
+                       reg16 = &pcieregs->sprom[SRSH_CLKREQ_OFFSET];
+                       val16 = R_REG(si->osh, reg16);
+                       /* if clockreq is not advertized clkreq should not be enabled */
+                       if (!(val16 & SRSH_CLKREQ_ENB))
+                               SB_ERROR(("WARNING: CLK REQ enabled already  0x%x\n", w));
+               }
 
-static uint
-sb_chipc_capability(sb_t *sbh)
-{
-       sb_info_t *si;
+               sb_war43448(&si->sb);
 
-       si = SB_INFO(sbh);
+               sb_war42767(&si->sb);
+
+       }
+
+       /* restore the original index */
+       sb_setcoreidx(&si->sb, origidx);
 
-       /* Make sure that there is ChipCommon core present */
-       if (si->coreid[SB_CC_IDX] == SB_CC)
-               return (sb_corereg(si, SB_CC_IDX, OFFSETOF(chipcregs_t, capabilities),
-                                  0, 0));
        return 0;
 }
 
 /* Return ADDR64 capability of the backplane */
-bool
-sb_backplane64(sb_t *sbh)
+bool sb_backplane64(sb_t * sbh)
 {
-       return ((sb_chipc_capability(sbh) & CAP_BKPLN64) != 0);
+       sb_info_t *si;
+
+       si = SB_INFO(sbh);
+       return ((si->sb.cccaps & CC_CAP_BKPLN64) != 0);
 }
 
-void
-sb_btcgpiowar(sb_t *sbh)
+void sb_btcgpiowar(sb_t * sbh)
 {
        sb_info_t *si;
        uint origidx;
@@ -3004,7 +4080,7 @@ sb_btcgpiowar(sb_t *sbh)
        /* Make sure that there is ChipCommon core present &&
         * UART_TX is strapped to 1
         */
-       if (!(sb_chipc_capability(sbh) & CAP_UARTGPIO))
+       if (!(si->sb.cccaps & CC_CAP_UARTGPIO))
                return;
 
        /* sb_corereg cannot be used as we have to guarantee 8-bit read/writes */
@@ -3012,13 +4088,11 @@ sb_btcgpiowar(sb_t *sbh)
 
        origidx = sb_coreidx(sbh);
 
-       cc = (chipcregs_t *)sb_setcore(sbh, SB_CC, 0);
-       if (cc == NULL)
-               goto end;
+       cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0);
+       ASSERT(cc);
 
        W_REG(si->osh, &cc->uart0mcr, R_REG(si->osh, &cc->uart0mcr) | 0x04);
 
-end:
        /* restore the original index */
        sb_setcoreidx(sbh, origidx);
 
@@ -3026,8 +4100,7 @@ end:
 }
 
 /* check if the device is removed */
-bool
-sb_deviceremoved(sb_t *sbh)
+bool sb_deviceremoved(sb_t * sbh)
 {
        uint32 w;
        sb_info_t *si;
@@ -3048,10 +4121,9 @@ sb_deviceremoved(sb_t *sbh)
        return FALSE;
 }
 
+#if 0
 /* Return the RAM size of the SOCRAM core */
-uint32
-sb_socram_size(sb_t *sbh)
-{
+uint32 BCMINITFN(sb_socram_size) (sb_t * sbh) {
        sb_info_t *si;
        uint origidx;
        uint intr_val = 0;
@@ -3080,24 +4152,29 @@ sb_socram_size(sb_t *sbh)
        coreinfo = R_REG(si->osh, &regs->coreinfo);
 
        /* Calculate size from coreinfo based on rev */
-       switch (corerev) {
-       case 0:
+       if (corerev == 0)
                memsize = 1 << (16 + (coreinfo & SRCI_MS0_MASK));
-               break;
-       default: /* rev >= 1 */
+       else if (corerev < 3) {
                memsize = 1 << (SR_BSZ_BASE + (coreinfo & SRCI_SRBSZ_MASK));
                memsize *= (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
-               break;
+       } else {
+               uint nb = (coreinfo & SRCI_SRNB_MASK) >> SRCI_SRNB_SHIFT;
+               uint bsz = (coreinfo & SRCI_SRBSZ_MASK);
+               uint lss = (coreinfo & SRCI_LSS_MASK) >> SRCI_LSS_SHIFT;
+               if (lss != 0)
+                       nb--;
+               memsize = nb * (1 << (bsz + SR_BSZ_BASE));
+               if (lss != 0)
+                       memsize += (1 << ((lss - 1) + SR_BSZ_BASE));
        }
-
        /* Return to previous state and core */
        if (!wasup)
                sb_core_disable(sbh, 0);
        sb_setcoreidx(sbh, origidx);
 
-done:
+      done:
        INTR_RESTORE(si, intr_val);
        return memsize;
 }
 
-
+#endif
index 819a48d255c1f75f95d71eebe10a2e435e6c596b..00c4d9054cb35157035e3454de0a002468236524 100644 (file)
@@ -48,7 +48,6 @@
 #include <typedefs.h>
 #include <osl.h>
 #include <sbutils.h>
-#include <bcmutils.h>
 #include <bcmnvram.h>
 #include <sbhndmips.h>
 #include <hndmips.h>
@@ -170,7 +169,7 @@ brcm_setup(void)
        char *value;
 
        /* Get global SB handle */
-       sbh = sb_kattach();
+       sbh = sb_kattach(SB_OSH);
 
        /* Initialize clocks and interrupts */
        sb_mips_init(sbh, SBMIPS_VIRTIRQ_BASE);
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/sflash.c b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/sflash.c
deleted file mode 100644 (file)
index c1a5ed5..0000000
+++ /dev/null
@@ -1,422 +0,0 @@
-/*
- * Broadcom SiliconBackplane chipcommon serial flash interface
- *
- * Copyright 2006, Broadcom Corporation
- * All Rights Reserved.
- * 
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
- *
- * $Id: sflash.c,v 1.1.1.13 2006/02/27 03:43:16 honor Exp $
- */
-
-#include <osl.h>
-#include <typedefs.h>
-#include <sbconfig.h>
-#include <sbchipc.h>
-#include <mipsinc.h>
-#include <bcmutils.h>
-#include <bcmdevs.h>
-#include <sflash.h>
-
-/* Private global state */
-static struct sflash sflash;
-
-/* Issue a serial flash command */
-static INLINE void
-sflash_cmd(chipcregs_t *cc, uint opcode)
-{
-       W_REG(NULL, &cc->flashcontrol, SFLASH_START | opcode);
-       while (R_REG(NULL, &cc->flashcontrol) & SFLASH_BUSY);
-}
-
-/* Initialize serial flash access */
-struct sflash *
-sflash_init(chipcregs_t *cc)
-{
-       uint32 id, id2;
-
-       bzero(&sflash, sizeof(sflash));
-
-       sflash.type = R_REG(NULL, &cc->capabilities) & CAP_FLASH_MASK;
-
-       switch (sflash.type) {
-       case SFLASH_ST:
-               /* Probe for ST chips */
-               sflash_cmd(cc, SFLASH_ST_DP);
-               sflash_cmd(cc, SFLASH_ST_RES);
-               id = R_REG(NULL, &cc->flashdata);
-               switch (id) {
-               case 0x11:
-                       /* ST M25P20 2 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 4;
-                       break;
-               case 0x12:
-                       /* ST M25P40 4 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 8;
-                       break;
-               case 0x13:
-                       /* ST M25P80 8 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 16;
-                       break;
-               case 0x14:
-                       /* ST M25P16 16 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 32;
-                       break;
-               case 0x15:
-                       /* ST M25P32 32 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 64;
-                       break;
-               case 0x16:
-                       /* ST M25P64 64 Mbit Serial Flash */
-                       sflash.blocksize = 64 * 1024;
-                       sflash.numblocks = 128;
-                       break;
-               case 0xbf:
-                       W_REG(NULL, &cc->flashaddress, 1);
-                       sflash_cmd(cc, SFLASH_ST_RES);
-                       id2 = R_REG(NULL, &cc->flashdata);
-                       if (id2 == 0x44) {
-                               /* SST M25VF80 4 Mbit Serial Flash */
-                               sflash.blocksize = 64 * 1024;
-                               sflash.numblocks = 8;
-                       }
-                       break;
-               }
-               break;
-
-       case SFLASH_AT:
-               /* Probe for Atmel chips */
-               sflash_cmd(cc, SFLASH_AT_STATUS);
-               id = R_REG(NULL, &cc->flashdata) & 0x3c;
-               switch (id) {
-               case 0xc:
-                       /* Atmel AT45DB011 1Mbit Serial Flash */
-                       sflash.blocksize = 256;
-                       sflash.numblocks = 512;
-                       break;
-               case 0x14:
-                       /* Atmel AT45DB021 2Mbit Serial Flash */
-                       sflash.blocksize = 256;
-                       sflash.numblocks = 1024;
-                       break;
-               case 0x1c:
-                       /* Atmel AT45DB041 4Mbit Serial Flash */
-                       sflash.blocksize = 256;
-                       sflash.numblocks = 2048;
-                       break;
-               case 0x24:
-                       /* Atmel AT45DB081 8Mbit Serial Flash */
-                       sflash.blocksize = 256;
-                       sflash.numblocks = 4096;
-                       break;
-               case 0x2c:
-                       /* Atmel AT45DB161 16Mbit Serial Flash */
-                       sflash.blocksize = 512;
-                       sflash.numblocks = 4096;
-                       break;
-               case 0x34:
-                       /* Atmel AT45DB321 32Mbit Serial Flash */
-                       sflash.blocksize = 512;
-                       sflash.numblocks = 8192;
-                       break;
-               case 0x3c:
-                       /* Atmel AT45DB642 64Mbit Serial Flash */
-                       sflash.blocksize = 1024;
-                       sflash.numblocks = 8192;
-                       break;
-               }
-               break;
-       }
-
-       sflash.size = sflash.blocksize * sflash.numblocks;
-       return sflash.size ? &sflash : NULL;
-}
-
-/* Read len bytes starting at offset into buf. Returns number of bytes read. */
-int
-sflash_read(chipcregs_t *cc, uint offset, uint len, uchar *buf)
-{
-       int cnt;
-       uint32 *from, *to;
-
-       if (!len)
-               return 0;
-
-       if ((offset + len) > sflash.size)
-               return -22;
-
-       if ((len >= 4) && (offset & 3))
-               cnt = 4 - (offset & 3);
-       else if ((len >= 4) && ((uint32)buf & 3))
-               cnt = 4 - ((uint32)buf & 3);
-       else
-               cnt = len;
-
-       from = (uint32 *)KSEG1ADDR(SB_FLASH2 + offset);
-       to = (uint32 *)buf;
-
-       if (cnt < 4) {
-               bcopy(from, to, cnt);
-               return cnt;
-       }
-
-       while (cnt >= 4) {
-               *to++ = *from++;
-               cnt -= 4;
-       }
-
-       return (len - cnt);
-}
-
-/* Poll for command completion. Returns zero when complete. */
-int
-sflash_poll(chipcregs_t *cc, uint offset)
-{
-       if (offset >= sflash.size)
-               return -22;
-
-       switch (sflash.type) {
-       case SFLASH_ST:
-               /* Check for ST Write In Progress bit */
-               sflash_cmd(cc, SFLASH_ST_RDSR);
-               return R_REG(NULL, &cc->flashdata) & SFLASH_ST_WIP;
-       case SFLASH_AT:
-               /* Check for Atmel Ready bit */
-               sflash_cmd(cc, SFLASH_AT_STATUS);
-               return !(R_REG(NULL, &cc->flashdata) & SFLASH_AT_READY);
-       }
-
-       return 0;
-}
-
-/* Write len bytes starting at offset into buf. Returns number of bytes
- * written. Caller should poll for completion.
- */
-int
-sflash_write(chipcregs_t *cc, uint offset, uint len, const uchar *buf)
-{
-       struct sflash *sfl;
-       int ret = 0;
-       bool is4712b0;
-       uint32 page, byte, mask;
-
-       if (!len)
-               return 0;
-
-       if ((offset + len) > sflash.size)
-               return -22;
-
-       sfl = &sflash;
-       switch (sfl->type) {
-       case SFLASH_ST:
-               mask = R_REG(NULL, &cc->chipid);
-               is4712b0 = (((mask & CID_ID_MASK) == BCM4712_CHIP_ID) &&
-                           ((mask & CID_REV_MASK) == (3 << CID_REV_SHIFT)));
-               /* Enable writes */
-               sflash_cmd(cc, SFLASH_ST_WREN);
-               if (is4712b0) {
-                       mask = 1 << 14;
-                       W_REG(NULL, &cc->flashaddress, offset);
-                       W_REG(NULL, &cc->flashdata, *buf++);
-                       /* Set chip select */
-                       OR_REG(NULL, &cc->gpioout, mask);
-                       /* Issue a page program with the first byte */
-                       sflash_cmd(cc, SFLASH_ST_PP);
-                       ret = 1;
-                       offset++;
-                       len--;
-                       while (len > 0) {
-                               if ((offset & 255) == 0) {
-                                       /* Page boundary, drop cs and return */
-                                       AND_REG(NULL, &cc->gpioout, ~mask);
-                                       if (!sflash_poll(cc, offset)) {
-                                               /* Flash rejected command */
-                                               return -11;
-                                       }
-                                       return ret;
-                               } else {
-                                       /* Write single byte */
-                                       sflash_cmd(cc, *buf++);
-                               }
-                               ret++;
-                               offset++;
-                               len--;
-                       }
-                       /* All done, drop cs if needed */
-                       if ((offset & 255) != 1) {
-                               /* Drop cs */
-                               AND_REG(NULL, &cc->gpioout, ~mask);
-                               if (!sflash_poll(cc, offset)) {
-                                       /* Flash rejected command */
-                                       return -12;
-                               }
-                       }
-               } else {
-                       ret = 1;
-                       W_REG(NULL, &cc->flashaddress, offset);
-                       W_REG(NULL, &cc->flashdata, *buf);
-                       /* Page program */
-                       sflash_cmd(cc, SFLASH_ST_PP);
-               }
-               break;
-       case SFLASH_AT:
-               mask = sfl->blocksize - 1;
-               page = (offset & ~mask) << 1;
-               byte = offset & mask;
-               /* Read main memory page into buffer 1 */
-               if (byte || (len < sfl->blocksize)) {
-                       W_REG(NULL, &cc->flashaddress, page);
-                       sflash_cmd(cc, SFLASH_AT_BUF1_LOAD);
-                       /* 250 us for AT45DB321B */
-                       SPINWAIT(sflash_poll(cc, offset), 1000);
-                       ASSERT(!sflash_poll(cc, offset));
-               }
-               /* Write into buffer 1 */
-               for (ret = 0; (ret < (int)len) && (byte < sfl->blocksize); ret++) {
-                       W_REG(NULL, &cc->flashaddress, byte++);
-                       W_REG(NULL, &cc->flashdata, *buf++);
-                       sflash_cmd(cc, SFLASH_AT_BUF1_WRITE);
-               }
-               /* Write buffer 1 into main memory page */
-               W_REG(NULL, &cc->flashaddress, page);
-               sflash_cmd(cc, SFLASH_AT_BUF1_PROGRAM);
-               break;
-       }
-
-       return ret;
-}
-
-/* Erase a region. Returns number of bytes scheduled for erasure.
- * Caller should poll for completion.
- */
-int
-sflash_erase(chipcregs_t *cc, uint offset)
-{
-       struct sflash *sfl;
-
-       if (offset >= sflash.size)
-               return -22;
-
-       sfl = &sflash;
-       switch (sfl->type) {
-       case SFLASH_ST:
-               sflash_cmd(cc, SFLASH_ST_WREN);
-               W_REG(NULL, &cc->flashaddress, offset);
-               sflash_cmd(cc, SFLASH_ST_SE);
-               return sfl->blocksize;
-       case SFLASH_AT:
-               W_REG(NULL, &cc->flashaddress, offset << 1);
-               sflash_cmd(cc, SFLASH_AT_PAGE_ERASE);
-               return sfl->blocksize;
-       }
-
-       return 0;
-}
-
-/*
- * writes the appropriate range of flash, a NULL buf simply erases
- * the region of flash
- */
-int
-sflash_commit(chipcregs_t *cc, uint offset, uint len, const uchar *buf)
-{
-       struct sflash *sfl;
-       uchar *block = NULL, *cur_ptr, *blk_ptr;
-       uint blocksize = 0, mask, cur_offset, cur_length, cur_retlen, remainder;
-       uint blk_offset, blk_len, copied;
-       int bytes, ret = 0;
-
-       /* Check address range */
-       if (len <= 0)
-               return 0;
-
-       sfl = &sflash;
-       if ((offset + len) > sfl->size)
-               return -1;
-
-       blocksize = sfl->blocksize;
-       mask = blocksize - 1;
-
-       /* Allocate a block of mem */
-       if (!(block = MALLOC(NULL, blocksize)))
-               return -1;
-
-       while (len) {
-               /* Align offset */
-               cur_offset = offset & ~mask;
-               cur_length = blocksize;
-               cur_ptr = block;
-
-               remainder = blocksize - (offset & mask);
-               if (len < remainder)
-                       cur_retlen = len;
-               else
-                       cur_retlen = remainder;
-
-               /* buf == NULL means erase only */
-               if (buf) {
-                       /* Copy existing data into holding block if necessary */
-                       if ((offset & mask) || (len < blocksize)) {
-                               blk_offset = cur_offset;
-                               blk_len = cur_length;
-                               blk_ptr = cur_ptr;
-
-                               /* Copy entire block */
-                               while (blk_len) {
-                                       copied = sflash_read(cc, blk_offset, blk_len, blk_ptr);
-                                       blk_offset += copied;
-                                       blk_len -= copied;
-                                       blk_ptr += copied;
-                               }
-                       }
-
-                       /* Copy input data into holding block */
-                       memcpy(cur_ptr + (offset & mask), buf, cur_retlen);
-               }
-
-               /* Erase block */
-               if ((ret = sflash_erase(cc, (uint) cur_offset)) < 0)
-                       goto done;
-               while (sflash_poll(cc, (uint) cur_offset));
-
-               /* buf == NULL means erase only */
-               if (!buf) {
-                       offset += cur_retlen;
-                       len -= cur_retlen;
-                       continue;
-               }
-
-               /* Write holding block */
-               while (cur_length > 0) {
-                       if ((bytes = sflash_write(cc,
-                                                 (uint) cur_offset,
-                                                 (uint) cur_length,
-                                                 (uchar *) cur_ptr)) < 0) {
-                               ret = bytes;
-                               goto done;
-                       }
-                       while (sflash_poll(cc, (uint) cur_offset));
-                       cur_offset += bytes;
-                       cur_length -= bytes;
-                       cur_ptr += bytes;
-               }
-
-               offset += cur_retlen;
-               len -= cur_retlen;
-               buf += cur_retlen;
-       }
-
-       ret = len;
-done:
-       if (block)
-               MFREE(NULL, block, blocksize);
-       return ret;
-}
index 9c502be5802bf96091a7bf6d37fa23b9c1171d12..03d5c85651c8461e3fd8c9e82e055c9f8b8e3d26 100644 (file)
 #include <osl.h>
 #include <bcmnvram.h>
 #include <sbconfig.h>
-#include <sbextif.h>
 #include <sbutils.h>
+#include <sbchipc.h>
 #include <hndmips.h>
 #include <mipsinc.h>
 #include <hndcpu.h>
+#include <bcmdevs.h>
 
 /* Global SB handle */
 extern void *bcm947xx_sbh;
@@ -39,13 +40,11 @@ extern spinlock_t bcm947xx_sbh_lock;
 
 extern int panic_timeout;
 static int watchdog = 0;
-static u8 *mcr = NULL;
 
 void __init
 bcm947xx_time_init(void)
 {
        unsigned int hz;
-       extifregs_t *eir;
 
        /*
         * Use deterministic values for initial counter interrupt
@@ -83,8 +82,13 @@ bcm947xx_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        timer_interrupt(irq, dev_id, regs);
 
        /* Set the watchdog timer to reset after the specified number of ms */
-       if (watchdog > 0)
-               sb_watchdog(sbh, WATCHDOG_CLOCK / 1000 * watchdog);
+       if (watchdog > 0) {
+               if (sb_chip(sbh) == BCM5354_CHIP_ID)
+                       sb_watchdog(sbh, WATCHDOG_CLOCK_5354 / 1000 * watchdog);
+               else
+                       sb_watchdog(sbh, WATCHDOG_CLOCK / 1000 * watchdog);
+       }
+       
 }
 
 static struct irqaction bcm947xx_timer_irqaction = {
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.c b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.c
new file mode 100644 (file)
index 0000000..418671d
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ * Driver O/S-independent utility routines
+ *
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
+ * $Id$
+ */
+
+#include <typedefs.h>
+#include <bcmdefs.h>
+#include <stdarg.h>
+#include <osl.h>
+#include <sbutils.h>
+#include <bcmendian.h>
+#include "utils.h"
+
+/*******************************************************************************
+ * crc8
+ *
+ * Computes a crc8 over the input data using the polynomial:
+ *
+ *       x^8 + x^7 +x^6 + x^4 + x^2 + 1
+ *
+ * The caller provides the initial value (either CRC8_INIT_VALUE
+ * or the previous returned value) to allow for processing of
+ * discontiguous blocks of data.  When generating the CRC the
+ * caller is responsible for complementing the final return value
+ * and inserting it into the byte stream.  When checking, a final
+ * return value of CRC8_GOOD_VALUE indicates a valid CRC.
+ *
+ * Reference: Dallas Semiconductor Application Note 27
+ *   Williams, Ross N., "A Painless Guide to CRC Error Detection Algorithms",
+ *     ver 3, Aug 1993, ross@guest.adelaide.edu.au, Rocksoft Pty Ltd.,
+ *     ftp://ftp.rocksoft.com/clients/rocksoft/papers/crc_v3.txt
+ *
+ * ****************************************************************************
+ */
+
+static const uint8 crc8_table[256] = {
+  0x00, 0xF7, 0xB9, 0x4E, 0x25, 0xD2, 0x9C, 0x6B,
+  0x4A, 0xBD, 0xF3, 0x04, 0x6F, 0x98, 0xD6, 0x21,
+  0x94, 0x63, 0x2D, 0xDA, 0xB1, 0x46, 0x08, 0xFF,
+  0xDE, 0x29, 0x67, 0x90, 0xFB, 0x0C, 0x42, 0xB5,
+  0x7F, 0x88, 0xC6, 0x31, 0x5A, 0xAD, 0xE3, 0x14,
+  0x35, 0xC2, 0x8C, 0x7B, 0x10, 0xE7, 0xA9, 0x5E,
+  0xEB, 0x1C, 0x52, 0xA5, 0xCE, 0x39, 0x77, 0x80,
+  0xA1, 0x56, 0x18, 0xEF, 0x84, 0x73, 0x3D, 0xCA,
+  0xFE, 0x09, 0x47, 0xB0, 0xDB, 0x2C, 0x62, 0x95,
+  0xB4, 0x43, 0x0D, 0xFA, 0x91, 0x66, 0x28, 0xDF,
+  0x6A, 0x9D, 0xD3, 0x24, 0x4F, 0xB8, 0xF6, 0x01,
+  0x20, 0xD7, 0x99, 0x6E, 0x05, 0xF2, 0xBC, 0x4B,
+  0x81, 0x76, 0x38, 0xCF, 0xA4, 0x53, 0x1D, 0xEA,
+  0xCB, 0x3C, 0x72, 0x85, 0xEE, 0x19, 0x57, 0xA0,
+  0x15, 0xE2, 0xAC, 0x5B, 0x30, 0xC7, 0x89, 0x7E,
+  0x5F, 0xA8, 0xE6, 0x11, 0x7A, 0x8D, 0xC3, 0x34,
+  0xAB, 0x5C, 0x12, 0xE5, 0x8E, 0x79, 0x37, 0xC0,
+  0xE1, 0x16, 0x58, 0xAF, 0xC4, 0x33, 0x7D, 0x8A,
+  0x3F, 0xC8, 0x86, 0x71, 0x1A, 0xED, 0xA3, 0x54,
+  0x75, 0x82, 0xCC, 0x3B, 0x50, 0xA7, 0xE9, 0x1E,
+  0xD4, 0x23, 0x6D, 0x9A, 0xF1, 0x06, 0x48, 0xBF,
+  0x9E, 0x69, 0x27, 0xD0, 0xBB, 0x4C, 0x02, 0xF5,
+  0x40, 0xB7, 0xF9, 0x0E, 0x65, 0x92, 0xDC, 0x2B,
+  0x0A, 0xFD, 0xB3, 0x44, 0x2F, 0xD8, 0x96, 0x61,
+  0x55, 0xA2, 0xEC, 0x1B, 0x70, 0x87, 0xC9, 0x3E,
+  0x1F, 0xE8, 0xA6, 0x51, 0x3A, 0xCD, 0x83, 0x74,
+  0xC1, 0x36, 0x78, 0x8F, 0xE4, 0x13, 0x5D, 0xAA,
+  0x8B, 0x7C, 0x32, 0xC5, 0xAE, 0x59, 0x17, 0xE0,
+  0x2A, 0xDD, 0x93, 0x64, 0x0F, 0xF8, 0xB6, 0x41,
+  0x60, 0x97, 0xD9, 0x2E, 0x45, 0xB2, 0xFC, 0x0B,
+  0xBE, 0x49, 0x07, 0xF0, 0x9B, 0x6C, 0x22, 0xD5,
+  0xF4, 0x03, 0x4D, 0xBA, 0xD1, 0x26, 0x68, 0x9F
+};
+
+#define CRC_INNER_LOOP(n, c, x) \
+       (c) = ((c) >> 8) ^ crc##n##_table[((c) ^ (x)) & 0xff]
+
+
+uint8 hndcrc8 (uint8 * pdata,  /* pointer to array of data to process */
+                         uint nbytes,  /* number of input data bytes to process */
+                         uint8 crc     /* either CRC8_INIT_VALUE or previous return value */
+  )
+{
+  /* hard code the crc loop instead of using CRC_INNER_LOOP macro
+   * to avoid the undefined and unnecessary (uint8 >> 8) operation.
+   */
+  while (nbytes-- > 0)
+    crc = crc8_table[(crc ^ *pdata++) & 0xff];
+
+  return crc;
+}
+
+char *
+bcm_ether_ntoa (struct ether_addr *ea, char *buf)
+{
+  snprintf (buf, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
+           ea->octet[0] & 0xff, ea->octet[1] & 0xff, ea->octet[2] & 0xff,
+           ea->octet[3] & 0xff, ea->octet[4] & 0xff, ea->octet[5] & 0xff);
+  return (buf);
+}
+
diff --git a/target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.h b/target/linux/brcm-2.4/files/arch/mips/bcm947xx/utils.h
new file mode 100644 (file)
index 0000000..907c82c
--- /dev/null
@@ -0,0 +1,65 @@
+#ifndef __bcm_utils_h
+#define __bcm_utils_h
+
+#define BCME_STRLEN            64      /* Max string length for BCM errors */
+#define VALID_BCMERROR(e)  ((e <= 0) && (e >= BCME_LAST))
+
+/*
+ * error codes could be added but the defined ones shouldn't be changed/deleted
+ * these error codes are exposed to the user code
+ * when ever a new error code is added to this list
+ * please update errorstring table with the related error string and
+ * update osl files with os specific errorcode map
+*/
+
+#define BCME_OK                                0       /* Success */
+#define BCME_ERROR                     -1      /* Error generic */
+#define BCME_BADARG                    -2      /* Bad Argument */
+#define BCME_BADOPTION                 -3      /* Bad option */
+#define BCME_NOTUP                     -4      /* Not up */
+#define BCME_NOTDOWN                   -5      /* Not down */
+#define BCME_NOTAP                     -6      /* Not AP */
+#define BCME_NOTSTA                    -7      /* Not STA  */
+#define BCME_BADKEYIDX                 -8      /* BAD Key Index */
+#define BCME_RADIOOFF                  -9      /* Radio Off */
+#define BCME_NOTBANDLOCKED             -10     /* Not  band locked */
+#define BCME_NOCLK                     -11     /* No Clock */
+#define BCME_BADRATESET                        -12     /* BAD Rate valueset */
+#define BCME_BADBAND                   -13     /* BAD Band */
+#define BCME_BUFTOOSHORT               -14     /* Buffer too short */
+#define BCME_BUFTOOLONG                        -15     /* Buffer too long */
+#define BCME_BUSY                      -16     /* Busy */
+#define BCME_NOTASSOCIATED             -17     /* Not Associated */
+#define BCME_BADSSIDLEN                        -18     /* Bad SSID len */
+#define BCME_OUTOFRANGECHAN            -19     /* Out of Range Channel */
+#define BCME_BADCHAN                   -20     /* Bad Channel */
+#define BCME_BADADDR                   -21     /* Bad Address */
+#define BCME_NORESOURCE                        -22     /* Not Enough Resources */
+#define BCME_UNSUPPORTED               -23     /* Unsupported */
+#define BCME_BADLEN                    -24     /* Bad length */
+#define BCME_NOTREADY                  -25     /* Not Ready */
+#define BCME_EPERM                     -26     /* Not Permitted */
+#define BCME_NOMEM                     -27     /* No Memory */
+#define BCME_ASSOCIATED                        -28     /* Associated */
+#define BCME_RANGE                     -29     /* Not In Range */
+#define BCME_NOTFOUND                  -30     /* Not Found */
+#define BCME_WME_NOT_ENABLED           -31     /* WME Not Enabled */
+#define BCME_TSPEC_NOTFOUND            -32     /* TSPEC Not Found */
+#define BCME_ACM_NOTSUPPORTED          -33     /* ACM Not Supported */
+#define BCME_NOT_WME_ASSOCIATION       -34     /* Not WME Association */
+#define BCME_SDIO_ERROR                        -35     /* SDIO Bus Error */
+#define BCME_DONGLE_DOWN               -36     /* Dongle Not Accessible */
+#define BCME_VERSION                   -37 /* Incorrect version */
+#define BCME_LAST                      BCME_VERSION
+
+/* buffer length for ethernet address from bcm_ether_ntoa() */
+#define ETHER_ADDR_STR_LEN     18      /* 18-bytes of Ethernet address buffer length */
+
+struct ether_addr {
+       unsigned char octet[6];
+};
+
+extern uint8 hndcrc8(uint8 *p, uint nbytes, uint8 crc);
+
+#endif /* __bcm_utils_h */
+
index a987388ab239d7af554d38ceb1581872c6beaf74..62c7802221d976fac9ce1185243b6cc7269046be 100644 (file)
 /*
  * Broadcom SiliconBackplane chipcommon serial flash interface
  *
- * Copyright 2001-2003, Broadcom Corporation   
- * All Rights Reserved.   
- *    
- * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY   
- * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM   
- * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS   
- * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.   
+ * Copyright 2007, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
+ * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
+ * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
+ * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
  *
- * $Id: sflash.c,v 1.1.1.3 2003/11/10 17:43:38 hyin Exp $
+ * $Id$
  */
 
-#include <linux/config.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/ioport.h>
-#include <linux/mtd/compatmac.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/errno.h>
-#include <linux/pci.h>
-#include <linux/delay.h>
-#include <asm/io.h>
-
-#ifdef CONFIG_MTD_PARTITIONS
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/partitions.h>
-#include <linux/minix_fs.h>
-#include <linux/ext2_fs.h>
-#include <linux/romfs_fs.h>
-#include <linux/cramfs_fs.h>
-#include <linux/jffs2.h>
-#endif
-
 #include <typedefs.h>
-#include <bcmdevs.h>
-#include <bcmutils.h>
 #include <osl.h>
-#include <bcmutils.h>
-#include <bcmnvram.h>
+#include <sbutils.h>
 #include <sbconfig.h>
 #include <sbchipc.h>
+#include <bcmdevs.h>
 #include <sflash.h>
-#include <trxhdr.h>
-
-#ifdef CONFIG_MTD_PARTITIONS
-extern struct mtd_partition * init_mtd_partitions(struct mtd_info *mtd, size_t size);
-#endif
-
-struct sflash_mtd {
-       chipcregs_t *cc;
-       struct semaphore lock;
-       struct mtd_info mtd;
-       struct mtd_erase_region_info regions[1];
-};
 
 /* Private global state */
-static struct sflash_mtd sflash;
+static struct sflash sflash;
 
-static int
-sflash_mtd_poll(struct sflash_mtd *sflash, unsigned int offset, int timeout)
+/* Issue a serial flash command */
+static INLINE void
+sflash_cmd (osl_t * osh, chipcregs_t * cc, uint opcode)
 {
-       int now = jiffies;
-       int ret = 0;
+  W_REG (osh, &cc->flashcontrol, SFLASH_START | opcode);
+  while (R_REG (osh, &cc->flashcontrol) & SFLASH_BUSY);
+}
 
-       for (;;) {
-               if (!sflash_poll(sflash->cc, offset)) {
-                       ret = 0;
-                       break;
-               }
-               if (time_after(jiffies, now + timeout)) {
-                       printk(KERN_ERR "sflash: timeout\n");
-                       ret = -ETIMEDOUT;
-                       break;
-               }
-               if (current->need_resched) {
-                       set_current_state(TASK_UNINTERRUPTIBLE);
-                       schedule_timeout(timeout / 10);
-               } else
-                       udelay(1);
+/* Initialize serial flash access */
+struct sflash *
+sflash_init (sb_t * sbh, chipcregs_t * cc)
+{
+  uint32 id, id2;
+  osl_t *osh;
+
+  ASSERT (sbh);
+
+  osh = sb_osh (sbh);
+
+  bzero (&sflash, sizeof (sflash));
+
+  sflash.type = sbh->cccaps & CC_CAP_FLASH_MASK;
+
+  switch (sflash.type)
+    {
+    case SFLASH_ST:
+      /* Probe for ST chips */
+      sflash_cmd (osh, cc, SFLASH_ST_DP);
+      sflash_cmd (osh, cc, SFLASH_ST_RES);
+      id = R_REG (osh, &cc->flashdata);
+      switch (id)
+       {
+       case 0x11:
+         /* ST M25P20 2 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 4;
+         break;
+       case 0x12:
+         /* ST M25P40 4 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 8;
+         break;
+       case 0x13:
+         /* ST M25P80 8 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 16;
+         break;
+       case 0x14:
+         /* ST M25P16 16 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 32;
+         break;
+       case 0x15:
+         /* ST M25P32 32 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 64;
+         break;
+       case 0x16:
+         /* ST M25P64 64 Mbit Serial Flash */
+         sflash.blocksize = 64 * 1024;
+         sflash.numblocks = 128;
+         break;
+       case 0xbf:
+         W_REG (osh, &cc->flashaddress, 1);
+         sflash_cmd (osh, cc, SFLASH_ST_RES);
+         id2 = R_REG (osh, &cc->flashdata);
+         if (id2 == 0x44)
+           {
+             /* SST M25VF80 4 Mbit Serial Flash */
+             sflash.blocksize = 64 * 1024;
+             sflash.numblocks = 8;
+           }
+         break;
        }
+      break;
+
+    case SFLASH_AT:
+      /* Probe for Atmel chips */
+      sflash_cmd (osh, cc, SFLASH_AT_STATUS);
+      id = R_REG (osh, &cc->flashdata) & 0x3c;
+      switch (id)
+       {
+       case 0xc:
+         /* Atmel AT45DB011 1Mbit Serial Flash */
+         sflash.blocksize = 256;
+         sflash.numblocks = 512;
+         break;
+       case 0x14:
+         /* Atmel AT45DB021 2Mbit Serial Flash */
+         sflash.blocksize = 256;
+         sflash.numblocks = 1024;
+         break;
+       case 0x1c:
+         /* Atmel AT45DB041 4Mbit Serial Flash */
+         sflash.blocksize = 256;
+         sflash.numblocks = 2048;
+         break;
+       case 0x24:
+         /* Atmel AT45DB081 8Mbit Serial Flash */
+         sflash.blocksize = 256;
+         sflash.numblocks = 4096;
+         break;
+       case 0x2c:
+         /* Atmel AT45DB161 16Mbit Serial Flash */
+         sflash.blocksize = 512;
+         sflash.numblocks = 4096;
+         break;
+       case 0x34:
+         /* Atmel AT45DB321 32Mbit Serial Flash */
+         sflash.blocksize = 512;
+         sflash.numblocks = 8192;
+         break;
+       case 0x3c:
+         /* Atmel AT45DB642 64Mbit Serial Flash */
+         sflash.blocksize = 1024;
+         sflash.numblocks = 8192;
+         break;
+       }
+      break;
+    }
 
-       return ret;
+  sflash.size = sflash.blocksize * sflash.numblocks;
+  return sflash.size ? &sflash : NULL;
 }
 
-static int
-sflash_mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
+/* Read len bytes starting at offset into buf. Returns number of bytes read. */
+int
+sflash_read (sb_t * sbh, chipcregs_t * cc, uint offset, uint len, uchar * buf)
 {
-       struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
-       int bytes, ret = 0;
-
-       /* Check address range */
-       if (!len)
-               return 0;
-       if ((from + len) > mtd->size)
-               return -EINVAL;
-       
-       down(&sflash->lock);
-
-       *retlen = 0;
-       while (len) {
-               if ((bytes = sflash_read(sflash->cc, (uint) from, len, buf)) < 0) {
-                       ret = bytes;
-                       break;
-               }
-               from += (loff_t) bytes;
-               len -= bytes;
-               buf += bytes;
-               *retlen += bytes;
-       }
+  uint8 *from, *to;
+  int cnt, i;
+  osl_t *osh;
 
-       up(&sflash->lock);
+  ASSERT (sbh);
 
-       return ret;
-}
+  if (!len)
+    return 0;
 
-static int
-sflash_mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)
-{
-       struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
-       int bytes, ret = 0;
-
-       /* Check address range */
-       if (!len)
-               return 0;
-       if ((to + len) > mtd->size)
-               return -EINVAL;
-
-       down(&sflash->lock);
-
-       *retlen = 0;
-       while (len) {
-               if ((bytes = sflash_write(sflash->cc, (uint) to, len, buf)) < 0) {
-                       ret = bytes;
-                       break;
-               }
-               if ((ret = sflash_mtd_poll(sflash, (unsigned int) to, HZ / 10)))
-                       break;
-               to += (loff_t) bytes;
-               len -= bytes;
-               buf += bytes;
-               *retlen += bytes;
-       }
+  if ((offset + len) > sflash.size)
+    return -22;
+
+  if ((len >= 4) && (offset & 3))
+    cnt = 4 - (offset & 3);
+  else if ((len >= 4) && ((uintptr) buf & 3))
+    cnt = 4 - ((uintptr) buf & 3);
+  else
+    cnt = len;
+
+  osh = sb_osh (sbh);
 
-       up(&sflash->lock);
+  from = (uint8 *) (uintptr) OSL_UNCACHED (SB_FLASH2 + offset);
+  to = (uint8 *) buf;
 
-       return ret;
+  if (cnt < 4)
+    {
+      for (i = 0; i < cnt; i++)
+       {
+         *to = R_REG (osh, from);
+         from++;
+         to++;
+       }
+      return cnt;
+    }
+
+  while (cnt >= 4)
+    {
+      *(uint32 *) to = R_REG (osh, (uint32 *) from);
+      from += 4;
+      to += 4;
+      cnt -= 4;
+    }
+
+  return (len - cnt);
 }
 
-static int
-sflash_mtd_erase(struct mtd_info *mtd, struct erase_info *erase)
+/* Poll for command completion. Returns zero when complete. */
+int
+sflash_poll (sb_t * sbh, chipcregs_t * cc, uint offset)
 {
-       struct sflash_mtd *sflash = (struct sflash_mtd *) mtd->priv;
-       int i, j, ret = 0;
-       unsigned int addr, len;
-
-       /* Check address range */
-       if (!erase->len)
-               return 0;
-       if ((erase->addr + erase->len) > mtd->size)
-               return -EINVAL;
-
-       addr = erase->addr;
-       len = erase->len;
-
-       down(&sflash->lock);
-
-       /* Ensure that requested region is aligned */
-       for (i = 0; i < mtd->numeraseregions; i++) {
-               for (j = 0; j < mtd->eraseregions[i].numblocks; j++) {
-                       if (addr == mtd->eraseregions[i].offset + mtd->eraseregions[i].erasesize * j &&
-                           len >= mtd->eraseregions[i].erasesize) {
-                               if ((ret = sflash_erase(sflash->cc, addr)) < 0)
-                                       break;
-                               if ((ret = sflash_mtd_poll(sflash, addr, 10 * HZ)))
-                                       break;
-                               addr += mtd->eraseregions[i].erasesize;
-                               len -= mtd->eraseregions[i].erasesize;
-                       }
-               }
-               if (ret)
-                       break;
-       }
+  osl_t *osh;
 
-       up(&sflash->lock);
+  ASSERT (sbh);
 
-       /* Set erase status */
-       if (ret)
-               erase->state = MTD_ERASE_FAILED;
-       else 
-               erase->state = MTD_ERASE_DONE;
+  osh = sb_osh (sbh);
 
-       /* Call erase callback */
-       if (erase->callback)
-               erase->callback(erase);
+  if (offset >= sflash.size)
+    return -22;
 
-       return ret;
-}
+  switch (sflash.type)
+    {
+    case SFLASH_ST:
+      /* Check for ST Write In Progress bit */
+      sflash_cmd (osh, cc, SFLASH_ST_RDSR);
+      return R_REG (osh, &cc->flashdata) & SFLASH_ST_WIP;
+    case SFLASH_AT:
+      /* Check for Atmel Ready bit */
+      sflash_cmd (osh, cc, SFLASH_AT_STATUS);
+      return !(R_REG (osh, &cc->flashdata) & SFLASH_AT_READY);
+    }
 
-#if LINUX_VERSION_CODE < 0x20212 && defined(MODULE)
-#define sflash_mtd_init init_module
-#define sflash_mtd_exit cleanup_module
-#endif
+  return 0;
+}
 
-mod_init_t
-sflash_mtd_init(void)
+/* Write len bytes starting at offset into buf. Returns number of bytes
+ * written. Caller should poll for completion.
+ */
+int
+sflash_write (sb_t * sbh, chipcregs_t * cc, uint offset, uint len,
+             const uchar * buf)
 {
-       struct pci_dev *pdev;
-       int ret = 0;
-       struct sflash *info;
-       uint bank, i;
-#ifdef CONFIG_MTD_PARTITIONS
-       struct mtd_partition *parts;
-#endif
-
-       if (!(pdev = pci_find_device(VENDOR_BROADCOM, SB_CC, NULL))) {
-               printk(KERN_ERR "sflash: chipcommon not found\n");
-               return -ENODEV;
+  struct sflash *sfl;
+  int ret = 0;
+  bool is4712b0;
+  uint32 page, byte, mask;
+  osl_t *osh;
+
+  ASSERT (sbh);
+
+  osh = sb_osh (sbh);
+
+  if (!len)
+    return 0;
+
+  if ((offset + len) > sflash.size)
+    return -22;
+
+  sfl = &sflash;
+  switch (sfl->type)
+    {
+    case SFLASH_ST:
+      is4712b0 = (sbh->chip == BCM4712_CHIP_ID) && (sbh->chiprev == 3);
+      /* Enable writes */
+      sflash_cmd (osh, cc, SFLASH_ST_WREN);
+      if (is4712b0)
+       {
+         mask = 1 << 14;
+         W_REG (osh, &cc->flashaddress, offset);
+         W_REG (osh, &cc->flashdata, *buf++);
+         /* Set chip select */
+         OR_REG (osh, &cc->gpioout, mask);
+         /* Issue a page program with the first byte */
+         sflash_cmd (osh, cc, SFLASH_ST_PP);
+         ret = 1;
+         offset++;
+         len--;
+         while (len > 0)
+           {
+             if ((offset & 255) == 0)
+               {
+                 /* Page boundary, drop cs and return */
+                 AND_REG (osh, &cc->gpioout, ~mask);
+                 if (!sflash_poll (sbh, cc, offset))
+                   {
+                     /* Flash rejected command */
+                     return -11;
+                   }
+                 return ret;
+               }
+             else
+               {
+                 /* Write single byte */
+                 sflash_cmd (osh, cc, *buf++);
+               }
+             ret++;
+             offset++;
+             len--;
+           }
+         /* All done, drop cs if needed */
+         if ((offset & 255) != 1)
+           {
+             /* Drop cs */
+             AND_REG (osh, &cc->gpioout, ~mask);
+             if (!sflash_poll (sbh, cc, offset))
+               {
+                 /* Flash rejected command */
+                 return -12;
+               }
+           }
+       }
+      else if (sbh->ccrev >= 20)
+       {
+         W_REG (NULL, &cc->flashaddress, offset);
+         W_REG (NULL, &cc->flashdata, *buf++);
+         /* Issue a page program with CSA bit set */
+         sflash_cmd (osh, cc, SFLASH_ST_CSA | SFLASH_ST_PP);
+         ret = 1;
+         offset++;
+         len--;
+         while (len > 0)
+           {
+             if ((offset & 255) == 0)
+               {
+                 /* Page boundary, poll droping cs and return */
+                 W_REG (NULL, &cc->flashcontrol, 0);
+                 if (!sflash_poll (sbh, cc, offset))
+                   {
+                     /* Flash rejected command */
+                     return -11;
+                   }
+                 return ret;
+               }
+             else
+               {
+                 /* Write single byte */
+                 sflash_cmd (osh, cc, SFLASH_ST_CSA | *buf++);
+               }
+             ret++;
+             offset++;
+             len--;
+           }
+         /* All done, drop cs if needed */
+         if ((offset & 255) != 1)
+           {
+             /* Drop cs, poll */
+             W_REG (NULL, &cc->flashcontrol, 0);
+             if (!sflash_poll (sbh, cc, offset))
+               {
+                 /* Flash rejected command */
+                 return -12;
+               }
+           }
+       }
+      else
+       {
+         ret = 1;
+         W_REG (osh, &cc->flashaddress, offset);
+         W_REG (osh, &cc->flashdata, *buf);
+         /* Page program */
+         sflash_cmd (osh, cc, SFLASH_ST_PP);
+       }
+      break;
+    case SFLASH_AT:
+      mask = sfl->blocksize - 1;
+      page = (offset & ~mask) << 1;
+      byte = offset & mask;
+      /* Read main memory page into buffer 1 */
+      if (byte || (len < sfl->blocksize))
+       {
+         W_REG (osh, &cc->flashaddress, page);
+         sflash_cmd (osh, cc, SFLASH_AT_BUF1_LOAD);
+         /* 250 us for AT45DB321B */
+         SPINWAIT (sflash_poll (sbh, cc, offset), 1000);
+         ASSERT (!sflash_poll (sbh, cc, offset));
        }
+      /* Write into buffer 1 */
+      for (ret = 0; (ret < (int) len) && (byte < sfl->blocksize); ret++)
+       {
+         W_REG (osh, &cc->flashaddress, byte++);
+         W_REG (osh, &cc->flashdata, *buf++);
+         sflash_cmd (osh, cc, SFLASH_AT_BUF1_WRITE);
+       }
+      /* Write buffer 1 into main memory page */
+      W_REG (osh, &cc->flashaddress, page);
+      sflash_cmd (osh, cc, SFLASH_AT_BUF1_PROGRAM);
+      break;
+    }
 
-       memset(&sflash, 0, sizeof(struct sflash_mtd));
-       init_MUTEX(&sflash.lock);
+  return ret;
+}
 
-       /* Map registers and flash base */
-       if (!(sflash.cc = ioremap_nocache(pci_resource_start(pdev, 0),
-                                         pci_resource_len(pdev, 0)))) {
-               printk(KERN_ERR "sflash: error mapping registers\n");
-               ret = -EIO;
-               goto fail;
-       }
+/* Erase a region. Returns number of bytes scheduled for erasure.
+ * Caller should poll for completion.
+ */
+int
+sflash_erase (sb_t * sbh, chipcregs_t * cc, uint offset)
+{
+  struct sflash *sfl;
+  osl_t *osh;
+
+  ASSERT (sbh);
+
+  osh = sb_osh (sbh);
+
+  if (offset >= sflash.size)
+    return -22;
+
+  sfl = &sflash;
+  switch (sfl->type)
+    {
+    case SFLASH_ST:
+      sflash_cmd (osh, cc, SFLASH_ST_WREN);
+      W_REG (osh, &cc->flashaddress, offset);
+      sflash_cmd (osh, cc, SFLASH_ST_SE);
+      return sfl->blocksize;
+    case SFLASH_AT:
+      W_REG (osh, &cc->flashaddress, offset << 1);
+      sflash_cmd (osh, cc, SFLASH_AT_PAGE_ERASE);
+      return sfl->blocksize;
+    }
+
+  return 0;
+}
 
-       /* Initialize serial flash access */
-       info = sflash_init(sflash.cc);
+/*
+ * writes the appropriate range of flash, a NULL buf simply erases
+ * the region of flash
+ */
+int
+sflash_commit (sb_t * sbh, chipcregs_t * cc, uint offset, uint len,
+              const uchar * buf)
+{
+  struct sflash *sfl;
+  uchar *block = NULL, *cur_ptr, *blk_ptr;
+  uint blocksize = 0, mask, cur_offset, cur_length, cur_retlen, remainder;
+  uint blk_offset, blk_len, copied;
+  int bytes, ret = 0;
+  osl_t *osh;
+
+  ASSERT (sbh);
+
+  osh = sb_osh (sbh);
+
+  /* Check address range */
+  if (len <= 0)
+    return 0;
+
+  sfl = &sflash;
+  if ((offset + len) > sfl->size)
+    return -1;
+
+  blocksize = sfl->blocksize;
+  mask = blocksize - 1;
+
+  /* Allocate a block of mem */
+  if (!(block = MALLOC (osh, blocksize)))
+    return -1;
+
+  while (len)
+    {
+      /* Align offset */
+      cur_offset = offset & ~mask;
+      cur_length = blocksize;
+      cur_ptr = block;
+
+      remainder = blocksize - (offset & mask);
+      if (len < remainder)
+       cur_retlen = len;
+      else
+       cur_retlen = remainder;
+
+      /* buf == NULL means erase only */
+      if (buf)
+       {
+         /* Copy existing data into holding block if necessary */
+         if ((offset & mask) || (len < blocksize))
+           {
+             blk_offset = cur_offset;
+             blk_len = cur_length;
+             blk_ptr = cur_ptr;
+
+             /* Copy entire block */
+             while (blk_len)
+               {
+                 copied =
+                   sflash_read (sbh, cc, blk_offset, blk_len, blk_ptr);
+                 blk_offset += copied;
+                 blk_len -= copied;
+                 blk_ptr += copied;
+               }
+           }
 
-       if (!info) {
-               printk(KERN_ERR "sflash: found no supported devices\n");
-               ret = -ENODEV;
-               goto fail;
+         /* Copy input data into holding block */
+         memcpy (cur_ptr + (offset & mask), buf, cur_retlen);
        }
 
-       /* Setup banks */
-       sflash.regions[0].offset = 0;
-       sflash.regions[0].erasesize = info->blocksize;
-       sflash.regions[0].numblocks = info->numblocks;
-       if (sflash.regions[0].erasesize > sflash.mtd.erasesize)
-               sflash.mtd.erasesize = sflash.regions[0].erasesize;
-       if (sflash.regions[0].erasesize * sflash.regions[0].numblocks) {
-               sflash.mtd.size += sflash.regions[0].erasesize * sflash.regions[0].numblocks;
-       }
-       sflash.mtd.numeraseregions = 1;
-       ASSERT(sflash.mtd.size == info->size);
-
-       /* Register with MTD */
-       sflash.mtd.name = "sflash";
-       sflash.mtd.type = MTD_NORFLASH;
-       sflash.mtd.flags = MTD_CAP_NORFLASH;
-       sflash.mtd.eraseregions = sflash.regions;
-       sflash.mtd.module = THIS_MODULE;
-       sflash.mtd.erase = sflash_mtd_erase;
-       sflash.mtd.read = sflash_mtd_read;
-       sflash.mtd.write = sflash_mtd_write;
-       sflash.mtd.priv = &sflash;
-
-#ifdef CONFIG_MTD_PARTITIONS
-       parts = init_mtd_partitions(&sflash.mtd, sflash.mtd.size);
-       for (i = 0; parts[i].name; i++);
-       ret = add_mtd_partitions(&sflash.mtd, parts, i);
-#else
-       ret = add_mtd_device(&sflash.mtd);
-#endif
-       if (ret) {
-               printk(KERN_ERR "sflash: add_mtd failed\n");
-               goto fail;
+      /* Erase block */
+      if ((ret = sflash_erase (sbh, cc, (uint) cur_offset)) < 0)
+       goto done;
+      while (sflash_poll (sbh, cc, (uint) cur_offset));
+
+      /* buf == NULL means erase only */
+      if (!buf)
+       {
+         offset += cur_retlen;
+         len -= cur_retlen;
+         continue;
        }
 
-       return 0;
+      /* Write holding block */
+      while (cur_length > 0)
+       {
+         if ((bytes = sflash_write (sbh, cc,
+                                    (uint) cur_offset,
+                                    (uint) cur_length,
+                                    (uchar *) cur_ptr)) < 0)
+           {
+             ret = bytes;
+             goto done;
+           }
+         while (sflash_poll (sbh, cc, (uint) cur_offset));
+         cur_offset += bytes;
+         cur_length -= bytes;
+         cur_ptr += bytes;
+       }
 
- fail:
-       if (sflash.cc)
-               iounmap((void *) sflash.cc);
-       return ret;
-}
+      offset += cur_retlen;
+      len -= cur_retlen;
+      buf += cur_retlen;
+    }
 
-mod_exit_t
-sflash_mtd_exit(void)
-{
-#ifdef CONFIG_MTD_PARTITIONS
-       del_mtd_partitions(&sflash.mtd);
-#else
-       del_mtd_device(&sflash.mtd);
-#endif
-       iounmap((void *) sflash.cc);
+  ret = len;
+done:
+  if (block)
+    MFREE (osh, block, blocksize);
+  return ret;
 }
-
-module_init(sflash_mtd_init);
-module_exit(sflash_mtd_exit);
index 1641784681919bd49591f3c755a09237e4f4ce5b..eea7f137d7a7c926597c66de404e9f7031f34a61 100644 (file)
@@ -56,7 +56,6 @@
 #include <typedefs.h>
 #include <osl.h>
 #include <bcmnvram.h>
-#include <bcmutils.h>
 #include <sbconfig.h>
 #include <sbchipc.h>
 #include <sbutils.h>
@@ -470,7 +469,7 @@ mod_init_t init_bcm947xx_map(void)
 
        /* Check strapping option if chipcommon exists */
        if ((cc = sb_setcore(sbh, SB_CC, 0))) {
-               fltype = readl(&cc->capabilities) & CAP_FLASH_MASK;
+               fltype = readl(&cc->capabilities) & CC_CAP_FLASH_MASK;
                if (fltype == PFLASH) {
                        bcm947xx_map.map_priv_2 = 1;
                        window_addr = 0x1c000000;
index 96d340b260ad9a39a9a173d0478faff1a6089a2e..351fe28804dba97da430ba413ebae22fe58147c8 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/arch/mips/config-shared.in linux.dev/arch/mips/config-shared.in
---- linux.old/arch/mips/config-shared.in       2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/config-shared.in       2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in     2007-12-15 05:19:53.151449966 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in  2007-12-15 05:20:13.936634447 +0100
 @@ -208,6 +208,14 @@
     fi
     define_bool CONFIG_MIPS_RTC y
@@ -54,9 +55,10 @@ diff -urN linux.old/arch/mips/config-shared.in linux.dev/arch/mips/config-shared
  dep_bool '  Console output to GDB' CONFIG_GDB_CONSOLE $CONFIG_KGDB
  if [ "$CONFIG_KGDB" = "y" ]; then
     define_bool CONFIG_DEBUG_INFO y
-diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu-probe.c
---- linux.old/arch/mips/kernel/cpu-probe.c     2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/cpu-probe.c     2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/cpu-probe.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/cpu-probe.c   2007-12-15 05:19:44.862977633 +0100
++++ linux-2.4.35.4/arch/mips/kernel/cpu-probe.c        2007-12-15 05:20:13.944634901 +0100
 @@ -162,7 +162,7 @@
  
  static inline void cpu_probe_legacy(struct cpuinfo_mips *c)
@@ -176,9 +178,10 @@ diff -urN linux.old/arch/mips/kernel/cpu-probe.c linux.dev/arch/mips/kernel/cpu-
        case PRID_COMP_SIBYTE:
                cpu_probe_sibyte(c);
                break;
-diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S
---- linux.old/arch/mips/kernel/head.S  2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/head.S  2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/head.S        2007-12-15 05:19:44.866977862 +0100
++++ linux-2.4.35.4/arch/mips/kernel/head.S     2007-12-15 05:20:13.944634901 +0100
 @@ -28,12 +28,20 @@
  #include <asm/mipsregs.h>
  #include <asm/stackframe.h>
@@ -201,9 +204,10 @@ diff -urN linux.old/arch/mips/kernel/head.S linux.dev/arch/mips/kernel/head.S
  
                /* The following two symbols are used for kernel profiling. */
                EXPORT(stext)
-diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c
---- linux.old/arch/mips/kernel/proc.c  2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/proc.c  2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/proc.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/proc.c        2007-12-15 05:19:36.358492990 +0100
++++ linux-2.4.35.4/arch/mips/kernel/proc.c     2007-12-15 05:20:13.944634901 +0100
 @@ -78,9 +78,10 @@
        [CPU_AU1550]    "Au1550",
        [CPU_24K]       "MIPS 24K",
@@ -216,9 +220,10 @@ diff -urN linux.old/arch/mips/kernel/proc.c linux.dev/arch/mips/kernel/proc.c
  static int show_cpuinfo(struct seq_file *m, void *v)
  {
        unsigned int version = current_cpu_data.processor_id;
-diff -urN linux.old/arch/mips/kernel/setup.c linux.dev/arch/mips/kernel/setup.c
---- linux.old/arch/mips/kernel/setup.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/setup.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/setup.c       2007-12-15 05:19:44.866977862 +0100
++++ linux-2.4.35.4/arch/mips/kernel/setup.c    2007-12-15 05:20:13.944634901 +0100
 @@ -493,6 +493,7 @@
        void swarm_setup(void);
        void hp_setup(void);
@@ -239,9 +244,10 @@ diff -urN linux.old/arch/mips/kernel/setup.c linux.dev/arch/mips/kernel/setup.c
        default:
                panic("Unsupported architecture");
        }
-diff -urN linux.old/arch/mips/kernel/traps.c linux.dev/arch/mips/kernel/traps.c
---- linux.old/arch/mips/kernel/traps.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/kernel/traps.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/traps.c       2007-12-15 05:19:44.870978088 +0100
++++ linux-2.4.35.4/arch/mips/kernel/traps.c    2007-12-15 05:20:13.944634901 +0100
 @@ -920,6 +920,7 @@
  void __init trap_init(void)
  {
@@ -271,9 +277,10 @@ diff -urN linux.old/arch/mips/kernel/traps.c linux.dev/arch/mips/kernel/traps.c
        if (cpu_has_fpu && !cpu_has_nofpuex)
                set_except_vector(15, handle_fpe);
  
-diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile
---- linux.old/arch/mips/Makefile       2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/Makefile       2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile     2007-12-15 05:19:51.215339635 +0100
++++ linux-2.4.35.4/arch/mips/Makefile  2007-12-15 05:20:13.948635130 +0100
 @@ -726,6 +726,19 @@
  endif
  
@@ -294,7 +301,7 @@ diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile
  # Choosing incompatible machines durings configuration will result in
  # error messages during linking.  Select a default linkscript if
  # none has been choosen above.
-@@ -778,6 +791,7 @@
+@@ -779,6 +792,7 @@
        $(MAKE) -C arch/$(ARCH)/tools clean
        $(MAKE) -C arch/mips/baget clean
        $(MAKE) -C arch/mips/lasat clean
@@ -302,10 +309,11 @@ diff -urN linux.old/arch/mips/Makefile linux.dev/arch/mips/Makefile
  
  archmrproper:
        @$(MAKEBOOT) mrproper
-diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
---- linux.old/arch/mips/mm/c-r4k.c     2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/mm/c-r4k.c     2006-10-02 21:19:59.000000000 +0200
-@@ -1166,3 +1166,47 @@
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c   2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c        2007-12-15 05:20:13.948635130 +0100
+@@ -1118,3 +1118,47 @@
        build_clear_page();
        build_copy_page();
  }
@@ -353,9 +361,10 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
 +}
 +
 +
-diff -urN linux.old/arch/mips/pci/Makefile linux.dev/arch/mips/pci/Makefile
---- linux.old/arch/mips/pci/Makefile   2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/arch/mips/pci/Makefile   2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/pci/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/pci/Makefile 2007-12-15 05:19:36.398495270 +0100
++++ linux-2.4.35.4/arch/mips/pci/Makefile      2007-12-15 05:20:13.948635130 +0100
 @@ -13,7 +13,9 @@
  obj-$(CONFIG_MIPS_MSC)                += ops-msc.o
  obj-$(CONFIG_MIPS_NILE4)      += ops-nile4.o
@@ -366,9 +375,10 @@ diff -urN linux.old/arch/mips/pci/Makefile linux.dev/arch/mips/pci/Makefile
  obj-$(CONFIG_PCI_AUTO)                += pci_auto.o
  
  include $(TOPDIR)/Rules.make
-diff -urN linux.old/drivers/char/serial.c linux.dev/drivers/char/serial.c
---- linux.old/drivers/char/serial.c    2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/char/serial.c    2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c  2007-12-15 05:20:00.539871010 +0100
++++ linux-2.4.35.4/drivers/char/serial.c       2007-12-15 05:20:13.952635360 +0100
 @@ -444,6 +444,10 @@
                return inb(info->port+1);
  #endif
@@ -437,9 +447,10 @@ diff -urN linux.old/drivers/char/serial.c linux.dev/drivers/char/serial.c
        cval = cflag & (CSIZE | CSTOPB);
  #if defined(__powerpc__) || defined(__alpha__)
        cval >>= 8;
-diff -urN linux.old/drivers/net/Makefile linux.dev/drivers/net/Makefile
---- linux.old/drivers/net/Makefile     2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/net/Makefile     2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile   2007-12-15 05:20:10.804455954 +0100
++++ linux-2.4.35.4/drivers/net/Makefile        2007-12-15 05:20:13.952635360 +0100
 @@ -3,6 +3,8 @@
  # Makefile for the Linux network (ethercard) device drivers.
  #
@@ -449,9 +460,10 @@ diff -urN linux.old/drivers/net/Makefile linux.dev/drivers/net/Makefile
  obj-y           :=
  obj-m           :=
  obj-n           :=
-diff -urN linux.old/drivers/parport/Config.in linux.dev/drivers/parport/Config.in
---- linux.old/drivers/parport/Config.in        2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/parport/Config.in        2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/parport/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/parport/Config.in      2007-12-15 05:19:36.422496639 +0100
++++ linux-2.4.35.4/drivers/parport/Config.in   2007-12-15 05:20:13.956635587 +0100
 @@ -11,6 +11,7 @@
  tristate 'Parallel port support' CONFIG_PARPORT
  if [ "$CONFIG_PARPORT" != "n" ]; then
@@ -460,9 +472,10 @@ diff -urN linux.old/drivers/parport/Config.in linux.dev/drivers/parport/Config.i
     if [ "$CONFIG_PARPORT_PC" != "n" -a "$CONFIG_SERIAL" != "n" ]; then
        if [ "$CONFIG_SERIAL" = "m" ]; then
           define_tristate CONFIG_PARPORT_PC_CML1 m
-diff -urN linux.old/drivers/parport/Makefile linux.dev/drivers/parport/Makefile
---- linux.old/drivers/parport/Makefile 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/drivers/parport/Makefile 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/drivers/parport/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/parport/Makefile       2007-12-15 05:19:36.430497094 +0100
++++ linux-2.4.35.4/drivers/parport/Makefile    2007-12-15 05:20:13.956635587 +0100
 @@ -22,6 +22,7 @@
  
  obj-$(CONFIG_PARPORT)         += parport.o
@@ -471,9 +484,10 @@ diff -urN linux.old/drivers/parport/Makefile linux.dev/drivers/parport/Makefile
  obj-$(CONFIG_PARPORT_PC_PCMCIA)       += parport_cs.o
  obj-$(CONFIG_PARPORT_AMIGA)   += parport_amiga.o
  obj-$(CONFIG_PARPORT_MFC3)    += parport_mfc3.o
-diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/bootinfo.h
---- linux.old/include/asm-mips/bootinfo.h      2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/bootinfo.h      2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/bootinfo.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/bootinfo.h    2007-12-15 05:19:45.026986980 +0100
++++ linux-2.4.35.4/include/asm-mips/bootinfo.h 2007-12-15 05:20:13.956635587 +0100
 @@ -37,6 +37,7 @@
  #define MACH_GROUP_HP_LJ       20 /* Hewlett Packard LaserJet               */
  #define MACH_GROUP_LASAT       21
@@ -498,9 +512,10 @@ diff -urN linux.old/include/asm-mips/bootinfo.h linux.dev/include/asm-mips/booti
   * Valid machtype for group TITAN
   */
  #define       MACH_TITAN_YOSEMITE     1       /* PMC-Sierra Yosemite */
-diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h
---- linux.old/include/asm-mips/cpu.h   2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/cpu.h   2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/cpu.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/cpu.h 2007-12-15 05:19:36.442497779 +0100
++++ linux-2.4.35.4/include/asm-mips/cpu.h      2007-12-15 05:20:13.956635587 +0100
 @@ -22,6 +22,11 @@
     spec.
  */
@@ -549,10 +564,11 @@ diff -urN linux.old/include/asm-mips/cpu.h linux.dev/include/asm-mips/cpu.h
  
  /*
   * ISA Level encodings
-diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h
---- linux.old/include/asm-mips/r4kcache.h      2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/r4kcache.h      2006-10-02 21:19:59.000000000 +0200
-@@ -658,4 +658,17 @@
+Index: linux-2.4.35.4/include/asm-mips/r4kcache.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h    2007-12-15 05:19:36.450498234 +0100
++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:13.960635812 +0100
+@@ -567,4 +567,17 @@
                        cache128_unroll32(addr|ws,Index_Writeback_Inv_SD);
  }
  
@@ -570,9 +586,10 @@ diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kca
 +}      
 +
  #endif /* __ASM_R4KCACHE_H */
-diff -urN linux.old/include/asm-mips/serial.h linux.dev/include/asm-mips/serial.h
---- linux.old/include/asm-mips/serial.h        2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/include/asm-mips/serial.h        2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/serial.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/serial.h      2007-12-15 05:19:36.458498689 +0100
++++ linux-2.4.35.4/include/asm-mips/serial.h   2007-12-15 05:20:13.960635812 +0100
 @@ -223,6 +223,13 @@
  #define TXX927_SERIAL_PORT_DEFNS
  #endif
@@ -595,9 +612,10 @@ diff -urN linux.old/include/asm-mips/serial.h linux.dev/include/asm-mips/serial.
        COBALT_SERIAL_PORT_DEFNS                \
        DDB5477_SERIAL_PORT_DEFNS               \
        EV96100_SERIAL_PORT_DEFNS               \
-diff -urN linux.old/init/do_mounts.c linux.dev/init/do_mounts.c
---- linux.old/init/do_mounts.c 2006-10-02 21:23:10.000000000 +0200
-+++ linux.dev/init/do_mounts.c 2006-10-02 21:19:59.000000000 +0200
+Index: linux-2.4.35.4/init/do_mounts.c
+===================================================================
+--- linux-2.4.35.4.orig/init/do_mounts.c       2007-12-15 05:19:48.667194423 +0100
++++ linux-2.4.35.4/init/do_mounts.c    2007-12-15 05:20:13.960635812 +0100
 @@ -254,7 +254,13 @@
        { "ftlb", 0x2c08 },
        { "ftlc", 0x2c10 },
diff --git a/target/linux/brcm-2.4/patches/002-wl_fix.patch b/target/linux/brcm-2.4/patches/002-wl_fix.patch
deleted file mode 100644 (file)
index 95044b6..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-diff -urN linux.old/include/linux/netdevice.h linux.dev/include/linux/netdevice.h
---- linux.old/include/linux/netdevice.h        2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/linux/netdevice.h        2006-03-19 06:33:21.000000000 +0100
-@@ -296,10 +296,7 @@
-       /* List of functions to handle Wireless Extensions (instead of ioctl).
-        * See <net/iw_handler.h> for details. Jean II */
-       const struct iw_handler_def *   wireless_handlers;
--      /* Instance data managed by the core of Wireless Extensions. */
--      struct iw_public_data * wireless_data;
--      struct ethtool_ops *ethtool_ops;
-       /*
-        * This marks the end of the "visible" part of the structure. All
-@@ -354,8 +351,8 @@
-       struct Qdisc            *qdisc;
-       struct Qdisc            *qdisc_sleeping;
-+      struct Qdisc            *qdisc_list;
-       struct Qdisc            *qdisc_ingress;
--      struct list_head        qdisc_list;
-       unsigned long           tx_queue_len;   /* Max frames per queue allowed */
-       /* hard_start_xmit synchronizer */
-@@ -455,6 +452,10 @@
-       /* this will get initialized at each interface type init routine */
-       struct divert_blk       *divert;
- #endif /* CONFIG_NET_DIVERT */
-+      struct ethtool_ops *ethtool_ops;
-+
-+      /* Instance data managed by the core of Wireless Extensions. */
-+      struct iw_public_data * wireless_data;
- };
- /* 2.6 compatibility */
-diff -urN linux.old/include/linux/skbuff.h linux.dev/include/linux/skbuff.h
---- linux.old/include/linux/skbuff.h   2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/linux/skbuff.h   2006-03-19 06:29:41.000000000 +0100
-@@ -138,10 +138,6 @@
-       struct sock     *sk;                    /* Socket we are owned by                       */
-       struct timeval  stamp;                  /* Time we arrived                              */
-       struct net_device       *dev;           /* Device we arrived on/are leaving by          */
--      struct net_device       *real_dev;      /* For support of point to point protocols 
--                                                 (e.g. 802.3ad) over bonding, we must save the
--                                                 physical device that got the packet before
--                                                 replacing skb->dev with the virtual device.  */
-       /* Transport layer header */
-       union
-@@ -225,6 +221,10 @@
- #if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-        struct nf_info *nf_info;
- #endif
-+      struct net_device       *real_dev;      /* For support of point to point protocols 
-+                                                 (e.g. 802.3ad) over bonding, we must save the
-+                                                 physical device that got the packet before
-+                                                 replacing skb->dev with the virtual device.  */
- };
- #ifdef __KERNEL__
-diff -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h
---- linux.old/include/net/pkt_sched.h  2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/include/net/pkt_sched.h  2006-03-19 06:29:41.000000000 +0100
-@@ -63,8 +63,11 @@
-       int                     (*enqueue)(struct sk_buff *, struct Qdisc *);
-       struct sk_buff *        (*dequeue)(struct Qdisc *);
-       int                     (*requeue)(struct sk_buff *, struct Qdisc *);
--      unsigned int            (*drop)(struct Qdisc *);
--
-+#ifdef CONFIG_BCM4710
-+      int                     (*drop)(struct Qdisc *);
-+#else
-+      unsigned int            (*drop)(struct Qdisc *);
-+#endif
-       int                     (*init)(struct Qdisc *, struct rtattr *arg);
-       void                    (*reset)(struct Qdisc *);
-       void                    (*destroy)(struct Qdisc *);
-@@ -84,12 +87,19 @@
- #define TCQ_F_THROTTLED       2
- #define TCQ_F_INGRESS 4
-       struct Qdisc_ops        *ops;
-+#ifdef CONFIG_BCM4710
-+      struct Qdisc            *next;
-+#endif
-       u32                     handle;
--      u32                     parent;
-+#ifndef CONFIG_BCM4710
-+      u32                     parent;
-+#endif
-       atomic_t                refcnt;
-       struct sk_buff_head     q;
-       struct net_device       *dev;
--      struct list_head        list;
-+#ifndef CONFIG_BCM4710
-+      struct list_head        list;
-+#endif
-       struct tc_stats         stats;
-       int                     (*reshape_fail)(struct sk_buff *skb, struct Qdisc *q);
-diff -urN linux.old/net/core/Makefile linux.dev/net/core/Makefile
---- linux.old/net/core/Makefile        2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/core/Makefile        2006-03-19 06:29:41.000000000 +0100
-@@ -9,7 +9,11 @@
- O_TARGET := core.o
-+ifeq ($(CONFIG_BCM4710),y)
-+export-objs := netfilter.o profile.o neighbour.o
-+else
- export-objs := netfilter.o profile.o ethtool.o neighbour.o
-+endif
- obj-y := sock.o skbuff.o iovec.o datagram.o scm.o
-@@ -21,8 +25,13 @@
- obj-$(CONFIG_FILTER) += filter.o
-+ifeq ($(CONFIG_BCM4710),y)
-+obj-$(CONFIG_NET) +=  dev.o dev_mcast.o dst.o neighbour.o \
-+                      rtnetlink.o utils.o
-+else
- obj-$(CONFIG_NET) +=  dev.o ethtool.o dev_mcast.o dst.o neighbour.o \
-                       rtnetlink.o utils.o
-+endif
- obj-$(CONFIG_NETFILTER) += netfilter.o
- obj-$(CONFIG_NET_DIVERT) += dv.o
-diff -urN linux.old/net/core/dev.c linux.dev/net/core/dev.c
---- linux.old/net/core/dev.c   2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/core/dev.c   2006-03-19 06:29:41.000000000 +0100
-@@ -2232,6 +2232,7 @@
-                           cmd == SIOCGMIIPHY ||
-                           cmd == SIOCGMIIREG ||
-                           cmd == SIOCSMIIREG ||
-+                          cmd == SIOCETHTOOL ||
-                           cmd == SIOCWANDEV) {
-                               if (dev->do_ioctl) {
-                                       if (!netif_device_present(dev))
-@@ -2324,6 +2325,7 @@
-                       }
-                       return ret;
-+#ifndef CONFIG_BCM4710
-               case SIOCETHTOOL:
-                       dev_load(ifr.ifr_name);
-                       rtnl_lock();
-@@ -2337,6 +2339,7 @@
-                                       ret = -EFAULT;
-                       }
-                       return ret;
-+#endif
-               /*
-                *      These ioctl calls:
-@@ -2412,6 +2415,7 @@
-                
-               default:
-                       if (cmd == SIOCWANDEV ||
-+                          (cmd == SIOCETHTOOL) ||
-                           (cmd >= SIOCDEVPRIVATE &&
-                            cmd <= SIOCDEVPRIVATE + 15)) {
-                               dev_load(ifr.ifr_name);
-diff -urN linux.old/net/sched/sch_api.c linux.dev/net/sched/sch_api.c
---- linux.old/net/sched/sch_api.c      2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/sched/sch_api.c      2006-03-19 06:29:41.000000000 +0100
-@@ -194,11 +194,12 @@
- {
-       struct Qdisc *q;
--      list_for_each_entry(q, &dev->qdisc_list, list) {
-+        for (q = dev->qdisc_list; q; q = q->next) {
-               if (q->handle == handle)
-                       return q;
-       }
-       return NULL;
-+
- }
- struct Qdisc *qdisc_leaf(struct Qdisc *p, u32 classid)
-@@ -371,8 +372,6 @@
-                       unsigned long cl = cops->get(parent, classid);
-                       if (cl) {
-                               err = cops->graft(parent, cl, new, old);
--                              if (new)
--                                      new->parent = classid;
-                               cops->put(parent, cl);
-                       }
-               }
-@@ -427,7 +426,6 @@
-       memset(sch, 0, size);
--      INIT_LIST_HEAD(&sch->list);
-       skb_queue_head_init(&sch->q);
-       if (handle == TC_H_INGRESS)
-@@ -453,7 +451,8 @@
-       if (!ops->init || (err = ops->init(sch, tca[TCA_OPTIONS-1])) == 0) {
-               write_lock(&qdisc_tree_lock);
--              list_add_tail(&sch->list, &dev->qdisc_list);
-+              sch->next = dev->qdisc_list;
-+              dev->qdisc_list = sch;
-               write_unlock(&qdisc_tree_lock);
- #ifdef CONFIG_NET_ESTIMATOR
-               if (tca[TCA_RATE-1])
-@@ -808,19 +807,16 @@
-               if (idx > s_idx)
-                       s_q_idx = 0;
-               read_lock(&qdisc_tree_lock);
--              q_idx = 0;
--              list_for_each_entry(q, &dev->qdisc_list, list) {
--                      if (q_idx < s_q_idx) {
--                              q_idx++;
--                              continue;
--                      }
--                      if (tc_fill_qdisc(skb, q, q->parent, NETLINK_CB(cb->skb).pid,
--                                        cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) {
--                              read_unlock(&qdisc_tree_lock);
--                              goto done;
--                      }
--                      q_idx++;
--              }
-+                for (q = dev->qdisc_list, q_idx = 0; q;
-+                     q = q->next, q_idx++) {
-+                        if (q_idx < s_q_idx)
-+                                continue;
-+                        if (tc_fill_qdisc(skb, q, 0, NETLINK_CB(cb->skb).pid,
-+                                          cb->nlh->nlmsg_seq, NLM_F_MULTI, RTM_NEWQDISC) <= 0) {
-+                                read_unlock(&qdisc_tree_lock);
-+                                goto done;
-+                        }
-+                }
-               read_unlock(&qdisc_tree_lock);
-       }
-@@ -1033,27 +1029,24 @@
-       t = 0;
-       read_lock(&qdisc_tree_lock);
--      list_for_each_entry(q, &dev->qdisc_list, list) {
--              if (t < s_t || !q->ops->cl_ops ||
--                  (tcm->tcm_parent &&
--                   TC_H_MAJ(tcm->tcm_parent) != q->handle)) {
--                      t++;
--                      continue;
--              }
--              if (t > s_t)
--                      memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0]));
--              arg.w.fn = qdisc_class_dump;
--              arg.skb = skb;
--              arg.cb = cb;
--              arg.w.stop  = 0;
--              arg.w.skip = cb->args[1];
--              arg.w.count = 0;
--              q->ops->cl_ops->walk(q, &arg.w);
--              cb->args[1] = arg.w.count;
--              if (arg.w.stop)
--                      break;
--              t++;
--      }
-+        for (q=dev->qdisc_list, t=0; q; q = q->next, t++) {
-+                if (t < s_t) continue;
-+                if (!q->ops->cl_ops) continue;
-+                if (tcm->tcm_parent && TC_H_MAJ(tcm->tcm_parent) != q->handle)
-+                        continue;
-+                if (t > s_t)
-+                        memset(&cb->args[1], 0, sizeof(cb->args)-sizeof(cb->args[0]));
-+                arg.w.fn = qdisc_class_dump;
-+                arg.skb = skb;
-+                arg.cb = cb;
-+                arg.w.stop  = 0;
-+                arg.w.skip = cb->args[1];
-+                arg.w.count = 0;
-+                q->ops->cl_ops->walk(q, &arg.w);
-+                cb->args[1] = arg.w.count;
-+                if (arg.w.stop)
-+                        break;
-+        }
-       read_unlock(&qdisc_tree_lock);
-       cb->args[0] = t;
-diff -urN linux.old/net/sched/sch_generic.c linux.dev/net/sched/sch_generic.c
---- linux.old/net/sched/sch_generic.c  2006-03-19 06:32:22.000000000 +0100
-+++ linux.dev/net/sched/sch_generic.c  2006-03-19 06:29:41.000000000 +0100
-@@ -399,7 +399,6 @@
-               return NULL;
-       memset(sch, 0, size);
--      INIT_LIST_HEAD(&sch->list);
-       skb_queue_head_init(&sch->q);
-       sch->ops = ops;
-       sch->enqueue = ops->enqueue;
-@@ -429,11 +428,22 @@
- void qdisc_destroy(struct Qdisc *qdisc)
- {
-       struct Qdisc_ops *ops = qdisc->ops;
-+      struct net_device *dev;
-       if (qdisc->flags&TCQ_F_BUILTIN ||
-           !atomic_dec_and_test(&qdisc->refcnt))
-               return;
--      list_del(&qdisc->list);
-+
-+      dev = qdisc->dev;
-+      if (dev) {
-+              struct Qdisc *q, **qp;
-+              for (qp = &qdisc->dev->qdisc_list; (q=*qp) != NULL; qp = &q->next) {
-+                      if (q == qdisc) {
-+                              *qp = q->next;
-+                              break;
-+                      }
-+              }
-+      }
- #ifdef CONFIG_NET_ESTIMATOR
-       qdisc_kill_estimator(&qdisc->stats);
- #endif
-@@ -462,9 +472,9 @@
-                               return;
-                       }
-                       write_lock(&qdisc_tree_lock);
--                      list_add_tail(&qdisc->list, &dev->qdisc_list);
-+                      qdisc->next = dev->qdisc_list;
-+                      dev->qdisc_list = qdisc;
-                       write_unlock(&qdisc_tree_lock);
--
-               } else {
-                       qdisc =  &noqueue_qdisc;
-               }
-@@ -508,7 +518,7 @@
-       dev->qdisc = &noop_qdisc;
-       spin_unlock_bh(&dev->queue_lock);
-       dev->qdisc_sleeping = &noop_qdisc;
--      INIT_LIST_HEAD(&dev->qdisc_list);
-+      dev->qdisc_list = NULL;
-       write_unlock(&qdisc_tree_lock);
-       dev_watchdog_init(dev);
-@@ -530,7 +540,7 @@
-               qdisc_destroy(qdisc);
-         }
- #endif
--      BUG_TRAP(list_empty(&dev->qdisc_list));
-+      BUG_TRAP(dev->qdisc_list == NULL);
-       BUG_TRAP(!timer_pending(&dev->watchdog_timer));
-       spin_unlock_bh(&dev->queue_lock);
-       write_unlock(&qdisc_tree_lock);
index e971e7fdfdfad5e5ca8b7f8eaa2d8c112aa28d5a..00bd7a7ef53e88dcdb4c7fdbbd16f4b041e95d92 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/arch/mips/kernel/entry.S linux.dev/arch/mips/kernel/entry.S
---- linux.old/arch/mips/kernel/entry.S 2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/kernel/entry.S 2005-07-06 11:23:55.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/entry.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/entry.S       2007-12-15 05:19:36.266487747 +0100
++++ linux-2.4.35.4/arch/mips/kernel/entry.S    2007-12-15 05:20:14.372659296 +0100
 @@ -100,6 +100,10 @@
                 * and R4400 SC and MC versions.
                 */
@@ -12,9 +13,10 @@ diff -urN linux.old/arch/mips/kernel/entry.S linux.dev/arch/mips/kernel/entry.S
  #if R5432_CP0_INTERRUPT_WAR
                mfc0    k0, CP0_INDEX
  #endif
-diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
---- linux.old/arch/mips/mm/c-r4k.c     2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/mm/c-r4k.c     2005-07-06 11:23:55.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c   2007-12-15 05:20:13.948635130 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c        2007-12-15 05:20:14.376659523 +0100
 @@ -14,6 +14,12 @@
  #include <linux/mm.h>
  #include <linux/bitops.h>
@@ -28,16 +30,15 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
  #include <asm/bcache.h>
  #include <asm/bootinfo.h>
  #include <asm/cacheops.h>
-@@ -40,6 +46,8 @@
+@@ -40,6 +46,7 @@
        .bc_inv = (void *)no_sc_noop
  };
  
 +int bcm4710 = 0;
-+EXPORT_SYMBOL(bcm4710);
  struct bcache_ops *bcops = &no_sc_ops;
  
  #define cpu_is_r4600_v1_x()   ((read_c0_prid() & 0xfffffff0) == 0x2010)
-@@ -64,8 +72,10 @@
+@@ -64,8 +71,10 @@
  static inline void r4k_blast_dcache_page_setup(void)
  {
        unsigned long dc_lsize = current_cpu_data.dcache.linesz;
@@ -50,7 +51,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                r4k_blast_dcache_page = blast_dcache16_page;
        else if (dc_lsize == 32)
                r4k_blast_dcache_page = r4k_blast_dcache_page_dc32;
-@@ -77,7 +87,9 @@
+@@ -77,7 +86,9 @@
  {
        unsigned long dc_lsize = current_cpu_data.dcache.linesz;
  
@@ -61,7 +62,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                r4k_blast_dcache_page_indexed = blast_dcache16_page_indexed;
        else if (dc_lsize == 32)
                r4k_blast_dcache_page_indexed = blast_dcache32_page_indexed;
-@@ -89,7 +101,9 @@
+@@ -89,7 +100,9 @@
  {
        unsigned long dc_lsize = current_cpu_data.dcache.linesz;
  
@@ -72,7 +73,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                r4k_blast_dcache = blast_dcache16;
        else if (dc_lsize == 32)
                r4k_blast_dcache = blast_dcache32;
-@@ -266,6 +280,7 @@
+@@ -266,6 +279,7 @@
        r4k_blast_dcache();
        r4k_blast_icache();
  
@@ -80,7 +81,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
        switch (current_cpu_data.cputype) {
        case CPU_R4000SC:
        case CPU_R4000MC:
-@@ -304,10 +319,10 @@
+@@ -304,10 +318,10 @@
         * Kludge alert.  For obscure reasons R4000SC and R4400SC go nuts if we
         * only flush the primary caches but R10000 and R12000 behave sane ...
         */
@@ -93,7 +94,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                r4k_blast_scache();
  }
  
-@@ -383,12 +398,15 @@
+@@ -383,12 +397,15 @@
        unsigned long ic_lsize = current_cpu_data.icache.linesz;
        unsigned long addr, aend;
  
@@ -111,7 +112,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
  
                        while (1) {
                                /* Hit_Writeback_Inv_D */
-@@ -403,8 +421,6 @@
+@@ -403,8 +420,6 @@
        if (end - start > icache_size)
                r4k_blast_icache();
        else {
@@ -120,7 +121,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                while (1) {
                        /* Hit_Invalidate_I */
                        protected_flush_icache_line(addr);
-@@ -413,6 +429,9 @@
+@@ -413,6 +428,9 @@
                        addr += ic_lsize;
                }
        }
@@ -130,7 +131,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
  }
  
  /*
-@@ -443,7 +462,8 @@
+@@ -443,7 +461,8 @@
        if (cpu_has_subset_pcaches) {
                unsigned long addr = (unsigned long) page_address(page);
  
@@ -140,7 +141,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                ClearPageDcacheDirty(page);
  
                return;
-@@ -451,6 +471,7 @@
+@@ -451,6 +470,7 @@
  
        if (!cpu_has_ic_fills_f_dc) {
                unsigned long addr = (unsigned long) page_address(page);
@@ -148,7 +149,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                r4k_blast_dcache_page(addr);
                ClearPageDcacheDirty(page);
        }
-@@ -477,7 +498,7 @@
+@@ -477,7 +497,7 @@
        /* Catch bad driver code */
        BUG_ON(size == 0);
  
@@ -157,7 +158,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                unsigned long sc_lsize = current_cpu_data.scache.linesz;
  
                if (size >= scache_size) {
-@@ -509,6 +530,8 @@
+@@ -509,6 +529,8 @@
                R4600_HIT_CACHEOP_WAR_IMPL;
                a = addr & ~(dc_lsize - 1);
                end = (addr + size - 1) & ~(dc_lsize - 1);
@@ -166,7 +167,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                while (1) {
                        flush_dcache_line(a);   /* Hit_Writeback_Inv_D */
                        if (a == end)
-@@ -527,7 +550,7 @@
+@@ -527,7 +549,7 @@
        /* Catch bad driver code */
        BUG_ON(size == 0);
  
@@ -175,7 +176,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                unsigned long sc_lsize = current_cpu_data.scache.linesz;
  
                if (size >= scache_size) {
-@@ -554,6 +577,8 @@
+@@ -554,6 +576,8 @@
                R4600_HIT_CACHEOP_WAR_IMPL;
                a = addr & ~(dc_lsize - 1);
                end = (addr + size - 1) & ~(dc_lsize - 1);
@@ -184,7 +185,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                while (1) {
                        flush_dcache_line(a);   /* Hit_Writeback_Inv_D */
                        if (a == end)
-@@ -577,6 +602,8 @@
+@@ -577,6 +601,8 @@
        unsigned long dc_lsize = current_cpu_data.dcache.linesz;
  
        R4600_HIT_CACHEOP_WAR_IMPL;
@@ -193,7 +194,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
        protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
        protected_flush_icache_line(addr & ~(ic_lsize - 1));
        if (MIPS4K_ICACHE_REFILL_WAR) {
-@@ -986,10 +1013,12 @@
+@@ -986,10 +1012,12 @@
        case CPU_R4000MC:
        case CPU_R4400SC:
        case CPU_R4400MC:
@@ -210,7 +211,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
                break;
  
        case CPU_R10000:
-@@ -1041,6 +1070,19 @@
+@@ -1041,6 +1069,19 @@
  static inline void coherency_setup(void)
  {
        change_c0_config(CONF_CM_CMASK, CONF_CM_DEFAULT);
@@ -230,7 +231,7 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
  
        /*
         * c0_status.cu=0 specifies that updates by the sc instruction use
-@@ -1073,6 +1115,12 @@
+@@ -1073,6 +1114,12 @@
        memcpy((void *)(KSEG0 + 0x100), &except_vec2_generic, 0x80);
        memcpy((void *)(KSEG1 + 0x100), &except_vec2_generic, 0x80);
  
@@ -243,9 +244,10 @@ diff -urN linux.old/arch/mips/mm/c-r4k.c linux.dev/arch/mips/mm/c-r4k.c
        probe_pcache();
        setup_scache();
  
-diff -urN linux.old/arch/mips/mm/tlbex-mips32.S linux.dev/arch/mips/mm/tlbex-mips32.S
---- linux.old/arch/mips/mm/tlbex-mips32.S      2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/arch/mips/mm/tlbex-mips32.S      2005-07-06 11:23:56.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-mips32.S    2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:20:14.380659748 +0100
 @@ -90,6 +90,9 @@
        .set    noat
        LEAF(except_vec0_r4000)
@@ -256,9 +258,10 @@ diff -urN linux.old/arch/mips/mm/tlbex-mips32.S linux.dev/arch/mips/mm/tlbex-mip
  #ifdef CONFIG_SMP
        mfc0    k1, CP0_CONTEXT
        la      k0, pgd_current
-diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kcache.h
---- linux.old/include/asm-mips/r4kcache.h      2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/include/asm-mips/r4kcache.h      2005-07-06 12:52:57.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/r4kcache.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/r4kcache.h    2007-12-15 05:20:13.960635812 +0100
++++ linux-2.4.35.4/include/asm-mips/r4kcache.h 2007-12-15 05:20:14.384659977 +0100
 @@ -15,6 +15,18 @@
  #include <asm/asm.h>
  #include <asm/cacheops.h>
@@ -461,9 +464,10 @@ diff -urN linux.old/include/asm-mips/r4kcache.h linux.dev/include/asm-mips/r4kca
        do {
                cache64_unroll32(start,Hit_Invalidate_I);
                start += 0x800;
-diff -urN linux.old/include/asm-mips/stackframe.h linux.dev/include/asm-mips/stackframe.h
---- linux.old/include/asm-mips/stackframe.h    2005-07-05 16:46:49.000000000 +0200
-+++ linux.dev/include/asm-mips/stackframe.h    2005-07-06 11:23:56.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/stackframe.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/stackframe.h  2007-12-15 05:19:36.298489571 +0100
++++ linux-2.4.35.4/include/asm-mips/stackframe.h       2007-12-15 05:20:14.388660206 +0100
 @@ -209,6 +209,20 @@
  
  #endif
@@ -485,10 +489,11 @@ diff -urN linux.old/include/asm-mips/stackframe.h linux.dev/include/asm-mips/sta
  #define RESTORE_SP                                       \
                lw      sp,  PT_R29(sp);                 \
  
-diff -urN linux.old/mm/memory.c linux.dev/mm/memory.c
---- linux.old/mm/memory.c      2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/mm/memory.c      2005-07-06 11:23:56.000000000 +0200
-@@ -925,6 +925,7 @@
+Index: linux-2.4.35.4/mm/memory.c
+===================================================================
+--- linux-2.4.35.4.orig/mm/memory.c    2007-12-15 05:19:36.306490026 +0100
++++ linux-2.4.35.4/mm/memory.c 2007-12-15 05:20:14.388660206 +0100
+@@ -927,6 +927,7 @@
        flush_page_to_ram(new_page);
        flush_cache_page(vma, address);
        establish_pte(vma, address, page_table, pte_mkwrite(pte_mkdirty(mk_pte(new_page, vma->vm_page_prot))));
index 91aa7e65c8e888e8c6399c7b63859b4cb4649e9f..0046c37e7d915571846225051062fdf9a66afb05 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/drivers/mtd/devices/Config.in linux.dev/drivers/mtd/devices/Config.in
---- linux.old/drivers/mtd/devices/Config.in    2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/devices/Config.in    2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/Config.in  2007-12-15 05:19:36.210484556 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/Config.in       2007-12-15 05:20:14.656675480 +0100
 @@ -5,6 +5,7 @@
  mainmenu_option next_comment
  
@@ -9,9 +10,10 @@ diff -urN linux.old/drivers/mtd/devices/Config.in linux.dev/drivers/mtd/devices/
  dep_tristate '  Ramix PMC551 PCI Mezzanine RAM card support' CONFIG_MTD_PMC551 $CONFIG_MTD $CONFIG_PCI
  if [ "$CONFIG_MTD_PMC551" = "y" -o  "$CONFIG_MTD_PMC551" = "m" ]; then
     bool '    PMC551 256M DRAM Bugfix' CONFIG_MTD_PMC551_BUGFIX
-diff -urN linux.old/drivers/mtd/devices/Makefile linux.dev/drivers/mtd/devices/Makefile
---- linux.old/drivers/mtd/devices/Makefile     2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/devices/Makefile     2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/Makefile   2007-12-15 05:19:36.218485012 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/Makefile        2007-12-15 05:20:14.660675705 +0100
 @@ -3,6 +3,8 @@
  #
  # $Id: Makefile,v 1.4 2001/06/26 21:10:05 spse Exp $
@@ -29,9 +31,10 @@ diff -urN linux.old/drivers/mtd/devices/Makefile linux.dev/drivers/mtd/devices/M
  obj-$(CONFIG_MTD_DOC1000)     += doc1000.o
  obj-$(CONFIG_MTD_DOC2000)     += doc2000.o
  obj-$(CONFIG_MTD_DOC2001)     += doc2001.o
-diff -urN linux.old/drivers/mtd/maps/Config.in linux.dev/drivers/mtd/maps/Config.in
---- linux.old/drivers/mtd/maps/Config.in       2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Config.in       2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Config.in     2007-12-15 05:19:44.950982647 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Config.in  2007-12-15 05:20:14.664675934 +0100
 @@ -48,6 +48,7 @@
  fi
  
@@ -40,9 +43,10 @@ diff -urN linux.old/drivers/mtd/maps/Config.in linux.dev/drivers/mtd/maps/Config
     dep_tristate '  Pb1000 MTD support' CONFIG_MTD_PB1000 $CONFIG_MIPS_PB1000
     dep_tristate '  Pb1500 MTD support' CONFIG_MTD_PB1500 $CONFIG_MIPS_PB1500
     dep_tristate '  Pb1100 MTD support' CONFIG_MTD_PB1100 $CONFIG_MIPS_PB1100
-diff -urN linux.old/drivers/mtd/maps/Makefile linux.dev/drivers/mtd/maps/Makefile
---- linux.old/drivers/mtd/maps/Makefile        2006-06-22 17:35:39.000000000 +0200
-+++ linux.dev/drivers/mtd/maps/Makefile        2006-06-21 21:41:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Makefile      2007-12-15 05:19:44.954982876 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Makefile   2007-12-15 05:20:14.664675934 +0100
 @@ -3,6 +3,8 @@
  #
  # $Id: Makefile,v 1.37 2003/01/24 14:26:38 dwmw2 Exp $
index 77ade1c8b2d7f1a2606b5416c337047c24ded9b9..65c423f1aff5f4ce57da870ae6975da736d253f5 100644 (file)
@@ -1,5 +1,7 @@
---- linux-2.4.30/drivers/bluetooth/hci_usb.c   2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.30/drivers/bluetooth/hci_usb.c   2005-07-25 20:12:11.000000000 +0200
+Index: linux-2.4.35.4/drivers/bluetooth/hci_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/bluetooth/hci_usb.c    2007-12-15 05:19:36.182482961 +0100
++++ linux-2.4.35.4/drivers/bluetooth/hci_usb.c 2007-12-15 05:20:14.964693031 +0100
 @@ -259,6 +259,9 @@
        void *buf;
  
index 9f8d2ee29dc88435725184e9118dbfbbd81f5f8e..6fb5c68029084a4563bab41c4fa89899685204ea 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/arch/mips/lib/ide-std.c linux.dev/arch/mips/lib/ide-std.c
---- linux.old/arch/mips/lib/ide-std.c  2003-08-25 13:44:40.000000000 +0200
-+++ linux.dev/arch/mips/lib/ide-std.c  2005-08-12 23:55:23.886963936 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ide-std.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/ide-std.c        2007-12-15 05:19:36.146480908 +0100
++++ linux-2.4.35.4/arch/mips/lib/ide-std.c     2007-12-15 05:20:15.796740447 +0100
 @@ -31,12 +31,14 @@
  static ide_ioreg_t std_ide_default_io_base(int index)
  {
index 35c80acd25b247ff8ad5016384b54f50f6a99e32..be09cc98ed2616365e2a24a59ecab3b54c3e891a 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
---- linux.old/drivers/net/b44.c        2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/drivers/net/b44.c        2006-03-06 22:37:14.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/b44.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.c      2007-12-15 05:19:36.094477944 +0100
++++ linux-2.4.35.4/drivers/net/b44.c   2007-12-15 05:20:16.020753214 +0100
 @@ -1,7 +1,9 @@
  /* b44.c: Broadcom 4400 device driver.
   *
@@ -12,15 +13,13 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
   *
   * Distribute under GPL.
   */
-@@ -25,6 +27,41 @@
+@@ -25,6 +27,39 @@
  
  #include "b44.h"
  
 +#include <typedefs.h>
 +#include <bcmdevs.h>
-+#include <bcmutils.h>
 +#include <osl.h>
-+#include <bcmutils.h>
 +#include <bcmnvram.h>
 +#include <sbconfig.h>
 +#include <sbchipc.h>
@@ -400,7 +399,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
        bw32(B44_MDIO_CTRL, (MDIO_CTRL_PREAMBLE |
                             (0x0d & MDIO_CTRL_MAXF_MASK)));
        br32(B44_MDIO_CTRL);
-@@ -1215,6 +1357,8 @@
+@@ -1216,6 +1358,8 @@
        struct b44 *bp = dev->priv;
        int err;
  
@@ -409,7 +408,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
        err = b44_alloc_consistent(bp);
        if (err)
                return err;
-@@ -1235,9 +1379,10 @@
+@@ -1236,9 +1380,10 @@
        bp->timer.expires = jiffies + HZ;
        bp->timer.data = (unsigned long) bp;
        bp->timer.function = b44_timer;
@@ -421,7 +420,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
  
        return 0;
  
-@@ -1628,7 +1773,7 @@
+@@ -1638,7 +1783,7 @@
                u32 mii_regval;
  
                spin_lock_irq(&bp->lock);
@@ -430,7 +429,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
                spin_unlock_irq(&bp->lock);
  
                data->val_out = mii_regval;
-@@ -1641,7 +1786,7 @@
+@@ -1651,7 +1796,7 @@
                        return -EPERM;
  
                spin_lock_irq(&bp->lock);
@@ -439,7 +438,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
                spin_unlock_irq(&bp->lock);
  
                return err;
-@@ -1668,21 +1813,52 @@
+@@ -1678,21 +1823,52 @@
  static int __devinit b44_get_invariants(struct b44 *bp)
  {
        u8 eeprom[128];
@@ -505,7 +504,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
  
        /* With this, plus the rx_header prepended to the data by the
         * hardware, we'll land the ethernet header on a 2-byte boundary.
-@@ -1692,13 +1868,12 @@
+@@ -1702,13 +1878,12 @@
        bp->imask = IMASK_DEF;
  
        bp->core_unit = ssb_core_unit(bp);
@@ -521,7 +520,7 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
  }
  
  static int __devinit b44_init_one(struct pci_dev *pdev,
-@@ -1710,6 +1885,10 @@
+@@ -1720,6 +1895,10 @@
        struct b44 *bp;
        int err, i;
  
@@ -532,9 +531,9 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
        if (b44_version_printed++ == 0)
                printk(KERN_INFO "%s", version);
  
-@@ -1819,11 +1998,17 @@
-       pci_save_state(bp->pdev, bp->pci_cfg_state);
+@@ -1834,11 +2013,17 @@
+        */ 
+       b44_chip_reset(bp);
  
 -      printk(KERN_INFO "%s: Broadcom 4400 10/100BaseT Ethernet ", dev->name);
 +      printk(KERN_INFO "%s: Broadcom %s 10/100BaseT Ethernet ", dev->name,
@@ -551,9 +550,10 @@ diff -urN linux.old/drivers/net/b44.c linux.dev/drivers/net/b44.c
        return 0;
  
  err_out_iounmap:
-diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h
---- linux.old/drivers/net/b44.h        2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/drivers/net/b44.h        2006-01-24 20:52:08.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/b44.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.h      2007-12-15 05:19:36.102478402 +0100
++++ linux-2.4.35.4/drivers/net/b44.h   2007-12-15 05:20:16.028753670 +0100
 @@ -229,8 +229,6 @@
  #define  SBIPSFLAG_IMASK4     0x3f000000 /* Which sbflags --> mips interrupt 4 */
  #define  SBIPSFLAG_ISHIFT4    24
@@ -572,10 +572,11 @@ diff -urN linux.old/drivers/net/b44.h linux.dev/drivers/net/b44.h
  
  /* SW copy of device statistics, kept up to date by periodic timer
   * which probes HW values.  Must have same relative layout as HW
-diff -urN linux.old/include/linux/pci_ids.h linux.dev/include/linux/pci_ids.h
---- linux.old/include/linux/pci_ids.h  2006-02-12 13:49:59.000000000 +0100
-+++ linux.dev/include/linux/pci_ids.h  2006-01-24 20:52:08.000000000 +0100
-@@ -1735,6 +1735,7 @@
+Index: linux-2.4.35.4/include/linux/pci_ids.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/pci_ids.h        2007-12-15 05:19:36.114479084 +0100
++++ linux-2.4.35.4/include/linux/pci_ids.h     2007-12-15 05:20:16.032753896 +0100
+@@ -1756,6 +1756,7 @@
  #define PCI_DEVICE_ID_TIGON3_5901_2   0x170e
  #define PCI_DEVICE_ID_BCM4401         0x4401
  #define PCI_DEVICE_ID_BCM4401B0               0x4402
index 52febdf0cc93505b71c5a985f5a473a111eafb1a..01e1f3c23db7fc0413a2ff5bb9e6918557964b4d 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/drivers/pcmcia/yenta.c linux.dev/drivers/pcmcia/yenta.c
---- linux.old/drivers/pcmcia/yenta.c   2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/pcmcia/yenta.c   2006-04-11 17:47:45.000000000 +0200
+Index: linux-2.4.35.4/drivers/pcmcia/yenta.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/yenta.c 2007-12-15 05:19:36.066476349 +0100
++++ linux-2.4.35.4/drivers/pcmcia/yenta.c      2007-12-15 05:20:16.268767348 +0100
 @@ -543,6 +543,9 @@
         * Probe for usable interrupts using the force
         * register to generate bogus card status events.
index 1deffc54a3c3661c7bf6f18312ddce6bb8a87186..5023e181c4a5832a22b8a97145b8960420816eb4 100644 (file)
@@ -1,5 +1,7 @@
---- linux-2.4.32.orig/drivers/net/b44.h        2006-09-19 19:56:03.000000000 +0200
-+++ linux-2.4.32/drivers/net/b44.h     2006-09-19 19:58:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/b44.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.h      2007-12-15 05:20:16.028753670 +0100
++++ linux-2.4.35.4/drivers/net/b44.h   2007-12-15 05:20:16.480779429 +0100
 @@ -122,6 +122,7 @@
  #define  RXCONFIG_FLOW                0x00000020 /* Flow Control Enable */
  #define  RXCONFIG_FLOW_ACCEPT 0x00000040 /* Accept Unicast Flow Control Frame */
@@ -8,8 +10,10 @@
  #define B44_RXMAXLEN  0x0404UL /* EMAC RX Max Packet Length */
  #define B44_TXMAXLEN  0x0408UL /* EMAC TX Max Packet Length */
  #define B44_MDIO_CTRL 0x0410UL /* EMAC MDIO Control */
---- linux-2.4.32.orig/drivers/net/b44.c        2006-09-19 19:56:03.000000000 +0200
-+++ linux-2.4.32/drivers/net/b44.c     2006-09-19 20:08:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/b44.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/b44.c      2007-12-15 05:20:16.020753214 +0100
++++ linux-2.4.35.4/drivers/net/b44.c   2007-12-15 05:20:16.480779429 +0100
 @@ -1301,6 +1301,7 @@
  {
        struct b44 *bp = dev->priv;
@@ -31,7 +35,7 @@
        spin_unlock_irq(&bp->lock);
  
        return 0;
-@@ -1488,7 +1493,7 @@
+@@ -1495,7 +1500,7 @@
  
        val = br32(B44_RXCONFIG);
        val &= ~(RXCONFIG_PROMISC | RXCONFIG_ALLMULTI);
index 8a472cd6f1a147b3194e183ffedbc72c6df21208..1c19be001b1675790f9d90526d1b54f3a8a76371 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/net/sched/sch_generic.c  2006-11-24 02:42:23.000000000 +0100
-+++ linux.dev/net/sched/sch_generic.c  2006-11-24 02:36:58.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_generic.c        2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/sched/sch_generic.c     2007-12-15 05:20:16.704792197 +0100
 @@ -84,6 +84,11 @@
        struct sk_buff *skb;
  
index 75d7d72ac5478705ee2b41f401ff1c9324707987..97ba007babcd0c7f78ae27bb66188b19eba0e356 100644 (file)
@@ -1,5 +1,7 @@
---- linux-2.4.34/drivers/ide/pci/aec62xx.c.old  2006-12-23 22:34:20.000000000 +0200
-+++ linux-2.4.34/drivers/ide/pci/aec62xx.c      2007-01-14 12:06:05.000000000 +0200
+Index: linux-2.4.35.4/drivers/ide/pci/aec62xx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/ide/pci/aec62xx.c      2007-12-15 05:19:35.958470194 +0100
++++ linux-2.4.35.4/drivers/ide/pci/aec62xx.c   2007-12-15 05:20:16.928804961 +0100
 @@ -3,6 +3,8 @@
   *
   * Copyright (C) 1999-2002    Andre Hedrick <andre@linux-ide.org>
        ide_hwif_t *hwif        = HWIF(drive);
        struct hd_driveid *id   = drive->id;
  
--      if ((id->capability & 1) && drive->autodma) {
 +#ifndef CONFIG_BCM947XX
-+      if ((id->capability & 1) && drive->autodma) {
+       if ((id->capability & 1) && drive->autodma) {
 +#else
 +      if (1) {
 +#endif
                /* Consult the list of known "bad" drives */
                if (hwif->ide_dma_bad_drive(drive))
                        goto fast_ata_pio;
-@@ -414,10 +416,60 @@
+@@ -414,10 +420,60 @@
  {
        int bus_speed = system_bus_clock();
  
@@ -83,7 +84,7 @@
  
  #if defined(DISPLAY_AEC62XX_TIMINGS) && defined(CONFIG_PROC_FS)
        aec_devs[n_aec_devs++] = dev;
-@@ -500,6 +552,7 @@
+@@ -500,6 +556,7 @@
  
  static void __init init_setup_aec6x80 (struct pci_dev *dev, ide_pci_device_t *d)
  {
@@ -91,7 +92,7 @@
        unsigned long bar4reg = pci_resource_start(dev, 4);
  
        if (inb(bar4reg+2) & 0x10) {
-@@ -512,6 +565,7 @@
+@@ -512,6 +569,7 @@
                        strcpy(d->name, "AEC6280R");
        }
  
index 63e0cd6037358954d7450b28d2c63c81616a0b55..5e822a14fc402d2e8620d65f57d1c3dda3e825d4 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/drivers/ide/pci/pdc202xx_old.c   2006-12-23 21:34:20.000000000 +0100
-+++ linux.dev/drivers/ide/pci/pdc202xx_old.c   2007-01-24 18:03:28.000000000 +0100
+Index: linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/ide/pci/pdc202xx_old.c 2007-12-15 05:19:35.922468144 +0100
++++ linux-2.4.35.4/drivers/ide/pci/pdc202xx_old.c      2007-12-15 05:20:17.136816813 +0100
 @@ -253,23 +253,23 @@
        pci_read_config_byte(dev, (drive_pci)|0x03, &DP);
  
@@ -38,4 +40,3 @@
        switch(dev->device) {
                case PCI_DEVICE_ID_PROMISE_20267:
                case PCI_DEVICE_ID_PROMISE_20265:
-
diff --git a/target/linux/brcm-2.4/patches/014-bcm5354.patch b/target/linux/brcm-2.4/patches/014-bcm5354.patch
deleted file mode 100644 (file)
index fed89ca..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
---- a/arch/mips/bcm947xx/include/sbchipc.h     2007-11-23 12:12:01.000000000 -0500
-+++ b/arch/mips/bcm947xx/include/sbchipc.h     2007-11-25 06:16:42.000000000 -0500
-@@ -188,6 +188,7 @@
- #define CAP_JTAGP             0x00400000      /* JTAG Master Present */
- #define CAP_ROM                       0x00800000      /* Internal boot rom active */
- #define CAP_BKPLN64           0x08000000      /* 64-bit backplane */
-+#define CAP_PMU 0x10000000 /* PMU Present, rev >= 20 */
- /* PLL type */
- #define PLL_NONE              0x00000000
-@@ -199,6 +200,9 @@
- #define PLL_TYPE6             0x00028000      /* 100/200 or 120/240 only */
- #define PLL_TYPE7             0x00038000      /* 25Mhz, 4 dividers */
-+/* watchdog clock */
-+#define WATCHDOG_CLOCK_5354 32000 /* Hz */
-+
- /* corecontrol */
- #define CC_UARTCLKO           0x00000001      /* Drive UART with internal clock */
- #define       CC_SE                   0x00000002      /* sync clk out enable (corerev >= 3) */
---- a/arch/mips/bcm947xx/include/bcmdevs.h     2007-11-23 12:12:01.000000000 -0500
-+++ b/arch/mips/bcm947xx/include/bcmdevs.h     2007-11-25 05:58:20.000000000 -0500
-@@ -121,6 +121,7 @@
- #define BCM5365_CHIP_ID               0x5365          /* 5365 chipcommon chipid */
- #define       BCM5350_CHIP_ID         0x5350          /* bcm5350 chipcommon chipid */
- #define       BCM5352_CHIP_ID         0x5352          /* bcm5352 chipcommon chipid */
-+#define       BCM5354_CHIP_ID         0x5354          /* bcm5354 chipcommon chipid */
- #define       BCM4320_CHIP_ID         0x4320          /* bcm4320 chipcommon chipid */
---- a/arch/mips/bcm947xx/sbmips.c      2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/sbmips.c      2007-11-25 05:40:40.000000000 -0500
-@@ -290,6 +290,12 @@
-               n = R_REG(osh, &eir->clockcontrol_n);
-               m = R_REG(osh, &eir->clockcontrol_sb);
-       } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+   /* 5354 chip uses a non programmable PLL of frequency 240MHz */
-+   if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+     rate = 240000000;
-+     goto out;
-+   }
-+
-               pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
-               n = R_REG(osh, &cc->clockcontrol_n);
-               if ((pll_type == PLL_TYPE2) ||
-@@ -612,6 +618,15 @@
-               clockcontrol_pci = &eir->clockcontrol_pci;
-               clockcontrol_m2 = &cc->clockcontrol_m2;
-       } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+
-+   /* 5354 chipcommon pll setting can't be changed.
-+    * The PMU on power up comes up with the default clk frequency
-+    * of 240MHz
-+    */
-+  if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+    ret = TRUE;
-+    goto done;
-+  }
-               pll_type = R_REG(osh, &cc->capabilities) & CAP_PLL_MASK;
-               if (pll_type == PLL_TYPE6) {
-                       clockcontrol_n = NULL;
---- a/arch/mips/bcm947xx/sbutils.c     2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/sbutils.c     2007-11-25 06:22:43.000000000 -0500
-@@ -791,8 +791,14 @@
-       /* readback */
-       if (regoff >= SBCONFIGOFF)
-               w = R_SBREG(si, r);
--      else
-+      else {
-+   if ((si->sb.chip == BCM5354_CHIP_ID) &&
-+       (coreidx == SB_CC_IDX) &&
-+       (regoff == OFFSETOF(chipcregs_t, watchdog))) {
-+         w = val;
-+   } else
-               w = R_REG(si->osh, r);
-+ }
-       if (!fast) {
-               /* restore core index */
-@@ -1902,6 +1908,15 @@
-               n = R_REG(si->osh, &eir->clockcontrol_n);
-               m = R_REG(si->osh, &eir->clockcontrol_sb);
-       } else if ((cc = (chipcregs_t *) sb_setcore(sbh, SB_CC, 0))) {
-+
-+   if (R_REG(si->osh, &cc->capabilities) & CAP_PMU) {
-+      if (sb_chip(sbh) == BCM5354_CHIP_ID) {
-+        /* 5354 has a constant sb clock of 120MHz */
-+        rate = 120000000;
-+        goto end;
-+      } else
-+     ASSERT(0);
-+   }
-               pll_type = R_REG(si->osh, &cc->capabilities) & CAP_PLL_MASK;
-               if (pll_type == PLL_NONE) {
-                       INTR_RESTORE(si, intr_val);
-@@ -1929,6 +1944,7 @@
-                       rate = rate / 2;
-       }
-+end:
-       /* switch back to previous core */
-       sb_setcoreidx(sbh, idx);
---- a/arch/mips/bcm947xx/hndchipc.c    2007-11-23 12:12:02.000000000 -0500
-+++ b/arch/mips/bcm947xx/hndchipc.c    2007-11-25 06:31:15.000000000 -0500
-@@ -93,6 +93,9 @@
-               chipcregs_t *cc = (chipcregs_t *) regs;
-               uint32 rev, cap, pll, baud_base, div;
-+  /* Default value */
-+  div = 48;
-+
-               /* Determine core revision and capabilities */
-               rev = sb_corerev(sbh);
-               cap = R_REG(osh, &cc->capabilities);
-@@ -108,22 +111,29 @@
-                                                 R_REG(osh, &cc->clockcontrol_m2));
-                       div = 1;
-               } else {
--                      /* Fixed ALP clock */
--                      if (rev >= 11 && rev != 15) {
--                              baud_base = 20000000;
-+/* 5354 chip common uart uses a constant clock
-+ * frequency of 25MHz */
-+         if (sb_corerev(sbh) == 20) {
-+                 /* Set the override bit so we don't divide it */
-+                 W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
-+                 baud_base = 25000000;
-+         } else if (rev >= 11 && rev != 15) {
-+                 /* Fixed ALP clock */
-+//                 baud_base = sb_alp_clock(sbh);
-+                 baud_base = 20000000;
-                               div = 1;
-                               /* Set the override bit so we don't divide it */
-                               W_REG(osh, &cc->corecontrol, CC_UARTCLKO);
--                      }
-+                      
-                       /* Internal backplane clock */
--                      else if (rev >= 3) {
--                              baud_base = sb_clock(sbh);
--                              div = 2;        /* Minimum divisor */
--                              W_REG(osh, &cc->clkdiv,
-+   } else if (rev >= 3) {
-+                                baud_base = sb_clock(sbh);
-+                                div = 2;      /* Minimum divisor */
-+                                W_REG(osh, &cc->clkdiv,
-                                     ((R_REG(osh, &cc->clkdiv) & ~CLKD_UART) | div));
--                      }
-+
-                       /* Fixed internal backplane clock */
--                      else {
-+   } else {
-                               baud_base = 88000000;
-                               div = 48;
-                       }
index f2dc0df72ef69cb096f4f6843634b5907dbb7137..f7b3d02be72d65c7ab80462ab388f24314951f0c 100644 (file)
@@ -672,6 +672,8 @@ CONFIG_SERIAL_CONSOLE=y
 CONFIG_SHAPER=m
 # CONFIG_SIBYTE_SB1xxx_SOC is not set
 # CONFIG_SK98LIN is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
 # CONFIG_SLIP is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_SMB_NLS is not set
@@ -722,6 +724,7 @@ CONFIG_WAN_ROUTER=m
 CONFIG_WATCHDOG=y
 CONFIG_WATCHDOG_NOWAYOUT=y
 # CONFIG_WAVELAN is not set
+# CONFIG_WDT_W83627 is not set
 # CONFIG_X25 is not set
 # CONFIG_XFS_DEBUG is not set
 CONFIG_XFS_FS=m
index 16177c53b90ee6e8664afbb8f6db997b4e7fa109..bdc0cdedd085483cfb94e29f4b8bbaa0f4261abb 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/au1xxx_irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/au1xxx_irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/au1xxx_irqmap.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/au1xxx_irqmap.c      2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/au1xxx_irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/au1xxx_irqmap.c        2007-12-15 05:19:42.862863653 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/au1xxx_irqmap.c     2007-12-15 05:19:44.782973074 +0100
 @@ -172,14 +172,14 @@
        { AU1550_PSC1_INT, INTC_INT_HIGH_LEVEL, 0},
        { AU1550_PSC2_INT, INTC_INT_HIGH_LEVEL, 0},
@@ -47,9 +48,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/au1xxx_irqmap.c linux-2.4.32-
        { AU1200_NAND_INT, INTC_INT_RISE_EDGE, 0},
        { AU1200_USB_INT, INTC_INT_HIGH_LEVEL, 0 },
        { AU1200_LCD_INT, INTC_INT_HIGH_LEVEL, 0},
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/cputable.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/cputable.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/cputable.c        2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/cputable.c   2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/cputable.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/cputable.c     2007-12-15 05:19:42.870864109 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/cputable.c  2007-12-15 05:19:44.786973303 +0100
 @@ -39,7 +39,8 @@
      { 0xffffffff, 0x02030203, "Au1100 BD", 0, 1 },
      { 0xffffffff, 0x02030204, "Au1100 BE", 0, 1 },
@@ -60,9 +62,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/cputable.c linux-2.4.32-rc1.m
      { 0x00000000, 0x00000000, "Unknown Au1xxx", 1, 0 },
  };
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/dbdma.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/dbdma.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/dbdma.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/dbdma.c      2005-02-08 07:28:37.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/dbdma.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/dbdma.c        2007-12-15 05:19:42.878864567 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/dbdma.c     2007-12-15 05:19:44.786973303 +0100
 @@ -41,6 +41,8 @@
  #include <asm/au1xxx_dbdma.h>
  #include <asm/system.h>
@@ -641,9 +644,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/dbdma.c linux-2.4.32-rc1.mips
 +
  #endif /* defined(CONFIG_SOC_AU1550) || defined(CONFIG_SOC_AU1200) */
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/gpio.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/gpio.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/gpio.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/gpio.c       2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/gpio.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/common/gpio.c      2007-12-15 05:19:44.786973303 +0100
 @@ -0,0 +1,118 @@
 +/*
 + *  This program is free software; you can redistribute        it and/or modify it
@@ -763,9 +767,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/gpio.c linux-2.4.32-rc1.mips/
 +EXPORT_SYMBOL(au1xxx_gpio_tristate);
 +EXPORT_SYMBOL(au1xxx_gpio_write);
 +EXPORT_SYMBOL(au1xxx_gpio_read);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/irq.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/irq.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/irq.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/irq.c        2005-03-13 08:56:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/irq.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/irq.c  2007-12-15 05:19:42.890865248 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/irq.c       2007-12-15 05:19:44.786973303 +0100
 @@ -303,8 +303,30 @@
  };
  
@@ -833,9 +838,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/irq.c linux-2.4.32-rc1.mips/a
  }
  
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/common/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/common/Makefile  2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/Makefile     2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/Makefile       2007-12-15 05:19:42.898865706 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/Makefile    2007-12-15 05:19:44.786973303 +0100
 @@ -19,9 +19,9 @@
  export-objs           = prom.o clocks.o power.o usbdev.o
  
@@ -848,9 +854,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/Makefile linux-2.4.32-rc1.mip
  
  obj-$(CONFIG_AU1X00_USB_DEVICE) += usbdev.o
  obj-$(CONFIG_KGDB) += dbg_io.o
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_fixup.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_fixup.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/pci_fixup.c       2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_fixup.c  2004-12-03 09:00:32.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/pci_fixup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/pci_fixup.c    2007-12-15 05:19:42.906866162 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/pci_fixup.c 2007-12-15 05:19:44.790973529 +0100
 @@ -75,9 +75,13 @@
  
  #ifdef CONFIG_NONCOHERENT_IO
@@ -867,9 +874,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_fixup.c linux-2.4.32-rc1.
        printk("Non-coherent PCI accesses enabled\n");
  #endif
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_ops.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_ops.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/pci_ops.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/pci_ops.c    2005-02-27 23:14:24.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/pci_ops.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/pci_ops.c      2007-12-15 05:19:42.910866388 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/pci_ops.c   2007-12-15 05:19:44.790973529 +0100
 @@ -162,6 +162,7 @@
  static int config_access(unsigned char access_type, struct pci_dev *dev, 
                         unsigned char where, u32 * data)
@@ -911,9 +919,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/pci_ops.c linux-2.4.32-rc1.mi
  }
  #endif
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/power.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/power.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/power.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/power.c      2005-04-07 02:37:19.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/au1000/common/power.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/power.c        2007-12-15 05:19:42.918866846 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/power.c     2007-12-15 05:19:44.790973529 +0100
 @@ -50,7 +50,6 @@
  
  static void calibrate_delay(void);
@@ -1140,9 +1149,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/power.c linux-2.4.32-rc1.mips
        {0}
  };
  
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/reset.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/reset.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/reset.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/reset.c      2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/reset.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/reset.c        2007-12-15 05:19:42.926867302 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/reset.c     2007-12-15 05:19:44.790973529 +0100
 @@ -37,8 +37,6 @@
  #include <asm/system.h>
  #include <asm/au1000.h>
@@ -1223,9 +1233,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/reset.c linux-2.4.32-rc1.mips
 +      /* If board can't power-off, spin forever */
        au1000_halt();
  }
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/setup.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/setup.c      2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/setup.c        2007-12-15 05:19:42.934867757 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/setup.c     2007-12-15 05:19:44.794973758 +0100
 @@ -174,6 +174,40 @@
        initrd_end = (unsigned long)&__rd_end;
  #endif
@@ -1320,9 +1331,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/setup.c linux-2.4.32-rc1.mips
        if ((ide_ops == NULL) || (ide_ops == &no_ide_ops))
                ide_ops = &std_ide_ops;
  #endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/sleeper.S linux-2.4.32-rc1.mips/arch/mips/au1000/common/sleeper.S
---- linux-2.4.32-rc1/arch/mips/au1000/common/sleeper.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/sleeper.S    2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/common/sleeper.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/sleeper.S      2007-12-15 05:19:42.938867986 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/sleeper.S   2007-12-15 05:19:44.794973758 +0100
 @@ -15,17 +15,48 @@
  #include <asm/addrspace.h>
  #include <asm/regdef.h>
@@ -1591,9 +1603,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/sleeper.S linux-2.4.32-rc1.mi
 +      .set reorder
  END(save_and_sleep)
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/time.c linux-2.4.32-rc1.mips/arch/mips/au1000/common/time.c
---- linux-2.4.32-rc1/arch/mips/au1000/common/time.c    2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/common/time.c       2005-04-08 10:33:17.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/au1000/common/time.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/common/time.c 2007-12-15 05:19:42.946868441 +0100
++++ linux-2.4.35.4/arch/mips/au1000/common/time.c      2007-12-15 05:19:44.794973758 +0100
 @@ -50,7 +50,6 @@
  #include <linux/mc146818rtc.h>
  #include <linux/timex.h>
@@ -1653,9 +1666,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/common/time.c linux-2.4.32-rc1.mips/
        }
  
  #else
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/board_setup.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/board_setup.c  2007-12-15 05:19:42.954868897 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/board_setup.c       2007-12-15 05:19:44.794973758 +0100
 @@ -46,10 +46,22 @@
  #include <asm/au1000.h>
  #include <asm/db1x00.h>
@@ -1739,9 +1753,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/board_setup.c linux-2.4.32-rc
  #ifdef CONFIG_MIPS_DB1000
      printk("AMD Alchemy Au1000/Db1000 Board\n");
  #endif
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/irqmap.c  2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/irqmap.c     2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/irqmap.c       2007-12-15 05:19:42.962869352 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/irqmap.c    2007-12-15 05:19:44.794973758 +0100
 @@ -53,6 +53,7 @@
  #ifdef CONFIG_MIPS_DB1550
        { AU1000_GPIO_3, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 IRQ#
@@ -1750,9 +1765,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/irqmap.c linux-2.4.32-rc1.mip
  #else
        { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 Fully_Interted#
        { AU1000_GPIO_1, INTC_INT_LOW_LEVEL, 0 }, // PCMCIA Card 0 STSCHG#
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/Makefile  2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/Makefile     2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/db1x00/Makefile       2007-12-15 05:19:42.970869808 +0100
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/Makefile    2007-12-15 05:19:44.794973758 +0100
 @@ -17,4 +17,11 @@
  obj-y := init.o board_setup.o irqmap.o
  obj-$(CONFIG_WM97XX_COMODULE) += mirage_ts.o
@@ -1765,9 +1781,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/Makefile linux-2.4.32-rc1.mip
 +endif
 +
  include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/db1x00/mmc_support.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/db1x00/mmc_support.c        2005-01-30 09:07:01.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/db1x00/mmc_support.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/db1x00/mmc_support.c       2007-12-15 05:19:44.798973987 +0100
 @@ -0,0 +1,126 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -1895,9 +1912,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/db1x00/mmc_support.c linux-2.4.32-rc
 +EXPORT_SYMBOL(mmc_power_on);
 +EXPORT_SYMBOL(mmc_power_off);
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1200_ibutton.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1200_ibutton.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1200_ibutton.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1200_ibutton.c     2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/au1200_ibutton.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/au1200_ibutton.c    2007-12-15 05:19:44.798973987 +0100
 @@ -0,0 +1,270 @@
 +/* ---------------------------------------------------------------------- 
 + *  mtwilson_keys.c
@@ -2169,9 +2187,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1200_ibutton.c linux-2.4.32
 +MODULE_AUTHOR( DRIVER_AUTHOR );
 +MODULE_DESCRIPTION( DRIVER_DESC );
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1xxx_dock.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1xxx_dock.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1xxx_dock.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/au1xxx_dock.c        2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/au1xxx_dock.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/au1xxx_dock.c       2007-12-15 05:19:44.798973987 +0100
 @@ -0,0 +1,261 @@
 +/*
 + *  Copyright (C) 2003 Metrowerks, All Rights Reserved.
@@ -2434,9 +2453,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/au1xxx_dock.c linux-2.4.32-rc
 +
 +module_init(au1xxx_dock_init);
 +module_exit(au1xxx_dock_exit);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/board_setup.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/board_setup.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/board_setup.c       2007-12-15 05:19:44.798973987 +0100
 @@ -0,0 +1,226 @@
 +/*
 + *
@@ -2664,9 +2684,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/board_setup.c linux-2.4.32-rc
 +      return 0;
 +}
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/init.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/init.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/init.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/init.c       2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/init.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/init.c      2007-12-15 05:19:44.802974213 +0100
 @@ -0,0 +1,76 @@
 +/*
 + *
@@ -2744,9 +2765,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/init.c linux-2.4.32-rc1.mips/
 +      return 0;
 +}
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/irqmap.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/irqmap.c     2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/irqmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/irqmap.c    2007-12-15 05:19:44.802974213 +0100
 @@ -0,0 +1,61 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -2809,9 +2831,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/irqmap.c linux-2.4.32-rc1.mip
 +
 +int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/ficmmp/Makefile  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/ficmmp/Makefile     2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/ficmmp/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/ficmmp/Makefile    2007-12-15 05:19:44.802974213 +0100
 @@ -0,0 +1,25 @@
 +#
 +#  Copyright 2000 MontaVista Software Inc.
@@ -2838,9 +2861,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/ficmmp/Makefile linux-2.4.32-rc1.mip
 +
 +
 +include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/board_setup.c  2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/board_setup.c     2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/hydrogen3/board_setup.c       2007-12-15 05:19:43.014872316 +0100
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/board_setup.c    2007-12-15 05:19:44.802974213 +0100
 @@ -51,12 +51,19 @@
  {
  }
@@ -2861,9 +2885,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/board_setup.c linux-2.4.32
  #ifdef CONFIG_AU1X00_USB_DEVICE
        // 2nd USB port is USB device
        pin_func = au_readl(SYS_PINFUNC) & (u32)(~0x8000);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/buttons.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/buttons.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/buttons.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/buttons.c 2005-02-11 22:09:55.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/buttons.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/buttons.c        2007-12-15 05:19:44.802974213 +0100
 @@ -0,0 +1,308 @@
 +/*
 + *  Copyright (C) 2003 Metrowerks, All Rights Reserved.
@@ -3173,9 +3198,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/buttons.c linux-2.4.32-rc1
 +
 +module_init(hydrogen3_buttons_init);
 +module_exit(hydrogen3_buttons_exit);
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/Makefile       2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/Makefile  2005-02-11 22:09:55.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/hydrogen3/Makefile    2007-12-15 05:19:43.026873001 +0100
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/Makefile 2007-12-15 05:19:44.802974213 +0100
 @@ -14,6 +14,11 @@
  
  O_TARGET := hydrogen3.o
@@ -3189,9 +3215,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/Makefile linux-2.4.32-rc1.
 +endif
  
  include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/mmc_support.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/hydrogen3/mmc_support.c     2005-02-02 05:27:06.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/hydrogen3/mmc_support.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/hydrogen3/mmc_support.c    2007-12-15 05:19:44.802974213 +0100
 @@ -0,0 +1,89 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -3282,9 +3309,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/hydrogen3/mmc_support.c linux-2.4.32
 +EXPORT_SYMBOL(mmc_power_on);
 +EXPORT_SYMBOL(mmc_power_off);
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/mtx-1/board_setup.c      2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/board_setup.c 2004-11-26 09:37:16.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/mtx-1/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/mtx-1/board_setup.c   2007-12-15 05:19:43.038873685 +0100
++++ linux-2.4.35.4/arch/mips/au1000/mtx-1/board_setup.c        2007-12-15 05:19:44.806974443 +0100
 @@ -48,6 +48,12 @@
  
  extern struct rtc_ops no_rtc_ops;
@@ -3298,9 +3326,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/board_setup.c linux-2.4.32-rc1
  void __init board_setup(void)
  {
        rtc_ops = &no_rtc_ops;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/mtx-1/irqmap.c   2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/mtx-1/irqmap.c      2004-11-26 09:37:16.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/mtx-1/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/mtx-1/irqmap.c        2007-12-15 05:19:43.046874140 +0100
++++ linux-2.4.35.4/arch/mips/au1000/mtx-1/irqmap.c     2007-12-15 05:19:44.806974443 +0100
 @@ -72,10 +72,10 @@
         *      A       B       C       D
         */
@@ -3316,9 +3345,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/mtx-1/irqmap.c linux-2.4.32-rc1.mips
        };
        const long min_idsel = 0, max_idsel = 3, irqs_per_slot = 4;
        return PCI_IRQ_TABLE_LOOKUP;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1000/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1000/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1000/board_setup.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1000/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1000/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1000/board_setup.c  2007-12-15 05:19:43.054874596 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1000/board_setup.c       2007-12-15 05:19:44.806974443 +0100
 @@ -58,6 +58,10 @@
  {
  }
@@ -3330,9 +3360,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1000/board_setup.c linux-2.4.32-rc
  void __init board_setup(void)
  {
        u32 pin_func, static_cfg0;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/board_setup.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1100/board_setup.c  2007-12-15 05:19:43.062875051 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/board_setup.c       2007-12-15 05:19:44.806974443 +0100
 @@ -62,6 +62,10 @@
      au_writel(0x00000000, 0xAE00001C);
  }
@@ -3344,9 +3375,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/board_setup.c linux-2.4.32-rc
  void __init board_setup(void)
  {
        u32 pin_func;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/Makefile  2003-08-25 13:44:39.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/Makefile     2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1100/Makefile       2007-12-15 05:19:43.070875507 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/Makefile    2007-12-15 05:19:44.806974443 +0100
 @@ -16,4 +16,10 @@
  
  obj-y := init.o board_setup.o irqmap.o
@@ -3358,9 +3390,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/Makefile linux-2.4.32-rc1.mip
 +endif
 +
  include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1100/mmc_support.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1100/mmc_support.c        2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1100/mmc_support.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1100/mmc_support.c       2007-12-15 05:19:44.806974443 +0100
 @@ -0,0 +1,126 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -3488,9 +3521,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1100/mmc_support.c linux-2.4.32-rc
 +EXPORT_SYMBOL(mmc_power_on);
 +EXPORT_SYMBOL(mmc_power_off);
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/board_setup.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/board_setup.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/board_setup.c       2007-12-15 05:19:44.810974669 +0100
 @@ -0,0 +1,221 @@
 +/*
 + *
@@ -3713,9 +3747,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/board_setup.c linux-2.4.32-rc
 +      return 0;
 +}
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/init.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/init.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/init.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/init.c       2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/init.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/init.c      2007-12-15 05:19:44.810974669 +0100
 @@ -0,0 +1,72 @@
 +/*
 + *
@@ -3789,9 +3824,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/init.c linux-2.4.32-rc1.mips/
 +      return 0;
 +}
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/irqmap.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/irqmap.c     2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/irqmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/irqmap.c    2007-12-15 05:19:44.810974669 +0100
 @@ -0,0 +1,180 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -3973,9 +4009,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/irqmap.c linux-2.4.32-rc1.mip
 +      request of any source attached to the cascade */
 +}
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/Makefile linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/Makefile
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/Makefile  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/Makefile     2005-01-30 09:01:27.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/Makefile    2007-12-15 05:19:44.810974669 +0100
 @@ -0,0 +1,25 @@
 +#
 +#  Copyright 2000 MontaVista Software Inc.
@@ -4002,9 +4039,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/Makefile linux-2.4.32-rc1.mip
 +
 +
 +include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/mmc_support.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/mmc_support.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1200/mmc_support.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1200/mmc_support.c        2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1200/mmc_support.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/au1000/pb1200/mmc_support.c       2007-12-15 05:19:44.810974669 +0100
 @@ -0,0 +1,141 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -4147,9 +4185,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1200/mmc_support.c linux-2.4.32-rc
 +EXPORT_SYMBOL(mmc_power_on);
 +EXPORT_SYMBOL(mmc_power_off);
 +
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1500/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1500/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1500/board_setup.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1500/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1500/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1500/board_setup.c  2007-12-15 05:19:43.110877786 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1500/board_setup.c       2007-12-15 05:19:44.810974669 +0100
 @@ -62,6 +62,10 @@
      au_writel(0x00000000, 0xAE00001C);
  }
@@ -4161,9 +4200,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1500/board_setup.c linux-2.4.32-rc
  void __init board_setup(void)
  {
        u32 pin_func;
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/board_setup.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/board_setup.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1550/board_setup.c     2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/board_setup.c        2005-03-19 08:17:51.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1550/board_setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1550/board_setup.c  2007-12-15 05:19:43.118878244 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1550/board_setup.c       2007-12-15 05:19:44.814974898 +0100
 @@ -48,12 +48,31 @@
  
  extern struct rtc_ops no_rtc_ops;
@@ -4233,9 +4273,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/board_setup.c linux-2.4.32-rc
 +#endif
        printk("AMD Alchemy Pb1550 Board\n");
  }
-diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/irqmap.c linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/irqmap.c
---- linux-2.4.32-rc1/arch/mips/au1000/pb1550/irqmap.c  2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/au1000/pb1550/irqmap.c     2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/au1000/pb1550/irqmap.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/au1000/pb1550/irqmap.c       2007-12-15 05:19:43.126878700 +0100
++++ linux-2.4.35.4/arch/mips/au1000/pb1550/irqmap.c    2007-12-15 05:19:44.814974898 +0100
 @@ -50,6 +50,9 @@
  au1xxx_irq_map_t au1xxx_irq_map[] = {
        { AU1000_GPIO_0, INTC_INT_LOW_LEVEL, 0 },
@@ -4246,9 +4287,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/au1000/pb1550/irqmap.c linux-2.4.32-rc1.mip
  };
  
  int au1xxx_nr_irqs = sizeof(au1xxx_irq_map)/sizeof(au1xxx_irq_map_t);
-diff -Nur linux-2.4.32-rc1/arch/mips/config-shared.in linux-2.4.32-rc1.mips/arch/mips/config-shared.in
---- linux-2.4.32-rc1/arch/mips/config-shared.in        2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/config-shared.in   2005-01-30 09:01:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in     2007-12-15 05:19:43.134879155 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in  2007-12-15 05:19:44.814974898 +0100
 @@ -21,16 +21,19 @@
  comment 'Machine selection'
  dep_bool 'Support for Acer PICA 1 chipset (EXPERIMENTAL)' CONFIG_ACER_PICA_61 $CONFIG_EXPERIMENTAL
@@ -4369,9 +4411,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/config-shared.in linux-2.4.32-rc1.mips/arch
       "$CONFIG_NEC_OSPREY" = "y" -o \
       "$CONFIG_NEC_EAGLE" = "y" -o \
       "$CONFIG_NINO" = "y" -o \
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig linux-2.4.32-rc1.mips/arch/mips/defconfig
---- linux-2.4.32-rc1/arch/mips/defconfig       2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig    2007-12-15 05:19:43.142879610 +0100
++++ linux-2.4.35.4/arch/mips/defconfig 2007-12-15 05:19:44.814974898 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4414,9 +4457,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig linux-2.4.32-rc1.mips/arch/mips/d
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-atlas linux-2.4.32-rc1.mips/arch/mips/defconfig-atlas
---- linux-2.4.32-rc1/arch/mips/defconfig-atlas 2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-atlas    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-atlas
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-atlas      2007-12-15 05:19:43.150880066 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-atlas   2007-12-15 05:19:44.818975127 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4459,9 +4503,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-atlas linux-2.4.32-rc1.mips/arch/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-bosporus linux-2.4.32-rc1.mips/arch/mips/defconfig-bosporus
---- linux-2.4.32-rc1/arch/mips/defconfig-bosporus      2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-bosporus 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-bosporus
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-bosporus   2007-12-15 05:19:43.158880524 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-bosporus        2007-12-15 05:19:44.818975127 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4522,9 +4567,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-bosporus linux-2.4.32-rc1.mips/ar
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-capcella linux-2.4.32-rc1.mips/arch/mips/defconfig-capcella
---- linux-2.4.32-rc1/arch/mips/defconfig-capcella      2005-01-19 15:09:27.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-capcella 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-capcella
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-capcella   2007-12-15 05:19:43.162880750 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-capcella        2007-12-15 05:19:44.818975127 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4555,9 +4601,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-capcella linux-2.4.32-rc1.mips/ar
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-cobalt linux-2.4.32-rc1.mips/arch/mips/defconfig-cobalt
---- linux-2.4.32-rc1/arch/mips/defconfig-cobalt        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-cobalt   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-cobalt
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-cobalt     2007-12-15 05:19:43.170881205 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-cobalt  2007-12-15 05:19:44.818975127 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4588,9 +4635,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-cobalt linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=16
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-csb250 linux-2.4.32-rc1.mips/arch/mips/defconfig-csb250
---- linux-2.4.32-rc1/arch/mips/defconfig-csb250        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-csb250   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-csb250
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-csb250     2007-12-15 05:19:43.178881664 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-csb250  2007-12-15 05:19:44.818975127 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4621,9 +4669,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-csb250 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1000 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1000
---- linux-2.4.32-rc1/arch/mips/defconfig-db1000        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1000   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1000
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1000     2007-12-15 05:19:43.186882119 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1000  2007-12-15 05:19:44.822975353 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4674,9 +4723,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1000 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1100 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1100
---- linux-2.4.32-rc1/arch/mips/defconfig-db1100        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1100   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1100     2007-12-15 05:19:43.190882345 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1100  2007-12-15 05:19:44.822975353 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -4743,9 +4793,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1100 linux-2.4.32-rc1.mips/arch
  # CONFIG_FB_IT8181 is not set
  # CONFIG_FB_VIRTUAL is not set
  CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1200 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1200
---- linux-2.4.32-rc1/arch/mips/defconfig-db1200        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1200   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1200
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-db1200  2007-12-15 05:19:44.822975353 +0100
 @@ -0,0 +1,1032 @@
 +#
 +# Automatically generated make config: don't edit
@@ -5779,9 +5830,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1200 linux-2.4.32-rc1.mips/arch
 +CONFIG_ZLIB_INFLATE=m
 +CONFIG_ZLIB_DEFLATE=m
 +# CONFIG_FW_LOADER is not set
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1500
---- linux-2.4.32-rc1/arch/mips/defconfig-db1500        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1500   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1500     2007-12-15 05:19:43.202883030 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1500  2007-12-15 05:19:44.826975582 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -5812,9 +5864,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1500 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1550 linux-2.4.32-rc1.mips/arch/mips/defconfig-db1550
---- linux-2.4.32-rc1/arch/mips/defconfig-db1550        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-db1550   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-db1550
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-db1550     2007-12-15 05:19:43.210883485 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-db1550  2007-12-15 05:19:44.826975582 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -5865,9 +5918,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-db1550 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5476 linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5476
---- linux-2.4.32-rc1/arch/mips/defconfig-ddb5476       2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5476  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ddb5476
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ddb5476    2007-12-15 05:19:43.218883943 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ddb5476 2007-12-15 05:19:44.826975582 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -5898,9 +5952,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5476 linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5477 linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5477
---- linux-2.4.32-rc1/arch/mips/defconfig-ddb5477       2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ddb5477  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ddb5477
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ddb5477    2007-12-15 05:19:43.226884399 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ddb5477 2007-12-15 05:19:44.826975582 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -5931,9 +5986,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ddb5477 linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-decstation linux-2.4.32-rc1.mips/arch/mips/defconfig-decstation
---- linux-2.4.32-rc1/arch/mips/defconfig-decstation    2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-decstation       2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-decstation
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-decstation 2007-12-15 05:19:43.234884854 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-decstation      2007-12-15 05:19:44.826975582 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -5976,9 +6032,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-decstation linux-2.4.32-rc1.mips/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-e55 linux-2.4.32-rc1.mips/arch/mips/defconfig-e55
---- linux-2.4.32-rc1/arch/mips/defconfig-e55   2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-e55      2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-e55
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-e55        2007-12-15 05:19:43.242885309 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-e55     2007-12-15 05:19:44.830975809 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -6009,9 +6066,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-e55 linux-2.4.32-rc1.mips/arch/mi
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-eagle linux-2.4.32-rc1.mips/arch/mips/defconfig-eagle
---- linux-2.4.32-rc1/arch/mips/defconfig-eagle 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-eagle    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-eagle
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-eagle      2007-12-15 05:19:43.246885538 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-eagle   2007-12-15 05:19:44.830975809 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -6071,9 +6129,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-eagle linux-2.4.32-rc1.mips/arch/
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev64120 linux-2.4.32-rc1.mips/arch/mips/defconfig-ev64120
---- linux-2.4.32-rc1/arch/mips/defconfig-ev64120       2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ev64120  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ev64120
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ev64120    2007-12-15 05:19:43.254885994 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ev64120 2007-12-15 05:19:44.830975809 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -6104,9 +6163,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev64120 linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev96100 linux-2.4.32-rc1.mips/arch/mips/defconfig-ev96100
---- linux-2.4.32-rc1/arch/mips/defconfig-ev96100       2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ev96100  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ev96100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ev96100    2007-12-15 05:19:43.262886449 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ev96100 2007-12-15 05:19:44.830975809 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -6137,9 +6197,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ev96100 linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ficmmp linux-2.4.32-rc1.mips/arch/mips/defconfig-ficmmp
---- linux-2.4.32-rc1/arch/mips/defconfig-ficmmp        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ficmmp   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ficmmp
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-ficmmp  2007-12-15 05:19:44.834976038 +0100
 @@ -0,0 +1,862 @@
 +#
 +# Automatically generated make config: don't edit
@@ -7003,9 +7064,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ficmmp linux-2.4.32-rc1.mips/arch
 +# CONFIG_CRC32 is not set
 +CONFIG_ZLIB_INFLATE=m
 +CONFIG_ZLIB_DEFLATE=m
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hp-lj linux-2.4.32-rc1.mips/arch/mips/defconfig-hp-lj
---- linux-2.4.32-rc1/arch/mips/defconfig-hp-lj 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-hp-lj    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-hp-lj
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-hp-lj      2007-12-15 05:19:43.274887133 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-hp-lj   2007-12-15 05:19:44.834976038 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7065,9 +7127,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hp-lj linux-2.4.32-rc1.mips/arch/
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hydrogen3 linux-2.4.32-rc1.mips/arch/mips/defconfig-hydrogen3
---- linux-2.4.32-rc1/arch/mips/defconfig-hydrogen3     2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-hydrogen3        2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-hydrogen3
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-hydrogen3  2007-12-15 05:19:43.282887589 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-hydrogen3       2007-12-15 05:19:44.834976038 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7132,9 +7195,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-hydrogen3 linux-2.4.32-rc1.mips/a
  # CONFIG_FB_IT8181 is not set
  # CONFIG_FB_VIRTUAL is not set
  CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ip22 linux-2.4.32-rc1.mips/arch/mips/defconfig-ip22
---- linux-2.4.32-rc1/arch/mips/defconfig-ip22  2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ip22     2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ip22
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ip22       2007-12-15 05:19:43.290888044 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ip22    2007-12-15 05:19:44.834976038 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7177,9 +7241,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ip22 linux-2.4.32-rc1.mips/arch/m
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-it8172 linux-2.4.32-rc1.mips/arch/mips/defconfig-it8172
---- linux-2.4.32-rc1/arch/mips/defconfig-it8172        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-it8172   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-it8172
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-it8172     2007-12-15 05:19:43.294888273 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-it8172  2007-12-15 05:19:44.838976267 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7239,9 +7304,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-it8172 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ivr linux-2.4.32-rc1.mips/arch/mips/defconfig-ivr
---- linux-2.4.32-rc1/arch/mips/defconfig-ivr   2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ivr      2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ivr
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ivr        2007-12-15 05:19:43.302888729 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ivr     2007-12-15 05:19:44.838976267 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7272,9 +7338,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ivr linux-2.4.32-rc1.mips/arch/mi
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-jmr3927 linux-2.4.32-rc1.mips/arch/mips/defconfig-jmr3927
---- linux-2.4.32-rc1/arch/mips/defconfig-jmr3927       2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-jmr3927  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-jmr3927
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-jmr3927    2007-12-15 05:19:43.310889184 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-jmr3927 2007-12-15 05:19:44.838976267 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7305,9 +7372,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-jmr3927 linux-2.4.32-rc1.mips/arc
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-lasat linux-2.4.32-rc1.mips/arch/mips/defconfig-lasat
---- linux-2.4.32-rc1/arch/mips/defconfig-lasat 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-lasat    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-lasat
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-lasat      2007-12-15 05:19:43.318889642 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-lasat   2007-12-15 05:19:44.838976267 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7356,9 +7424,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-lasat linux-2.4.32-rc1.mips/arch/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-malta linux-2.4.32-rc1.mips/arch/mips/defconfig-malta
---- linux-2.4.32-rc1/arch/mips/defconfig-malta 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-malta    2005-04-19 14:19:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/defconfig-malta
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-malta      2007-12-15 05:19:43.322889868 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-malta   2007-12-15 05:19:44.842976493 +0100
 @@ -22,16 +22,19 @@
  #
  # CONFIG_ACER_PICA_61 is not set
@@ -7497,9 +7566,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-malta linux-2.4.32-rc1.mips/arch/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mirage linux-2.4.32-rc1.mips/arch/mips/defconfig-mirage
---- linux-2.4.32-rc1/arch/mips/defconfig-mirage        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mirage   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mirage
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mirage     2007-12-15 05:19:43.330890324 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mirage  2007-12-15 05:19:44.842976493 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7548,9 +7618,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mirage linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mpc30x linux-2.4.32-rc1.mips/arch/mips/defconfig-mpc30x
---- linux-2.4.32-rc1/arch/mips/defconfig-mpc30x        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mpc30x   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mpc30x
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mpc30x     2007-12-15 05:19:43.338890782 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mpc30x  2007-12-15 05:19:44.842976493 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7581,9 +7652,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mpc30x linux-2.4.32-rc1.mips/arch
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mtx-1 linux-2.4.32-rc1.mips/arch/mips/defconfig-mtx-1
---- linux-2.4.32-rc1/arch/mips/defconfig-mtx-1 2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-mtx-1    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-mtx-1
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-mtx-1      2007-12-15 05:19:43.346891237 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-mtx-1   2007-12-15 05:19:44.842976493 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7644,9 +7716,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-mtx-1 linux-2.4.32-rc1.mips/arch/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-nino linux-2.4.32-rc1.mips/arch/mips/defconfig-nino
---- linux-2.4.32-rc1/arch/mips/defconfig-nino  2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-nino     2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-nino
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-nino       2007-12-15 05:19:43.354891693 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-nino    2007-12-15 05:19:44.846976722 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7677,9 +7750,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-nino linux-2.4.32-rc1.mips/arch/m
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ocelot linux-2.4.32-rc1.mips/arch/mips/defconfig-ocelot
---- linux-2.4.32-rc1/arch/mips/defconfig-ocelot        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ocelot   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ocelot
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ocelot     2007-12-15 05:19:43.358891922 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ocelot  2007-12-15 05:19:44.846976722 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7728,9 +7802,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ocelot linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-osprey linux-2.4.32-rc1.mips/arch/mips/defconfig-osprey
---- linux-2.4.32-rc1/arch/mips/defconfig-osprey        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-osprey   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-osprey
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-osprey     2007-12-15 05:19:43.366892377 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-osprey  2007-12-15 05:19:44.846976722 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -7761,9 +7836,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-osprey linux-2.4.32-rc1.mips/arch
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1000 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1000
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1000        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1000   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1000
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1000     2007-12-15 05:19:43.374892832 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1000  2007-12-15 05:19:44.846976722 +0100
 @@ -30,8 +30,8 @@
  CONFIG_MIPS_PB1000=y
  # CONFIG_MIPS_PB1100 is not set
@@ -7821,9 +7897,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1000 linux-2.4.32-rc1.mips/arch
  # CONFIG_TS_AU1X00_ADS7846 is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1100 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1100
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1100        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1100   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1100
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1100     2007-12-15 05:19:43.382893288 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1100  2007-12-15 05:19:44.850976948 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  CONFIG_MIPS_PB1100=y
@@ -7888,9 +7965,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1100 linux-2.4.32-rc1.mips/arch
  # CONFIG_FB_IT8181 is not set
  # CONFIG_FB_VIRTUAL is not set
  CONFIG_FBCON_ADVANCED=y
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1200 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1200
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1200        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1200   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1200
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/defconfig-pb1200  2007-12-15 05:19:44.850976948 +0100
 @@ -0,0 +1,1060 @@
 +#
 +# Automatically generated make config: don't edit
@@ -8952,9 +9030,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1200 linux-2.4.32-rc1.mips/arch
 +CONFIG_ZLIB_INFLATE=m
 +CONFIG_ZLIB_DEFLATE=m
 +# CONFIG_FW_LOADER is not set
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1500
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1500        2005-01-19 15:09:28.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1500   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1500     2007-12-15 05:19:43.394893972 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1500  2007-12-15 05:19:44.850976948 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9003,9 +9082,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1500 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1550 linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1550
---- linux-2.4.32-rc1/arch/mips/defconfig-pb1550        2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-pb1550   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-pb1550
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-pb1550     2007-12-15 05:19:43.402894428 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-pb1550  2007-12-15 05:19:44.854977177 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9056,9 +9136,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-pb1550 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rbtx4927 linux-2.4.32-rc1.mips/arch/mips/defconfig-rbtx4927
---- linux-2.4.32-rc1/arch/mips/defconfig-rbtx4927      2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-rbtx4927 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-rbtx4927
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-rbtx4927   2007-12-15 05:19:43.406894657 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-rbtx4927        2007-12-15 05:19:44.854977177 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9089,9 +9170,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rbtx4927 linux-2.4.32-rc1.mips/ar
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rm200 linux-2.4.32-rc1.mips/arch/mips/defconfig-rm200
---- linux-2.4.32-rc1/arch/mips/defconfig-rm200 2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-rm200    2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-rm200
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-rm200      2007-12-15 05:19:43.414895112 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-rm200   2007-12-15 05:19:44.854977177 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9122,9 +9204,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-rm200 linux-2.4.32-rc1.mips/arch/
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sb1250-swarm linux-2.4.32-rc1.mips/arch/mips/defconfig-sb1250-swarm
---- linux-2.4.32-rc1/arch/mips/defconfig-sb1250-swarm  2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-sb1250-swarm     2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-sb1250-swarm
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-sb1250-swarm       2007-12-15 05:19:43.422895567 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-sb1250-swarm    2007-12-15 05:19:44.854977177 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9163,9 +9246,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sb1250-swarm linux-2.4.32-rc1.mip
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sead linux-2.4.32-rc1.mips/arch/mips/defconfig-sead
---- linux-2.4.32-rc1/arch/mips/defconfig-sead  2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-sead     2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-sead
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-sead       2007-12-15 05:19:43.430896023 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-sead    2007-12-15 05:19:44.854977177 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9184,9 +9268,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-sead linux-2.4.32-rc1.mips/arch/m
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-stretch linux-2.4.32-rc1.mips/arch/mips/defconfig-stretch
---- linux-2.4.32-rc1/arch/mips/defconfig-stretch       2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-stretch  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-stretch
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-stretch    2007-12-15 05:19:43.438896481 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-stretch 2007-12-15 05:19:44.858977407 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9229,9 +9314,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-stretch linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0226 linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0226
---- linux-2.4.32-rc1/arch/mips/defconfig-tb0226        2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0226   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-tb0226
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-tb0226     2007-12-15 05:19:43.442896707 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-tb0226  2007-12-15 05:19:44.858977407 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9274,9 +9360,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0226 linux-2.4.32-rc1.mips/arch
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0229 linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0229
---- linux-2.4.32-rc1/arch/mips/defconfig-tb0229        2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-tb0229   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-tb0229
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-tb0229     2007-12-15 05:19:43.450897163 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-tb0229  2007-12-15 05:19:44.858977407 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9307,9 +9394,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-tb0229 linux-2.4.32-rc1.mips/arch
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ti1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-ti1500
---- linux-2.4.32-rc1/arch/mips/defconfig-ti1500        2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-ti1500   2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-ti1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-ti1500     2007-12-15 05:19:43.458897621 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-ti1500  2007-12-15 05:19:44.858977407 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9358,9 +9446,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-ti1500 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-workpad linux-2.4.32-rc1.mips/arch/mips/defconfig-workpad
---- linux-2.4.32-rc1/arch/mips/defconfig-workpad       2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-workpad  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-workpad
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-workpad    2007-12-15 05:19:43.466898076 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-workpad 2007-12-15 05:19:44.862977633 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9391,9 +9480,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-workpad linux-2.4.32-rc1.mips/arc
  # CONFIG_VR41XX_KIU is not set
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-xxs1500 linux-2.4.32-rc1.mips/arch/mips/defconfig-xxs1500
---- linux-2.4.32-rc1/arch/mips/defconfig-xxs1500       2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-xxs1500  2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-xxs1500
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-xxs1500    2007-12-15 05:19:43.474898531 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-xxs1500 2007-12-15 05:19:44.862977633 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9442,9 +9532,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-xxs1500 linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-yosemite linux-2.4.32-rc1.mips/arch/mips/defconfig-yosemite
---- linux-2.4.32-rc1/arch/mips/defconfig-yosemite      2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/defconfig-yosemite 2005-03-18 13:13:21.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/defconfig-yosemite
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig-yosemite   2007-12-15 05:19:43.478898761 +0100
++++ linux-2.4.35.4/arch/mips/defconfig-yosemite        2007-12-15 05:19:44.862977633 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -9487,9 +9578,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/defconfig-yosemite linux-2.4.32-rc1.mips/ar
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/cpu-probe.c linux-2.4.32-rc1.mips/arch/mips/kernel/cpu-probe.c
---- linux-2.4.32-rc1/arch/mips/kernel/cpu-probe.c      2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/cpu-probe.c 2005-05-25 15:33:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/cpu-probe.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/cpu-probe.c   2007-12-15 05:19:43.486899216 +0100
++++ linux-2.4.35.4/arch/mips/kernel/cpu-probe.c        2007-12-15 05:19:44.862977633 +0100
 @@ -34,21 +34,16 @@
                ".set\tmips0");
  }
@@ -9558,9 +9650,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/cpu-probe.c linux-2.4.32-rc1.mips/ar
        default:
                printk(" unavailable.\n");
                break;
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/head.S linux-2.4.32-rc1.mips/arch/mips/kernel/head.S
---- linux-2.4.32-rc1/arch/mips/kernel/head.S   2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/head.S      2004-11-22 14:38:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/head.S        2007-12-15 05:19:43.494899671 +0100
++++ linux-2.4.35.4/arch/mips/kernel/head.S     2007-12-15 05:19:44.866977862 +0100
 @@ -43,9 +43,9 @@
  
                /* Cache Error */
@@ -9729,9 +9822,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/head.S linux-2.4.32-rc1.mips/arch/mi
                END(smp_bootstrap)
  #endif
  
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/process.c linux-2.4.32-rc1.mips/arch/mips/kernel/process.c
---- linux-2.4.32-rc1/arch/mips/kernel/process.c        2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/process.c   2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/process.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/process.c     2007-12-15 05:19:43.502900127 +0100
++++ linux-2.4.35.4/arch/mips/kernel/process.c  2007-12-15 05:19:44.866977862 +0100
 @@ -128,6 +128,26 @@
        return 1;
  }
@@ -9759,9 +9853,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/process.c linux-2.4.32-rc1.mips/arch
  /*
   * Create a kernel thread
   */
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/scall_o32.S linux-2.4.32-rc1.mips/arch/mips/kernel/scall_o32.S
---- linux-2.4.32-rc1/arch/mips/kernel/scall_o32.S      2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/scall_o32.S 2005-02-07 22:21:53.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/scall_o32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/scall_o32.S   2007-12-15 05:19:43.506900356 +0100
++++ linux-2.4.35.4/arch/mips/kernel/scall_o32.S        2007-12-15 05:19:44.866977862 +0100
 @@ -121,15 +121,14 @@
  
  trace_a_syscall:
@@ -9780,9 +9875,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/scall_o32.S linux-2.4.32-rc1.mips/ar
  
        li      t0, -EMAXERRNO - 1      # error?
        sltu    t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/setup.c linux-2.4.32-rc1.mips/arch/mips/kernel/setup.c
---- linux-2.4.32-rc1/arch/mips/kernel/setup.c  2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/setup.c     2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/setup.c       2007-12-15 05:19:43.514900811 +0100
++++ linux-2.4.35.4/arch/mips/kernel/setup.c    2007-12-15 05:19:44.866977862 +0100
 @@ -5,7 +5,7 @@
   *
   * Copyright (C) 1995  Linus Torvalds
@@ -9812,9 +9908,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/setup.c linux-2.4.32-rc1.mips/arch/m
        start_kernel();
  }
  
-diff -Nur linux-2.4.32-rc1/arch/mips/kernel/traps.c linux-2.4.32-rc1.mips/arch/mips/kernel/traps.c
---- linux-2.4.32-rc1/arch/mips/kernel/traps.c  2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/kernel/traps.c     2005-04-12 22:25:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/traps.c       2007-12-15 05:19:43.522901266 +0100
++++ linux-2.4.35.4/arch/mips/kernel/traps.c    2007-12-15 05:19:44.870978088 +0100
 @@ -452,9 +452,10 @@
        }
        ll_task = current;
@@ -9901,9 +9998,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/kernel/traps.c linux-2.4.32-rc1.mips/arch/m
 -      TLBMISS_HANDLER_SETUP();
 +      per_cpu_trap_init();
  }
-diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-no.c linux-2.4.32-rc1.mips/arch/mips/lib/rtc-no.c
---- linux-2.4.32-rc1/arch/mips/lib/rtc-no.c    2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/lib/rtc-no.c       2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/lib/rtc-no.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/rtc-no.c 2007-12-15 05:19:43.530901722 +0100
++++ linux-2.4.35.4/arch/mips/lib/rtc-no.c      2007-12-15 05:19:44.870978088 +0100
 @@ -6,10 +6,9 @@
   * Stub RTC routines to keep Linux from crashing on machine which don't
   * have a RTC chip.
@@ -9922,9 +10020,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-no.c linux-2.4.32-rc1.mips/arch/mip
  };
 -
 -EXPORT_SYMBOL(rtc_ops);
-diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-std.c linux-2.4.32-rc1.mips/arch/mips/lib/rtc-std.c
---- linux-2.4.32-rc1/arch/mips/lib/rtc-std.c   2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/lib/rtc-std.c      2005-01-13 22:15:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/lib/rtc-std.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/rtc-std.c        2007-12-15 05:19:43.538902180 +0100
++++ linux-2.4.35.4/arch/mips/lib/rtc-std.c     2007-12-15 05:19:44.870978088 +0100
 @@ -5,9 +5,8 @@
   *
   * RTC routines for PC style attached Dallas chip.
@@ -9942,10 +10041,11 @@ diff -Nur linux-2.4.32-rc1/arch/mips/lib/rtc-std.c linux-2.4.32-rc1.mips/arch/mi
  };
 -
 -EXPORT_SYMBOL(rtc_ops);
-diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Makefile
---- linux-2.4.32-rc1/arch/mips/Makefile        2005-01-19 15:09:26.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/Makefile   2005-01-30 09:01:26.000000000 +0100
-@@ -211,7 +211,7 @@
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile     2007-12-15 05:19:43.546902635 +0100
++++ linux-2.4.35.4/arch/mips/Makefile  2007-12-15 05:19:44.870978088 +0100
+@@ -209,7 +209,7 @@
  endif
  
  #
@@ -9954,7 +10054,7 @@ diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Ma
  #
  ifdef CONFIG_MIPS_PB1000
  LIBS          += arch/mips/au1000/pb1000/pb1000.o \
-@@ -220,9 +220,6 @@
+@@ -218,9 +218,6 @@
  LOADADDR      := 0x80100000
  endif
  
@@ -9964,7 +10064,7 @@ diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Ma
  ifdef CONFIG_MIPS_PB1100
  LIBS          += arch/mips/au1000/pb1100/pb1100.o \
                   arch/mips/au1000/common/au1000.o
-@@ -230,9 +227,6 @@
+@@ -228,9 +225,6 @@
  LOADADDR      += 0x80100000
  endif
  
@@ -9974,7 +10074,7 @@ diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Ma
  ifdef CONFIG_MIPS_PB1500
  LIBS          += arch/mips/au1000/pb1500/pb1500.o \
                   arch/mips/au1000/common/au1000.o
-@@ -240,9 +234,6 @@
+@@ -238,9 +232,6 @@
  LOADADDR      := 0x80100000
  endif
  
@@ -9984,7 +10084,7 @@ diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Ma
  ifdef CONFIG_MIPS_DB1000
  LIBS          += arch/mips/au1000/db1x00/db1x00.o \
                   arch/mips/au1000/common/au1000.o
-@@ -313,6 +304,27 @@
+@@ -311,6 +302,27 @@
  LOADADDR      += 0x80100000
  endif
  
@@ -10012,9 +10112,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/Makefile linux-2.4.32-rc1.mips/arch/mips/Ma
  
  #
  # Cogent CSB250
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/mips/mm/cerr-sb1.c
---- linux-2.4.32-rc1/arch/mips/mm/cerr-sb1.c   2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/cerr-sb1.c      2004-12-13 18:37:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/cerr-sb1.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/cerr-sb1.c        2007-12-15 05:19:43.554903091 +0100
++++ linux-2.4.35.4/arch/mips/mm/cerr-sb1.c     2007-12-15 05:19:44.870978088 +0100
 @@ -252,14 +252,14 @@
  
  /* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
@@ -10059,9 +10160,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/mi
                if (way == 0) {
                        lru = (taghi >> 14) & 0xff;
                        prom_printf("[Bank %d Set 0x%02x]  LRU > %d %d %d %d > MRU\n",
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mips/mm/c-r4k.c
---- linux-2.4.32-rc1/arch/mips/mm/c-r4k.c      2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/c-r4k.c 2005-02-06 22:55:42.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/c-r4k.c   2007-12-15 05:19:43.558903320 +0100
++++ linux-2.4.35.4/arch/mips/mm/c-r4k.c        2007-12-15 05:19:44.874978317 +0100
 @@ -867,9 +867,16 @@
         * normally they'd suffer from aliases but magic in the hardware deals
         * with that for us so we don't need to take care ourselves.
@@ -10092,9 +10194,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mips/
        r4k_blast_dcache_page_setup();
        r4k_blast_dcache_page_indexed_setup();
        r4k_blast_dcache_setup();
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-mips32.S linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-mips32.S
---- linux-2.4.32-rc1/arch/mips/mm/tlbex-mips32.S       2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-mips32.S  2004-11-29 00:33:15.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-mips32.S    2007-12-15 05:19:43.566903775 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-mips32.S 2007-12-15 05:19:44.874978317 +0100
 @@ -196,7 +196,7 @@
        .set    noat; \
        SAVE_ALL; \
@@ -10104,9 +10207,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-mips32.S linux-2.4.32-rc1.mips/arc
        .set    at; \
        move    a0, sp; \
        jal     do_page_fault; \
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-r4k.S
---- linux-2.4.32-rc1/arch/mips/mm/tlbex-r4k.S  2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlbex-r4k.S     2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/mm/tlbex-r4k.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlbex-r4k.S       2007-12-15 05:19:43.574904230 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlbex-r4k.S    2007-12-15 05:19:44.874978317 +0100
 @@ -184,13 +184,10 @@
        P_MTC0  k0, CP0_ENTRYLO0                # load it
        PTE_SRL k1, k1, 6                       # convert to entrylo1
@@ -10175,9 +10279,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch/m
        .set    mips3
        eret
        .set    mips0
-diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/mips/mm/tlb-r4k.c
---- linux-2.4.32-rc1/arch/mips/mm/tlb-r4k.c    2005-01-19 15:09:29.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips/mm/tlb-r4k.c       2004-11-25 23:18:38.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/mm/tlb-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/mm/tlb-r4k.c 2007-12-15 05:19:43.582904686 +0100
++++ linux-2.4.35.4/arch/mips/mm/tlb-r4k.c      2007-12-15 05:19:44.874978317 +0100
 @@ -3,17 +3,12 @@
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
@@ -10504,9 +10609,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/mip
  
        /*
         * You should never change this register:
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig linux-2.4.32-rc1.mips/arch/mips64/defconfig
---- linux-2.4.32-rc1/arch/mips64/defconfig     2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig        2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig  2007-12-15 05:19:43.590905141 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig       2007-12-15 05:19:44.874978317 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10537,9 +10643,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig linux-2.4.32-rc1.mips/arch/mips
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-atlas linux-2.4.32-rc1.mips/arch/mips64/defconfig-atlas
---- linux-2.4.32-rc1/arch/mips64/defconfig-atlas       2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-atlas  2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-atlas
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-atlas    2007-12-15 05:19:43.598905599 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-atlas 2007-12-15 05:19:44.878978546 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10582,9 +10689,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-atlas linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-decstation linux-2.4.32-rc1.mips/arch/mips64/defconfig-decstation
---- linux-2.4.32-rc1/arch/mips64/defconfig-decstation  2005-01-19 15:09:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-decstation     2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-decstation
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-decstation       2007-12-15 05:19:43.606906055 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-decstation    2007-12-15 05:19:44.878978546 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10627,9 +10735,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-decstation linux-2.4.32-rc1.mip
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip22 linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip22
---- linux-2.4.32-rc1/arch/mips64/defconfig-ip22        2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip22   2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ip22
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ip22     2007-12-15 05:19:43.610906281 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ip22  2007-12-15 05:19:44.878978546 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10672,9 +10781,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip22 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip27 linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip27
---- linux-2.4.32-rc1/arch/mips64/defconfig-ip27        2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ip27   2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ip27
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ip27     2007-12-15 05:19:43.618906739 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ip27  2007-12-15 05:19:44.878978546 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10705,9 +10815,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ip27 linux-2.4.32-rc1.mips/arch
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-jaguar linux-2.4.32-rc1.mips/arch/mips64/defconfig-jaguar
---- linux-2.4.32-rc1/arch/mips64/defconfig-jaguar      2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-jaguar 2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-jaguar
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-jaguar   2007-12-15 05:19:43.626907195 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-jaguar        2007-12-15 05:19:44.882978773 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10738,9 +10849,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-jaguar linux-2.4.32-rc1.mips/ar
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-malta linux-2.4.32-rc1.mips/arch/mips64/defconfig-malta
---- linux-2.4.32-rc1/arch/mips64/defconfig-malta       2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-malta  2005-04-19 14:19:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/defconfig-malta
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-malta    2007-12-15 05:19:43.634907650 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-malta 2007-12-15 05:19:44.882978773 +0100
 @@ -22,16 +22,19 @@
  #
  # CONFIG_ACER_PICA_61 is not set
@@ -10891,9 +11003,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-malta linux-2.4.32-rc1.mips/arc
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ocelotc linux-2.4.32-rc1.mips/arch/mips64/defconfig-ocelotc
---- linux-2.4.32-rc1/arch/mips64/defconfig-ocelotc     2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-ocelotc        2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-ocelotc
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-ocelotc  2007-12-15 05:19:43.638907879 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-ocelotc       2007-12-15 05:19:44.882978773 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10924,9 +11037,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-ocelotc linux-2.4.32-rc1.mips/a
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sb1250-swarm linux-2.4.32-rc1.mips/arch/mips64/defconfig-sb1250-swarm
---- linux-2.4.32-rc1/arch/mips64/defconfig-sb1250-swarm        2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-sb1250-swarm   2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-sb1250-swarm
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-sb1250-swarm     2007-12-15 05:19:43.646908334 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-sb1250-swarm  2007-12-15 05:19:44.882978773 +0100
 @@ -30,8 +30,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10965,9 +11079,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sb1250-swarm linux-2.4.32-rc1.m
  CONFIG_UNIX98_PTYS=y
  CONFIG_UNIX98_PTY_COUNT=256
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sead linux-2.4.32-rc1.mips/arch/mips64/defconfig-sead
---- linux-2.4.32-rc1/arch/mips64/defconfig-sead        2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/defconfig-sead   2005-03-18 13:13:23.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/defconfig-sead
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig-sead     2007-12-15 05:19:43.654908790 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig-sead  2007-12-15 05:19:44.886979002 +0100
 @@ -28,8 +28,8 @@
  # CONFIG_MIPS_PB1000 is not set
  # CONFIG_MIPS_PB1100 is not set
@@ -10986,9 +11101,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/defconfig-sead linux-2.4.32-rc1.mips/arch
  # CONFIG_UNIX98_PTYS is not set
  
  #
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfn32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfn32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfn32.c        2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfn32.c   2005-01-26 03:40:47.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/binfmt_elfn32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/binfmt_elfn32.c     2007-12-15 05:19:43.662909245 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/binfmt_elfn32.c  2007-12-15 05:19:44.894979457 +0100
 @@ -116,4 +116,7 @@
  #undef MODULE_DESCRIPTION
  #undef MODULE_AUTHOR
@@ -10997,9 +11113,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfn32.c linux-2.4.32-rc1.m
 +#define TASK_SIZE TASK_SIZE32
 +
  #include "../../../fs/binfmt_elf.c"
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfo32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfo32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfo32.c        2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/binfmt_elfo32.c   2005-01-26 03:40:47.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/binfmt_elfo32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/binfmt_elfo32.c     2007-12-15 05:19:43.670909700 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/binfmt_elfo32.c  2007-12-15 05:19:44.898979686 +0100
 @@ -137,4 +137,7 @@
  #undef MODULE_DESCRIPTION
  #undef MODULE_AUTHOR
@@ -11008,9 +11125,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/binfmt_elfo32.c linux-2.4.32-rc1.m
 +#define TASK_SIZE TASK_SIZE32
 +
  #include "../../../fs/binfmt_elf.c"
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/head.S linux-2.4.32-rc1.mips/arch/mips64/kernel/head.S
---- linux-2.4.32-rc1/arch/mips64/kernel/head.S 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/head.S    2004-11-22 14:38:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/head.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/head.S      2007-12-15 05:19:43.674909929 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/head.S   2007-12-15 05:19:44.898979686 +0100
 @@ -91,6 +91,21 @@
        __INIT
  
@@ -11095,9 +11213,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/head.S linux-2.4.32-rc1.mips/arch/
        END(smp_bootstrap)
  #endif /* CONFIG_SMP */
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/ioctl32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/ioctl32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/ioctl32.c      2005-01-19 15:09:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/ioctl32.c 2005-01-26 03:36:17.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/ioctl32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/ioctl32.c   2007-12-15 05:19:43.682910385 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/ioctl32.c        2007-12-15 05:19:44.898979686 +0100
 @@ -2352,7 +2352,7 @@
        IOCTL32_HANDLER(AUTOFS_IOC_SETTIMEOUT32, ioc_settimeout),
        IOCTL32_DEFAULT(AUTOFS_IOC_EXPIRE),
@@ -11107,9 +11226,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/ioctl32.c linux-2.4.32-rc1.mips/ar
        IOCTL32_DEFAULT(AUTOFS_IOC_ASKREGHOST),
        IOCTL32_DEFAULT(AUTOFS_IOC_TOGGLEREGHOST),
        IOCTL32_DEFAULT(AUTOFS_IOC_ASKUMOUNT),
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/linux32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/linux32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/linux32.c      2005-04-04 03:42:19.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/linux32.c 2005-04-22 15:01:00.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/linux32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/linux32.c   2007-12-15 05:19:43.690910840 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/linux32.c        2007-12-15 05:19:44.902979912 +0100
 @@ -1101,6 +1101,7 @@
         * specially as they have atomicity guarantees and can handle
         * iovec's natively
@@ -11196,9 +11316,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/linux32.c linux-2.4.32-rc1.mips/ar
  /*
   * Ooo, nasty.  We need here to frob 32-bit unsigned longs to
   * 64-bit unsigned longs.
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/process.c linux-2.4.32-rc1.mips/arch/mips64/kernel/process.c
---- linux-2.4.32-rc1/arch/mips64/kernel/process.c      2003-08-25 13:44:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/process.c 2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/process.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/process.c   2007-12-15 05:19:43.698911298 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/process.c        2007-12-15 05:19:44.902979912 +0100
 @@ -125,6 +125,25 @@
        return 1;
  }
@@ -11225,9 +11346,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/process.c linux-2.4.32-rc1.mips/ar
  /*
   * Create a kernel thread
   */
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_64.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_64.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_64.S     2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_64.S        2005-02-07 22:21:54.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_64.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_64.S  2007-12-15 05:19:43.702911525 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_64.S       2007-12-15 05:19:44.902979912 +0100
 @@ -102,15 +102,14 @@
  
  trace_a_syscall:
@@ -11246,9 +11368,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_64.S linux-2.4.32-rc1.mips/a
  
        li      t0, -EMAXERRNO - 1      # error?
        sltu    t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_n32.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_n32.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_n32.S    2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_n32.S       2005-02-07 22:21:54.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_n32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_n32.S 2007-12-15 05:19:43.710911980 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_n32.S      2007-12-15 05:19:44.902979912 +0100
 @@ -106,15 +106,14 @@
  
  trace_a_syscall:
@@ -11267,9 +11390,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_n32.S linux-2.4.32-rc1.mips/
  
        li      t0, -EMAXERRNO - 1      # error?
        sltu    t0, t0, v0
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_o32.S linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_o32.S
---- linux-2.4.32-rc1/arch/mips64/kernel/scall_o32.S    2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/scall_o32.S       2005-02-14 04:52:57.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/scall_o32.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/scall_o32.S 2007-12-15 05:19:43.718912438 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/scall_o32.S      2007-12-15 05:19:44.906980142 +0100
 @@ -118,9 +118,8 @@
        sd      a6, PT_R10(sp)
        sd      a7, PT_R11(sp)
@@ -11299,9 +11423,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/scall_o32.S linux-2.4.32-rc1.mips/
        .macro  sys function, nargs
        .byte   \nargs
        .endm
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/setup.c linux-2.4.32-rc1.mips/arch/mips64/kernel/setup.c
---- linux-2.4.32-rc1/arch/mips64/kernel/setup.c        2005-01-19 15:09:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/setup.c   2004-11-22 14:38:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/setup.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/setup.c     2007-12-15 05:19:43.726912894 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/setup.c  2007-12-15 05:19:44.906980142 +0100
 @@ -129,14 +129,6 @@
         */
        load_mmu();
@@ -11317,9 +11442,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/setup.c linux-2.4.32-rc1.mips/arch
        start_kernel();
  }
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/signal_n32.c linux-2.4.32-rc1.mips/arch/mips64/kernel/signal_n32.c
---- linux-2.4.32-rc1/arch/mips64/kernel/signal_n32.c   2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/signal_n32.c      2005-02-07 22:10:53.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/kernel/signal_n32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal_n32.c        2007-12-15 05:19:43.730913120 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal_n32.c     2007-12-15 05:19:44.906980142 +0100
 @@ -68,7 +68,7 @@
  };
  
@@ -11329,9 +11455,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/signal_n32.c linux-2.4.32-rc1.mips
  
  asmlinkage void sysn32_rt_sigreturn(abi64_no_regargs, struct pt_regs regs)
  {
-diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/traps.c linux-2.4.32-rc1.mips/arch/mips64/kernel/traps.c
---- linux-2.4.32-rc1/arch/mips64/kernel/traps.c        2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/kernel/traps.c   2005-04-12 22:25:34.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/traps.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/traps.c     2007-12-15 05:19:43.738913578 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/traps.c  2007-12-15 05:19:44.906980142 +0100
 @@ -462,9 +462,10 @@
        }
        ll_task = current;
@@ -11422,9 +11549,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/kernel/traps.c linux-2.4.32-rc1.mips/arch
 -      current->active_mm = &init_mm;
 +      per_cpu_trap_init();
  }
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/mips64/mm/cerr-sb1.c
---- linux-2.4.32-rc1/arch/mips64/mm/cerr-sb1.c 2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/cerr-sb1.c    2004-12-13 18:37:26.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/cerr-sb1.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/cerr-sb1.c      2007-12-15 05:19:43.746914033 +0100
++++ linux-2.4.35.4/arch/mips64/mm/cerr-sb1.c   2007-12-15 05:19:44.906980142 +0100
 @@ -252,14 +252,14 @@
  
  /* Masks to select bits for Hamming parity, mask_72_64[i] for bit[i] */
@@ -11469,9 +11597,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/mm/cerr-sb1.c linux-2.4.32-rc1.mips/arch/
                if (way == 0) {
                        lru = (taghi >> 14) & 0xff;
                        prom_printf("[Bank %d Set 0x%02x]  LRU > %d %d %d %d > MRU\n",
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mips64/mm/c-r4k.c
---- linux-2.4.32-rc1/arch/mips64/mm/c-r4k.c    2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/c-r4k.c       2005-02-06 22:55:42.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/c-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/c-r4k.c 2007-12-15 05:19:43.754914488 +0100
++++ linux-2.4.35.4/arch/mips64/mm/c-r4k.c      2007-12-15 05:19:44.910980368 +0100
 @@ -867,9 +867,16 @@
         * normally they'd suffer from aliases but magic in the hardware deals
         * with that for us so we don't need to take care ourselves.
@@ -11502,9 +11631,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/mm/c-r4k.c linux-2.4.32-rc1.mips/arch/mip
        r4k_blast_dcache_page_setup();
        r4k_blast_dcache_page_indexed_setup();
        r4k_blast_dcache_setup();
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch/mips64/mm/tlbex-r4k.S
---- linux-2.4.32-rc1/arch/mips64/mm/tlbex-r4k.S        2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/tlbex-r4k.S   2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/mm/tlbex-r4k.S
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/tlbex-r4k.S     2007-12-15 05:19:43.762914944 +0100
++++ linux-2.4.35.4/arch/mips64/mm/tlbex-r4k.S  2007-12-15 05:19:44.910980368 +0100
 @@ -125,6 +125,33 @@
         nop
  END(except_vec1_r4k)
@@ -11613,9 +11743,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlbex-r4k.S linux-2.4.32-rc1.mips/arch
        eret
  END(handle_vec1_r10k)
  
-diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/mips64/mm/tlb-r4k.c
---- linux-2.4.32-rc1/arch/mips64/mm/tlb-r4k.c  2005-01-19 15:09:33.000000000 +0100
-+++ linux-2.4.32-rc1.mips/arch/mips64/mm/tlb-r4k.c     2004-11-25 23:18:38.000000000 +0100
+Index: linux-2.4.35.4/arch/mips64/mm/tlb-r4k.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/mm/tlb-r4k.c       2007-12-15 05:19:43.770915399 +0100
++++ linux-2.4.35.4/arch/mips64/mm/tlb-r4k.c    2007-12-15 05:19:44.910980368 +0100
 @@ -1,24 +1,12 @@
  /*
 - * Carsten Langgaard, carstenl@mips.com
@@ -11967,9 +12098,10 @@ diff -Nur linux-2.4.32-rc1/arch/mips64/mm/tlb-r4k.c linux-2.4.32-rc1.mips/arch/m
        probe_tlb(config);
        write_c0_pagemask(PM_DEFAULT_MASK);
        write_c0_wired(0);
-diff -Nur linux-2.4.32-rc1/drivers/char/au1000_gpio.c linux-2.4.32-rc1.mips/drivers/char/au1000_gpio.c
---- linux-2.4.32-rc1/drivers/char/au1000_gpio.c        2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/au1000_gpio.c   2003-12-20 14:18:51.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/au1000_gpio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/au1000_gpio.c     2007-12-15 05:19:43.778915857 +0100
++++ linux-2.4.35.4/drivers/char/au1000_gpio.c  2007-12-15 05:19:44.910980368 +0100
 @@ -246,7 +246,7 @@
  
  static struct miscdevice au1000gpio_miscdev =
@@ -11979,9 +12111,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/au1000_gpio.c linux-2.4.32-rc1.mips/driv
        "au1000_gpio",
        &au1000gpio_fops
  };
-diff -Nur linux-2.4.32-rc1/drivers/char/au1550_psc_spi.c linux-2.4.32-rc1.mips/drivers/char/au1550_psc_spi.c
---- linux-2.4.32-rc1/drivers/char/au1550_psc_spi.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/au1550_psc_spi.c        2005-02-11 21:37:24.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/au1550_psc_spi.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/au1550_psc_spi.c       2007-12-15 05:19:44.914980597 +0100
 @@ -0,0 +1,466 @@
 +/*
 + *  Driver for Alchemy Au1550 SPI on the PSC.
@@ -12449,10 +12582,11 @@ diff -Nur linux-2.4.32-rc1/drivers/char/au1550_psc_spi.c linux-2.4.32-rc1.mips/d
 +
 +module_init(au1550spi_init);
 +module_exit(au1550spi_exit);
-diff -Nur linux-2.4.32-rc1/drivers/char/Config.in linux-2.4.32-rc1.mips/drivers/char/Config.in
---- linux-2.4.32-rc1/drivers/char/Config.in    2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/Config.in       2005-02-11 22:09:56.000000000 +0100
-@@ -313,14 +313,11 @@
+Index: linux-2.4.35.4/drivers/char/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/Config.in 2007-12-15 05:19:43.790916539 +0100
++++ linux-2.4.35.4/drivers/char/Config.in      2007-12-15 05:19:44.914980597 +0100
+@@ -314,14 +314,11 @@
  if [ "$CONFIG_OBSOLETE" = "y" -a "$CONFIG_ALPHA_BOOK1" = "y" ]; then
     bool 'Tadpole ANA H8 Support (OBSOLETE)'  CONFIG_H8
  fi
@@ -12469,7 +12603,7 @@ diff -Nur linux-2.4.32-rc1/drivers/char/Config.in linux-2.4.32-rc1.mips/drivers/
  fi
  if [ "$CONFIG_TOSHIBA_RBTX4927" = "y" -o "$CONFIG_TOSHIBA_JMR3927" = "y" ]; then
     tristate 'Dallas DS1742 RTC support' CONFIG_DS1742
-@@ -383,6 +380,11 @@
+@@ -384,6 +381,11 @@
        source drivers/char/drm/Config.in
     fi
  fi
@@ -12481,7 +12615,7 @@ diff -Nur linux-2.4.32-rc1/drivers/char/Config.in linux-2.4.32-rc1.mips/drivers/
  endmenu
  
  if [ "$CONFIG_HOTPLUG" = "y" -a "$CONFIG_PCMCIA" != "n" ]; then
-@@ -391,6 +393,7 @@
+@@ -392,6 +394,7 @@
  if [ "$CONFIG_SOC_AU1X00" = "y" ]; then
     tristate ' Alchemy Au1x00 GPIO device support' CONFIG_AU1X00_GPIO
     tristate ' Au1000/ADS7846 touchscreen support' CONFIG_TS_AU1X00_ADS7846
@@ -12489,9 +12623,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/Config.in linux-2.4.32-rc1.mips/drivers/
  fi
  if [ "$CONFIG_MIPS_ITE8172" = "y" ]; then
    tristate ' ITE GPIO' CONFIG_ITE_GPIO
-diff -Nur linux-2.4.32-rc1/drivers/char/decserial.c linux-2.4.32-rc1.mips/drivers/char/decserial.c
---- linux-2.4.32-rc1/drivers/char/decserial.c  2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/decserial.c     2004-09-28 02:53:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/decserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/decserial.c       2007-12-15 05:19:43.798916997 +0100
++++ linux-2.4.35.4/drivers/char/decserial.c    2007-12-15 05:19:44.914980597 +0100
 @@ -3,95 +3,105 @@
   *      choose the right serial device at boot time
   *
@@ -12642,9 +12777,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/decserial.c linux-2.4.32-rc1.mips/driver
  #endif
  }
  
-diff -Nur linux-2.4.32-rc1/drivers/char/ds1286.c linux-2.4.32-rc1.mips/drivers/char/ds1286.c
---- linux-2.4.32-rc1/drivers/char/ds1286.c     2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ds1286.c        2004-01-10 06:21:39.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ds1286.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ds1286.c  2007-12-15 05:19:43.806917453 +0100
++++ linux-2.4.35.4/drivers/char/ds1286.c       2007-12-15 05:19:44.914980597 +0100
 @@ -1,6 +1,10 @@
  /*
   * DS1286 Real Time Clock interface for Linux
@@ -12780,9 +12916,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/ds1286.c linux-2.4.32-rc1.mips/drivers/c
 +
 +MODULE_AUTHOR("Ralf Baechle");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/ds1742.c linux-2.4.32-rc1.mips/drivers/char/ds1742.c
---- linux-2.4.32-rc1/drivers/char/ds1742.c     2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ds1742.c        2004-01-09 20:27:16.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ds1742.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ds1742.c  2007-12-15 05:19:43.814917908 +0100
++++ linux-2.4.35.4/drivers/char/ds1742.c       2007-12-15 05:19:44.918980826 +0100
 @@ -142,6 +142,7 @@
        CMOS_WRITE(RTC_WRITE, RTC_CONTROL);
  
@@ -12818,10 +12955,11 @@ diff -Nur linux-2.4.32-rc1/drivers/char/ds1742.c linux-2.4.32-rc1.mips/drivers/c
                to_tm(curr_time, &rtc_tm);
                rtc_tm.tm_year -= 1900;
                return copy_to_user((void *) arg, &rtc_tm, sizeof(rtc_tm)) ? 
-diff -Nur linux-2.4.32-rc1/drivers/char/dummy_keyb.c linux-2.4.32-rc1.mips/drivers/char/dummy_keyb.c
---- linux-2.4.32-rc1/drivers/char/dummy_keyb.c 2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/dummy_keyb.c    2004-01-09 09:53:08.000000000 +0100
-@@ -140,3 +140,7 @@
+Index: linux-2.4.35.4/drivers/char/dummy_keyb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dummy_keyb.c      2007-12-15 05:19:43.822918363 +0100
++++ linux-2.4.35.4/drivers/char/dummy_keyb.c   2007-12-15 05:19:44.918980826 +0100
+@@ -141,3 +141,7 @@
  {
        printk("Dummy keyboard driver installed.\n");
  }
@@ -12829,9 +12967,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/dummy_keyb.c linux-2.4.32-rc1.mips/drive
 +unsigned char kbd_sysrq_key;
 +unsigned char kbd_sysrq_xlate[128];
 +#endif
-diff -Nur linux-2.4.32-rc1/drivers/char/dz.c linux-2.4.32-rc1.mips/drivers/char/dz.c
---- linux-2.4.32-rc1/drivers/char/dz.c 2005-01-19 15:09:44.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/dz.c    2004-12-27 05:13:42.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/dz.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dz.c      2007-12-15 05:19:43.826918593 +0100
++++ linux-2.4.35.4/drivers/char/dz.c   2007-12-15 05:19:44.918980826 +0100
 @@ -1,11 +1,13 @@
  /*
 - * dz.c: Serial port driver for DECStations equiped 
@@ -13701,9 +13840,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/dz.c linux-2.4.32-rc1.mips/drivers/char/
  };
  
  void __init dz_serial_console_init(void)
-diff -Nur linux-2.4.32-rc1/drivers/char/dz.h linux-2.4.32-rc1.mips/drivers/char/dz.h
---- linux-2.4.32-rc1/drivers/char/dz.h 2002-08-03 02:39:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/dz.h    2004-09-28 02:53:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/dz.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/dz.h      2007-12-15 05:19:43.834919048 +0100
++++ linux-2.4.35.4/drivers/char/dz.h   2007-12-15 05:19:44.918980826 +0100
 @@ -10,6 +10,8 @@
  #ifndef DZ_SERIAL_H
  #define DZ_SERIAL_H
@@ -13852,9 +13992,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/dz.h linux-2.4.32-rc1.mips/drivers/char/
 -#endif
 -
  #endif /* DZ_SERIAL_H */
-diff -Nur linux-2.4.32-rc1/drivers/char/ibm_workpad_keymap.map linux-2.4.32-rc1.mips/drivers/char/ibm_workpad_keymap.map
---- linux-2.4.32-rc1/drivers/char/ibm_workpad_keymap.map       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ibm_workpad_keymap.map  2003-12-20 15:20:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/ibm_workpad_keymap.map
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/ibm_workpad_keymap.map 2007-12-15 05:19:44.922981052 +0100
 @@ -0,0 +1,343 @@
 +# Keymap for IBM Workpad z50
 +# US Mapping
@@ -14199,9 +14340,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/ibm_workpad_keymap.map linux-2.4.32-rc1.
 +keycode 93 = AltGr
 +keycode 94 = ShiftR
 +      shift keycode 94 = Caps_Lock
-diff -Nur linux-2.4.32-rc1/drivers/char/indydog.c linux-2.4.32-rc1.mips/drivers/char/indydog.c
---- linux-2.4.32-rc1/drivers/char/indydog.c    2003-08-25 13:44:41.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/indydog.c       2004-06-22 17:32:07.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/indydog.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/indydog.c 2007-12-15 05:19:43.846919732 +0100
++++ linux-2.4.35.4/drivers/char/indydog.c      2007-12-15 05:19:44.922981052 +0100
 @@ -1,5 +1,5 @@
  /*
 - *    IndyDog 0.2     A Hardware Watchdog Device for SGI IP22
@@ -14445,9 +14587,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/indydog.c linux-2.4.32-rc1.mips/drivers/
 +MODULE_AUTHOR("Guido Guenther <agx@sigxcpu.org>");
 +MODULE_DESCRIPTION("Hardware Watchdog Device for SGI IP22");
  MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/ip27-rtc.c linux-2.4.32-rc1.mips/drivers/char/ip27-rtc.c
---- linux-2.4.32-rc1/drivers/char/ip27-rtc.c   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/ip27-rtc.c      2004-04-06 03:35:30.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/ip27-rtc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/ip27-rtc.c        2007-12-15 05:19:43.854920187 +0100
++++ linux-2.4.35.4/drivers/char/ip27-rtc.c     2007-12-15 05:19:44.922981052 +0100
 @@ -44,6 +44,7 @@
  #include <asm/sn/klconfig.h>
  #include <asm/sn/sn0/ip27.h>
@@ -14477,9 +14620,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/ip27-rtc.c linux-2.4.32-rc1.mips/drivers
 +MODULE_AUTHOR("Ralf Baechle <ralf@linux-mips.org>");
 +MODULE_DESCRIPTION("SGI IP27 M48T35 RTC driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/char/Makefile linux-2.4.32-rc1.mips/drivers/char/Makefile
---- linux-2.4.32-rc1/drivers/char/Makefile     2004-08-08 01:26:04.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/Makefile        2005-02-11 22:09:56.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/Makefile  2007-12-15 05:19:43.862920643 +0100
++++ linux-2.4.35.4/drivers/char/Makefile       2007-12-15 05:19:44.922981052 +0100
 @@ -48,7 +48,12 @@
      KEYBD    =
    endif
@@ -14518,7 +14662,7 @@ diff -Nur linux-2.4.32-rc1/drivers/char/Makefile linux-2.4.32-rc1.mips/drivers/c
  obj-$(CONFIG_AU1X00_USB_TTY) += au1000_usbtty.o
  obj-$(CONFIG_AU1X00_USB_RAW) += au1000_usbraw.o
  obj-$(CONFIG_COBALT_LCD) += lcd.o
-@@ -353,3 +359,9 @@
+@@ -355,3 +361,9 @@
  
  qtronixmap.c: qtronixmap.map
        set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
@@ -14528,9 +14672,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/Makefile linux-2.4.32-rc1.mips/drivers/c
 +
 +victor_mpc30x_keymap.c: victor_mpc30x_keymap.map
 +      set -e ; loadkeys --mktable $< | sed -e 's/^static *//' > $@
-diff -Nur linux-2.4.32-rc1/drivers/char/mips_rtc.c linux-2.4.32-rc1.mips/drivers/char/mips_rtc.c
---- linux-2.4.32-rc1/drivers/char/mips_rtc.c   2004-01-05 14:53:56.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/mips_rtc.c      2004-06-28 14:54:53.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/mips_rtc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/mips_rtc.c        2007-12-15 05:19:43.870921098 +0100
++++ linux-2.4.35.4/drivers/char/mips_rtc.c     2007-12-15 05:19:44.926981281 +0100
 @@ -53,14 +53,6 @@
  #include <asm/io.h>
  #include <asm/uaccess.h>
@@ -14546,9 +14691,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/mips_rtc.c linux-2.4.32-rc1.mips/drivers
  #include <asm/time.h>
  
  static unsigned long rtc_status = 0;  /* bitmapped status byte.       */
-diff -Nur linux-2.4.32-rc1/drivers/char/sb1250_duart.c linux-2.4.32-rc1.mips/drivers/char/sb1250_duart.c
---- linux-2.4.32-rc1/drivers/char/sb1250_duart.c       2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/sb1250_duart.c  2004-09-17 01:25:44.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/sb1250_duart.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/sb1250_duart.c    2007-12-15 05:19:43.874921327 +0100
++++ linux-2.4.35.4/drivers/char/sb1250_duart.c 2007-12-15 05:19:44.930981508 +0100
 @@ -328,10 +328,11 @@
                if (c <= 0) break;
  
@@ -14603,9 +14749,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/sb1250_duart.c linux-2.4.32-rc1.mips/dri
                break;
        case TIOCSSERIAL:
                printk("Ignoring TIOCSSERIAL\n");
-diff -Nur linux-2.4.32-rc1/drivers/char/serial.c linux-2.4.32-rc1.mips/drivers/char/serial.c
---- linux-2.4.32-rc1/drivers/char/serial.c     2005-10-24 11:33:29.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/char/serial.c        2005-09-23 22:41:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c  2007-12-15 05:19:43.882921783 +0100
++++ linux-2.4.35.4/drivers/char/serial.c       2007-12-15 05:19:44.934981737 +0100
 @@ -62,6 +62,12 @@
   *        Robert Schwebel <robert@schwebel.de>,
   *        Juergen Beisert <jbeisert@eurodsn.de>,
@@ -14651,9 +14798,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/serial.c linux-2.4.32-rc1.mips/drivers/c
  
  /*
   * We used to support using pause I/O for certain machines.  We
-diff -Nur linux-2.4.32-rc1/drivers/char/victor_mpc30x_keymap.map linux-2.4.32-rc1.mips/drivers/char/victor_mpc30x_keymap.map
---- linux-2.4.32-rc1/drivers/char/victor_mpc30x_keymap.map     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/victor_mpc30x_keymap.map        2004-02-05 18:04:42.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/victor_mpc30x_keymap.map
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/char/victor_mpc30x_keymap.map       2007-12-15 05:19:44.934981737 +0100
 @@ -0,0 +1,102 @@
 +# Victor Interlink MP-C303/304 keyboard keymap
 +#
@@ -14757,9 +14905,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/victor_mpc30x_keymap.map linux-2.4.32-rc
 +      alt keycode 31 = PageDown
 +keycode 47 = Right
 +      alt keycode 47 = End
-diff -Nur linux-2.4.32-rc1/drivers/char/vr41xx_keyb.c linux-2.4.32-rc1.mips/drivers/char/vr41xx_keyb.c
---- linux-2.4.32-rc1/drivers/char/vr41xx_keyb.c        2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/char/vr41xx_keyb.c   2004-02-17 13:08:55.000000000 +0100
+Index: linux-2.4.35.4/drivers/char/vr41xx_keyb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/vr41xx_keyb.c     2007-12-15 05:19:43.894922467 +0100
++++ linux-2.4.35.4/drivers/char/vr41xx_keyb.c  2007-12-15 05:19:44.938981966 +0100
 @@ -308,7 +308,7 @@
                        if (found != 0) {
                                kiu_base = VRC4173_KIU_OFFSET;
@@ -14778,9 +14927,10 @@ diff -Nur linux-2.4.32-rc1/drivers/char/vr41xx_keyb.c linux-2.4.32-rc1.mips/driv
  
        kiu_writew(KIURST_KIURST, KIURST);
  
-diff -Nur linux-2.4.32-rc1/drivers/i2c/Config.in linux-2.4.32-rc1.mips/drivers/i2c/Config.in
---- linux-2.4.32-rc1/drivers/i2c/Config.in     2004-04-14 15:05:29.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/i2c/Config.in        2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/Config.in  2007-12-15 05:19:43.902922923 +0100
++++ linux-2.4.35.4/drivers/i2c/Config.in       2007-12-15 05:19:44.938981966 +0100
 @@ -57,6 +57,10 @@
     if [ "$CONFIG_SGI_IP22" = "y" ]; then
        dep_tristate 'I2C SGI interfaces' CONFIG_I2C_ALGO_SGI $CONFIG_I2C
@@ -14792,9 +14942,10 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/Config.in linux-2.4.32-rc1.mips/drivers/i
   
  # This is needed for automatic patch generation: sensors code starts here
  # This is needed for automatic patch generation: sensors code ends here
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-algo-au1550.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-algo-au1550.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-algo-au1550.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-algo-au1550.c        2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/i2c-algo-au1550.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/i2c/i2c-algo-au1550.c       2007-12-15 05:19:44.938981966 +0100
 @@ -0,0 +1,340 @@
 +/*
 + * i2c-algo-au1550.c: SMBus (i2c) driver algorithms for Alchemy PSC interface
@@ -15136,9 +15287,10 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-algo-au1550.c linux-2.4.32-rc1.mips/d
 +MODULE_AUTHOR("Dan Malek <dan@embeddededge.com>");
 +MODULE_DESCRIPTION("SMBus Au1550 algorithm");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-au1550.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-au1550.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-au1550.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-au1550.c     2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/i2c-au1550.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/i2c/i2c-au1550.c    2007-12-15 05:19:44.938981966 +0100
 @@ -0,0 +1,154 @@
 +/*
 + * i2c-au1550.c: SMBus (i2c) adapter for Alchemy PSC interface
@@ -15294,10 +15446,11 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-au1550.c linux-2.4.32-rc1.mips/driver
 +{
 +      i2c_au1550_del_bus(&pb1550_board_adapter);
 +}
-diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-core.c linux-2.4.32-rc1.mips/drivers/i2c/i2c-core.c
---- linux-2.4.32-rc1/drivers/i2c/i2c-core.c    2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/i2c/i2c-core.c       2005-05-23 14:12:30.000000000 +0200
-@@ -1280,6 +1280,9 @@
+Index: linux-2.4.35.4/drivers/i2c/i2c-core.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/i2c-core.c 2007-12-15 05:19:43.922924062 +0100
++++ linux-2.4.35.4/drivers/i2c/i2c-core.c      2007-12-15 05:19:44.938981966 +0100
+@@ -1277,6 +1277,9 @@
  #ifdef CONFIG_I2C_MAX1617
        extern int i2c_max1617_init(void);
  #endif
@@ -15307,7 +15460,7 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-core.c linux-2.4.32-rc1.mips/drivers/
  
  #ifdef CONFIG_I2C_PROC
        extern int sensors_init(void);
-@@ -1335,6 +1338,10 @@
+@@ -1332,6 +1335,10 @@
        i2c_max1617_init();
  #endif
  
@@ -15318,9 +15471,10 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/i2c-core.c linux-2.4.32-rc1.mips/drivers/
        /* -------------- proc interface ---- */
  #ifdef CONFIG_I2C_PROC
        sensors_init();
-diff -Nur linux-2.4.32-rc1/drivers/i2c/Makefile linux-2.4.32-rc1.mips/drivers/i2c/Makefile
---- linux-2.4.32-rc1/drivers/i2c/Makefile      2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/i2c/Makefile 2005-02-11 20:49:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/i2c/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/i2c/Makefile   2007-12-15 05:19:43.930924518 +0100
++++ linux-2.4.35.4/drivers/i2c/Makefile        2007-12-15 05:19:44.942982192 +0100
 @@ -6,7 +6,7 @@
  
  export-objs   := i2c-core.o i2c-algo-bit.o i2c-algo-pcf.o \
@@ -15338,9 +15492,10 @@ diff -Nur linux-2.4.32-rc1/drivers/i2c/Makefile linux-2.4.32-rc1.mips/drivers/i2
  
  # This is needed for automatic patch generation: sensors code starts here
  # This is needed for automatic patch generation: sensors code ends here
-diff -Nur linux-2.4.32-rc1/drivers/media/video/indycam.c linux-2.4.32-rc1.mips/drivers/media/video/indycam.c
---- linux-2.4.32-rc1/drivers/media/video/indycam.c     2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/media/video/indycam.c        2004-12-09 21:32:05.000000000 +0100
+Index: linux-2.4.35.4/drivers/media/video/indycam.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/media/video/indycam.c  2007-12-15 05:19:43.934924747 +0100
++++ linux-2.4.35.4/drivers/media/video/indycam.c       2007-12-15 05:19:44.942982192 +0100
 @@ -50,13 +50,14 @@
                0x80,                   /* INDYCAM_GAMMA */
        };
@@ -15390,9 +15545,10 @@ diff -Nur linux-2.4.32-rc1/drivers/media/video/indycam.c linux-2.4.32-rc1.mips/d
  
        MOD_INC_USE_COUNT;
        return 0;
-diff -Nur linux-2.4.32-rc1/drivers/media/video/vino.c linux-2.4.32-rc1.mips/drivers/media/video/vino.c
---- linux-2.4.32-rc1/drivers/media/video/vino.c        2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/media/video/vino.c   2004-12-10 05:02:54.000000000 +0100
+Index: linux-2.4.35.4/drivers/media/video/vino.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/media/video/vino.c     2007-12-15 05:19:43.946925431 +0100
++++ linux-2.4.35.4/drivers/media/video/vino.c  2007-12-15 05:19:44.950982647 +0100
 @@ -5,6 +5,8 @@
   * License version 2 as published by the Free Software Foundation.
   *
@@ -15513,9 +15669,10 @@ diff -Nur linux-2.4.32-rc1/drivers/media/video/vino.c linux-2.4.32-rc1.mips/driv
  }
  
  static int vino_grab(struct vino_device *v, int frame)
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/docprobe.c linux-2.4.32-rc1.mips/drivers/mtd/devices/docprobe.c
---- linux-2.4.32-rc1/drivers/mtd/devices/docprobe.c    2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/docprobe.c       2003-06-16 01:42:21.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/docprobe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/docprobe.c 2007-12-15 05:19:43.954925886 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/docprobe.c      2007-12-15 05:19:44.950982647 +0100
 @@ -89,10 +89,10 @@
        0xe4000000,
  #elif defined(CONFIG_MOMENCO_OCELOT)
@@ -15530,9 +15687,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/docprobe.c linux-2.4.32-rc1.mips/
  #warning Unknown architecture for DiskOnChip. No default probe locations defined
  #endif
        0 };
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.c linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.c
---- linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.c     2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.c        2004-07-30 12:22:40.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/ms02-nv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/ms02-nv.c  2007-12-15 05:19:43.958926116 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/ms02-nv.c       2007-12-15 05:19:44.950982647 +0100
 @@ -1,10 +1,10 @@
  /*
 - *      Copyright (c) 2001 Maciej W. Rozycki
@@ -15606,9 +15764,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.c linux-2.4.32-rc1.mips/d
                csr = (volatile u32 *)KN03_MCR_BASE;
                if (*csr & KN03_MCR_BNK32M)
                        stride = 2;
-diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.h linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.h
---- linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.h     2002-11-29 00:53:13.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/devices/ms02-nv.h        2004-07-30 12:22:40.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/devices/ms02-nv.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/devices/ms02-nv.h  2007-12-15 05:19:43.966926571 +0100
++++ linux-2.4.35.4/drivers/mtd/devices/ms02-nv.h       2007-12-15 05:19:44.950982647 +0100
 @@ -1,32 +1,96 @@
  /*
 - *      Copyright (c) 2001 Maciej W. Rozycki
@@ -15715,9 +15874,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/devices/ms02-nv.h linux-2.4.32-rc1.mips/d
  typedef volatile u32 ms02nv_uint;
  
  struct ms02nv_private {
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Config.in linux-2.4.32-rc1.mips/drivers/mtd/maps/Config.in
---- linux-2.4.32-rc1/drivers/mtd/maps/Config.in        2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/Config.in   2004-02-26 01:46:35.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Config.in     2007-12-15 05:19:43.974927026 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Config.in  2007-12-15 05:19:44.950982647 +0100
 @@ -51,11 +51,26 @@
     dep_tristate '  Pb1000 MTD support' CONFIG_MTD_PB1000 $CONFIG_MIPS_PB1000
     dep_tristate '  Pb1500 MTD support' CONFIG_MTD_PB1500 $CONFIG_MIPS_PB1500
@@ -15745,9 +15905,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Config.in linux-2.4.32-rc1.mips/driv
     dep_tristate '  Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board' CONFIG_MTD_CSTM_MIPS_IXX $CONFIG_MTD_CFI $CONFIG_MTD_JEDEC $CONFIG_MTD_PARTITIONS 
     if [ "$CONFIG_MTD_CSTM_MIPS_IXX" = "y" -o "$CONFIG_MTD_CSTM_MIPS_IXX" = "m" ]; then
        hex '    Physical start address of flash mapping' CONFIG_MTD_CSTM_MIPS_IXX_START 0x8000000
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/db1x00-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/db1x00-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/db1x00-flash.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/db1x00-flash.c      2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/db1x00-flash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/db1x00-flash.c     2007-12-15 05:19:44.950982647 +0100
 @@ -0,0 +1,283 @@
 +/*
 + * Flash memory access on Alchemy Db1xxx boards
@@ -16032,9 +16193,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/db1x00-flash.c linux-2.4.32-rc1.mips
 +MODULE_AUTHOR("Pete Popov");
 +MODULE_DESCRIPTION("Db1x00 mtd map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/hydrogen3-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/hydrogen3-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/hydrogen3-flash.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/hydrogen3-flash.c   2004-01-10 23:40:18.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/hydrogen3-flash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/hydrogen3-flash.c  2007-12-15 05:19:44.954982876 +0100
 @@ -0,0 +1,189 @@
 +/*
 + * Flash memory access on Alchemy HydrogenIII boards
@@ -16225,9 +16387,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/hydrogen3-flash.c linux-2.4.32-rc1.m
 +MODULE_AUTHOR("Pete Popov");
 +MODULE_DESCRIPTION("HydrogenIII mtd map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/lasat.c linux-2.4.32-rc1.mips/drivers/mtd/maps/lasat.c
---- linux-2.4.32-rc1/drivers/mtd/maps/lasat.c  2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/lasat.c     2003-08-18 04:59:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/lasat.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/lasat.c       2007-12-15 05:19:43.994928166 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/lasat.c    2007-12-15 05:19:44.954982876 +0100
 @@ -1,15 +1,6 @@
  /*
   * Flash device on lasat 100 and 200 boards
@@ -16333,9 +16496,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/lasat.c linux-2.4.32-rc1.mips/driver
        }
  }
  
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Makefile linux-2.4.32-rc1.mips/drivers/mtd/maps/Makefile
---- linux-2.4.32-rc1/drivers/mtd/maps/Makefile 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/Makefile    2004-02-26 01:46:35.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/Makefile      2007-12-15 05:19:43.998928395 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/Makefile   2007-12-15 05:19:44.954982876 +0100
 @@ -52,7 +52,13 @@
  obj-$(CONFIG_MTD_PB1000)      += pb1xxx-flash.o
  obj-$(CONFIG_MTD_PB1100)      += pb1xxx-flash.o
@@ -16357,9 +16521,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/Makefile linux-2.4.32-rc1.mips/drive
 +obj-$(CONFIG_MTD_MIRAGE)        += mirage-flash.o
  
  include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mirage-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/mirage-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/mirage-flash.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/mirage-flash.c      2003-12-22 04:37:22.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/mirage-flash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/mirage-flash.c     2007-12-15 05:19:44.954982876 +0100
 @@ -0,0 +1,194 @@
 +/*
 + * Flash memory access on AMD Mirage board.
@@ -16555,9 +16720,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mirage-flash.c linux-2.4.32-rc1.mips
 +MODULE_AUTHOR("Embedded Edge");
 +MODULE_DESCRIPTION("Mirage mtd map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mtx-1.c linux-2.4.32-rc1.mips/drivers/mtd/maps/mtx-1.c
---- linux-2.4.32-rc1/drivers/mtd/maps/mtx-1.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/mtx-1.c     2003-06-27 02:04:35.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/mtx-1.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/mtx-1.c    2007-12-15 05:19:44.954982876 +0100
 @@ -0,0 +1,181 @@
 +/*
 + * Flash memory access on 4G Systems MTX-1 board
@@ -16740,9 +16906,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/mtx-1.c linux-2.4.32-rc1.mips/driver
 +MODULE_AUTHOR("Pete Popov");
 +MODULE_DESCRIPTION("MTX-1 CFI map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1550-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1550-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/pb1550-flash.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1550-flash.c      2004-02-26 01:48:48.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/maps/pb1550-flash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/pb1550-flash.c     2007-12-15 05:19:44.958983106 +0100
 @@ -0,0 +1,270 @@
 +/*
 + * Flash memory access on Alchemy Pb1550 board
@@ -17014,9 +17181,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1550-flash.c linux-2.4.32-rc1.mips
 +MODULE_AUTHOR("Embedded Edge, LLC");
 +MODULE_DESCRIPTION("Pb1550 mtd map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1xxx-flash.c linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1xxx-flash.c
---- linux-2.4.32-rc1/drivers/mtd/maps/pb1xxx-flash.c   2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/pb1xxx-flash.c      2003-05-19 08:27:22.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/pb1xxx-flash.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/maps/pb1xxx-flash.c        2007-12-15 05:19:44.026929991 +0100
++++ linux-2.4.35.4/drivers/mtd/maps/pb1xxx-flash.c     2007-12-15 05:19:44.958983106 +0100
 @@ -192,6 +192,34 @@
  #else
  #error MTD_PB1500 define combo error /* should never happen */
@@ -17052,9 +17220,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/pb1xxx-flash.c linux-2.4.32-rc1.mips
  #else
  #error Unsupported board
  #endif
-diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/xxs1500.c linux-2.4.32-rc1.mips/drivers/mtd/maps/xxs1500.c
---- linux-2.4.32-rc1/drivers/mtd/maps/xxs1500.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/mtd/maps/xxs1500.c   2003-08-02 04:06:01.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/maps/xxs1500.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/maps/xxs1500.c  2007-12-15 05:19:44.958983106 +0100
 @@ -0,0 +1,186 @@
 +/*
 + * Flash memory access on MyCable XXS1500 board
@@ -17242,9 +17411,10 @@ diff -Nur linux-2.4.32-rc1/drivers/mtd/maps/xxs1500.c linux-2.4.32-rc1.mips/driv
 +MODULE_AUTHOR("Pete Popov");
 +MODULE_DESCRIPTION("XXS1500 CFI map driver");
 +MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/net/defxx.c linux-2.4.32-rc1.mips/drivers/net/defxx.c
---- linux-2.4.32-rc1/drivers/net/defxx.c       2004-11-17 12:54:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/defxx.c  2004-11-19 01:28:39.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/defxx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/defxx.c    2007-12-15 05:19:44.042930901 +0100
++++ linux-2.4.35.4/drivers/net/defxx.c 2007-12-15 05:19:44.962983332 +0100
 @@ -10,24 +10,18 @@
   *
   * Abstract:
@@ -18085,9 +18255,10 @@ diff -Nur linux-2.4.32-rc1/drivers/net/defxx.c linux-2.4.32-rc1.mips/drivers/net
  MODULE_LICENSE("GPL");
  
  \f
-diff -Nur linux-2.4.32-rc1/drivers/net/defxx.h linux-2.4.32-rc1.mips/drivers/net/defxx.h
---- linux-2.4.32-rc1/drivers/net/defxx.h       2001-02-13 22:15:05.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/defxx.h  2004-10-03 20:06:48.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/defxx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/defxx.h    2007-12-15 05:19:44.050931357 +0100
++++ linux-2.4.35.4/drivers/net/defxx.h 2007-12-15 05:19:44.962983332 +0100
 @@ -12,17 +12,11 @@
   *   Contains all definitions specified by port specification and required
   *   by the defxx.c driver.
@@ -18176,9 +18347,10 @@ diff -Nur linux-2.4.32-rc1/drivers/net/defxx.h linux-2.4.32-rc1.mips/drivers/net
        struct pci_dev *                pci_dev;
        u32                             full_duplex_enb;                                /* FDDI Full Duplex enable (1 == on, 2 == off) */
        u32                             req_ttrt;                                       /* requested TTRT value (in 80ns units) */
-diff -Nur linux-2.4.32-rc1/drivers/net/hamradio/hdlcdrv.c linux-2.4.32-rc1.mips/drivers/net/hamradio/hdlcdrv.c
---- linux-2.4.32-rc1/drivers/net/hamradio/hdlcdrv.c    2002-02-25 20:37:59.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/hamradio/hdlcdrv.c       2004-05-04 14:04:27.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/hamradio/hdlcdrv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/hamradio/hdlcdrv.c 2007-12-15 05:19:44.058931815 +0100
++++ linux-2.4.35.4/drivers/net/hamradio/hdlcdrv.c      2007-12-15 05:19:44.962983332 +0100
 @@ -587,6 +587,8 @@
                return -EINVAL;
        s = (struct hdlcdrv_state *)dev->priv;
@@ -18188,9 +18360,10 @@ diff -Nur linux-2.4.32-rc1/drivers/net/hamradio/hdlcdrv.c linux-2.4.32-rc1.mips/
        if (s->ops && s->ops->close)
                i = s->ops->close(dev);
        if (s->skb)
-diff -Nur linux-2.4.32-rc1/drivers/net/irda/au1k_ir.c linux-2.4.32-rc1.mips/drivers/net/irda/au1k_ir.c
---- linux-2.4.32-rc1/drivers/net/irda/au1k_ir.c        2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/irda/au1k_ir.c   2005-02-03 07:35:29.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/irda/au1k_ir.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/irda/au1k_ir.c     2007-12-15 05:19:44.066932270 +0100
++++ linux-2.4.35.4/drivers/net/irda/au1k_ir.c  2007-12-15 05:19:44.966983561 +0100
 @@ -81,10 +81,6 @@
  
  #define RUN_AT(x) (jiffies + (x))
@@ -18202,9 +18375,10 @@ diff -Nur linux-2.4.32-rc1/drivers/net/irda/au1k_ir.c linux-2.4.32-rc1.mips/driv
  static spinlock_t ir_lock = SPIN_LOCK_UNLOCKED;
  
  /*
-diff -Nur linux-2.4.32-rc1/drivers/net/sgiseeq.c linux-2.4.32-rc1.mips/drivers/net/sgiseeq.c
---- linux-2.4.32-rc1/drivers/net/sgiseeq.c     2005-01-19 15:09:56.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/net/sgiseeq.c        2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/drivers/net/sgiseeq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/sgiseeq.c  2007-12-15 05:19:44.074932725 +0100
++++ linux-2.4.35.4/drivers/net/sgiseeq.c       2007-12-15 05:19:44.966983561 +0100
 @@ -24,16 +24,16 @@
  #include <asm/io.h>
  #include <asm/system.h>
@@ -18355,9 +18529,10 @@ diff -Nur linux-2.4.32-rc1/drivers/net/sgiseeq.c linux-2.4.32-rc1.mips/drivers/n
 +MODULE_DESCRIPTION("SGI Seeq 8003 driver");
 +MODULE_AUTHOR("David S. Miller");
  MODULE_LICENSE("GPL");
-diff -Nur linux-2.4.32-rc1/drivers/pci/pci.c linux-2.4.32-rc1.mips/drivers/pci/pci.c
---- linux-2.4.32-rc1/drivers/pci/pci.c 2004-11-17 12:54:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pci/pci.c    2004-11-19 01:28:41.000000000 +0100
+Index: linux-2.4.35.4/drivers/pci/pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pci/pci.c      2007-12-15 05:19:44.082933181 +0100
++++ linux-2.4.35.4/drivers/pci/pci.c   2007-12-15 05:19:44.966983561 +0100
 @@ -1281,11 +1281,17 @@
  {
        unsigned int buses;
@@ -18384,9 +18559,10 @@ diff -Nur linux-2.4.32-rc1/drivers/pci/pci.c linux-2.4.32-rc1.mips/drivers/pci/p
        sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number);
        return max;
  }
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/au1000_db1x00.c linux-2.4.32-rc1.mips/drivers/pcmcia/au1000_db1x00.c
---- linux-2.4.32-rc1/drivers/pcmcia/au1000_db1x00.c    2005-01-19 15:09:57.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/au1000_db1x00.c       2005-02-03 07:35:30.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/au1000_db1x00.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/au1000_db1x00.c 2007-12-15 05:19:44.090933636 +0100
++++ linux-2.4.35.4/drivers/pcmcia/au1000_db1x00.c      2007-12-15 05:19:44.970983787 +0100
 @@ -1,6 +1,6 @@
  /*
   *
@@ -18459,9 +18635,10 @@ diff -Nur linux-2.4.32-rc1/drivers/pcmcia/au1000_db1x00.c linux-2.4.32-rc1.mips/
        return 0;
  }
  
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Config.in linux-2.4.32-rc1.mips/drivers/pcmcia/Config.in
---- linux-2.4.32-rc1/drivers/pcmcia/Config.in  2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/Config.in     2004-02-22 06:21:34.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/Config.in       2007-12-15 05:19:44.098934094 +0100
++++ linux-2.4.35.4/drivers/pcmcia/Config.in    2007-12-15 05:19:44.974984016 +0100
 @@ -30,16 +30,14 @@
        dep_tristate '  M8xx support' CONFIG_PCMCIA_M8XX $CONFIG_PCMCIA
     fi
@@ -18483,9 +18660,10 @@ diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Config.in linux-2.4.32-rc1.mips/driver
     if [ "$CONFIG_VRC4173" = "y" -o "$CONFIG_VRC4173" = "m" ]; then
        dep_tristate '  NEC VRC4173 CARDU support' CONFIG_PCMCIA_VRC4173 $CONFIG_PCMCIA
     fi
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Makefile linux-2.4.32-rc1.mips/drivers/pcmcia/Makefile
---- linux-2.4.32-rc1/drivers/pcmcia/Makefile   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/Makefile      2005-02-03 07:35:30.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/pcmcia/Makefile        2007-12-15 05:19:44.106934550 +0100
++++ linux-2.4.35.4/drivers/pcmcia/Makefile     2007-12-15 05:19:44.974984016 +0100
 @@ -61,9 +61,18 @@
  
  obj-$(CONFIG_PCMCIA_AU1X00)                   += au1x00_ss.o
@@ -18516,9 +18694,10 @@ diff -Nur linux-2.4.32-rc1/drivers/pcmcia/Makefile linux-2.4.32-rc1.mips/drivers
  obj-$(CONFIG_PCMCIA_VRC4173)  += vrc4173_cardu.o
  
  include $(TOPDIR)/Rules.make
-diff -Nur linux-2.4.32-rc1/drivers/pcmcia/vrc4171_card.c linux-2.4.32-rc1.mips/drivers/pcmcia/vrc4171_card.c
---- linux-2.4.32-rc1/drivers/pcmcia/vrc4171_card.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/pcmcia/vrc4171_card.c        2004-01-19 16:54:58.000000000 +0100
+Index: linux-2.4.35.4/drivers/pcmcia/vrc4171_card.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/pcmcia/vrc4171_card.c       2007-12-15 05:19:44.978984245 +0100
 @@ -0,0 +1,886 @@
 +/*
 + * vrc4171_card.c, NEC VRC4171 Card Controller driver for Socket Services.
@@ -19406,9 +19585,10 @@ diff -Nur linux-2.4.32-rc1/drivers/pcmcia/vrc4171_card.c linux-2.4.32-rc1.mips/d
 +
 +module_init(vrc4171_card_init);
 +module_exit(vrc4171_card_exit);
-diff -Nur linux-2.4.32-rc1/drivers/scsi/NCR53C9x.h linux-2.4.32-rc1.mips/drivers/scsi/NCR53C9x.h
---- linux-2.4.32-rc1/drivers/scsi/NCR53C9x.h   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/scsi/NCR53C9x.h      2003-12-15 19:19:51.000000000 +0100
+Index: linux-2.4.35.4/drivers/scsi/NCR53C9x.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/scsi/NCR53C9x.h        2007-12-15 05:19:44.122935460 +0100
++++ linux-2.4.35.4/drivers/scsi/NCR53C9x.h     2007-12-15 05:19:44.978984245 +0100
 @@ -144,12 +144,7 @@
  
  #ifndef MULTIPLE_PAD_SIZES
@@ -19423,9 +19603,10 @@ diff -Nur linux-2.4.32-rc1/drivers/scsi/NCR53C9x.h linux-2.4.32-rc1.mips/drivers
  #define esp_read(__reg) (__reg)
  
  struct ESP_regs {
-diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_i2s.c linux-2.4.32-rc1.mips/drivers/sound/au1550_i2s.c
---- linux-2.4.32-rc1/drivers/sound/au1550_i2s.c        2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/au1550_i2s.c   2005-02-08 08:07:50.000000000 +0100
+Index: linux-2.4.35.4/drivers/sound/au1550_i2s.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/au1550_i2s.c     2007-12-15 05:19:44.126935690 +0100
++++ linux-2.4.35.4/drivers/sound/au1550_i2s.c  2007-12-15 05:19:44.982984472 +0100
 @@ -41,6 +41,7 @@
   *  675 Mass Ave, Cambridge, MA 02139, USA.
   *
@@ -20297,9 +20478,10 @@ diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_i2s.c linux-2.4.32-rc1.mips/driv
   err_dev1:
        au1xxx_dbdma_chan_free(s->dma_adc.dmanr);
   err_dma2:
-diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_psc.c linux-2.4.32-rc1.mips/drivers/sound/au1550_psc.c
---- linux-2.4.32-rc1/drivers/sound/au1550_psc.c        2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/au1550_psc.c   2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/drivers/sound/au1550_psc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/au1550_psc.c     2007-12-15 05:19:44.134936145 +0100
++++ linux-2.4.35.4/drivers/sound/au1550_psc.c  2007-12-15 05:19:44.982984472 +0100
 @@ -30,6 +30,7 @@
   *  675 Mass Ave, Cambridge, MA 02139, USA.
   *
@@ -20458,9 +20640,10 @@ diff -Nur linux-2.4.32-rc1/drivers/sound/au1550_psc.c linux-2.4.32-rc1.mips/driv
        return 0;
  
   err_dev3:
-diff -Nur linux-2.4.32-rc1/drivers/sound/Config.in linux-2.4.32-rc1.mips/drivers/sound/Config.in
---- linux-2.4.32-rc1/drivers/sound/Config.in   2005-01-19 15:10:04.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/sound/Config.in      2005-04-21 07:53:07.000000000 +0200
+Index: linux-2.4.35.4/drivers/sound/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/Config.in        2007-12-15 05:19:44.142936600 +0100
++++ linux-2.4.35.4/drivers/sound/Config.in     2007-12-15 05:19:44.982984472 +0100
 @@ -72,10 +72,15 @@
  if [ "$CONFIG_DDB5477" = "y" ]; then
      dep_tristate '  NEC Vrc5477 AC97 sound' CONFIG_SOUND_VRC5477 $CONFIG_SOUND
@@ -20481,9 +20664,10 @@ diff -Nur linux-2.4.32-rc1/drivers/sound/Config.in linux-2.4.32-rc1.mips/drivers
  fi
  
  dep_tristate '  Trident 4DWave DX/NX, SiS 7018 or ALi 5451 PCI Audio Core' CONFIG_SOUND_TRIDENT $CONFIG_SOUND $CONFIG_PCI
-diff -Nur linux-2.4.32-rc1/drivers/tc/lk201.c linux-2.4.32-rc1.mips/drivers/tc/lk201.c
---- linux-2.4.32-rc1/drivers/tc/lk201.c        2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/lk201.c   2004-09-28 02:53:04.000000000 +0200
+Index: linux-2.4.35.4/drivers/tc/lk201.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/lk201.c     2007-12-15 05:19:44.150937056 +0100
++++ linux-2.4.35.4/drivers/tc/lk201.c  2007-12-15 05:19:44.986984701 +0100
 @@ -5,7 +5,7 @@
   * for more details.
   *
@@ -20761,9 +20945,10 @@ diff -Nur linux-2.4.32-rc1/drivers/tc/lk201.c linux-2.4.32-rc1.mips/drivers/tc/l
 +      if (!register_dec_serial_hook(keyb_line, &lk201_hook))
 +              unregister_dec_serial_hook(keyb_line);
  }
-diff -Nur linux-2.4.32-rc1/drivers/tc/zs.c linux-2.4.32-rc1.mips/drivers/tc/zs.c
---- linux-2.4.32-rc1/drivers/tc/zs.c   2005-01-19 15:10:05.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/zs.c      2004-12-27 05:13:50.000000000 +0100
+Index: linux-2.4.35.4/drivers/tc/zs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/zs.c        2007-12-15 05:19:44.158937514 +0100
++++ linux-2.4.35.4/drivers/tc/zs.c     2007-12-15 05:19:44.986984701 +0100
 @@ -68,6 +68,8 @@
  #include <asm/bitops.h>
  #include <asm/uaccess.h>
@@ -21152,9 +21337,10 @@ diff -Nur linux-2.4.32-rc1/drivers/tc/zs.c linux-2.4.32-rc1.mips/drivers/tc/zs.c
  }
  
  void __init zs_kgdb_hook(int tty_num)
-diff -Nur linux-2.4.32-rc1/drivers/tc/zs.h linux-2.4.32-rc1.mips/drivers/tc/zs.h
---- linux-2.4.32-rc1/drivers/tc/zs.h   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/tc/zs.h      2004-07-01 15:28:54.000000000 +0200
+Index: linux-2.4.35.4/drivers/tc/zs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/tc/zs.h        2007-12-15 05:19:44.166937969 +0100
++++ linux-2.4.35.4/drivers/tc/zs.h     2007-12-15 05:19:44.986984701 +0100
 @@ -1,14 +1,18 @@
  /*
 - * macserial.h: Definitions for the Macintosh Z8530 serial driver.
@@ -21263,9 +21449,10 @@ diff -Nur linux-2.4.32-rc1/drivers/tc/zs.h linux-2.4.32-rc1.mips/drivers/tc/zs.h
        unsigned char           *xmit_buf;
        int                     xmit_head;
        int                     xmit_tail;
-diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.c linux-2.4.32-rc1.mips/drivers/video/au1200fb.c
---- linux-2.4.32-rc1/drivers/video/au1200fb.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/au1200fb.c     2005-03-13 09:04:16.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/au1200fb.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/au1200fb.c    2007-12-15 05:19:44.990984927 +0100
 @@ -0,0 +1,1564 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -22831,9 +23018,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.c linux-2.4.32-rc1.mips/driver
 +#endif /* MODULE */
 +
 +
-diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.h linux-2.4.32-rc1.mips/drivers/video/au1200fb.h
---- linux-2.4.32-rc1/drivers/video/au1200fb.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/au1200fb.h     2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/au1200fb.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/au1200fb.h    2007-12-15 05:19:44.990984927 +0100
 @@ -0,0 +1,288 @@
 +/*
 + * BRIEF MODULE DESCRIPTION
@@ -23123,9 +23311,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/au1200fb.h linux-2.4.32-rc1.mips/driver
 +
 +/********************************************************************/
 +#endif /* _AU1200LCD_H */
-diff -Nur linux-2.4.32-rc1/drivers/video/Config.in linux-2.4.32-rc1.mips/drivers/video/Config.in
---- linux-2.4.32-rc1/drivers/video/Config.in   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/Config.in      2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/Config.in        2007-12-15 05:19:44.186939109 +0100
++++ linux-2.4.35.4/drivers/video/Config.in     2007-12-15 05:19:44.990984927 +0100
 @@ -87,8 +87,8 @@
     if [ "$CONFIG_HP300" = "y" ]; then
        define_bool CONFIG_FB_HP300 y
@@ -23165,9 +23354,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/Config.in linux-2.4.32-rc1.mips/drivers
         fi
        fi
     fi
-diff -Nur linux-2.4.32-rc1/drivers/video/fbmem.c linux-2.4.32-rc1.mips/drivers/video/fbmem.c
---- linux-2.4.32-rc1/drivers/video/fbmem.c     2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/fbmem.c        2005-05-25 19:14:24.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/fbmem.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/fbmem.c  2007-12-15 05:19:44.194939564 +0100
++++ linux-2.4.35.4/drivers/video/fbmem.c       2007-12-15 05:19:44.994985156 +0100
 @@ -139,6 +139,8 @@
  extern int e1356fb_setup(char*);
  extern int au1100fb_init(void);
@@ -23187,9 +23377,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/fbmem.c linux-2.4.32-rc1.mips/drivers/v
  #ifdef CONFIG_FB_IT8181
        { "it8181fb", it8181fb_init, it8181fb_setup },
  #endif
-diff -Nur linux-2.4.32-rc1/drivers/video/ims332.h linux-2.4.32-rc1.mips/drivers/video/ims332.h
---- linux-2.4.32-rc1/drivers/video/ims332.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/ims332.h       2003-12-22 17:02:20.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/ims332.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/video/ims332.h      2007-12-15 05:19:44.994985156 +0100
 @@ -0,0 +1,275 @@
 +/*
 + *    linux/drivers/video/ims332.h
@@ -23466,9 +23657,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/ims332.h linux-2.4.32-rc1.mips/drivers/
 +                              IMS332_CTRL_A_BOOT_ENABLE_VTG);
 +      printk("\n");
 +}
-diff -Nur linux-2.4.32-rc1/drivers/video/Makefile linux-2.4.32-rc1.mips/drivers/video/Makefile
---- linux-2.4.32-rc1/drivers/video/Makefile    2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/Makefile       2005-02-11 22:16:44.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/Makefile 2007-12-15 05:19:44.206940249 +0100
++++ linux-2.4.35.4/drivers/video/Makefile      2007-12-15 05:19:44.994985156 +0100
 @@ -87,6 +87,7 @@
  obj-$(CONFIG_FB_MAXINE)           += maxinefb.o
  obj-$(CONFIG_FB_TX3912)           += tx3912fb.o
@@ -23477,9 +23669,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/Makefile linux-2.4.32-rc1.mips/drivers/
  obj-$(CONFIG_FB_IT8181)                 += it8181fb.o fbgen.o
  
  subdir-$(CONFIG_STI_CONSOLE)      += sti
-diff -Nur linux-2.4.32-rc1/drivers/video/maxinefb.h linux-2.4.32-rc1.mips/drivers/video/maxinefb.h
---- linux-2.4.32-rc1/drivers/video/maxinefb.h  2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/maxinefb.h     1970-01-01 01:00:00.000000000 +0100
+Index: linux-2.4.35.4/drivers/video/maxinefb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/maxinefb.h       2007-12-15 05:19:44.214940704 +0100
++++ /dev/null  1970-01-01 00:00:00.000000000 +0000
 @@ -1,38 +0,0 @@
 -/*
 - *      linux/drivers/video/maxinefb.h
@@ -23519,9 +23712,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/maxinefb.h linux-2.4.32-rc1.mips/driver
 -#define IMS332_REG_COLOR_PALETTE        0x100 /* color palette, 256 entries */
 -#define IMS332_REG_CURSOR_COLOR_PALETTE       0x0a1   /* cursor color palette, */
 -                                              /* 3 entries             */
-diff -Nur linux-2.4.32-rc1/drivers/video/newport_con.c linux-2.4.32-rc1.mips/drivers/video/newport_con.c
---- linux-2.4.32-rc1/drivers/video/newport_con.c       2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/newport_con.c  2004-09-23 15:32:29.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/newport_con.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/newport_con.c    2007-12-15 05:19:44.222941159 +0100
++++ linux-2.4.35.4/drivers/video/newport_con.c 2007-12-15 05:19:45.002985611 +0100
 @@ -22,6 +22,7 @@
  #include <linux/module.h>
  #include <linux/slab.h>
@@ -23755,9 +23949,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/newport_con.c linux-2.4.32-rc1.mips/dri
  }
  
  module_init(newport_console_init);
-diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.c linux-2.4.32-rc1.mips/drivers/video/tgafb.c
---- linux-2.4.32-rc1/drivers/video/tgafb.c     2001-11-14 23:52:20.000000000 +0100
-+++ linux-2.4.32-rc1.mips/drivers/video/tgafb.c        2004-10-30 01:15:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/tgafb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/tgafb.c  2007-12-15 05:19:44.230941615 +0100
++++ linux-2.4.35.4/drivers/video/tgafb.c       2007-12-15 05:19:45.002985611 +0100
 @@ -45,6 +45,15 @@
  #include <linux/console.h>
  #include <asm/io.h>
@@ -23934,9 +24129,10 @@ diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.c linux-2.4.32-rc1.mips/drivers/v
      return 0;
  }
  
-diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.h linux-2.4.32-rc1.mips/drivers/video/tgafb.h
---- linux-2.4.32-rc1/drivers/video/tgafb.h     2000-04-12 18:47:28.000000000 +0200
-+++ linux-2.4.32-rc1.mips/drivers/video/tgafb.h        2004-10-30 01:15:02.000000000 +0200
+Index: linux-2.4.35.4/drivers/video/tgafb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/video/tgafb.h  2007-12-15 05:19:44.238942073 +0100
++++ linux-2.4.35.4/drivers/video/tgafb.h       2007-12-15 05:19:45.002985611 +0100
 @@ -36,6 +36,7 @@
  #define       TGA_RASTEROP_REG                0x0034
  #define       TGA_PIXELSHIFT_REG              0x0038
@@ -23945,10 +24141,11 @@ diff -Nur linux-2.4.32-rc1/drivers/video/tgafb.h linux-2.4.32-rc1.mips/drivers/v
  #define       TGA_PIXELMASK_REG               0x005c
  #define       TGA_CURSOR_BASE_REG             0x0060
  #define       TGA_HORIZ_REG                   0x0064
-diff -Nur linux-2.4.32-rc1/fs/binfmt_elf.c linux-2.4.32-rc1.mips/fs/binfmt_elf.c
---- linux-2.4.32-rc1/fs/binfmt_elf.c   2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/binfmt_elf.c      2005-05-23 14:12:31.000000000 +0200
-@@ -660,6 +660,9 @@
+Index: linux-2.4.35.4/fs/binfmt_elf.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/binfmt_elf.c        2007-12-15 05:19:44.246942528 +0100
++++ linux-2.4.35.4/fs/binfmt_elf.c     2007-12-15 05:19:45.006985841 +0100
+@@ -665,6 +665,9 @@
                    bprm->argc++;
                  }
                }
@@ -23958,7 +24155,7 @@ diff -Nur linux-2.4.32-rc1/fs/binfmt_elf.c linux-2.4.32-rc1.mips/fs/binfmt_elf.c
        }
  
        /* Flush all traces of the currently running executable */
-@@ -1211,7 +1214,11 @@
+@@ -1225,7 +1228,11 @@
        elf.e_entry = 0;
        elf.e_phoff = sizeof(elf);
        elf.e_shoff = 0;
@@ -23970,9 +24167,10 @@ diff -Nur linux-2.4.32-rc1/fs/binfmt_elf.c linux-2.4.32-rc1.mips/fs/binfmt_elf.c
        elf.e_ehsize = sizeof(elf);
        elf.e_phentsize = sizeof(struct elf_phdr);
        elf.e_phnum = segs+1;           /* Include notes */
-diff -Nur linux-2.4.32-rc1/fs/partitions/sgi.c linux-2.4.32-rc1.mips/fs/partitions/sgi.c
---- linux-2.4.32-rc1/fs/partitions/sgi.c       2001-10-02 05:03:26.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/partitions/sgi.c  2004-08-11 22:30:07.000000000 +0200
+Index: linux-2.4.35.4/fs/partitions/sgi.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/partitions/sgi.c    2007-12-15 05:19:44.254942983 +0100
++++ linux-2.4.35.4/fs/partitions/sgi.c 2007-12-15 05:19:45.006985841 +0100
 @@ -17,6 +17,11 @@
  #include "check.h"
  #include "sgi.h"
@@ -23996,9 +24194,10 @@ diff -Nur linux-2.4.32-rc1/fs/partitions/sgi.c linux-2.4.32-rc1.mips/fs/partitio
                current_minor++;
        }
        printk("\n");
-diff -Nur linux-2.4.32-rc1/fs/proc/array.c linux-2.4.32-rc1.mips/fs/proc/array.c
---- linux-2.4.32-rc1/fs/proc/array.c   2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/fs/proc/array.c      2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/fs/proc/array.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/proc/array.c        2007-12-15 05:19:44.262943439 +0100
++++ linux-2.4.35.4/fs/proc/array.c     2007-12-15 05:19:45.006985841 +0100
 @@ -368,15 +368,15 @@
                task->cmin_flt,
                task->maj_flt,
@@ -24039,9 +24238,10 @@ diff -Nur linux-2.4.32-rc1/fs/proc/array.c linux-2.4.32-rc1.mips/fs/proc/array.c
  
        return len;
  }
-diff -Nur linux-2.4.32-rc1/fs/proc/proc_misc.c linux-2.4.32-rc1.mips/fs/proc/proc_misc.c
---- linux-2.4.32-rc1/fs/proc/proc_misc.c       2004-08-08 01:26:06.000000000 +0200
-+++ linux-2.4.32-rc1.mips/fs/proc/proc_misc.c  2004-08-14 20:39:01.000000000 +0200
+Index: linux-2.4.35.4/fs/proc/proc_misc.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/proc/proc_misc.c    2007-12-15 05:19:44.270943894 +0100
++++ linux-2.4.35.4/fs/proc/proc_misc.c 2007-12-15 05:19:45.006985841 +0100
 @@ -308,16 +308,16 @@
  {
        int i, len = 0;
@@ -24078,9 +24278,10 @@ diff -Nur linux-2.4.32-rc1/fs/proc/proc_misc.c linux-2.4.32-rc1.mips/fs/proc/pro
                                   + kstat.per_cpu_nice[cpu_logical_map(i)] \
                                   + kstat.per_cpu_system[cpu_logical_map(i)]));
        proc_sprintf(page, &off, &len,
-diff -Nur linux-2.4.32-rc1/include/asm-alpha/param.h linux-2.4.32-rc1.mips/include/asm-alpha/param.h
---- linux-2.4.32-rc1/include/asm-alpha/param.h 2000-11-08 08:37:31.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-alpha/param.h    2000-11-28 04:59:03.000000000 +0100
+Index: linux-2.4.35.4/include/asm-alpha/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-alpha/param.h      2007-12-15 05:19:44.278944352 +0100
++++ linux-2.4.35.4/include/asm-alpha/param.h   2007-12-15 05:19:45.010986067 +0100
 @@ -13,6 +13,9 @@
  # else
  #  define HZ  1200
@@ -24091,9 +24292,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-alpha/param.h linux-2.4.32-rc1.mips/inclu
  #endif
  
  #define EXEC_PAGESIZE 8192
-diff -Nur linux-2.4.32-rc1/include/asm-i386/param.h linux-2.4.32-rc1.mips/include/asm-i386/param.h
---- linux-2.4.32-rc1/include/asm-i386/param.h  2000-10-27 20:04:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-i386/param.h     2000-11-23 03:00:55.000000000 +0100
+Index: linux-2.4.35.4/include/asm-i386/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-i386/param.h       2007-12-15 05:19:44.290945034 +0100
++++ linux-2.4.35.4/include/asm-i386/param.h    2007-12-15 05:19:45.010986067 +0100
 @@ -3,6 +3,9 @@
  
  #ifndef HZ
@@ -24104,9 +24306,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-i386/param.h linux-2.4.32-rc1.mips/includ
  #endif
  
  #define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-ia64/param.h linux-2.4.32-rc1.mips/include/asm-ia64/param.h
---- linux-2.4.32-rc1/include/asm-ia64/param.h  2004-04-14 15:05:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-ia64/param.h     2004-04-16 05:14:20.000000000 +0200
+Index: linux-2.4.35.4/include/asm-ia64/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ia64/param.h       2007-12-15 05:19:44.298945492 +0100
++++ linux-2.4.35.4/include/asm-ia64/param.h    2007-12-15 05:19:45.010986067 +0100
 @@ -7,9 +7,15 @@
   * Based on <asm-i386/param.h>.
   *
@@ -24124,9 +24327,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-ia64/param.h linux-2.4.32-rc1.mips/includ
  #define EXEC_PAGESIZE 65536
  
  #ifndef NGROUPS
-diff -Nur linux-2.4.32-rc1/include/asm-m68k/param.h linux-2.4.32-rc1.mips/include/asm-m68k/param.h
---- linux-2.4.32-rc1/include/asm-m68k/param.h  2001-01-04 22:00:55.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-m68k/param.h     2001-01-11 05:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-m68k/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-m68k/param.h       2007-12-15 05:19:44.306945948 +0100
++++ linux-2.4.35.4/include/asm-m68k/param.h    2007-12-15 05:19:45.010986067 +0100
 @@ -3,6 +3,9 @@
  
  #ifndef HZ
@@ -24137,9 +24341,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-m68k/param.h linux-2.4.32-rc1.mips/includ
  #endif
  
  #define EXEC_PAGESIZE 8192
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_gpio.h linux-2.4.32-rc1.mips/include/asm-mips/au1000_gpio.h
---- linux-2.4.32-rc1/include/asm-mips/au1000_gpio.h    2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000_gpio.h       2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000_gpio.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000_gpio.h 2007-12-15 05:19:44.314946403 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000_gpio.h      2007-12-15 05:19:45.014986296 +0100
 @@ -30,6 +30,13 @@
   *  675 Mass Ave, Cambridge, MA 02139, USA.
   */
@@ -24255,9 +24460,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_gpio.h linux-2.4.32-rc1.mips/
  #endif
  
  #endif
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000.h linux-2.4.32-rc1.mips/include/asm-mips/au1000.h
---- linux-2.4.32-rc1/include/asm-mips/au1000.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000.h    2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000.h      2007-12-15 05:19:44.322946858 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000.h   2007-12-15 05:19:45.018986525 +0100
 @@ -160,28 +160,356 @@
  #define ALLINTS (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4 | IE_IRQ5)
  #endif
@@ -24925,9 +25131,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000.h linux-2.4.32-rc1.mips/inclu
 +
 +#endif
 +
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_pcmcia.h linux-2.4.32-rc1.mips/include/asm-mips/au1000_pcmcia.h
---- linux-2.4.32-rc1/include/asm-mips/au1000_pcmcia.h  2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1000_pcmcia.h     2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1000_pcmcia.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1000_pcmcia.h       2007-12-15 05:19:44.330947314 +0100
++++ linux-2.4.35.4/include/asm-mips/au1000_pcmcia.h    2007-12-15 05:19:45.022986751 +0100
 @@ -38,16 +38,41 @@
  #define AU1X_SOCK0_PHYS_MEM  0xF80000000
  
@@ -24979,9 +25186,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1000_pcmcia.h linux-2.4.32-rc1.mip
  #endif
  
  struct pcmcia_state {
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1100_mmc.h linux-2.4.32-rc1.mips/include/asm-mips/au1100_mmc.h
---- linux-2.4.32-rc1/include/asm-mips/au1100_mmc.h     2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1100_mmc.h        2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1100_mmc.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1100_mmc.h  2007-12-15 05:19:44.338947772 +0100
++++ linux-2.4.35.4/include/asm-mips/au1100_mmc.h       2007-12-15 05:19:45.022986751 +0100
 @@ -39,16 +39,22 @@
  #define __ASM_AU1100_MMC_H
  
@@ -25023,9 +25231,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1100_mmc.h linux-2.4.32-rc1.mips/i
 +
  #endif /* __ASM_AU1100_MMC_H */
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_dbdma.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_dbdma.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_dbdma.h   2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_dbdma.h      2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_dbdma.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1xxx_dbdma.h        2007-12-15 05:19:44.342947998 +0100
++++ linux-2.4.35.4/include/asm-mips/au1xxx_dbdma.h     2007-12-15 05:19:45.022986751 +0100
 @@ -43,7 +43,7 @@
  #define DDMA_GLOBAL_BASE      0xb4003000
  #define DDMA_CHANNEL_BASE     0xb4002000
@@ -25178,9 +25387,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_dbdma.h linux-2.4.32-rc1.mips
 +
  #endif /* _LANGUAGE_ASSEMBLY */
  #endif /* _AU1000_DBDMA_H_ */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_gpio.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_gpio.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_gpio.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_gpio.h       2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_gpio.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/au1xxx_gpio.h      2007-12-15 05:19:45.022986751 +0100
 @@ -0,0 +1,22 @@
 +
 +
@@ -25204,9 +25414,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_gpio.h linux-2.4.32-rc1.mips/
 +} AU1X00_GPIO2;
 +
 +#endif //__AU1XXX_GPIO_H
-diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_psc.h linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_psc.h
---- linux-2.4.32-rc1/include/asm-mips/au1xxx_psc.h     2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/au1xxx_psc.h        2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/au1xxx_psc.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/au1xxx_psc.h  2007-12-15 05:19:44.358948912 +0100
++++ linux-2.4.35.4/include/asm-mips/au1xxx_psc.h       2007-12-15 05:19:45.022986751 +0100
 @@ -41,6 +41,11 @@
  #define PSC3_BASE_ADDR                0xb0d00000
  #endif
@@ -25228,9 +25439,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/au1xxx_psc.h linux-2.4.32-rc1.mips/i
  #define PSC_I2SCFG_WI         (1 << 15)
  
  #define PSC_I2SCFG_DIV_MASK   (3 << 13)
-diff -Nur linux-2.4.32-rc1/include/asm-mips/bootinfo.h linux-2.4.32-rc1.mips/include/asm-mips/bootinfo.h
---- linux-2.4.32-rc1/include/asm-mips/bootinfo.h       2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/bootinfo.h  2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/bootinfo.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/bootinfo.h    2007-12-15 05:19:44.366949367 +0100
++++ linux-2.4.35.4/include/asm-mips/bootinfo.h 2007-12-15 05:19:45.026986980 +0100
 @@ -180,6 +180,9 @@
  #define MACH_MTX1             7       /* 4G MTX-1 Au1500-based board */
  #define MACH_CSB250           8       /* Cogent Au1500 */
@@ -25241,9 +25453,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/bootinfo.h linux-2.4.32-rc1.mips/inc
  
  /*
   * Valid machtype for group NEC_VR41XX
-diff -Nur linux-2.4.32-rc1/include/asm-mips/db1200.h linux-2.4.32-rc1.mips/include/asm-mips/db1200.h
---- linux-2.4.32-rc1/include/asm-mips/db1200.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/db1200.h    2005-01-30 09:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/db1200.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/db1200.h   2007-12-15 05:19:45.026986980 +0100
 @@ -0,0 +1,214 @@
 +/*
 + * AMD Alchemy DB1200 Referrence Board
@@ -25459,9 +25672,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/db1200.h linux-2.4.32-rc1.mips/inclu
 +
 +#endif /* __ASM_DB1200_H */
 +
-diff -Nur linux-2.4.32-rc1/include/asm-mips/db1x00.h linux-2.4.32-rc1.mips/include/asm-mips/db1x00.h
---- linux-2.4.32-rc1/include/asm-mips/db1x00.h 2005-01-19 15:10:11.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/db1x00.h    2005-01-30 09:06:19.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/db1x00.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/db1x00.h      2007-12-15 05:19:44.378950051 +0100
++++ linux-2.4.35.4/include/asm-mips/db1x00.h   2007-12-15 05:19:45.026986980 +0100
 @@ -1,5 +1,5 @@
  /*
 - * AMD Alchemy DB1x00 Reference Boards
@@ -25567,9 +25781,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/db1x00.h linux-2.4.32-rc1.mips/inclu
  
  #endif /* __ASM_DB1X00_H */
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips/elf.h linux-2.4.32-rc1.mips/include/asm-mips/elf.h
---- linux-2.4.32-rc1/include/asm-mips/elf.h    2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/elf.h       2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/elf.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/elf.h 2007-12-15 05:19:44.386950507 +0100
++++ linux-2.4.35.4/include/asm-mips/elf.h      2007-12-15 05:19:45.026986980 +0100
 @@ -66,9 +66,10 @@
  #define USE_ELF_CORE_DUMP
  #define ELF_EXEC_PAGESIZE     PAGE_SIZE
@@ -25584,9 +25799,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/elf.h linux-2.4.32-rc1.mips/include/
  
  /* This yields a mask that user programs can use to figure out what
     instruction set this cpu supports.  This could be done in userspace,
-diff -Nur linux-2.4.32-rc1/include/asm-mips/ficmmp.h linux-2.4.32-rc1.mips/include/asm-mips/ficmmp.h
---- linux-2.4.32-rc1/include/asm-mips/ficmmp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/ficmmp.h    2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/ficmmp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/ficmmp.h   2007-12-15 05:19:45.026986980 +0100
 @@ -0,0 +1,156 @@
 +/*
 + * FIC MMP
@@ -25744,9 +25960,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/ficmmp.h linux-2.4.32-rc1.mips/inclu
 +
 +#endif /* __ASM_FICMMP_H */
 +
-diff -Nur linux-2.4.32-rc1/include/asm-mips/hazards.h linux-2.4.32-rc1.mips/include/asm-mips/hazards.h
---- linux-2.4.32-rc1/include/asm-mips/hazards.h        2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/hazards.h   2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/hazards.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/hazards.h     2007-12-15 05:19:44.398951191 +0100
++++ linux-2.4.35.4/include/asm-mips/hazards.h  2007-12-15 05:19:45.030987207 +0100
 @@ -3,7 +3,7 @@
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
@@ -25963,9 +26180,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/hazards.h linux-2.4.32-rc1.mips/incl
 +#endif /* __ASSEMBLY__ */
 +
  #endif /* _ASM_HAZARDS_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/ide.h linux-2.4.32-rc1.mips/include/asm-mips/ide.h
---- linux-2.4.32-rc1/include/asm-mips/ide.h    2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/ide.h       2005-04-19 14:26:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/ide.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/ide.h 2007-12-15 05:19:44.406951647 +0100
++++ linux-2.4.35.4/include/asm-mips/ide.h      2007-12-15 05:19:45.030987207 +0100
 @@ -32,12 +32,12 @@
  
  extern struct ide_ops *ide_ops;
@@ -26081,9 +26299,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/ide.h linux-2.4.32-rc1.mips/include/
  
  #endif /* __KERNEL__ */
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips/io.h linux-2.4.32-rc1.mips/include/asm-mips/io.h
---- linux-2.4.32-rc1/include/asm-mips/io.h     2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/io.h        2005-04-19 14:24:16.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/io.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/io.h  2007-12-15 05:19:44.414952102 +0100
++++ linux-2.4.35.4/include/asm-mips/io.h       2007-12-15 05:19:45.030987207 +0100
 @@ -392,7 +392,8 @@
        return __ioswab32(__val);
  }
@@ -26114,9 +26333,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/io.h linux-2.4.32-rc1.mips/include/a
  {
        while (count--) {
                outl(*(u32 *)addr, port);
-diff -Nur linux-2.4.32-rc1/include/asm-mips/mipsregs.h linux-2.4.32-rc1.mips/include/asm-mips/mipsregs.h
---- linux-2.4.32-rc1/include/asm-mips/mipsregs.h       2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/mipsregs.h  2005-02-06 22:24:22.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/mipsregs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/mipsregs.h    2007-12-15 05:19:44.422952557 +0100
++++ linux-2.4.35.4/include/asm-mips/mipsregs.h 2007-12-15 05:19:45.038987665 +0100
 @@ -757,10 +757,18 @@
  #define read_c0_config1()     __read_32bit_c0_register($16, 1)
  #define read_c0_config2()     __read_32bit_c0_register($16, 2)
@@ -26179,9 +26399,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/mipsregs.h linux-2.4.32-rc1.mips/inc
  }
  
  /*
-diff -Nur linux-2.4.32-rc1/include/asm-mips/mmu_context.h linux-2.4.32-rc1.mips/include/asm-mips/mmu_context.h
---- linux-2.4.32-rc1/include/asm-mips/mmu_context.h    2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/mmu_context.h       2004-11-22 14:38:29.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/mmu_context.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/mmu_context.h 2007-12-15 05:19:44.430953013 +0100
++++ linux-2.4.35.4/include/asm-mips/mmu_context.h      2007-12-15 05:19:45.038987665 +0100
 @@ -27,7 +27,7 @@
  #define TLBMISS_HANDLER_SETUP_PGD(pgd) \
        pgd_current[smp_processor_id()] = (unsigned long)(pgd)
@@ -26191,9 +26412,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/mmu_context.h linux-2.4.32-rc1.mips/
        TLBMISS_HANDLER_SETUP_PGD(swapper_pg_dir)
  extern unsigned long pgd_current[];
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1100.h linux-2.4.32-rc1.mips/include/asm-mips/pb1100.h
---- linux-2.4.32-rc1/include/asm-mips/pb1100.h 2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1100.h    2005-01-30 09:10:29.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1100.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/pb1100.h      2007-12-15 05:19:44.438953471 +0100
++++ linux-2.4.35.4/include/asm-mips/pb1100.h   2007-12-15 05:19:45.038987665 +0100
 @@ -1,5 +1,5 @@
  /*
 - * Alchemy Semi PB1100 Referrence Board
@@ -26360,9 +26582,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1100.h linux-2.4.32-rc1.mips/inclu
  
  #endif /* __ASM_PB1100_H */
 +
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1200.h linux-2.4.32-rc1.mips/include/asm-mips/pb1200.h
---- linux-2.4.32-rc1/include/asm-mips/pb1200.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1200.h    2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1200.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/asm-mips/pb1200.h   2007-12-15 05:19:45.038987665 +0100
 @@ -0,0 +1,244 @@
 +/*
 + * AMD Alchemy PB1200 Referrence Board
@@ -26608,9 +26831,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1200.h linux-2.4.32-rc1.mips/inclu
 +
 +#endif /* __ASM_PB1200_H */
 +
-diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1550.h linux-2.4.32-rc1.mips/include/asm-mips/pb1550.h
---- linux-2.4.32-rc1/include/asm-mips/pb1550.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/pb1550.h    2005-01-30 09:01:28.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/pb1550.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/pb1550.h      2007-12-15 05:19:44.450954152 +0100
++++ linux-2.4.35.4/include/asm-mips/pb1550.h   2007-12-15 05:19:45.042987891 +0100
 @@ -30,13 +30,11 @@
  
  #define DBDMA_AC97_TX_CHAN DSCR_CMD0_PSC1_TX
@@ -26654,9 +26878,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/pb1550.h linux-2.4.32-rc1.mips/inclu
 +#define AU1XXX_SMC91111_IRQ           AU1000_GPIO_3
  
  #endif /* __ASM_PB1550_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/reg.h linux-2.4.32-rc1.mips/include/asm-mips/reg.h
---- linux-2.4.32-rc1/include/asm-mips/reg.h    2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/reg.h       2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/reg.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/reg.h 2007-12-15 05:19:44.458954611 +0100
++++ linux-2.4.35.4/include/asm-mips/reg.h      2007-12-15 05:19:45.042987891 +0100
 @@ -45,6 +45,9 @@
  /*
   * k0/k1 unsaved
@@ -26675,9 +26900,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/reg.h linux-2.4.32-rc1.mips/include/
  
  #define EF_SIZE                       180     /* size in bytes */
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips/sgi/hpc3.h linux-2.4.32-rc1.mips/include/asm-mips/sgi/hpc3.h
---- linux-2.4.32-rc1/include/asm-mips/sgi/hpc3.h       2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/sgi/hpc3.h  2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/sgi/hpc3.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/sgi/hpc3.h    2007-12-15 05:19:44.466955066 +0100
++++ linux-2.4.35.4/include/asm-mips/sgi/hpc3.h 2007-12-15 05:19:45.042987891 +0100
 @@ -128,26 +128,26 @@
        volatile u32 rx_gfptr;  /* current GIO fifo ptr */
        volatile u32 rx_dfptr;  /* current device fifo ptr */
@@ -26743,9 +26969,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/sgi/hpc3.h linux-2.4.32-rc1.mips/inc
   * It is possible to have two HPC3's within the address space on
   * one machine, though only having one is more likely on an Indy.
   */
-diff -Nur linux-2.4.32-rc1/include/asm-mips/tx4927/tx4927.h linux-2.4.32-rc1.mips/include/asm-mips/tx4927/tx4927.h
---- linux-2.4.32-rc1/include/asm-mips/tx4927/tx4927.h  2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips/tx4927/tx4927.h     2004-11-22 19:02:10.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/tx4927/tx4927.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/tx4927/tx4927.h       2007-12-15 05:19:44.474955521 +0100
++++ linux-2.4.35.4/include/asm-mips/tx4927/tx4927.h    2007-12-15 05:19:45.042987891 +0100
 @@ -88,8 +88,8 @@
  
  
@@ -26814,9 +27041,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/tx4927/tx4927.h linux-2.4.32-rc1.mip
  #define TX4927_ACLC_ACSEMAPH            0xf720
  #define TX4927_ACLC_ACGPIDAT            0xf740
  #define TX4927_ACLC_ACGPODAT            0xf744
-diff -Nur linux-2.4.32-rc1/include/asm-mips/unistd.h linux-2.4.32-rc1.mips/include/asm-mips/unistd.h
---- linux-2.4.32-rc1/include/asm-mips/unistd.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips/unistd.h    2004-11-24 21:30:06.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips/unistd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/unistd.h      2007-12-15 05:19:44.482955977 +0100
++++ linux-2.4.35.4/include/asm-mips/unistd.h   2007-12-15 05:19:45.046988120 +0100
 @@ -760,7 +760,7 @@
        if (__a3 == 0) \
                return (type) __v0; \
@@ -26898,9 +27126,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips/unistd.h linux-2.4.32-rc1.mips/inclu
  }
  
  #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/checksum.h linux-2.4.32-rc1.mips/include/asm-mips64/checksum.h
---- linux-2.4.32-rc1/include/asm-mips64/checksum.h     2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/checksum.h        2005-09-20 12:58:50.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/checksum.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/checksum.h  2007-12-15 05:19:44.490956432 +0100
++++ linux-2.4.35.4/include/asm-mips64/checksum.h       2007-12-15 05:19:45.046988120 +0100
 @@ -144,7 +144,7 @@
        "daddu\t%0, %4\n\t"
        "dsll32\t$1, %0, 0\n\t"
@@ -26910,9 +27139,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/checksum.h linux-2.4.32-rc1.mips/i
        ".set\tat"
        : "=&r" (sum)
        : "0" (daddr), "r"(saddr),
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/elf.h linux-2.4.32-rc1.mips/include/asm-mips64/elf.h
---- linux-2.4.32-rc1/include/asm-mips64/elf.h  2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/elf.h     2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/elf.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/elf.h       2007-12-15 05:19:44.498956890 +0100
++++ linux-2.4.35.4/include/asm-mips64/elf.h    2007-12-15 05:19:45.046988120 +0100
 @@ -64,9 +64,10 @@
  #define USE_ELF_CORE_DUMP
  #define ELF_EXEC_PAGESIZE     PAGE_SIZE
@@ -26927,9 +27157,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/elf.h linux-2.4.32-rc1.mips/includ
  
  /* This yields a mask that user programs can use to figure out what
     instruction set this cpu supports.  This could be done in userspace,
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/hazards.h linux-2.4.32-rc1.mips/include/asm-mips64/hazards.h
---- linux-2.4.32-rc1/include/asm-mips64/hazards.h      2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/hazards.h 2005-06-06 16:46:22.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/hazards.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/hazards.h   2007-12-15 05:19:44.506957346 +0100
++++ linux-2.4.35.4/include/asm-mips64/hazards.h        2007-12-15 05:19:45.046988120 +0100
 @@ -3,7 +3,7 @@
   * License.  See the file "COPYING" in the main directory of this archive
   * for more details.
@@ -27147,9 +27378,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/hazards.h linux-2.4.32-rc1.mips/in
 +#endif /* __ASSEMBLY__ */
 +
  #endif /* _ASM_HAZARDS_H */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/ide.h linux-2.4.32-rc1.mips/include/asm-mips64/ide.h
---- linux-2.4.32-rc1/include/asm-mips64/ide.h  2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/ide.h     2005-04-19 14:26:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/ide.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/ide.h       2007-12-15 05:19:44.514957801 +0100
++++ linux-2.4.35.4/include/asm-mips64/ide.h    2007-12-15 05:19:45.050988346 +0100
 @@ -32,12 +32,12 @@
  
  extern struct ide_ops *ide_ops;
@@ -27265,9 +27497,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/ide.h linux-2.4.32-rc1.mips/includ
  
  #endif /* __KERNEL__ */
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/io.h linux-2.4.32-rc1.mips/include/asm-mips64/io.h
---- linux-2.4.32-rc1/include/asm-mips64/io.h   2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/io.h      2005-04-19 14:24:53.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/io.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/io.h        2007-12-15 05:19:44.522958256 +0100
++++ linux-2.4.35.4/include/asm-mips64/io.h     2007-12-15 05:19:45.050988346 +0100
 @@ -414,7 +414,8 @@
        return __ioswab32(__val);
  }
@@ -27298,9 +27531,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/io.h linux-2.4.32-rc1.mips/include
  {
        while (count--) {
                outl(*(u32 *)addr, port);
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/mipsregs.h linux-2.4.32-rc1.mips/include/asm-mips64/mipsregs.h
---- linux-2.4.32-rc1/include/asm-mips64/mipsregs.h     2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/mipsregs.h        2005-02-06 22:24:22.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips64/mipsregs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/mipsregs.h  2007-12-15 05:19:44.530958712 +0100
++++ linux-2.4.35.4/include/asm-mips64/mipsregs.h       2007-12-15 05:19:45.050988346 +0100
 @@ -757,10 +757,18 @@
  #define read_c0_config1()     __read_32bit_c0_register($16, 1)
  #define read_c0_config2()     __read_32bit_c0_register($16, 2)
@@ -27363,9 +27597,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/mipsregs.h linux-2.4.32-rc1.mips/i
  }
  
  /*
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/reg.h linux-2.4.32-rc1.mips/include/asm-mips64/reg.h
---- linux-2.4.32-rc1/include/asm-mips64/reg.h  2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/reg.h     2005-04-14 12:41:44.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/reg.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/reg.h       2007-12-15 05:19:44.538959170 +0100
++++ linux-2.4.35.4/include/asm-mips64/reg.h    2007-12-15 05:19:45.050988346 +0100
 @@ -46,6 +46,9 @@
  /*
   * k0/k1 unsaved
@@ -27376,9 +27611,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/reg.h linux-2.4.32-rc1.mips/includ
  #define EF_REG28              28
  #define EF_REG29              29
  #define EF_REG30              30
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/sgi/hpc3.h linux-2.4.32-rc1.mips/include/asm-mips64/sgi/hpc3.h
---- linux-2.4.32-rc1/include/asm-mips64/sgi/hpc3.h     2003-08-25 13:44:44.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/sgi/hpc3.h        2005-09-23 16:35:27.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/sgi/hpc3.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/sgi/hpc3.h  2007-12-15 05:19:44.546959625 +0100
++++ linux-2.4.35.4/include/asm-mips64/sgi/hpc3.h       2007-12-15 05:19:45.050988346 +0100
 @@ -128,26 +128,26 @@
        volatile u32 rx_gfptr;  /* current GIO fifo ptr */
        volatile u32 rx_dfptr;  /* current device fifo ptr */
@@ -27444,9 +27680,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/sgi/hpc3.h linux-2.4.32-rc1.mips/i
   * It is possible to have two HPC3's within the address space on
   * one machine, though only having one is more likely on an Indy.
   */
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/sn/nmi.h linux-2.4.32-rc1.mips/include/asm-mips64/sn/nmi.h
---- linux-2.4.32-rc1/include/asm-mips64/sn/nmi.h       2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/sn/nmi.h  2002-08-06 01:53:40.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/sn/nmi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/sn/nmi.h    2007-12-15 05:19:44.554960080 +0100
++++ linux-2.4.35.4/include/asm-mips64/sn/nmi.h 2007-12-15 05:19:45.054988575 +0100
 @@ -8,7 +8,7 @@
  #ifndef __ASM_SN_NMI_H
  #define __ASM_SN_NMI_H
@@ -27456,9 +27693,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/sn/nmi.h linux-2.4.32-rc1.mips/inc
  
  #include <asm/sn/addrs.h>
  
-diff -Nur linux-2.4.32-rc1/include/asm-mips64/unistd.h linux-2.4.32-rc1.mips/include/asm-mips64/unistd.h
---- linux-2.4.32-rc1/include/asm-mips64/unistd.h       2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-mips64/unistd.h  2004-11-24 21:30:06.000000000 +0100
+Index: linux-2.4.35.4/include/asm-mips64/unistd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/unistd.h    2007-12-15 05:19:44.562960536 +0100
++++ linux-2.4.35.4/include/asm-mips64/unistd.h 2007-12-15 05:19:45.054988575 +0100
 @@ -760,7 +760,7 @@
        if (__a3 == 0) \
                return (type) __v0; \
@@ -27540,9 +27778,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-mips64/unistd.h linux-2.4.32-rc1.mips/inc
  }
  
  #endif /* (_MIPS_SIM == _MIPS_SIM_NABI32) || (_MIPS_SIM == _MIPS_SIM_ABI64) */
-diff -Nur linux-2.4.32-rc1/include/asm-ppc/param.h linux-2.4.32-rc1.mips/include/asm-ppc/param.h
---- linux-2.4.32-rc1/include/asm-ppc/param.h   2003-06-13 16:51:38.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/asm-ppc/param.h      2003-07-05 05:23:46.000000000 +0200
+Index: linux-2.4.35.4/include/asm-ppc/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ppc/param.h        2007-12-15 05:19:44.570960991 +0100
++++ linux-2.4.35.4/include/asm-ppc/param.h     2007-12-15 05:19:45.054988575 +0100
 @@ -3,6 +3,9 @@
  
  #ifndef HZ
@@ -27553,9 +27792,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-ppc/param.h linux-2.4.32-rc1.mips/include
  #endif
  
  #define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-s390/param.h linux-2.4.32-rc1.mips/include/asm-s390/param.h
---- linux-2.4.32-rc1/include/asm-s390/param.h  2001-02-13 23:13:44.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-s390/param.h     2001-03-09 21:34:48.000000000 +0100
+Index: linux-2.4.35.4/include/asm-s390/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390/param.h       2007-12-15 05:19:44.578961449 +0100
++++ linux-2.4.35.4/include/asm-s390/param.h    2007-12-15 05:19:45.054988575 +0100
 @@ -11,6 +11,9 @@
  
  #ifndef HZ
@@ -27566,9 +27806,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-s390/param.h linux-2.4.32-rc1.mips/includ
  #endif
  
  #define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-sh/param.h linux-2.4.32-rc1.mips/include/asm-sh/param.h
---- linux-2.4.32-rc1/include/asm-sh/param.h    2001-01-04 22:19:13.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sh/param.h       2001-01-11 05:02:45.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sh/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sh/param.h 2007-12-15 05:19:44.590962131 +0100
++++ linux-2.4.35.4/include/asm-sh/param.h      2007-12-15 05:19:45.054988575 +0100
 @@ -3,6 +3,9 @@
  
  #ifndef HZ
@@ -27579,9 +27820,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-sh/param.h linux-2.4.32-rc1.mips/include/
  #endif
  
  #define EXEC_PAGESIZE 4096
-diff -Nur linux-2.4.32-rc1/include/asm-sparc/param.h linux-2.4.32-rc1.mips/include/asm-sparc/param.h
---- linux-2.4.32-rc1/include/asm-sparc/param.h 2000-10-30 23:34:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sparc/param.h    2000-11-23 03:00:56.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sparc/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc/param.h      2007-12-15 05:19:44.598962589 +0100
++++ linux-2.4.35.4/include/asm-sparc/param.h   2007-12-15 05:19:45.058988805 +0100
 @@ -4,6 +4,9 @@
  
  #ifndef HZ
@@ -27592,9 +27834,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-sparc/param.h linux-2.4.32-rc1.mips/inclu
  #endif
  
  #define EXEC_PAGESIZE 8192    /* Thanks for sun4's we carry baggage... */
-diff -Nur linux-2.4.32-rc1/include/asm-sparc64/param.h linux-2.4.32-rc1.mips/include/asm-sparc64/param.h
---- linux-2.4.32-rc1/include/asm-sparc64/param.h       2000-10-30 23:34:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/asm-sparc64/param.h  2000-11-23 03:00:56.000000000 +0100
+Index: linux-2.4.35.4/include/asm-sparc64/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc64/param.h    2007-12-15 05:19:44.606963045 +0100
++++ linux-2.4.35.4/include/asm-sparc64/param.h 2007-12-15 05:19:45.058988805 +0100
 @@ -4,6 +4,9 @@
  
  #ifndef HZ
@@ -27605,9 +27848,10 @@ diff -Nur linux-2.4.32-rc1/include/asm-sparc64/param.h linux-2.4.32-rc1.mips/inc
  #endif
  
  #define EXEC_PAGESIZE 8192    /* Thanks for sun4's we carry baggage... */
-diff -Nur linux-2.4.32-rc1/include/linux/i2c-algo-au1550.h linux-2.4.32-rc1.mips/include/linux/i2c-algo-au1550.h
---- linux-2.4.32-rc1/include/linux/i2c-algo-au1550.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/i2c-algo-au1550.h      2004-07-07 02:38:02.000000000 +0200
+Index: linux-2.4.35.4/include/linux/i2c-algo-au1550.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/i2c-algo-au1550.h     2007-12-15 05:19:45.058988805 +0100
 @@ -0,0 +1,31 @@
 +/*
 + * Copyright (C) 2004 Embedded Edge, LLC <dan@embeddededge.com>
@@ -27640,19 +27884,20 @@ diff -Nur linux-2.4.32-rc1/include/linux/i2c-algo-au1550.h linux-2.4.32-rc1.mips
 +int i2c_au1550_del_bus(struct i2c_adapter *);
 +
 +#endif /* I2C_ALGO_AU1550_H */
-diff -Nur linux-2.4.32-rc1/include/linux/i2c-id.h linux-2.4.32-rc1.mips/include/linux/i2c-id.h
---- linux-2.4.32-rc1/include/linux/i2c-id.h    2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/i2c-id.h       2004-07-07 02:38:02.000000000 +0200
-@@ -156,6 +156,8 @@
- #define I2C_ALGO_SGI  0x130000        /* SGI algorithm                */
+Index: linux-2.4.35.4/include/linux/i2c-id.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/i2c-id.h 2007-12-15 05:19:44.618963729 +0100
++++ linux-2.4.35.4/include/linux/i2c-id.h      2007-12-15 05:19:45.062989031 +0100
+@@ -155,6 +155,8 @@
+ #define I2C_ALGO_SIBYTE 0x150000      /* Broadcom SiByte SOCs         */
+ #define I2C_ALGO_SGI  0x160000        /* SGI algorithm                */
  
 +#define I2C_ALGO_AU1550       0x140000        /* Alchemy Au1550 PSC           */
 +
  #define I2C_ALGO_EXP  0x800000        /* experimental                 */
  
  #define I2C_ALGO_MASK 0xff0000        /* Mask for algorithms          */
-@@ -204,6 +206,9 @@
+@@ -203,6 +205,9 @@
  #define I2C_HW_SGI_VINO       0x00
  #define I2C_HW_SGI_MACE       0x01
  
@@ -27662,9 +27907,10 @@ diff -Nur linux-2.4.32-rc1/include/linux/i2c-id.h linux-2.4.32-rc1.mips/include/
  /* --- SMBus only adapters                                            */
  #define I2C_HW_SMBUS_PIIX4    0x00
  #define I2C_HW_SMBUS_ALI15X3  0x01
-diff -Nur linux-2.4.32-rc1/include/linux/sched.h linux-2.4.32-rc1.mips/include/linux/sched.h
---- linux-2.4.32-rc1/include/linux/sched.h     2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/sched.h        2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/include/linux/sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/sched.h  2007-12-15 05:19:44.626964184 +0100
++++ linux-2.4.35.4/include/linux/sched.h       2007-12-15 05:19:45.066989260 +0100
 @@ -617,6 +617,10 @@
  extern int in_group_p(gid_t);
  extern int in_egroup_p(gid_t);
@@ -27676,9 +27922,10 @@ diff -Nur linux-2.4.32-rc1/include/linux/sched.h linux-2.4.32-rc1.mips/include/l
  extern void proc_caches_init(void);
  extern void flush_signals(struct task_struct *);
  extern void flush_signal_handlers(struct task_struct *);
-diff -Nur linux-2.4.32-rc1/include/linux/serial.h linux-2.4.32-rc1.mips/include/linux/serial.h
---- linux-2.4.32-rc1/include/linux/serial.h    2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/linux/serial.h       2004-07-31 02:17:57.000000000 +0200
+Index: linux-2.4.35.4/include/linux/serial.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/serial.h 2007-12-15 05:19:44.634964640 +0100
++++ linux-2.4.35.4/include/linux/serial.h      2007-12-15 05:19:45.066989260 +0100
 @@ -75,7 +75,8 @@
  #define PORT_16654    11
  #define PORT_16850    12
@@ -27689,9 +27936,10 @@ diff -Nur linux-2.4.32-rc1/include/linux/serial.h linux-2.4.32-rc1.mips/include/
  
  #define SERIAL_IO_PORT        0
  #define SERIAL_IO_HUB6        1
-diff -Nur linux-2.4.32-rc1/include/linux/swap.h linux-2.4.32-rc1.mips/include/linux/swap.h
---- linux-2.4.32-rc1/include/linux/swap.h      2005-01-19 15:10:12.000000000 +0100
-+++ linux-2.4.32-rc1.mips/include/linux/swap.h 2004-11-29 18:47:18.000000000 +0100
+Index: linux-2.4.35.4/include/linux/swap.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/swap.h   2007-12-15 05:19:44.642965095 +0100
++++ linux-2.4.35.4/include/linux/swap.h        2007-12-15 05:19:45.066989260 +0100
 @@ -1,6 +1,12 @@
  #ifndef _LINUX_SWAP_H
  #define _LINUX_SWAP_H
@@ -27723,9 +27971,10 @@ diff -Nur linux-2.4.32-rc1/include/linux/swap.h linux-2.4.32-rc1.mips/include/li
  /*
   * Max bad pages in the new format..
   */
-diff -Nur linux-2.4.32-rc1/include/video/newport.h linux-2.4.32-rc1.mips/include/video/newport.h
---- linux-2.4.32-rc1/include/video/newport.h   2001-04-12 21:20:31.000000000 +0200
-+++ linux-2.4.32-rc1.mips/include/video/newport.h      2004-09-23 15:32:29.000000000 +0200
+Index: linux-2.4.35.4/include/video/newport.h
+===================================================================
+--- linux-2.4.35.4.orig/include/video/newport.h        2007-12-15 05:19:44.650965550 +0100
++++ linux-2.4.35.4/include/video/newport.h     2007-12-15 05:19:45.066989260 +0100
 @@ -291,8 +291,6 @@
        unsigned int _unused2[0x1ef];
        struct newport_cregs cgo;
@@ -27793,9 +28042,10 @@ diff -Nur linux-2.4.32-rc1/include/video/newport.h linux-2.4.32-rc1.mips/include
        
          while ((rex->set.dcbdata0.bybytes.b3 & 3) != XM9_FIFO_EMPTY)
                ;
-diff -Nur linux-2.4.32-rc1/init/main.c linux-2.4.32-rc1.mips/init/main.c
---- linux-2.4.32-rc1/init/main.c       2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-rc1.mips/init/main.c  2004-11-19 01:28:52.000000000 +0100
+Index: linux-2.4.35.4/init/main.c
+===================================================================
+--- linux-2.4.35.4.orig/init/main.c    2007-12-15 05:19:44.662966235 +0100
++++ linux-2.4.35.4/init/main.c 2007-12-15 05:19:45.070989486 +0100
 @@ -296,7 +296,6 @@
  
  
@@ -27804,9 +28054,10 @@ diff -Nur linux-2.4.32-rc1/init/main.c linux-2.4.32-rc1.mips/init/main.c
  
  unsigned long wait_init_idle;
  
-diff -Nur linux-2.4.32-rc1/kernel/exit.c linux-2.4.32-rc1.mips/kernel/exit.c
---- linux-2.4.32-rc1/kernel/exit.c     2002-11-29 00:53:15.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/exit.c        2003-01-11 18:53:18.000000000 +0100
+Index: linux-2.4.35.4/kernel/exit.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/exit.c  2007-12-15 05:19:44.666966464 +0100
++++ linux-2.4.35.4/kernel/exit.c       2007-12-15 05:19:45.070989486 +0100
 @@ -26,7 +26,7 @@
  
  int getrusage(struct task_struct *, int, struct rusage *);
@@ -27816,9 +28067,10 @@ diff -Nur linux-2.4.32-rc1/kernel/exit.c linux-2.4.32-rc1.mips/kernel/exit.c
  {
        if (p != current) {
  #ifdef CONFIG_SMP
-diff -Nur linux-2.4.32-rc1/kernel/signal.c linux-2.4.32-rc1.mips/kernel/signal.c
---- linux-2.4.32-rc1/kernel/signal.c   2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/signal.c      2004-01-20 16:10:34.000000000 +0100
+Index: linux-2.4.35.4/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/signal.c        2007-12-15 05:19:44.674966919 +0100
++++ linux-2.4.35.4/kernel/signal.c     2007-12-15 05:19:45.070989486 +0100
 @@ -14,6 +14,7 @@
  #include <linux/init.h>
  #include <linux/sched.h>
@@ -27888,9 +28140,10 @@ diff -Nur linux-2.4.32-rc1/kernel/signal.c linux-2.4.32-rc1.mips/kernel/signal.c
  
        status = tsk->exit_code & 0x7f;
        why = SI_KERNEL;        /* shouldn't happen */
-diff -Nur linux-2.4.32-rc1/kernel/sys.c linux-2.4.32-rc1.mips/kernel/sys.c
---- linux-2.4.32-rc1/kernel/sys.c      2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-rc1.mips/kernel/sys.c 2003-11-17 02:07:47.000000000 +0100
+Index: linux-2.4.35.4/kernel/sys.c
+===================================================================
+--- linux-2.4.35.4.orig/kernel/sys.c   2007-12-15 05:19:44.682967375 +0100
++++ linux-2.4.35.4/kernel/sys.c        2007-12-15 05:19:45.074989715 +0100
 @@ -801,16 +801,23 @@
  
  asmlinkage long sys_times(struct tms * tbuf)
@@ -27918,9 +28171,10 @@ diff -Nur linux-2.4.32-rc1/kernel/sys.c linux-2.4.32-rc1.mips/kernel/sys.c
  }
  
  /*
-diff -Nur linux-2.4.32-rc1/lib/Makefile linux-2.4.32-rc1.mips/lib/Makefile
---- linux-2.4.32-rc1/lib/Makefile      2004-04-14 15:05:40.000000000 +0200
-+++ linux-2.4.32-rc1.mips/lib/Makefile 2004-04-16 05:14:21.000000000 +0200
+Index: linux-2.4.35.4/lib/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/lib/Makefile   2007-12-15 05:19:44.694968059 +0100
++++ linux-2.4.35.4/lib/Makefile        2007-12-15 05:19:45.074989715 +0100
 @@ -27,6 +27,7 @@
  subdir-$(CONFIG_ZLIB_INFLATE) += zlib_inflate
  subdir-$(CONFIG_ZLIB_DEFLATE) += zlib_deflate
@@ -27929,10 +28183,11 @@ diff -Nur linux-2.4.32-rc1/lib/Makefile linux-2.4.32-rc1.mips/lib/Makefile
  include $(TOPDIR)/drivers/net/Makefile.lib
  include $(TOPDIR)/drivers/usb/Makefile.lib
  include $(TOPDIR)/drivers/bluetooth/Makefile.lib
-diff -Nur linux-2.4.32-rc1/Makefile linux-2.4.32-rc1.mips/Makefile
---- linux-2.4.32-rc1/Makefile  2005-10-24 11:33:30.000000000 +0200
-+++ linux-2.4.32-rc1.mips/Makefile     2005-09-23 22:41:15.000000000 +0200
-@@ -462,10 +462,11 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile       2007-12-15 05:19:44.702968514 +0100
++++ linux-2.4.35.4/Makefile    2007-12-15 05:19:45.074989715 +0100
+@@ -469,10 +469,11 @@
        $(MAKE) -C Documentation/DocBook mrproper
  
  distclean: mrproper
@@ -27948,7 +28203,7 @@ diff -Nur linux-2.4.32-rc1/Makefile linux-2.4.32-rc1.mips/Makefile
  
  backup: mrproper
        cd .. && tar cf - linux/ | gzip -9 > backup.gz
-@@ -492,7 +493,7 @@
+@@ -499,7 +500,7 @@
        $(MAKE) -C Documentation/DocBook man
  
  sums:
index b2d9cf37074b3858d792833f2327ee6dd0937c61..e6751fd1d05268fd54a7077dd202d39c365b43af 100644 (file)
@@ -1,7 +1,8 @@
-diff --new-file -urp linux-2.4.32/fs/Config.in linux-2.4.32-squashfs3.0/fs/Config.in
---- linux-2.4.32/fs/Config.in  2004-11-17 11:54:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/fs/Config.in      2006-03-07 21:12:36.000000000 +0000
-@@ -51,6 +51,14 @@ if [ "$CONFIG_JFFS2_FS" = "y" -o "$CONFI
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in   2007-12-15 05:19:42.758857728 +0100
++++ linux-2.4.35.4/fs/Config.in        2007-12-15 05:19:48.635192599 +0100
+@@ -51,6 +51,14 @@
     int 'JFFS2 debugging verbosity (0 = quiet, 2 = noisy)' CONFIG_JFFS2_FS_DEBUG 0
  fi
  tristate 'Compressed ROM file system support' CONFIG_CRAMFS
@@ -16,10 +17,11 @@ diff --new-file -urp linux-2.4.32/fs/Config.in linux-2.4.32-squashfs3.0/fs/Confi
  bool 'Virtual memory file system support (former shm fs)' CONFIG_TMPFS
  define_bool CONFIG_RAMFS y
  
-diff --new-file -urp linux-2.4.32/fs/Makefile linux-2.4.32-squashfs3.0/fs/Makefile
---- linux-2.4.32/fs/Makefile   2004-02-18 13:36:31.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/fs/Makefile       2006-03-07 21:12:36.000000000 +0000
-@@ -65,6 +65,7 @@ subdir-$(CONFIG_REISERFS_FS) += reiserfs
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile    2007-12-15 05:19:42.766858183 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:19:48.639192828 +0100
+@@ -65,6 +65,7 @@
  subdir-$(CONFIG_DEVPTS_FS)    += devpts
  subdir-$(CONFIG_SUN_OPENPROMFS)       += openpromfs
  subdir-$(CONFIG_BEFS_FS)      += befs
@@ -27,9 +29,10 @@ diff --new-file -urp linux-2.4.32/fs/Makefile linux-2.4.32-squashfs3.0/fs/Makefi
  subdir-$(CONFIG_JFS_FS)               += jfs
  subdir-$(CONFIG_XFS_FS)               += xfs
  
-diff --new-file -urp linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-squashfs3.0/fs/squashfs/inode.c
---- linux-2.4.32/fs/squashfs/inode.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/inode.c       2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/inode.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/inode.c 2007-12-15 05:19:48.647193283 +0100
 @@ -0,0 +1,2028 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
@@ -2059,9 +2062,10 @@ diff --new-file -urp linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-squashfs3.0/f
 +MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
 +MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
 +MODULE_LICENSE("GPL");
-diff --new-file -urp linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-squashfs3.0/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/Makefile      2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/Makefile        2007-12-15 05:19:48.651193513 +0100
 @@ -0,0 +1,11 @@
 +#
 +# Makefile for the linux squashfs routines.
@@ -2074,9 +2078,10 @@ diff --new-file -urp linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-squashfs3.0/
 +obj-m := $(O_TARGET)
 +
 +include $(TOPDIR)/Rules.make
-diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs2_0.c linux-2.4.32-squashfs3.0/fs/squashfs/squashfs2_0.c
---- linux-2.4.32/fs/squashfs/squashfs2_0.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/squashfs2_0.c 2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/squashfs2_0.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/squashfs2_0.c   2007-12-15 05:19:48.655193739 +0100
 @@ -0,0 +1,751 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
@@ -2829,9 +2834,10 @@ diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs2_0.c linux-2.4.32-squashf
 +
 +      return 1;
 +}
-diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs.h linux-2.4.32-squashfs3.0/fs/squashfs/squashfs.h
---- linux-2.4.32/fs/squashfs/squashfs.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/fs/squashfs/squashfs.h    2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/fs/squashfs/squashfs.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/squashfs.h      2007-12-15 05:19:48.659193968 +0100
 @@ -0,0 +1,85 @@
 +/*
 + * Squashfs - a compressed read only filesystem for Linux
@@ -2918,10 +2924,11 @@ diff --new-file -urp linux-2.4.32/fs/squashfs/squashfs.h linux-2.4.32-squashfs3.
 +      return 0;
 +}
 +#endif
-diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/include/linux/fs.h
---- linux-2.4.32/include/linux/fs.h    2005-04-04 02:42:20.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/fs.h        2006-03-07 21:12:36.000000000 +0000
-@@ -324,6 +324,7 @@ extern void set_bh_page(struct buffer_he
+Index: linux-2.4.35.4/include/linux/fs.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/fs.h     2007-12-15 05:19:42.794859778 +0100
++++ linux-2.4.35.4/include/linux/fs.h  2007-12-15 05:19:48.663194197 +0100
+@@ -324,6 +324,7 @@
  #include <linux/usbdev_fs_i.h>
  #include <linux/jffs2_fs_i.h>
  #include <linux/cramfs_fs_sb.h>
@@ -2929,7 +2936,7 @@ diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/in
  
  /*
   * Attribute flags.  These should be or-ed together to figure out what
-@@ -519,6 +520,7 @@ struct inode {
+@@ -519,6 +520,7 @@
                struct socket                   socket_i;
                struct usbdev_inode_info        usbdev_i;
                struct jffs2_inode_info         jffs2_i;
@@ -2937,7 +2944,7 @@ diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/in
                void                            *generic_ip;
        } u;
  };
-@@ -734,6 +736,7 @@ struct nameidata {
+@@ -734,6 +736,7 @@
  #include <linux/usbdev_fs_sb.h>
  #include <linux/cramfs_fs_sb.h>
  #include <linux/jffs2_fs_sb.h>
@@ -2945,7 +2952,7 @@ diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/in
  
  extern struct list_head super_blocks;
  extern spinlock_t sb_lock;
-@@ -793,6 +796,7 @@ struct super_block {
+@@ -793,6 +796,7 @@
                struct usbdev_sb_info   usbdevfs_sb;
                struct jffs2_sb_info    jffs2_sb;
                struct cramfs_sb_info   cramfs_sb;
@@ -2953,9 +2960,10 @@ diff --new-file -urp linux-2.4.32/include/linux/fs.h linux-2.4.32-squashfs3.0/in
                void                    *generic_sbp;
        } u;
        /*
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs.h
---- linux-2.4.32/include/linux/squashfs_fs.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs.h       2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs.h 2007-12-15 05:19:48.663194197 +0100
 @@ -0,0 +1,915 @@
 +#ifndef SQUASHFS_FS
 +#define SQUASHFS_FS
@@ -3872,9 +3880,10 @@ diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs.h linux-2.4.32-squas
 +
 +#endif
 +#endif
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_i.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_i.h
---- linux-2.4.32/include/linux/squashfs_fs_i.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_i.h     2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs_i.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs_i.h       2007-12-15 05:19:48.663194197 +0100
 @@ -0,0 +1,44 @@
 +#ifndef SQUASHFS_FS_I
 +#define SQUASHFS_FS_I
@@ -3920,9 +3929,10 @@ diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_i.h linux-2.4.32-squ
 +      } u;
 +};
 +#endif
-diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_sb.h linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_sb.h
---- linux-2.4.32/include/linux/squashfs_fs_sb.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-squashfs3.0/include/linux/squashfs_fs_sb.h    2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/include/linux/squashfs_fs_sb.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/squashfs_fs_sb.h      2007-12-15 05:19:48.667194423 +0100
 @@ -0,0 +1,74 @@
 +#ifndef SQUASHFS_FS_SB
 +#define SQUASHFS_FS_SB
@@ -3998,9 +4008,10 @@ diff --new-file -urp linux-2.4.32/include/linux/squashfs_fs_sb.h linux-2.4.32-sq
 +      int                     (*read_fragment_index_table)(struct super_block *s);
 +};
 +#endif
-diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init/do_mounts.c
---- linux-2.4.32/init/do_mounts.c      2003-11-28 18:26:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/init/do_mounts.c  2006-03-07 21:12:36.000000000 +0000
+Index: linux-2.4.35.4/init/do_mounts.c
+===================================================================
+--- linux-2.4.35.4.orig/init/do_mounts.c       2007-12-15 05:19:42.822861373 +0100
++++ linux-2.4.35.4/init/do_mounts.c    2007-12-15 05:19:48.667194423 +0100
 @@ -15,6 +15,7 @@
  #include <linux/minix_fs.h>
  #include <linux/ext2_fs.h>
@@ -4009,7 +4020,7 @@ diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init
  #include <linux/cramfs_fs.h>
  
  #define BUILD_CRAMDISK
-@@ -476,6 +477,7 @@ static int __init crd_load(int in_fd, in
+@@ -476,6 +477,7 @@
   *    minix
   *    ext2
   *    romfs
@@ -4017,7 +4028,7 @@ diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init
   *    cramfs
   *    gzip
   */
-@@ -486,6 +488,7 @@ identify_ramdisk_image(int fd, int start
+@@ -486,6 +488,7 @@
        struct minix_super_block *minixsb;
        struct ext2_super_block *ext2sb;
        struct romfs_super_block *romfsb;
@@ -4025,7 +4036,7 @@ diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init
        struct cramfs_super *cramfsb;
        int nblocks = -1;
        unsigned char *buf;
-@@ -497,6 +500,7 @@ identify_ramdisk_image(int fd, int start
+@@ -497,6 +500,7 @@
        minixsb = (struct minix_super_block *) buf;
        ext2sb = (struct ext2_super_block *) buf;
        romfsb = (struct romfs_super_block *) buf;
@@ -4033,7 +4044,7 @@ diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init
        cramfsb = (struct cramfs_super *) buf;
        memset(buf, 0xe5, size);
  
-@@ -535,6 +539,15 @@ identify_ramdisk_image(int fd, int start
+@@ -535,6 +539,15 @@
                goto done;
        }
  
@@ -4049,10 +4060,11 @@ diff --new-file -urp linux-2.4.32/init/do_mounts.c linux-2.4.32-squashfs3.0/init
        /*
         * Read block 1 to test for minix and ext2 superblock
         */
-diff --new-file -urp linux-2.4.32/lib/Config.in linux-2.4.32-squashfs3.0/lib/Config.in
---- linux-2.4.32/lib/Config.in 2003-11-28 18:26:21.000000000 +0000
-+++ linux-2.4.32-squashfs3.0/lib/Config.in     2006-03-07 21:12:36.000000000 +0000
-@@ -10,6 +10,7 @@ tristate 'CRC32 functions' CONFIG_CRC32
+Index: linux-2.4.35.4/lib/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/lib/Config.in  2007-12-15 05:19:42.830861829 +0100
++++ linux-2.4.35.4/lib/Config.in       2007-12-15 05:19:48.667194423 +0100
+@@ -10,6 +10,7 @@
  # Do we need the compression support?
  #
  if [ "$CONFIG_CRAMFS" = "y" -o \
@@ -4060,7 +4072,7 @@ diff --new-file -urp linux-2.4.32/lib/Config.in linux-2.4.32-squashfs3.0/lib/Con
       "$CONFIG_PPP_DEFLATE" = "y" -o \
       "$CONFIG_CRYPTO_DEFLATE" = "y" -o \
       "$CONFIG_JFFS2_FS" = "y" -o \
-@@ -17,6 +18,7 @@ if [ "$CONFIG_CRAMFS" = "y" -o \
+@@ -17,6 +18,7 @@
     define_tristate CONFIG_ZLIB_INFLATE y
  else
    if [ "$CONFIG_CRAMFS" = "m" -o \
index d534154871fe6e34d56f642d4ecf0da9c7bc8299..82bb91aaef6175aed29dbc9185c9fd9c4c8f993f 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-owrt/fs/squashfs/inode.c
---- linux-2.4.32/fs/squashfs/inode.c   2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/inode.c      2006-03-21 13:12:07.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/inode.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/inode.c    2007-12-15 05:19:48.647193283 +0100
++++ linux-2.4.35.4/fs/squashfs/inode.c 2007-12-15 05:19:49.015214255 +0100
 @@ -4,6 +4,9 @@
   * Copyright (c) 2002, 2003, 2004, 2005, 2006
   * Phillip Lougher <phillip@lougher.org.uk>
@@ -98,9 +99,10 @@ diff -Nur linux-2.4.32/fs/squashfs/inode.c linux-2.4.32-owrt/fs/squashfs/inode.c
        unregister_filesystem(&squashfs_fs_type);
  }
  
-diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.c linux-2.4.32-owrt/fs/squashfs/LzmaDecode.c
---- linux-2.4.32/fs/squashfs/LzmaDecode.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/LzmaDecode.c 2006-03-21 13:06:33.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/LzmaDecode.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/LzmaDecode.c    2007-12-15 05:19:49.019214484 +0100
 @@ -0,0 +1,663 @@
 +/*
 +  LzmaDecode.c
@@ -765,9 +767,10 @@ diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.c linux-2.4.32-owrt/fs/squashfs/Lz
 +  *outSizeProcessed = nowPos;
 +  return LZMA_RESULT_OK;
 +}
-diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.h linux-2.4.32-owrt/fs/squashfs/LzmaDecode.h
---- linux-2.4.32/fs/squashfs/LzmaDecode.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/LzmaDecode.h 2006-03-21 13:06:33.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/LzmaDecode.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/squashfs/LzmaDecode.h    2007-12-15 05:19:49.027214939 +0100
 @@ -0,0 +1,100 @@
 +/* 
 +  LzmaDecode.h
@@ -869,9 +872,10 @@ diff -Nur linux-2.4.32/fs/squashfs/LzmaDecode.h linux-2.4.32-owrt/fs/squashfs/Lz
 +    UInt32 *outSizeProcessed);
 +
 +#endif
-diff -Nur linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-owrt/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile  2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/Makefile     2006-03-21 13:12:39.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/Makefile   2007-12-15 05:19:48.651193513 +0100
++++ linux-2.4.35.4/fs/squashfs/Makefile        2007-12-15 05:19:49.031215169 +0100
 @@ -4,7 +4,7 @@
  
  O_TARGET := squashfs.o
index 56c5b3cbc06855886320965e111835a57866f98d..bb2d03c7b8bf3fe35d7ac61ee7d0c6da8cc1324a 100644 (file)
@@ -1,7 +1,8 @@
-diff -Nur linux-mips-cvs/Documentation/Configure.help linux-mips/Documentation/Configure.help
---- linux-mips-cvs/Documentation/Configure.help        2005-01-20 03:19:21.000000000 +0100
-+++ linux-mips/Documentation/Configure.help    2005-02-07 05:08:35.000000000 +0100
-@@ -17528,6 +17528,32 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:42.546845646 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:19:49.287229757 +0100
+@@ -17580,6 +17580,32 @@
    If reporting bugs, please try to have available a full dump of the
    messages at debug level 1 while the misbehaviour was occurring.
  
@@ -34,9 +35,10 @@ diff -Nur linux-mips-cvs/Documentation/Configure.help linux-mips/Documentation/C
  JFFS stats available in /proc filesystem
  CONFIG_JFFS_PROC_FS
    Enabling this option will cause statistics from mounted JFFS file systems
-diff -Nur linux-mips-cvs/fs/Config.in linux-mips/fs/Config.in
---- linux-mips-cvs/fs/Config.in        2004-11-19 01:28:47.000000000 +0100
-+++ linux-mips/fs/Config.in    2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in   2007-12-15 05:19:48.635192599 +0100
++++ linux-2.4.35.4/fs/Config.in        2007-12-15 05:19:49.287229757 +0100
 @@ -50,6 +50,12 @@
  if [ "$CONFIG_JFFS2_FS" = "y" -o "$CONFIG_JFFS2_FS" = "m" ] ; then
     int 'JFFS2 debugging verbosity (0 = quiet, 2 = noisy)' CONFIG_JFFS2_FS_DEBUG 0
@@ -48,20 +50,22 @@ diff -Nur linux-mips-cvs/fs/Config.in linux-mips/fs/Config.in
 +dep_mbool '  LZSS compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZSS $CONFIG_JFFS2_FS
 +
  tristate 'Compressed ROM file system support' CONFIG_CRAMFS
- bool 'Virtual memory file system support (former shm fs)' CONFIG_TMPFS
- define_bool CONFIG_RAMFS y
-diff -Nur linux-mips-cvs/fs/jffs2/Config.in.bbc.inc linux-mips/fs/jffs2/Config.in.bbc.inc
---- linux-mips-cvs/fs/jffs2/Config.in.bbc.inc  1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Config.in.bbc.inc      2005-02-07 05:08:34.000000000 +0100
+ tristate 'Squashed file system support' CONFIG_SQUASHFS
+ if [ "$CONFIG_SQUASHFS" = "y" -o "$CONFIG_SQUASHFS" = "m" ] ; then
+Index: linux-2.4.35.4/fs/jffs2/Config.in.bbc.inc
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Config.in.bbc.inc  2007-12-15 05:19:49.295230212 +0100
 @@ -0,0 +1,5 @@
 +dep_mbool '  ARMLIB compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_ARMLIB $CONFIG_JFFS2_FS
 +dep_mbool '  LZO1X-* compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZO $CONFIG_JFFS2_FS
 +dep_mbool '  LZARI compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZARI $CONFIG_JFFS2_FS
 +dep_mbool '  LZHD compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZHD $CONFIG_JFFS2_FS
 +dep_mbool '  LZSS compression support for BBC (EXPERIMENTAL)' CONFIG_JFFS2_BBC_LZSS $CONFIG_JFFS2_FS
-diff -Nur linux-mips-cvs/fs/jffs2/Configure.help.bbc.inc linux-mips/fs/jffs2/Configure.help.bbc.inc
---- linux-mips-cvs/fs/jffs2/Configure.help.bbc.inc     1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Configure.help.bbc.inc 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Configure.help.bbc.inc
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Configure.help.bbc.inc     2007-12-15 05:19:49.299230441 +0100
 @@ -0,0 +1,25 @@
 +ARMLIB compression support for BBC (EXPERIMENTAL)
 +CONFIG_JFFS2_BBC_ARMLIB
@@ -88,9 +92,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/Configure.help.bbc.inc linux-mips/fs/jffs2/Con
 +  This enables simple LempelZiv-Storer-Szymanski compression for BBC
 +  (faster than LZHD, and, and has a not-so-good compression ratio,
 +  was included just for testing)
-diff -Nur linux-mips-cvs/fs/jffs2/Kconfig.bbc.inc linux-mips/fs/jffs2/Kconfig.bbc.inc
---- linux-mips-cvs/fs/jffs2/Kconfig.bbc.inc    1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Kconfig.bbc.inc        2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Kconfig.bbc.inc
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Kconfig.bbc.inc    2007-12-15 05:19:49.303230670 +0100
 @@ -0,0 +1,40 @@
 +config JFFS2_BBC_ARMLIB
 +      bool "ARMLIB compression support for BBC (EXPERIMENTAL)"
@@ -132,9 +137,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/Kconfig.bbc.inc linux-mips/fs/jffs2/Kconfig.bb
 +        This enables simple LempelZiv-Storer-Szymanski compression for BBC
 +        (faster than LZHD, and, and has a not-so-good compression ratio,
 +        was included just for testing)
-diff -Nur linux-mips-cvs/fs/jffs2/Makefile linux-mips/fs/jffs2/Makefile
---- linux-mips-cvs/fs/jffs2/Makefile   2003-08-13 19:19:25.000000000 +0200
-+++ linux-mips/fs/jffs2/Makefile       2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/Makefile      2007-12-15 05:19:42.578847470 +0100
++++ linux-2.4.35.4/fs/jffs2/Makefile   2007-12-15 05:19:49.307230896 +0100
 @@ -10,9 +10,23 @@
  # Note 2! The CFLAGS definitions are now in the main makefile...
  
@@ -159,9 +165,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/Makefile linux-mips/fs/jffs2/Makefile
        read.o nodemgmt.o readinode.o super.o write.o scan.o gc.o \
        symlink.o build.o erase.o background.o
  
-diff -Nur linux-mips-cvs/fs/jffs2/Makefile.bbc.inc linux-mips/fs/jffs2/Makefile.bbc.inc
---- linux-mips-cvs/fs/jffs2/Makefile.bbc.inc   1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/Makefile.bbc.inc       2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/Makefile.bbc.inc
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/Makefile.bbc.inc   2007-12-15 05:19:49.307230896 +0100
 @@ -0,0 +1,12 @@
 +JFFS2_BBC_KERNEL_OBJS-y = jffs2_bbc_framework.o jffs2_bbc_fs.o
 +
@@ -175,9 +182,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/Makefile.bbc.inc linux-mips/fs/jffs2/Makefile.
 +
 +JFFS2_BBC_MKFS_OBJS   = jffs2_bbc_mkfs.o jffs2_bbc_framework.o jffs2_bbc_armlib_comp.o jffs2_bbc_lzo_comp.o\
 +                        jffs2_bbc_lzss_comp.o jffs2_bbc_lzari_comp.o jffs2_bbc_lzhd_comp.o
-diff -Nur linux-mips-cvs/fs/jffs2/compr_zlib.c linux-mips/fs/jffs2/compr_zlib.c
---- linux-mips-cvs/fs/jffs2/compr_zlib.c       2003-01-11 18:53:17.000000000 +0100
-+++ linux-mips/fs/jffs2/compr_zlib.c   2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/compr_zlib.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/compr_zlib.c  2007-12-15 05:19:42.590848151 +0100
++++ linux-2.4.35.4/fs/jffs2/compr_zlib.c       2007-12-15 05:19:49.307230896 +0100
 @@ -85,7 +85,7 @@
        vfree(inflate_workspace);
  }
@@ -216,9 +224,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/compr_zlib.c linux-mips/fs/jffs2/compr_zlib.c
 +              jffs2_zlib_decompress(data_in,cpage_out,srclen,destlen);
 +}
 +
-diff -Nur linux-mips-cvs/fs/jffs2/file.c linux-mips/fs/jffs2/file.c
---- linux-mips-cvs/fs/jffs2/file.c     2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/file.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/file.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/file.c        2007-12-15 05:19:42.594848380 +0100
++++ linux-2.4.35.4/fs/jffs2/file.c     2007-12-15 05:19:49.307230896 +0100
 @@ -35,6 +35,7 @@
   *
   */
@@ -235,9 +244,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/file.c linux-mips/fs/jffs2/file.c
                        comprtype = jffs2_compress(page_address(pg)+ (file_ofs & (PAGE_CACHE_SIZE-1)), comprbuf, &datalen, &cdatalen);
                }
                if (comprtype == JFFS2_COMPR_NONE) {
-diff -Nur linux-mips-cvs/fs/jffs2/gc.c linux-mips/fs/jffs2/gc.c
---- linux-mips-cvs/fs/jffs2/gc.c       2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/gc.c   2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/gc.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/gc.c  2007-12-15 05:19:42.602848836 +0100
++++ linux-2.4.35.4/fs/jffs2/gc.c       2007-12-15 05:19:49.311231126 +0100
 @@ -35,6 +35,7 @@
   *
   */
@@ -254,9 +264,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/gc.c linux-mips/fs/jffs2/gc.c
                        comprtype = jffs2_compress(writebuf, comprbuf, &datalen, &cdatalen);
                }
                if (comprtype) {
-diff -Nur linux-mips-cvs/fs/jffs2/hpatch linux-mips/fs/jffs2/hpatch
---- linux-mips-cvs/fs/jffs2/hpatch     1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/hpatch 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/hpatch
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/hpatch     2007-12-15 05:19:49.311231126 +0100
 @@ -0,0 +1,191 @@
 +#!/usr/bin/perl
 +# A patch-like utility
@@ -449,9 +460,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/hpatch linux-mips/fs/jffs2/hpatch
 +}
 +file_end();
 +close(CMD);
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_armlib_comp.c linux-mips/fs/jffs2/jffs2_bbc_armlib_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_armlib_comp.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_armlib_comp.c        2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_armlib_comp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_armlib_comp.c    2007-12-15 05:19:49.311231126 +0100
 @@ -0,0 +1,2224 @@
 +/*
 + * JFFS2-BBC: armlib compressor plugin
@@ -2677,9 +2689,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_armlib_comp.c linux-mips/fs/jffs2/jf
 +}
 +
 +/*END OF ARMLIB*/
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.c linux-mips/fs/jffs2/jffs2_bbc_framework.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_framework.c  2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.c      2007-12-15 05:19:49.315231352 +0100
 @@ -0,0 +1,1324 @@
 +/* 
 + * JFFS2-BBC: Compression Framework
@@ -4005,9 +4018,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.c linux-mips/fs/jffs2/jffs
 +}
 +
 +#endif
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.h linux-mips/fs/jffs2/jffs2_bbc_framework.h
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_framework.h  2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_framework.h      2007-12-15 05:19:49.315231352 +0100
 @@ -0,0 +1,202 @@
 +/*
 + * JFFS2-BBC: Compression Framework - headers
@@ -4211,9 +4225,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_framework.h linux-mips/fs/jffs2/jffs
 +int jffs2_bbc_get_memory_counter(void);
 +
 +#endif
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.c linux-mips/fs/jffs2/jffs2_bbc_fs.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_fs.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.c     2007-12-15 05:19:49.315231352 +0100
 @@ -0,0 +1,331 @@
 +/*
 + * JFFS2-BBC: File System Extension for Linux Kernel
@@ -4546,9 +4561,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.c linux-mips/fs/jffs2/jffs2_bbc_f
 +      jffs2_bbc_compressor_deinit();
 +      remove_proc_entry("jffs2_bbc", NULL);
 +}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.h linux-mips/fs/jffs2/jffs2_bbc_fs.h
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_fs.h 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_fs.h     2007-12-15 05:19:49.315231352 +0100
 @@ -0,0 +1,30 @@
 +/*
 + * JFFS2 BBC: File System Extension for Linux Kernel - headers
@@ -4580,9 +4596,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_fs.h linux-mips/fs/jffs2/jffs2_bbc_f
 +
 +void jffs2_bbc_proc_init(void);
 +void jffs2_bbc_proc_deinit(void);
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzari_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzari_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzari_comp.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzari_comp.c 2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzari_comp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzari_comp.c     2007-12-15 05:19:49.319231581 +0100
 @@ -0,0 +1,788 @@
 +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 +
@@ -5372,9 +5389,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzari_comp.c linux-mips/fs/jffs2/jff
 +{
 +      jffs2_bbc_unregister_compressor (&jffs2_bbc_lzari);
 +}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzhd_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzhd_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzhd_comp.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzhd_comp.c  2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzhd_comp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzhd_comp.c      2007-12-15 05:19:49.319231581 +0100
 @@ -0,0 +1,747 @@
 +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 +
@@ -6123,9 +6141,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzhd_comp.c linux-mips/fs/jffs2/jffs
 +{
 +      jffs2_bbc_unregister_compressor (&jffs2_bbc_lzhd);
 +}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzo_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzo_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzo_comp.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzo_comp.c   2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzo_comp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzo_comp.c       2007-12-15 05:19:49.323231810 +0100
 @@ -0,0 +1,2435 @@
 +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 +
@@ -8562,9 +8581,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzo_comp.c linux-mips/fs/jffs2/jffs2
 +{
 +      jffs2_bbc_unregister_compressor (&jffs2_bbc_lzo);
 +}
-diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzss_comp.c linux-mips/fs/jffs2/jffs2_bbc_lzss_comp.c
---- linux-mips-cvs/fs/jffs2/jffs2_bbc_lzss_comp.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/jffs2_bbc_lzss_comp.c  2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzss_comp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/jffs2_bbc_lzss_comp.c      2007-12-15 05:19:49.323231810 +0100
 @@ -0,0 +1,385 @@
 +/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */
 +
@@ -8951,9 +8971,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/jffs2_bbc_lzss_comp.c linux-mips/fs/jffs2/jffs
 +{
 +      jffs2_bbc_unregister_compressor (&jffs2_bbc_lzss);
 +}
-diff -Nur linux-mips-cvs/fs/jffs2/linux-2.4.25.hpatch linux-mips/fs/jffs2/linux-2.4.25.hpatch
---- linux-mips-cvs/fs/jffs2/linux-2.4.25.hpatch        1970-01-01 01:00:00.000000000 +0100
-+++ linux-mips/fs/jffs2/linux-2.4.25.hpatch    2005-02-07 05:08:34.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/linux-2.4.25.hpatch
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/jffs2/linux-2.4.25.hpatch        2007-12-15 05:19:49.323231810 +0100
 @@ -0,0 +1,97 @@
 +FMakefile
 +=BBC insertion
@@ -9052,9 +9073,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/linux-2.4.25.hpatch linux-mips/fs/jffs2/linux-
 +?{
 ++     jffs2_bbc_proc_deinit(); /**BBC**/
 ++
-diff -Nur linux-mips-cvs/fs/jffs2/read.c linux-mips/fs/jffs2/read.c
---- linux-mips-cvs/fs/jffs2/read.c     2003-11-17 02:07:44.000000000 +0100
-+++ linux-mips/fs/jffs2/read.c 2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/read.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/read.c        2007-12-15 05:19:42.666852484 +0100
++++ linux-2.4.35.4/fs/jffs2/read.c     2007-12-15 05:19:49.323231810 +0100
 @@ -35,6 +35,7 @@
   *
   */
@@ -9071,9 +9093,10 @@ diff -Nur linux-mips-cvs/fs/jffs2/read.c linux-mips/fs/jffs2/read.c
                ret = jffs2_decompress(ri->compr, readbuf, decomprbuf, ri->csize, ri->dsize);
                if (ret) {
                        printk(KERN_WARNING "Error: jffs2_decompress returned %d\n", ret);
-diff -Nur linux-mips-cvs/fs/jffs2/super.c linux-mips/fs/jffs2/super.c
---- linux-mips-cvs/fs/jffs2/super.c    2003-01-11 18:53:17.000000000 +0100
-+++ linux-mips/fs/jffs2/super.c        2005-02-07 05:08:35.000000000 +0100
+Index: linux-2.4.35.4/fs/jffs2/super.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/super.c       2007-12-15 05:19:42.678853169 +0100
++++ linux-2.4.35.4/fs/jffs2/super.c    2007-12-15 05:19:49.323231810 +0100
 @@ -35,6 +35,7 @@
   *
   */
index a7b1d040645d16ee7c3344043d00f8a1823592ec..c48906dafdbfa8d1a8c7b829254de4a2dfd95e4c 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/include/asm-mips/param.h 2005-01-19 15:10:12.000000000 +0100
-+++ linux.dev/include/asm-mips/param.h 2005-05-30 02:42:06.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/param.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/param.h       2007-12-15 05:19:42.518844050 +0100
++++ linux-2.4.35.4/include/asm-mips/param.h    2007-12-15 05:19:49.823260305 +0100
 @@ -55,7 +55,7 @@
  #endif /* defined(__KERNEL__)  */
  #endif /* defined(HZ)  */
index 9115b9f611bc6faa94d4f38748346e18f2d3b930..6e4b5c820f0f38bd5820c4dc500634d7e799d749 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.30/drivers/mtd/chips/Config.in linux-2.4.30.openwrt/drivers/mtd/chips/Config.in
---- linux-2.4.30/drivers/mtd/chips/Config.in   2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/Config.in   2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/Config.in    2007-12-15 05:19:42.454840402 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/Config.in 2007-12-15 05:19:50.035272385 +0100
 @@ -45,6 +45,7 @@
  dep_tristate '  Support for Intel/Sharp flash chips' CONFIG_MTD_CFI_INTELEXT $CONFIG_MTD_GEN_PROBE
  dep_tristate '  Support for AMD/Fujitsu flash chips' CONFIG_MTD_CFI_AMDSTD $CONFIG_MTD_GEN_PROBE
@@ -9,9 +10,10 @@ diff -Nur linux-2.4.30/drivers/mtd/chips/Config.in linux-2.4.30.openwrt/drivers/
  
  dep_tristate '  Support for RAM chips in bus mapping' CONFIG_MTD_RAM $CONFIG_MTD
  dep_tristate '  Support for ROM chips in bus mapping' CONFIG_MTD_ROM $CONFIG_MTD
-diff -Nur linux-2.4.30/drivers/mtd/chips/Makefile linux-2.4.30.openwrt/drivers/mtd/chips/Makefile
---- linux-2.4.30/drivers/mtd/chips/Makefile    2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/Makefile    2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/Makefile     2007-12-15 05:19:42.462840857 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/Makefile  2007-12-15 05:19:50.039272613 +0100
 @@ -18,6 +18,7 @@
  obj-$(CONFIG_MTD_AMDSTD)      += amd_flash.o 
  obj-$(CONFIG_MTD_CFI)         += cfi_probe.o
@@ -20,9 +22,10 @@ diff -Nur linux-2.4.30/drivers/mtd/chips/Makefile linux-2.4.30.openwrt/drivers/m
  obj-$(CONFIG_MTD_CFI_AMDSTD)  += cfi_cmdset_0002.o
  obj-$(CONFIG_MTD_CFI_INTELEXT)        += cfi_cmdset_0001.o
  obj-$(CONFIG_MTD_GEN_PROBE)   += gen_probe.o
-diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_cmdset_0701.c linux-2.4.30.openwrt/drivers/mtd/chips/cfi_cmdset_0701.c
---- linux-2.4.30/drivers/mtd/chips/cfi_cmdset_0701.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/cfi_cmdset_0701.c   2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0701.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0701.c 2007-12-15 05:19:50.047273069 +0100
 @@ -0,0 +1,855 @@
 +/*
 + * Common Flash Interface support:
@@ -879,9 +882,10 @@ diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_cmdset_0701.c linux-2.4.30.openwrt/
 +module_init(cfi_sststd_init);
 +module_exit(cfi_sststd_exit);
 +
-diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_probe.c linux-2.4.30.openwrt/drivers/mtd/chips/cfi_probe.c
---- linux-2.4.30/drivers/mtd/chips/cfi_probe.c 2003-06-13 16:51:34.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/cfi_probe.c 2005-06-28 11:26:26.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_probe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/cfi_probe.c  2007-12-15 05:19:42.474841541 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_probe.c       2007-12-15 05:19:50.051273298 +0100
 @@ -67,8 +67,15 @@
        cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL);
        cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type, NULL);
@@ -900,9 +904,10 @@ diff -Nur linux-2.4.30/drivers/mtd/chips/cfi_probe.c linux-2.4.30.openwrt/driver
  
        if (!cfi->numchips) {
                /* This is the first time we're called. Set up the CFI 
-diff -Nur linux-2.4.30/drivers/mtd/chips/gen_probe.c linux-2.4.30.openwrt/drivers/mtd/chips/gen_probe.c
---- linux-2.4.30/drivers/mtd/chips/gen_probe.c 2003-08-25 13:44:42.000000000 +0200
-+++ linux-2.4.30.openwrt/drivers/mtd/chips/gen_probe.c 2005-06-28 11:29:23.000000000 +0200
+Index: linux-2.4.35.4/drivers/mtd/chips/gen_probe.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/gen_probe.c  2007-12-15 05:19:42.482841997 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/gen_probe.c       2007-12-15 05:19:50.055273524 +0100
 @@ -328,13 +328,18 @@
                return cfi_cmdset_0001(map, primary);
  #endif
index b2397f62497861be1b2426390cb3679cd0062bc1..6663202a1fe575258e52d6f19406f21557c61278 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/drivers/mtd/chips/cfi_cmdset_0001.c linux.dev/drivers/mtd/chips/cfi_cmdset_0001.c
---- linux.old/drivers/mtd/chips/cfi_cmdset_0001.c      2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/mtd/chips/cfi_cmdset_0001.c      2006-03-16 17:25:04.000000000 +0100
+Index: linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0001.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/chips/cfi_cmdset_0001.c    2007-12-15 05:19:42.414838122 +0100
++++ linux-2.4.35.4/drivers/mtd/chips/cfi_cmdset_0001.c 2007-12-15 05:19:50.315288342 +0100
 @@ -28,10 +28,18 @@
  #include <linux/slab.h>
  #include <linux/delay.h>
@@ -38,7 +39,7 @@ diff -urN linux.old/drivers/mtd/chips/cfi_cmdset_0001.c linux.dev/drivers/mtd/ch
        return mtd;
  
   setup_err:
-@@ -1960,10 +1972,40 @@
+@@ -1961,10 +1973,40 @@
        }
  }
  
@@ -79,9 +80,10 @@ diff -urN linux.old/drivers/mtd/chips/cfi_cmdset_0001.c linux.dev/drivers/mtd/ch
        kfree(cfi->cmdset_priv);
        kfree(cfi->cfiq);
        kfree(cfi);
-diff -urN linux.old/include/linux/mtd/mtd.h linux.dev/include/linux/mtd/mtd.h
---- linux.old/include/linux/mtd/mtd.h  2003-08-25 13:44:44.000000000 +0200
-+++ linux.dev/include/linux/mtd/mtd.h  2006-03-16 17:00:10.000000000 +0100
+Index: linux-2.4.35.4/include/linux/mtd/mtd.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/mtd/mtd.h        2007-12-15 05:19:42.422838578 +0100
++++ linux-2.4.35.4/include/linux/mtd/mtd.h     2007-12-15 05:19:50.315288342 +0100
 @@ -10,6 +10,7 @@
  #include <linux/version.h>
  #include <linux/types.h>
index 2ddfca9bd29dd3718518e9b6a31289b7425e592a..0d02d8557caab7b082b683b90620825a3f06b144 100644 (file)
@@ -1,6 +1,15 @@
---- linux.old/drivers/mtd/mtdchar.c    2006-11-23 18:48:56.000000000 +0100
-+++ linux.dev/drivers/mtd/mtdchar.c    2006-11-23 18:49:11.000000000 +0100
-@@ -564,7 +564,7 @@
+Index: linux-2.4.35.4/drivers/mtd/mtdchar.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/mtdchar.c  2007-12-15 05:19:42.370835614 +0100
++++ linux-2.4.35.4/drivers/mtd/mtdchar.c       2007-12-15 05:19:50.539301109 +0100
+@@ -558,13 +558,13 @@
+       sprintf(name, "%d", mtd->index);
+       devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
+                       DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2,
+-                      S_IFCHR | S_IRUGO | S_IWUGO,
++                      S_IFCHR | S_IRUSR | S_IWUSR,
+                       &mtd_fops, NULL);
        sprintf(name, "%dro", mtd->index);
        devfs_ro_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
                        DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2+1,
@@ -9,8 +18,10 @@
                        &mtd_fops, NULL);
  }
  
---- linux-2.4.30/drivers/mtd/mtdblock.c.orig   2006-03-26 06:38:36 -05:00
-+++ linux-2.4.30/drivers/mtd/mtdblock.c        2006-03-26 06:38:54 -05:00
+Index: linux-2.4.35.4/drivers/mtd/mtdblock.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/mtd/mtdblock.c 2007-12-15 05:19:42.378836072 +0100
++++ linux-2.4.35.4/drivers/mtd/mtdblock.c      2007-12-15 05:19:50.539301109 +0100
 @@ -601,7 +601,7 @@
          sprintf(name, "%d", mtd->index);
          devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
                          &mtd_fops, NULL);
  }
  
---- linux-2.4.30/drivers/mtd/mtdchar.c.orig    2006-03-26 06:42:23 -05:00
-+++ linux-2.4.30/drivers/mtd/mtdchar.c 2006-03-26 06:42:41 -05:00
-@@ -558,7 +558,7 @@
-       sprintf(name, "%d", mtd->index);
-       devfs_rw_handle[mtd->index] = devfs_register(devfs_dir_handle, name,
-                       DEVFS_FL_DEFAULT, MTD_CHAR_MAJOR, mtd->index*2,
--                      S_IFCHR | S_IRUGO | S_IWUGO,
-+                      S_IFCHR | S_IRUSR | S_IWUSR,
-                       &mtd_fops, NULL);
-       sprintf(name, "%dro", mtd->index);
index 8647652018ddec8aaa1d2f9756ebd0ad1342db05..5998e89a55d45fae63820c60fdbddab1a05eb89b 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-owrt/fs/squashfs/Makefile
---- linux-2.4.32/fs/squashfs/Makefile  2006-03-21 13:47:50.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/Makefile     2006-03-21 13:48:49.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/Makefile   2007-12-15 05:19:49.031215169 +0100
++++ linux-2.4.35.4/fs/squashfs/Makefile        2007-12-15 05:19:50.759313646 +0100
 @@ -4,7 +4,7 @@
  
  O_TARGET := squashfs.o
@@ -10,9 +11,10 @@ diff -Nur linux-2.4.32/fs/squashfs/Makefile linux-2.4.32-owrt/fs/squashfs/Makefi
  
  obj-m := $(O_TARGET)
  
-diff -Nur linux-2.4.32/fs/squashfs/squashfs.h linux-2.4.32-owrt/fs/squashfs/squashfs.h
---- linux-2.4.32/fs/squashfs/squashfs.h        2006-03-21 13:06:10.000000000 +0100
-+++ linux-2.4.32-owrt/fs/squashfs/squashfs.h   2006-03-21 13:48:36.000000000 +0100
+Index: linux-2.4.35.4/fs/squashfs/squashfs.h
+===================================================================
+--- linux-2.4.35.4.orig/fs/squashfs/squashfs.h 2007-12-15 05:19:48.659193968 +0100
++++ linux-2.4.35.4/fs/squashfs/squashfs.h      2007-12-15 05:19:50.767314102 +0100
 @@ -24,6 +24,9 @@
  #ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
  #undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
index 14a207df2356782b7e092c2715e55509b9f2c911..5eab6334e08b157b2a40dd06c563b06fe2eed34b 100644 (file)
@@ -1,6 +1,7 @@
-diff -ur linux-2.4.32/arch/mips/Makefile linux-2.4.32-openwrt/arch/mips/Makefile
---- linux-2.4.32/arch/mips/Makefile    2005-12-15 13:53:59.000000000 +0100
-+++ linux-2.4.32-openwrt/arch/mips/Makefile    2005-12-15 14:02:33.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile     2007-12-15 05:19:44.870978088 +0100
++++ linux-2.4.35.4/arch/mips/Makefile  2007-12-15 05:19:50.987326639 +0100
 @@ -44,10 +44,10 @@
  GCCFLAGS      := -I $(TOPDIR)/include/asm/gcc
  GCCFLAGS      += -G 0 -mno-abicalls -fno-pic -pipe
@@ -48,9 +49,10 @@ diff -ur linux-2.4.32/arch/mips/Makefile linux-2.4.32-openwrt/arch/mips/Makefile
  CFLAGS                += $(GCCFLAGS)
  
  LD            += -m $(ld-emul)
-diff -ur linux-2.4.32/Makefile linux-2.4.32-openwrt/Makefile
---- linux-2.4.32/Makefile      2005-12-15 13:53:59.000000000 +0100
-+++ linux-2.4.32-openwrt/Makefile      2005-12-15 13:59:30.000000000 +0100
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile       2007-12-15 05:19:45.074989715 +0100
++++ linux-2.4.35.4/Makefile    2007-12-15 05:19:50.995327098 +0100
 @@ -17,7 +17,7 @@
  FINDHPATH     = $(HPATH)/asm $(HPATH)/linux $(HPATH)/scsi $(HPATH)/net $(HPATH)/math-emu
  
@@ -70,9 +72,9 @@ diff -ur linux-2.4.32/Makefile linux-2.4.32-openwrt/Makefile
 -CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
 +CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -Os \
          -fno-strict-aliasing -fno-common
- CFLAGS += -fno-builtin-sprintf
+ CFLAGS += -fno-builtin-strpbrk -fno-builtin-sprintf
  ifndef CONFIG_FRAME_POINTER
-@@ -104,6 +103,8 @@
+@@ -105,6 +104,8 @@
  # disable pointer signedness warnings in gcc 4.0
  CFLAGS += $(call check_gcc,-Wno-pointer-sign,)
  
index 2ea70df7db2139d8a994fff9cbde26d7b75ba4f2..ff9d88bcf56e2975d62ee3f36cb2160e52a22944 100644 (file)
@@ -1,6 +1,8 @@
---- linux-2.4.32/arch/mips/Makefile.old        2006-10-18 21:11:18.110720000 +0200
-+++ linux-2.4.32/arch/mips/Makefile    2006-10-18 21:12:32.570720000 +0200
-@@ -752,6 +752,7 @@
+Index: linux-2.4.35.4/arch/mips/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/Makefile     2007-12-15 05:19:50.987326639 +0100
++++ linux-2.4.35.4/arch/mips/Makefile  2007-12-15 05:19:51.215339635 +0100
+@@ -739,6 +739,7 @@
  HEAD := arch/mips/kernel/head.o arch/mips/kernel/init_task.o
  
  SUBDIRS := $(addprefix arch/mips/, tools) $(SUBDIRS) $(addprefix arch/mips/, kernel mm lib)
@@ -8,7 +10,7 @@
  CORE_FILES := arch/mips/kernel/kernel.o arch/mips/mm/mm.o $(CORE_FILES)
  LIBS := arch/mips/lib/lib.a $(LIBS)
  
-@@ -799,7 +800,7 @@
+@@ -785,7 +786,7 @@
        $(MAKE) -C arch/$(ARCH)/tools mrproper
  
  archdep:
index 091e4ba7a4b368d376aad50f4fb872e509ea48e7..5e1b6b7eff2444f85dbab7b576da26257c6377b3 100644 (file)
@@ -1,13 +1,15 @@
---- linux.old/Makefile Tue Oct 10 22:24:41 2006
-+++ linux.dev/Makefile Tue Oct 10 22:26:19 2006
-@@ -427,17 +427,8 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile       2007-12-15 05:19:50.995327098 +0100
++++ linux-2.4.35.4/Makefile    2007-12-15 05:19:51.427351715 +0100
+@@ -428,18 +428,9 @@
  depmod_opts   := -b $(INSTALL_MOD_PATH) -r
  endif
  .PHONY: _modinst_post
 -_modinst_post: _modinst_post_pcmcia
 +_modinst_post:
        if [ -r System.map ]; then $(DEPMOD) -ae -F System.map $(depmod_opts) $(KERNELRELEASE); fi
--
 -# Backwards compatibilty symlinks for people still using old versions
 -# of pcmcia-cs with hard coded pathnames on insmod.  Remove
 -# _modinst_post_pcmcia for kernel 2.4.1.
@@ -16,6 +18,7 @@
 -      cd $(MODLIB); \
 -      mkdir -p pcmcia; \
 -      find kernel -path '*/pcmcia/*' -name '*.o' | xargs -i -r ln -sf ../{} pcmcia
+-
  .PHONY: $(patsubst %, _modinst_%, $(SUBDIRS))
  $(patsubst %, _modinst_%, $(SUBDIRS)) :
+       $(MAKE) -C $(patsubst _modinst_%, %, $@) modules_install
index 88e91831ff91e11667fea61c7fa65917b2fffed1..fe10d501f559cc20b8f92a7489f3f62d7787e464 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.32/include/linux/netdevice.h linux-2.4.32-we/include/linux/netdevice.h
---- linux-2.4.32/include/linux/netdevice.h     2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-we/include/linux/netdevice.h  2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netdevice.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netdevice.h      2007-12-15 05:19:42.162823760 +0100
++++ linux-2.4.35.4/include/linux/netdevice.h   2007-12-15 05:19:51.635363571 +0100
 @@ -295,7 +295,9 @@
  
        /* List of functions to handle Wireless Extensions (instead of ioctl).
@@ -12,9 +13,10 @@ diff -Nur linux-2.4.32/include/linux/netdevice.h linux-2.4.32-we/include/linux/n
  
        struct ethtool_ops *ethtool_ops;
  
-diff -Nur linux-2.4.32/include/linux/wireless.h linux-2.4.32-we/include/linux/wireless.h
---- linux-2.4.32/include/linux/wireless.h      2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/include/linux/wireless.h   2006-03-13 12:11:02.000000000 +0100
+Index: linux-2.4.35.4/include/linux/wireless.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/wireless.h       2007-12-15 05:19:42.170824216 +0100
++++ linux-2.4.35.4/include/linux/wireless.h    2007-12-15 05:19:51.643364027 +0100
 @@ -1,10 +1,10 @@
  /*
   * This file define a set of standard wireless extensions
@@ -470,9 +472,10 @@ diff -Nur linux-2.4.32/include/linux/wireless.h linux-2.4.32-we/include/linux/wi
  };
  
  /*
-diff -Nur linux-2.4.32/include/net/iw_handler.h linux-2.4.32-we/include/net/iw_handler.h
---- linux-2.4.32/include/net/iw_handler.h      2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/include/net/iw_handler.h   2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/include/net/iw_handler.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/iw_handler.h       2007-12-15 05:19:42.178824671 +0100
++++ linux-2.4.35.4/include/net/iw_handler.h    2007-12-15 05:19:51.647364253 +0100
 @@ -1,10 +1,10 @@
  /*
   * This file define the new driver API for Wireless Extensions
@@ -590,9 +593,10 @@ diff -Nur linux-2.4.32/include/net/iw_handler.h linux-2.4.32-we/include/net/iw_h
  };
  
  /**************************** PROTOTYPES ****************************/
-diff -Nur linux-2.4.32/net/core/dev.c linux-2.4.32-we/net/core/dev.c
---- linux-2.4.32/net/core/dev.c        2005-04-04 03:42:20.000000000 +0200
-+++ linux-2.4.32-we/net/core/dev.c     2006-03-13 12:10:57.000000000 +0100
+Index: linux-2.4.35.4/net/core/dev.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/dev.c 2007-12-15 05:19:42.186825129 +0100
++++ linux-2.4.35.4/net/core/dev.c      2007-12-15 05:19:51.651364482 +0100
 @@ -2426,7 +2426,7 @@
                                /* Follow me in net/core/wireless.c */
                                ret = wireless_process_ioctl(&ifr, cmd);
@@ -602,9 +606,10 @@ diff -Nur linux-2.4.32/net/core/dev.c linux-2.4.32-we/net/core/dev.c
                                    copy_to_user(arg, &ifr, sizeof(struct ifreq)))
                                        return -EFAULT;
                                return ret;
-diff -Nur linux-2.4.32/net/core/wireless.c linux-2.4.32-we/net/core/wireless.c
---- linux-2.4.32/net/core/wireless.c   2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.32-we/net/core/wireless.c        2006-03-13 12:11:02.000000000 +0100
+Index: linux-2.4.35.4/net/core/wireless.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/wireless.c    2007-12-15 05:19:42.194825585 +0100
++++ linux-2.4.35.4/net/core/wireless.c 2007-12-15 05:19:51.655364711 +0100
 @@ -2,7 +2,7 @@
   * This file implement the Wireless Extensions APIs.
   *
index 382b4623f222140626a19a46c9ce61c5fe85b757..7cc5dc9867842bb00737b24c99cc3de6dbe3829a 100644 (file)
@@ -4,10 +4,11 @@ Microsoft Point-to-Point Encryption / Compression support
 
   http://www.polbox.com/h/hs001/linux-2.4.29-mppe-mppc-1.3.patch.gz
 
-diff -ruN linux-2.4.29.orig/Documentation/Configure.help linux-2.4.29/Documentation/Configure.help
---- linux-2.4.29.orig/Documentation/Configure.help     2005-02-02 22:18:18.000000000 +0100
-+++ linux-2.4.29/Documentation/Configure.help  2005-02-02 22:26:37.000000000 +0100
-@@ -9969,6 +9969,28 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:49.287229757 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:19:51.927380210 +0100
+@@ -9974,6 +9974,28 @@
    module; it is called bsd_comp.o and will show up in the directory
    modules once you have said "make modules". If unsure, say N.
  
@@ -36,9 +37,10 @@ diff -ruN linux-2.4.29.orig/Documentation/Configure.help linux-2.4.29/Documentat
  PPP over Ethernet
  CONFIG_PPPOE
    Support for PPP over Ethernet.
-diff -ruN linux-2.4.29.orig/crypto/Config.in linux-2.4.29/crypto/Config.in
---- linux-2.4.29.orig/crypto/Config.in 2005-02-02 22:18:14.000000000 +0100
-+++ linux-2.4.29/crypto/Config.in      2005-02-02 22:26:37.000000000 +0100
+Index: linux-2.4.35.4/crypto/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/crypto/Config.in       2007-12-15 05:19:42.094819886 +0100
++++ linux-2.4.35.4/crypto/Config.in    2007-12-15 05:19:51.927380210 +0100
 @@ -11,7 +11,9 @@
       "$CONFIG_INET6_AH" = "y" -o \
       "$CONFIG_INET6_AH" = "m" -o \
@@ -100,10 +102,11 @@ diff -ruN linux-2.4.29.orig/crypto/Config.in linux-2.4.29/crypto/Config.in
    if [ "$CONFIG_INET_IPCOMP" = "y" -o \
         "$CONFIG_INET_IPCOMP" = "m" -o \
         "$CONFIG_INET6_IPCOMP" = "y" -o \
-diff -ruN linux-2.4.29.orig/drivers/net/Config.in linux-2.4.29/drivers/net/Config.in
---- linux-2.4.29.orig/drivers/net/Config.in    2005-02-02 22:17:31.000000000 +0100
-+++ linux-2.4.29/drivers/net/Config.in 2005-02-02 22:26:37.000000000 +0100
-@@ -332,6 +332,7 @@
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in  2007-12-15 05:19:42.102820341 +0100
++++ linux-2.4.35.4/drivers/net/Config.in       2007-12-15 05:19:51.931380439 +0100
+@@ -336,6 +336,7 @@
     dep_tristate '  PPP support for sync tty ports' CONFIG_PPP_SYNC_TTY $CONFIG_PPP
     dep_tristate '  PPP Deflate compression' CONFIG_PPP_DEFLATE $CONFIG_PPP
     dep_tristate '  PPP BSD-Compress compression' CONFIG_PPP_BSDCOMP $CONFIG_PPP
@@ -111,10 +114,11 @@ diff -ruN linux-2.4.29.orig/drivers/net/Config.in linux-2.4.29/drivers/net/Confi
     if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
        dep_tristate '  PPP over Ethernet (EXPERIMENTAL)' CONFIG_PPPOE $CONFIG_PPP
     fi
-diff -ruN linux-2.4.29.orig/drivers/net/Makefile linux-2.4.29/drivers/net/Makefile
---- linux-2.4.29.orig/drivers/net/Makefile     2005-02-02 22:17:23.000000000 +0100
-+++ linux-2.4.29/drivers/net/Makefile  2005-02-02 22:26:37.000000000 +0100
-@@ -163,6 +163,7 @@
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile   2007-12-15 05:19:42.110820796 +0100
++++ linux-2.4.35.4/drivers/net/Makefile        2007-12-15 05:19:51.931380439 +0100
+@@ -166,6 +166,7 @@
  obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
  obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
  obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
@@ -122,9 +126,10 @@ diff -ruN linux-2.4.29.orig/drivers/net/Makefile linux-2.4.29/drivers/net/Makefi
  obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
  
  obj-$(CONFIG_SLIP) += slip.o
-diff -ruN linux-2.4.29.orig/drivers/net/ppp_generic.c linux-2.4.29/drivers/net/ppp_generic.c
---- linux-2.4.29.orig/drivers/net/ppp_generic.c        2005-02-02 22:17:24.000000000 +0100
-+++ linux-2.4.29/drivers/net/ppp_generic.c     2005-02-02 22:26:37.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/ppp_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/ppp_generic.c      2007-12-15 05:19:42.114821025 +0100
++++ linux-2.4.35.4/drivers/net/ppp_generic.c   2007-12-15 05:19:51.931380439 +0100
 @@ -19,7 +19,7 @@
   * PPP driver, written by Michael Callahan and Al Longyear, and
   * subsequently hacked by Paul Mackerras.
@@ -258,9 +263,10 @@ diff -ruN linux-2.4.29.orig/drivers/net/ppp_generic.c linux-2.4.29/drivers/net/p
        init_ppp_file(&ppp->file, INTERFACE);
        ppp->file.hdrlen = PPP_HDRLEN - 2;      /* don't count proto bytes */
        for (i = 0; i < NUM_NP; ++i)
-diff -ruN linux-2.4.29.orig/drivers/net/ppp_mppe_mppc.c linux-2.4.29/drivers/net/ppp_mppe_mppc.c
---- linux-2.4.29.orig/drivers/net/ppp_mppe_mppc.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/net/ppp_mppe_mppc.c   2005-02-02 23:07:40.000000000 +0100
+Index: linux-2.4.35.4/drivers/net/ppp_mppe_mppc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/net/ppp_mppe_mppc.c 2007-12-15 05:19:51.935380668 +0100
 @@ -0,0 +1,1312 @@
 +/*
 + * ppp_mppe_mppc.c - MPPC/MPPE "compressor/decompressor" module.
@@ -1574,9 +1580,10 @@ diff -ruN linux-2.4.29.orig/drivers/net/ppp_mppe_mppc.c linux-2.4.29/drivers/net
 +MODULE_AUTHOR("Jan Dubiec <jdx@slackware.pl>");
 +MODULE_DESCRIPTION("MPPE/MPPC encryption/compression module for Linux");
 +MODULE_LICENSE("Dual BSD/GPL");
-diff -ruN linux-2.4.29.orig/include/linux/ppp-comp.h linux-2.4.29/include/linux/ppp-comp.h
---- linux-2.4.29.orig/include/linux/ppp-comp.h 2005-02-02 22:18:25.000000000 +0100
-+++ linux-2.4.29/include/linux/ppp-comp.h      2005-02-02 22:41:01.000000000 +0100
+Index: linux-2.4.35.4/include/linux/ppp-comp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/ppp-comp.h       2007-12-15 05:19:42.134822165 +0100
++++ linux-2.4.35.4/include/linux/ppp-comp.h    2007-12-15 05:19:51.935380668 +0100
 @@ -28,7 +28,7 @@
   */
  
index bdccf4de9fa0df7683f9ff13c514cbec10adf1ff..3413e00210c6ec67c0b58009996ebedfe7acdf40 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux-2.4.29.old/Documentation/Configure.help linux-2.4.29/Documentation/Configure.help
---- linux-2.4.29.old/Documentation/Configure.help      2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/Documentation/Configure.help  2005-03-21 19:36:51.000000000 +0100
-@@ -17943,6 +17943,34 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:51.927380210 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:19:52.251398675 +0100
+@@ -17995,6 +17995,34 @@
  
    If you don't know what all this is about, say N.
  
@@ -36,9 +37,10 @@ diff -urN linux-2.4.29.old/Documentation/Configure.help linux-2.4.29/Documentati
  SMB file system support (to mount Windows shares etc.)
  CONFIG_SMB_FS
    SMB (Server Message Block) is the protocol Windows for Workgroups
-diff -urN linux-2.4.29.old/Documentation/filesystems/00-INDEX linux-2.4.29/Documentation/filesystems/00-INDEX
---- linux-2.4.29.old/Documentation/filesystems/00-INDEX        2004-02-18 14:36:30.000000000 +0100
-+++ linux-2.4.29/Documentation/filesystems/00-INDEX    2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/Documentation/filesystems/00-INDEX
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/filesystems/00-INDEX     2007-12-15 05:19:41.822804384 +0100
++++ linux-2.4.35.4/Documentation/filesystems/00-INDEX  2007-12-15 05:19:52.255398905 +0100
 @@ -10,6 +10,8 @@
        - info for the BeOS file system (BFS)
  bfs.txt
@@ -48,9 +50,10 @@ diff -urN linux-2.4.29.old/Documentation/filesystems/00-INDEX linux-2.4.29/Docum
  coda.txt
        - description of the CODA filesystem.
  cramfs.txt
-diff -urN linux-2.4.29.old/Documentation/filesystems/cifs.txt linux-2.4.29/Documentation/filesystems/cifs.txt
---- linux-2.4.29.old/Documentation/filesystems/cifs.txt        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/Documentation/filesystems/cifs.txt    2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/Documentation/filesystems/cifs.txt
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/Documentation/filesystems/cifs.txt  2007-12-15 05:19:52.259399131 +0100
 @@ -0,0 +1,51 @@
 +  This is the client VFS module for the Common Internet File System
 +  (CIFS) protocol which is the successor to the Server Message Block 
@@ -103,9 +106,10 @@ diff -urN linux-2.4.29.old/Documentation/filesystems/cifs.txt linux-2.4.29/Docum
 +  or the Samba site:
 +     
 +      http://www.samba.org
-diff -urN linux-2.4.29.old/fs/cifs/asn1.c linux-2.4.29/fs/cifs/asn1.c
---- linux-2.4.29.old/fs/cifs/asn1.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/asn1.c        2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/asn1.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/asn1.c      2007-12-15 05:19:52.263399360 +0100
 @@ -0,0 +1,614 @@
 +/* 
 + * The ASB.1/BER parsing code is derived from ip_nat_snmp_basic.c which was in
@@ -721,9 +725,10 @@ diff -urN linux-2.4.29.old/fs/cifs/asn1.c linux-2.4.29/fs/cifs/asn1.c
 +
 +      return 1;
 +}
-diff -urN linux-2.4.29.old/fs/cifs/AUTHORS linux-2.4.29/fs/cifs/AUTHORS
---- linux-2.4.29.old/fs/cifs/AUTHORS   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/AUTHORS       2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/AUTHORS
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/AUTHORS     2007-12-15 05:19:52.267399586 +0100
 @@ -0,0 +1,37 @@
 +Original Author
 +===============
@@ -762,9 +767,10 @@ diff -urN linux-2.4.29.old/fs/cifs/AUTHORS linux-2.4.29/fs/cifs/AUTHORS
 +
 +And thanks to the IBM LTC and Power test teams and SuSE testers for
 +finding multiple bugs during excellent stress test runs.
-diff -urN linux-2.4.29.old/fs/cifs/CHANGES linux-2.4.29/fs/cifs/CHANGES
---- linux-2.4.29.old/fs/cifs/CHANGES   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/CHANGES       2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/CHANGES
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/CHANGES     2007-12-15 05:19:52.271399815 +0100
 @@ -0,0 +1,572 @@
 +Version 1.20
 +------------
@@ -1338,9 +1344,10 @@ diff -urN linux-2.4.29.old/fs/cifs/CHANGES linux-2.4.29/fs/cifs/CHANGES
 +-----------
 +Initial drop
 +
-diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.c linux-2.4.29/fs/cifs/cifs_debug.c
---- linux-2.4.29.old/fs/cifs/cifs_debug.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_debug.c  2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_debug.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_debug.c        2007-12-15 05:19:52.275400045 +0100
 @@ -0,0 +1,797 @@
 +/*
 + *   fs/cifs_debug.c
@@ -2139,9 +2146,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.c linux-2.4.29/fs/cifs/cifs_debug.
 +
 +
 +#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.h linux-2.4.29/fs/cifs/cifs_debug.h
---- linux-2.4.29.old/fs/cifs/cifs_debug.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_debug.h  2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_debug.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_debug.h        2007-12-15 05:19:52.279400271 +0100
 @@ -0,0 +1,66 @@
 +/*
 + *
@@ -2209,9 +2217,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_debug.h linux-2.4.29/fs/cifs/cifs_debug.
 +#endif                /* _CIFS_DEBUG */
 +
 +#endif                                /* _H_CIFS_DEBUG */
-diff -urN linux-2.4.29.old/fs/cifs/cifsencrypt.c linux-2.4.29/fs/cifs/cifsencrypt.c
---- linux-2.4.29.old/fs/cifs/cifsencrypt.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsencrypt.c 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsencrypt.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsencrypt.c       2007-12-15 05:19:52.279400271 +0100
 @@ -0,0 +1,204 @@
 +/*
 + *   fs/cifs/cifsencrypt.c
@@ -2417,9 +2426,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifsencrypt.c linux-2.4.29/fs/cifs/cifsencryp
 +
 +      hmac_md5_final(v2_session_response,&context);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/cifserr.c linux-2.4.29/fs/cifs/cifserr.c
---- linux-2.4.29.old/fs/cifs/cifserr.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifserr.c     2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifserr.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifserr.c   2007-12-15 05:19:52.279400271 +0100
 @@ -0,0 +1,70 @@
 +/*
 + *   fs/cifserr.c
@@ -2491,9 +2501,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifserr.c linux-2.4.29/fs/cifs/cifserr.c
 +{
 +      return map_cifs_error(error_class, error_code, FALSE);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/cifsfs.c linux-2.4.29/fs/cifs/cifsfs.c
---- linux-2.4.29.old/fs/cifs/cifsfs.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsfs.c      2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsfs.c    2007-12-15 05:19:52.279400271 +0100
 @@ -0,0 +1,769 @@
 +/*
 + *   fs/cifs/cifsfs.c
@@ -3264,9 +3275,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifsfs.c linux-2.4.29/fs/cifs/cifsfs.c
 +    ("VFS to access servers complying with the SNIA CIFS Specification e.g. Samba and Windows");
 +module_init(init_cifs)
 +module_exit(exit_cifs)
-diff -urN linux-2.4.29.old/fs/cifs/cifsfs.h linux-2.4.29/fs/cifs/cifsfs.h
---- linux-2.4.29.old/fs/cifs/cifsfs.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsfs.h      2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsfs.h    2007-12-15 05:19:52.279400271 +0100
 @@ -0,0 +1,97 @@
 +/*
 + *   fs/cifs/cifsfs.h
@@ -3365,9 +3377,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifsfs.h linux-2.4.29/fs/cifs/cifsfs.h
 +extern ssize_t        cifs_listxattr(struct dentry *, char *, size_t);
 +#define CIFS_VERSION   "1.20"
 +#endif                                /* _CIFSFS_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifs_fs_sb.h linux-2.4.29/fs/cifs/cifs_fs_sb.h
---- linux-2.4.29.old/fs/cifs/cifs_fs_sb.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_fs_sb.h  2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_fs_sb.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_fs_sb.h        2007-12-15 05:19:52.283400500 +0100
 @@ -0,0 +1,32 @@
 +/*
 + *   fs/cifs/cifs_fs_sb.h
@@ -3401,9 +3414,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_fs_sb.h linux-2.4.29/fs/cifs/cifs_fs_sb.
 +      mode_t  mnt_dir_mode;
 +};
 +#endif                                /* _CIFS_FS_SB_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifsglob.h linux-2.4.29/fs/cifs/cifsglob.h
---- linux-2.4.29.old/fs/cifs/cifsglob.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsglob.h    2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsglob.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsglob.h  2007-12-15 05:19:52.283400500 +0100
 @@ -0,0 +1,413 @@
 +/*
 + *   fs/cifs/cifsglob.h
@@ -3818,9 +3832,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifsglob.h linux-2.4.29/fs/cifs/cifsglob.h
 +GLOBAL_EXTERN unsigned int sign_CIFS_PDUs;  /* enable smb packet signing */
 +GLOBAL_EXTERN unsigned int linuxExtEnabled;  /* enable Linux/Unix CIFS extensions */
 +
-diff -urN linux-2.4.29.old/fs/cifs/cifspdu.h linux-2.4.29/fs/cifs/cifspdu.h
---- linux-2.4.29.old/fs/cifs/cifspdu.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifspdu.h     2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifspdu.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifspdu.h   2007-12-15 05:19:52.283400500 +0100
 @@ -0,0 +1,1793 @@
 +/*
 + *   fs/cifs/cifspdu.h
@@ -5615,9 +5630,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifspdu.h linux-2.4.29/fs/cifs/cifspdu.h
 +#pragma pack()                        /* resume default structure packing */
 +
 +#endif                                /* _CIFSPDU_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifsproto.h linux-2.4.29/fs/cifs/cifsproto.h
---- linux-2.4.29.old/fs/cifs/cifsproto.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifsproto.h   2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsproto.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifsproto.h 2007-12-15 05:19:52.287400726 +0100
 @@ -0,0 +1,254 @@
 +/*
 + *   fs/cifs/cifsproto.h
@@ -5873,9 +5889,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifsproto.h linux-2.4.29/fs/cifs/cifsproto.h
 +               char * EAData, size_t size,
 +               const struct nls_table *nls_codepage);
 +#endif                        /* _CIFSPROTO_H */
-diff -urN linux-2.4.29.old/fs/cifs/cifssmb.c linux-2.4.29/fs/cifs/cifssmb.c
---- linux-2.4.29.old/fs/cifs/cifssmb.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifssmb.c     2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifssmb.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifssmb.c   2007-12-15 05:19:52.287400726 +0100
 @@ -0,0 +1,3016 @@
 +/*
 + *   fs/cifs/cifssmb.c
@@ -8893,9 +8910,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifssmb.c linux-2.4.29/fs/cifs/cifssmb.c
 +      return rc;
 +}
 +#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.c linux-2.4.29/fs/cifs/cifs_unicode.c
---- linux-2.4.29.old/fs/cifs/cifs_unicode.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_unicode.c        2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_unicode.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_unicode.c      2007-12-15 05:19:52.291400955 +0100
 @@ -0,0 +1,87 @@
 +/*
 + *   fs/cifs/cifs_unicode.c
@@ -8984,9 +9002,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.c linux-2.4.29/fs/cifs/cifs_unic
 +      return i;
 +}
 +
-diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.h linux-2.4.29/fs/cifs/cifs_unicode.h
---- linux-2.4.29.old/fs/cifs/cifs_unicode.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_unicode.h        2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_unicode.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_unicode.h      2007-12-15 05:19:52.291400955 +0100
 @@ -0,0 +1,353 @@
 +/*
 + * cifs_unicode:  Unicode kernel case support
@@ -9341,9 +9360,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_unicode.h linux-2.4.29/fs/cifs/cifs_unic
 +}
 +
 +#endif
-diff -urN linux-2.4.29.old/fs/cifs/cifs_uniupr.h linux-2.4.29/fs/cifs/cifs_uniupr.h
---- linux-2.4.29.old/fs/cifs/cifs_uniupr.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/cifs_uniupr.h 2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifs_uniupr.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/cifs_uniupr.h       2007-12-15 05:19:52.291400955 +0100
 @@ -0,0 +1,253 @@
 +/*
 + *   Copyright (c) International Business Machines  Corp., 2000,2002
@@ -9598,9 +9618,10 @@ diff -urN linux-2.4.29.old/fs/cifs/cifs_uniupr.h linux-2.4.29/fs/cifs/cifs_uniup
 +      0, 0, 0
 +};
 +#endif
-diff -urN linux-2.4.29.old/fs/cifs/connect.c linux-2.4.29/fs/cifs/connect.c
---- linux-2.4.29.old/fs/cifs/connect.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/connect.c     2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/connect.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/connect.c   2007-12-15 05:19:52.295401184 +0100
 @@ -0,0 +1,2924 @@
 +/*
 + *   fs/cifs/connect.c
@@ -12526,9 +12547,10 @@ diff -urN linux-2.4.29.old/fs/cifs/connect.c linux-2.4.29/fs/cifs/connect.c
 +      return rc;
 +}
 +
-diff -urN linux-2.4.29.old/fs/cifs/dir.c linux-2.4.29/fs/cifs/dir.c
---- linux-2.4.29.old/fs/cifs/dir.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/dir.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/dir.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/dir.c       2007-12-15 05:19:52.295401184 +0100
 @@ -0,0 +1,425 @@
 +/*
 + *   fs/cifs/dir.c
@@ -12955,9 +12977,10 @@ diff -urN linux-2.4.29.old/fs/cifs/dir.c linux-2.4.29/fs/cifs/dir.c
 +/* d_delete:       cifs_d_delete,       *//* not needed except for debugging */
 +      /* no need for d_hash, d_compare, d_release, d_iput ... yet. BB confirm this BB */
 +};
-diff -urN linux-2.4.29.old/fs/cifs/file.c linux-2.4.29/fs/cifs/file.c
---- linux-2.4.29.old/fs/cifs/file.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/file.c        2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/file.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/file.c      2007-12-15 05:19:52.299401411 +0100
 @@ -0,0 +1,2185 @@
 +/*
 + *   fs/cifs/file.c
@@ -15144,9 +15167,10 @@ diff -urN linux-2.4.29.old/fs/cifs/file.c linux-2.4.29/fs/cifs/file.c
 +      .sync_page = cifs_sync_page,
 +      /*.direct_IO = */
 +};
-diff -urN linux-2.4.29.old/fs/cifs/inode.c linux-2.4.29/fs/cifs/inode.c
---- linux-2.4.29.old/fs/cifs/inode.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/inode.c       2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/inode.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/inode.c     2007-12-15 05:19:52.299401411 +0100
 @@ -0,0 +1,1079 @@
 +/*
 + *   fs/cifs/inode.c
@@ -16227,9 +16251,10 @@ diff -urN linux-2.4.29.old/fs/cifs/inode.c linux-2.4.29/fs/cifs/inode.c
 +      /* may have to add back in if and when safe distributed caching of
 +              directories added e.g. via FindNotify */
 +}
-diff -urN linux-2.4.29.old/fs/cifs/link.c linux-2.4.29/fs/cifs/link.c
---- linux-2.4.29.old/fs/cifs/link.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/link.c        2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/link.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/link.c      2007-12-15 05:19:52.299401411 +0100
 @@ -0,0 +1,328 @@
 +/*
 + *   fs/cifs/link.c
@@ -16559,9 +16584,10 @@ diff -urN linux-2.4.29.old/fs/cifs/link.c linux-2.4.29/fs/cifs/link.c
 +      FreeXid(xid);
 +      return rc;
 +}
-diff -urN linux-2.4.29.old/fs/cifs/Makefile linux-2.4.29/fs/cifs/Makefile
---- linux-2.4.29.old/fs/cifs/Makefile  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/Makefile      2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/Makefile    2007-12-15 05:19:52.303401640 +0100
 @@ -0,0 +1,10 @@
 +#
 +# Makefile for Linux CIFS VFS client 
@@ -16573,9 +16599,10 @@ diff -urN linux-2.4.29.old/fs/cifs/Makefile linux-2.4.29/fs/cifs/Makefile
 +obj-m := $(O_TARGET)
 +
 +include $(TOPDIR)/Rules.make
-diff -urN linux-2.4.29.old/fs/cifs/md4.c linux-2.4.29/fs/cifs/md4.c
---- linux-2.4.29.old/fs/cifs/md4.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md4.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md4.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md4.c       2007-12-15 05:19:52.303401640 +0100
 @@ -0,0 +1,203 @@
 +/* 
 +   Unix SMB/Netbios implementation.
@@ -16780,9 +16807,10 @@ diff -urN linux-2.4.29.old/fs/cifs/md4.c linux-2.4.29/fs/cifs/md4.c
 +
 +      A = B = C = D = 0;
 +}
-diff -urN linux-2.4.29.old/fs/cifs/md5.c linux-2.4.29/fs/cifs/md5.c
---- linux-2.4.29.old/fs/cifs/md5.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md5.c 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md5.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md5.c       2007-12-15 05:19:52.303401640 +0100
 @@ -0,0 +1,363 @@
 +/*
 + * This code implements the MD5 message-digest algorithm.
@@ -17147,9 +17175,10 @@ diff -urN linux-2.4.29.old/fs/cifs/md5.c linux-2.4.29/fs/cifs/md5.c
 +      }
 +      hmac_md5_final(digest, &ctx);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/md5.h linux-2.4.29/fs/cifs/md5.h
---- linux-2.4.29.old/fs/cifs/md5.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/md5.h 2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/md5.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/md5.h       2007-12-15 05:19:52.303401640 +0100
 @@ -0,0 +1,38 @@
 +#ifndef MD5_H
 +#define MD5_H
@@ -17189,9 +17218,10 @@ diff -urN linux-2.4.29.old/fs/cifs/md5.h linux-2.4.29/fs/cifs/md5.h
 +void hmac_md5_final(unsigned char *digest, struct HMACMD5Context *ctx);
 +void hmac_md5(unsigned char key[16], unsigned char *data, int data_len,
 +                      unsigned char *digest);
-diff -urN linux-2.4.29.old/fs/cifs/misc.c linux-2.4.29/fs/cifs/misc.c
---- linux-2.4.29.old/fs/cifs/misc.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/misc.c        2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/misc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/misc.c      2007-12-15 05:19:52.307401866 +0100
 @@ -0,0 +1,463 @@
 +/*
 + *   fs/cifs/misc.c
@@ -17656,9 +17686,10 @@ diff -urN linux-2.4.29.old/fs/cifs/misc.c linux-2.4.29/fs/cifs/misc.c
 +      printk( " | %s\n", debug_line);
 +      return;
 +}
-diff -urN linux-2.4.29.old/fs/cifs/netmisc.c linux-2.4.29/fs/cifs/netmisc.c
---- linux-2.4.29.old/fs/cifs/netmisc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/netmisc.c     2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/netmisc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/netmisc.c   2007-12-15 05:19:52.307401866 +0100
 @@ -0,0 +1,905 @@
 +/*
 + *   fs/cifs/netmisc.c
@@ -18565,9 +18596,10 @@ diff -urN linux-2.4.29.old/fs/cifs/netmisc.c linux-2.4.29/fs/cifs/netmisc.c
 +      dce_time += NTFS_TIME_OFFSET;
 +      return dce_time;
 +}
-diff -urN linux-2.4.29.old/fs/cifs/nterr.c linux-2.4.29/fs/cifs/nterr.c
---- linux-2.4.29.old/fs/cifs/nterr.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/nterr.c       2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/nterr.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/nterr.c     2007-12-15 05:19:52.307401866 +0100
 @@ -0,0 +1,687 @@
 +/* 
 + *  Unix SMB/Netbios implementation.
@@ -19256,9 +19288,10 @@ diff -urN linux-2.4.29.old/fs/cifs/nterr.c linux-2.4.29/fs/cifs/nterr.c
 +      {"STATUS_SOME_UNMAPPED", STATUS_SOME_UNMAPPED},
 +      {NULL, 0}
 +};
-diff -urN linux-2.4.29.old/fs/cifs/nterr.h linux-2.4.29/fs/cifs/nterr.h
---- linux-2.4.29.old/fs/cifs/nterr.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/nterr.h       2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/nterr.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/nterr.h     2007-12-15 05:19:52.311402095 +0100
 @@ -0,0 +1,556 @@
 +/* 
 +   Unix SMB/Netbios implementation.
@@ -19816,9 +19849,10 @@ diff -urN linux-2.4.29.old/fs/cifs/nterr.h linux-2.4.29/fs/cifs/nterr.h
 +#define NT_STATUS_NO_SUCH_JOB 0xC0000000 | 0xEDE      /* scheduler */
 +
 +#endif                                /* _NTERR_H */
-diff -urN linux-2.4.29.old/fs/cifs/ntlmssp.h linux-2.4.29/fs/cifs/ntlmssp.h
---- linux-2.4.29.old/fs/cifs/ntlmssp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/ntlmssp.h     2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/ntlmssp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/ntlmssp.h   2007-12-15 05:19:52.311402095 +0100
 @@ -0,0 +1,101 @@
 +/*
 + *   fs/cifs/ntlmssp.h
@@ -19921,9 +19955,10 @@ diff -urN linux-2.4.29.old/fs/cifs/ntlmssp.h linux-2.4.29/fs/cifs/ntlmssp.h
 +} AUTHENTICATE_MESSAGE, *PAUTHENTICATE_MESSAGE;
 +
 +#pragma pack()                        /* resume default structure packing */
-diff -urN linux-2.4.29.old/fs/cifs/README linux-2.4.29/fs/cifs/README
---- linux-2.4.29.old/fs/cifs/README    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/README        2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/README
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/README      2007-12-15 05:19:52.311402095 +0100
 @@ -0,0 +1,356 @@
 +The CIFS VFS support for Linux supports many advanced network filesystem 
 +features such as heirarchical dfs like namespace, hardlinks, locking and more.  
@@ -20281,9 +20316,10 @@ diff -urN linux-2.4.29.old/fs/cifs/README linux-2.4.29/fs/cifs/README
 +Windows 2000 server or Samba since it does not usually send "raw NTLMSSP" 
 +(instead it sends NTLMSSP encapsulated in SPNEGO/GSSAPI, which support is not 
 +complete in the CIFS VFS yet).  
-diff -urN linux-2.4.29.old/fs/cifs/rfc1002pdu.h linux-2.4.29/fs/cifs/rfc1002pdu.h
---- linux-2.4.29.old/fs/cifs/rfc1002pdu.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/rfc1002pdu.h  2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/rfc1002pdu.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/rfc1002pdu.h        2007-12-15 05:19:52.311402095 +0100
 @@ -0,0 +1,79 @@
 +/*
 + *   fs/cifs/rfc1002pdu.h
@@ -20364,9 +20400,10 @@ diff -urN linux-2.4.29.old/fs/cifs/rfc1002pdu.h linux-2.4.29/fs/cifs/rfc1002pdu.
 +
 +#pragma pack()                /* resume default structure packing */
 +                                                             
-diff -urN linux-2.4.29.old/fs/cifs/smbdes.c linux-2.4.29/fs/cifs/smbdes.c
---- linux-2.4.29.old/fs/cifs/smbdes.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smbdes.c      2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smbdes.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smbdes.c    2007-12-15 05:19:52.315402324 +0100
 @@ -0,0 +1,408 @@
 +/* 
 +   Unix SMB/Netbios implementation.
@@ -20776,9 +20813,10 @@ diff -urN linux-2.4.29.old/fs/cifs/smbdes.c linux-2.4.29/fs/cifs/smbdes.c
 +      key2[0] = key[7];
 +      smbhash(out + 8, in + 8, key2, forw);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/smbencrypt.c linux-2.4.29/fs/cifs/smbencrypt.c
---- linux-2.4.29.old/fs/cifs/smbencrypt.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smbencrypt.c  2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smbencrypt.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smbencrypt.c        2007-12-15 05:19:52.315402324 +0100
 @@ -0,0 +1,295 @@
 +/* 
 +   Unix SMB/Netbios implementation.
@@ -21075,9 +21113,10 @@ diff -urN linux-2.4.29.old/fs/cifs/smbencrypt.c linux-2.4.29/fs/cifs/smbencrypt.
 +{
 +      mdfour((unsigned char *) sess_key, (unsigned char *) kr, 16);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/smberr.c linux-2.4.29/fs/cifs/smberr.c
---- linux-2.4.29.old/fs/cifs/smberr.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smberr.c      2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smberr.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smberr.c    2007-12-15 05:19:52.315402324 +0100
 @@ -0,0 +1,240 @@
 +/* 
 +   Unix SMB/Netbios implementation.
@@ -21319,9 +21358,10 @@ diff -urN linux-2.4.29.old/fs/cifs/smberr.c linux-2.4.29/fs/cifs/smberr.c
 +      NTSTATUS status = map_nt_error_from_unix(error);
 +      return ntstatus_to_werror(status);
 +}
-diff -urN linux-2.4.29.old/fs/cifs/smberr.h linux-2.4.29/fs/cifs/smberr.h
---- linux-2.4.29.old/fs/cifs/smberr.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/smberr.h      2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/smberr.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/smberr.h    2007-12-15 05:19:52.315402324 +0100
 @@ -0,0 +1,113 @@
 +/*
 + *   fs/cifs/smberr.h
@@ -21436,9 +21476,10 @@ diff -urN linux-2.4.29.old/fs/cifs/smberr.h linux-2.4.29/fs/cifs/smberr.h
 +#define ERRpasswordExpired 2242
 +#define ERRnetlogonNotStarted 2455
 +#define ERRnosupport       0xFFFF
-diff -urN linux-2.4.29.old/fs/cifs/TODO linux-2.4.29/fs/cifs/TODO
---- linux-2.4.29.old/fs/cifs/TODO      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/TODO  2004-07-14 00:25:04.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/TODO
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/TODO        2007-12-15 05:19:52.315402324 +0100
 @@ -0,0 +1,106 @@
 +version 1.16 May 27, 2004
 +
@@ -21546,9 +21587,10 @@ diff -urN linux-2.4.29.old/fs/cifs/TODO linux-2.4.29/fs/cifs/TODO
 +4) More exhaustively test the recently added NT4 support against various
 +NT4 service pack levels.
 +
-diff -urN linux-2.4.29.old/fs/cifs/transport.c linux-2.4.29/fs/cifs/transport.c
---- linux-2.4.29.old/fs/cifs/transport.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/fs/cifs/transport.c   2004-07-14 00:25:05.000000000 +0200
+Index: linux-2.4.35.4/fs/cifs/transport.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/cifs/transport.c 2007-12-15 05:19:52.319402550 +0100
 @@ -0,0 +1,434 @@
 +/*
 + *   fs/cifs/transport.c
@@ -21984,10 +22026,11 @@ diff -urN linux-2.4.29.old/fs/cifs/transport.c linux-2.4.29/fs/cifs/transport.c
 +
 +      return rc;
 +}
-diff -urN linux-2.4.29.old/fs/Config.in linux-2.4.29/fs/Config.in
---- linux-2.4.29.old/fs/Config.in      2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/fs/Config.in  2005-03-21 19:36:51.000000000 +0100
-@@ -146,6 +146,10 @@
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in   2007-12-15 05:19:49.287229757 +0100
++++ linux-2.4.35.4/fs/Config.in        2007-12-15 05:19:52.319402550 +0100
+@@ -153,6 +153,10 @@
       define_bool CONFIG_LOCKD_V4 y
     fi
  
@@ -21998,9 +22041,10 @@ diff -urN linux-2.4.29.old/fs/Config.in linux-2.4.29/fs/Config.in
     dep_tristate 'SMB file system support (to mount Windows shares etc.)' CONFIG_SMB_FS $CONFIG_INET
     if [ "$CONFIG_SMB_FS" != "n" ]; then
        bool '  Use a default NLS' CONFIG_SMB_NLS_DEFAULT
-diff -urN linux-2.4.29.old/fs/Makefile linux-2.4.29/fs/Makefile
---- linux-2.4.29.old/fs/Makefile       2005-03-21 19:30:22.000000000 +0100
-+++ linux-2.4.29/fs/Makefile   2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile    2007-12-15 05:19:48.639192828 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:19:52.319402550 +0100
 @@ -37,6 +37,7 @@
  subdir-$(CONFIG_VFAT_FS)      += vfat
  subdir-$(CONFIG_BFS_FS)               += bfs
@@ -22009,9 +22053,10 @@ diff -urN linux-2.4.29.old/fs/Makefile linux-2.4.29/fs/Makefile
  subdir-$(CONFIG_DEVFS_FS)     += devfs
  subdir-$(CONFIG_HFSPLUS_FS)   += hfsplus # Before hfs to find wrapped HFS+
  subdir-$(CONFIG_HFS_FS)               += hfs
-diff -urN linux-2.4.29.old/fs/nls/Config.in linux-2.4.29/fs/nls/Config.in
---- linux-2.4.29.old/fs/nls/Config.in  2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.29/fs/nls/Config.in      2005-03-21 19:36:51.000000000 +0100
+Index: linux-2.4.35.4/fs/nls/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/nls/Config.in       2007-12-15 05:19:42.058817832 +0100
++++ linux-2.4.35.4/fs/nls/Config.in    2007-12-15 05:19:52.319402550 +0100
 @@ -11,6 +11,7 @@
  
  # msdos and Joliet want NLS
index 56dc1991cfcb287b90ac6f82de39c93043ae2432..5874007f5939c341d7954bcd345637451f1306cc 100644 (file)
@@ -1,9 +1,10 @@
-diff -urPX nopatch linux-2.4.26/Documentation/Configure.help linux/Documentation/Configure.help
---- linux-2.4.26/Documentation/Configure.help  Sat Apr 17 02:10:25 2004
-+++ linux/Documentation/Configure.help Sat Apr 17 02:13:54 2004
-@@ -4622,6 +4622,12 @@
-   will be called binfmt_elf.o. Saying M or N here is dangerous because
-   some crucial programs on your system might be in ELF format.
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:52.251398675 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:19:53.139449282 +0100
+@@ -4690,6 +4690,12 @@
+   ld.so (check the file <file:Documentation/Changes> for location and
+   latest version).
  
 +ELF binaries with a.out format interpreters or a.out libraries
 +CONFIG_BINFMT_ELF_AOUT
@@ -14,7 +15,7 @@ diff -urPX nopatch linux-2.4.26/Documentation/Configure.help linux/Documentation
  Kernel support for a.out binaries
  CONFIG_BINFMT_AOUT
    A.out (Assembler.OUTput) is a set of formats for libraries and
-@@ -4635,13 +4641,11 @@
+@@ -4703,13 +4709,11 @@
    warrant removing support. However its removal is a good idea if you
    wish to ensure that absolutely none of your programs will use this
    older executable format. If you don't know what to answer at this
@@ -30,9 +31,10 @@ diff -urPX nopatch linux-2.4.26/Documentation/Configure.help linux/Documentation
  
  OSF/1 v4 readv/writev compatibility
  CONFIG_OSF4_COMPAT
-diff -urPX nopatch linux-2.4.26/arch/alpha/config.in linux/arch/alpha/config.in
---- linux-2.4.26/arch/alpha/config.in  Fri Feb 20 10:07:20 2004
-+++ linux/arch/alpha/config.in Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/alpha/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/alpha/config.in   2007-12-15 05:19:41.518787058 +0100
++++ linux-2.4.35.4/arch/alpha/config.in        2007-12-15 05:19:53.143449511 +0100
 @@ -315,6 +315,9 @@
  fi
  
@@ -43,9 +45,10 @@ diff -urPX nopatch linux-2.4.26/arch/alpha/config.in linux/arch/alpha/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  tristate 'Kernel support for Linux/Intel ELF binaries' CONFIG_BINFMT_EM86
  source drivers/parport/Config.in
-diff -urPX nopatch linux-2.4.26/arch/alpha/defconfig linux/arch/alpha/defconfig
---- linux-2.4.26/arch/alpha/defconfig  Fri Feb 20 10:07:20 2004
-+++ linux/arch/alpha/defconfig Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/alpha/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/alpha/defconfig   2007-12-15 05:19:41.526787516 +0100
++++ linux-2.4.35.4/arch/alpha/defconfig        2007-12-15 05:19:53.143449511 +0100
 @@ -72,6 +72,7 @@
  # CONFIG_KCORE_AOUT is not set
  # CONFIG_BINFMT_AOUT is not set
@@ -54,9 +57,10 @@ diff -urPX nopatch linux-2.4.26/arch/alpha/defconfig linux/arch/alpha/defconfig
  # CONFIG_BINFMT_MISC is not set
  # CONFIG_BINFMT_EM86 is not set
  
-diff -urPX nopatch linux-2.4.26/arch/arm/config.in linux/arch/arm/config.in
---- linux-2.4.26/arch/arm/config.in    Fri Feb 20 10:07:20 2004
-+++ linux/arch/arm/config.in   Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/arm/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/arm/config.in     2007-12-15 05:19:41.534787971 +0100
++++ linux-2.4.35.4/arch/arm/config.in  2007-12-15 05:19:53.143449511 +0100
 @@ -499,6 +499,9 @@
         A.OUT          CONFIG_KCORE_AOUT" ELF
  tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
@@ -67,9 +71,10 @@ diff -urPX nopatch linux-2.4.26/arch/arm/config.in linux/arch/arm/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL
  dep_tristate 'RISC OS personality' CONFIG_ARTHUR $CONFIG_CPU_32
-diff -urPX nopatch linux-2.4.26/arch/arm/defconfig linux/arch/arm/defconfig
---- linux-2.4.26/arch/arm/defconfig    Fri Feb 20 10:07:21 2004
-+++ linux/arch/arm/defconfig   Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/arm/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/arm/defconfig     2007-12-15 05:19:41.542788427 +0100
++++ linux-2.4.35.4/arch/arm/defconfig  2007-12-15 05:19:53.143449511 +0100
 @@ -83,8 +83,9 @@
  CONFIG_NWFPE=y
  CONFIG_KCORE_ELF=y
@@ -81,9 +86,10 @@ diff -urPX nopatch linux-2.4.26/arch/arm/defconfig linux/arch/arm/defconfig
  # CONFIG_BINFMT_MISC is not set
  # CONFIG_PM is not set
  # CONFIG_ARTHUR is not set
-diff -urPX nopatch linux-2.4.26/arch/cris/config.in linux/arch/cris/config.in
---- linux-2.4.26/arch/cris/config.in   Fri Feb 20 10:07:21 2004
-+++ linux/arch/cris/config.in  Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/cris/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/cris/config.in    2007-12-15 05:19:41.550788882 +0100
++++ linux-2.4.35.4/arch/cris/config.in 2007-12-15 05:19:53.143449511 +0100
 @@ -31,6 +31,9 @@
  bool 'Sysctl support' CONFIG_SYSCTL
  
@@ -94,9 +100,10 @@ diff -urPX nopatch linux-2.4.26/arch/cris/config.in linux/arch/cris/config.in
  
  string 'Kernel command line' CONFIG_ETRAX_CMDLINE "root=/dev/mtdblock3"
  
-diff -urPX nopatch linux-2.4.26/arch/cris/defconfig linux/arch/cris/defconfig
---- linux-2.4.26/arch/cris/defconfig   Fri Feb 20 10:07:21 2004
-+++ linux/arch/cris/defconfig  Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/cris/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/cris/defconfig    2007-12-15 05:19:41.554789111 +0100
++++ linux-2.4.35.4/arch/cris/defconfig 2007-12-15 05:19:53.147449737 +0100
 @@ -18,6 +18,7 @@
  # CONFIG_BSD_PROCESS_ACCT is not set
  # CONFIG_SYSCTL is not set
@@ -105,10 +112,11 @@ diff -urPX nopatch linux-2.4.26/arch/cris/defconfig linux/arch/cris/defconfig
  # CONFIG_ETRAX_KGDB is not set
  # CONFIG_ETRAX_WATCHDOG is not set
  
-diff -urPX nopatch linux-2.4.26/arch/i386/config.in linux/arch/i386/config.in
---- linux-2.4.26/arch/i386/config.in   Fri Feb 20 10:07:21 2004
-+++ linux/arch/i386/config.in  Sat Apr 17 02:13:54 2004
-@@ -327,6 +327,9 @@
+Index: linux-2.4.35.4/arch/i386/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/i386/config.in    2007-12-15 05:19:41.562789566 +0100
++++ linux-2.4.35.4/arch/i386/config.in 2007-12-15 05:19:53.147449737 +0100
+@@ -329,6 +329,9 @@
  fi
  tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
  bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
@@ -118,10 +126,11 @@ diff -urPX nopatch linux-2.4.26/arch/i386/config.in linux/arch/i386/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
  
-diff -urPX nopatch linux-2.4.26/arch/i386/defconfig linux/arch/i386/defconfig
---- linux-2.4.26/arch/i386/defconfig   Sat Apr 17 02:10:25 2004
-+++ linux/arch/i386/defconfig  Sat Apr 17 02:23:27 2004
-@@ -110,9 +110,10 @@
+Index: linux-2.4.35.4/arch/i386/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/i386/defconfig    2007-12-15 05:19:41.570790022 +0100
++++ linux-2.4.35.4/arch/i386/defconfig 2007-12-15 05:19:53.147449737 +0100
+@@ -115,9 +115,10 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
  # CONFIG_KCORE_AOUT is not set
@@ -134,9 +143,10 @@ diff -urPX nopatch linux-2.4.26/arch/i386/defconfig linux/arch/i386/defconfig
  # CONFIG_OOM_KILLER is not set
  CONFIG_PM=y
  # CONFIG_APM is not set
-diff -urPX nopatch linux-2.4.26/arch/ia64/config.in linux/arch/ia64/config.in
---- linux-2.4.26/arch/ia64/config.in   Fri Feb 20 10:07:21 2004
-+++ linux/arch/ia64/config.in  Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/ia64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ia64/config.in    2007-12-15 05:19:41.578790477 +0100
++++ linux-2.4.35.4/arch/ia64/config.in 2007-12-15 05:19:53.147449737 +0100
 @@ -124,6 +124,9 @@
  bool 'BSD Process Accounting' CONFIG_BSD_PROCESS_ACCT
  bool 'Sysctl support' CONFIG_SYSCTL
@@ -147,9 +157,10 @@ diff -urPX nopatch linux-2.4.26/arch/ia64/config.in linux/arch/ia64/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  
  if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
-diff -urPX nopatch linux-2.4.26/arch/ia64/defconfig linux/arch/ia64/defconfig
---- linux-2.4.26/arch/ia64/defconfig   Fri Feb 20 10:07:21 2004
-+++ linux/arch/ia64/defconfig  Sat Apr 17 02:13:54 2004
+Index: linux-2.4.35.4/arch/ia64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ia64/defconfig    2007-12-15 05:19:41.586790935 +0100
++++ linux-2.4.35.4/arch/ia64/defconfig 2007-12-15 05:19:53.151449966 +0100
 @@ -60,6 +60,7 @@
  # CONFIG_BSD_PROCESS_ACCT is not set
  CONFIG_SYSCTL=y
@@ -158,9 +169,10 @@ diff -urPX nopatch linux-2.4.26/arch/ia64/defconfig linux/arch/ia64/defconfig
  # CONFIG_BINFMT_MISC is not set
  CONFIG_ACPI=y
  CONFIG_ACPI_EFI=y
-diff -urPX nopatch linux-2.4.26/arch/m68k/config.in linux/arch/m68k/config.in
---- linux-2.4.26/arch/m68k/config.in   Fri Feb 20 10:07:22 2004
-+++ linux/arch/m68k/config.in  Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/m68k/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/m68k/config.in    2007-12-15 05:19:41.594791391 +0100
++++ linux-2.4.35.4/arch/m68k/config.in 2007-12-15 05:19:53.151449966 +0100
 @@ -99,6 +99,9 @@
  fi
  tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
@@ -171,9 +183,10 @@ diff -urPX nopatch linux-2.4.26/arch/m68k/config.in linux/arch/m68k/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  
  if [ "$CONFIG_AMIGA" = "y" ]; then
-diff -urPX nopatch linux-2.4.26/arch/m68k/defconfig linux/arch/m68k/defconfig
---- linux-2.4.26/arch/m68k/defconfig   Fri Feb 20 10:07:22 2004
-+++ linux/arch/m68k/defconfig  Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/m68k/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/m68k/defconfig    2007-12-15 05:19:41.602791846 +0100
++++ linux-2.4.35.4/arch/m68k/defconfig 2007-12-15 05:19:53.151449966 +0100
 @@ -44,8 +44,9 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
@@ -185,10 +198,11 @@ diff -urPX nopatch linux-2.4.26/arch/m68k/defconfig linux/arch/m68k/defconfig
  # CONFIG_BINFMT_MISC is not set
  CONFIG_ZORRO=y
  # CONFIG_AMIGA_PCMCIA is not set
-diff -urPX nopatch linux-2.4.26/arch/mips/config-shared.in linux/arch/mips/config-shared.in
---- linux-2.4.26/arch/mips/config-shared.in    Fri Feb 20 10:07:22 2004
-+++ linux/arch/mips/config-shared.in   Sat Apr 17 02:13:55 2004
-@@ -944,6 +944,9 @@
+Index: linux-2.4.35.4/arch/mips/config-shared.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/config-shared.in     2007-12-15 05:19:44.814974898 +0100
++++ linux-2.4.35.4/arch/mips/config-shared.in  2007-12-15 05:19:53.151449966 +0100
+@@ -873,6 +873,9 @@
  define_bool CONFIG_KCORE_AOUT n
  define_bool CONFIG_BINFMT_AOUT n
  bool 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
@@ -198,10 +212,11 @@ diff -urPX nopatch linux-2.4.26/arch/mips/config-shared.in linux/arch/mips/confi
  dep_bool 'Kernel support for Linux/MIPS 32-bit binary compatibility' CONFIG_MIPS32_COMPAT $CONFIG_MIPS64
  dep_bool 'Kernel support for o32 binaries' CONFIG_MIPS32_O32 $CONFIG_MIPS32_COMPAT
  dep_bool 'Kernel support for n32 binaries' CONFIG_MIPS32_N32 $CONFIG_MIPS32_COMPAT
-diff -urPX nopatch linux-2.4.26/arch/mips/defconfig linux/arch/mips/defconfig
---- linux-2.4.26/arch/mips/defconfig   Fri Feb 20 10:07:22 2004
-+++ linux/arch/mips/defconfig  Sat Apr 17 02:13:55 2004
-@@ -139,6 +139,7 @@
+Index: linux-2.4.35.4/arch/mips/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/defconfig    2007-12-15 05:19:44.814974898 +0100
++++ linux-2.4.35.4/arch/mips/defconfig 2007-12-15 05:19:53.155450196 +0100
+@@ -143,6 +143,7 @@
  # CONFIG_KCORE_AOUT is not set
  # CONFIG_BINFMT_AOUT is not set
  CONFIG_BINFMT_ELF=y
@@ -209,9 +224,10 @@ diff -urPX nopatch linux-2.4.26/arch/mips/defconfig linux/arch/mips/defconfig
  # CONFIG_MIPS32_COMPAT is not set
  # CONFIG_MIPS32_O32 is not set
  # CONFIG_MIPS32_N32 is not set
-diff -urPX nopatch linux-2.4.26/arch/mips/kernel/irixelf.c linux/arch/mips/kernel/irixelf.c
---- linux-2.4.26/arch/mips/kernel/irixelf.c    Mon Aug 25 11:44:40 2003
-+++ linux/arch/mips/kernel/irixelf.c   Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/mips/kernel/irixelf.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/irixelf.c     2007-12-15 05:19:41.626793215 +0100
++++ linux-2.4.35.4/arch/mips/kernel/irixelf.c  2007-12-15 05:19:53.155450196 +0100
 @@ -8,6 +8,7 @@
   * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
   */
@@ -234,7 +250,7 @@ diff -urPX nopatch linux-2.4.26/arch/mips/kernel/irixelf.c linux/arch/mips/kerne
        irix_core_dump, PAGE_SIZE
  };
  
-@@ -787,6 +793,7 @@
+@@ -794,6 +800,7 @@
        goto out;
  }
  
@@ -242,7 +258,7 @@ diff -urPX nopatch linux-2.4.26/arch/mips/kernel/irixelf.c linux/arch/mips/kerne
  /* This is really simpleminded and specialized - we are loading an
   * a.out library that is given an ELF header.
   */
-@@ -863,6 +870,7 @@
+@@ -873,6 +880,7 @@
        kfree(elf_phdata);
        return 0;
  }
@@ -250,10 +266,11 @@ diff -urPX nopatch linux-2.4.26/arch/mips/kernel/irixelf.c linux/arch/mips/kerne
  
  /* Called through irix_syssgi() to map an elf image given an FD,
   * a phdr ptr USER_PHDRP in userspace, and a count CNT telling how many
-diff -urPX nopatch linux-2.4.26/arch/mips64/defconfig linux/arch/mips64/defconfig
---- linux-2.4.26/arch/mips64/defconfig Fri Feb 20 10:07:24 2004
-+++ linux/arch/mips64/defconfig        Sat Apr 17 02:13:55 2004
-@@ -137,6 +137,7 @@
+Index: linux-2.4.35.4/arch/mips64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/defconfig  2007-12-15 05:19:44.874978317 +0100
++++ linux-2.4.35.4/arch/mips64/defconfig       2007-12-15 05:19:53.155450196 +0100
+@@ -147,6 +147,7 @@
  # CONFIG_KCORE_AOUT is not set
  # CONFIG_BINFMT_AOUT is not set
  CONFIG_BINFMT_ELF=y
@@ -261,9 +278,10 @@ diff -urPX nopatch linux-2.4.26/arch/mips64/defconfig linux/arch/mips64/defconfi
  CONFIG_MIPS32_COMPAT=y
  CONFIG_MIPS32_O32=y
  # CONFIG_MIPS32_N32 is not set
-diff -urPX nopatch linux-2.4.26/arch/parisc/config.in linux/arch/parisc/config.in
---- linux-2.4.26/arch/parisc/config.in Fri Feb 20 10:07:25 2004
-+++ linux/arch/parisc/config.in        Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/parisc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/parisc/config.in  2007-12-15 05:19:41.638793897 +0100
++++ linux-2.4.35.4/arch/parisc/config.in       2007-12-15 05:19:53.155450196 +0100
 @@ -89,6 +89,9 @@
  bool 'Sysctl support' CONFIG_SYSCTL
  define_bool CONFIG_KCORE_ELF y
@@ -274,9 +292,10 @@ diff -urPX nopatch linux-2.4.26/arch/parisc/config.in linux/arch/parisc/config.i
  tristate 'Kernel support for SOM binaries' CONFIG_BINFMT_SOM
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  
-diff -urPX nopatch linux-2.4.26/arch/parisc/defconfig linux/arch/parisc/defconfig
---- linux-2.4.26/arch/parisc/defconfig Fri Feb 20 10:07:25 2004
-+++ linux/arch/parisc/defconfig        Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/parisc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/parisc/defconfig  2007-12-15 05:19:41.646794355 +0100
++++ linux-2.4.35.4/arch/parisc/defconfig       2007-12-15 05:19:53.159450422 +0100
 @@ -56,6 +56,7 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
@@ -285,9 +304,10 @@ diff -urPX nopatch linux-2.4.26/arch/parisc/defconfig linux/arch/parisc/defconfi
  CONFIG_BINFMT_SOM=y
  # CONFIG_BINFMT_MISC is not set
  # CONFIG_PM is not set
-diff -urPX nopatch linux-2.4.26/arch/ppc/config.in linux/arch/ppc/config.in
---- linux-2.4.26/arch/ppc/config.in    Sat Apr 17 02:10:25 2004
-+++ linux/arch/ppc/config.in   Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc/config.in     2007-12-15 05:19:41.654794810 +0100
++++ linux-2.4.35.4/arch/ppc/config.in  2007-12-15 05:19:53.159450422 +0100
 @@ -384,6 +384,7 @@
  fi
  define_bool CONFIG_BINFMT_ELF y
@@ -296,9 +316,10 @@ diff -urPX nopatch linux-2.4.26/arch/ppc/config.in linux/arch/ppc/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
  
-diff -urPX nopatch linux-2.4.26/arch/ppc/defconfig linux/arch/ppc/defconfig
---- linux-2.4.26/arch/ppc/defconfig    Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc/defconfig   Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc/defconfig     2007-12-15 05:19:41.662795265 +0100
++++ linux-2.4.35.4/arch/ppc/defconfig  2007-12-15 05:19:53.159450422 +0100
 @@ -59,7 +59,8 @@
  CONFIG_KCORE_ELF=y
  CONFIG_BINFMT_ELF=y
@@ -309,9 +330,10 @@ diff -urPX nopatch linux-2.4.26/arch/ppc/defconfig linux/arch/ppc/defconfig
  # CONFIG_OOM_KILLER is not set
  CONFIG_PCI_NAMES=y
  CONFIG_HOTPLUG=y
-diff -urPX nopatch linux-2.4.26/arch/ppc64/config.in linux/arch/ppc64/config.in
---- linux-2.4.26/arch/ppc64/config.in  Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc64/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc64/config.in   2007-12-15 05:19:41.670795721 +0100
++++ linux-2.4.35.4/arch/ppc64/config.in        2007-12-15 05:19:53.159450422 +0100
 @@ -82,6 +82,9 @@
  fi
  
@@ -322,9 +344,10 @@ diff -urPX nopatch linux-2.4.26/arch/ppc64/config.in linux/arch/ppc64/config.in
  
  tristate 'Kernel support for 32 bit ELF binaries' CONFIG_BINFMT_ELF32
  
-diff -urPX nopatch linux-2.4.26/arch/ppc64/defconfig linux/arch/ppc64/defconfig
---- linux-2.4.26/arch/ppc64/defconfig  Fri Feb 20 10:07:25 2004
-+++ linux/arch/ppc64/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/ppc64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/ppc64/defconfig   2007-12-15 05:19:41.678796176 +0100
++++ linux-2.4.35.4/arch/ppc64/defconfig        2007-12-15 05:19:53.163450651 +0100
 @@ -56,6 +56,7 @@
  # CONFIG_BSD_PROCESS_ACCT is not set
  CONFIG_KCORE_ELF=y
@@ -333,9 +356,10 @@ diff -urPX nopatch linux-2.4.26/arch/ppc64/defconfig linux/arch/ppc64/defconfig
  CONFIG_BINFMT_ELF32=y
  # CONFIG_BINFMT_MISC is not set
  CONFIG_PCI_NAMES=y
-diff -urPX nopatch linux-2.4.26/arch/s390/config.in linux/arch/s390/config.in
---- linux-2.4.26/arch/s390/config.in   Fri Nov 28 18:26:19 2003
-+++ linux/arch/s390/config.in  Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390/config.in    2007-12-15 05:19:41.686796634 +0100
++++ linux-2.4.35.4/arch/s390/config.in 2007-12-15 05:19:53.163450651 +0100
 @@ -58,6 +58,9 @@
  bool 'Sysctl support' CONFIG_SYSCTL
  define_bool CONFIG_KCORE_ELF y
@@ -346,9 +370,10 @@ diff -urPX nopatch linux-2.4.26/arch/s390/config.in linux/arch/s390/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
  bool 'Pseudo page fault support' CONFIG_PFAULT
-diff -urPX nopatch linux-2.4.26/arch/s390/defconfig linux/arch/s390/defconfig
---- linux-2.4.26/arch/s390/defconfig   Fri Feb 20 10:07:26 2004
-+++ linux/arch/s390/defconfig  Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390/defconfig    2007-12-15 05:19:41.694797090 +0100
++++ linux-2.4.35.4/arch/s390/defconfig 2007-12-15 05:19:53.163450651 +0100
 @@ -46,6 +46,7 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
@@ -357,9 +382,10 @@ diff -urPX nopatch linux-2.4.26/arch/s390/defconfig linux/arch/s390/defconfig
  # CONFIG_BINFMT_MISC is not set
  # CONFIG_PROCESS_DEBUG is not set
  CONFIG_PFAULT=y
-diff -urPX nopatch linux-2.4.26/arch/s390x/config.in linux/arch/s390x/config.in
---- linux-2.4.26/arch/s390x/config.in  Fri Nov 28 18:26:19 2003
-+++ linux/arch/s390x/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390x/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390x/config.in   2007-12-15 05:19:41.698797316 +0100
++++ linux-2.4.35.4/arch/s390x/config.in        2007-12-15 05:19:53.163450651 +0100
 @@ -61,6 +61,9 @@
  bool 'Sysctl support' CONFIG_SYSCTL
  define_bool CONFIG_KCORE_ELF y
@@ -370,9 +396,10 @@ diff -urPX nopatch linux-2.4.26/arch/s390x/config.in linux/arch/s390x/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
  bool 'Pseudo page fault support' CONFIG_PFAULT
-diff -urPX nopatch linux-2.4.26/arch/s390x/defconfig linux/arch/s390x/defconfig
---- linux-2.4.26/arch/s390x/defconfig  Fri Feb 20 10:07:26 2004
-+++ linux/arch/s390x/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/s390x/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/s390x/defconfig   2007-12-15 05:19:41.706797774 +0100
++++ linux-2.4.35.4/arch/s390x/defconfig        2007-12-15 05:19:53.163450651 +0100
 @@ -47,6 +47,7 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
@@ -381,9 +408,10 @@ diff -urPX nopatch linux-2.4.26/arch/s390x/defconfig linux/arch/s390x/defconfig
  # CONFIG_BINFMT_MISC is not set
  # CONFIG_PROCESS_DEBUG is not set
  CONFIG_PFAULT=y
-diff -urPX nopatch linux-2.4.26/arch/sh/config.in linux/arch/sh/config.in
---- linux-2.4.26/arch/sh/config.in     Fri Feb 20 10:07:26 2004
-+++ linux/arch/sh/config.in    Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sh/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sh/config.in      2007-12-15 05:19:41.714798229 +0100
++++ linux-2.4.35.4/arch/sh/config.in   2007-12-15 05:19:53.163450651 +0100
 @@ -283,6 +283,9 @@
         A.OUT          CONFIG_KCORE_AOUT" ELF
  fi
@@ -394,9 +422,10 @@ diff -urPX nopatch linux-2.4.26/arch/sh/config.in linux/arch/sh/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  
  bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/sh/defconfig linux/arch/sh/defconfig
---- linux-2.4.26/arch/sh/defconfig     Fri Feb 20 10:07:26 2004
-+++ linux/arch/sh/defconfig    Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sh/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sh/defconfig      2007-12-15 05:19:41.722798685 +0100
++++ linux-2.4.35.4/arch/sh/defconfig   2007-12-15 05:19:53.167450880 +0100
 @@ -48,6 +48,7 @@
  CONFIG_KCORE_ELF=y
  # CONFIG_KCORE_AOUT is not set
@@ -405,9 +434,10 @@ diff -urPX nopatch linux-2.4.26/arch/sh/defconfig linux/arch/sh/defconfig
  # CONFIG_BINFMT_MISC is not set
  
  #
-diff -urPX nopatch linux-2.4.26/arch/sparc/config.in linux/arch/sparc/config.in
---- linux-2.4.26/arch/sparc/config.in  Fri Feb 20 10:07:26 2004
-+++ linux/arch/sparc/config.in Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sparc/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc/config.in   2007-12-15 05:19:41.730799140 +0100
++++ linux-2.4.35.4/arch/sparc/config.in        2007-12-15 05:19:53.167450880 +0100
 @@ -74,6 +74,9 @@
  fi
  tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
@@ -418,9 +448,10 @@ diff -urPX nopatch linux-2.4.26/arch/sparc/config.in linux/arch/sparc/config.in
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'SunOS binary emulation' CONFIG_SUNOS_EMUL
  bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
-diff -urPX nopatch linux-2.4.26/arch/sparc/defconfig linux/arch/sparc/defconfig
---- linux-2.4.26/arch/sparc/defconfig  Sat Apr 17 02:10:25 2004
-+++ linux/arch/sparc/defconfig Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/sparc/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc/defconfig   2007-12-15 05:19:41.738799596 +0100
++++ linux-2.4.35.4/arch/sparc/defconfig        2007-12-15 05:19:53.167450880 +0100
 @@ -49,9 +49,10 @@
  # CONFIG_BSD_PROCESS_ACCT is not set
  CONFIG_SYSCTL=y
@@ -434,10 +465,11 @@ diff -urPX nopatch linux-2.4.26/arch/sparc/defconfig linux/arch/sparc/defconfig
  CONFIG_SUNOS_EMUL=y
  # CONFIG_OOM_KILLER is not set
  
-diff -urPX nopatch linux-2.4.26/arch/sparc64/config.in linux/arch/sparc64/config.in
---- linux-2.4.26/arch/sparc64/config.in        Fri Feb 20 10:07:26 2004
-+++ linux/arch/sparc64/config.in       Sat Apr 17 02:13:55 2004
-@@ -77,6 +77,9 @@
+Index: linux-2.4.35.4/arch/sparc64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc64/config.in 2007-12-15 05:19:41.742799824 +0100
++++ linux-2.4.35.4/arch/sparc64/config.in      2007-12-15 05:19:53.167450880 +0100
+@@ -79,6 +79,9 @@
     bool '  Kernel support for 32-bit (ie. SunOS) a.out binaries' CONFIG_BINFMT_AOUT32
  fi
  bool 'Kernel support for 64-bit ELF binaries' CONFIG_BINFMT_ELF
@@ -447,10 +479,11 @@ diff -urPX nopatch linux-2.4.26/arch/sparc64/config.in linux/arch/sparc64/config
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  bool 'SunOS binary emulation' CONFIG_SUNOS_EMUL
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-diff -urPX nopatch linux-2.4.26/arch/sparc64/defconfig linux/arch/sparc64/defconfig
---- linux-2.4.26/arch/sparc64/defconfig        Sat Apr 17 02:10:26 2004
-+++ linux/arch/sparc64/defconfig       Sat Apr 17 02:13:55 2004
-@@ -56,7 +56,8 @@
+Index: linux-2.4.35.4/arch/sparc64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/sparc64/defconfig 2007-12-15 05:19:41.750800280 +0100
++++ linux-2.4.35.4/arch/sparc64/defconfig      2007-12-15 05:19:53.167450880 +0100
+@@ -70,7 +70,8 @@
  CONFIG_BINFMT_ELF32=y
  # CONFIG_BINFMT_AOUT32 is not set
  CONFIG_BINFMT_ELF=y
@@ -460,9 +493,10 @@ diff -urPX nopatch linux-2.4.26/arch/sparc64/defconfig linux/arch/sparc64/defcon
  # CONFIG_SUNOS_EMUL is not set
  CONFIG_SOLARIS_EMUL=m
  # CONFIG_OOM_KILLER is not set
-diff -urPX nopatch linux-2.4.26/arch/x86_64/config.in linux/arch/x86_64/config.in
---- linux-2.4.26/arch/x86_64/config.in Sat Apr 17 02:10:26 2004
-+++ linux/arch/x86_64/config.in        Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/x86_64/config.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/x86_64/config.in  2007-12-15 05:19:41.758800735 +0100
++++ linux-2.4.35.4/arch/x86_64/config.in       2007-12-15 05:19:53.171451107 +0100
 @@ -118,6 +118,9 @@
  fi
  #tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
@@ -473,9 +507,10 @@ diff -urPX nopatch linux-2.4.26/arch/x86_64/config.in linux/arch/x86_64/config.i
  tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
  
  bool 'Power Management support' CONFIG_PM
-diff -urPX nopatch linux-2.4.26/arch/x86_64/defconfig linux/arch/x86_64/defconfig
---- linux-2.4.26/arch/x86_64/defconfig Sat Apr 17 02:10:26 2004
-+++ linux/arch/x86_64/defconfig        Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/arch/x86_64/defconfig
+===================================================================
+--- linux-2.4.35.4.orig/arch/x86_64/defconfig  2007-12-15 05:19:41.766801193 +0100
++++ linux-2.4.35.4/arch/x86_64/defconfig       2007-12-15 05:19:53.171451107 +0100
 @@ -67,6 +67,7 @@
  CONFIG_SYSCTL=y
  CONFIG_KCORE_ELF=y
@@ -484,9 +519,10 @@ diff -urPX nopatch linux-2.4.26/arch/x86_64/defconfig linux/arch/x86_64/defconfi
  # CONFIG_BINFMT_MISC is not set
  CONFIG_PM=y
  CONFIG_IA32_EMULATION=y
-diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
---- linux-2.4.26/fs/binfmt_elf.c       Sat Apr 17 02:10:31 2004
-+++ linux/fs/binfmt_elf.c      Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/fs/binfmt_elf.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/binfmt_elf.c        2007-12-15 05:19:45.006985841 +0100
++++ linux-2.4.35.4/fs/binfmt_elf.c     2007-12-15 05:19:53.171451107 +0100
 @@ -9,6 +9,7 @@
   * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
   */
@@ -505,13 +541,11 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int);
  extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
  extern void dump_thread(struct pt_regs *, struct user *);
-@@ -73,8 +76,14 @@
- #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
+@@ -74,7 +77,13 @@
  #define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
  
--static struct linux_binfmt elf_format = {
+ static struct linux_binfmt elf_format = {
 -      NULL, THIS_MODULE, load_elf_binary, load_elf_library, elf_core_dump, ELF_EXEC_PAGESIZE
-+static struct linux_binfmt elf_format = {
 +      NULL, THIS_MODULE, load_elf_binary,
 +#ifdef CONFIG_BINFMT_ELF_AOUT
 +      load_elf_library,
@@ -521,8 +555,8 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
 +      elf_core_dump, ELF_EXEC_PAGESIZE
  };
  
- #define BAD_ADDR(x)   ((unsigned long)(x) > TASK_SIZE)
-@@ -369,6 +378,7 @@
+ #define BAD_ADDR(x)   ((unsigned long)(x) >= TASK_SIZE)
+@@ -404,6 +413,7 @@
        return error;
  }
  
@@ -530,7 +564,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  static unsigned long load_aout_interp(struct exec * interp_ex,
                             struct file * interpreter)
  {
-@@ -413,6 +423,7 @@
+@@ -451,6 +461,7 @@
  out:
        return elf_entry;
  }
@@ -538,7 +572,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  
  /*
   * These are the functions used to load ELF style executables and shared
-@@ -420,7 +431,9 @@
+@@ -458,7 +469,9 @@
   */
  
  #define INTERPRETER_NONE 0
@@ -548,7 +582,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  #define INTERPRETER_ELF 2
  
  
-@@ -444,7 +457,9 @@
+@@ -482,7 +495,9 @@
        struct elfhdr elf_ex;
        struct elfhdr interp_elf_ex;
        struct exec interp_ex;
@@ -558,7 +592,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
        struct files_struct *files;
        
        /* Get the exec-header */
-@@ -556,6 +571,7 @@
+@@ -612,6 +627,7 @@
  
        /* Some simple consistency checks for the interpreter */
        if (elf_interpreter) {
@@ -566,7 +600,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
                interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
  
                /* Now figure out which format our binary is */
-@@ -563,6 +579,9 @@
+@@ -619,6 +635,9 @@
                    (N_MAGIC(interp_ex) != ZMAGIC) &&
                    (N_MAGIC(interp_ex) != QMAGIC))
                        interpreter_type = INTERPRETER_ELF;
@@ -576,7 +610,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  
                if (memcmp(interp_elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
                        interpreter_type &= ~INTERPRETER_ELF;
-@@ -571,6 +590,7 @@
+@@ -627,6 +646,7 @@
                if (!interpreter_type)
                        goto out_free_dentry;
  
@@ -584,7 +618,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
                /* Make sure only one type was selected */
                if ((interpreter_type & INTERPRETER_ELF) &&
                     interpreter_type != INTERPRETER_ELF) {
-@@ -578,6 +598,7 @@
+@@ -634,6 +654,7 @@
                        // printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
                        interpreter_type = INTERPRETER_ELF;
                }
@@ -592,7 +626,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
                /* Verify the interpreter has a valid arch */
                if ((interpreter_type == INTERPRETER_ELF) &&
                    !elf_check_arch(&interp_elf_ex))
-@@ -590,6 +611,7 @@
+@@ -651,6 +672,7 @@
        /* OK, we are done with that, now set up the arg stuff,
           and then start this sucker up */
  
@@ -600,16 +634,16 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
        if (!bprm->sh_bang) {
                char * passed_p;
  
-@@ -605,6 +627,7 @@
-                 }
-               }
+@@ -669,6 +691,7 @@
+               /* Executables without an interpreter also need a personality  */
+               SET_PERSONALITY(elf_ex, ibcs2_interpreter);
        }
 +#endif
  
        /* Flush all traces of the currently running executable */
        retval = flush_old_exec(bprm);
-@@ -721,10 +744,12 @@
-       end_data += load_bias;
+@@ -817,10 +840,12 @@
+       padzero(elf_bss);
  
        if (elf_interpreter) {
 +#ifdef CONFIG_BINFMT_ELF_AOUT
@@ -621,7 +655,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
                        elf_entry = load_elf_interp(&interp_elf_ex,
                                                    interpreter,
                                                    &interp_load_addr);
-@@ -743,7 +768,9 @@
+@@ -849,7 +874,9 @@
  
        kfree(elf_phdata);
  
@@ -631,7 +665,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
                sys_close(elf_exec_fileno);
  
        set_binfmt(&elf_format);
-@@ -757,10 +784,14 @@
+@@ -863,10 +890,14 @@
                        &elf_ex,
                        load_addr, load_bias,
                        interp_load_addr,
@@ -646,7 +680,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
        current->mm->start_brk = current->mm->brk = elf_brk;
        current->mm->end_code = end_code;
        current->mm->start_code = start_code;
-@@ -838,9 +869,9 @@
+@@ -937,9 +968,9 @@
        goto out;
  }
  
@@ -657,7 +691,7 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  static int load_elf_library(struct file *file)
  {
        struct elf_phdr *elf_phdata;
-@@ -911,6 +942,7 @@
+@@ -1016,6 +1047,7 @@
  out:
        return error;
  }
@@ -665,9 +699,10 @@ diff -urPX nopatch linux-2.4.26/fs/binfmt_elf.c linux/fs/binfmt_elf.c
  
  /*
   * Note that some platforms still use traditional core dumps and not
-diff -urPX nopatch linux-2.4.26/fs/exec.c linux/fs/exec.c
---- linux-2.4.26/fs/exec.c     Fri Feb 20 10:07:36 2004
-+++ linux/fs/exec.c    Sat Apr 17 02:13:55 2004
+Index: linux-2.4.35.4/fs/exec.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/exec.c      2007-12-15 05:19:41.786802333 +0100
++++ linux-2.4.35.4/fs/exec.c   2007-12-15 05:19:53.175451333 +0100
 @@ -109,6 +109,7 @@
   */
  asmlinkage long sys_uselib(const char * library)
index fc4c29d27ed0e53384df6b630851a5654f1f5e04..7df826347124a4fd67aa6afef46516a7b1a6510d 100644 (file)
@@ -1,6 +1,8 @@
 packaging/utils/nattpatch 2.4
---- linux/include/net/sock.h   2002/02/06 15:25:10     1.1
-+++ linux/include/net/sock.h   2002/05/22 12:14:56
+Index: linux-2.4.35.4/include/net/sock.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/sock.h     2007-12-15 05:19:41.462783867 +0100
++++ linux-2.4.35.4/include/net/sock.h  2007-12-15 05:19:53.815487806 +0100
 @@ -488,7 +488,13 @@
        } bictcp;
  };
@@ -26,17 +28,22 @@ packaging/utils/nattpatch 2.4
  
        } tp_pinfo;
  
---- linux/net/Config.in.orig   Fri Feb  9 14:34:13 2001
-+++ linux/net/Config.in        Thu Feb 22 19:40:08 2001
-@@ -88,3 +88,5 @@
+Index: linux-2.4.35.4/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/Config.in  2007-12-15 05:19:41.470784323 +0100
++++ linux-2.4.35.4/net/Config.in       2007-12-15 05:19:53.819488035 +0100
+@@ -104,4 +104,6 @@
+ dep_tristate 'Packet Generator (USE WITH CAUTION)' CONFIG_NET_PKTGEN $CONFIG_PROC_FS
  endmenu
  
 +bool 'IPSEC NAT-Traversal' CONFIG_IPSEC_NAT_TRAVERSAL
 +
  endmenu
---- linux/net/ipv4/udp.c.1     Wed Jan 28 15:57:05 2004
-+++ linux/net/ipv4/udp.c       Wed Jan 28 15:58:56 2004
-@@ -787,6 +787,9 @@
+Index: linux-2.4.35.4/net/ipv4/udp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/udp.c 2007-12-15 05:19:41.482785007 +0100
++++ linux-2.4.35.4/net/ipv4/udp.c      2007-12-15 05:19:53.823488264 +0100
+@@ -860,6 +860,9 @@
  
  static int udp_queue_rcv_skb(struct sock * sk, struct sk_buff *skb)
  {
@@ -46,7 +53,7 @@ packaging/utils/nattpatch 2.4
        /*
         *      Charge it to the socket, dropping if the queue is full.
         */
-@@ -804,6 +807,40 @@
+@@ -877,6 +880,40 @@
        }
  #endif
  
@@ -87,7 +94,7 @@ packaging/utils/nattpatch 2.4
        if (sock_queue_rcv_skb(sk,skb)<0) {
                UDP_INC_STATS_BH(UdpInErrors);
                IP_INC_STATS_BH(IpInDiscards);
-@@ -1027,13 +1064,49 @@
+@@ -1100,13 +1137,49 @@
        return len;
  }
  
index 784b65e41c13569f3f0a80812821395dccf994b8..e87e0e9d58db43a8f095f720db52fe1968bec753 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux-2.4.26-pre5/Documentation/Configure.help linux-2.4.26-pre5-netdev-core/Documentation/Configure.help
---- linux-2.4.26-pre5/Documentation/Configure.help     Sat Mar 20 10:08:18 2004
-+++ linux-2.4.26-pre5-netdev-core/Documentation/Configure.help Sun Mar 21 10:16:14 2004
-@@ -10419,6 +10419,20 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:53.139449282 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:19:54.063501941 +0100
+@@ -10675,6 +10675,20 @@
  
    If you don't know what to use this for, you don't need it.
  
@@ -22,9 +23,10 @@ diff -urN linux-2.4.26-pre5/Documentation/Configure.help linux-2.4.26-pre5-netde
  Ethertap network tap (OBSOLETE)
  CONFIG_ETHERTAP
    If you say Y here (and have said Y to "Kernel/User network link
-diff -urN linux-2.4.26-pre5/drivers/net/Config.in linux-2.4.26-pre5-netdev-core/drivers/net/Config.in
---- linux-2.4.26-pre5/drivers/net/Config.in    Sat Mar 20 10:08:18 2004
-+++ linux-2.4.26-pre5-netdev-core/drivers/net/Config.in        Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in  2007-12-15 05:19:51.931380439 +0100
++++ linux-2.4.35.4/drivers/net/Config.in       2007-12-15 05:19:54.067502171 +0100
 @@ -8,6 +8,7 @@
  tristate 'Bonding driver support' CONFIG_BONDING
  tristate 'EQL (serial line load balancing) support' CONFIG_EQUALIZER
@@ -33,10 +35,11 @@ diff -urN linux-2.4.26-pre5/drivers/net/Config.in linux-2.4.26-pre5-netdev-core/
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
     tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP
  fi
-diff -urN linux-2.4.26-pre5/include/asm-alpha/signal.h linux-2.4.26-pre5-netdev-core/include/asm-alpha/signal.h
---- linux-2.4.26-pre5/include/asm-alpha/signal.h       Sat Dec  1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-alpha/signal.h   Sun Mar 21 10:16:14 2004
-@@ -121,7 +121,14 @@
+Index: linux-2.4.35.4/include/asm-alpha/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-alpha/signal.h     2007-12-15 05:19:41.318775660 +0100
++++ linux-2.4.35.4/include/asm-alpha/signal.h  2007-12-15 05:19:54.067502171 +0100
+@@ -121,8 +121,15 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x40000000
@@ -46,15 +49,17 @@ diff -urN linux-2.4.26-pre5/include/asm-alpha/signal.h linux-2.4.26-pre5-netdev-
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          1  /* for blocking signals */
  #define SIG_UNBLOCK        2  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-arm/signal.h linux-2.4.26-pre5-netdev-core/include/asm-arm/signal.h
---- linux-2.4.26-pre5/include/asm-arm/signal.h Sat Sep 13 07:57:29 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-arm/signal.h     Sun Mar 21 10:16:14 2004
-@@ -125,7 +125,14 @@
+ #define SIG_SETMASK        3  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-arm/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-arm/signal.h       2007-12-15 05:19:41.326776118 +0100
++++ linux-2.4.35.4/include/asm-arm/signal.h    2007-12-15 05:19:54.067502171 +0100
+@@ -125,8 +125,15 @@
  #define SA_PROBE              0x80000000
  #define SA_SAMPLE_RANDOM      0x10000000
  #define SA_SHIRQ              0x04000000
@@ -64,15 +69,17 @@ diff -urN linux-2.4.26-pre5/include/asm-arm/signal.h linux-2.4.26-pre5-netdev-co
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0  /* for blocking signals */
  #define SIG_UNBLOCK        1  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-cris/signal.h linux-2.4.26-pre5-netdev-core/include/asm-cris/signal.h
---- linux-2.4.26-pre5/include/asm-cris/signal.h        Sat Dec  1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-cris/signal.h    Sun Mar 21 10:16:14 2004
-@@ -120,7 +120,14 @@
+ #define SIG_SETMASK        2  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-cris/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-cris/signal.h      2007-12-15 05:19:41.334776573 +0100
++++ linux-2.4.35.4/include/asm-cris/signal.h   2007-12-15 05:19:54.071502397 +0100
+@@ -120,8 +120,15 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x04000000
@@ -82,15 +89,17 @@ diff -urN linux-2.4.26-pre5/include/asm-cris/signal.h linux-2.4.26-pre5-netdev-c
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0  /* for blocking signals */
  #define SIG_UNBLOCK        1  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-i386/signal.h linux-2.4.26-pre5-netdev-core/include/asm-i386/signal.h
---- linux-2.4.26-pre5/include/asm-i386/signal.h        Sun Mar 21 00:00:43 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-i386/signal.h    Sun Mar 21 10:16:14 2004
-@@ -119,7 +119,14 @@
+ #define SIG_SETMASK        2  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-i386/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-i386/signal.h      2007-12-15 05:19:41.338776800 +0100
++++ linux-2.4.35.4/include/asm-i386/signal.h   2007-12-15 05:19:54.071502397 +0100
+@@ -119,8 +119,15 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x04000000
@@ -100,14 +109,16 @@ diff -urN linux-2.4.26-pre5/include/asm-i386/signal.h linux-2.4.26-pre5-netdev-c
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0  /* for blocking signals */
  #define SIG_UNBLOCK        1  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-ia64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-ia64/signal.h
---- linux-2.4.26-pre5/include/asm-ia64/signal.h        Sat Mar 20 10:08:20 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-ia64/signal.h    Sun Mar 21 10:16:14 2004
+ #define SIG_SETMASK        2  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-ia64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ia64/signal.h      2007-12-15 05:19:41.350777484 +0100
++++ linux-2.4.35.4/include/asm-ia64/signal.h   2007-12-15 05:19:54.071502397 +0100
 @@ -117,6 +117,12 @@
  #define SA_SHIRQ              0x04000000
  #define SA_PERCPU_IRQ         0x02000000
@@ -121,10 +132,11 @@ diff -urN linux-2.4.26-pre5/include/asm-ia64/signal.h linux-2.4.26-pre5-netdev-c
  #endif /* __KERNEL__ */
  
  #define SIG_BLOCK          0  /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-m68k/signal.h linux-2.4.26-pre5-netdev-core/include/asm-m68k/signal.h
---- linux-2.4.26-pre5/include/asm-m68k/signal.h        Fri Feb 20 07:38:33 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-m68k/signal.h    Sun Mar 21 10:16:14 2004
-@@ -116,7 +116,14 @@
+Index: linux-2.4.35.4/include/asm-m68k/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-m68k/signal.h      2007-12-15 05:19:41.358777939 +0100
++++ linux-2.4.35.4/include/asm-m68k/signal.h   2007-12-15 05:19:54.071502397 +0100
+@@ -116,8 +116,15 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x04000000
@@ -134,14 +146,16 @@ diff -urN linux-2.4.26-pre5/include/asm-m68k/signal.h linux-2.4.26-pre5-netdev-c
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0  /* for blocking signals */
  #define SIG_UNBLOCK        1  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-mips/signal.h linux-2.4.26-pre5-netdev-core/include/asm-mips/signal.h
---- linux-2.4.26-pre5/include/asm-mips/signal.h        Sat Sep 13 07:57:31 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-mips/signal.h    Sun Mar 21 10:16:14 2004
+ #define SIG_SETMASK        2  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-mips/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/signal.h      2007-12-15 05:19:41.366778397 +0100
++++ linux-2.4.35.4/include/asm-mips/signal.h   2007-12-15 05:19:54.075502626 +0100
 @@ -111,6 +111,12 @@
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x02000000
@@ -155,9 +169,10 @@ diff -urN linux-2.4.26-pre5/include/asm-mips/signal.h linux-2.4.26-pre5-netdev-c
  #endif /* __KERNEL__ */
  
  #define SIG_BLOCK     1       /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-mips64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-mips64/signal.h
---- linux-2.4.26-pre5/include/asm-mips64/signal.h      Sat Sep 13 07:57:32 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-mips64/signal.h  Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-mips64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/signal.h    2007-12-15 05:19:41.374778853 +0100
++++ linux-2.4.35.4/include/asm-mips64/signal.h 2007-12-15 05:19:54.075502626 +0100
 @@ -119,6 +119,12 @@
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x02000000
@@ -171,9 +186,10 @@ diff -urN linux-2.4.26-pre5/include/asm-mips64/signal.h linux-2.4.26-pre5-netdev
  #endif /* __KERNEL__ */
  
  #define SIG_BLOCK     1       /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-parisc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-parisc/signal.h
---- linux-2.4.26-pre5/include/asm-parisc/signal.h      Sun Jan 11 18:48:21 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-parisc/signal.h  Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-parisc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-parisc/signal.h    2007-12-15 05:19:41.382779308 +0100
++++ linux-2.4.35.4/include/asm-parisc/signal.h 2007-12-15 05:19:54.075502626 +0100
 @@ -100,6 +100,12 @@
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x04000000
@@ -187,9 +203,10 @@ diff -urN linux-2.4.26-pre5/include/asm-parisc/signal.h linux-2.4.26-pre5-netdev
  #endif /* __KERNEL__ */
  
  #define SIG_BLOCK          0  /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-ppc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-ppc/signal.h
---- linux-2.4.26-pre5/include/asm-ppc/signal.h Sat Sep 13 07:57:32 2003
-+++ linux-2.4.26-pre5-netdev-core/include/asm-ppc/signal.h     Sun Mar 21 10:16:14 2004
+Index: linux-2.4.35.4/include/asm-ppc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-ppc/signal.h       2007-12-15 05:19:41.390779764 +0100
++++ linux-2.4.35.4/include/asm-ppc/signal.h    2007-12-15 05:19:54.075502626 +0100
 @@ -111,6 +111,13 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
@@ -204,10 +221,11 @@ diff -urN linux-2.4.26-pre5/include/asm-ppc/signal.h linux-2.4.26-pre5-netdev-co
  #endif /* __KERNEL__ */
  
  #define SIG_BLOCK          0  /* for blocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-s390/signal.h linux-2.4.26-pre5-netdev-core/include/asm-s390/signal.h
---- linux-2.4.26-pre5/include/asm-s390/signal.h        Fri Feb 20 07:38:34 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-s390/signal.h    Sun Mar 21 10:16:14 2004
-@@ -129,7 +129,14 @@
+Index: linux-2.4.35.4/include/asm-s390/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390/signal.h      2007-12-15 05:19:41.398780219 +0100
++++ linux-2.4.35.4/include/asm-s390/signal.h   2007-12-15 05:19:54.075502626 +0100
+@@ -129,8 +129,15 @@
  #define SA_SHIRQ                0x04000000
  #define SA_DOPATHGROUP          0x00100000
  #define SA_FORCE                0x00200000
@@ -217,15 +235,17 @@ diff -urN linux-2.4.26-pre5/include/asm-s390/signal.h linux-2.4.26-pre5-netdev-c
 +#else
 +#define SA_NET_RANDOM         0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0    /* for blocking signals */
  #define SIG_UNBLOCK        1    /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-s390x/signal.h linux-2.4.26-pre5-netdev-core/include/asm-s390x/signal.h
---- linux-2.4.26-pre5/include/asm-s390x/signal.h       Fri Feb 20 07:38:34 2004
-+++ linux-2.4.26-pre5-netdev-core/include/asm-s390x/signal.h   Sun Mar 21 10:16:14 2004
-@@ -129,7 +129,14 @@
+ #define SIG_SETMASK        2    /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-s390x/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-s390x/signal.h     2007-12-15 05:19:41.406780677 +0100
++++ linux-2.4.35.4/include/asm-s390x/signal.h  2007-12-15 05:19:54.079502852 +0100
+@@ -129,8 +129,15 @@
  #define SA_SHIRQ                0x04000000
  #define SA_DOPATHGROUP          0x00100000
  #define SA_FORCE                0x00200000
@@ -235,15 +255,17 @@ diff -urN linux-2.4.26-pre5/include/asm-s390x/signal.h linux-2.4.26-pre5-netdev-
 +#else
 +#define SA_NET_RANDOM         0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0    /* for blocking signals */
  #define SIG_UNBLOCK        1    /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-sh/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sh/signal.h
---- linux-2.4.26-pre5/include/asm-sh/signal.h  Sat Dec  1 18:27:13 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sh/signal.h      Sun Mar 21 10:16:14 2004
-@@ -107,7 +107,14 @@
+ #define SIG_SETMASK        2    /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-sh/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sh/signal.h        2007-12-15 05:19:41.414781133 +0100
++++ linux-2.4.35.4/include/asm-sh/signal.h     2007-12-15 05:19:54.079502852 +0100
+@@ -107,8 +107,15 @@
  #define SA_PROBE              SA_ONESHOT
  #define SA_SAMPLE_RANDOM      SA_RESTART
  #define SA_SHIRQ              0x04000000
@@ -253,15 +275,17 @@ diff -urN linux-2.4.26-pre5/include/asm-sh/signal.h linux-2.4.26-pre5-netdev-cor
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  #define SIG_BLOCK          0  /* for blocking signals */
  #define SIG_UNBLOCK        1  /* for unblocking signals */
-diff -urN linux-2.4.26-pre5/include/asm-sparc/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sparc/signal.h
---- linux-2.4.26-pre5/include/asm-sparc/signal.h       Sat Dec  1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sparc/signal.h   Sun Mar 21 10:16:14 2004
-@@ -176,7 +176,14 @@
+ #define SIG_SETMASK        2  /* for setting the signal mask */
+Index: linux-2.4.35.4/include/asm-sparc/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc/signal.h     2007-12-15 05:19:41.422781588 +0100
++++ linux-2.4.35.4/include/asm-sparc/signal.h  2007-12-15 05:19:54.079502852 +0100
+@@ -176,8 +176,15 @@
  #define SA_PROBE SA_ONESHOT
  #define SA_SAMPLE_RANDOM SA_RESTART
  #define SA_STATIC_ALLOC               0x80
@@ -271,15 +295,17 @@ diff -urN linux-2.4.26-pre5/include/asm-sparc/signal.h linux-2.4.26-pre5-netdev-
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  /* Type of a signal handler.  */
  #ifdef __KERNEL__
-diff -urN linux-2.4.26-pre5/include/asm-sparc64/signal.h linux-2.4.26-pre5-netdev-core/include/asm-sparc64/signal.h
---- linux-2.4.26-pre5/include/asm-sparc64/signal.h     Sat Dec  1 18:27:14 2001
-+++ linux-2.4.26-pre5-netdev-core/include/asm-sparc64/signal.h Sun Mar 21 10:16:14 2004
-@@ -192,7 +192,14 @@
+ typedef void (*__sighandler_t)(int, int, struct sigcontext *, char *);
+Index: linux-2.4.35.4/include/asm-sparc64/signal.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-sparc64/signal.h   2007-12-15 05:19:41.430782043 +0100
++++ linux-2.4.35.4/include/asm-sparc64/signal.h        2007-12-15 05:19:54.079502852 +0100
+@@ -192,8 +192,15 @@
  #define SA_PROBE SA_ONESHOT
  #define SA_SAMPLE_RANDOM SA_RESTART
  #define SA_STATIC_ALLOC               0x80
@@ -289,8 +315,9 @@ diff -urN linux-2.4.26-pre5/include/asm-sparc64/signal.h linux-2.4.26-pre5-netde
 +#else
 +#define SA_NET_RANDOM 0
  #endif
-+
-+#endif /* __KERNEL__ */
  
++#endif /* __KERNEL__ */
++
  /* Type of a signal handler.  */
  #ifdef __KERNEL__
+ typedef void (*__sighandler_t)(int, struct sigcontext *);
index c5d86349d4436318389bebadb67f2b893a74bb42..953154959b69c4684fa201fdaf70ce95405fc343 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/net/core/dev.c   2005-07-05 16:42:36.000000000 +0200
-+++ linux.dev/net/core/dev.c   2005-07-08 19:32:46.000000000 +0200
+Index: linux-2.4.35.4/net/core/dev.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/dev.c 2007-12-15 05:19:51.651364482 +0100
++++ linux-2.4.35.4/net/core/dev.c      2007-12-15 05:19:54.483525877 +0100
 @@ -1289,6 +1289,19 @@
        local_irq_save(flags);
  
index 1b9871788280d9feb38b371b853a00fd8d3551b1..853b776f1e58b3ba2707d1e7f59516ce04d0b3ad 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux.old/arch/mips/kernel/mips_ksyms.c linux.dev/arch/mips/kernel/mips_ksyms.c
---- linux.old/arch/mips/kernel/mips_ksyms.c    2004-02-18 14:36:30.000000000 +0100
-+++ linux.dev/arch/mips/kernel/mips_ksyms.c    2005-10-24 14:21:53.702396250 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/mips_ksyms.c  2007-12-15 05:19:41.186768139 +0100
++++ linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c       2007-12-15 05:19:54.695537960 +0100
 @@ -30,6 +30,10 @@
  #include <asm/floppy.h>
  #endif
@@ -26,9 +27,10 @@ diff -Nur linux.old/arch/mips/kernel/mips_ksyms.c linux.dev/arch/mips/kernel/mip
  /* Networking helper routines. */
  EXPORT_SYMBOL(csum_partial_copy);
  
-diff -Nur linux.old/arch/mips/lib/Makefile linux.dev/arch/mips/lib/Makefile
---- linux.old/arch/mips/lib/Makefile   2004-02-18 14:36:30.000000000 +0100
-+++ linux.dev/arch/mips/lib/Makefile   2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/lib/Makefile 2007-12-15 05:19:41.194768595 +0100
++++ linux-2.4.35.4/arch/mips/lib/Makefile      2007-12-15 05:19:54.699538186 +0100
 @@ -9,7 +9,8 @@
  obj-y                         += csum_partial.o csum_partial_copy.o \
                                   promlib.o rtc-std.o rtc-no.o memcpy.o \
@@ -39,9 +41,10 @@ diff -Nur linux.old/arch/mips/lib/Makefile linux.dev/arch/mips/lib/Makefile
  
  export-objs                   := rtc-std.o rtc-no.o
  
-diff -Nur linux.old/arch/mips/lib/ashldi3.c linux.dev/arch/mips/lib/ashldi3.c
---- linux.old/arch/mips/lib/ashldi3.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/ashldi3.c  2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ashldi3.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/ashldi3.c     2007-12-15 05:19:54.707538644 +0100
 @@ -0,0 +1,62 @@
 +/* ashrdi3.c extracted from gcc-2.95.2/libgcc2.c which is: */
 +/* Copyright (C) 1989, 92-98, 1999 Free Software Foundation, Inc.
@@ -105,9 +108,10 @@ diff -Nur linux.old/arch/mips/lib/ashldi3.c linux.dev/arch/mips/lib/ashldi3.c
 +
 +  return w.ll;
 +}
-diff -Nur linux.old/arch/mips/lib/ashrdi3.c linux.dev/arch/mips/lib/ashrdi3.c
---- linux.old/arch/mips/lib/ashrdi3.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/ashrdi3.c  2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/ashrdi3.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/ashrdi3.c     2007-12-15 05:19:54.711538870 +0100
 @@ -0,0 +1,63 @@
 +/* ashrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
 +/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
@@ -172,9 +176,10 @@ diff -Nur linux.old/arch/mips/lib/ashrdi3.c linux.dev/arch/mips/lib/ashrdi3.c
 +
 +  return w.ll;
 +}
-diff -Nur linux.old/arch/mips/lib/lshrdi3.c linux.dev/arch/mips/lib/lshrdi3.c
---- linux.old/arch/mips/lib/lshrdi3.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/lshrdi3.c  2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/lshrdi3.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/lshrdi3.c     2007-12-15 05:19:54.715539100 +0100
 @@ -0,0 +1,62 @@
 +/* lshrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */
 +/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
@@ -238,9 +243,10 @@ diff -Nur linux.old/arch/mips/lib/lshrdi3.c linux.dev/arch/mips/lib/lshrdi3.c
 +
 +  return w.ll;
 +}
-diff -Nur linux.old/arch/mips/lib/muldi3.c linux.dev/arch/mips/lib/muldi3.c
---- linux.old/arch/mips/lib/muldi3.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/arch/mips/lib/muldi3.c   2005-10-24 14:21:53.774400750 +0200
+Index: linux-2.4.35.4/arch/mips/lib/muldi3.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/arch/mips/lib/muldi3.c      2007-12-15 05:19:54.715539100 +0100
 @@ -0,0 +1,63 @@
 +/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and 
 +                         gcc-2.7.2.3/longlong.h which is: */
@@ -305,9 +311,10 @@ diff -Nur linux.old/arch/mips/lib/muldi3.c linux.dev/arch/mips/lib/muldi3.c
 +
 +  return w.ll;
 +}
-diff -Nur linux.old/fs/cifs/cifsfs.c linux.dev/fs/cifs/cifsfs.c
---- linux.old/fs/cifs/cifsfs.c 2005-10-24 13:48:27.599659000 +0200
-+++ linux.dev/fs/cifs/cifsfs.c 2005-10-24 14:25:06.526447000 +0200
+Index: linux-2.4.35.4/fs/cifs/cifsfs.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/cifs/cifsfs.c       2007-12-15 05:19:52.279400271 +0100
++++ linux-2.4.35.4/fs/cifs/cifsfs.c    2007-12-15 05:19:54.715539100 +0100
 @@ -50,8 +50,6 @@
  static struct quotactl_ops cifs_quotactl_ops;
  #endif
@@ -317,9 +324,10 @@ diff -Nur linux.old/fs/cifs/cifsfs.c linux.dev/fs/cifs/cifsfs.c
  int cifsFYI = 0;
  int cifsERROR = 1;
  int traceSMB = 0;
-diff -Nur linux.old/include/asm-mips/uaccess.h linux.dev/include/asm-mips/uaccess.h
---- linux.old/include/asm-mips/uaccess.h       2005-01-19 15:10:12.000000000 +0100
-+++ linux.dev/include/asm-mips/uaccess.h       2005-10-24 14:11:48.563214250 +0200
+Index: linux-2.4.35.4/include/asm-mips/uaccess.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/uaccess.h     2007-12-15 05:19:41.238771101 +0100
++++ linux-2.4.35.4/include/asm-mips/uaccess.h  2007-12-15 05:19:54.715539100 +0100
 @@ -149,7 +149,7 @@
   * Returns zero on success, or -EFAULT on error.
   */
index 5b64310738e8138468be7593fa16fa256b89c387..30f984476c9838034dda4d6ae8efaee291e672bc 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/arch/mips/kernel/time.c linux.dev/arch/mips/kernel/time.c
---- linux.old/arch/mips/kernel/time.c  2005-11-14 11:06:38.661262000 +0100
-+++ linux.dev/arch/mips/kernel/time.c  2005-11-15 20:02:50.059676750 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/time.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/time.c        2007-12-15 05:19:41.138765402 +0100
++++ linux-2.4.35.4/arch/mips/kernel/time.c     2007-12-15 05:19:55.011555967 +0100
 @@ -151,6 +151,27 @@
  unsigned int (*mips_hpt_read)(void);
  void (*mips_hpt_init)(unsigned int);
@@ -35,9 +36,10 @@ diff -urN linux.old/arch/mips/kernel/time.c linux.dev/arch/mips/kernel/time.c
  EXPORT_SYMBOL(rtc_get_time);
 +EXPORT_SYMBOL(get_htscl);
 +EXPORT_SYMBOL(get_tscll);
-diff -urN linux.old/include/asm-mips/timex.h linux.dev/include/asm-mips/timex.h
---- linux.old/include/asm-mips/timex.h 2005-11-14 11:06:38.685263500 +0100
-+++ linux.dev/include/asm-mips/timex.h 2005-11-14 11:02:21.069163500 +0100
+Index: linux-2.4.35.4/include/asm-mips/timex.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/timex.h       2007-12-15 05:19:41.146765860 +0100
++++ linux-2.4.35.4/include/asm-mips/timex.h    2007-12-15 05:19:55.015556197 +0100
 @@ -31,6 +31,19 @@
        return read_c0_count();
  }
@@ -58,9 +60,10 @@ diff -urN linux.old/include/asm-mips/timex.h linux.dev/include/asm-mips/timex.h
  #define vxtime_lock()         do {} while (0)
  #define vxtime_unlock()               do {} while (0)
  
-diff -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h
---- linux.old/include/net/pkt_sched.h  2005-11-14 11:06:38.709265000 +0100
-+++ linux.dev/include/net/pkt_sched.h  2005-11-14 11:02:21.069163500 +0100
+Index: linux-2.4.35.4/include/net/pkt_sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/pkt_sched.h        2007-12-15 05:19:41.154766315 +0100
++++ linux-2.4.35.4/include/net/pkt_sched.h     2007-12-15 05:19:55.023556652 +0100
 @@ -5,7 +5,11 @@
  #define PSCHED_JIFFIES                2
  #define PSCHED_CPU            3
@@ -73,7 +76,7 @@ diff -urN linux.old/include/net/pkt_sched.h linux.dev/include/net/pkt_sched.h
  
  #include <linux/config.h>
  #include <linux/types.h>
-@@ -271,7 +275,7 @@
+@@ -261,7 +265,7 @@
  #define PSCHED_US2JIFFIE(delay) (((delay)+psched_clock_per_hz-1)/psched_clock_per_hz)
  #define PSCHED_JIFFIE2US(delay) ((delay)*psched_clock_per_hz)
  
index a873a3882b24ed429d476ab151a4637953d5e1d8..4bb25a1046e547bca9b7f64441b4af93a795d57e 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/arch/mips/kernel/branch.c        2006-12-23 21:34:20.000000000 +0100
-+++ linux.dev/arch/mips/kernel/branch.c        2007-01-24 18:05:34.000000000 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/branch.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/branch.c      2007-12-15 05:19:41.102763351 +0100
++++ linux-2.4.35.4/arch/mips/kernel/branch.c   2007-12-15 05:19:55.259570100 +0100
 @@ -170,7 +170,7 @@
                bit = (insn.i_format.rt >> 2);
                bit += (bit != 0);
index c9833e2a30f64180f23337861e481ad4cdf414bc..353e304df73948e741efb2ed38ce2fc0be1b5010 100644 (file)
@@ -1,6 +1,7 @@
-diff -rNu linux-2.4.29.old/Documentation/isdn/CREDITS linux-2.4.29/Documentation/isdn/CREDITS
---- linux-2.4.29.old/Documentation/isdn/CREDITS        2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/CREDITS    2005-03-22 15:06:50.246454160 +0100
+Index: linux-2.4.35.4/Documentation/isdn/CREDITS
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/CREDITS     2007-12-15 05:19:39.346663275 +0100
++++ linux-2.4.35.4/Documentation/isdn/CREDITS  2007-12-15 05:19:55.467581957 +0100
 @@ -37,7 +37,7 @@
  Andreas Kool (akool@Kool.f.EUnet.de)
    For contribution of the isdnlog/isdnrep-tool
@@ -10,9 +11,10 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/CREDITS linux-2.4.29/Documentation
    For lot of new ideas and the pcbit driver.
  
  Eberhard Moenkeberg (emoenke@gwdg.de)
-diff -rNu linux-2.4.29.old/Documentation/isdn/HiSax.cert linux-2.4.29/Documentation/isdn/HiSax.cert
---- linux-2.4.29.old/Documentation/isdn/HiSax.cert     2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/HiSax.cert 2005-03-22 15:06:50.264451424 +0100
+Index: linux-2.4.35.4/Documentation/isdn/HiSax.cert
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/HiSax.cert  2007-12-15 05:19:39.354663733 +0100
++++ linux-2.4.35.4/Documentation/isdn/HiSax.cert       2007-12-15 05:19:55.471582183 +0100
 @@ -68,6 +68,8 @@
  drivers/isdn/hisax/elsa.c
  drivers/isdn/hisax/diva.c
@@ -22,9 +24,10 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/HiSax.cert linux-2.4.29/Documentat
  
  Please send any changes, bugfixes and patches to me rather than implementing
  them directly into the HiSax sources.
-diff -rNu linux-2.4.29.old/Documentation/isdn/INTERFACE linux-2.4.29/Documentation/isdn/INTERFACE
---- linux-2.4.29.old/Documentation/isdn/INTERFACE      2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/INTERFACE  2005-03-22 15:06:50.288447776 +0100
+Index: linux-2.4.35.4/Documentation/isdn/INTERFACE
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/INTERFACE   2007-12-15 05:19:39.362664189 +0100
++++ linux-2.4.35.4/Documentation/isdn/INTERFACE        2007-12-15 05:19:55.479582638 +0100
 @@ -1,4 +1,4 @@
 -$Id: INTERFACE,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: INTERFACE,v 1.17 2002/01/31 13:26:35 keil Exp $
@@ -63,18 +66,20 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/INTERFACE linux-2.4.29/Documentati
 +      command     = ISDN_STAT_PROCEED
 +      arg         = channel-number, locally to the driver. (starting with 0)
 +
-diff -rNu linux-2.4.29.old/Documentation/isdn/INTERFACE.fax linux-2.4.29/Documentation/isdn/INTERFACE.fax
---- linux-2.4.29.old/Documentation/isdn/INTERFACE.fax  2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/INTERFACE.fax      2005-03-22 15:06:50.312444128 +0100
+Index: linux-2.4.35.4/Documentation/isdn/INTERFACE.fax
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/INTERFACE.fax       2007-12-15 05:19:39.366664415 +0100
++++ linux-2.4.35.4/Documentation/isdn/INTERFACE.fax    2007-12-15 05:19:55.483582867 +0100
 @@ -1,4 +1,4 @@
 -$Id: INTERFACE.fax,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: INTERFACE.fax,v 1.2 2000/08/06 09:22:50 armin Exp $
  
  
  Description of the fax-subinterface between linklevel and hardwarelevel of 
-diff -rNu linux-2.4.29.old/Documentation/isdn/README linux-2.4.29/Documentation/isdn/README
---- linux-2.4.29.old/Documentation/isdn/README 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README     2005-03-22 15:06:50.340439872 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README      2007-12-15 05:19:39.374664873 +0100
++++ linux-2.4.35.4/Documentation/isdn/README   2007-12-15 05:19:55.487583097 +0100
 @@ -278,6 +278,12 @@
                                        1 = Add CPN to FCON message on
                              Bit 2:    0 = Add CDN to RING/FCON message off
@@ -88,9 +93,10 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/README linux-2.4.29/Documentation/
  
    Last but not least a (at the moment fairly primitive) device to request
    the line-status (/dev/isdninfo) is made available.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.HiSax linux-2.4.29/Documentation/isdn/README.HiSax
---- linux-2.4.29.old/Documentation/isdn/README.HiSax   2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.HiSax       2005-03-22 15:06:50.372435008 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.HiSax
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.HiSax        2007-12-15 05:19:39.382665329 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.HiSax     2007-12-15 05:19:55.487583097 +0100
 @@ -41,10 +41,9 @@
  ELSA Quickstep 3000PCI
  ELSA PCMCIA
@@ -182,63 +188,70 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/README.HiSax linux-2.4.29/Document
  
  Running the driver
  ------------------
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.act2000 linux-2.4.29/Documentation/isdn/README.act2000
---- linux-2.4.29.old/Documentation/isdn/README.act2000 2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.act2000     2005-03-22 15:06:50.388432576 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.act2000
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.act2000      2007-12-15 05:19:39.390665784 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.act2000   2007-12-15 05:19:55.487583097 +0100
 @@ -1,4 +1,4 @@
 -$Id: README.act2000,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: README.act2000,v 1.3 2000/08/06 09:22:51 armin Exp $
  
  This document describes the ACT2000 driver for the
  IBM Active 2000 ISDN card.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.audio linux-2.4.29/Documentation/isdn/README.audio
---- linux-2.4.29.old/Documentation/isdn/README.audio   2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.audio       2005-03-22 15:06:50.404430144 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.audio
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.audio        2007-12-15 05:19:39.394666013 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.audio     2007-12-15 05:19:55.487583097 +0100
 @@ -1,4 +1,4 @@
 -$Id: README.audio,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: README.audio,v 1.8 1999/07/11 17:17:29 armin Exp $
  
  ISDN subsystem for Linux.
    Description of audio mode.
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.eicon linux-2.4.29/Documentation/isdn/README.eicon
---- linux-2.4.29.old/Documentation/isdn/README.eicon   2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.eicon       2005-03-22 15:06:50.479418744 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.eicon
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.eicon        2007-12-15 05:19:39.402666468 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.eicon     2007-12-15 05:19:55.487583097 +0100
 @@ -1,4 +1,4 @@
 -$Id: README.eicon,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: README.eicon,v 1.10 2000/08/13 12:19:15 armin Exp $
  
  (c) 1999,2000 Armin Schindler (mac@melware.de)
  (c) 1999,2000 Cytronics & Melware (info@melware.de)
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.hysdn linux-2.4.29/Documentation/isdn/README.hysdn
---- linux-2.4.29.old/Documentation/isdn/README.hysdn   2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.hysdn       2005-03-22 15:06:50.522412208 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.hysdn
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.hysdn        2007-12-15 05:19:39.410666924 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.hysdn     2007-12-15 05:19:55.491583323 +0100
 @@ -1,4 +1,4 @@
 -$Id: README.hysdn,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: README.hysdn,v 1.3.6.1 2001/02/10 14:41:19 kai Exp $
  The hysdn driver has been written by
  by Werner Cornelius (werner@isdn4linux.de or werner@titro.de) 
  for Hypercope GmbH Aachen Germany. Hypercope agreed to publish this driver
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.icn linux-2.4.29/Documentation/isdn/README.icn
---- linux-2.4.29.old/Documentation/isdn/README.icn     2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.icn 2005-03-22 15:06:50.550407952 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.icn
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.icn  2007-12-15 05:19:39.418667379 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.icn       2007-12-15 05:19:55.491583323 +0100
 @@ -1,4 +1,4 @@
 -$Id: README.icn,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +$Id: README.icn,v 1.7 2000/08/06 09:22:51 armin Exp $
  
  You can get the ICN-ISDN-card from:
  
-diff -rNu linux-2.4.29.old/Documentation/isdn/README.pcbit linux-2.4.29/Documentation/isdn/README.pcbit
---- linux-2.4.29.old/Documentation/isdn/README.pcbit   2005-03-22 14:48:26.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/README.pcbit       2005-03-22 15:06:50.567405368 +0100
+Index: linux-2.4.35.4/Documentation/isdn/README.pcbit
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/isdn/README.pcbit        2007-12-15 05:19:39.422667608 +0100
++++ linux-2.4.35.4/Documentation/isdn/README.pcbit     2007-12-15 05:19:55.491583323 +0100
 @@ -37,4 +37,4 @@
  regards,
    Pedro.
                
 -<pedro_m@yahoo.com>
 +<roque@di.fc.ul.pt>
-diff -rNu linux-2.4.29.old/Documentation/isdn/abcext_kernel.help linux-2.4.29/Documentation/isdn/abcext_kernel.help
---- linux-2.4.29.old/Documentation/isdn/abcext_kernel.help     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/Documentation/isdn/abcext_kernel.help 2005-03-22 15:06:50.600400352 +0100
+Index: linux-2.4.35.4/Documentation/isdn/abcext_kernel.help
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/Documentation/isdn/abcext_kernel.help       2007-12-15 05:19:55.491583323 +0100
 @@ -0,0 +1,166 @@
 + 
 +ISDN-ABC-DW Extension
@@ -406,9 +419,10 @@ diff -rNu linux-2.4.29.old/Documentation/isdn/abcext_kernel.help linux-2.4.29/Do
 +   See "linux/Documentation/isdn/dw-abc-extension-howto.txt" 
 +   for more Information
 +
-diff -rNu linux-2.4.29.old/drivers/isdn/Config.in linux-2.4.29/drivers/isdn/Config.in
---- linux-2.4.29.old/drivers/isdn/Config.in    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/Config.in        2005-03-22 15:06:44.259364336 +0100
+Index: linux-2.4.35.4/drivers/isdn/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/Config.in 2007-12-15 05:19:39.438668519 +0100
++++ linux-2.4.35.4/drivers/isdn/Config.in      2007-12-15 05:19:55.491583323 +0100
 @@ -4,11 +4,9 @@
  
  # only included if CONFIG_ISDN != n
@@ -538,9 +552,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/Config.in linux-2.4.29/drivers/isdn/Conf
  fi
  endmenu
  
-diff -rNu linux-2.4.29.old/drivers/isdn/Makefile linux-2.4.29/drivers/isdn/Makefile
---- linux-2.4.29.old/drivers/isdn/Makefile     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/Makefile 2005-03-22 15:06:44.277361600 +0100
+Index: linux-2.4.35.4/drivers/isdn/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/Makefile  2007-12-15 05:19:39.446668974 +0100
++++ linux-2.4.35.4/drivers/isdn/Makefile       2007-12-15 05:19:55.495583552 +0100
 @@ -2,7 +2,7 @@
  
  # The target object and module list name.
@@ -562,9 +577,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/Makefile linux-2.4.29/drivers/isdn/Makef
  subdir-$(CONFIG_ISDN_DRV_ICN)         += icn
  subdir-$(CONFIG_ISDN_DRV_PCBIT)               += pcbit
  subdir-$(CONFIG_ISDN_DRV_SC)          += sc
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000.h linux-2.4.29/drivers/isdn/act2000/act2000.h
---- linux-2.4.29.old/drivers/isdn/act2000/act2000.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000.h        2005-03-22 15:06:44.103388048 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000.h 2007-12-15 05:19:39.450669203 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000.h      2007-12-15 05:19:55.495583552 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: act2000.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
@@ -594,9 +610,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000.h linux-2.4.29/drivers/i
  {
          queue_task(&card->poll_tq, &tq_immediate);
          mark_bh(IMMEDIATE_BH);
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.c linux-2.4.29/drivers/isdn/act2000/act2000_isa.c
---- linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000_isa.c    2005-03-22 15:06:44.135383184 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000_isa.c     2007-12-15 05:19:39.458669659 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.c  2007-12-15 05:19:55.495583552 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: act2000_isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
@@ -633,18 +650,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.c linux-2.4.29/drive
        }
  }
  
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.h linux-2.4.29/drivers/isdn/act2000/act2000_isa.h
---- linux-2.4.29.old/drivers/isdn/act2000/act2000_isa.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/act2000_isa.h    2005-03-22 15:06:44.152380600 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/act2000_isa.h     2007-12-15 05:19:39.466670114 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/act2000_isa.h  2007-12-15 05:19:55.495583552 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: act2000_isa.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
   *
   * ISDN lowlevel-module for the IBM ISDN-S0 Active 2000 (ISA-Version).
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.c linux-2.4.29/drivers/isdn/act2000/capi.c
---- linux-2.4.29.old/drivers/isdn/act2000/capi.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/capi.c   2005-03-22 15:06:44.172377560 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/capi.c    2007-12-15 05:19:39.474670572 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/capi.c 2007-12-15 05:19:55.495583552 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capi.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
@@ -662,9 +681,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.c linux-2.4.29/drivers/isdn
  #endif
        {{ 0x00, 0x00}, NULL},
  };
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.h linux-2.4.29/drivers/isdn/act2000/capi.h
---- linux-2.4.29.old/drivers/isdn/act2000/capi.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/capi.h   2005-03-22 15:06:44.187375280 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/capi.h    2007-12-15 05:19:39.478670799 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/capi.h 2007-12-15 05:19:55.499583778 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capi.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
@@ -708,9 +728,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/act2000/capi.h linux-2.4.29/drivers/isdn
  actcapi_nextsmsg(act2000_card *card)
  {
        unsigned long flags;
-diff -rNu linux-2.4.29.old/drivers/isdn/act2000/module.c linux-2.4.29/drivers/isdn/act2000/module.c
---- linux-2.4.29.old/drivers/isdn/act2000/module.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/act2000/module.c 2005-03-22 15:06:44.202373000 +0100
+Index: linux-2.4.35.4/drivers/isdn/act2000/module.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/act2000/module.c  2007-12-15 05:19:39.486671254 +0100
++++ linux-2.4.35.4/drivers/isdn/act2000/module.c       2007-12-15 05:19:55.499583778 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: module.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id$
@@ -768,27 +789,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/act2000/module.c linux-2.4.29/drivers/is
  
  module_init(act2000_init);
  module_exit(act2000_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/avm_cs.c linux-2.4.29/drivers/isdn/avmb1/avm_cs.c
---- linux-2.4.29.old/drivers/isdn/avmb1/avm_cs.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/avm_cs.c   2005-03-22 15:06:44.696297912 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/avm_cs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/avm_cs.c    2007-12-15 05:19:39.494671712 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/avm_cs.c 2007-12-15 05:19:55.499583778 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: avm_cs.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: avm_cs.c,v 1.6 2001/09/24 13:22:44 kai Exp $
   *
   * A PCMCIA client driver for AVM B1/M1/M2
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/avmcard.h linux-2.4.29/drivers/isdn/avmb1/avmcard.h
---- linux-2.4.29.old/drivers/isdn/avmb1/avmcard.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/avmcard.h  2005-03-22 15:06:44.711295632 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/avmcard.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/avmcard.h   2007-12-15 05:19:39.502672167 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/avmcard.h        2007-12-15 05:19:55.499583778 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: avmcard.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: avmcard.h,v 1.12 2001/09/24 13:22:44 kai Exp $
   *
   * Copyright 1999 by Carsten Paeth <calle@calle.de>
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1.c linux-2.4.29/drivers/isdn/avmb1/b1.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1.c       2005-03-22 15:06:44.733292288 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1.c        2007-12-15 05:19:39.510672623 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1.c     2007-12-15 05:19:55.503584007 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: b1.c,v 1.26 2001/09/24 13:22:44 kai Exp $
@@ -812,9 +836,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1.c linux-2.4.29/drivers/isdn/avm
  
  /* ------------------------------------------------------------- */
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1dma.c linux-2.4.29/drivers/isdn/avmb1/b1dma.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1dma.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1dma.c    2005-03-22 15:06:44.750289704 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1dma.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1dma.c     2007-12-15 05:19:39.514672852 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1dma.c  2007-12-15 05:19:55.503584007 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1dma.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: b1dma.c,v 1.18 2001/09/24 13:22:44 kai Exp $
@@ -868,9 +893,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1dma.c linux-2.4.29/drivers/isdn/
        rxlen  = b1dmainmeml(card->mbase+0x28);
  
        csr  = b1dmainmeml(card->mbase+AMCC_INTCSR);
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1isa.c linux-2.4.29/drivers/isdn/avmb1/b1isa.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1isa.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1isa.c    2005-03-22 15:06:44.766287272 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1isa.c     2007-12-15 05:19:39.522673307 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1isa.c  2007-12-15 05:19:55.503584007 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: b1isa.c,v 1.14 2001/09/24 13:22:44 kai Exp $
@@ -892,9 +918,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1isa.c linux-2.4.29/drivers/isdn/
  
  /* ------------------------------------------------------------- */
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pci.c linux-2.4.29/drivers/isdn/avmb1/b1pci.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1pci.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1pci.c    2005-03-22 15:06:44.781284992 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1pci.c     2007-12-15 05:19:39.530673763 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1pci.c  2007-12-15 05:19:55.503584007 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1pci.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: b1pci.c,v 1.40 2001/09/24 13:22:44 kai Exp $
@@ -954,9 +981,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pci.c linux-2.4.29/drivers/isdn/
  
                printk(KERN_INFO
                "%s: PCI BIOS reports AVM-B1 at i/o %#x, irq %d\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pcmcia.c linux-2.4.29/drivers/isdn/avmb1/b1pcmcia.c
---- linux-2.4.29.old/drivers/isdn/avmb1/b1pcmcia.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/b1pcmcia.c 2005-03-22 15:06:44.796282712 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/b1pcmcia.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/b1pcmcia.c  2007-12-15 05:19:39.538674218 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/b1pcmcia.c       2007-12-15 05:19:55.503584007 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1pcmcia.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: b1pcmcia.c,v 1.17 2001/09/24 13:22:44 kai Exp $
@@ -972,9 +1000,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/b1pcmcia.c linux-2.4.29/drivers/is
  
  /* ------------------------------------------------------------- */
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avmb1/c4.c
---- linux-2.4.29.old/drivers/isdn/avmb1/c4.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/c4.c       2005-03-22 15:06:44.812280280 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/c4.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/c4.c        2007-12-15 05:19:39.542674447 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/c4.c     2007-12-15 05:19:55.507584236 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: c4.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: c4.c,v 1.38 2001/09/24 13:22:44 kai Exp $
@@ -989,7 +1018,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avm
  #include <linux/capi.h>
  #include <linux/kernelcapi.h>
  #include <linux/init.h>
-@@ -29,7 +30,7 @@
+@@ -30,7 +31,7 @@
  #include "capilli.h"
  #include "avmcard.h"
  
@@ -998,7 +1027,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avm
  
  #undef CONFIG_C4_DEBUG
  #undef CONFIG_C4_POLLDEBUG
-@@ -38,6 +39,7 @@
+@@ -39,6 +40,7 @@
  
  static int suppress_pollack;
  
@@ -1006,7 +1035,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avm
  static struct pci_device_id c4_pci_tbl[] __initdata = {
        { PCI_VENDOR_ID_DEC,PCI_DEVICE_ID_DEC_21285, PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_C4 },
        { PCI_VENDOR_ID_DEC,PCI_DEVICE_ID_DEC_21285, PCI_VENDOR_ID_AVM, PCI_DEVICE_ID_AVM_C2 },
-@@ -45,6 +47,7 @@
+@@ -46,6 +48,7 @@
  };
  
  MODULE_DEVICE_TABLE(pci, c4_pci_tbl);
@@ -1014,7 +1043,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avm
  MODULE_DESCRIPTION("CAPI4Linux: Driver for AVM C2/C4 cards");
  MODULE_AUTHOR("Carsten Paeth");
  MODULE_LICENSE("GPL");
-@@ -1328,9 +1331,9 @@
+@@ -1332,9 +1335,9 @@
                }
                pci_set_master(dev);
  
@@ -1026,9 +1055,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/c4.c linux-2.4.29/drivers/isdn/avm
    
                printk(KERN_INFO
                        "%s: PCI BIOS reports AVM-C%d at i/o %#x, irq %d, mem %#x\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capi.c linux-2.4.29/drivers/isdn/avmb1/capi.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capi.c     2005-03-22 15:06:44.849274656 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capi.c      2007-12-15 05:19:39.550674902 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capi.c   2007-12-15 05:19:55.507584236 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capi.c,v 1.1.4.2 2001/12/09 18:45:13 kai Exp $
 +/* $Id: capi.c,v 1.59 2001/11/07 22:35:48 kai Exp $
@@ -1863,27 +1893,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capi.c linux-2.4.29/drivers/isdn/a
        (void) detach_capi_interface(&cuser);
        printk(KERN_NOTICE "capi: Rev %s: unloaded\n", rev);
  }
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capicmd.h linux-2.4.29/drivers/isdn/avmb1/capicmd.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capicmd.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capicmd.h  2005-03-22 15:06:44.865272224 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capicmd.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capicmd.h   2007-12-15 05:19:39.558675358 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capicmd.h        2007-12-15 05:19:55.507584236 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capicmd.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capicmd.h,v 1.4 2001/09/24 13:22:44 kai Exp $
   * 
   * CAPI 2.0 Interface for Linux
   * 
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidev.h linux-2.4.29/drivers/isdn/avmb1/capidev.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capidev.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidev.h  2005-03-22 15:06:44.880269944 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidev.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidev.h   2007-12-15 05:19:39.566675816 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidev.h        2007-12-15 05:19:55.511584462 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capidev.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capidev.h,v 1.8 2001/09/24 13:22:44 kai Exp $
   *
   * CAPI 2.0 Interface for Linux
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidrv.c linux-2.4.29/drivers/isdn/avmb1/capidrv.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capidrv.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidrv.c  2005-03-22 15:06:44.918264168 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidrv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidrv.c   2007-12-15 05:19:39.570676042 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidrv.c        2007-12-15 05:19:55.511584462 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capidrv.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capidrv.c,v 1.45 2001/09/24 13:22:44 kai Exp $
@@ -2061,18 +2094,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidrv.c linux-2.4.29/drivers/isd
        kfree(card->bchans);
        card->bchans = 0;
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capidrv.h linux-2.4.29/drivers/isdn/avmb1/capidrv.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capidrv.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capidrv.h  2005-03-22 15:06:44.935261584 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capidrv.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capidrv.h   2007-12-15 05:19:39.578676498 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capidrv.h        2007-12-15 05:19:55.511584462 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capidrv.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capidrv.h,v 1.4 2001/09/24 13:22:44 kai Exp $
   *
   * ISDN4Linux Driver, using capi20 interface (kernelcapi)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capifs.c linux-2.4.29/drivers/isdn/avmb1/capifs.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capifs.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capifs.c   2005-03-22 15:06:44.950259304 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capifs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capifs.c    2007-12-15 05:19:39.586676956 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capifs.c 2007-12-15 05:19:55.511584462 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capifs.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capifs.c,v 1.22 2001/09/24 13:22:44 kai Exp $
@@ -2351,27 +2386,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capifs.c linux-2.4.29/drivers/isdn
                }
        }
  }
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capifs.h linux-2.4.29/drivers/isdn/avmb1/capifs.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capifs.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capifs.h   2005-03-22 15:06:44.965257024 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capifs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capifs.h    2007-12-15 05:19:39.594677411 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capifs.h 2007-12-15 05:19:55.515584692 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capifs.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capifs.h,v 1.4 2001/09/24 13:22:44 kai Exp $
   * 
   * Copyright 2000 by Carsten Paeth <calle@calle.de>
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capilli.h linux-2.4.29/drivers/isdn/avmb1/capilli.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capilli.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capilli.h  2005-03-22 15:06:44.980254744 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capilli.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capilli.h   2007-12-15 05:19:39.598677637 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capilli.h        2007-12-15 05:19:55.515584692 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capilli.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capilli.h,v 1.5 2001/09/24 13:22:44 kai Exp $
   * 
   * Kernel CAPI 2.0 Driver Interface for Linux
   * 
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capiutil.c linux-2.4.29/drivers/isdn/avmb1/capiutil.c
---- linux-2.4.29.old/drivers/isdn/avmb1/capiutil.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capiutil.c 2005-03-22 15:06:44.997252160 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capiutil.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capiutil.c  2007-12-15 05:19:39.606678095 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capiutil.c       2007-12-15 05:19:55.515584692 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capiutil.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capiutil.c,v 1.16 2001/09/24 13:22:44 kai Exp $
@@ -2386,18 +2424,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capiutil.c linux-2.4.29/drivers/is
  #include "capiutil.h"
  
  MODULE_DESCRIPTION("CAPI4Linux: CAPI message conversion support");
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/capiutil.h linux-2.4.29/drivers/isdn/avmb1/capiutil.h
---- linux-2.4.29.old/drivers/isdn/avmb1/capiutil.h     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/capiutil.h 2005-03-22 15:06:45.040245624 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/capiutil.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/capiutil.h  2007-12-15 05:19:39.614678551 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/capiutil.h       2007-12-15 05:19:55.515584692 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capiutil.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: capiutil.h,v 1.7 2001/09/24 13:22:44 kai Exp $
   *
   * CAPI 2.0 defines & types
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/kcapi.c linux-2.4.29/drivers/isdn/avmb1/kcapi.c
---- linux-2.4.29.old/drivers/isdn/avmb1/kcapi.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/kcapi.c    2005-03-22 15:06:45.062242280 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/kcapi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/kcapi.c     2007-12-15 05:19:39.622679006 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/kcapi.c  2007-12-15 05:19:55.519584918 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: kcapi.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: kcapi.c,v 1.28 2001/09/24 13:22:44 kai Exp $
@@ -2573,9 +2613,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/kcapi.c linux-2.4.29/drivers/isdn/
          printk(KERN_NOTICE "kcapi: card %d \"%s\" ready.\n",
                CARDNR(card), card->name);
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1isa.c linux-2.4.29/drivers/isdn/avmb1/t1isa.c
---- linux-2.4.29.old/drivers/isdn/avmb1/t1isa.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/t1isa.c    2005-03-22 15:06:45.078239848 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/t1isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/t1isa.c     2007-12-15 05:19:39.626679235 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/t1isa.c  2007-12-15 05:19:55.519584918 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: t1isa.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: t1isa.c,v 1.22 2001/09/24 13:22:44 kai Exp $
@@ -2598,9 +2639,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1isa.c linux-2.4.29/drivers/isdn/
  
  /* ------------------------------------------------------------- */
  
-diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1pci.c linux-2.4.29/drivers/isdn/avmb1/t1pci.c
---- linux-2.4.29.old/drivers/isdn/avmb1/t1pci.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/avmb1/t1pci.c    2005-03-22 15:06:45.094237416 +0100
+Index: linux-2.4.35.4/drivers/isdn/avmb1/t1pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/avmb1/t1pci.c     2007-12-15 05:19:39.634679691 +0100
++++ linux-2.4.35.4/drivers/isdn/avmb1/t1pci.c  2007-12-15 05:19:55.519584918 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: t1pci.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: t1pci.c,v 1.25 2001/09/24 13:22:44 kai Exp $
@@ -2650,9 +2692,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/avmb1/t1pci.c linux-2.4.29/drivers/isdn/
  
                printk(KERN_INFO
                        "%s: PCI BIOS reports AVM-T1-PCI at i/o %#x, irq %d, mem %#x\n",
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/divert_procfs.c linux-2.4.29/drivers/isdn/divert/divert_procfs.c
---- linux-2.4.29.old/drivers/isdn/divert/divert_procfs.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/divert_procfs.c   2005-03-22 15:06:45.158227688 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/divert_procfs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/divert_procfs.c    2007-12-15 05:19:39.642680146 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/divert_procfs.c 2007-12-15 05:19:55.519584918 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: divert_procfs.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
@@ -2773,9 +2816,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/divert/divert_procfs.c linux-2.4.29/driv
  #endif        /* CONFIG_PROC_FS */
  
        return (0);
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.c linux-2.4.29/drivers/isdn/divert/isdn_divert.c
---- linux-2.4.29.old/drivers/isdn/divert/isdn_divert.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/isdn_divert.c     2005-03-22 15:06:45.173225408 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/isdn_divert.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/isdn_divert.c      2007-12-15 05:19:39.650680601 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/isdn_divert.c   2007-12-15 05:19:55.523585147 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_divert.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
@@ -2831,9 +2875,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.c linux-2.4.29/driver
                     break;
   
                   default:
-diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.h linux-2.4.29/drivers/isdn/divert/isdn_divert.h
---- linux-2.4.29.old/drivers/isdn/divert/isdn_divert.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/divert/isdn_divert.h     2005-03-22 15:06:45.189222976 +0100
+Index: linux-2.4.35.4/drivers/isdn/divert/isdn_divert.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/divert/isdn_divert.h      2007-12-15 05:19:39.658681057 +0100
++++ linux-2.4.35.4/drivers/isdn/divert/isdn_divert.h   2007-12-15 05:19:55.523585147 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_divert.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
@@ -2862,9 +2907,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/divert/isdn_divert.h linux-2.4.29/driver
                         actions 1-2 only take place if interface is opened 
                    */
     u_char waittime; /* maximum wait time for proceeding */ 
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/Divas_mod.c linux-2.4.29/drivers/isdn/eicon/Divas_mod.c
---- linux-2.4.29.old/drivers/isdn/eicon/Divas_mod.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/Divas_mod.c        2005-03-22 15:06:45.229216896 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/Divas_mod.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/Divas_mod.c 2007-12-15 05:19:39.666681515 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/Divas_mod.c      2007-12-15 05:19:55.523585147 +0100
 @@ -20,6 +20,7 @@
  #include "adapter.h"
  #include "uxio.h"
@@ -2873,9 +2919,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/Divas_mod.c linux-2.4.29/drivers/i
  
  MODULE_DESCRIPTION("ISDN4Linux: Driver for Eicon Diva Server cards");
  MODULE_AUTHOR("Armin Schindler");
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/common.c linux-2.4.29/drivers/isdn/eicon/common.c
---- linux-2.4.29.old/drivers/isdn/eicon/common.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/common.c   2005-03-22 15:06:45.301205952 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/common.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/common.c    2007-12-15 05:19:39.670681741 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/common.c 2007-12-15 05:19:55.523585147 +0100
 @@ -808,9 +808,7 @@
        
        while(i--)
@@ -2887,16 +2934,17 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/common.c linux-2.4.29/drivers/isdn
        }
  }
  
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon.h linux-2.4.29/drivers/isdn/eicon/eicon.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon.h    2005-03-22 15:06:45.371195312 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon.h     2007-12-15 05:19:39.678682197 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon.h  2007-12-15 05:19:55.523585147 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon.h,v 1.26 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN low-level module for Eicon active ISDN-Cards.
   *
-@@ -348,19 +348,19 @@
+@@ -347,19 +347,19 @@
  extern char *eicon_ctype_name[];
  
  
@@ -2919,18 +2967,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon.h linux-2.4.29/drivers/isdn/
  {
          queue_task(&card->ack_tq, &tq_immediate);
          mark_bh(IMMEDIATE_BH);
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_dsp.h linux-2.4.29/drivers/isdn/eicon/eicon_dsp.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_dsp.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_dsp.h        2005-03-22 15:06:45.386193032 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_dsp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_dsp.h 2007-12-15 05:19:39.686682655 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_dsp.h      2007-12-15 05:19:55.523585147 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_dsp.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_dsp.h,v 1.8 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN lowlevel-module for Eicon active cards.
   * DSP definitions
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.c linux-2.4.29/drivers/isdn/eicon/eicon_idi.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_idi.c        2005-03-22 15:06:45.421187712 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_idi.c 2007-12-15 05:19:39.694683110 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.c      2007-12-15 05:19:55.527585376 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_idi.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_idi.c,v 1.45 2001/11/07 22:35:48 kai Exp $
@@ -3007,27 +3057,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.c linux-2.4.29/drivers/i
                                        chan->statectrl &= ~WAITING_FOR_HANGUP;
                                        chan->statectrl &= ~IN_HOLD;
                                        if (chan->statectrl & HAVE_CONN_REQ) {
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.h linux-2.4.29/drivers/isdn/eicon/eicon_idi.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_idi.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_idi.h        2005-03-22 15:06:45.437185280 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_idi.h 2007-12-15 05:19:39.698683336 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_idi.h      2007-12-15 05:19:55.527585376 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_idi.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_idi.h,v 1.12 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN lowlevel-module for the Eicon active cards.
   * IDI-Interface
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_io.c linux-2.4.29/drivers/isdn/eicon/eicon_io.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_io.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_io.c 2005-03-22 15:06:45.453182848 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_io.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_io.c  2007-12-15 05:19:39.706683794 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_io.c       2007-12-15 05:19:55.531585602 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_io.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_io.c,v 1.15 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN low-level module for Eicon active ISDN-Cards.
   * Code for communicating with hardware.
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.c linux-2.4.29/drivers/isdn/eicon/eicon_isa.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_isa.c        2005-03-22 15:06:45.469180416 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_isa.c 2007-12-15 05:19:39.714684250 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.c      2007-12-15 05:19:55.531585602 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_isa.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_isa.c,v 1.18 2001/11/07 22:35:48 kai Exp $
@@ -3119,18 +3172,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.c linux-2.4.29/drivers/i
  #ifdef EICON_MCA_DEBUG
        printk(KERN_INFO "eicon_isa_boot: card->ramsize = %d.\n", card->ramsize);
  #endif
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.h linux-2.4.29/drivers/isdn/eicon/eicon_isa.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_isa.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_isa.h        2005-03-22 15:06:45.485177984 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_isa.h 2007-12-15 05:19:39.722684705 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_isa.h      2007-12-15 05:19:55.531585602 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_isa.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_isa.h,v 1.11 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN low-level module for Eicon active ISDN-Cards.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_mod.c linux-2.4.29/drivers/isdn/eicon/eicon_mod.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_mod.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_mod.c        2005-03-22 15:06:45.505174944 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_mod.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_mod.c 2007-12-15 05:19:39.726684934 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_mod.c      2007-12-15 05:19:55.531585602 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_mod.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_mod.c,v 1.44 2001/11/20 09:48:25 armin Exp $
@@ -3213,9 +3268,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_mod.c linux-2.4.29/drivers/i
  
  #endif /* MODULE */
  
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.c linux-2.4.29/drivers/isdn/eicon/eicon_pci.c
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_pci.c        2005-03-22 15:06:45.522172360 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_pci.c 2007-12-15 05:19:39.734685390 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.c      2007-12-15 05:19:55.535585832 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_pci.c,v 1.18 2001/09/24 13:22:47 kai Exp $
@@ -3231,18 +3287,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.c linux-2.4.29/drivers/i
  
  #if CONFIG_PCI                 /* intire stuff is only for PCI */
  #ifdef CONFIG_ISDN_DRV_EICON_PCI
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.h linux-2.4.29/drivers/isdn/eicon/eicon_pci.h
---- linux-2.4.29.old/drivers/isdn/eicon/eicon_pci.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/eicon_pci.h        2005-03-22 15:06:45.538169928 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/eicon_pci.h 2007-12-15 05:19:39.742685845 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/eicon_pci.h      2007-12-15 05:19:55.535585832 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: eicon_pci.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: eicon_pci.h,v 1.7 2001/09/24 13:22:47 kai Exp $
   *
   * ISDN low-level module for Eicon active ISDN-Cards (PCI part).
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/fourbri.c linux-2.4.29/drivers/isdn/eicon/fourbri.c
---- linux-2.4.29.old/drivers/isdn/eicon/fourbri.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/fourbri.c  2005-03-22 15:06:45.553167648 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/fourbri.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/fourbri.c   2007-12-15 05:19:39.750686300 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/fourbri.c        2007-12-15 05:19:55.535585832 +0100
 @@ -337,8 +337,7 @@
  static int diva_server_4bri_start(card_t *card, byte *channels)
  {
@@ -3253,9 +3311,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/fourbri.c linux-2.4.29/drivers/isd
        int adapter_num;
  
        DPRINTF(("divas: start Diva Server 4BRI"));
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/kprintf.c linux-2.4.29/drivers/isdn/eicon/kprintf.c
---- linux-2.4.29.old/drivers/isdn/eicon/kprintf.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/kprintf.c  2005-03-22 15:06:45.601160352 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/kprintf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/kprintf.c   2007-12-15 05:19:39.754686529 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/kprintf.c        2007-12-15 05:19:55.535585832 +0100
 @@ -18,6 +18,468 @@
  #include "divalog.h"
  #include "uxio.h"
@@ -3734,9 +3793,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/kprintf.c linux-2.4.29/drivers/isd
  
      va_end(argptr);
  
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/lincfg.c linux-2.4.29/drivers/isdn/eicon/lincfg.c
---- linux-2.4.29.old/drivers/isdn/eicon/lincfg.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/lincfg.c   2005-03-22 15:06:45.620157464 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/lincfg.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/lincfg.c    2007-12-15 05:19:39.762686985 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/lincfg.c 2007-12-15 05:19:55.535585832 +0100
 @@ -26,6 +26,9 @@
  #include "uxio.h"
  
@@ -3747,9 +3807,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/lincfg.c linux-2.4.29/drivers/isdn
  #include <linux/kernel.h>
  #include <linux/ioport.h>
  
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linchr.c linux-2.4.29/drivers/isdn/eicon/linchr.c
---- linux-2.4.29.old/drivers/isdn/eicon/linchr.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/linchr.c   2005-03-22 15:06:45.635155184 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/linchr.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/linchr.c    2007-12-15 05:19:39.770687440 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/linchr.c 2007-12-15 05:19:55.539586058 +0100
 @@ -154,17 +154,17 @@
        klog_t *pHeadItem;
  
@@ -3773,9 +3834,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linchr.c linux-2.4.29/drivers/isdn
                kfree(pHeadItem);
                return sizeof(klog_t);
        }
-diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linio.c linux-2.4.29/drivers/isdn/eicon/linio.c
---- linux-2.4.29.old/drivers/isdn/eicon/linio.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/eicon/linio.c    2005-03-22 15:06:45.651152752 +0100
+Index: linux-2.4.35.4/drivers/isdn/eicon/linio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/eicon/linio.c     2007-12-15 05:19:39.778687896 +0100
++++ linux-2.4.35.4/drivers/isdn/eicon/linio.c  2007-12-15 05:19:55.539586058 +0100
 @@ -15,6 +15,7 @@
  #include <linux/slab.h>
  #include <linux/pci.h>
@@ -3784,9 +3846,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/eicon/linio.c linux-2.4.29/drivers/isdn/
  #undef N_DATA
  
  #include "uxio.h"
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/Makefile linux-2.4.29/drivers/isdn/hisax/Makefile
---- linux-2.4.29.old/drivers/isdn/hisax/Makefile       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/Makefile   2005-03-22 15:06:45.819127216 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/Makefile    2007-12-15 05:19:39.786688354 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/Makefile 2007-12-15 05:19:55.539586058 +0100
 @@ -4,20 +4,17 @@
  
  O_TARGET        := vmlinux-obj.o
@@ -3850,9 +3913,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/Makefile linux-2.4.29/drivers/isdn
  
  CERT := $(shell md5sum -c md5sums.asc >> /dev/null;echo $$?)
  CFLAGS_cert.o := -DCERTIFICATION=$(CERT)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/amd7930.c linux-2.4.29/drivers/isdn/hisax/amd7930.c
---- linux-2.4.29.old/drivers/isdn/hisax/amd7930.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/amd7930.c  2005-03-22 15:06:45.837124480 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/amd7930.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/amd7930.c        2007-12-15 05:19:55.539586058 +0100
 @@ -0,0 +1,755 @@
 +/* $Id: amd7930.c,v 1.8 2001/09/24 13:22:55 kai Exp $
 + *
@@ -4609,27 +4673,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/amd7930.c linux-2.4.29/drivers/isd
 +
 +      return (1);
 +}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/arcofi.c linux-2.4.29/drivers/isdn/hisax/arcofi.c
---- linux-2.4.29.old/drivers/isdn/hisax/arcofi.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/arcofi.c   2005-03-22 15:06:45.852122200 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/arcofi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/arcofi.c    2007-12-15 05:19:39.798689035 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/arcofi.c 2007-12-15 05:19:55.539586058 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: arcofi.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: arcofi.c,v 1.14 2001/09/24 13:22:55 kai Exp $
   *
   * Ansteuerung ARCOFI 2165
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/arcofi.h linux-2.4.29/drivers/isdn/hisax/arcofi.h
---- linux-2.4.29.old/drivers/isdn/hisax/arcofi.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/arcofi.h   2005-03-22 15:06:45.872119160 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/arcofi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/arcofi.h    2007-12-15 05:19:39.802689264 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/arcofi.h 2007-12-15 05:19:55.543586286 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: arcofi.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
   *
   * Ansteuerung ARCOFI 2165
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/asuscom.c linux-2.4.29/drivers/isdn/hisax/asuscom.c
---- linux-2.4.29.old/drivers/isdn/hisax/asuscom.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/asuscom.c  2005-03-22 15:06:45.889116576 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/asuscom.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/asuscom.c   2007-12-15 05:19:39.810689720 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/asuscom.c        2007-12-15 05:19:55.543586286 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: asuscom.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: asuscom.c,v 1.14 2001/09/24 13:22:55 kai Exp $
@@ -4728,9 +4795,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/asuscom.c linux-2.4.29/drivers/isd
        bytecnt = 8;
        cs->hw.asus.cfg_reg = card->para[1];
        cs->irq = card->para[0];
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1.c linux-2.4.29/drivers/isdn/hisax/avm_a1.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_a1.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_a1.c   2005-03-22 15:06:45.904114296 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_a1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_a1.c    2007-12-15 05:19:39.818690175 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_a1.c 2007-12-15 05:19:55.543586286 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: avm_a1.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: avm_a1.c,v 2.15 2001/09/24 13:22:55 kai Exp $
@@ -4746,9 +4814,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1.c linux-2.4.29/drivers/isdn
  
  #define        AVM_A1_STAT_ISAC       0x01
  #define        AVM_A1_STAT_HSCX       0x02
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1p.c linux-2.4.29/drivers/isdn/hisax/avm_a1p.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_a1p.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_a1p.c  2005-03-22 15:06:45.919112016 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_a1p.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_a1p.c   2007-12-15 05:19:39.826690633 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_a1p.c        2007-12-15 05:19:55.543586286 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: avm_a1p.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: avm_a1p.c,v 2.9 2001/09/24 13:22:55 kai Exp $
@@ -4764,9 +4833,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_a1p.c linux-2.4.29/drivers/isd
  
  static inline u_char
  ReadISAC(struct IsdnCardState *cs, u_char offset)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_pci.c linux-2.4.29/drivers/isdn/hisax/avm_pci.c
---- linux-2.4.29.old/drivers/isdn/hisax/avm_pci.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/avm_pci.c  2005-03-22 15:06:45.945108064 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/avm_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/avm_pci.c   2007-12-15 05:19:39.830690859 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/avm_pci.c        2007-12-15 05:19:55.543586286 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: avm_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: avm_pci.c,v 1.29 2001/09/24 13:22:55 kai Exp $
@@ -4883,9 +4953,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/avm_pci.c linux-2.4.29/drivers/isd
        cs->hw.avm.isac = cs->hw.avm.cfg_reg + 0x10;
        if (check_region((cs->hw.avm.cfg_reg), 32)) {
                printk(KERN_WARNING
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a4t.c linux-2.4.29/drivers/isdn/hisax/bkm_a4t.c
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_a4t.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_a4t.c  2005-03-22 15:06:45.962105480 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_a4t.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_a4t.c   2007-12-15 05:19:39.838691315 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_a4t.c        2007-12-15 05:19:55.547586516 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: bkm_a4t.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: bkm_a4t.c,v 1.22 2001/09/24 13:22:55 kai Exp $
@@ -4923,9 +4994,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a4t.c linux-2.4.29/drivers/isd
                        cs->irq = dev_a4t->irq;
                        break;
                }
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a8.c linux-2.4.29/drivers/isdn/hisax/bkm_a8.c
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_a8.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_a8.c   2005-03-22 15:06:45.982102440 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_a8.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_a8.c    2007-12-15 05:19:39.846691773 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_a8.c 2007-12-15 05:19:55.547586516 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: bkm_a8.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: bkm_a8.c,v 1.22 2001/09/24 13:22:55 kai Exp $
@@ -4975,18 +5047,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_a8.c linux-2.4.29/drivers/isdn
                }
  #endif /* End HACK */
        }
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/bkm_ax.h linux-2.4.29/drivers/isdn/hisax/bkm_ax.h
---- linux-2.4.29.old/drivers/isdn/hisax/bkm_ax.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/bkm_ax.h   2005-03-22 15:06:46.010098184 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/bkm_ax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/bkm_ax.h    2007-12-15 05:19:39.854692228 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/bkm_ax.h 2007-12-15 05:19:55.547586516 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: bkm_ax.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
   *
   * low level decls for T-Berkom cards A4T and Scitel Quadro (4*S0, passive)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/callc.c linux-2.4.29/drivers/isdn/hisax/callc.c
---- linux-2.4.29.old/drivers/isdn/hisax/callc.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/callc.c    2005-03-22 15:06:46.027095600 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/callc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/callc.c     2007-12-15 05:19:39.862692684 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/callc.c  2007-12-15 05:19:55.547586516 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: callc.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: callc.c,v 2.59 2002/02/09 21:19:11 keil Exp $
@@ -5079,18 +5153,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/callc.c linux-2.4.29/drivers/isdn/
                case (CC_PROGRESS | INDICATION):
                case (CC_NOTIFY | INDICATION):
                        break;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/cert.c linux-2.4.29/drivers/isdn/hisax/cert.c
---- linux-2.4.29.old/drivers/isdn/hisax/cert.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/cert.c     2005-03-22 15:06:46.042093320 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/cert.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/cert.c      2007-12-15 05:19:39.866692913 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/cert.c   2007-12-15 05:19:55.551586742 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: cert.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: cert.c,v 2.6 2001/09/24 13:22:56 kai Exp $
   *
   * Author       Karsten Keil
   * Copyright    by Karsten Keil      <keil@isdn4linux.de>
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/config.c linux-2.4.29/drivers/isdn/hisax/config.c
---- linux-2.4.29.old/drivers/isdn/hisax/config.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/config.c   2005-03-22 15:06:46.077088000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/config.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/config.c    2007-12-15 05:19:39.874693368 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/config.c 2007-12-15 05:19:55.551586742 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: config.c,v 1.1.4.5 2001/12/09 19:19:26 kai Exp $
 +/* $Id: config.c,v 2.84 2002/08/13 09:55:29 keil Exp $
@@ -5580,9 +5656,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/config.c linux-2.4.29/drivers/isdn
 -EXPORT_SYMBOL(FsmInitTimer);
 -EXPORT_SYMBOL(FsmDelTimer);
 -EXPORT_SYMBOL(FsmRestartTimer);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/diva.c linux-2.4.29/drivers/isdn/hisax/diva.c
---- linux-2.4.29.old/drivers/isdn/hisax/diva.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/diva.c     2005-03-22 15:06:46.106083592 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/diva.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/diva.c      2007-12-15 05:19:39.882693823 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/diva.c   2007-12-15 05:19:55.551586742 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: diva.c,v 1.1.4.2 2002/08/30 11:21:00 keil Exp $
 +/* $Id: diva.c,v 1.33 2001/09/24 13:22:56 kai Exp $
@@ -6003,9 +6080,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/diva.c linux-2.4.29/drivers/isdn/h
        } else { /* DIVA 2.0 */
                cs->hw.diva.tl.function = (void *) diva_led_handler;
                cs->hw.diva.tl.data = (long) cs;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa.c linux-2.4.29/drivers/isdn/hisax/elsa.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa.c     2005-03-22 15:06:46.123081008 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa.c      2007-12-15 05:19:39.890694279 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa.c   2007-12-15 05:19:55.555586971 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: elsa.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: elsa.c,v 2.32 2001/09/24 13:22:56 kai Exp $
@@ -6151,9 +6229,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa.c linux-2.4.29/drivers/isdn/h
                case ELSA_QS3000PCI:
                        bytecnt = 16;
                        break;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_cs.c linux-2.4.29/drivers/isdn/hisax/elsa_cs.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa_cs.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa_cs.c  2005-03-22 15:06:46.138078728 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa_cs.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa_cs.c   2007-12-15 05:19:39.894694508 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa_cs.c        2007-12-15 05:19:55.555586971 +0100
 @@ -72,7 +72,7 @@
  MODULE_PARM(pc_debug, "i");
  #define DEBUG(n, args...) if (pc_debug>(n)) printk(KERN_DEBUG args);
@@ -6163,9 +6242,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_cs.c linux-2.4.29/drivers/isd
  #else
  #define DEBUG(n, args...)
  #endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_ser.c linux-2.4.29/drivers/isdn/hisax/elsa_ser.c
---- linux-2.4.29.old/drivers/isdn/hisax/elsa_ser.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/elsa_ser.c 2005-03-22 15:06:46.158075688 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/elsa_ser.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/elsa_ser.c  2007-12-15 05:19:39.902694963 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/elsa_ser.c       2007-12-15 05:19:55.555586971 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: elsa_ser.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: elsa_ser.c,v 2.14 2001/09/24 13:22:56 kai Exp $
@@ -6247,9 +6327,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/elsa_ser.c linux-2.4.29/drivers/is
  
  static void rs_interrupt_elsa(int irq, struct IsdnCardState *cs)
  {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/fsm.c linux-2.4.29/drivers/isdn/hisax/fsm.c
---- linux-2.4.29.old/drivers/isdn/hisax/fsm.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/fsm.c      2005-03-22 15:06:46.174073256 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/fsm.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/fsm.c       2007-12-15 05:19:39.910695419 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/fsm.c    2007-12-15 05:19:55.555586971 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: fsm.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
@@ -6271,18 +6352,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/fsm.c linux-2.4.29/drivers/isdn/hi
  int __init
  FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount)
  {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/fsm.h linux-2.4.29/drivers/isdn/hisax/fsm.h
---- linux-2.4.29.old/drivers/isdn/hisax/fsm.h  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/fsm.h      2005-03-22 15:06:46.189070976 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/fsm.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/fsm.h       2007-12-15 05:19:39.918695874 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/fsm.h    2007-12-15 05:19:55.555586971 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: fsm.h,v 1.1.2.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
   *
   * Finite state machine
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/gazel.c linux-2.4.29/drivers/isdn/hisax/gazel.c
---- linux-2.4.29.old/drivers/isdn/hisax/gazel.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/gazel.c    2005-03-22 15:06:46.205068544 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/gazel.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/gazel.c     2007-12-15 05:19:39.922696103 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/gazel.c  2007-12-15 05:19:55.559587200 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: gazel.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: gazel.c,v 2.19 2001/09/24 13:22:56 kai Exp $
@@ -6312,9 +6395,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/gazel.c linux-2.4.29/drivers/isdn/
                        found = 1;
                }
                if (found)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.c linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.c        2005-03-22 15:06:46.221066112 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bds0.c 2007-12-15 05:19:39.930696558 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.c      2007-12-15 05:19:55.559587200 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_2bds0.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_2bds0.c,v 1.18 2001/09/24 13:22:56 kai Exp $
@@ -6393,36 +6477,40 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.c linux-2.4.29/drivers/i
  }
  
  unsigned int __init
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.h linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bds0.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bds0.h        2005-03-22 15:06:46.236063832 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bds0.h 2007-12-15 05:19:39.938697014 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bds0.h      2007-12-15 05:19:55.559587200 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_2bds0.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_2bds0.h,v 1.6 2001/09/24 13:22:56 kai Exp $
   *
   * specific defines for CCD's HFC 2BDS0
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.c linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.c 2005-03-22 15:06:46.272058360 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bs0.c  2007-12-15 05:19:39.946697472 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.c       2007-12-15 05:19:55.559587200 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_2bs0.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_2bs0.c,v 1.20 2001/09/24 13:22:56 kai Exp $
   *
   * specific routines for CCD's HFC 2BS0
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.h linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_2bs0.h     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_2bs0.h 2005-03-22 15:06:46.288055928 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_2bs0.h  2007-12-15 05:19:39.954697927 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_2bs0.h       2007-12-15 05:19:55.563587427 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_2bs0.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_2bs0.h,v 1.5 2001/09/24 13:22:56 kai Exp $
   *
   * specific defines for CCD's HFC 2BS0
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.c linux-2.4.29/drivers/isdn/hisax/hfc_pci.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_pci.c  2005-03-22 15:06:46.305053344 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_pci.c   2007-12-15 05:19:39.958698154 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.c        2007-12-15 05:19:55.567587653 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_pci.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_pci.c,v 1.48 2001/09/24 13:22:56 kai Exp $
@@ -6544,18 +6632,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.c linux-2.4.29/drivers/isd
                    (((ulong) cs->hw.hfcpci.share_start) & ~0x7FFF) + 0x8000;
                pcibios_write_config_dword(cs->hw.hfcpci.pci_bus,
                                       cs->hw.hfcpci.pci_device_fn, 0x80,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.h linux-2.4.29/drivers/isdn/hisax/hfc_pci.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_pci.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_pci.h  2005-03-22 15:06:46.320051064 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_pci.h   2007-12-15 05:19:39.966698612 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_pci.h        2007-12-15 05:19:55.571587882 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_pci.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_pci.h,v 1.10 2001/09/24 13:22:56 kai Exp $
   *
   * specific defines for CCD's HFC 2BDS0 PCI chips
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.c linux-2.4.29/drivers/isdn/hisax/hfc_sx.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_sx.c   2005-03-22 15:06:46.350046504 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_sx.c    2007-12-15 05:19:39.974699067 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.c 2007-12-15 05:19:55.571587882 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_sx.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfc_sx.c,v 1.12 2001/09/24 13:22:56 kai Exp $
@@ -6686,18 +6776,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.c linux-2.4.29/drivers/isdn
 +
 +
 +
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.h linux-2.4.29/drivers/isdn/hisax/hfc_sx.h
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_sx.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_sx.h   2005-03-22 15:06:46.365044224 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_sx.h    2007-12-15 05:19:39.982699522 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_sx.h 2007-12-15 05:19:55.571587882 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfc_sx.h,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id$
   *
   * specific defines for CCD's HFC 2BDS0 S+,SP chips
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c linux-2.4.29/drivers/isdn/hisax/hfc_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usb.c  2005-03-22 15:06:46.381041792 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c        2007-12-15 05:19:55.575588111 +0100
 @@ -0,0 +1,1189 @@
 +/* $Id: hfc_usb.c,v 2.3 2001/07/06 21:30:11 werner Exp $
 + *
@@ -7888,9 +7980,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c linux-2.4.29/drivers/isd
 +
 +module_init(hfc_usb_init);
 +module_exit(hfc_usb_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usbr.c linux-2.4.29/drivers/isdn/hisax/hfc_usbr.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usbr.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usbr.c 2005-03-22 15:06:46.397039360 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usbr.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usbr.c       2007-12-15 05:19:55.575588111 +0100
 @@ -0,0 +1,471 @@
 +/* $Id: hfc_usbr.c,v 2.5 2001/07/06 21:30:11 werner Exp $
 +
@@ -8363,9 +8456,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usbr.c linux-2.4.29/drivers/is
 +      cs->cardmsg = &hfcusb_card_msg;
 +      return (1);             /* success */
 +}
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfcscard.c linux-2.4.29/drivers/isdn/hisax/hfcscard.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfcscard.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfcscard.c 2005-03-22 15:06:46.412037080 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfcscard.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfcscard.c  2007-12-15 05:19:39.998700433 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfcscard.c       2007-12-15 05:19:55.575588111 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hfcscard.c,v 1.1.4.1 2001/11/20 14:19:35 kai Exp $
 +/* $Id: hfcscard.c,v 1.10 2001/09/24 13:22:56 kai Exp $
@@ -8472,9 +8566,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfcscard.c linux-2.4.29/drivers/is
        cs->hw.hfcD.addr = card->para[1] & 0xfffe;
        cs->irq = card->para[0];
        cs->hw.hfcD.cip = 0;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax.h linux-2.4.29/drivers/isdn/hisax/hisax.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax.h    2005-03-22 15:06:46.431034192 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax.h     2007-12-15 05:19:40.006700891 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax.h  2007-12-15 05:19:55.579588340 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hisax.h,v 1.1.4.2 2001/12/09 19:15:28 kai Exp $
 +/* $Id: hisax.h,v 2.64 2001/09/24 13:22:56 kai Exp $
@@ -8591,9 +8686,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax.h linux-2.4.29/drivers/isdn/
  #define TEI_PER_CARD 1
  
  /* L1 Debug */
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_debug.h linux-2.4.29/drivers/isdn/hisax/hisax_debug.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_debug.h  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_debug.h      2005-03-22 15:06:46.452031000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_debug.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_debug.h       2007-12-15 05:19:40.014701347 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_debug.h    2007-12-15 05:19:55.579588340 +0100
 @@ -28,7 +28,7 @@
  
  #define DBG(level, format, arg...) do { \
@@ -8603,9 +8699,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_debug.h linux-2.4.29/drivers
  } while (0)
  
  #define DBG_PACKET(level,data,count) \
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.c linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.c   2005-03-22 15:06:46.468028568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_fcpcipnp.c    2007-12-15 05:19:40.018701573 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.c 2007-12-15 05:19:55.579588340 +0100
 @@ -20,22 +20,19 @@
   *
   * o POWER PC
@@ -9041,9 +9138,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.c linux-2.4.29/driv
 +#ifdef __ISAPNP__
 +#include "hisax_isapnp.c"
 +#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.h linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_fcpcipnp.h   2005-03-22 15:06:46.484026136 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_fcpcipnp.h    2007-12-15 05:19:40.026702031 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_fcpcipnp.h 2007-12-15 05:19:55.579588340 +0100
 @@ -43,10 +43,12 @@
  };
  
@@ -9058,9 +9156,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_fcpcipnp.h linux-2.4.29/driv
        struct isac isac;
  
        struct fritz_bcs bcs[2];
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.c linux-2.4.29/drivers/isdn/hisax/hisax_isac.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isac.c       2005-03-22 15:06:46.543017168 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_isac.c        2007-12-15 05:19:40.034702487 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.c     2007-12-15 05:19:55.583588567 +0100
 @@ -34,7 +34,7 @@
  static int debug = 1;
  MODULE_PARM(debug, "i");
@@ -9166,9 +9265,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.c linux-2.4.29/drivers/
  
  module_init(hisax_isac_init);
  module_exit(hisax_isac_exit);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.h linux-2.4.29/drivers/isdn/hisax/hisax_isac.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isac.h       2005-03-22 15:06:46.559014736 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hisax_isac.h        2007-12-15 05:19:40.042702942 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isac.h     2007-12-15 05:19:55.583588567 +0100
 @@ -8,7 +8,7 @@
  #define TIMER3_VALUE 7000
  #define MAX_DFRAME_LEN_L1 300
@@ -9190,9 +9290,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isac.h linux-2.4.29/drivers/
 +void isacsx_interrupt(struct isac *isac);
  
  #endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.c linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.c
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.c     2005-03-22 15:06:46.576012152 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.c   2007-12-15 05:19:55.583588567 +0100
 @@ -0,0 +1,105 @@
 +// FIXME copied
 +static const struct isapnp_device_id *
@@ -9299,9 +9400,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.c linux-2.4.29/driver
 +      }
 +}
 +
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.h linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_isapnp.h     2005-03-22 15:06:46.590010024 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_isapnp.h   2007-12-15 05:19:55.583588567 +0100
 @@ -0,0 +1,33 @@
 +#ifndef __HISAX_ISAPNP_H__
 +#define __HISAX_ISAPNP_H__
@@ -9336,9 +9438,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_isapnp.h linux-2.4.29/driver
 +#endif
 +
 +#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_loadable.h linux-2.4.29/drivers/isdn/hisax/hisax_loadable.h
---- linux-2.4.29.old/drivers/isdn/hisax/hisax_loadable.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hisax_loadable.h   2005-03-22 15:06:46.606007592 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hisax_loadable.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/hisax_loadable.h 2007-12-15 05:19:55.583588567 +0100
 @@ -0,0 +1,74 @@
 +/* $Id: hisax_loadable.h,v 2.1 2001/06/08 22:19:16 werner Exp $
 + *
@@ -9414,81 +9517,90 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hisax_loadable.h linux-2.4.29/driv
 +/* definition of the register function */
 +/***************************************/
 +extern int hisax_register_hfcusb(struct hisax_drvreg *l1drv);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx.c linux-2.4.29/drivers/isdn/hisax/hscx.c
---- linux-2.4.29.old/drivers/isdn/hisax/hscx.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx.c     2005-03-22 15:06:46.621005312 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx.c      2007-12-15 05:19:40.066704311 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx.c   2007-12-15 05:19:55.583588567 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hscx.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: hscx.c,v 1.24 2001/09/24 13:22:56 kai Exp $
   *
   * HSCX specific routines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx.h linux-2.4.29/drivers/isdn/hisax/hscx.h
---- linux-2.4.29.old/drivers/isdn/hisax/hscx.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx.h     2005-03-22 15:06:46.640002424 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx.h      2007-12-15 05:19:40.070704537 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx.h   2007-12-15 05:19:55.587588793 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hscx.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: hscx.h,v 1.8 2001/09/24 13:22:56 kai Exp $
   *
   * HSCX specific defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hscx_irq.c linux-2.4.29/drivers/isdn/hisax/hscx_irq.c
---- linux-2.4.29.old/drivers/isdn/hisax/hscx_irq.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hscx_irq.c 2005-03-22 15:06:46.655999992 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hscx_irq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hscx_irq.c  2007-12-15 05:19:40.078704992 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hscx_irq.c       2007-12-15 05:19:55.587588793 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hscx_irq.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: hscx_irq.c,v 1.18 2001/09/24 13:22:56 kai Exp $
   *
   * low level b-channel stuff for Siemens HSCX
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/icc.c linux-2.4.29/drivers/isdn/hisax/icc.c
---- linux-2.4.29.old/drivers/isdn/hisax/icc.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/icc.c      2005-03-22 15:06:46.672997408 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/icc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/icc.c       2007-12-15 05:19:40.086705450 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/icc.c    2007-12-15 05:19:55.587588793 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: icc.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: icc.c,v 1.8 2001/09/24 13:22:56 kai Exp $
   *
   * ICC specific routines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/icc.h linux-2.4.29/drivers/isdn/hisax/icc.h
---- linux-2.4.29.old/drivers/isdn/hisax/icc.h  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/icc.h      2005-03-22 15:06:46.687995128 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/icc.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/icc.h       2007-12-15 05:19:40.094705906 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/icc.h    2007-12-15 05:19:55.587588793 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: icc.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: icc.h,v 1.4 2001/09/24 13:22:56 kai Exp $
   *
   * ICC specific routines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/ipac.h linux-2.4.29/drivers/isdn/hisax/ipac.h
---- linux-2.4.29.old/drivers/isdn/hisax/ipac.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/ipac.h     2005-03-22 15:06:46.702992848 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/ipac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/ipac.h      2007-12-15 05:19:40.098706132 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/ipac.h   2007-12-15 05:19:55.587588793 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: ipac.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: ipac.h,v 1.7 2001/09/24 13:22:56 kai Exp $
   *
   * IPAC specific defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isac.c linux-2.4.29/drivers/isdn/hisax/isac.c
---- linux-2.4.29.old/drivers/isdn/hisax/isac.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isac.c     2005-03-22 15:06:46.844971264 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isac.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isac.c      2007-12-15 05:19:40.106706590 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isac.c   2007-12-15 05:19:55.591589021 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isac.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isac.c,v 1.31 2001/09/24 13:22:56 kai Exp $
   *
   * ISAC specific routines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isac.h linux-2.4.29/drivers/isdn/hisax/isac.h
---- linux-2.4.29.old/drivers/isdn/hisax/isac.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isac.h     2005-03-22 15:06:47.111930680 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isac.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isac.h      2007-12-15 05:19:40.118707272 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isac.h   2007-12-15 05:19:55.591589021 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isac.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isac.h,v 1.9 2001/09/24 13:22:56 kai Exp $
   *
   * ISAC specific defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.c linux-2.4.29/drivers/isdn/hisax/isar.c
---- linux-2.4.29.old/drivers/isdn/hisax/isar.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isar.c     2005-03-22 15:06:47.302901648 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isar.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isar.c      2007-12-15 05:19:40.130707956 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isar.c   2007-12-15 05:19:55.595589250 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isar.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isar.c,v 1.22 2001/09/23 12:00:05 keil Exp $
@@ -9892,9 +10004,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.c linux-2.4.29/drivers/isdn/h
                                default:
                                        printk(KERN_DEBUG "HiSax: invalid ioctl %d\n",
                                               (int) ic->arg);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.h linux-2.4.29/drivers/isdn/hisax/isar.h
---- linux-2.4.29.old/drivers/isdn/hisax/isar.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isar.h     2005-03-22 15:06:47.457878088 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isar.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isar.h      2007-12-15 05:19:40.138708412 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isar.h   2007-12-15 05:19:55.615590390 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isar.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isar.h,v 1.11 2001/09/24 13:22:56 kai Exp $
@@ -9930,9 +10043,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isar.h linux-2.4.29/drivers/isdn/h
  extern int ISARVersion(struct IsdnCardState *cs, char *s);
  extern void isar_int_main(struct IsdnCardState *cs);
  extern void initisar(struct IsdnCardState *cs);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl1.c linux-2.4.29/drivers/isdn/hisax/isdnl1.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl1.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl1.c   2005-03-22 15:06:47.582859088 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl1.c    2007-12-15 05:19:40.150709096 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl1.c 2007-12-15 05:19:55.615590390 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isdnl1.c,v 2.46 2001/09/24 13:22:56 kai Exp $
@@ -9948,18 +10062,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl1.c linux-2.4.29/drivers/isdn
  
  #define __NO_VERSION__
  #include <linux/init.h>
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl1.h linux-2.4.29/drivers/isdn/hisax/isdnl1.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl1.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl1.h   2005-03-22 15:06:47.615854072 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl1.h    2007-12-15 05:19:40.154709325 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl1.h 2007-12-15 05:19:55.619590620 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isdnl1.h,v 2.12 2001/09/24 13:22:56 kai Exp $
   *
   * Layer 1 defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl2.c linux-2.4.29/drivers/isdn/hisax/isdnl2.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl2.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl2.c   2005-03-22 15:06:47.631851640 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl2.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl2.c    2007-12-15 05:19:40.162709781 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl2.c 2007-12-15 05:19:55.619590620 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl2.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isdnl2.c,v 2.30 2001/09/24 13:22:56 kai Exp $
@@ -9985,18 +10101,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl2.c linux-2.4.29/drivers/isdn
  }
  
  static void
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl2.h linux-2.4.29/drivers/isdn/hisax/isdnl2.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl2.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl2.h   2005-03-22 15:06:47.647849208 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl2.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl2.h    2007-12-15 05:19:40.170710236 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl2.h 2007-12-15 05:19:55.619590620 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl2.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * Layer 2 defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl3.c linux-2.4.29/drivers/isdn/hisax/isdnl3.c
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl3.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl3.c   2005-03-22 15:06:47.663846776 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl3.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl3.c    2007-12-15 05:19:40.178710691 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl3.c 2007-12-15 05:19:55.619590620 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl3.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isdnl3.c,v 2.22 2001/09/24 13:22:56 kai Exp $
@@ -10012,18 +10130,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl3.c linux-2.4.29/drivers/isdn
  
  static struct Fsm l3fsm;
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isdnl3.h linux-2.4.29/drivers/isdn/hisax/isdnl3.h
---- linux-2.4.29.old/drivers/isdn/hisax/isdnl3.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isdnl3.h   2005-03-22 15:06:47.679844344 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isdnl3.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isdnl3.h    2007-12-15 05:19:40.182710920 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isdnl3.h 2007-12-15 05:19:55.623590846 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnl3.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * This software may be used and distributed according to the terms
   * of the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isurf.c linux-2.4.29/drivers/isdn/hisax/isurf.c
---- linux-2.4.29.old/drivers/isdn/hisax/isurf.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/isurf.c    2005-03-22 15:06:47.699841304 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/isurf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/isurf.c     2007-12-15 05:19:40.190711376 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/isurf.c  2007-12-15 05:19:55.623590846 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isurf.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: isurf.c,v 1.12 2001/09/24 13:22:56 kai Exp $
@@ -10143,9 +10263,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/isurf.c linux-2.4.29/drivers/isdn/
        printk(KERN_INFO
               "ISurf: defined at 0x%x 0x%lx IRQ %d\n",
               cs->hw.isurf.reset,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/ix1_micro.c linux-2.4.29/drivers/isdn/hisax/ix1_micro.c
---- linux-2.4.29.old/drivers/isdn/hisax/ix1_micro.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/ix1_micro.c        2005-03-22 15:06:47.714839024 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/ix1_micro.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/ix1_micro.c 2007-12-15 05:19:40.198711831 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/ix1_micro.c      2007-12-15 05:19:55.623590846 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: ix1_micro.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: ix1_micro.c,v 2.12 2001/09/24 13:22:56 kai Exp $
@@ -10236,36 +10357,40 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/ix1_micro.c linux-2.4.29/drivers/i
        /* IO-Ports */
        cs->hw.ix1.isac_ale = card->para[1] + ISAC_COMMAND_OFFSET;
        cs->hw.ix1.hscx_ale = card->para[1] + HSCX_COMMAND_OFFSET;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade.c linux-2.4.29/drivers/isdn/hisax/jade.c
---- linux-2.4.29.old/drivers/isdn/hisax/jade.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade.c     2005-03-22 15:06:47.729836744 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade.c      2007-12-15 05:19:40.206712289 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade.c   2007-12-15 05:19:55.623590846 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: jade.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: jade.c,v 1.9 2001/09/24 13:22:56 kai Exp $
   *
   * JADE stuff (derived from original hscx.c)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade.h linux-2.4.29/drivers/isdn/hisax/jade.h
---- linux-2.4.29.old/drivers/isdn/hisax/jade.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade.h     2005-03-22 15:06:47.745834312 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade.h      2007-12-15 05:19:40.214712745 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade.h   2007-12-15 05:19:55.623590846 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: jade.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: jade.h,v 1.5 2001/09/24 13:22:56 kai Exp $
   *
   * JADE specific defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/jade_irq.c linux-2.4.29/drivers/isdn/hisax/jade_irq.c
---- linux-2.4.29.old/drivers/isdn/hisax/jade_irq.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/jade_irq.c 2005-03-22 15:06:47.760832032 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/jade_irq.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/jade_irq.c  2007-12-15 05:19:40.218712971 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/jade_irq.c       2007-12-15 05:19:55.627591072 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: jade_irq.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: jade_irq.c,v 1.7 2001/09/24 13:22:56 kai Exp $
   *
   * Low level JADE IRQ stuff (derived from original hscx_irq.c)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.c linux-2.4.29/drivers/isdn/hisax/l3_1tr6.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3_1tr6.c  2005-03-22 15:06:47.777829448 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3_1tr6.c   2007-12-15 05:19:40.226713429 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.c        2007-12-15 05:19:55.627591072 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3_1tr6.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: l3_1tr6.c,v 2.15 2001/09/24 13:22:56 kai Exp $
@@ -10281,18 +10406,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.c linux-2.4.29/drivers/isd
  
  #define MsgHead(ptr, cref, mty, dis) \
        *ptr++ = dis; \
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.h linux-2.4.29/drivers/isdn/hisax/l3_1tr6.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3_1tr6.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3_1tr6.h  2005-03-22 15:06:47.796826560 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3_1tr6.h   2007-12-15 05:19:40.234713885 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3_1tr6.h        2007-12-15 05:19:55.627591072 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3_1tr6.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * German 1TR6 D-channel protocol defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3dss1.c linux-2.4.29/drivers/isdn/hisax/l3dss1.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3dss1.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3dss1.c   2005-03-22 15:06:47.822822608 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3dss1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3dss1.c    2007-12-15 05:19:40.242714340 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3dss1.c 2007-12-15 05:19:55.635591530 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3dss1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: l3dss1.c,v 2.32 2001/09/24 13:22:56 kai Exp $
@@ -10308,18 +10435,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3dss1.c linux-2.4.29/drivers/isdn
  
  #define EXT_BEARER_CAPS 1
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3dss1.h linux-2.4.29/drivers/isdn/hisax/l3dss1.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3dss1.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3dss1.h   2005-03-22 15:06:47.842819568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3dss1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3dss1.h    2007-12-15 05:19:40.250714795 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3dss1.h 2007-12-15 05:19:55.635591530 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3dss1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * DSS1 (Euro) D-channel protocol defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3ni1.c linux-2.4.29/drivers/isdn/hisax/l3ni1.c
---- linux-2.4.29.old/drivers/isdn/hisax/l3ni1.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3ni1.c    2005-03-22 15:06:47.859816984 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3ni1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3ni1.c     2007-12-15 05:19:40.254715024 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3ni1.c  2007-12-15 05:19:55.635591530 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3ni1.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: l3ni1.c,v 2.8 2001/09/24 13:22:56 kai Exp $
@@ -10335,27 +10464,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3ni1.c linux-2.4.29/drivers/isdn/
  
  #define EXT_BEARER_CAPS 1
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/l3ni1.h linux-2.4.29/drivers/isdn/hisax/l3ni1.h
---- linux-2.4.29.old/drivers/isdn/hisax/l3ni1.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/l3ni1.h    2005-03-22 15:06:47.877814248 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/l3ni1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/l3ni1.h     2007-12-15 05:19:40.262715480 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/l3ni1.h  2007-12-15 05:19:55.635591530 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: l3ni1.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * NI1 D-channel protocol
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/lmgr.c linux-2.4.29/drivers/isdn/hisax/lmgr.c
---- linux-2.4.29.old/drivers/isdn/hisax/lmgr.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/lmgr.c     2005-03-22 15:06:47.895811512 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/lmgr.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/lmgr.c      2007-12-15 05:19:40.270715935 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/lmgr.c   2007-12-15 05:19:55.639591759 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: lmgr.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id$
   *
   * Layermanagement module
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/md5sums.asc linux-2.4.29/drivers/isdn/hisax/md5sums.asc
---- linux-2.4.29.old/drivers/isdn/hisax/md5sums.asc    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/md5sums.asc        2005-03-22 15:06:47.910809232 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/md5sums.asc
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/md5sums.asc 2007-12-15 05:19:40.278716390 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/md5sums.asc      2007-12-15 05:19:55.639591759 +0100
 @@ -1,33 +1,22 @@
 ------BEGIN PGP SIGNED MESSAGE-----
 -Hash: SHA1
@@ -10406,9 +10538,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/md5sums.asc linux-2.4.29/drivers/i
 -GIKgAEdRLzERmpt/bCCwAbY=
 -=FaHw
 ------END PGP SIGNATURE-----
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/mic.c linux-2.4.29/drivers/isdn/hisax/mic.c
---- linux-2.4.29.old/drivers/isdn/hisax/mic.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/mic.c      2005-03-22 15:06:47.926806800 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/mic.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/mic.c       2007-12-15 05:19:40.282716619 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/mic.c    2007-12-15 05:19:55.639591759 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: mic.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: mic.c,v 1.12 2001/09/24 13:22:56 kai Exp $
@@ -10424,9 +10557,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/mic.c linux-2.4.29/drivers/isdn/hi
  
  #define byteout(addr,val) outb(val,addr)
  #define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/netjet.c linux-2.4.29/drivers/isdn/hisax/netjet.c
---- linux-2.4.29.old/drivers/isdn/hisax/netjet.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/netjet.c   2005-03-22 15:06:47.941804520 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/netjet.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/netjet.c    2007-12-15 05:19:40.290717075 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/netjet.c 2007-12-15 05:19:55.639591759 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: netjet.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: netjet.c,v 1.29 2001/09/24 13:22:56 kai Exp $
@@ -10506,18 +10640,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/netjet.c linux-2.4.29/drivers/isdn
                        l1_msg_b(st, pr, arg);
                        break;
                case (PH_DEACTIVATE | CONFIRM):
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/netjet.h linux-2.4.29/drivers/isdn/hisax/netjet.h
---- linux-2.4.29.old/drivers/isdn/hisax/netjet.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/netjet.h   2005-03-22 15:06:47.956802240 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/netjet.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/netjet.h    2007-12-15 05:19:40.298717530 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/netjet.h 2007-12-15 05:19:55.639591759 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: netjet.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: netjet.h,v 2.8 2001/09/24 13:22:56 kai Exp $
   *
   * NETjet common header file
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/niccy.c linux-2.4.29/drivers/isdn/hisax/niccy.c
---- linux-2.4.29.old/drivers/isdn/hisax/niccy.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/niccy.c    2005-03-22 15:06:47.977799048 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/niccy.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/niccy.c     2007-12-15 05:19:40.306717988 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/niccy.c  2007-12-15 05:19:55.643591986 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: niccy.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: niccy.c,v 1.21 2001/10/20 22:05:00 kai Exp $
@@ -10603,9 +10739,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/niccy.c linux-2.4.29/drivers/isdn/
                        if (!pci_ioaddr) {
                                printk(KERN_WARNING "Niccy: No IO-Adr for PCI card found\n");
                                return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_s.c linux-2.4.29/drivers/isdn/hisax/nj_s.c
---- linux-2.4.29.old/drivers/isdn/hisax/nj_s.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/nj_s.c     2005-03-22 15:06:47.993796616 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/nj_s.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/nj_s.c      2007-12-15 05:19:40.314718444 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/nj_s.c   2007-12-15 05:19:55.643591986 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: nj_s.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: nj_s.c,v 2.13 2001/09/24 13:22:56 kai Exp $
@@ -10663,9 +10800,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_s.c linux-2.4.29/drivers/isdn/h
        cs->readisac  = &NETjet_ReadIC;
        cs->writeisac = &NETjet_WriteIC;
        cs->readisacfifo  = &NETjet_ReadICfifo;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_u.c linux-2.4.29/drivers/isdn/hisax/nj_u.c
---- linux-2.4.29.old/drivers/isdn/hisax/nj_u.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/nj_u.c     2005-03-22 15:06:48.008794336 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/nj_u.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/nj_u.c      2007-12-15 05:19:40.318718670 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/nj_u.c   2007-12-15 05:19:55.643591986 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: nj_u.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $ 
 +/* $Id: nj_u.c,v 2.14 2001/09/24 13:22:56 kai Exp $ 
@@ -10695,9 +10833,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/nj_u.c linux-2.4.29/drivers/isdn/h
                        if (!cs->hw.njet.base) {
                                printk(KERN_WARNING "NETspider-U: No IO-Adr for PCI card found\n");
                                return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/q931.c linux-2.4.29/drivers/isdn/hisax/q931.c
---- linux-2.4.29.old/drivers/isdn/hisax/q931.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/q931.c     2005-03-22 15:06:48.032790688 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/q931.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/q931.c      2007-12-15 05:19:40.326719128 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/q931.c   2007-12-15 05:19:55.647592212 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: q931.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: q931.c,v 1.12 2001/09/24 13:22:56 kai Exp $
@@ -10736,9 +10875,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/q931.c linux-2.4.29/drivers/isdn/h
  
  static int
  prbits(char *dest, u_char b, int start, int len)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.c linux-2.4.29/drivers/isdn/hisax/rawhdlc.c
---- linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/rawhdlc.c  2005-03-22 15:06:48.047788408 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.c        2007-12-15 05:19:55.647592212 +0100
 @@ -0,0 +1,543 @@
 +/* $Id: rawhdlc.c,v 1.7 2001/09/24 13:22:57 kai Exp $
 + *
@@ -11283,9 +11423,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.c linux-2.4.29/drivers/isd
 +}
 +
 +#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.h linux-2.4.29/drivers/isdn/hisax/rawhdlc.h
---- linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/rawhdlc.h  2005-03-22 15:06:48.076784000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/rawhdlc.h        2007-12-15 05:19:55.647592212 +0100
 @@ -0,0 +1,28 @@
 +/* $Id: rawhdlc.h,v 1.5 2001/09/24 13:22:57 kai Exp $
 + *
@@ -11315,9 +11456,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/rawhdlc.h linux-2.4.29/drivers/isd
 +                       u_char *src, u_int slen, u_char *dst, u_int dsize);
 +#define RAWHDLC_H
 +#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/s0box.c linux-2.4.29/drivers/isdn/hisax/s0box.c
---- linux-2.4.29.old/drivers/isdn/hisax/s0box.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/s0box.c    2005-03-22 15:06:48.092781568 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/s0box.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/s0box.c     2007-12-15 05:19:40.346720268 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/s0box.c  2007-12-15 05:19:55.647592212 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: s0box.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: s0box.c,v 2.6 2001/09/24 13:22:57 kai Exp $
@@ -11333,9 +11475,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/s0box.c linux-2.4.29/drivers/isdn/
  
  static inline void
  writereg(unsigned int padr, signed int addr, u_char off, u_char val) {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/saphir.c linux-2.4.29/drivers/isdn/hisax/saphir.c
---- linux-2.4.29.old/drivers/isdn/hisax/saphir.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/saphir.c   2005-03-22 15:06:48.107779288 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/saphir.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/saphir.c    2007-12-15 05:19:40.350720494 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/saphir.c 2007-12-15 05:19:55.647592212 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: saphir.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: saphir.c,v 1.10 2001/09/24 13:22:57 kai Exp $
@@ -11351,9 +11494,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/saphir.c linux-2.4.29/drivers/isdn
  
  #define byteout(addr,val) outb(val,addr)
  #define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sedlbauer.c linux-2.4.29/drivers/isdn/hisax/sedlbauer.c
---- linux-2.4.29.old/drivers/isdn/hisax/sedlbauer.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/sedlbauer.c        2005-03-22 15:06:48.123776856 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/sedlbauer.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/sedlbauer.c 2007-12-15 05:19:40.358720950 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/sedlbauer.c      2007-12-15 05:19:55.651592441 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: sedlbauer.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: sedlbauer.c,v 1.34 2002/02/09 21:00:57 keil Exp $
@@ -11520,9 +11664,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sedlbauer.c linux-2.4.29/drivers/i
        /* In case of the sedlbauer pcmcia card, this region is in use,
         * reserved for us by the card manager. So we do not check it
         * here, it would fail.
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sportster.c linux-2.4.29/drivers/isdn/hisax/sportster.c
---- linux-2.4.29.old/drivers/isdn/hisax/sportster.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/sportster.c        2005-03-22 15:06:48.169769864 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/sportster.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/sportster.c 2007-12-15 05:19:40.366721408 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/sportster.c      2007-12-15 05:19:55.651592441 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: sportster.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: sportster.c,v 1.16 2001/09/24 13:22:57 kai Exp $
@@ -11538,9 +11683,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/sportster.c linux-2.4.29/drivers/i
  
  #define byteout(addr,val) outb(val,addr)
  #define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481-debug.h linux-2.4.29/drivers/isdn/hisax/st5481-debug.h
---- linux-2.4.29.old/drivers/isdn/hisax/st5481-debug.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481-debug.h     2005-03-22 15:06:48.184767584 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481-debug.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481-debug.h   2007-12-15 05:19:55.651592441 +0100
 @@ -0,0 +1,103 @@
 +#define ST5481_DEBUG 0x0
 +
@@ -11645,9 +11791,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481-debug.h linux-2.4.29/driver
 +
 +
 +
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481.h linux-2.4.29/drivers/isdn/hisax/st5481.h
---- linux-2.4.29.old/drivers/isdn/hisax/st5481.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481.h   2005-03-22 15:06:48.201765000 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481.h    2007-12-15 05:19:40.378722089 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481.h 2007-12-15 05:19:55.651592441 +0100
 @@ -219,15 +219,15 @@
  #define L1_EVENT_COUNT (EV_TIMER3 + 1)
  
@@ -11747,9 +11894,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481.h linux-2.4.29/drivers/isdn
  {
        int i,j;
        int len,ofs;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_b.c linux-2.4.29/drivers/isdn/hisax/st5481_b.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_b.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_b.c 2005-03-22 15:06:48.216762720 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_b.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_b.c  2007-12-15 05:19:40.386722547 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_b.c       2007-12-15 05:19:55.651592441 +0100
 @@ -67,28 +67,24 @@
                                bytes_sent = buf_size - len;
                                if (skb->len < bytes_sent)
@@ -11827,9 +11975,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_b.c linux-2.4.29/drivers/is
  {
        DBG(4,"");
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_d.c linux-2.4.29/drivers/isdn/hisax/st5481_d.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_d.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_d.c 2005-03-22 15:06:48.231760440 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_d.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_d.c  2007-12-15 05:19:40.394723003 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_d.c       2007-12-15 05:19:55.655592670 +0100
 @@ -162,8 +162,8 @@
        {ST_L1_F8, EV_TIMER3,            l1_timer3},
        {ST_L1_F8, EV_IND_DP,            l1_go_f3},
@@ -11912,9 +12061,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_d.c linux-2.4.29/drivers/is
  {
        DBG(2,"");
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_init.c linux-2.4.29/drivers/isdn/hisax/st5481_init.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_init.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_init.c      2005-03-22 15:06:48.268754816 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_init.c       2007-12-15 05:19:40.398723229 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_init.c    2007-12-15 05:19:55.655592670 +0100
 @@ -14,6 +14,7 @@
   * TODO:
   *
@@ -11932,9 +12082,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_init.c linux-2.4.29/drivers
        id_table: st5481_ids,
  };
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_usb.c linux-2.4.29/drivers/isdn/hisax/st5481_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/st5481_usb.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/st5481_usb.c       2005-03-22 15:06:48.284752384 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/st5481_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/st5481_usb.c        2007-12-15 05:19:40.406723687 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/st5481_usb.c     2007-12-15 05:19:55.655592670 +0100
 @@ -41,9 +41,9 @@
                (unsigned char *)&ctrl->msg_fifo.data[r_index];
        
@@ -12077,9 +12228,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/st5481_usb.c linux-2.4.29/drivers/
                st5481_usb_device_ctrl_msg(in->adapter, in->counter,
                                           in->packet_size,
                                           NULL, NULL);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/tei.c linux-2.4.29/drivers/isdn/hisax/tei.c
---- linux-2.4.29.old/drivers/isdn/hisax/tei.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/tei.c      2005-03-22 15:06:48.316747520 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/tei.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/tei.c       2007-12-15 05:19:40.414724143 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/tei.c    2007-12-15 05:19:55.655592670 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tei.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: tei.c,v 2.20 2001/09/24 13:22:57 kai Exp $
@@ -12095,9 +12247,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/tei.c linux-2.4.29/drivers/isdn/hi
  
  #define ID_REQUEST    1
  #define ID_ASSIGNED   2
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teleint.c linux-2.4.29/drivers/isdn/hisax/teleint.c
---- linux-2.4.29.old/drivers/isdn/hisax/teleint.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teleint.c  2005-03-22 15:06:48.330745392 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teleint.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teleint.c   2007-12-15 05:19:40.422724598 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teleint.c        2007-12-15 05:19:55.659592899 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: teleint.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: teleint.c,v 1.16 2001/09/24 13:22:57 kai Exp $
@@ -12113,9 +12266,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teleint.c linux-2.4.29/drivers/isd
  
  #define byteout(addr,val) outb(val,addr)
  #define bytein(addr) inb(addr)
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles0.c linux-2.4.29/drivers/isdn/hisax/teles0.c
---- linux-2.4.29.old/drivers/isdn/hisax/teles0.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teles0.c   2005-03-22 15:06:48.348742656 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teles0.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teles0.c    2007-12-15 05:19:40.430725053 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teles0.c 2007-12-15 05:19:55.659592899 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: teles0.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: teles0.c,v 2.15 2001/09/24 13:22:57 kai Exp $
@@ -12160,9 +12314,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles0.c linux-2.4.29/drivers/isdn
        printk(KERN_INFO
               "HiSax: %s config irq:%d mem:0x%lX cfg:0x%X\n",
               CardType[cs->typ], cs->irq,
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles3.c linux-2.4.29/drivers/isdn/hisax/teles3.c
---- linux-2.4.29.old/drivers/isdn/hisax/teles3.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/teles3.c   2005-03-22 15:06:48.367739768 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/teles3.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/teles3.c    2007-12-15 05:19:40.434725282 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/teles3.c 2007-12-15 05:19:55.659592899 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: teles3.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: teles3.c,v 2.19 2001/09/24 13:22:57 kai Exp $
@@ -12258,9 +12413,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/teles3.c linux-2.4.29/drivers/isdn
        if (cs->typ == ISDN_CTYPE_16_3) {
                cs->hw.teles3.cfg_reg = card->para[1];
                switch (cs->hw.teles3.cfg_reg) {
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/telespci.c linux-2.4.29/drivers/isdn/hisax/telespci.c
---- linux-2.4.29.old/drivers/isdn/hisax/telespci.c     2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/telespci.c 2005-03-22 15:06:48.382737488 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/telespci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/telespci.c  2007-12-15 05:19:40.442725738 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/telespci.c       2007-12-15 05:19:55.659592899 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: telespci.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: telespci.c,v 2.23 2001/09/24 13:22:57 kai Exp $
@@ -12292,9 +12448,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/telespci.c linux-2.4.29/drivers/is
        } else {
                printk(KERN_WARNING "TelesPCI: No PCI card found\n");
                return(0);
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/w6692.c linux-2.4.29/drivers/isdn/hisax/w6692.c
---- linux-2.4.29.old/drivers/isdn/hisax/w6692.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/w6692.c    2005-03-22 15:06:48.398735056 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/w6692.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/w6692.c     2007-12-15 05:19:40.450726193 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/w6692.c  2007-12-15 05:19:55.659592899 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: w6692.c,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: w6692.c,v 1.18 2001/09/24 13:22:57 kai Exp $
@@ -12476,18 +12633,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hisax/w6692.c linux-2.4.29/drivers/isdn/
               cs->hw.w6692.iobase);
  
        cs->readW6692 = &ReadW6692;
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/w6692.h linux-2.4.29/drivers/isdn/hisax/w6692.h
---- linux-2.4.29.old/drivers/isdn/hisax/w6692.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/w6692.h    2005-03-22 15:06:48.414732624 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/w6692.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/w6692.h     2007-12-15 05:19:40.458726649 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/w6692.h  2007-12-15 05:19:55.663593126 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: w6692.h,v 1.1.4.1 2001/11/20 14:19:36 kai Exp $
 +/* $Id: w6692.h,v 1.4 2001/09/24 13:22:57 kai Exp $
   *
   * Winbond W6692 specific defines
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.c linux-2.4.29/drivers/isdn/hysdn/boardergo.c
---- linux-2.4.29.old/drivers/isdn/hysdn/boardergo.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/boardergo.c        2005-03-22 15:06:48.468724416 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/boardergo.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/boardergo.c 2007-12-15 05:19:40.466727107 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/boardergo.c      2007-12-15 05:19:55.667593352 +0100
 @@ -1,27 +1,41 @@
 -/* $Id: boardergo.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 - *
@@ -12691,9 +12850,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.c linux-2.4.29/drivers/i
                set_current_state(TASK_INTERRUPTIBLE);
                schedule_timeout((50 * HZ) / 1000);     /* Timeout 50ms */
        }                       /* wait until timeout */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.h linux-2.4.29/drivers/isdn/hysdn/boardergo.h
---- linux-2.4.29.old/drivers/isdn/hysdn/boardergo.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/boardergo.h        2005-03-22 15:06:48.485721832 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/boardergo.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/boardergo.h 2007-12-15 05:19:40.470727333 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/boardergo.h      2007-12-15 05:19:55.667593352 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: boardergo.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -12708,9 +12868,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/boardergo.h linux-2.4.29/drivers/i
  
  /************************************************/
  /* defines for the dual port memory of the card */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hycapi.c linux-2.4.29/drivers/isdn/hysdn/hycapi.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hycapi.c       2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hycapi.c   2005-03-22 15:06:48.500719552 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hycapi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hycapi.c    2007-12-15 05:19:40.478727788 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hycapi.c 2007-12-15 05:19:55.671593581 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hycapi.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -12726,9 +12887,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hycapi.c linux-2.4.29/drivers/isdn
  
  unsigned int hycapi_enable = 0xffffffff; 
  MODULE_PARM(hycapi_enable, "i");
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_boot.c linux-2.4.29/drivers/isdn/hysdn/hysdn_boot.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_boot.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_boot.c       2005-03-22 15:06:48.516717120 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_boot.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_boot.c        2007-12-15 05:19:40.486728246 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_boot.c     2007-12-15 05:19:55.671593581 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_boot.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -12744,9 +12906,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_boot.c linux-2.4.29/drivers/
                                return (boot->last_error);      /* error writing data */
  
                        if (boot->pof_recoffset + datlen >= boot->pof_reclen)
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_defs.h linux-2.4.29/drivers/isdn/hysdn/hysdn_defs.h
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_defs.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_defs.h       2005-03-22 15:06:48.533714536 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_defs.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_defs.h        2007-12-15 05:19:40.494728702 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_defs.h     2007-12-15 05:19:55.671593581 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_defs.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: hysdn_defs.h,v 1.10 2001/09/24 13:23:03 kai Exp $
@@ -12773,9 +12936,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_defs.h linux-2.4.29/drivers/
  
        /* boot process */
        void *boot;             /* pointer to boot private data */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_init.c linux-2.4.29/drivers/isdn/hysdn/hysdn_init.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_init.c   2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_init.c       2005-03-22 15:06:48.551711800 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_init.c        2007-12-15 05:19:40.502729157 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_init.c     2007-12-15 05:19:55.671593581 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_init.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -12820,9 +12984,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_init.c linux-2.4.29/drivers/
                card->brdtype = BD_NONE;        /* unknown */
                card->debug_flags = DEF_DEB_FLAGS;      /* set default debug */
                card->faxchans = 0;     /* default no fax channels */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_net.c linux-2.4.29/drivers/isdn/hysdn/hysdn_net.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_net.c    2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_net.c        2005-03-22 15:06:48.567709368 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_net.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_net.c 2007-12-15 05:19:40.506729386 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_net.c      2007-12-15 05:19:55.675593810 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_net.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -13042,18 +13207,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_net.c linux-2.4.29/drivers/i
  
        unregister_netdev(dev); /* release the device */
        kfree(dev);             /* release the memory allocated */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_pof.h linux-2.4.29/drivers/isdn/hysdn/hysdn_pof.h
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_pof.h    2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_pof.h        2005-03-22 15:06:48.583706936 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_pof.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_pof.h 2007-12-15 05:19:40.514729842 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_pof.h      2007-12-15 05:19:55.675593810 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_pof.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Linux driver for HYSDN cards, definitions used for handling pof-files.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_procconf.c linux-2.4.29/drivers/isdn/hysdn/hysdn_procconf.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_procconf.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_procconf.c   2005-03-22 15:06:48.598704656 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_procconf.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_procconf.c    2007-12-15 05:19:40.522730297 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_procconf.c 2007-12-15 05:19:55.675593810 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_procconf.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -13250,9 +13417,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_procconf.c linux-2.4.29/driv
                        hysdn_proclog_init(card);       /* init the log file entry */
                }
                card = card->next;      /* next entry */
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_proclog.c linux-2.4.29/drivers/isdn/hysdn/hysdn_proclog.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_proclog.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_proclog.c    2005-03-22 15:06:48.613702376 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_proclog.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_proclog.c     2007-12-15 05:19:40.530730752 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_proclog.c  2007-12-15 05:19:55.675593810 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_proclog.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -13436,9 +13604,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_proclog.c linux-2.4.29/drive
                }
  
                init_waitqueue_head(&(pd->rd_queue));
-diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_sched.c linux-2.4.29/drivers/isdn/hysdn/hysdn_sched.c
---- linux-2.4.29.old/drivers/isdn/hysdn/hysdn_sched.c  2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/hysdn/hysdn_sched.c      2005-03-22 15:06:48.630699792 +0100
+Index: linux-2.4.35.4/drivers/isdn/hysdn/hysdn_sched.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hysdn/hysdn_sched.c       2007-12-15 05:19:40.538731208 +0100
++++ linux-2.4.35.4/drivers/isdn/hysdn/hysdn_sched.c    2007-12-15 05:19:55.679594039 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_sched.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: hysdn_sched.c,v 1.9 2001/09/24 13:23:03 kai Exp $
@@ -13522,9 +13691,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/hysdn/hysdn_sched.c linux-2.4.29/drivers
        if (card->debug_flags & LOG_SCHED_ASYN)
                hysdn_addlog(card, "async tx-cfg data send");
  
-diff -rNu linux-2.4.29.old/drivers/isdn/icn/icn.c linux-2.4.29/drivers/isdn/icn/icn.c
---- linux-2.4.29.old/drivers/isdn/icn/icn.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/icn/icn.c        2005-03-22 15:06:48.722685808 +0100
+Index: linux-2.4.35.4/drivers/isdn/icn/icn.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/icn/icn.c 2007-12-15 05:19:40.546731666 +0100
++++ linux-2.4.35.4/drivers/isdn/icn/icn.c      2007-12-15 05:19:55.679594039 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: icn.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -13577,18 +13747,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/icn/icn.c linux-2.4.29/drivers/isdn/icn/
  #endif /* MODULE */
  
  static int __init icn_init(void)
-diff -rNu linux-2.4.29.old/drivers/isdn/icn/icn.h linux-2.4.29/drivers/isdn/icn/icn.h
---- linux-2.4.29.old/drivers/isdn/icn/icn.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/icn/icn.h        2005-03-22 15:06:48.752681248 +0100
+Index: linux-2.4.35.4/drivers/isdn/icn/icn.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/icn/icn.h 2007-12-15 05:19:40.554732121 +0100
++++ linux-2.4.35.4/drivers/isdn/icn/icn.h      2007-12-15 05:19:55.679594039 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: icn.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * ISDN lowlevel-module for the ICN active ISDN-Card.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.c linux-2.4.29/drivers/isdn/isdn_audio.c
---- linux-2.4.29.old/drivers/isdn/isdn_audio.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_audio.c     2005-03-22 15:06:44.306357192 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_audio.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_audio.c      2007-12-15 05:19:40.562732576 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_audio.c   2007-12-15 05:19:55.679594039 +0100
 @@ -1,9 +1,9 @@
 -/* $Id: isdn_audio.c,v 1.1.4.1 2001/11/20 14:19:33 kai Exp $
 +/* $Id: isdn_audio.c,v 1.24 2002/08/13 09:57:26 keil Exp $
@@ -13753,9 +13925,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.c linux-2.4.29/drivers/isdn/i
                                what = '.';
                }
                if ((what != s->last) && (what != ' ') && (what != '.')) {
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.h linux-2.4.29/drivers/isdn/isdn_audio.h
---- linux-2.4.29.old/drivers/isdn/isdn_audio.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_audio.h     2005-03-22 15:06:44.321354912 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_audio.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_audio.h      2007-12-15 05:19:40.566732806 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_audio.h   2007-12-15 05:19:55.683594266 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_audio.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_audio.h,v 1.10 2001/09/24 13:22:42 kai Exp $
@@ -13770,9 +13943,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_audio.h linux-2.4.29/drivers/isdn/i
        int idx;
        int buf[DTMF_NPOINTS];
  } dtmf_state;
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_bsdcomp.c linux-2.4.29/drivers/isdn/isdn_bsdcomp.c
---- linux-2.4.29.old/drivers/isdn/isdn_bsdcomp.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_bsdcomp.c   2005-03-22 15:06:44.339352176 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_bsdcomp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_bsdcomp.c    2007-12-15 05:19:40.574733261 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_bsdcomp.c 2007-12-15 05:19:55.683594266 +0100
 @@ -105,6 +105,14 @@
  
  #define DEBUG 1
@@ -14013,9 +14187,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_bsdcomp.c linux-2.4.29/drivers/isdn
        return skb_out->len;
  }
  
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/isdn_common.c
---- linux-2.4.29.old/drivers/isdn/isdn_common.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_common.c    2005-03-22 15:06:44.359349136 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_common.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_common.c     2007-12-15 05:19:40.582733716 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_common.c  2007-12-15 05:19:55.687594492 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_common.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_common.c,v 1.137 2002/02/09 21:19:11 keil Exp $
@@ -14463,7 +14638,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                if (dev->drv[drvidx]->interface->readstat) {
                        if (count > dev->drv[drvidx]->stavail)
                                count = dev->drv[drvidx]->stavail;
-@@ -1061,6 +1216,9 @@
+@@ -1065,6 +1220,9 @@
                } else {
                        len = 0;
                }
@@ -14473,7 +14648,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                save_flags(flags);
                cli();
                if (len)
-@@ -1068,7 +1226,7 @@
+@@ -1072,7 +1230,7 @@
                else
                        dev->drv[drvidx]->stavail = 0;
                restore_flags(flags);
@@ -14482,7 +14657,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                retval = len;
                goto out;
        }
-@@ -1080,7 +1238,9 @@
+@@ -1084,7 +1242,9 @@
  #endif
        retval = -ENODEV;
   out:
@@ -14492,7 +14667,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        return retval;
  }
  
-@@ -1092,15 +1252,18 @@
+@@ -1096,15 +1256,18 @@
        int chidx;
        int retval;
  
@@ -14513,7 +14688,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        if (minor <= ISDN_MINOR_BMAX) {
                printk(KERN_WARNING "isdn_write minor %d obsolete!\n", minor);
                drvidx = isdn_minor2drv(minor);
-@@ -1145,7 +1308,9 @@
+@@ -1149,7 +1312,9 @@
  #endif
        retval = -ENODEV;
   out:
@@ -14523,7 +14698,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        return retval;
  }
  
-@@ -1156,15 +1321,12 @@
+@@ -1160,15 +1325,12 @@
        unsigned int minor = MINOR(file->f_dentry->d_inode->i_rdev);
        int drvidx = isdn_minor2drv(minor - ISDN_MINOR_CTRL);
  
@@ -14544,7 +14719,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        if (minor >= ISDN_MINOR_CTRL && minor <= ISDN_MINOR_CTRLMAX) {
                if (drvidx < 0) {
                        /* driver deregistered while file open */
-@@ -1186,7 +1348,9 @@
+@@ -1190,7 +1352,9 @@
  #endif
        mask = POLLERR;
   out:
@@ -14554,7 +14729,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        return mask;
  }
  
-@@ -1216,42 +1380,9 @@
+@@ -1220,42 +1384,9 @@
  #define phone iocpar.phone
  #define cfg   iocpar.cfg
  
@@ -14600,7 +14775,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        if (!dev->drivers)
                return -ENODEV;
        if (minor <= ISDN_MINOR_BMAX) {
-@@ -1273,11 +1404,34 @@
+@@ -1277,11 +1408,34 @@
   */
                switch (cmd) {
                        case IIOCNETDWRSET:
@@ -14635,7 +14810,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
  #ifdef CONFIG_NETDEVICES
                        case IIOCNETAIF:
                                /* Add a network-interface */
-@@ -1650,22 +1804,12 @@
+@@ -1654,22 +1808,12 @@
        int chidx;
        int retval = -ENODEV;
  
@@ -14662,7 +14837,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        }
        if (!dev->channels)
                goto out;
-@@ -1688,6 +1832,9 @@
+@@ -1692,6 +1836,9 @@
                if (drvidx < 0)
                        goto out;
                isdn_lock_drivers();
@@ -14672,7 +14847,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                retval = 0;
                goto out;
        }
-@@ -1700,6 +1847,10 @@
+@@ -1704,6 +1851,10 @@
        }
  #endif
   out:
@@ -14683,7 +14858,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        return retval;
  }
  
-@@ -1708,25 +1859,11 @@
+@@ -1712,25 +1863,11 @@
  {
        uint minor = MINOR(ino->i_rdev);
  
@@ -14712,7 +14887,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        }
        isdn_unlock_drivers();
        if (minor <= ISDN_MINOR_BMAX)
-@@ -1734,6 +1871,12 @@
+@@ -1738,6 +1875,12 @@
        if (minor <= ISDN_MINOR_CTRLMAX) {
                if (dev->profd == current)
                        dev->profd = NULL;
@@ -14725,7 +14900,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                goto out;
        }
  #ifdef CONFIG_ISDN_PPP
-@@ -1742,13 +1885,19 @@
+@@ -1746,13 +1889,19 @@
  #endif
  
   out:
@@ -14745,7 +14920,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        llseek:         no_llseek,
        read:           isdn_read,
        write:          isdn_write,
-@@ -1801,6 +1950,15 @@
+@@ -1805,6 +1954,15 @@
                if (USG_NONE(dev->usage[i]) &&
                    (dev->drvmap[i] != -1)) {
                        int d = dev->drvmap[i];
@@ -14761,7 +14936,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                        if ((dev->usage[i] & ISDN_USAGE_EXCLUSIVE) &&
                        ((pre_dev != d) || (pre_chan != dev->chanmap[i])))
                                continue;
-@@ -1819,7 +1977,11 @@
+@@ -1823,7 +1981,11 @@
                                                restore_flags(flags);
                                                return i;
                                        } else {
@@ -14773,7 +14948,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                                                        dev->usage[i] &= ISDN_USAGE_EXCLUSIVE;
                                                        dev->usage[i] |= usage;
                                                        isdn_info_update();
-@@ -2006,7 +2168,7 @@
+@@ -2010,7 +2172,7 @@
  
        if ((adding) && (d->rcverr))
                kfree(d->rcverr);
@@ -14782,7 +14957,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                printk(KERN_WARNING "register_isdn: Could not alloc rcverr\n");
                return -1;
        }
-@@ -2014,7 +2176,7 @@
+@@ -2018,7 +2180,7 @@
  
        if ((adding) && (d->rcvcount))
                kfree(d->rcvcount);
@@ -14791,7 +14966,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                printk(KERN_WARNING "register_isdn: Could not alloc rcvcount\n");
                if (!adding) kfree(d->rcverr);
                return -1;
-@@ -2026,7 +2188,8 @@
+@@ -2030,7 +2192,8 @@
                        skb_queue_purge(&d->rpqueue[j]);
                kfree(d->rpqueue);
        }
@@ -14801,7 +14976,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                printk(KERN_WARNING "register_isdn: Could not alloc rpqueue\n");
                if (!adding) {
                        kfree(d->rcvcount);
-@@ -2040,7 +2203,8 @@
+@@ -2044,7 +2207,8 @@
  
        if ((adding) && (d->rcv_waitq))
                kfree(d->rcv_waitq);
@@ -14811,7 +14986,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        if (!d->rcv_waitq) {
                printk(KERN_WARNING "register_isdn: Could not alloc rcv_waitq\n");
                if (!adding) {
-@@ -2064,7 +2228,9 @@
+@@ -2068,7 +2232,9 @@
                        if (dev->chanmap[k] < 0) {
                                dev->chanmap[k] = j;
                                dev->drvmap[k] = drvidx;
@@ -14821,7 +14996,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                                break;
                        }
        restore_flags(flags);
-@@ -2128,6 +2294,7 @@
+@@ -2132,6 +2298,7 @@
          i_div->ll_cmd = isdn_command; /* set command function */
          i_div->drv_to_name = map_drvname; 
          i_div->name_to_drv = map_namedrv; 
@@ -14829,7 +15004,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
          MOD_INC_USE_COUNT;
          divert_if = i_div; /* remember interface */
          return(DIVERT_NO_ERR);
-@@ -2165,7 +2332,7 @@
+@@ -2169,7 +2336,7 @@
                printk(KERN_WARNING "register_isdn: No write routine given.\n");
                return 0;
        }
@@ -14838,7 +15013,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                printk(KERN_WARNING "register_isdn: Could not alloc driver-struct\n");
                return 0;
        }
-@@ -2225,6 +2392,7 @@
+@@ -2229,6 +2396,7 @@
        return rev;
  }
  
@@ -14846,7 +15021,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
  #ifdef CONFIG_DEVFS_FS
  
  static devfs_handle_t devfs_handle;
-@@ -2314,6 +2482,7 @@
+@@ -2318,6 +2486,7 @@
  }
  
  #endif  /* CONFIG_DEVFS_FS */
@@ -14854,7 +15029,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
  
  /*
   * Allocate and initialize all data, register modem-devices
-@@ -2331,7 +2500,6 @@
+@@ -2335,7 +2504,6 @@
        init_timer(&dev->timer);
        dev->timer.function = isdn_timer_funct;
        init_MUTEX(&dev->sem);
@@ -14862,7 +15037,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        for (i = 0; i < ISDN_MAX_CHANNELS; i++) {
                dev->drvmap[i] = -1;
                dev->chanmap[i] = -1;
-@@ -2345,7 +2513,9 @@
+@@ -2349,7 +2517,9 @@
                vfree(dev);
                return -EIO;
        }
@@ -14872,7 +15047,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        if ((i = isdn_tty_modem_init()) < 0) {
                printk(KERN_WARNING "isdn: Could not register tty devices\n");
                if (i == -3)
-@@ -2353,7 +2523,9 @@
+@@ -2357,7 +2527,9 @@
                if (i <= -2)
                        tty_unregister_driver(&dev->mdm.tty_modem);
                vfree(dev);
@@ -14882,7 +15057,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
                return -EIO;
        }
-@@ -2364,7 +2536,9 @@
+@@ -2368,7 +2540,9 @@
                tty_unregister_driver(&dev->mdm.cua_modem);
                for (i = 0; i < ISDN_MAX_CHANNELS; i++)
                        kfree(dev->mdm.info[i].xmit_buf - 4);
@@ -14892,7 +15067,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
                devfs_unregister_chrdev(ISDN_MAJOR, "isdn");
                vfree(dev);
                return -EIO;
-@@ -2390,6 +2564,9 @@
+@@ -2394,6 +2568,9 @@
        printk("\n");
  #endif
        isdn_info_update();
@@ -14902,7 +15077,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        return 0;
  }
  
-@@ -2398,7 +2575,7 @@
+@@ -2402,7 +2579,7 @@
   */
  static void __exit isdn_exit(void)
  {
@@ -14911,7 +15086,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
        int i;
  
  #ifdef CONFIG_ISDN_PPP
-@@ -2432,13 +2609,18 @@
+@@ -2436,13 +2613,18 @@
                printk(KERN_WARNING "isdn: controldevice busy, remove cancelled\n");
                restore_flags(flags);
        } else {
@@ -14930,9 +15105,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.c linux-2.4.29/drivers/isdn/
  }
  
  module_init(isdn_init);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.h linux-2.4.29/drivers/isdn/isdn_common.h
---- linux-2.4.29.old/drivers/isdn/isdn_common.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_common.h    2005-03-22 15:06:44.374346856 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_common.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_common.h     2007-12-15 05:19:40.590734172 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_common.h  2007-12-15 05:19:55.687594492 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_common.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_common.h,v 1.22 2001/09/24 13:22:42 kai Exp $
@@ -14949,27 +15125,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_common.h linux-2.4.29/drivers/isdn/
  /* Prototypes */
  extern void isdn_MOD_INC_USE_COUNT(void);
  extern void isdn_MOD_DEC_USE_COUNT(void);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_concap.c linux-2.4.29/drivers/isdn/isdn_concap.c
---- linux-2.4.29.old/drivers/isdn/isdn_concap.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_concap.c    2005-03-22 15:06:44.389344576 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_concap.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_concap.c     2007-12-15 05:19:40.598734627 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_concap.c  2007-12-15 05:19:55.687594492 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_concap.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_concap.c,v 1.9 2001/09/24 13:22:42 kai Exp $
   * 
   * Linux ISDN subsystem, protocol encapsulation
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_concap.h linux-2.4.29/drivers/isdn/isdn_concap.h
---- linux-2.4.29.old/drivers/isdn/isdn_concap.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_concap.h    2005-03-22 15:06:44.405342144 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_concap.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_concap.h     2007-12-15 05:19:40.606735085 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_concap.h  2007-12-15 05:19:55.687594492 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_concap.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_concap.h,v 1.4 2001/09/24 13:22:42 kai Exp $
   *
   * Linux ISDN subsystem, protocol encapsulation
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_dwabc.c linux-2.4.29/drivers/isdn/isdn_dwabc.c
---- linux-2.4.29.old/drivers/isdn/isdn_dwabc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_dwabc.c     2005-03-22 15:06:44.421339712 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_dwabc.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/isdn/isdn_dwabc.c   2007-12-15 05:19:55.695594949 +0100
 @@ -0,0 +1,1053 @@
 +
 +/* $Id: isdn_dwabc.c,v 1.27 2001/12/01 23:18:21 detabc Exp $
@@ -16024,9 +16203,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_dwabc.c linux-2.4.29/drivers/isdn/i
 +{ return(skb); }
 +#endif
 +#endif
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.c linux-2.4.29/drivers/isdn/isdn_net.c
---- linux-2.4.29.old/drivers/isdn/isdn_net.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_net.c       2005-03-22 15:06:44.447335760 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_net.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_net.c        2007-12-15 05:19:40.618735767 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_net.c     2007-12-15 05:19:55.699595179 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_net.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_net.c,v 1.153 2002/08/17 18:35:23 detabc Exp $
@@ -17619,9 +17799,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.c linux-2.4.29/drivers/isdn/isd
        restore_flags(flags);
        kfree(p->local);
        kfree(p);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.h linux-2.4.29/drivers/isdn/isdn_net.h
---- linux-2.4.29.old/drivers/isdn/isdn_net.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_net.h       2005-03-22 15:06:44.463333328 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_net.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_net.h        2007-12-15 05:19:40.626736225 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_net.h     2007-12-15 05:19:55.699595179 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_net.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_net.h,v 1.23 2001/11/07 22:35:48 kai Exp $
@@ -17667,9 +17848,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_net.h linux-2.4.29/drivers/isdn/isd
        spin_unlock_irqrestore(&master_lp->netdev->queue_lock, flags);
  }
  
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isdn_ppp.c
---- linux-2.4.29.old/drivers/isdn/isdn_ppp.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ppp.c       2005-03-22 15:06:44.481330592 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ppp.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ppp.c        2007-12-15 05:19:40.634736680 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ppp.c     2007-12-15 05:19:55.703595405 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_ppp.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_ppp.c,v 1.94 2001/11/07 22:35:48 kai Exp $
@@ -18244,7 +18426,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
  
        if (lp->p_encap != ISDN_NET_ENCAP_SYNCPPP)
                return -EINVAL;
-@@ -2431,7 +2249,7 @@
+@@ -2432,7 +2250,7 @@
                                return;
                        }
                        rs->state = CCPResetSentReq;
@@ -18253,7 +18435,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
                           know better */
                        rs->expra = 1;
                        rs->dlen = 0;
-@@ -2582,7 +2400,13 @@
+@@ -2583,7 +2401,13 @@
      }
  
        if(type) { /* type=1 => Link compression */
@@ -18267,7 +18449,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
        }
        else {
                if(!master) {
-@@ -2630,31 +2454,18 @@
+@@ -2631,31 +2455,18 @@
  static void isdn_ppp_receive_ccp(isdn_net_dev *net_dev, isdn_net_local *lp,
         struct sk_buff *skb,int proto)
  {
@@ -18304,7 +18486,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
                mis = is;
  
        switch(skb->data[0]) {
-@@ -2806,18 +2617,13 @@
+@@ -2807,18 +2618,13 @@
  
  static void isdn_ppp_send_ccp(isdn_net_dev *net_dev, isdn_net_local *lp, struct sk_buff *skb)
  {
@@ -18326,7 +18508,7 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
        /* Daemon may send with or without address and control field comp */
        data = skb->data;
        if(!(is->pppcfg & SC_COMP_AC) && data[0] == 0xff && data[1] == 0x03) {
-@@ -2833,17 +2639,12 @@
+@@ -2834,17 +2640,12 @@
        printk(KERN_DEBUG "Received CCP frame from daemon:\n");
        isdn_ppp_frame_log("ccp-xmit", skb->data, skb->len, 32, is->unit,lp->ppp_slot);
  
@@ -18350,9 +18532,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.c linux-2.4.29/drivers/isdn/isd
                printk(KERN_DEBUG "isdn_ppp: Ouch! Master CCP sends on slave slot!\n");
        
          switch(data[2]) {
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.h linux-2.4.29/drivers/isdn/isdn_ppp.h
---- linux-2.4.29.old/drivers/isdn/isdn_ppp.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ppp.h       2005-03-22 15:06:44.497328160 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ppp.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ppp.h        2007-12-15 05:19:40.642737136 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ppp.h     2007-12-15 05:19:55.703595405 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_ppp.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_ppp.h,v 1.18 2001/09/24 13:22:42 kai Exp $
@@ -18367,9 +18550,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ppp.h linux-2.4.29/drivers/isdn/isd
  extern int isdn_ppp_xmit(struct sk_buff *, struct net_device *);
  extern void isdn_ppp_receive(isdn_net_dev *, isdn_net_local *, struct sk_buff *);
  extern int isdn_ppp_dev_ioctl(struct net_device *, struct ifreq *, int);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.c linux-2.4.29/drivers/isdn/isdn_tty.c
---- linux-2.4.29.old/drivers/isdn/isdn_tty.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_tty.c       2005-03-22 15:06:44.524324056 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_tty.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_tty.c        2007-12-15 05:19:40.646737365 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_tty.c     2007-12-15 05:19:55.703595405 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_tty.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_tty.c,v 1.104 2002/02/09 21:19:11 keil Exp $
@@ -18529,9 +18713,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.c linux-2.4.29/drivers/isdn/isd
                                                if (dev->global_features &
                                                        ISDN_FEATURE_L3_FCLASS2)
                                                        strcat(rs, "2,");
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.h linux-2.4.29/drivers/isdn/isdn_tty.h
---- linux-2.4.29.old/drivers/isdn/isdn_tty.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_tty.h       2005-03-22 15:06:44.545320864 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_tty.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_tty.h        2007-12-15 05:19:40.654737820 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_tty.h     2007-12-15 05:19:55.707595631 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_tty.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_tty.h,v 1.25 2002/02/09 21:19:11 keil Exp $
@@ -18563,9 +18748,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_tty.h linux-2.4.29/drivers/isdn/isd
  #define TTY_IS_FCLASS2(info) \
        ((info->emu.mdmreg[REG_L2PROT] == ISDN_PROTO_L2_FAX) && \
         (info->emu.mdmreg[REG_L3PROT] == ISDN_PROTO_L3_FCLASS2))
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ttyfax.c linux-2.4.29/drivers/isdn/isdn_ttyfax.c
---- linux-2.4.29.old/drivers/isdn/isdn_ttyfax.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ttyfax.c    2005-03-22 15:06:44.561318432 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ttyfax.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ttyfax.c     2007-12-15 05:19:40.662738275 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ttyfax.c  2007-12-15 05:19:55.711595860 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_ttyfax.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_ttyfax.c,v 1.9 2001/09/24 13:22:43 kai Exp $
@@ -18783,18 +18969,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ttyfax.c linux-2.4.29/drivers/isdn/
 +#endif
        PARSE_ERROR1;
  }
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_ttyfax.h linux-2.4.29/drivers/isdn/isdn_ttyfax.h
---- linux-2.4.29.old/drivers/isdn/isdn_ttyfax.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_ttyfax.h    2005-03-22 15:06:44.576316152 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_ttyfax.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_ttyfax.h     2007-12-15 05:19:40.670738731 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_ttyfax.h  2007-12-15 05:19:55.711595860 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_ttyfax.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_ttyfax.h,v 1.3 2001/09/24 13:22:43 kai Exp $
   *
   * header for Linux ISDN subsystem, tty_fax related functions (linklevel).
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_v110.c linux-2.4.29/drivers/isdn/isdn_v110.c
---- linux-2.4.29.old/drivers/isdn/isdn_v110.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_v110.c      2005-03-22 15:06:44.593313568 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_v110.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_v110.c       2007-12-15 05:19:40.678739186 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_v110.c    2007-12-15 05:19:55.711595860 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_v110.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_v110.c,v 1.8 2001/09/24 13:22:43 kai Exp $
@@ -18825,36 +19013,40 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdn_v110.c linux-2.4.29/drivers/isdn/is
  #endif
        kfree(v->encodebuf);
        kfree(v);
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_v110.h linux-2.4.29/drivers/isdn/isdn_v110.h
---- linux-2.4.29.old/drivers/isdn/isdn_v110.h  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_v110.h      2005-03-22 15:06:44.608311288 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_v110.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_v110.h       2007-12-15 05:19:40.686739644 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_v110.h    2007-12-15 05:19:55.715596089 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_v110.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_v110.h,v 1.5 2001/09/24 13:22:43 kai Exp $
   *
   * Linux ISDN subsystem, V.110 related functions (linklevel).
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_x25iface.c linux-2.4.29/drivers/isdn/isdn_x25iface.c
---- linux-2.4.29.old/drivers/isdn/isdn_x25iface.c      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_x25iface.c  2005-03-22 15:06:44.626308552 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_x25iface.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_x25iface.c   2007-12-15 05:19:40.694740100 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_x25iface.c        2007-12-15 05:19:55.715596089 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_x25iface.c,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_x25iface.c,v 1.10 2001/09/24 13:22:43 kai Exp $
   *
   * Linux ISDN subsystem, X.25 related functions
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdn_x25iface.h linux-2.4.29/drivers/isdn/isdn_x25iface.h
---- linux-2.4.29.old/drivers/isdn/isdn_x25iface.h      2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdn_x25iface.h  2005-03-22 15:06:44.645305664 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdn_x25iface.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdn_x25iface.h   2007-12-15 05:19:40.702740555 +0100
++++ linux-2.4.35.4/drivers/isdn/isdn_x25iface.h        2007-12-15 05:19:55.715596089 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_x25iface.h,v 1.1.4.1 2001/11/20 14:19:34 kai Exp $
 +/* $Id: isdn_x25iface.h,v 1.4 2001/09/24 13:22:43 kai Exp $
   *
   * header for Linux ISDN subsystem, x.25 related functions
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.c linux-2.4.29/drivers/isdn/isdnloop/isdnloop.c
---- linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdnloop/isdnloop.c      2005-03-22 15:06:48.813671976 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdnloop/isdnloop.c       2007-12-15 05:19:40.706740784 +0100
++++ linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.c    2007-12-15 05:19:55.715596089 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnloop.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: isdnloop.c,v 1.17 2001/08/30 10:45:42 kai Exp $
@@ -18894,18 +19086,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.c linux-2.4.29/drivers
  }
  
  static void __exit
-diff -rNu linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.h linux-2.4.29/drivers/isdn/isdnloop/isdnloop.h
---- linux-2.4.29.old/drivers/isdn/isdnloop/isdnloop.h  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/isdnloop/isdnloop.h      2005-03-22 15:06:48.834668784 +0100
+Index: linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/isdnloop/isdnloop.h       2007-12-15 05:19:40.714741240 +0100
++++ linux-2.4.35.4/drivers/isdn/isdnloop/isdnloop.h    2007-12-15 05:19:55.719596319 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnloop.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Loopback lowlevel module for testing of linklevel.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.c linux-2.4.29/drivers/isdn/pcbit/callbacks.c
---- linux-2.4.29.old/drivers/isdn/pcbit/callbacks.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/callbacks.c        2005-03-22 15:06:48.909657384 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/callbacks.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/callbacks.c 2007-12-15 05:19:40.722741695 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/callbacks.c      2007-12-15 05:19:55.719596319 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -18915,9 +19109,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.c linux-2.4.29/drivers/i
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.h linux-2.4.29/drivers/isdn/pcbit/callbacks.h
---- linux-2.4.29.old/drivers/isdn/pcbit/callbacks.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/callbacks.h        2005-03-22 15:06:48.953650696 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/callbacks.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/callbacks.h 2007-12-15 05:19:40.730742150 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/callbacks.h      2007-12-15 05:19:55.719596319 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -18927,9 +19122,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/callbacks.h linux-2.4.29/drivers/i
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.c linux-2.4.29/drivers/isdn/pcbit/capi.c
---- linux-2.4.29.old/drivers/isdn/pcbit/capi.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/capi.c     2005-03-22 15:06:49.042637168 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/capi.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/capi.c      2007-12-15 05:19:40.738742606 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/capi.c   2007-12-15 05:19:55.719596319 +0100
 @@ -4,7 +4,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -18939,9 +19135,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.c linux-2.4.29/drivers/isdn/p
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.h linux-2.4.29/drivers/isdn/pcbit/capi.h
---- linux-2.4.29.old/drivers/isdn/pcbit/capi.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/capi.h     2005-03-22 15:06:49.071632760 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/capi.h      2007-12-15 05:19:40.746743064 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/capi.h   2007-12-15 05:19:55.719596319 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -18961,9 +19158,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/capi.h linux-2.4.29/drivers/isdn/p
  capi_channel(struct pcbit_dev *dev, struct sk_buff *skb)
  {
        ushort callref;
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/drv.c linux-2.4.29/drivers/isdn/pcbit/drv.c
---- linux-2.4.29.old/drivers/isdn/pcbit/drv.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/drv.c      2005-03-22 15:06:49.091629720 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/drv.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/drv.c       2007-12-15 05:19:40.754743519 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/drv.c    2007-12-15 05:19:55.723596545 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19105,9 +19303,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/drv.c linux-2.4.29/drivers/isdn/pc
                if (capi_decode_conn_conf(chan, skb, &complete)) {
                        printk(KERN_DEBUG "conn_conf indicates error\n");
                        pcbit_fsm_event(dev, chan, EV_ERROR, NULL);
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.c linux-2.4.29/drivers/isdn/pcbit/edss1.c
---- linux-2.4.29.old/drivers/isdn/pcbit/edss1.c        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/edss1.c    2005-03-22 15:06:49.119625464 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/edss1.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/edss1.c     2007-12-15 05:19:40.762743974 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/edss1.c  2007-12-15 05:19:55.723596545 +0100
 @@ -4,7 +4,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19117,9 +19316,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.c linux-2.4.29/drivers/isdn/
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.h linux-2.4.29/drivers/isdn/pcbit/edss1.h
---- linux-2.4.29.old/drivers/isdn/pcbit/edss1.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/edss1.h    2005-03-22 15:06:49.161619080 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/edss1.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/edss1.h     2007-12-15 05:19:40.770744430 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/edss1.h  2007-12-15 05:19:55.723596545 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19129,9 +19329,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/edss1.h linux-2.4.29/drivers/isdn/
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.c linux-2.4.29/drivers/isdn/pcbit/layer2.c
---- linux-2.4.29.old/drivers/isdn/pcbit/layer2.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/layer2.c   2005-03-22 15:06:49.195613912 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/layer2.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/layer2.c    2007-12-15 05:19:40.774744659 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/layer2.c 2007-12-15 05:19:55.723596545 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19173,9 +19374,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.c linux-2.4.29/drivers/isdn
                        return;
  
                }
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.h linux-2.4.29/drivers/isdn/pcbit/layer2.h
---- linux-2.4.29.old/drivers/isdn/pcbit/layer2.h       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/layer2.h   2005-03-22 15:06:49.228608896 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/layer2.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/layer2.h    2007-12-15 05:19:40.782745114 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/layer2.h 2007-12-15 05:19:55.731597000 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19185,9 +19387,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/layer2.h linux-2.4.29/drivers/isdn
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/module.c linux-2.4.29/drivers/isdn/pcbit/module.c
---- linux-2.4.29.old/drivers/isdn/pcbit/module.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/module.c   2005-03-22 15:06:49.251605400 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/module.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/module.c    2007-12-15 05:19:40.790745570 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/module.c 2007-12-15 05:19:55.731597000 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19231,9 +19434,10 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/module.c linux-2.4.29/drivers/isdn
  #endif
  
  module_init(pcbit_init);
-diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/pcbit.h linux-2.4.29/drivers/isdn/pcbit/pcbit.h
---- linux-2.4.29.old/drivers/isdn/pcbit/pcbit.h        2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/pcbit/pcbit.h    2005-03-22 15:06:49.284600384 +0100
+Index: linux-2.4.35.4/drivers/isdn/pcbit/pcbit.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/pcbit/pcbit.h     2007-12-15 05:19:40.798746025 +0100
++++ linux-2.4.35.4/drivers/isdn/pcbit/pcbit.h  2007-12-15 05:19:55.731597000 +0100
 @@ -3,7 +3,7 @@
   *
   * Copyright (C) 1996 Universidade de Lisboa
@@ -19243,18 +19447,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/pcbit/pcbit.h linux-2.4.29/drivers/isdn/
   *
   * This software may be used and distributed according to the terms of 
   * the GNU General Public License, incorporated herein by reference.
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/card.h linux-2.4.29/drivers/isdn/sc/card.h
---- linux-2.4.29.old/drivers/isdn/sc/card.h    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/card.h        2005-03-22 15:06:49.333592936 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/card.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/card.h 2007-12-15 05:19:40.806746483 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/card.h      2007-12-15 05:19:55.731597000 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: card.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Driver parameters for SpellCaster ISA ISDN adapters
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/command.c linux-2.4.29/drivers/isdn/sc/command.c
---- linux-2.4.29.old/drivers/isdn/sc/command.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/command.c     2005-03-22 15:06:49.348590656 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/command.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/command.c      2007-12-15 05:19:40.814746939 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/command.c   2007-12-15 05:19:55.735597229 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: command.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -19270,36 +19476,40 @@ diff -rNu linux-2.4.29.old/drivers/isdn/sc/command.c linux-2.4.29/drivers/isdn/s
  }
  
  /* 
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/debug.c linux-2.4.29/drivers/isdn/sc/debug.c
---- linux-2.4.29.old/drivers/isdn/sc/debug.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/debug.c       2005-03-22 15:06:49.363588376 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/debug.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/debug.c        2007-12-15 05:19:40.822747394 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/debug.c     2007-12-15 05:19:55.735597229 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: debug.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/debug.h linux-2.4.29/drivers/isdn/sc/debug.h
---- linux-2.4.29.old/drivers/isdn/sc/debug.h   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/debug.h       2005-03-22 15:06:49.378586096 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/debug.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/debug.h        2007-12-15 05:19:40.830747849 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/debug.h     2007-12-15 05:19:55.735597229 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: debug.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/event.c linux-2.4.29/drivers/isdn/sc/event.c
---- linux-2.4.29.old/drivers/isdn/sc/event.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/event.c       2005-03-22 15:06:49.394583664 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/event.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/event.c        2007-12-15 05:19:40.838748305 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/event.c     2007-12-15 05:19:55.735597229 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: event.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/init.c linux-2.4.29/drivers/isdn/sc/init.c
---- linux-2.4.29.old/drivers/isdn/sc/init.c    2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/init.c        2005-03-22 15:06:49.432577888 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/init.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/init.c 2007-12-15 05:19:40.846748763 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/init.c      2007-12-15 05:19:55.735597229 +0100
 @@ -514,6 +514,15 @@
        schedule_timeout(HZ);
        sig = readl(rambase + SIG_OFFSET);
@@ -19326,18 +19536,20 @@ diff -rNu linux-2.4.29.old/drivers/isdn/sc/init.c linux-2.4.29/drivers/isdn/sc/i
        if(sig == SIGNATURE)
                return BRI_BOARD;
  
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/interrupt.c linux-2.4.29/drivers/isdn/sc/interrupt.c
---- linux-2.4.29.old/drivers/isdn/sc/interrupt.c       2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/interrupt.c   2005-03-22 15:06:49.447575608 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/interrupt.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/interrupt.c    2007-12-15 05:19:40.850748989 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/interrupt.c 2007-12-15 05:19:55.739597458 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: interrupt.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/ioctl.c linux-2.4.29/drivers/isdn/sc/ioctl.c
---- linux-2.4.29.old/drivers/isdn/sc/ioctl.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/ioctl.c       2005-03-22 15:06:49.463573176 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/ioctl.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/ioctl.c        2007-12-15 05:19:40.858749445 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/ioctl.c     2007-12-15 05:19:55.739597458 +0100
 @@ -23,6 +23,9 @@
  
  extern board *adapter[];
@@ -19348,90 +19560,100 @@ diff -rNu linux-2.4.29.old/drivers/isdn/sc/ioctl.c linux-2.4.29/drivers/isdn/sc/
  
  int GetStatus(int card, boardInfo *);
  
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/message.c linux-2.4.29/drivers/isdn/sc/message.c
---- linux-2.4.29.old/drivers/isdn/sc/message.c 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/message.c     2005-03-22 15:06:49.478570896 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/message.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/message.c      2007-12-15 05:19:40.866749903 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/message.c   2007-12-15 05:19:55.739597458 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: message.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * functions for sending and receiving control messages
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/message.h linux-2.4.29/drivers/isdn/sc/message.h
---- linux-2.4.29.old/drivers/isdn/sc/message.h 2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/message.h     2005-03-22 15:06:49.495568312 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/message.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/message.h      2007-12-15 05:19:40.874750358 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/message.h   2007-12-15 05:19:55.739597458 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: message.h,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/packet.c linux-2.4.29/drivers/isdn/sc/packet.c
---- linux-2.4.29.old/drivers/isdn/sc/packet.c  2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/packet.c      2005-03-22 15:06:49.514565424 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/packet.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/packet.c       2007-12-15 05:19:40.882750813 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/packet.c    2007-12-15 05:19:55.739597458 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: packet.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/shmem.c linux-2.4.29/drivers/isdn/sc/shmem.c
---- linux-2.4.29.old/drivers/isdn/sc/shmem.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/shmem.c       2005-03-22 15:06:49.560558432 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/shmem.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/shmem.c        2007-12-15 05:19:40.890751269 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/shmem.c     2007-12-15 05:19:55.743597685 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: shmem.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/sc/timer.c linux-2.4.29/drivers/isdn/sc/timer.c
---- linux-2.4.29.old/drivers/isdn/sc/timer.c   2005-03-22 14:47:56.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/sc/timer.c       2005-03-22 15:06:49.575556152 +0100
+Index: linux-2.4.35.4/drivers/isdn/sc/timer.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/sc/timer.c        2007-12-15 05:19:40.898751724 +0100
++++ linux-2.4.35.4/drivers/isdn/sc/timer.c     2007-12-15 05:19:55.743597685 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: timer.c,v 1.1.4.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Copyright (C) 1996  SpellCaster Telecommunications Inc.
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam.h linux-2.4.29/drivers/isdn/tpam/tpam.h
---- linux-2.4.29.old/drivers/isdn/tpam/tpam.h  2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam.h      2005-03-22 15:06:49.648545056 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam.h       2007-12-15 05:19:40.906752182 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam.h    2007-12-15 05:19:55.743597685 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam.h,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: tpam.h,v 1.3 2001/09/24 13:23:12 kai Exp $
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_commands.c linux-2.4.29/drivers/isdn/tpam/tpam_commands.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_commands.c 2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_commands.c     2005-03-22 15:06:49.664542624 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_commands.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_commands.c      2007-12-15 05:19:40.914752638 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_commands.c   2007-12-15 05:19:55.743597685 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_commands.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: tpam_commands.c,v 1.3 2001/09/24 13:23:12 kai Exp $
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver - ISDN commands)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_crcpc.c linux-2.4.29/drivers/isdn/tpam/tpam_crcpc.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_crcpc.c    2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_crcpc.c        2005-03-22 15:06:49.681540040 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_crcpc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_crcpc.c 2007-12-15 05:19:40.922753093 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_crcpc.c      2007-12-15 05:19:55.747597911 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_crcpc.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver - CRC encoding)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_hdlc.c linux-2.4.29/drivers/isdn/tpam/tpam_hdlc.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_hdlc.c     2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_hdlc.c 2005-03-22 15:06:49.702536848 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_hdlc.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_hdlc.c  2007-12-15 05:19:40.926753322 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_hdlc.c       2007-12-15 05:19:55.747597911 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_hdlc.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id: tpam_hdlc.c,v 1.3 2001/09/24 13:23:12 kai Exp $
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver - HDLC encoding)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_main.c linux-2.4.29/drivers/isdn/tpam/tpam_main.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_main.c     2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_main.c 2005-03-22 15:06:49.717534568 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_main.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_main.c  2007-12-15 05:19:40.934753777 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_main.c       2007-12-15 05:19:55.747597911 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_main.c,v 1.1.2.2 2001/12/09 18:45:14 kai Exp $
 +/* $Id$
@@ -19447,27 +19669,30 @@ diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_main.c linux-2.4.29/drivers/is
  };
  
  static int __init tpam_init(void) {
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_memory.c linux-2.4.29/drivers/isdn/tpam/tpam_memory.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_memory.c   2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_memory.c       2005-03-22 15:06:49.734531984 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_memory.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_memory.c        2007-12-15 05:19:40.942754233 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_memory.c     2007-12-15 05:19:55.747597911 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_memory.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver - Board Memory Access)
   *
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_nco.c linux-2.4.29/drivers/isdn/tpam/tpam_nco.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_nco.c      2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_nco.c  2005-03-22 15:06:49.749529704 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_nco.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_nco.c   2007-12-15 05:19:40.950754688 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_nco.c        2007-12-15 05:19:55.751598140 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_nco.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
   *
   * Turbo PAM ISDN driver for Linux. 
   * (Kernel Driver - Low Level NCO Manipulation)
-diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_queues.c linux-2.4.29/drivers/isdn/tpam/tpam_queues.c
---- linux-2.4.29.old/drivers/isdn/tpam/tpam_queues.c   2005-03-22 14:47:57.000000000 +0100
-+++ linux-2.4.29/drivers/isdn/tpam/tpam_queues.c       2005-03-22 15:06:49.764527424 +0100
+Index: linux-2.4.35.4/drivers/isdn/tpam/tpam_queues.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/tpam/tpam_queues.c        2007-12-15 05:19:40.962755372 +0100
++++ linux-2.4.35.4/drivers/isdn/tpam/tpam_queues.c     2007-12-15 05:19:55.751598140 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam_queues.c,v 1.1.2.1 2001/11/20 14:19:37 kai Exp $
 +/* $Id$
@@ -19482,36 +19707,40 @@ diff -rNu linux-2.4.29.old/drivers/isdn/tpam/tpam_queues.c linux-2.4.29/drivers/
                                spin_unlock(&card->lock);
                                printk(KERN_ERR "TurboPAM(tpam_irq): "
                                                "waiting too long...\n");
-diff -rNu linux-2.4.29.old/include/linux/b1lli.h linux-2.4.29/include/linux/b1lli.h
---- linux-2.4.29.old/include/linux/b1lli.h     2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/b1lli.h 2005-03-22 15:06:49.881509640 +0100
+Index: linux-2.4.35.4/include/linux/b1lli.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/b1lli.h  2007-12-15 05:19:40.966755602 +0100
++++ linux-2.4.35.4/include/linux/b1lli.h       2007-12-15 05:19:55.751598140 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1lli.h,v 1.8.8.3 2001/09/23 22:25:05 kai Exp $
 +/* $Id$
   *
   * ISDN lowlevel-module for AVM B1-card.
   *
-diff -rNu linux-2.4.29.old/include/linux/b1pcmcia.h linux-2.4.29/include/linux/b1pcmcia.h
---- linux-2.4.29.old/include/linux/b1pcmcia.h  2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/b1pcmcia.h      2005-03-22 15:06:49.862512528 +0100
+Index: linux-2.4.35.4/include/linux/b1pcmcia.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/b1pcmcia.h       2007-12-15 05:19:40.974756057 +0100
++++ linux-2.4.35.4/include/linux/b1pcmcia.h    2007-12-15 05:19:55.751598140 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: b1pcmcia.h,v 1.1.8.2 2001/09/23 22:25:05 kai Exp $
 +/* $Id$
   *
   * Exported functions of module b1pcmcia to be called by
   * avm_cs card services module.
-diff -rNu linux-2.4.29.old/include/linux/capi.h linux-2.4.29/include/linux/capi.h
---- linux-2.4.29.old/include/linux/capi.h      2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/capi.h  2005-03-22 15:06:49.922503408 +0100
+Index: linux-2.4.35.4/include/linux/capi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/capi.h   2007-12-15 05:19:40.982756512 +0100
++++ linux-2.4.35.4/include/linux/capi.h        2007-12-15 05:19:55.751598140 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: capi.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id$
   * 
   * CAPI 2.0 Interface for Linux
   * 
-diff -rNu linux-2.4.29.old/include/linux/concap.h linux-2.4.29/include/linux/concap.h
---- linux-2.4.29.old/include/linux/concap.h    2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/concap.h        2005-03-22 15:06:49.906505840 +0100
+Index: linux-2.4.35.4/include/linux/concap.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/concap.h 2007-12-15 05:19:40.990756968 +0100
++++ linux-2.4.35.4/include/linux/concap.h      2007-12-15 05:19:55.755598369 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: concap.h,v 1.2.8.1 2001/09/23 22:25:05 kai Exp $
 +/* $Id: concap.h,v 1.3 2001/09/24 13:23:13 kai Exp $
@@ -19526,27 +19755,30 @@ diff -rNu linux-2.4.29.old/include/linux/concap.h linux-2.4.29/include/linux/con
  
  /* Stuff to support encapsulation protocols genericly. The encapsulation
     protocol is processed at the uppermost layer of the network interface.
-diff -rNu linux-2.4.29.old/include/linux/hysdn_if.h linux-2.4.29/include/linux/hysdn_if.h
---- linux-2.4.29.old/include/linux/hysdn_if.h  2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/hysdn_if.h      2005-03-22 15:06:49.974495504 +0100
+Index: linux-2.4.35.4/include/linux/hysdn_if.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/hysdn_if.h       2007-12-15 05:19:40.998757423 +0100
++++ linux-2.4.35.4/include/linux/hysdn_if.h    2007-12-15 05:19:55.755598369 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: hysdn_if.h,v 1.1.8.3 2001/09/23 22:25:05 kai Exp $
 +/* $Id$
   *
   * Linux driver for HYSDN cards
   * ioctl definitions shared by hynetmgr and driver.
-diff -rNu linux-2.4.29.old/include/linux/isdn/tpam.h linux-2.4.29/include/linux/isdn/tpam.h
---- linux-2.4.29.old/include/linux/isdn/tpam.h 2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn/tpam.h     2005-03-22 15:06:49.947499608 +0100
+Index: linux-2.4.35.4/include/linux/isdn/tpam.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn/tpam.h      2007-12-15 05:19:41.006757881 +0100
++++ linux-2.4.35.4/include/linux/isdn/tpam.h   2007-12-15 05:19:55.755598369 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: tpam.h,v 1.1.2.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id$
   *
   * Turbo PAM ISDN driver for Linux. (Kernel Driver)
   *
-diff -rNu linux-2.4.29.old/include/linux/isdn.h linux-2.4.29/include/linux/isdn.h
---- linux-2.4.29.old/include/linux/isdn.h      2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn.h  2005-03-22 15:06:50.001491400 +0100
+Index: linux-2.4.35.4/include/linux/isdn.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn.h   2007-12-15 05:19:41.014758337 +0100
++++ linux-2.4.35.4/include/linux/isdn.h        2007-12-15 05:19:55.755598369 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id: isdn.h,v 1.125 2001/12/01 23:18:21 detabc Exp $
@@ -19769,9 +20001,10 @@ diff -rNu linux-2.4.29.old/include/linux/isdn.h linux-2.4.29/include/linux/isdn.
  
  #endif /* __KERNEL__ */
  
-diff -rNu linux-2.4.29.old/include/linux/isdn_compat.h linux-2.4.29/include/linux/isdn_compat.h
---- linux-2.4.29.old/include/linux/isdn_compat.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_compat.h   2005-03-22 15:06:50.017488968 +0100
+Index: linux-2.4.35.4/include/linux/isdn_compat.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/isdn_compat.h 2007-12-15 05:19:55.755598369 +0100
 @@ -0,0 +1,261 @@
 +/* $Id: isdn_compat.h,v 1.53 2001/09/24 13:23:13 kai Exp $
 + *
@@ -20034,9 +20267,10 @@ diff -rNu linux-2.4.29.old/include/linux/isdn_compat.h linux-2.4.29/include/linu
 +
 +#endif /* __KERNEL__ */
 +#endif /* _LINUX_ISDN_COMPAT_H */
-diff -rNu linux-2.4.29.old/include/linux/isdn_divertif.h linux-2.4.29/include/linux/isdn_divertif.h
---- linux-2.4.29.old/include/linux/isdn_divertif.h     2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_divertif.h 2005-03-22 15:06:50.032486688 +0100
+Index: linux-2.4.35.4/include/linux/isdn_divertif.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_divertif.h  2007-12-15 05:19:41.026759021 +0100
++++ linux-2.4.35.4/include/linux/isdn_divertif.h       2007-12-15 05:19:55.759598598 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_divertif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id$
@@ -20060,9 +20294,10 @@ diff -rNu linux-2.4.29.old/include/linux/isdn_divertif.h linux-2.4.29/include/li
    } isdn_divert_if;
  
  /*********************/
-diff -rNu linux-2.4.29.old/include/linux/isdn_dwabc.h linux-2.4.29/include/linux/isdn_dwabc.h
---- linux-2.4.29.old/include/linux/isdn_dwabc.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_dwabc.h    2005-03-22 15:06:50.048484256 +0100
+Index: linux-2.4.35.4/include/linux/isdn_dwabc.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/isdn_dwabc.h  2007-12-15 05:19:55.759598598 +0100
 @@ -0,0 +1,84 @@
 +/* $Id: isdn_dwabc.h,v 1.9 2001/09/26 20:32:08 detabc Exp $
 + *
@@ -20148,18 +20383,20 @@ diff -rNu linux-2.4.29.old/include/linux/isdn_dwabc.h linux-2.4.29/include/linux
 +};
 +
 +#endif
-diff -rNu linux-2.4.29.old/include/linux/isdn_lzscomp.h linux-2.4.29/include/linux/isdn_lzscomp.h
---- linux-2.4.29.old/include/linux/isdn_lzscomp.h      2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_lzscomp.h  2005-03-22 15:06:50.089478024 +0100
+Index: linux-2.4.35.4/include/linux/isdn_lzscomp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_lzscomp.h   2007-12-15 05:19:41.042759932 +0100
++++ linux-2.4.35.4/include/linux/isdn_lzscomp.h        2007-12-15 05:19:55.759598598 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdn_lzscomp.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id$
   *
   * Header for isdn_lzscomp.c
   * Concentrated here to not mess up half a dozen kernel headers with code
-diff -rNu linux-2.4.29.old/include/linux/isdn_ppp.h linux-2.4.29/include/linux/isdn_ppp.h
---- linux-2.4.29.old/include/linux/isdn_ppp.h  2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdn_ppp.h      2005-03-22 15:06:50.116473920 +0100
+Index: linux-2.4.35.4/include/linux/isdn_ppp.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdn_ppp.h       2007-12-15 05:19:41.046760161 +0100
++++ linux-2.4.35.4/include/linux/isdn_ppp.h    2007-12-15 05:19:55.759598598 +0100
 @@ -8,6 +8,7 @@
  #ifndef _LINUX_ISDN_PPP_H
  #define _LINUX_ISDN_PPP_H
@@ -20201,9 +20438,10 @@ diff -rNu linux-2.4.29.old/include/linux/isdn_ppp.h linux-2.4.29/include/linux/i
    unsigned long debug;
    struct isdn_ppp_compressor *compressor,*decompressor;
    struct isdn_ppp_compressor *link_compressor,*link_decompressor;
-diff -rNu linux-2.4.29.old/include/linux/isdnif.h linux-2.4.29/include/linux/isdnif.h
---- linux-2.4.29.old/include/linux/isdnif.h    2005-03-22 14:47:31.000000000 +0100
-+++ linux-2.4.29/include/linux/isdnif.h        2005-03-22 15:06:50.132471488 +0100
+Index: linux-2.4.35.4/include/linux/isdnif.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/isdnif.h 2007-12-15 05:19:41.054760616 +0100
++++ linux-2.4.35.4/include/linux/isdnif.h      2007-12-15 05:19:55.759598598 +0100
 @@ -1,4 +1,4 @@
 -/* $Id: isdnif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $
 +/* $Id: isdnif.h,v 1.43 2002/02/09 21:19:11 keil Exp $
@@ -20227,9 +20465,10 @@ diff -rNu linux-2.4.29.old/include/linux/isdnif.h linux-2.4.29/include/linux/isd
  
  /*
   * Audio commands
-diff -rNu linux-2.4.29.old/include/linux/kernelcapi.h linux-2.4.29/include/linux/kernelcapi.h
---- linux-2.4.29.old/include/linux/kernelcapi.h        2005-03-22 14:47:32.000000000 +0100
-+++ linux-2.4.29/include/linux/kernelcapi.h    2005-03-22 15:06:50.147469208 +0100
+Index: linux-2.4.35.4/include/linux/kernelcapi.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/kernelcapi.h     2007-12-15 05:19:41.066761301 +0100
++++ linux-2.4.35.4/include/linux/kernelcapi.h  2007-12-15 05:19:55.759598598 +0100
 @@ -1,12 +1,10 @@
 -/* $Id: kernelcapi.h,v 1.1.4.2 2002/01/28 18:25:10 kai Exp $
 +/*
index 4ef20fa8ba6c42f93d45554047f65f7d1bc667cb..302f6bbee39dd71718ae937a6f95b741a7af3d30 100644 (file)
@@ -1,6 +1,7 @@
-diff -rNu linux-2.4.29.old/drivers/Makefile linux-2.4.29/drivers/Makefile
---- linux-2.4.29.old/drivers/Makefile  2005-03-22 14:47:41.000000000 +0100
-+++ linux-2.4.29/drivers/Makefile      2005-03-22 15:15:20.012957872 +0100
+Index: linux-2.4.35.4/drivers/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/Makefile       2007-12-15 05:19:39.306660996 +0100
++++ linux-2.4.35.4/drivers/Makefile    2007-12-15 05:19:59.111789629 +0100
 @@ -38,7 +38,7 @@
  subdir-$(CONFIG_MD)           += md
  subdir-$(CONFIG_IEEE1394)     += ieee1394
@@ -10,9 +11,10 @@ diff -rNu linux-2.4.29.old/drivers/Makefile linux-2.4.29/drivers/Makefile
  subdir-$(CONFIG_ATM)          += atm
  subdir-$(CONFIG_FC4)          += fc4
  
-diff -rNu linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c linux-2.4.29/drivers/isdn/hisax/hfc_usb.c
---- linux-2.4.29.old/drivers/isdn/hisax/hfc_usb.c      2005-03-22 15:13:58.233390256 +0100
-+++ linux-2.4.29/drivers/isdn/hisax/hfc_usb.c  2005-03-22 15:14:57.475384104 +0100
+Index: linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/isdn/hisax/hfc_usb.c   2007-12-15 05:19:55.575588111 +0100
++++ linux-2.4.35.4/drivers/isdn/hisax/hfc_usb.c        2007-12-15 05:19:59.115789855 +0100
 @@ -1,13 +1,11 @@
 -/* $Id: hfc_usb.c,v 2.3 2001/07/06 21:30:11 werner Exp $
 +/*
index f889ad296413a7b801b84e84d34305c6a62be87b..c01f0aad1bab5ebaba08d50f22cd199aa542cd5c 100644 (file)
@@ -1,6 +1,7 @@
-diff -ur linux-2.4.32/drivers/usb/serial/pl2303.c linux-2.4.32.openwrt/drivers/usb/serial/pl2303.c
---- linux-2.4.32/drivers/usb/serial/pl2303.c   2005-06-01 02:56:56.000000000 +0200
-+++ linux-2.4.32.openwrt/drivers/usb/serial/pl2303.c   2005-11-18 12:22:23.000000000 +0100
+Index: linux-2.4.35.4/drivers/usb/serial/pl2303.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/pl2303.c    2007-12-15 05:19:39.266658716 +0100
++++ linux-2.4.35.4/drivers/usb/serial/pl2303.c 2007-12-15 05:19:59.351803306 +0100
 @@ -78,6 +78,11 @@
        { USB_DEVICE(RADIOSHACK_VENDOR_ID, RADIOSHACK_PRODUCT_ID) },
        { USB_DEVICE(DCU10_VENDOR_ID, DCU10_PRODUCT_ID) },
@@ -13,9 +14,10 @@ diff -ur linux-2.4.32/drivers/usb/serial/pl2303.c linux-2.4.32.openwrt/drivers/u
        { }                                     /* Terminating entry */
  };
  
-diff -ur linux-2.4.32/drivers/usb/serial/pl2303.h linux-2.4.32.openwrt/drivers/usb/serial/pl2303.h
---- linux-2.4.32/drivers/usb/serial/pl2303.h   2004-02-18 14:36:31.000000000 +0100
-+++ linux-2.4.32.openwrt/drivers/usb/serial/pl2303.h   2005-11-18 12:23:38.000000000 +0100
+Index: linux-2.4.35.4/drivers/usb/serial/pl2303.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/pl2303.h    2007-12-15 05:19:39.278659401 +0100
++++ linux-2.4.35.4/drivers/usb/serial/pl2303.h 2007-12-15 05:19:59.355803533 +0100
 @@ -41,3 +41,21 @@
  
  #define SITECOM_VENDOR_ID     0x6189
index 695a2d36b564afe6b733fb4c666584bb946691b2..edec21a8914150dee57323292004b0e9be2c9269 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.30.old/fs/hfsplus/super.c linux-2.4.30.dev/fs/hfsplus/super.c
---- linux-2.4.30.old/fs/hfsplus/super.c        2003-08-25 13:44:43.000000000 +0200
-+++ linux-2.4.30.dev/fs/hfsplus/super.c        2005-04-27 19:54:40.000000000 +0200
+Index: linux-2.4.35.4/fs/hfsplus/super.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/hfsplus/super.c     2007-12-15 05:19:39.238657121 +0100
++++ linux-2.4.35.4/fs/hfsplus/super.c  2007-12-15 05:19:59.575816071 +0100
 @@ -240,8 +240,7 @@
        if (!(*flags & MS_RDONLY)) {
                struct hfsplus_vh *vhdr = HFSPLUS_SB(sb).s_vhdr;
index 9cf055346a3ddc32a234c9b63de05d53b3c0237c..10b7448c72a599e75c2128185de1b40230e69764 100644 (file)
@@ -1,6 +1,7 @@
-diff -Nur linux-2.4.30/arch/mips/kernel/signal.c linux-2.4.30.openwrt/arch/mips/kernel/signal.c
---- linux-2.4.30/arch/mips/kernel/signal.c     2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/kernel/signal.c     2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/signal.c      2007-12-15 05:19:39.146651877 +0100
++++ linux-2.4.35.4/arch/mips/kernel/signal.c   2007-12-15 05:19:59.787828152 +0100
 @@ -6,8 +6,10 @@
   * Copyright (C) 1991, 1992  Linus Torvalds
   * Copyright (C) 1994 - 1999  Ralf Baechle
@@ -34,9 +35,10 @@ diff -Nur linux-2.4.30/arch/mips/kernel/signal.c linux-2.4.30.openwrt/arch/mips/
  {
        sigset_t *unewset, saveset, newset;
          size_t sigsetsize;
-diff -Nur linux-2.4.30/arch/mips/kernel/syscall.c linux-2.4.30.openwrt/arch/mips/kernel/syscall.c
---- linux-2.4.30/arch/mips/kernel/syscall.c    2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/kernel/syscall.c    2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/kernel/syscall.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/syscall.c     2007-12-15 05:19:39.154652335 +0100
++++ linux-2.4.35.4/arch/mips/kernel/syscall.c  2007-12-15 05:19:59.795828608 +0100
 @@ -5,6 +5,7 @@
   *
   * Copyright (C) 1995 - 2000 by Ralf Baechle
@@ -67,9 +69,10 @@ diff -Nur linux-2.4.30/arch/mips/kernel/syscall.c linux-2.4.30.openwrt/arch/mips
  {
        unsigned long clone_flags;
        unsigned long newsp;
-diff -Nur linux-2.4.30/arch/mips/ld.script.in linux-2.4.30.openwrt/arch/mips/ld.script.in
---- linux-2.4.30/arch/mips/ld.script.in        2005-07-02 13:00:22.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips/ld.script.in        2005-07-02 13:00:42.000000000 +0200
+Index: linux-2.4.35.4/arch/mips/ld.script.in
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/ld.script.in 2007-12-15 05:19:39.162652791 +0100
++++ linux-2.4.35.4/arch/mips/ld.script.in      2007-12-15 05:19:59.799828834 +0100
 @@ -9,6 +9,7 @@
    {
      _ftext = . ;
@@ -78,9 +81,10 @@ diff -Nur linux-2.4.30/arch/mips/ld.script.in linux-2.4.30.openwrt/arch/mips/ld.
      *(.rodata)
      *(.rodata.*)
      *(.rodata1)
-diff -Nur linux-2.4.30/arch/mips64/kernel/signal.c linux-2.4.30.openwrt/arch/mips64/kernel/signal.c
---- linux-2.4.30/arch/mips64/kernel/signal.c   2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/signal.c   2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/signal.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal.c    2007-12-15 05:19:39.170653246 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal.c 2007-12-15 05:19:59.803829063 +0100
 @@ -6,8 +6,10 @@
   * Copyright (C) 1991, 1992  Linus Torvalds
   * Copyright (C) 1994 - 2000  Ralf Baechle
@@ -103,9 +107,10 @@ diff -Nur linux-2.4.30/arch/mips64/kernel/signal.c linux-2.4.30.openwrt/arch/mip
  {
        sigset_t *unewset, saveset, newset;
          size_t sigsetsize;
-diff -Nur linux-2.4.30/arch/mips64/kernel/signal32.c linux-2.4.30.openwrt/arch/mips64/kernel/signal32.c
---- linux-2.4.30/arch/mips64/kernel/signal32.c 2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/signal32.c 2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/signal32.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/signal32.c  2007-12-15 05:19:39.174653475 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/signal32.c       2007-12-15 05:19:59.807829292 +0100
 @@ -6,7 +6,9 @@
   * Copyright (C) 1991, 1992  Linus Torvalds
   * Copyright (C) 1994 - 2000  Ralf Baechle
@@ -138,9 +143,10 @@ diff -Nur linux-2.4.30/arch/mips64/kernel/signal32.c linux-2.4.30.openwrt/arch/m
  {
        sigset32_t *uset;
        sigset_t newset, saveset;
-diff -Nur linux-2.4.30/arch/mips64/kernel/syscall.c linux-2.4.30.openwrt/arch/mips64/kernel/syscall.c
---- linux-2.4.30/arch/mips64/kernel/syscall.c  2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/arch/mips64/kernel/syscall.c  2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/arch/mips64/kernel/syscall.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips64/kernel/syscall.c   2007-12-15 05:19:39.186654157 +0100
++++ linux-2.4.35.4/arch/mips64/kernel/syscall.c        2007-12-15 05:19:59.811829522 +0100
 @@ -6,7 +6,9 @@
   * Copyright (C) 1995 - 2000, 2001 by Ralf Baechle
   * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
@@ -173,9 +179,10 @@ diff -Nur linux-2.4.30/arch/mips64/kernel/syscall.c linux-2.4.30.openwrt/arch/mi
  {
        unsigned long clone_flags;
        unsigned long newsp;
-diff -Nur linux-2.4.30/include/asm-mips/ptrace.h linux-2.4.30.openwrt/include/asm-mips/ptrace.h
---- linux-2.4.30/include/asm-mips/ptrace.h     2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/include/asm-mips/ptrace.h     2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips/ptrace.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips/ptrace.h      2007-12-15 05:19:39.194654615 +0100
++++ linux-2.4.35.4/include/asm-mips/ptrace.h   2007-12-15 05:19:59.815829748 +0100
 @@ -4,6 +4,7 @@
   * for more details.
   *
@@ -198,9 +205,10 @@ diff -Nur linux-2.4.30/include/asm-mips/ptrace.h linux-2.4.30.openwrt/include/as
  #endif /* !__ASSEMBLY__ */
  
  /* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
-diff -Nur linux-2.4.30/include/asm-mips64/ptrace.h linux-2.4.30.openwrt/include/asm-mips64/ptrace.h
---- linux-2.4.30/include/asm-mips64/ptrace.h   2005-07-02 13:00:13.000000000 +0200
-+++ linux-2.4.30.openwrt/include/asm-mips64/ptrace.h   2005-07-02 13:00:49.000000000 +0200
+Index: linux-2.4.35.4/include/asm-mips64/ptrace.h
+===================================================================
+--- linux-2.4.35.4.orig/include/asm-mips64/ptrace.h    2007-12-15 05:19:39.202655071 +0100
++++ linux-2.4.35.4/include/asm-mips64/ptrace.h 2007-12-15 05:19:59.815829748 +0100
 @@ -5,6 +5,7 @@
   *
   * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000 by Ralf Baechle
index f8e5be12c119131bbe662e0b4dd9c5e61f13b12a..fe6b10dfd20fbd3a6764c7602c5d51a9598c91c0 100644 (file)
@@ -1,7 +1,8 @@
-diff -ur linux-2.4.30.dev/drivers/usb/host/ehci-q.c linux-tmp/drivers/usb/host/ehci-q.c
---- linux-2.4.30.dev/drivers/usb/host/ehci-q.c 2005-01-19 15:10:07.000000000 +0100
-+++ linux-tmp/drivers/usb/host/ehci-q.c        2005-03-30 05:11:12.000000000 +0200
-@@ -783,6 +765,11 @@
+Index: linux-2.4.35.4/drivers/usb/host/ehci-q.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-q.c      2007-12-15 05:19:39.114650056 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-q.c   2007-12-15 05:20:00.107846389 +0100
+@@ -782,6 +782,11 @@
                if (!(cmd & CMD_ASE)) {
                        /* in case a clear of CMD_ASE didn't take yet */
                        (void) handshake (&ehci->regs->status, STS_ASS, 0, 150);
index c48489625e8d55ed6a93d567fc0e67a60e04f3d6..dbb5a88e64dc91800ac98929a7ba3453d5918818 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux.old/Makefile linux.dev/Makefile
---- linux.old/Makefile 2005-08-26 13:41:41.689634168 +0200
-+++ linux.dev/Makefile 2005-08-26 13:44:34.233403528 +0200
-@@ -354,7 +354,7 @@
+Index: linux-2.4.35.4/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/Makefile       2007-12-15 05:19:51.427351715 +0100
++++ linux-2.4.35.4/Makefile    2007-12-15 05:20:00.315858242 +0100
+@@ -362,7 +362,7 @@
        @rm -f .ver1
  
  include/linux/version.h: ./Makefile
@@ -10,7 +11,7 @@ diff -urN linux.old/Makefile linux.dev/Makefile
          (echo KERNELRELEASE \"$(KERNELRELEASE)\" exceeds $(uts_len) characters >&2; false)
        @echo \#define UTS_RELEASE \"$(KERNELRELEASE)\" > .ver
        @echo \#define LINUX_VERSION_CODE `expr $(VERSION) \\* 65536 + $(PATCHLEVEL) \\* 256 + $(SUBLEVEL)` >> .ver
-@@ -509,7 +509,7 @@
+@@ -500,7 +500,7 @@
  ifdef CONFIG_MODVERSIONS
        $(MAKE) update-modverfile
  endif
@@ -19,8 +20,10 @@ diff -urN linux.old/Makefile linux.dev/Makefile
        scripts/mkdep -- init/*.c > .depend
  
  ifdef CONFIG_MODVERSIONS
---- linux.old/Rules.make       2005-08-31 00:37:34.363109288 +0200
-+++ linux.dev/Rules.make       2005-08-31 13:59:20.140676296 +0200
+Index: linux-2.4.35.4/Rules.make
+===================================================================
+--- linux-2.4.35.4.orig/Rules.make     2007-12-15 05:19:39.078648003 +0100
++++ linux-2.4.35.4/Rules.make  2007-12-15 05:20:00.315858242 +0100
 @@ -126,7 +126,7 @@
  # This make dependencies quickly
  #
index 630dc049778a8612886f0fc7564aaf00ddb97344..5fb1bfec6ff50fc13b3fa64443cc9dfef72a3ced 100644 (file)
@@ -1,6 +1,8 @@
---- linux-2.4.30/drivers/char/serial.c 2005-06-29 20:44:46.000000000 +0200
-+++ linux-2.4.30.serial/drivers/char/serial.c  2005-06-29 21:15:12.000000000 +0200
-@@ -5455,18 +5455,6 @@
+Index: linux-2.4.35.4/drivers/char/serial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/char/serial.c  2007-12-15 05:19:44.934981737 +0100
++++ linux-2.4.35.4/drivers/char/serial.c       2007-12-15 05:20:00.539871010 +0100
+@@ -5458,18 +5458,6 @@
                       sizeof(struct rs_multiport_struct));
  #endif
        }
index 7281093b02e4448980179f8ede9c96041ca9f241..1bcdc01097e67e9f9b01c9b9aa83ca2bc62d2c21 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/net/sched/sch_htb.c      2005-11-15 14:09:41.548066000 +0100
-+++ linux.dev/net/sched/sch_htb.c      2005-11-15 14:08:34.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_htb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_htb.c    2007-12-15 05:19:39.010644128 +0100
++++ linux-2.4.35.4/net/sched/sch_htb.c 2007-12-15 05:20:00.751883092 +0100
 @@ -369,7 +369,7 @@
                struct list_head *l;
                list_for_each (l,q->hash+i) {
index 5d0ff9266202d281b44998ac0b2022c1cb208dc8..c2b81901f50ae683e9f157fb45de7a99ade43b3f 100644 (file)
@@ -1,5 +1,7 @@
---- linux.old/net/sched/sch_htb.c      2005-11-15 14:09:41.548066000 +0100
-+++ linux.dev/net/sched/sch_htb.c      2005-11-15 14:08:34.000000000 +0100
+Index: linux-2.4.35.4/net/sched/sch_htb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_htb.c    2007-12-15 05:20:00.751883092 +0100
++++ linux-2.4.35.4/net/sched/sch_htb.c 2007-12-15 05:20:00.959894945 +0100
 @@ -74,7 +74,7 @@
  #define HTB_EWMAC 2   /* rate average over HTB_EWMAC*HTB_HSIZE sec */
  #define HTB_DEBUG 1   /* compile debugging support (activated by tc tool) */
index 351e8c207243554da9a7c04f1379c813bd1e0b03..889964baef8ad449b2af9dd570309f0d7a0ca06c 100644 (file)
@@ -1,6 +1,7 @@
-diff -rNu linux-2.4.30/drivers/sound/sound_core.c linux-2.4.30.new/drivers/sound/sound_core.c
---- linux-2.4.30/drivers/sound/sound_core.c    2001-10-01 05:26:08.000000000 +1000
-+++ linux-2.4.30.new/drivers/sound/sound_core.c        2005-08-27 22:52:55.061719968 +1000
+Index: linux-2.4.35.4/drivers/sound/sound_core.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/sound/sound_core.c     2007-12-15 05:19:38.946640480 +0100
++++ linux-2.4.35.4/drivers/sound/sound_core.c  2007-12-15 05:20:01.199908622 +0100
 @@ -174,9 +174,9 @@
        }
        
index c431d8c6bc71dcf8b7b88380762414e58b42a373..97cb42c49fd7511119f6ece7b2e3e69f83e20e86 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux.old/include/linux/atmdev.h linux.dev/include/linux/atmdev.h
---- linux.old/include/linux/atmdev.h   2005-11-17 12:51:55.883585000 +0100
-+++ linux.dev/include/linux/atmdev.h   2005-11-17 13:49:22.012671000 +0100
-@@ -408,6 +408,7 @@
+Index: linux-2.4.35.4/include/linux/atmdev.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/atmdev.h 2007-12-15 05:19:38.898637744 +0100
++++ linux-2.4.35.4/include/linux/atmdev.h      2007-12-15 05:20:02.816000717 +0100
+@@ -400,6 +400,7 @@
  struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
      int number,atm_dev_flags_t *flags); /* number == -1: pick first available */
  struct atm_dev *atm_dev_lookup(int number);
@@ -9,9 +10,10 @@ diff -urN linux.old/include/linux/atmdev.h linux.dev/include/linux/atmdev.h
  void atm_dev_deregister(struct atm_dev *dev);
  void shutdown_atm_dev(struct atm_dev *dev);
  void vcc_insert_socket(struct sock *sk);
-diff -urN linux.old/net/atm/resources.c linux.dev/net/atm/resources.c
---- linux.old/net/atm/resources.c      2003-11-28 19:26:21.000000000 +0100
-+++ linux.dev/net/atm/resources.c      2005-11-17 14:27:26.514267750 +0100
+Index: linux-2.4.35.4/net/atm/resources.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/resources.c    2007-12-15 05:19:38.910638429 +0100
++++ linux-2.4.35.4/net/atm/resources.c 2007-12-15 05:20:02.824001175 +0100
 @@ -10,6 +10,7 @@
  #include <linux/sonet.h>
  #include <linux/kernel.h> /* for barrier */
index b89f765173f10d084eea78cfd649b88b04b4922e..0a4bd10065a89c04e41954c9d13973b9d0e7536a 100644 (file)
@@ -1,6 +1,7 @@
-diff -ruN linux-2.4.32-old/lib/string.c linux-2.4.32-new/lib/string.c
---- linux-2.4.32-old/lib/string.c      2004-11-17 12:54:22.000000000 +0100
-+++ linux-2.4.32-new/lib/string.c      2006-01-17 14:41:17.000000000 +0100
+Index: linux-2.4.35.4/lib/string.c
+===================================================================
+--- linux-2.4.35.4.orig/lib/string.c   2007-12-15 05:19:38.866635920 +0100
++++ linux-2.4.35.4/lib/string.c        2007-12-15 05:20:03.080015763 +0100
 @@ -50,6 +50,7 @@
        }
        return (int)c1 - (int)c2;
index 56f00155deb2af72a2e7a6d2158d9dd1487b2488..59289a1b3086257e40a135fe852b09fcf7c0a524 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.32/net/atm/br2684.c linux-2.4.32.new/net/atm/br2684.c
---- linux-2.4.32/net/atm/br2684.c      2004-08-08 01:26:06.000000000 +0200
-+++ linux-2.4.32.new/net/atm/br2684.c  2006-02-06 18:59:40.000000000 +0100
+Index: linux-2.4.35.4/net/atm/br2684.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/br2684.c       2007-12-15 05:19:38.818633185 +0100
++++ linux-2.4.35.4/net/atm/br2684.c    2007-12-15 05:20:03.656048591 +0100
 @@ -55,36 +55,55 @@
  #define skb_debug(skb)        do {} while (0)
  #endif
@@ -485,9 +486,10 @@ diff -urN linux-2.4.32/net/atm/br2684.c linux-2.4.32.new/net/atm/br2684.c
        while (!list_empty(&br2684_devs)) {
                brdev = list_entry_brdev(br2684_devs.next);
                unregister_netdev(&brdev->net_dev);
-diff -urN linux-2.4.32/net/atm/common.c linux-2.4.32.new/net/atm/common.c
---- linux-2.4.32/net/atm/common.c      2004-02-18 14:36:32.000000000 +0100
-+++ linux-2.4.32.new/net/atm/common.c  2006-02-06 17:26:52.000000000 +0100
+Index: linux-2.4.35.4/net/atm/common.c
+===================================================================
+--- linux-2.4.35.4.orig/net/atm/common.c       2007-12-15 05:19:38.826633641 +0100
++++ linux-2.4.35.4/net/atm/common.c    2007-12-15 05:20:03.656048591 +0100
 @@ -158,6 +158,7 @@
  }
  #ifdef CONFIG_ATM_BR2684_MODULE
@@ -496,8 +498,10 @@ diff -urN linux-2.4.32/net/atm/common.c linux-2.4.32.new/net/atm/common.c
  #endif
  #endif
  
---- linux-2.4.32/include/linux/atmbr2684.h     2002-08-03 02:39:45.000000000 +0200
-+++ linux-2.4.32.new/include/linux/atmbr2684.h 2006-02-06 19:01:24.000000000 +0100
+Index: linux-2.4.35.4/include/linux/atmbr2684.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/atmbr2684.h      2007-12-15 05:19:38.838634325 +0100
++++ linux-2.4.35.4/include/linux/atmbr2684.h   2007-12-15 05:20:03.668049273 +0100
 @@ -3,6 +3,7 @@
  
  #include <linux/atm.h>
index fe97be5b3fecba27aa88fefb5ad34ab1b67424ae..119f1d4d87f46a799f81319fe7a07db41f978280 100644 (file)
@@ -1,6 +1,7 @@
-diff -ur linux.old/fs/jffs2/build.c linux.dev/fs/jffs2/build.c
---- linux.old/fs/jffs2/build.c 2003-06-13 16:51:37.000000000 +0200
-+++ linux.dev/fs/jffs2/build.c 2006-06-23 22:15:21.000000000 +0200
+Index: linux-2.4.35.4/fs/jffs2/build.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/build.c       2007-12-15 05:19:38.778630906 +0100
++++ linux-2.4.35.4/fs/jffs2/build.c    2007-12-15 05:20:03.936064549 +0100
 @@ -31,6 +31,10 @@
   * provisions above, a recipient may use your version of this file
   * under either the RHEPL or the GPL.
@@ -39,9 +40,10 @@ diff -ur linux.old/fs/jffs2/build.c linux.dev/fs/jffs2/build.c
        D1(printk(KERN_DEBUG "Scanned flash completely\n"));
        /* Now build the data map for each inode, marking obsoleted nodes
           as such, and also increase nlink of any children. */
-diff -ur linux.old/fs/jffs2/scan.c linux.dev/fs/jffs2/scan.c
---- linux.old/fs/jffs2/scan.c  2006-06-23 21:57:32.000000000 +0200
-+++ linux.dev/fs/jffs2/scan.c  2006-06-23 22:01:35.000000000 +0200
+Index: linux-2.4.35.4/fs/jffs2/scan.c
+===================================================================
+--- linux-2.4.35.4.orig/fs/jffs2/scan.c        2007-12-15 05:19:38.786631361 +0100
++++ linux-2.4.35.4/fs/jffs2/scan.c     2007-12-15 05:20:03.948065230 +0100
 @@ -31,6 +31,10 @@
   * provisions above, a recipient may use your version of this file
   * under either the RHEPL or the GPL.
index f53a5247cad8efc546a75711bd4d3fd756c8345c..6dc3931ca01955c0ecd90441a038a9edb73e9a49 100644 (file)
@@ -1,6 +1,7 @@
-diff -ur linux.old/drivers/scsi/hosts.c linux.dev/drivers/scsi/hosts.c
---- linux.old/drivers/scsi/hosts.c     2003-06-13 16:51:36.000000000 +0200
-+++ linux.dev/drivers/scsi/hosts.c     2006-07-30 12:34:30.000000000 +0200
+Index: linux-2.4.35.4/drivers/scsi/hosts.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/scsi/hosts.c   2007-12-15 05:19:38.686625662 +0100
++++ linux-2.4.35.4/drivers/scsi/hosts.c        2007-12-15 05:20:04.720109227 +0100
 @@ -107,8 +107,21 @@
      if (shn) shn->host_registered = 0;
      /* else {} : This should not happen, we should panic here... */
@@ -24,9 +25,10 @@ diff -ur linux.old/drivers/scsi/hosts.c linux.dev/drivers/scsi/hosts.c
      kfree((char *) sh);
  }
  
-diff -ur linux.old/drivers/usb/hcd.c linux.dev/drivers/usb/hcd.c
---- linux.old/drivers/usb/hcd.c        2004-04-14 15:05:32.000000000 +0200
-+++ linux.dev/drivers/usb/hcd.c        2006-07-30 11:49:06.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/hcd.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/hcd.c      2007-12-15 05:19:38.694626120 +0100
++++ linux-2.4.35.4/drivers/usb/hcd.c   2007-12-15 05:20:04.724109453 +0100
 @@ -1105,7 +1105,8 @@
                break;
        case PIPE_BULK:
@@ -47,9 +49,10 @@ diff -ur linux.old/drivers/usb/hcd.c linux.dev/drivers/usb/hcd.c
                        urb->transfer_dma = pci_map_single (
                                        hcd->pdev,
                                        urb->transfer_buffer,
-diff -ur linux.old/drivers/usb/host/ehci-hcd.c linux.dev/drivers/usb/host/ehci-hcd.c
---- linux.old/drivers/usb/host/ehci-hcd.c      2006-07-30 11:31:57.000000000 +0200
-+++ linux.dev/drivers/usb/host/ehci-hcd.c      2006-07-30 11:48:14.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/ehci-hcd.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-hcd.c    2007-12-15 05:19:38.702626576 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-hcd.c 2007-12-15 05:20:04.728109682 +0100
 @@ -399,6 +399,27 @@
                ehci_mem_cleanup (ehci);
                return retval;
@@ -78,9 +81,10 @@ diff -ur linux.old/drivers/usb/host/ehci-hcd.c linux.dev/drivers/usb/host/ehci-h
        writel (INTR_MASK, &ehci->regs->intr_enable);
        writel (ehci->periodic_dma, &ehci->regs->frame_list);
  
-diff -ur linux.old/drivers/usb/host/ehci-q.c linux.dev/drivers/usb/host/ehci-q.c
---- linux.old/drivers/usb/host/ehci-q.c        2006-07-30 11:31:57.000000000 +0200
-+++ linux.dev/drivers/usb/host/ehci-q.c        2006-07-30 12:10:15.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/ehci-q.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/ehci-q.c      2007-12-15 05:20:00.107846389 +0100
++++ linux-2.4.35.4/drivers/usb/host/ehci-q.c   2007-12-15 05:20:04.728109682 +0100
 @@ -791,6 +791,8 @@
                        writel (cmd, &ehci->regs->command);
                        ehci->hcd.state = USB_STATE_RUNNING;
@@ -90,9 +94,10 @@ diff -ur linux.old/drivers/usb/host/ehci-q.c linux.dev/drivers/usb/host/ehci-q.c
                }
        }
  
-diff -ur linux.old/drivers/usb/host/usb-uhci.c linux.dev/drivers/usb/host/usb-uhci.c
---- linux.old/drivers/usb/host/usb-uhci.c      2004-11-17 12:54:21.000000000 +0100
-+++ linux.dev/drivers/usb/host/usb-uhci.c      2006-07-30 12:10:16.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/host/usb-uhci.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/host/usb-uhci.c    2007-12-15 05:19:38.714627260 +0100
++++ linux-2.4.35.4/drivers/usb/host/usb-uhci.c 2007-12-15 05:20:04.728109682 +0100
 @@ -3034,6 +3034,21 @@
        
        pci_set_master(dev);
@@ -115,9 +120,10 @@ diff -ur linux.old/drivers/usb/host/usb-uhci.c linux.dev/drivers/usb/host/usb-uh
        /* Search for the IO base address.. */
        for (i = 0; i < 6; i++) {
  
-diff -ur linux.old/drivers/usb/storage/transport.c linux.dev/drivers/usb/storage/transport.c
---- linux.old/drivers/usb/storage/transport.c  2005-04-04 03:42:19.000000000 +0200
-+++ linux.dev/drivers/usb/storage/transport.c  2006-07-30 12:22:56.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/transport.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/transport.c        2007-12-15 05:19:38.722627715 +0100
++++ linux-2.4.35.4/drivers/usb/storage/transport.c     2007-12-15 05:20:04.732109911 +0100
 @@ -54,6 +54,22 @@
  #include <linux/sched.h>
  #include <linux/errno.h>
@@ -746,9 +752,10 @@ diff -ur linux.old/drivers/usb/storage/transport.c linux.dev/drivers/usb/storage
                }
        }
        else
-diff -ur linux.old/drivers/usb/storage/transport.h linux.dev/drivers/usb/storage/transport.h
---- linux.old/drivers/usb/storage/transport.h  2003-08-25 13:44:42.000000000 +0200
-+++ linux.dev/drivers/usb/storage/transport.h  2006-07-30 12:10:16.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/transport.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/transport.h        2007-12-15 05:19:38.730628171 +0100
++++ linux-2.4.35.4/drivers/usb/storage/transport.h     2007-12-15 05:20:04.732109911 +0100
 @@ -127,6 +127,16 @@
  #define US_BULK_TRANSFER_ABORTED      3  /* transfer canceled             */
  
@@ -766,9 +773,10 @@ diff -ur linux.old/drivers/usb/storage/transport.h linux.dev/drivers/usb/storage
   * Transport return codes
   */
  
-diff -ur linux.old/drivers/usb/storage/usb.h linux.dev/drivers/usb/storage/usb.h
---- linux.old/drivers/usb/storage/usb.h        2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/drivers/usb/storage/usb.h        2006-07-30 12:11:06.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/storage/usb.h
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/storage/usb.h      2007-12-15 05:19:38.738628626 +0100
++++ linux-2.4.35.4/drivers/usb/storage/usb.h   2007-12-15 05:20:04.736110140 +0100
 @@ -111,6 +111,60 @@
  typedef void (*proto_cmnd)(Scsi_Cmnd*, struct us_data*);
  typedef void (*extra_data_destructor)(void *);         /* extra data destructor   */
@@ -838,9 +846,10 @@ diff -ur linux.old/drivers/usb/storage/usb.h linux.dev/drivers/usb/storage/usb.h
  
        /* the semaphore for sleeping the control thread */
        struct semaphore        sema;            /* to sleep thread on   */
-diff -ur linux.old/include/linux/usb.h linux.dev/include/linux/usb.h
---- linux.old/include/linux/usb.h      2004-11-17 12:54:22.000000000 +0100
-+++ linux.dev/include/linux/usb.h      2006-07-30 12:19:19.000000000 +0200
+Index: linux-2.4.35.4/include/linux/usb.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/usb.h    2007-12-15 05:19:38.750629310 +0100
++++ linux-2.4.35.4/include/linux/usb.h 2007-12-15 05:20:04.740110367 +0100
 @@ -483,6 +483,8 @@
  #define URB_NO_INTERRUPT      0x0080  /* HINT: no non-error interrupt needed */
                                        /* ... less overhead for QUEUE_BULK */
index 636ffec11df830073eca1b2179b4588a9c364d15..a671d1a271cfe4dbf5dfe41c4c40e4a395cce3a2 100644 (file)
@@ -1,56 +1,8 @@
---- linux-2.4.32/drivers/net/tun.c 2006-10-28 18:21:45.000000000 +0100
-+++ new.linux-2.4.32/drivers/net/tun.c 2006-10-28 18:50:53.000000000 +0100
-@@ -185,22 +185,31 @@
- {
-       struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
-       struct sk_buff *skb;
--      size_t len = count;
-+      size_t len = count, align = 0;
-       if (!(tun->flags & TUN_NO_PI)) {
-               if ((len -= sizeof(pi)) > count)
-                       return -EINVAL;
--              memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
-+              if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
-+                      return -EFAULT;
-       }
-- 
--      if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
-+
-+      if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
-+              align = NET_IP_ALIGN;
-+  
-+      if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
-               tun->stats.rx_dropped++;
-               return -ENOMEM;
-       }
--      skb_reserve(skb, 2);
--      memcpy_fromiovec(skb_put(skb, len), iv, len);
-+      if (align)
-+              skb_reserve(skb, align);
-+      if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
-+              tun->stats.rx_dropped++;
-+              kfree_skb(skb);
-+              return -EFAULT;
-+      }
-       skb->dev = &tun->dev;
-       switch (tun->flags & TUN_TYPE_MASK) {
-@@ -271,7 +271,8 @@
-                       pi.flags |= TUN_PKT_STRIP;
-               }
-  
--              memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
-+              if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
-+                      return -EFAULT;
-               total += sizeof(pi);
-       }       
---- linux-2.4.32/include/linux/skbuff.h        2006-10-28 19:31:31.000000000 +0100
-+++ new.linux-2.4.32/include/linux/skbuff.h    2006-10-28 19:29:27.000000000 +0100
-@@ -918,6 +918,49 @@
+Index: linux-2.4.35.4/include/linux/skbuff.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/skbuff.h 2007-12-15 05:19:38.654623841 +0100
++++ linux-2.4.35.4/include/linux/skbuff.h      2007-12-15 05:20:05.060128604 +0100
+@@ -912,6 +912,49 @@
        skb->tail+=len;
  }
  
  extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc);
  
  static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
+Index: linux-2.4.35.4/drivers/net/tun.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/tun.c      2007-12-15 05:19:38.642623156 +0100
++++ linux-2.4.35.4/drivers/net/tun.c   2007-12-15 05:20:05.056128377 +0100
+@@ -185,22 +185,31 @@
+ {
+       struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
+       struct sk_buff *skb;
+-      size_t len = count;
++      size_t len = count, align = 0;
+       if (!(tun->flags & TUN_NO_PI)) {
+               if ((len -= sizeof(pi)) > count)
+                       return -EINVAL;
+-              memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
++              if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
++                      return -EFAULT;
+       }
+- 
+-      if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
++
++      if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
++              align = NET_IP_ALIGN;
++  
++      if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
+               tun->stats.rx_dropped++;
+               return -ENOMEM;
+       }
+-      skb_reserve(skb, 2);
+-      memcpy_fromiovec(skb_put(skb, len), iv, len);
++      if (align)
++              skb_reserve(skb, align);
++      if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
++              tun->stats.rx_dropped++;
++              kfree_skb(skb);
++              return -EFAULT;
++      }
+       skb->dev = &tun->dev;
+       switch (tun->flags & TUN_TYPE_MASK) {
+@@ -271,7 +280,8 @@
+                       pi.flags |= TUN_PKT_STRIP;
+               }
+  
+-              memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
++              if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
++                      return -EFAULT;
+               total += sizeof(pi);
+       }       
index 29de3ead6739ac4918991dd66ce3ae921bb43375..018762a971e02522030310371f0cb61177ae1f4e 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux.old/fs/Config.in linux.dev/fs/Config.in
---- linux.old/fs/Config.in     2006-10-30 03:44:06.000000000 +0100
-+++ linux.dev/fs/Config.in     2006-10-30 03:42:09.000000000 +0100
-@@ -70,6 +70,7 @@
+Index: linux-2.4.35.4/fs/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/fs/Config.in   2007-12-15 05:19:52.319402550 +0100
++++ linux-2.4.35.4/fs/Config.in        2007-12-15 05:20:05.284141367 +0100
+@@ -77,6 +77,7 @@
  dep_mbool '  JFS statistics' CONFIG_JFS_STATISTICS $CONFIG_JFS_FS
  
  tristate 'Minix fs support' CONFIG_MINIX_FS
@@ -9,9 +10,10 @@ diff -urN linux.old/fs/Config.in linux.dev/fs/Config.in
  
  tristate 'FreeVxFS file system support (VERITAS VxFS(TM) compatible)' CONFIG_VXFS_FS
  tristate 'NTFS file system support (read only)' CONFIG_NTFS_FS
-diff -urN linux.old/fs/Makefile linux.dev/fs/Makefile
---- linux.old/fs/Makefile      2006-10-30 03:44:06.000000000 +0100
-+++ linux.dev/fs/Makefile      2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/fs/Makefile    2007-12-15 05:19:52.319402550 +0100
++++ linux-2.4.35.4/fs/Makefile 2007-12-15 05:20:05.288141596 +0100
 @@ -31,6 +31,7 @@
  subdir-$(CONFIG_CODA_FS)      += coda
  subdir-$(CONFIG_INTERMEZZO_FS)        += intermezzo
@@ -20,9 +22,10 @@ diff -urN linux.old/fs/Makefile linux.dev/fs/Makefile
  subdir-$(CONFIG_FAT_FS)               += fat
  subdir-$(CONFIG_UMSDOS_FS)    += umsdos
  subdir-$(CONFIG_MSDOS_FS)     += msdos
-diff -urN linux.old/fs/mini_fo/aux.c linux.dev/fs/mini_fo/aux.c
---- linux.old/fs/mini_fo/aux.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/aux.c 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/aux.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/aux.c    2007-12-15 05:20:05.296142055 +0100
 @@ -0,0 +1,580 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -604,9 +607,10 @@ diff -urN linux.old/fs/mini_fo/aux.c linux.dev/fs/mini_fo/aux.c
 +
 +#endif /* unused */
 +
-diff -urN linux.old/fs/mini_fo/ChangeLog linux.dev/fs/mini_fo/ChangeLog
---- linux.old/fs/mini_fo/ChangeLog     1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/ChangeLog     2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/ChangeLog
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/ChangeLog        2007-12-15 05:20:05.296142055 +0100
 @@ -0,0 +1,281 @@
 +2006-01-24  Markus Klotzbuecher  <mk@mary.denx.de>
 +
@@ -889,9 +893,10 @@ diff -urN linux.old/fs/mini_fo/ChangeLog linux.dev/fs/mini_fo/ChangeLog
 +      * Implementation of mini_fo_mknod and mini_fo_rename, support
 +          for device files.
 +      
-diff -urN linux.old/fs/mini_fo/dentry.c linux.dev/fs/mini_fo/dentry.c
---- linux.old/fs/mini_fo/dentry.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/dentry.c      2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/dentry.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/dentry.c 2007-12-15 05:20:05.296142055 +0100
 @@ -0,0 +1,244 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -1137,9 +1142,10 @@ diff -urN linux.old/fs/mini_fo/dentry.c linux.dev/fs/mini_fo/dentry.c
 +      d_delete:               mini_fo_d_delete,
 +      d_iput:         mini_fo_d_iput,
 +};
-diff -urN linux.old/fs/mini_fo/file.c linux.dev/fs/mini_fo/file.c
---- linux.old/fs/mini_fo/file.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/file.c        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/file.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/file.c   2007-12-15 05:20:05.300142281 +0100
 @@ -0,0 +1,717 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -1858,9 +1864,10 @@ diff -urN linux.old/fs/mini_fo/file.c linux.dev/fs/mini_fo/file.c
 +              /* not implemented: sendpage */
 +              /* not implemented: get_unmapped_area */
 +      };
-diff -urN linux.old/fs/mini_fo/fist.h linux.dev/fs/mini_fo/fist.h
---- linux.old/fs/mini_fo/fist.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/fist.h        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/fist.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/fist.h   2007-12-15 05:20:05.300142281 +0100
 @@ -0,0 +1,248 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -2110,9 +2117,10 @@ diff -urN linux.old/fs/mini_fo/fist.h linux.dev/fs/mini_fo/fist.h
 +# define FIST_IOCTL_SET_DEBUG_VALUE   _IOW(0x15, 2, int)
 +
 +#endif /* not __FIST_H_ */
-diff -urN linux.old/fs/mini_fo/inode.c linux.dev/fs/mini_fo/inode.c
---- linux.old/fs/mini_fo/inode.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/inode.c       2006-10-30 03:55:42.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/inode.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/inode.c  2007-12-15 05:20:05.300142281 +0100
 @@ -0,0 +1,1573 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -3687,9 +3695,10 @@ diff -urN linux.old/fs/mini_fo/inode.c linux.dev/fs/mini_fo/inode.c
 +              removexattr:    mini_fo_removexattr
 +# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
 +      };
-diff -urN linux.old/fs/mini_fo/main.c linux.dev/fs/mini_fo/main.c
---- linux.old/fs/mini_fo/main.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/main.c        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/main.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/main.c   2007-12-15 05:20:05.300142281 +0100
 @@ -0,0 +1,414 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -4105,9 +4114,10 @@ diff -urN linux.old/fs/mini_fo/main.c linux.dev/fs/mini_fo/main.c
 +
 +module_init(init_mini_fo_fs)
 +module_exit(exit_mini_fo_fs)
-diff -urN linux.old/fs/mini_fo/Makefile linux.dev/fs/mini_fo/Makefile
---- linux.old/fs/mini_fo/Makefile      1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/Makefile      2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/Makefile
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/Makefile 2007-12-15 05:20:05.304142507 +0100
 @@ -0,0 +1,22 @@
 +#
 +# Makefile for mini_fo 2.4 and 2.6 Linux kernels
@@ -4131,9 +4141,10 @@ diff -urN linux.old/fs/mini_fo/Makefile linux.dev/fs/mini_fo/Makefile
 +# dependencies
 +${mini_fo-objs}: mini_fo.h fist.h
 +
-diff -urN linux.old/fs/mini_fo/meta.c linux.dev/fs/mini_fo/meta.c
---- linux.old/fs/mini_fo/meta.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/meta.c        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/meta.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/meta.c   2007-12-15 05:20:05.304142507 +0100
 @@ -0,0 +1,1000 @@
 +/*
 + * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
@@ -5135,9 +5146,10 @@ diff -urN linux.old/fs/mini_fo/meta.c linux.dev/fs/mini_fo/meta.c
 +      return 0;
 +}
 +
-diff -urN linux.old/fs/mini_fo/mini_fo.h linux.dev/fs/mini_fo/mini_fo.h
---- linux.old/fs/mini_fo/mini_fo.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo.h     2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo.h        2007-12-15 05:20:05.304142507 +0100
 @@ -0,0 +1,503 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -5642,9 +5654,10 @@ diff -urN linux.old/fs/mini_fo/mini_fo.h linux.dev/fs/mini_fo/mini_fo.h
 +/* ioctls */
 +
 +#endif        /* not __MINI_FO_H_ */
-diff -urN linux.old/fs/mini_fo/mini_fo-merge linux.dev/fs/mini_fo/mini_fo-merge
---- linux.old/fs/mini_fo/mini_fo-merge 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo-merge 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo-merge
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo-merge    2007-12-15 05:20:05.304142507 +0100
 @@ -0,0 +1,180 @@
 +#!/bin/bash
 +#
@@ -5826,9 +5839,10 @@ diff -urN linux.old/fs/mini_fo/mini_fo-merge linux.dev/fs/mini_fo/mini_fo-merge
 +#rm $TMP/$SKIP_DEL_LIST 
 +
 +echo "Done!"
-diff -urN linux.old/fs/mini_fo/mini_fo-overlay linux.dev/fs/mini_fo/mini_fo-overlay
---- linux.old/fs/mini_fo/mini_fo-overlay       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mini_fo-overlay       2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mini_fo-overlay
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mini_fo-overlay  2007-12-15 05:20:05.308142736 +0100
 @@ -0,0 +1,130 @@
 +#!/bin/bash
 +#
@@ -5960,9 +5974,10 @@ diff -urN linux.old/fs/mini_fo/mini_fo-overlay linux.dev/fs/mini_fo/mini_fo-over
 +if [ $? -ne 0 ]; then
 +    echo "Error, mounting failed, maybe no permisson to mount?"
 +fi
-diff -urN linux.old/fs/mini_fo/mmap.c linux.dev/fs/mini_fo/mmap.c
---- linux.old/fs/mini_fo/mmap.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/mmap.c        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/mmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/mmap.c   2007-12-15 05:20:05.316143195 +0100
 @@ -0,0 +1,637 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
@@ -6601,9 +6616,10 @@ diff -urN linux.old/fs/mini_fo/mmap.c linux.dev/fs/mini_fo/mmap.c
 +      print_exit_status(err);
 +      return err;
 +}
-diff -urN linux.old/fs/mini_fo/README linux.dev/fs/mini_fo/README
---- linux.old/fs/mini_fo/README        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/README        2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/README
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/README   2007-12-15 05:20:05.316143195 +0100
 @@ -0,0 +1,163 @@
 +README for the mini_fo overlay file system
 +=========================================
@@ -6768,9 +6784,10 @@ diff -urN linux.old/fs/mini_fo/README linux.dev/fs/mini_fo/README
 +2 of the License, or (at your option) any later version.
 +
 +
-diff -urN linux.old/fs/mini_fo/RELEASE_NOTES linux.dev/fs/mini_fo/RELEASE_NOTES
---- linux.old/fs/mini_fo/RELEASE_NOTES 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/RELEASE_NOTES 2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/RELEASE_NOTES
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/RELEASE_NOTES    2007-12-15 05:20:05.316143195 +0100
 @@ -0,0 +1,111 @@
 +Release:      mini_fo-0.6.1 (v0-6-1)
 +Date:         21.09.2005
@@ -6883,9 +6900,10 @@ diff -urN linux.old/fs/mini_fo/RELEASE_NOTES linux.dev/fs/mini_fo/RELEASE_NOTES
 +original state. I hope to fix this someday. Please note that this does
 +not effect the special hard links '.' and '..', that are handled
 +seperately by the lower fs.
-diff -urN linux.old/fs/mini_fo/state.c linux.dev/fs/mini_fo/state.c
---- linux.old/fs/mini_fo/state.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/state.c       2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/state.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/state.c  2007-12-15 05:20:05.316143195 +0100
 @@ -0,0 +1,620 @@
 +/*
 + * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
@@ -7507,9 +7525,10 @@ diff -urN linux.old/fs/mini_fo/state.c linux.dev/fs/mini_fo/state.c
 +      return err;
 +}
 +
-diff -urN linux.old/fs/mini_fo/super.c linux.dev/fs/mini_fo/super.c
---- linux.old/fs/mini_fo/super.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/fs/mini_fo/super.c       2006-10-30 03:42:09.000000000 +0100
+Index: linux-2.4.35.4/fs/mini_fo/super.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/fs/mini_fo/super.c  2007-12-15 05:20:05.316143195 +0100
 @@ -0,0 +1,259 @@
 +/*
 + * Copyright (c) 1997-2003 Erez Zadok
index bfaa6e4b76e5146560340653f519d88bf6622382..c2b519963071b8efee736ea53b0905b09df5a0f1 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_ipp2p.h linux.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h
---- linux.old/include/linux/netfilter_ipv4/ipt_ipp2p.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_ipp2p.h 2006-03-23 14:37:56.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_ipp2p.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_ipp2p.h    2007-12-15 05:20:05.756168270 +0100
 @@ -0,0 +1,31 @@
 +#ifndef __IPT_IPP2P_H
 +#define __IPT_IPP2P_H
@@ -33,10 +34,11 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_ipp2p.h linux.dev/include/l
 +#define IPP2P_MUTE            (1 << 14)
 +#define IPP2P_WASTE           (1 << 15)
 +#define IPP2P_XDCC            (1 << 16)
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in     2006-03-23 14:35:20.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in     2006-03-23 14:35:58.000000000 +0100
-@@ -29,6 +29,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:19:38.466613124 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:05.764168722 +0100
+@@ -26,6 +26,7 @@
    dep_tristate '  TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
    dep_tristate '  recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
    dep_tristate '  ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
@@ -44,10 +46,11 @@ diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Co
   
    dep_tristate '  DSCP match support' CONFIG_IP_NF_MATCH_DSCP $CONFIG_IP_NF_IPTABLES
   
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile      2006-03-23 14:35:20.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile      2006-03-23 14:35:58.000000000 +0100
-@@ -76,6 +76,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:19:38.474613582 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:05.764168722 +0100
+@@ -67,6 +67,7 @@
  obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o
  obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o
  obj-$(CONFIG_IP_NF_MATCH_MAC) += ipt_mac.o
@@ -55,9 +58,10 @@ diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Mak
  
  obj-$(CONFIG_IP_NF_MATCH_PKTTYPE) += ipt_pkttype.o
  obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
-diff -urN linux.old/net/ipv4/netfilter/ipt_ipp2p.c linux.dev/net/ipv4/netfilter/ipt_ipp2p.c
---- linux.old/net/ipv4/netfilter/ipt_ipp2p.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_ipp2p.c   2006-03-23 14:37:18.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_ipp2p.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_ipp2p.c      2007-12-15 05:20:05.764168722 +0100
 @@ -0,0 +1,868 @@
 +#if defined(MODVERSIONS)
 +#include <linux/modversions.h>
index d67725d8546a9abfea1ee1f378287b8eb1236cd0..301a3a79f22f91f1da0e8cec680fb1da452df892 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux.old/Documentation/Configure.help linux.dev/Documentation/Configure.help
---- linux.old/Documentation/Configure.help     2006-01-31 16:55:22.467939000 +0100
-+++ linux.dev/Documentation/Configure.help     2006-01-31 16:58:24.751331500 +0100
-@@ -29151,6 +29151,18 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:19:54.063501941 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:06.024183543 +0100
+@@ -29207,6 +29207,18 @@
    
    If unsure, say N.
  
@@ -20,9 +21,10 @@ diff -urN linux.old/Documentation/Configure.help linux.dev/Documentation/Configu
  #
  # A couple of things I keep forgetting:
  #   capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet,
-diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux.old/include/linux/netfilter_ipv4/ip_conntrack.h      2005-11-16 20:12:54.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h      2006-01-31 16:58:24.775333000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:19:38.358606970 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.024183543 +0100
 @@ -207,6 +207,17 @@
        } nat;
  #endif /* CONFIG_IP_NF_NAT_NEEDED */
@@ -41,9 +43,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/includ
  };
  
  /* get master conntrack via master expectation */
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_layer7.h linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h
---- linux.old/include/linux/netfilter_ipv4/ipt_layer7.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_layer7.h        2006-01-31 19:29:03.774017500 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_layer7.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_layer7.h   2007-12-15 05:20:06.032183998 +0100
 @@ -0,0 +1,27 @@
 +/* 
 +  By Matthew Strait <quadong@users.sf.net>, Dec 2003.
@@ -72,9 +75,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_layer7.h linux.dev/include/
 +};
 +
 +#endif /* _IPT_LAYER7_H */
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in     2006-01-31 16:55:32.364558000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in     2006-01-31 16:58:24.803334750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:05.764168722 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:06.036184227 +0100
 @@ -44,6 +44,9 @@
    if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
      dep_tristate '  Unclean match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_UNCLEAN $CONFIG_IP_NF_IPTABLES
@@ -85,9 +89,10 @@ diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Co
    fi
  # The targets
    dep_tristate '  Packet filtering' CONFIG_IP_NF_FILTER $CONFIG_IP_NF_IPTABLES 
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile      2006-01-31 16:55:32.372558000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile      2006-01-31 16:58:24.803334750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:05.764168722 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.036184227 +0100
 @@ -87,6 +87,7 @@
  obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
  obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
@@ -96,9 +101,10 @@ diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Mak
  
  # targets
  obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_core.c   2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_core.c   2006-01-31 16:58:24.811335250 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:19:38.386608565 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c      2007-12-15 05:20:06.036184227 +0100
 @@ -346,6 +346,14 @@
                }
                kfree(ct->master);
@@ -114,9 +120,10 @@ diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/ne
        WRITE_UNLOCK(&ip_conntrack_lock);
  
        if (master)
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c     2005-04-04 03:42:20.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c     2006-01-31 16:58:24.815335500 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c   2007-12-15 05:19:38.394609023 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c        2007-12-15 05:20:06.036184227 +0100
 @@ -107,6 +107,13 @@
                len += sprintf(buffer + len, "[ASSURED] ");
        len += sprintf(buffer + len, "use=%u ",
@@ -131,9 +138,10 @@ diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/i
        len += sprintf(buffer + len, "\n");
  
        return len;
-diff -urN linux.old/net/ipv4/netfilter/ipt_layer7.c linux.dev/net/ipv4/netfilter/ipt_layer7.c
---- linux.old/net/ipv4/netfilter/ipt_layer7.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_layer7.c  2006-01-31 19:31:38.591693000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_layer7.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_layer7.c     2007-12-15 05:20:06.040184453 +0100
 @@ -0,0 +1,595 @@
 +/* 
 +  Kernel module to match application layer (OSI layer 7) 
@@ -730,9 +738,10 @@ diff -urN linux.old/net/ipv4/netfilter/ipt_layer7.c linux.dev/net/ipv4/netfilter
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.c linux.dev/net/ipv4/netfilter/regexp/regexp.c
---- linux.old/net/ipv4/netfilter/regexp/regexp.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regexp.c       2006-01-31 16:58:24.819335750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.c  2007-12-15 05:20:06.040184453 +0100
 @@ -0,0 +1,1195 @@
 +/*
 + * regcomp and regexec -- regsub and regerror are elsewhere
@@ -1929,9 +1938,10 @@ diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.c linux.dev/net/ipv4/netfil
 +#endif
 +
 +
-diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.h linux.dev/net/ipv4/netfilter/regexp/regexp.h
---- linux.old/net/ipv4/netfilter/regexp/regexp.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regexp.h       2006-01-31 16:58:24.819335750 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regexp.h  2007-12-15 05:20:06.040184453 +0100
 @@ -0,0 +1,40 @@
 +/*
 + * Definitions etc. for regexp(3) routines.
@@ -1973,18 +1983,20 @@ diff -urN linux.old/net/ipv4/netfilter/regexp/regexp.h linux.dev/net/ipv4/netfil
 +void regerror(char *s);
 +
 +#endif
-diff -urN linux.old/net/ipv4/netfilter/regexp/regmagic.h linux.dev/net/ipv4/netfilter/regexp/regmagic.h
---- linux.old/net/ipv4/netfilter/regexp/regmagic.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regmagic.h     2006-01-31 16:58:24.823336000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regmagic.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regmagic.h        2007-12-15 05:20:06.040184453 +0100
 @@ -0,0 +1,5 @@
 +/*
 + * The first byte of the regexp internal "program" is actually this magic
 + * number; the start node begins in the second byte.
 + */
 +#define       MAGIC   0234
-diff -urN linux.old/net/ipv4/netfilter/regexp/regsub.c linux.dev/net/ipv4/netfilter/regexp/regsub.c
---- linux.old/net/ipv4/netfilter/regexp/regsub.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/regexp/regsub.c       2006-01-31 16:58:24.823336000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/regexp/regsub.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/regexp/regsub.c  2007-12-15 05:20:06.044184683 +0100
 @@ -0,0 +1,95 @@
 +/*
 + * regsub
index fb5c314e6b339fec180962b92e0924f3537395c3..dd1bc1ca5e0dd83b812b5bcd0b1f51fc09f9129a 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack.h       2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack.h       2005-04-02 19:41:05.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:06.024183543 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:06.392204515 +0100
 @@ -50,16 +50,19 @@
  
  #include <linux/netfilter_ipv4/ip_conntrack_tcp.h>
@@ -55,9 +56,10 @@ diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4
  };
  #endif
  
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_pptp.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_pptp.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_pptp.h  2005-04-02 19:09:07.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_pptp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_pptp.h    2007-12-15 05:20:06.400204969 +0100
 @@ -0,0 +1,313 @@
 +/* PPTP constants and structs */
 +#ifndef _CONNTRACK_PPTP_H
@@ -372,9 +374,10 @@ diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_pptp.h linu
 +
 +#endif /* __KERNEL__ */
 +#endif /* _CONNTRACK_PPTP_H */
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h     2005-04-02 19:10:45.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h       2007-12-15 05:20:06.400204969 +0100
 @@ -0,0 +1,123 @@
 +#ifndef _CONNTRACK_PROTO_GRE_H
 +#define _CONNTRACK_PROTO_GRE_H
@@ -499,9 +502,10 @@ diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_proto_gre.h
 +#endif /* __KERNEL__ */
 +
 +#endif /* _CONNTRACK_PROTO_GRE_H */
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_tuple.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2003-11-28 19:26:21.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_conntrack_tuple.h 2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_tuple.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack_tuple.h      2007-12-15 05:19:38.250600816 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_tuple.h   2007-12-15 05:20:06.400204969 +0100
 @@ -14,7 +14,7 @@
  union ip_conntrack_manip_proto
  {
@@ -560,9 +564,10 @@ diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_conntrack_tuple.h lin
  
  #define CTINFO2DIR(ctinfo) ((ctinfo) >= IP_CT_IS_REPLY ? IP_CT_DIR_REPLY : IP_CT_DIR_ORIGINAL)
  
-diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_nat_pptp.h linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_nat_pptp.h
---- linux-2.4.29-old/include/linux/netfilter_ipv4/ip_nat_pptp.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/include/linux/netfilter_ipv4/ip_nat_pptp.h        2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat_pptp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat_pptp.h  2007-12-15 05:20:06.400204969 +0100
 @@ -0,0 +1,11 @@
 +/* PPTP constants and structs */
 +#ifndef _NAT_PPTP_H
@@ -575,9 +580,10 @@ diff -urN linux-2.4.29-old/include/linux/netfilter_ipv4/ip_nat_pptp.h linux-2.4.
 +};
 +
 +#endif /* _NAT_PPTP_H */
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/Config.in linux-2.4.29-dev/net/ipv4/netfilter/Config.in
---- linux-2.4.29-old/net/ipv4/netfilter/Config.in      2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/Config.in      2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:06.400204969 +0100
 @@ -10,6 +10,8 @@
    dep_tristate '  Amanda protocol support' CONFIG_IP_NF_AMANDA $CONFIG_IP_NF_CONNTRACK
    dep_tristate '  TFTP protocol support' CONFIG_IP_NF_TFTP $CONFIG_IP_NF_CONNTRACK
@@ -587,7 +593,7 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/Config.in linux-2.4.29-dev/net/ipv
  fi
  
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -67,6 +69,20 @@
+@@ -63,6 +65,20 @@
        define_bool CONFIG_IP_NF_NAT_NEEDED y
        dep_tristate '    MASQUERADE target support' CONFIG_IP_NF_TARGET_MASQUERADE $CONFIG_IP_NF_NAT
        dep_tristate '    REDIRECT target support' CONFIG_IP_NF_TARGET_REDIRECT $CONFIG_IP_NF_NAT
@@ -608,10 +614,11 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/Config.in linux-2.4.29-dev/net/ipv
        if [ "$CONFIG_IP_NF_AMANDA" = "m" ]; then
          define_tristate CONFIG_IP_NF_NAT_AMANDA m
        else
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c    2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_core.c    2005-04-02 19:07:18.000000000 +0200
-@@ -142,6 +142,8 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c      2007-12-15 05:20:06.404205198 +0100
+@@ -143,6 +143,8 @@
        tuple->dst.ip = iph->daddr;
        tuple->dst.protonum = iph->protocol;
  
@@ -620,7 +627,7 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-d
        ret = protocol->pkt_to_tuple((u_int32_t *)iph + iph->ihl,
                                     len - 4*iph->ihl,
                                     tuple);
-@@ -157,6 +159,8 @@
+@@ -158,6 +160,8 @@
        inverse->dst.ip = orig->src.ip;
        inverse->dst.protonum = orig->dst.protonum;
  
@@ -629,7 +636,7 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-d
        return protocol->invert_tuple(inverse, orig);
  }
  
-@@ -954,8 +958,8 @@
+@@ -970,8 +974,8 @@
         * so there is no need to use the tuple lock too */
  
        DEBUGP("ip_conntrack_expect_related %p\n", related_to);
@@ -640,7 +647,7 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-d
  
        old = LIST_FIND(&ip_conntrack_expect_list, resent_expect,
                        struct ip_conntrack_expect *, &expect->tuple, 
-@@ -1072,15 +1076,14 @@
+@@ -1089,15 +1093,14 @@
  
        MUST_BE_READ_LOCKED(&ip_conntrack_lock);
        WRITE_LOCK(&ip_conntrack_expect_tuple_lock);
@@ -660,9 +667,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_core.c linux-2.4.29-d
                    && LIST_FIND(&ip_conntrack_expect_list, expect_clash,
                                 struct ip_conntrack_expect *, newtuple, &expect->mask)) {
                        /* Force NAT to find an unused tuple */
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_pptp_priv.h linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_pptp_priv.h
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_pptp_priv.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_pptp_priv.h       2005-04-02 19:14:10.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp_priv.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp_priv.h 2007-12-15 05:20:06.404205198 +0100
 @@ -0,0 +1,24 @@
 +#ifndef _IP_CT_PPTP_PRIV_H
 +#define _IP_CT_PPTP_PRIV_H
@@ -688,9 +696,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_pptp_priv.h linux-2.4
 +};
 +
 +#endif
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_proto_gre.c linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_proto_gre.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_proto_gre.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_conntrack_proto_gre.c       2005-04-02 19:14:31.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2007-12-15 05:20:06.404205198 +0100
 @@ -0,0 +1,333 @@
 +/*
 + * ip_conntrack_proto_gre.c - Version 1.2 
@@ -1025,9 +1034,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_conntrack_proto_gre.c linux-2.4
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_core.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_core.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_core.c  2005-01-19 15:10:13.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_core.c  2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_core.c       2007-12-15 05:19:38.290603095 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c    2007-12-15 05:20:06.404205198 +0100
 @@ -424,7 +424,7 @@
        *tuple = *orig_tuple;
        while ((rptr = find_best_ips_proto_fast(tuple, mr, conntrack, hooknum))
@@ -1049,9 +1059,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_core.c linux-2.4.29-dev/net
  #endif
  
                /* We now have two tuples (SRCIP/SRCPT/DSTIP/DSTPT):
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_pptp.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_pptp.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_pptp.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_pptp.c  2005-04-02 19:14:52.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_pptp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_pptp.c    2007-12-15 05:20:06.408205428 +0100
 @@ -0,0 +1,482 @@
 +/*
 + * ip_nat_pptp.c      - Version 1.5
@@ -1535,9 +1546,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_pptp.c linux-2.4.29-dev/net
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_proto_gre.c linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_proto_gre.c
---- linux-2.4.29-old/net/ipv4/netfilter/ip_nat_proto_gre.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.29-dev/net/ipv4/netfilter/ip_nat_proto_gre.c     2005-04-02 19:15:10.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_proto_gre.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_proto_gre.c       2007-12-15 05:20:06.408205428 +0100
 @@ -0,0 +1,202 @@
 +/*
 + * ip_nat_proto_gre.c - Version 1.2
@@ -1741,9 +1753,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/ip_nat_proto_gre.c linux-2.4.29-de
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.29-old/net/ipv4/netfilter/Makefile linux-2.4.29-dev/net/ipv4/netfilter/Makefile
---- linux-2.4.29-old/net/ipv4/netfilter/Makefile       2005-04-02 19:04:11.000000000 +0200
-+++ linux-2.4.29-dev/net/ipv4/netfilter/Makefile       2005-04-02 19:07:18.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:06.408205428 +0100
 @@ -36,23 +36,32 @@
  ifdef CONFIG_IP_NF_AMANDA
        export-objs += ip_conntrack_amanda.o
@@ -1779,8 +1792,10 @@ diff -urN linux-2.4.29-old/net/ipv4/netfilter/Makefile linux-2.4.29-dev/net/ipv4
  
  # generic IP tables 
  obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_pptp.c        1970-01-01 01:00:00.000000000 +0100
-+++ /home/florian//openwrt/trunk/openwrt/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_pptp.c     2006-02-04 18:23:27.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_pptp.c      2007-12-15 05:20:06.408205428 +0100
 @@ -0,0 +1,635 @@
 +/*
 + * ip_conntrack_pptp.c        - Version 1.9
index 001ed67b886a4415e56b505443a65cba12862f77..d0b38165574463b19cd2cb5872c35d0e5c50624c 100644 (file)
@@ -1,6 +1,8 @@
---- ../../buildroot-unpacked/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_core.c 2004-11-28 22:59:36.000000000 -0500
-+++ linux/net/ipv4/netfilter/ip_conntrack_core.c       2004-11-30 05:05:32.000000000 -0500
-@@ -1386,7 +1386,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c      2007-12-15 05:20:06.772226171 +0100
+@@ -1410,7 +1410,7 @@
        nf_unregister_sockopt(&so_getorigdst);
  }
  
@@ -9,7 +11,7 @@
  MODULE_PARM(hashsize, "i");
  
  int __init ip_conntrack_init(void)
-@@ -1407,7 +1407,7 @@
+@@ -1431,7 +1431,7 @@
                if (ip_conntrack_htable_size < 16)
                        ip_conntrack_htable_size = 16;
        }
index 0aa3c8043233f322596e9776d8b5f0b656143465..d42436041ebb5cedc304863db5512f0357f8543a 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.30.old/Documentation/Configure.help linux-2.4.30.dev/Documentation/Configure.help
---- linux-2.4.30.old/Documentation/Configure.help      2005-04-27 11:35:46.000000000 +0200
-+++ linux-2.4.30.dev/Documentation/Configure.help      2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:06.024183543 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:06.996238934 +0100
 @@ -3209,6 +3209,15 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
@@ -17,9 +18,10 @@ diff -urN linux-2.4.30.old/Documentation/Configure.help linux-2.4.30.dev/Documen
  ipchains (2.2-style) support
  CONFIG_IP_NF_COMPAT_IPCHAINS
    This option places ipchains (with masquerading and redirection
-diff -urN linux-2.4.30.old/include/linux/netfilter_ipv4/ipt_TTL.h linux-2.4.30.dev/include/linux/netfilter_ipv4/ipt_TTL.h
---- linux-2.4.30.old/include/linux/netfilter_ipv4/ipt_TTL.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.dev/include/linux/netfilter_ipv4/ipt_TTL.h    2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_TTL.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_TTL.h      2007-12-15 05:20:07.000239163 +0100
 @@ -0,0 +1,21 @@
 +/* TTL modification module for IP tables
 + * (C) 2000 by Harald Welte <laforge@gnumonks.org> */
@@ -42,10 +44,11 @@ diff -urN linux-2.4.30.old/include/linux/netfilter_ipv4/ipt_TTL.h linux-2.4.30.d
 +
 +
 +#endif
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/Config.in linux-2.4.30.dev/net/ipv4/netfilter/Config.in
---- linux-2.4.30.old/net/ipv4/netfilter/Config.in      2005-04-27 11:35:45.000000000 +0200
-+++ linux-2.4.30.dev/net/ipv4/netfilter/Config.in      2005-04-27 11:43:49.000000000 +0200
-@@ -129,6 +129,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:06.400204969 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:07.000239163 +0100
+@@ -125,6 +125,7 @@
      dep_tristate '    MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
    fi
    dep_tristate '  LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
@@ -53,9 +56,10 @@ diff -urN linux-2.4.30.old/net/ipv4/netfilter/Config.in linux-2.4.30.dev/net/ipv
    dep_tristate '  ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
    dep_tristate '  TCPMSS target support' CONFIG_IP_NF_TARGET_TCPMSS $CONFIG_IP_NF_IPTABLES
  fi
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/ipt_TTL.c linux-2.4.30.dev/net/ipv4/netfilter/ipt_TTL.c
---- linux-2.4.30.old/net/ipv4/netfilter/ipt_TTL.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30.dev/net/ipv4/netfilter/ipt_TTL.c      2005-04-27 11:43:49.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_TTL.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_TTL.c        2007-12-15 05:20:07.000239163 +0100
 @@ -0,0 +1,110 @@
 +/* TTL modification target for IP tables
 + * (C) 2000 by Harald Welte <laforge@gnumonks.org>
@@ -167,10 +171,11 @@ diff -urN linux-2.4.30.old/net/ipv4/netfilter/ipt_TTL.c linux-2.4.30.dev/net/ipv
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.30.old/net/ipv4/netfilter/Makefile linux-2.4.30.dev/net/ipv4/netfilter/Makefile
---- linux-2.4.30.old/net/ipv4/netfilter/Makefile       2005-04-27 11:35:45.000000000 +0200
-+++ linux-2.4.30.dev/net/ipv4/netfilter/Makefile       2005-04-27 11:43:49.000000000 +0200
-@@ -112,6 +112,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:06.408205428 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.000239163 +0100
+@@ -109,6 +109,7 @@
  obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
  obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
  obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
index ccd639181e1ba5e5ffc16e21d7c631f04a776f85..1e4b94433738ca4dbf68abc1487dc8e55caebcb0 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.30.orig/Documentation/Configure.help linux-2.4.30/Documentation/Configure.help
---- linux-2.4.30.orig/Documentation/Configure.help     2005-07-01 02:06:36.000000000 +0200
-+++ linux-2.4.30/Documentation/Configure.help  2005-07-01 00:41:09.000000000 +0200
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:06.996238934 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:07.284255349 +0100
 @@ -3086,6 +3086,17 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
@@ -19,10 +20,11 @@ diff -urN linux-2.4.30.orig/Documentation/Configure.help linux-2.4.30/Documentat
  Packet mangling
  CONFIG_IP_NF_MANGLE
    This option adds a `mangle' table to iptables: see the man page for
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/Config.in linux-2.4.30/net/ipv4/netfilter/Config.in
---- linux-2.4.30.orig/net/ipv4/netfilter/Config.in     2005-07-01 02:06:35.000000000 +0200
-+++ linux-2.4.30/net/ipv4/netfilter/Config.in  2005-07-01 00:41:09.000000000 +0200
-@@ -69,6 +69,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:07.000239163 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:07.284255349 +0100
+@@ -65,6 +65,7 @@
        define_bool CONFIG_IP_NF_NAT_NEEDED y
        dep_tristate '    MASQUERADE target support' CONFIG_IP_NF_TARGET_MASQUERADE $CONFIG_IP_NF_NAT
        dep_tristate '    REDIRECT target support' CONFIG_IP_NF_TARGET_REDIRECT $CONFIG_IP_NF_NAT
@@ -30,9 +32,10 @@ diff -urN linux-2.4.30.orig/net/ipv4/netfilter/Config.in linux-2.4.30/net/ipv4/n
        if [ "$CONFIG_IP_NF_PPTP" = "m" ]; then
          define_tristate CONFIG_IP_NF_NAT_PPTP m
        else
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/ipt_NETMAP.c linux-2.4.30/net/ipv4/netfilter/ipt_NETMAP.c
---- linux-2.4.30.orig/net/ipv4/netfilter/ipt_NETMAP.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30/net/ipv4/netfilter/ipt_NETMAP.c       2005-07-01 00:41:09.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_NETMAP.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_NETMAP.c     2007-12-15 05:20:07.284255349 +0100
 @@ -0,0 +1,112 @@
 +/* NETMAP - static NAT mapping of IP network addresses (1:1).
 +   The mapping can be applied to source (POSTROUTING),
@@ -146,10 +149,11 @@ diff -urN linux-2.4.30.orig/net/ipv4/netfilter/ipt_NETMAP.c linux-2.4.30/net/ipv
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.30.orig/net/ipv4/netfilter/Makefile linux-2.4.30/net/ipv4/netfilter/Makefile
---- linux-2.4.30.orig/net/ipv4/netfilter/Makefile      2005-07-01 02:06:35.000000000 +0200
-+++ linux-2.4.30/net/ipv4/netfilter/Makefile   2005-07-01 00:41:09.000000000 +0200
-@@ -110,6 +110,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:07.000239163 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.288255579 +0100
+@@ -107,6 +107,7 @@
  obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o
  obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
  obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
index 154314dc411e108d9bff8fccf766f942c3902455..7641f5bdc8fff75b4015f5ab5ce8baa25f21b7e6 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux.old/include/linux/netfilter_ipv4/ip_conntrack.h      2005-08-20 20:02:06.619827000 +0200
-+++ linux.dev/include/linux/netfilter_ipv4/ip_conntrack.h      2005-08-20 20:19:23.302029232 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:06.392204515 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:07.552270623 +0100
 @@ -226,6 +226,9 @@
                unsigned int app_data_len;
        } layer7;
@@ -11,9 +12,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ip_conntrack.h linux.dev/includ
  };
  
  /* get master conntrack via master expectation */
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_CONNMARK.h linux.dev/include/linux/netfilter_ipv4/ipt_CONNMARK.h
---- linux.old/include/linux/netfilter_ipv4/ipt_CONNMARK.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_CONNMARK.h      2005-08-20 20:19:41.058329864 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CONNMARK.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CONNMARK.h 2007-12-15 05:20:07.556270849 +0100
 @@ -0,0 +1,25 @@
 +#ifndef _IPT_CONNMARK_H_target
 +#define _IPT_CONNMARK_H_target
@@ -40,9 +42,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_CONNMARK.h linux.dev/includ
 +};
 +
 +#endif /*_IPT_CONNMARK_H_target*/
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_connmark.h linux.dev/include/linux/netfilter_ipv4/ipt_connmark.h
---- linux.old/include/linux/netfilter_ipv4/ipt_connmark.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_connmark.h      2005-08-20 20:19:41.058329864 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connmark.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connmark.h 2007-12-15 05:20:07.564271306 +0100
 @@ -0,0 +1,18 @@
 +#ifndef _IPT_CONNMARK_H
 +#define _IPT_CONNMARK_H
@@ -62,9 +65,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_connmark.h linux.dev/includ
 +};
 +
 +#endif /*_IPT_CONNMARK_H*/
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in     2005-08-20 20:02:09.325416000 +0200
-+++ linux.dev/net/ipv4/netfilter/Config.in     2005-08-20 20:29:11.546602464 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:07.284255349 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:07.568271536 +0100
 @@ -6,7 +6,8 @@
  
  tristate 'Connection tracking (required for masq/NAT)' CONFIG_IP_NF_CONNTRACK
@@ -95,9 +99,10 @@ diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Co
    dep_tristate '  LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
    dep_tristate '  TTL target support' CONFIG_IP_NF_TARGET_TTL $CONFIG_IP_NF_IPTABLES
    dep_tristate '  ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile      2005-08-20 20:02:09.326416000 +0200
-+++ linux.dev/net/ipv4/netfilter/Makefile      2005-08-20 20:29:54.081136232 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:07.288255579 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.568271536 +0100
 @@ -93,6 +93,7 @@
  
  obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
@@ -107,17 +112,18 @@ diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Mak
  obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
  obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
 @@ -110,6 +111,7 @@
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
  obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
  obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
 +obj-$(CONFIG_IP_NF_TARGET_CONNMARK) += ipt_CONNMARK.o
  obj-$(CONFIG_IP_NF_TARGET_TTL) += ipt_TTL.o
  obj-$(CONFIG_IP_NF_TARGET_ULOG) += ipt_ULOG.o
  obj-$(CONFIG_IP_NF_TARGET_TCPMSS) += ipt_TCPMSS.o
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/netfilter/ip_conntrack_core.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_core.c   2005-08-20 20:02:06.828795000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_core.c   2005-08-20 20:33:23.308328864 +0200
-@@ -755,6 +755,9 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:06.772226171 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c      2007-12-15 05:20:07.568271536 +0100
+@@ -754,6 +754,9 @@
                __set_bit(IPS_EXPECTED_BIT, &conntrack->status);
                conntrack->master = expected;
                expected->sibling = conntrack;
@@ -127,9 +133,10 @@ diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_core.c linux.dev/net/ipv4/ne
                LIST_DELETE(&ip_conntrack_expect_list, expected);
                expected->expectant->expecting--;
                nf_conntrack_get(&master_ct(conntrack)->infos[0]);
-diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c
---- linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c     2005-08-20 20:02:06.583833000 +0200
-+++ linux.dev/net/ipv4/netfilter/ip_conntrack_standalone.c     2005-08-20 20:32:15.364657872 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c   2007-12-15 05:20:06.036184227 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c        2007-12-15 05:20:07.568271536 +0100
 @@ -107,6 +107,9 @@
                len += sprintf(buffer + len, "[ASSURED] ");
        len += sprintf(buffer + len, "use=%u ",
@@ -140,9 +147,10 @@ diff -urN linux.old/net/ipv4/netfilter/ip_conntrack_standalone.c linux.dev/net/i
  
        #if defined(CONFIG_IP_NF_MATCH_LAYER7) || defined(CONFIG_IP_NF_MATCH_LAYER7_MODULE)
        if(conntrack->layer7.app_proto)
-diff -urN linux.old/net/ipv4/netfilter/ipt_CONNMARK.c linux.dev/net/ipv4/netfilter/ipt_CONNMARK.c
---- linux.old/net/ipv4/netfilter/ipt_CONNMARK.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_CONNMARK.c        2005-08-20 20:21:28.666970864 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_CONNMARK.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_CONNMARK.c   2007-12-15 05:20:07.568271536 +0100
 @@ -0,0 +1,118 @@
 +/* This kernel module is used to modify the connection mark values, or
 + * to optionally restore the skb nfmark from the connection mark
@@ -262,9 +270,10 @@ diff -urN linux.old/net/ipv4/netfilter/ipt_CONNMARK.c linux.dev/net/ipv4/netfilt
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/ipt_connmark.c linux.dev/net/ipv4/netfilter/ipt_connmark.c
---- linux.old/net/ipv4/netfilter/ipt_connmark.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_connmark.c        2005-08-20 20:21:28.666970864 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_connmark.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_connmark.c   2007-12-15 05:20:07.572271763 +0100
 @@ -0,0 +1,83 @@
 +/* This kernel module matches connection mark values set by the
 + * CONNMARK target
index 8cf5c694d03a3b4a6fc175ff2be800622bd051d7..915f39f089d8f1b9c728760608b35f9fca148a2e 100644 (file)
@@ -1,7 +1,8 @@
-diff -Naur linux-old/Documentation/Configure.help linux-new/Documentation/Configure.help
---- linux-old/Documentation/Configure.help     2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/Documentation/Configure.help     2005-08-10 22:13:01.000000000 +0200
-@@ -3209,6 +3209,75 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:07.284255349 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:07.880289314 +0100
+@@ -3220,6 +3220,75 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
  
@@ -77,9 +78,10 @@ diff -Naur linux-old/Documentation/Configure.help linux-new/Documentation/Config
  TTL target support
  CONFIG_IP_NF_TARGET_TTL
    This option adds a `TTL' target, which enables the user to set
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set.h linux-new/include/linux/netfilter_ipv4/ip_set.h
---- linux-old/include/linux/netfilter_ipv4/ip_set.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set.h    2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set.h       2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,489 @@
 +#ifndef _IP_SET_H
 +#define _IP_SET_H
@@ -570,9 +572,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set.h linux-new/include/lin
 +#endif                                /* __KERNEL__ */
 +
 +#endif /*_IP_SET_H*/
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iphash.h linux-new/include/linux/netfilter_ipv4/ip_set_iphash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_iphash.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_iphash.h     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iphash.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iphash.h        2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,30 @@
 +#ifndef __IP_SET_IPHASH_H
 +#define __IP_SET_IPHASH_H
@@ -604,9 +607,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iphash.h linux-new/incl
 +};
 +
 +#endif        /* __IP_SET_IPHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_ipmap.h linux-new/include/linux/netfilter_ipv4/ip_set_ipmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_ipmap.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_ipmap.h      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipmap.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipmap.h 2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,56 @@
 +#ifndef __IP_SET_IPMAP_H
 +#define __IP_SET_IPMAP_H
@@ -664,9 +668,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_ipmap.h linux-new/inclu
 +}
 +      
 +#endif /* __IP_SET_IPMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iptree.h linux-new/include/linux/netfilter_ipv4/ip_set_iptree.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_iptree.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_iptree.h     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iptree.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_iptree.h        2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,39 @@
 +#ifndef __IP_SET_IPTREE_H
 +#define __IP_SET_IPTREE_H
@@ -707,9 +712,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_iptree.h linux-new/incl
 +};
 +
 +#endif        /* __IP_SET_IPTREE_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_jhash.h linux-new/include/linux/netfilter_ipv4/ip_set_jhash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_jhash.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_jhash.h      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_jhash.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_jhash.h 2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,148 @@
 +#ifndef _LINUX_IPSET_JHASH_H
 +#define _LINUX_IPSET_JHASH_H
@@ -859,9 +865,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_jhash.h linux-new/inclu
 +}
 +
 +#endif /* _LINUX_IPSET_JHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_macipmap.h linux-new/include/linux/netfilter_ipv4/ip_set_macipmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_macipmap.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_macipmap.h   2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_macipmap.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_macipmap.h      2007-12-15 05:20:07.884289543 +0100
 @@ -0,0 +1,38 @@
 +#ifndef __IP_SET_MACIPMAP_H
 +#define __IP_SET_MACIPMAP_H
@@ -901,9 +908,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_macipmap.h linux-new/in
 +};
 +
 +#endif        /* __IP_SET_MACIPMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_malloc.h linux-new/include/linux/netfilter_ipv4/ip_set_malloc.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_malloc.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_malloc.h     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_malloc.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_malloc.h        2007-12-15 05:20:07.888289773 +0100
 @@ -0,0 +1,27 @@
 +#ifndef _IP_SET_MALLOC_H
 +#define _IP_SET_MALLOC_H
@@ -932,9 +940,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_malloc.h linux-new/incl
 +#endif                                /* __KERNEL__ */
 +
 +#endif /*_IP_SET_MALLOC_H*/
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_nethash.h linux-new/include/linux/netfilter_ipv4/ip_set_nethash.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_nethash.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_nethash.h    2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_nethash.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_nethash.h       2007-12-15 05:20:07.888289773 +0100
 @@ -0,0 +1,55 @@
 +#ifndef __IP_SET_NETHASH_H
 +#define __IP_SET_NETHASH_H
@@ -991,9 +1000,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_nethash.h linux-new/inc
 +}
 +
 +#endif        /* __IP_SET_NETHASH_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_portmap.h linux-new/include/linux/netfilter_ipv4/ip_set_portmap.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_portmap.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_portmap.h    2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_portmap.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_portmap.h       2007-12-15 05:20:07.888289773 +0100
 @@ -0,0 +1,25 @@
 +#ifndef __IP_SET_PORTMAP_H
 +#define __IP_SET_PORTMAP_H
@@ -1020,9 +1030,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_portmap.h linux-new/inc
 +};
 +
 +#endif /* __IP_SET_PORTMAP_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_prime.h linux-new/include/linux/netfilter_ipv4/ip_set_prime.h
---- linux-old/include/linux/netfilter_ipv4/ip_set_prime.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ip_set_prime.h      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_prime.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_prime.h 2007-12-15 05:20:07.888289773 +0100
 @@ -0,0 +1,34 @@
 +#ifndef __IP_SET_PRIME_H
 +#define __IP_SET_PRIME_H
@@ -1058,9 +1069,10 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ip_set_prime.h linux-new/inclu
 +}
 +
 +#endif /* __IP_SET_PRIME_H */
-diff -Naur linux-old/include/linux/netfilter_ipv4/ipt_set.h linux-new/include/linux/netfilter_ipv4/ipt_set.h
---- linux-old/include/linux/netfilter_ipv4/ipt_set.h   1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/include/linux/netfilter_ipv4/ipt_set.h   2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_set.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_set.h      2007-12-15 05:20:07.888289773 +0100
 @@ -0,0 +1,21 @@
 +#ifndef _IPT_SET_H
 +#define _IPT_SET_H
@@ -1083,10 +1095,11 @@ diff -Naur linux-old/include/linux/netfilter_ipv4/ipt_set.h linux-new/include/li
 +};
 +
 +#endif /*_IPT_SET_H*/
-diff -Naur linux-old/net/ipv4/netfilter/Config.in linux-new/net/ipv4/netfilter/Config.in
---- linux-old/net/ipv4/netfilter/Config.in     2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/net/ipv4/netfilter/Config.in     2005-08-10 22:13:01.000000000 +0200
-@@ -21,6 +21,20 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:07.892290000 +0100
+@@ -22,6 +22,20 @@
  if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
  # The simple matches.
    dep_tristate '  limit match support' CONFIG_IP_NF_MATCH_LIMIT $CONFIG_IP_NF_IPTABLES
@@ -1107,9 +1120,10 @@ diff -Naur linux-old/net/ipv4/netfilter/Config.in linux-new/net/ipv4/netfilter/C
    dep_tristate '  MAC address match support' CONFIG_IP_NF_MATCH_MAC $CONFIG_IP_NF_IPTABLES
    dep_tristate '  Packet type match support' CONFIG_IP_NF_MATCH_PKTTYPE $CONFIG_IP_NF_IPTABLES
    dep_tristate '  netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
-diff -Naur linux-old/net/ipv4/netfilter/ip_set.c linux-new/net/ipv4/netfilter/ip_set.c
---- linux-old/net/ipv4/netfilter/ip_set.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set.c      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set.c 2007-12-15 05:20:07.892290000 +0100
 @@ -0,0 +1,2002 @@
 +/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
 + *                         Patrick Schaaf <bof@bof.de>
@@ -3113,9 +3127,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set.c linux-new/net/ipv4/netfilter/ip
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_iphash.c linux-new/net/ipv4/netfilter/ip_set_iphash.c
---- linux-old/net/ipv4/netfilter/ip_set_iphash.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_iphash.c       2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_iphash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_iphash.c  2007-12-15 05:20:07.896290225 +0100
 @@ -0,0 +1,379 @@
 +/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
 + *
@@ -3496,9 +3511,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_iphash.c linux-new/net/ipv4/netfi
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_ipmap.c linux-new/net/ipv4/netfilter/ip_set_ipmap.c
---- linux-old/net/ipv4/netfilter/ip_set_ipmap.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_ipmap.c        2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_ipmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_ipmap.c   2007-12-15 05:20:07.896290225 +0100
 @@ -0,0 +1,314 @@
 +/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
 + *                         Patrick Schaaf <bof@bof.de>
@@ -3814,9 +3830,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_ipmap.c linux-new/net/ipv4/netfil
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_iptree.c linux-new/net/ipv4/netfilter/ip_set_iptree.c
---- linux-old/net/ipv4/netfilter/ip_set_iptree.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_iptree.c       2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_iptree.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_iptree.c  2007-12-15 05:20:07.896290225 +0100
 @@ -0,0 +1,511 @@
 +/* Copyright (C) 2005 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
 + *
@@ -4329,9 +4346,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_iptree.c linux-new/net/ipv4/netfi
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_macipmap.c linux-new/net/ipv4/netfilter/ip_set_macipmap.c
---- linux-old/net/ipv4/netfilter/ip_set_macipmap.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_macipmap.c     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_macipmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_macipmap.c        2007-12-15 05:20:07.896290225 +0100
 @@ -0,0 +1,340 @@
 +/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
 + *                         Patrick Schaaf <bof@bof.de>
@@ -4673,9 +4691,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_macipmap.c linux-new/net/ipv4/net
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_nethash.c linux-new/net/ipv4/netfilter/ip_set_nethash.c
---- linux-old/net/ipv4/netfilter/ip_set_nethash.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_nethash.c      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_nethash.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_nethash.c 2007-12-15 05:20:07.900290454 +0100
 @@ -0,0 +1,450 @@
 +/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
 + *
@@ -5127,9 +5146,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_nethash.c linux-new/net/ipv4/netf
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ip_set_portmap.c linux-new/net/ipv4/netfilter/ip_set_portmap.c
---- linux-old/net/ipv4/netfilter/ip_set_portmap.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ip_set_portmap.c      2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_set_portmap.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_set_portmap.c 2007-12-15 05:20:07.900290454 +0100
 @@ -0,0 +1,321 @@
 +/* Copyright (C) 2003-2004 Jozsef Kadlecsik <kadlec@blackhole.kfki.hu>
 + *
@@ -5452,9 +5472,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ip_set_portmap.c linux-new/net/ipv4/netf
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ipt_set.c linux-new/net/ipv4/netfilter/ipt_set.c
---- linux-old/net/ipv4/netfilter/ipt_set.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ipt_set.c     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_set.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_set.c        2007-12-15 05:20:07.900290454 +0100
 @@ -0,0 +1,114 @@
 +/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
 + *                         Patrick Schaaf <bof@bof.de>
@@ -5570,9 +5591,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ipt_set.c linux-new/net/ipv4/netfilter/i
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/ipt_SET.c linux-new/net/ipv4/netfilter/ipt_SET.c
---- linux-old/net/ipv4/netfilter/ipt_SET.c     1970-01-01 01:00:00.000000000 +0100
-+++ linux-new/net/ipv4/netfilter/ipt_SET.c     2005-08-10 22:13:00.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_SET.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_SET.c        2007-12-15 05:20:07.900290454 +0100
 @@ -0,0 +1,127 @@
 +/* Copyright (C) 2000-2002 Joakim Axelsson <gozem@linux.nu>
 + *                         Patrick Schaaf <bof@bof.de>
@@ -5701,9 +5723,10 @@ diff -Naur linux-old/net/ipv4/netfilter/ipt_SET.c linux-new/net/ipv4/netfilter/i
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naur linux-old/net/ipv4/netfilter/Makefile linux-new/net/ipv4/netfilter/Makefile
---- linux-old/net/ipv4/netfilter/Makefile      2005-07-23 23:34:46.000000000 +0200
-+++ linux-new/net/ipv4/netfilter/Makefile      2005-08-10 22:13:01.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:07.900290454 +0100
 @@ -75,6 +75,18 @@
  obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
  obj-$(CONFIG_IP_NF_MATCH_LIMIT) += ipt_limit.o
index ed5353f7a9f743bd3f9fdd728b8fbf409b49f292..1f13da2a2f5190361db4f5cb417d3db0d92492b1 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_string.h linux.dev/include/linux/netfilter_ipv4/ipt_string.h
---- linux.old/include/linux/netfilter_ipv4/ipt_string.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_string.h        2006-11-13 23:33:31.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_string.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_string.h   2007-12-15 05:20:08.388318268 +0100
 @@ -0,0 +1,18 @@
 +#ifndef _IPT_STRING_H
 +#define _IPT_STRING_H
@@ -20,10 +21,11 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_string.h linux.dev/include/
 +};
 +
 +#endif /*_IPT_STRING_H*/
-diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Config.in
---- linux.old/net/ipv4/netfilter/Config.in     2006-11-13 23:43:38.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Config.in     2006-11-13 23:33:31.000000000 +0100
-@@ -52,6 +52,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:07.892290000 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:08.396318720 +0100
+@@ -63,6 +63,7 @@
    fi
    if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
      dep_tristate '  Unclean match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_UNCLEAN $CONFIG_IP_NF_IPTABLES
@@ -31,9 +33,10 @@ diff -urN linux.old/net/ipv4/netfilter/Config.in linux.dev/net/ipv4/netfilter/Co
      dep_tristate '  Owner match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_OWNER $CONFIG_IP_NF_IPTABLES
      dep_tristate '  Layer 7 match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_LAYER7 $CONFIG_IP_NF_CONNTRACK
      dep_mbool '  Layer 7 debugging output (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_LAYER7_DEBUG $CONFIG_IP_NF_MATCH_LAYER7
-diff -urN linux.old/net/ipv4/netfilter/ipt_string.c linux.dev/net/ipv4/netfilter/ipt_string.c
---- linux.old/net/ipv4/netfilter/ipt_string.c  1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/ipt_string.c  2006-11-14 02:26:03.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_string.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_string.c     2007-12-15 05:20:08.400318949 +0100
 @@ -0,0 +1,99 @@
 +/* String matching match for iptables
 + * 
@@ -134,20 +137,22 @@ diff -urN linux.old/net/ipv4/netfilter/ipt_string.c linux.dev/net/ipv4/netfilter
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux.old/net/ipv4/netfilter/Makefile linux.dev/net/ipv4/netfilter/Makefile
---- linux.old/net/ipv4/netfilter/Makefile      2006-11-13 23:43:38.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/Makefile      2006-11-13 23:33:31.000000000 +0100
-@@ -107,6 +107,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:07.900290454 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.400318949 +0100
+@@ -108,6 +108,7 @@
  obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o
  obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
  obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
 +obj-$(CONFIG_IP_NF_MATCH_STRING) += ipt_string.o
  obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
  obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_layer7.o
- obj-$(CONFIG_IP_NF_MATCH_CONNBYTES) += ipt_connbytes.o
-diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.c linux.dev/net/ipv4/netfilter/textsearch/textsearch.c
---- linux.old/net/ipv4/netfilter/textsearch/textsearch.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/textsearch.c       2006-11-14 02:31:47.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.c  2007-12-15 05:20:08.400318949 +0100
 @@ -0,0 +1,305 @@
 +/*
 + * lib/textsearch.c   Generic text search interface
@@ -454,9 +459,10 @@ diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.c linux.dev/net/ipv
 +      kfree(conf);
 +}
 +
-diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.h linux.dev/net/ipv4/netfilter/textsearch/textsearch.h
---- linux.old/net/ipv4/netfilter/textsearch/textsearch.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/textsearch.h       2006-11-14 02:11:59.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/textsearch.h  2007-12-15 05:20:08.400318949 +0100
 @@ -0,0 +1,182 @@
 +#ifndef __LINUX_TEXTSEARCH_H
 +#define __LINUX_TEXTSEARCH_H
@@ -640,9 +646,10 @@ diff -urN linux.old/net/ipv4/netfilter/textsearch/textsearch.h linux.dev/net/ipv
 +#endif /* __KERNEL__ */
 +
 +#endif
-diff -urN linux.old/net/ipv4/netfilter/textsearch/ts_bm.c linux.dev/net/ipv4/netfilter/textsearch/ts_bm.c
---- linux.old/net/ipv4/netfilter/textsearch/ts_bm.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/ts_bm.c    2006-11-14 02:22:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_bm.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_bm.c       2007-12-15 05:20:08.400318949 +0100
 @@ -0,0 +1,190 @@
 +/*
 + * lib/ts_bm.c                Boyer-Moore text search implementation
@@ -834,9 +841,10 @@ diff -urN linux.old/net/ipv4/netfilter/textsearch/ts_bm.c linux.dev/net/ipv4/net
 +{
 +      textsearch_unregister(&bm_ops);
 +}
-diff -urN linux.old/net/ipv4/netfilter/textsearch/ts_kmp.c linux.dev/net/ipv4/netfilter/textsearch/ts_kmp.c
---- linux.old/net/ipv4/netfilter/textsearch/ts_kmp.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux.dev/net/ipv4/netfilter/textsearch/ts_kmp.c   2006-11-14 02:22:04.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_kmp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/textsearch/ts_kmp.c      2007-12-15 05:20:08.404319178 +0100
 @@ -0,0 +1,141 @@
 +/*
 + * lib/ts_kmp.c               Knuth-Morris-Pratt text search implementation
index 95bc10f2bcd6247ff9dccc76c9134a600b1b45b2..f903bc9ea2b482d550978c86108ce5e7a0e05e4b 100644 (file)
@@ -1,5 +1,7 @@
---- linux/net/ipv4/netfilter/Config.in.org     2005-11-13 15:53:59.457222512 +0100
-+++ linux/net/ipv4/netfilter/Config.in 2005-11-13 15:56:25.241060000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:08.396318720 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:08.692335591 +0100
 @@ -11,6 +11,8 @@
    dep_tristate '  Amanda protocol support' CONFIG_IP_NF_AMANDA $CONFIG_IP_NF_CONNTRACK
    dep_tristate '  TFTP protocol support' CONFIG_IP_NF_TFTP $CONFIG_IP_NF_CONNTRACK
    dep_tristate '  GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
    dep_tristate '   PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
  fi
---- linux/net/ipv4/netfilter/Makefile.org      2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/Makefile  2005-11-13 15:56:38.663019552 +0100
-@@ -94,6 +94,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:08.400318949 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:08.696335817 +0100
+@@ -106,6 +106,7 @@
  obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl.o
  obj-$(CONFIG_IP_NF_MATCH_STATE) += ipt_state.o
  obj-$(CONFIG_IP_NF_MATCH_CONNMARK) += ipt_connmark.o
 +obj-$(CONFIG_IP_NF_MATCH_CONNBYTES) += ipt_connbytes.o
  obj-$(CONFIG_IP_NF_MATCH_CONNTRACK) += ipt_conntrack.o
  obj-$(CONFIG_IP_NF_MATCH_UNCLEAN) += ipt_unclean.o
- obj-$(CONFIG_IP_NF_MATCH_TCPMSS) += ipt_tcpmss.o
---- linux/net/ipv4/netfilter/ip_conntrack_amanda.c.org 2004-02-18 14:36:32.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_amanda.c     2005-11-13 15:40:00.000000000 +0100
+ obj-$(CONFIG_IP_NF_MATCH_STRING) += ipt_string.o
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_amanda.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_amanda.c       2007-12-15 05:19:37.650566622 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_amanda.c    2007-12-15 05:20:08.700336046 +0100
 @@ -75,7 +75,7 @@
  
        /* increase the UDP timeout of the master connection as replies from
        
        /* Search for "CONNECT " string */
        do {
---- linux/net/ipv4/netfilter/ip_conntrack_proto_tcp.c.org      2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_tcp.c  2005-11-13 15:45:41.045992536 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_tcp.c    2007-12-15 05:19:37.658567077 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_tcp.c 2007-12-15 05:20:08.700336046 +0100
 @@ -211,7 +211,7 @@
                        set_bit(IPS_ASSURED_BIT, &conntrack->status);
  
        }
  
        return NF_ACCEPT;
---- linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c.org      2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c  2005-11-13 15:47:38.348159896 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_udp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_udp.c    2007-12-15 05:19:37.666567533 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_udp.c 2007-12-15 05:20:08.700336046 +0100
 @@ -47,16 +47,16 @@
  /* Returns verdict for packet, and may modify conntracktype */
  static int udp_packet(struct ip_conntrack *conntrack,
  
        return NF_ACCEPT;
  }
---- linux/net/ipv4/netfilter/ip_conntrack_standalone.c.org     2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_standalone.c 2005-11-13 15:51:07.608347512 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_standalone.c   2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_standalone.c        2007-12-15 05:20:08.700336046 +0100
 @@ -79,6 +79,18 @@
        return len;
  }
  EXPORT_SYMBOL(ip_ct_find_proto);
  EXPORT_SYMBOL(__ip_ct_find_proto);
  EXPORT_SYMBOL(ip_ct_find_helper);
---- linux/net/ipv4/netfilter/ip_conntrack_proto_generic.c.org  2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_generic.c      2005-11-13 15:44:20.734201784 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_generic.c        2007-12-15 05:19:37.682568446 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_generic.c     2007-12-15 05:20:08.700336046 +0100
 @@ -41,9 +41,9 @@
  /* Returns verdict for packet, or -1 for invalid. */
  static int established(struct ip_conntrack *conntrack,
        return NF_ACCEPT;
  }
  
---- linux/net/ipv4/netfilter/ip_conntrack_proto_icmp.c.org     2003-11-28 19:26:21.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_proto_icmp.c 2005-11-13 15:44:50.733641176 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_icmp.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_icmp.c   2007-12-15 05:19:37.686568672 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_icmp.c        2007-12-15 05:20:08.704336275 +0100
 @@ -82,7 +82,7 @@
                        ct->timeout.function((unsigned long)ct);
        } else {
        }
  
        return NF_ACCEPT;
---- linux/net/ipv4/netfilter/ip_conntrack_core.c.org   2005-11-12 16:48:38.000000000 +0100
-+++ linux/net/ipv4/netfilter/ip_conntrack_core.c       2005-11-13 15:43:23.882844504 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_core.c 2007-12-15 05:20:07.568271536 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_core.c      2007-12-15 05:20:08.704336275 +0100
 @@ -1196,22 +1196,40 @@
  
        MOD_DEC_USE_COUNT;
        }
        WRITE_UNLOCK(&ip_conntrack_lock);
  }
---- linux/include/linux/netfilter_ipv4/ip_conntrack.h.org      2005-11-12 16:48:38.000000000 +0100
-+++ linux/include/linux/netfilter_ipv4/ip_conntrack.h  2005-11-13 15:39:04.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:07.552270623 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:08.704336275 +0100
 @@ -164,6 +164,12 @@
        union ip_conntrack_expect_help help;
  };
  
  /* These are for NAT.  Icky. */
  /* Call me when a conntrack is destroyed. */
---- linux/net/ipv4/netfilter/ipt_connbytes.c.org       1970-01-01 01:00:00.000000000 +0100
-+++ linux/net/ipv4/netfilter/ipt_connbytes.c   2005-11-13 16:22:02.021433872 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_connbytes.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_connbytes.c  2007-12-15 05:20:08.704336275 +0100
 @@ -0,0 +1,163 @@
 +/* Kernel module to match connection tracking byte counter.
 + * GPL (C) 2002 Martin Devera (devik@cdi.cz).
 +module_init(init);
 +module_exit(fini);
 +MODULE_LICENSE("GPL");
---- linux/include/linux/netfilter_ipv4/ipt_connbytes.h.org     1970-01-01 01:00:00.000000000 +0100
-+++ linux/include/linux/netfilter_ipv4/ipt_connbytes.h 2005-11-13 16:11:24.567341624 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connbytes.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_connbytes.h        2007-12-15 05:20:08.708336505 +0100
 @@ -0,0 +1,25 @@
 +#ifndef _IPT_CONNBYTES_H
 +#define _IPT_CONNBYTES_H
 +};
 +
 +#endif
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_proto_gre.c   2006-02-04 19:16:25.000000000 +0100
-+++ /home/florian//openwrt/trunk/openwrt/build_mipsel/linux/net/ipv4/netfilter/ip_conntrack_proto_gre.c        2006-02-04 18:19:08.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_conntrack_proto_gre.c    2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_proto_gre.c 2007-12-15 05:20:08.708336505 +0100
 @@ -237,16 +237,16 @@
  /* Returns verdict for packet, and may modify conntrack */
  static int gre_packet(struct ip_conntrack *ct,
index 6c16c29f0c1db400aecf34d02a2469a6e3ca99a0..0b5363a442e4129a58320b5d87762c60f6c47f62 100644 (file)
@@ -1,6 +1,7 @@
-diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documentation/Configure.help
---- linux-2.4.30-old/Documentation/Configure.help      2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/Documentation/Configure.help      2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:07.880289314 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:09.280369103 +0100
 @@ -2979,6 +2979,14 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
@@ -31,9 +32,10 @@ diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documen
  Multiple port match support
  CONFIG_IP6_NF_MATCH_MULTIPORT
    Multiport matching allows you to match TCP or UDP packets based on
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_condition.h linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_condition.h
---- linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_condition.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_condition.h      2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_condition.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_condition.h        2007-12-15 05:20:09.296370013 +0100
 @@ -0,0 +1,11 @@
 +#ifndef __IPT_CONDITION_MATCH__
 +#define __IPT_CONDITION_MATCH__
@@ -46,9 +48,10 @@ diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_condition.h linux-2.
 +};
 +
 +#endif
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv6/ip6t_condition.h linux-2.4.30-new/include/linux/netfilter_ipv6/ip6t_condition.h
---- linux-2.4.30-old/include/linux/netfilter_ipv6/ip6t_condition.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv6/ip6t_condition.h     2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_condition.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_condition.h       2007-12-15 05:20:09.300370243 +0100
 @@ -0,0 +1,11 @@
 +#ifndef __IP6T_CONDITION_MATCH__
 +#define __IP6T_CONDITION_MATCH__
@@ -61,9 +64,10 @@ diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv6/ip6t_condition.h linux-2
 +};
 +
 +#endif
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv4/netfilter/Config.in
---- linux-2.4.30-old/net/ipv4/netfilter/Config.in      2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Config.in      2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:08.692335591 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:09.300370243 +0100
 @@ -43,6 +43,7 @@
    dep_tristate '  netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
    dep_tristate '  Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
@@ -72,9 +76,10 @@ diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv
    dep_tristate '  recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
    dep_tristate '  ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
    dep_tristate '  peer to peer traffic match support' CONFIG_IP_NF_MATCH_IPP2P $CONFIG_IP_NF_IPTABLES
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4/netfilter/Makefile
---- linux-2.4.30-old/net/ipv4/netfilter/Makefile       2005-11-13 21:52:27.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Makefile       2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:08.696335817 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.300370243 +0100
 @@ -94,6 +94,7 @@
  obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
  obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
@@ -83,9 +88,10 @@ diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4
  
  obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
  
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/ipt_condition.c linux-2.4.30-new/net/ipv4/netfilter/ipt_condition.c
---- linux-2.4.30-old/net/ipv4/netfilter/ipt_condition.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/ipt_condition.c        2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_condition.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_condition.c  2007-12-15 05:20:09.300370243 +0100
 @@ -0,0 +1,256 @@
 +/*-------------------------------------------*\
 +|          Netfilter Condition Module         |
@@ -343,9 +349,10 @@ diff -ruN linux-2.4.30-old/net/ipv4/netfilter/ipt_condition.c linux-2.4.30-new/n
 +
 +module_init(init);
 +module_exit(fini);
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Config.in linux-2.4.30-new/net/ipv6/netfilter/Config.in
---- linux-2.4.30-old/net/ipv6/netfilter/Config.in      2003-06-13 16:51:39.000000000 +0200
-+++ linux-2.4.30-new/net/ipv6/netfilter/Config.in      2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in   2007-12-15 05:19:37.590563202 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in        2007-12-15 05:20:09.300370243 +0100
 @@ -17,6 +17,7 @@
  if [ "$CONFIG_IP6_NF_IPTABLES" != "n" ]; then
  # The simple matches.
@@ -354,9 +361,10 @@ diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Config.in linux-2.4.30-new/net/ipv
    dep_tristate '  MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES
    if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
      dep_tristate '  Routing header match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_RT $CONFIG_IP6_NF_IPTABLES
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Makefile linux-2.4.30-new/net/ipv6/netfilter/Makefile
---- linux-2.4.30-old/net/ipv6/netfilter/Makefile       2003-06-13 16:51:39.000000000 +0200
-+++ linux-2.4.30-new/net/ipv6/netfilter/Makefile       2005-11-13 22:20:15.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile    2007-12-15 05:19:37.598563658 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:09.304370470 +0100
 @@ -14,6 +14,7 @@
  # Link order matters here.
  obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o
@@ -365,9 +373,10 @@ diff -ruN linux-2.4.30-old/net/ipv6/netfilter/Makefile linux-2.4.30-new/net/ipv6
  obj-$(CONFIG_IP6_NF_MATCH_MARK) += ip6t_mark.o
  obj-$(CONFIG_IP6_NF_MATCH_LENGTH) += ip6t_length.o
  obj-$(CONFIG_IP6_NF_MATCH_MAC) += ip6t_mac.o
-diff -ruN linux-2.4.30-old/net/ipv6/netfilter/ip6t_condition.c linux-2.4.30-new/net/ipv6/netfilter/ip6t_condition.c
---- linux-2.4.30-old/net/ipv6/netfilter/ip6t_condition.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv6/netfilter/ip6t_condition.c       2005-11-13 22:20:14.000000000 +0100
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_condition.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_condition.c 2007-12-15 05:20:09.304370470 +0100
 @@ -0,0 +1,254 @@
 +/*-------------------------------------------*\
 +|    Netfilter Condition Module for IPv6      |
index a0a019c171f51d0ebb5c5b7ef20b99eaeef212e3..65c32c5929d4eef64f012288871a14251a5f175e 100644 (file)
@@ -1,6 +1,7 @@
-diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documentation/Configure.help
---- linux-2.4.30-old/Documentation/Configure.help      2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/Documentation/Configure.help      2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:09.280369103 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:09.632389161 +0100
 @@ -2888,6 +2888,13 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
@@ -15,9 +16,10 @@ diff -ruN linux-2.4.30-old/Documentation/Configure.help linux-2.4.30-new/Documen
  skb->pkt_type packet match support
  CONFIG_IP_NF_MATCH_PKTTYPE
    This patch allows you to match packet in accrodance
-diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_quota.h linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_quota.h
---- linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_quota.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/include/linux/netfilter_ipv4/ipt_quota.h  2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_quota.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_quota.h    2007-12-15 05:20:09.636389390 +0100
 @@ -0,0 +1,12 @@
 +#ifndef _IPT_QUOTA_H
 +#define _IPT_QUOTA_H
@@ -31,9 +33,10 @@ diff -ruN linux-2.4.30-old/include/linux/netfilter_ipv4/ipt_quota.h linux-2.4.30
 +};
 +
 +#endif /*_IPT_QUOTA_H*/
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv4/netfilter/Config.in
---- linux-2.4.30-old/net/ipv4/netfilter/Config.in      2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Config.in      2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:09.644389846 +0100
 @@ -24,6 +24,7 @@
  if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
  # The simple matches.
@@ -42,9 +45,10 @@ diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Config.in linux-2.4.30-new/net/ipv
  
    dep_tristate '  IP set support' CONFIG_IP_NF_SET $CONFIG_IP_NF_IPTABLES
    if [ "$CONFIG_IP_NF_SET" != "n" ]; then
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4/netfilter/Makefile
---- linux-2.4.30-old/net/ipv4/netfilter/Makefile       2005-11-13 22:30:42.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/Makefile       2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.644389846 +0100
 @@ -74,6 +74,7 @@
  # matches
  obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
@@ -53,9 +57,10 @@ diff -ruN linux-2.4.30-old/net/ipv4/netfilter/Makefile linux-2.4.30-new/net/ipv4
  obj-$(CONFIG_IP_NF_MATCH_MARK) += ipt_mark.o
  obj-$(CONFIG_IP_NF_MATCH_SET) += ipt_set.o
  obj-$(CONFIG_IP_NF_TARGET_SET) += ipt_SET.o
-diff -ruN linux-2.4.30-old/net/ipv4/netfilter/ipt_quota.c linux-2.4.30-new/net/ipv4/netfilter/ipt_quota.c
---- linux-2.4.30-old/net/ipv4/netfilter/ipt_quota.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.30-new/net/ipv4/netfilter/ipt_quota.c    2005-11-13 22:31:17.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_quota.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_quota.c      2007-12-15 05:20:09.644389846 +0100
 @@ -0,0 +1,88 @@
 +/* 
 + * netfilter module to enforce network quotas
index 983d4fef3a4ae59f1d9a327b48a5208212869a2d..553d1151d026e8fce8f8e9b8a58896edd79afed0 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in  2006-03-01 00:49:36.652505800 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in      2006-03-01 00:50:18.692114808 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:09.644389846 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:09.916405347 +0100
 @@ -15,6 +15,7 @@
    dep_tristate '  Connection byte counter support' CONFIG_IP_NF_MATCH_CONNBYTES $CONFIG_IP_NF_CT_ACCT $CONFIG_IP_NF_CONNTRACK $CONFIG_IP_NF_IPTABLES
    dep_tristate '  GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
@@ -9,7 +10,7 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
  fi
  
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -111,6 +112,13 @@
+@@ -110,6 +111,13 @@
            define_tristate CONFIG_IP_NF_NAT_AMANDA $CONFIG_IP_NF_NAT
          fi
        fi
@@ -23,9 +24,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
        if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
          dep_tristate '    Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
        fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile   2006-03-01 00:49:36.654505496 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile       2006-03-01 00:50:18.693114656 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:09.644389846 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:09.916405347 +0100
 @@ -53,6 +53,10 @@
  ifdef CONFIG_IP_NF_NAT_PPTP
        export-objs += ip_conntrack_pptp.o
@@ -45,9 +47,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/net
  
  # generic IP tables 
  obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_h323.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_h323.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_h323.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_h323.c    2006-03-01 00:50:18.694114504 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_h323.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_h323.c      2007-12-15 05:20:09.920405577 +0100
 @@ -0,0 +1,302 @@
 +/* 
 + * H.323 'brute force' extension for H.323 connection tracking. 
@@ -351,9 +354,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_h323.c linux-2.4.32.new/n
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_h323.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_h323.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_h323.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_h323.c  2006-03-01 00:50:18.698113896 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_h323.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_h323.c    2007-12-15 05:20:09.920405577 +0100
 @@ -0,0 +1,403 @@
 +/* 
 + * H.323 'brute force' extension for NAT alteration. 
@@ -758,9 +762,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_h323.c linux-2.4.32.new/net/ipv
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h   2006-03-01 00:49:36.474532856 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h       2006-03-01 00:50:18.699113744 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:08.704336275 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:09.920405577 +0100
 @@ -71,6 +71,7 @@
  #include <linux/netfilter_ipv4/ip_conntrack_ftp.h>
  #include <linux/netfilter_ipv4/ip_conntrack_irc.h>
@@ -785,9 +790,10 @@ diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.
  };
  
  #ifdef CONFIG_IP_NF_NAT_NEEDED
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_h323.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_h323.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_h323.h  2006-03-01 00:50:18.700113592 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_h323.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_h323.h    2007-12-15 05:20:09.920405577 +0100
 @@ -0,0 +1,30 @@
 +#ifndef _IP_CONNTRACK_H323_H
 +#define _IP_CONNTRACK_H323_H
index 6ae3e7b0aa589379d74a6a45059a516efb99debf..6c0184a55caab5a105f3e2a70f9a5f838dc6d4f3 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in  2006-03-01 00:53:57.884792456 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in      2006-03-01 00:55:14.462150928 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:09.916405347 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:10.196421304 +0100
 @@ -16,6 +16,7 @@
    dep_tristate '  GRE protocol support' CONFIG_IP_NF_CT_PROTO_GRE $CONFIG_IP_NF_CONNTRACK
    dep_tristate '   PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
@@ -9,7 +10,7 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
  fi
  
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -119,6 +120,13 @@
+@@ -118,6 +119,13 @@
           define_tristate CONFIG_IP_NF_NAT_H323 $CONFIG_IP_NF_NAT
         fi
        fi
@@ -23,9 +24,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
        if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
          dep_tristate '    Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
        fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile   2006-03-01 00:53:57.886792152 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile       2006-03-01 00:55:14.463150776 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:09.916405347 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.196421304 +0100
 @@ -57,6 +57,11 @@
  ifdef CONFIG_IP_NF_NAT_H323
         export-objs += ip_conntrack_h323.o
@@ -46,9 +48,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/net
  
  # generic IP tables 
  obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_rtsp.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_rtsp.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_rtsp.c        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_rtsp.c    2006-03-01 00:55:14.465150472 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_rtsp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_rtsp.c      2007-12-15 05:20:10.200421534 +0100
 @@ -0,0 +1,507 @@
 +/*
 + * RTSP extension for IP connection tracking
@@ -557,9 +560,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_rtsp.c linux-2.4.32.new/n
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_rtsp.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_rtsp.c  2006-03-01 00:55:14.467150168 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_rtsp.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_rtsp.c    2007-12-15 05:20:10.200421534 +0100
 @@ -0,0 +1,621 @@
 +/*
 + * RTSP extension for TCP NAT alteration
@@ -1182,8 +1186,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c linux-2.4.32.new/net/ipv
 +
 +module_init(init);
 +module_exit(fini);
---- linux-2.4.32/arch/mips/kernel/mips_ksyms.c 2006-03-01 00:49:34.142887320 +0100
-+++ linux-2.4.32.new/arch/mips/kernel/mips_ksyms.c     2006-03-01 00:55:14.469149864 +0100
+Index: linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c
+===================================================================
+--- linux-2.4.35.4.orig/arch/mips/kernel/mips_ksyms.c  2007-12-15 05:19:54.695537960 +0100
++++ linux-2.4.35.4/arch/mips/kernel/mips_ksyms.c       2007-12-15 05:20:10.200421534 +0100
 @@ -52,6 +52,7 @@
  /*
   * String functions
@@ -1192,9 +1198,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_rtsp.c linux-2.4.32.new/net/ipv
  EXPORT_SYMBOL_NOVERS(memcmp);
  EXPORT_SYMBOL_NOVERS(memset);
  EXPORT_SYMBOL_NOVERS(memcpy);
-diff -urN linux-2.4.32/include/linux/netfilter_helpers.h linux-2.4.32.new/include/linux/netfilter_helpers.h
---- linux-2.4.32/include/linux/netfilter_helpers.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_helpers.h 2006-03-01 00:55:14.470149712 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_helpers.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_helpers.h   2007-12-15 05:20:10.200421534 +0100
 @@ -0,0 +1,133 @@
 +/*
 + * Helpers for netfiler modules.  This file provides implementations for basic
@@ -1329,9 +1336,10 @@ diff -urN linux-2.4.32/include/linux/netfilter_helpers.h linux-2.4.32.new/includ
 +#endif /* __KERNEL__ */
 +
 +#endif /* _NETFILTER_HELPERS_H */
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h  2006-03-01 00:55:14.472149408 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h    2007-12-15 05:20:10.200421534 +0100
 @@ -0,0 +1,68 @@
 +/*
 + * RTSP extension for IP connection tracking.
@@ -1401,9 +1409,10 @@ diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_rtsp.h linux-2.
 +#endif /* __KERNEL__ */
 +
 +#endif /* _IP_CONNTRACK_RTSP_H */
-diff -urN linux-2.4.32/include/linux/netfilter_mime.h linux-2.4.32.new/include/linux/netfilter_mime.h
---- linux-2.4.32/include/linux/netfilter_mime.h        1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_mime.h    2006-03-01 00:55:14.473149256 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_mime.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_mime.h      2007-12-15 05:20:10.204421761 +0100
 @@ -0,0 +1,90 @@
 +/*
 + * MIME functions for netfilter modules.  This file provides implementations
@@ -1495,8 +1504,10 @@ diff -urN linux-2.4.32/include/linux/netfilter_mime.h linux-2.4.32.new/include/l
 +#endif /* __KERNEL__ */
 +
 +#endif /* _NETFILTER_MIME_H */
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h   2006-03-01 00:53:57.889791696 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h       2006-03-01 01:06:32.178122440 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:09.920405577 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:10.204421761 +0100
 @@ -72,6 +72,7 @@
  #include <linux/netfilter_ipv4/ip_conntrack_irc.h>
  #include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
index 3871d5939527c3ed81477ca59d2fbf3e07af8fb9..e68e2a974a8c501a7adab557c687fde4006b274b 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/netfilter/Config.in
---- linux-2.4.32/net/ipv4/netfilter/Config.in  2006-03-01 01:12:48.268947944 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Config.in      2006-03-01 01:14:53.455916632 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:10.196421304 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:10.504438857 +0100
 @@ -17,6 +17,7 @@
    dep_tristate '   PPTP protocol support' CONFIG_IP_NF_PPTP $CONFIG_IP_NF_CT_PROTO_GRE
    dep_tristate '  H.323 (netmeeting) support' CONFIG_IP_NF_H323 $CONFIG_IP_NF_CONNTRACK
@@ -9,7 +10,7 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
  fi
  
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-@@ -127,6 +128,13 @@
+@@ -126,6 +127,13 @@
           define_tristate CONFIG_IP_NF_NAT_RTSP $CONFIG_IP_NF_NAT
         fi
        fi
@@ -23,9 +24,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Config.in linux-2.4.32.new/net/ipv4/ne
        if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
          dep_tristate '    Basic SNMP-ALG support (EXPERIMENTAL)' CONFIG_IP_NF_NAT_SNMP_BASIC $CONFIG_IP_NF_NAT
        fi
-diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/netfilter/Makefile
---- linux-2.4.32/net/ipv4/netfilter/Makefile   2006-03-01 01:12:48.270947640 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/Makefile       2006-03-01 01:15:25.263081208 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:10.196421304 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.508439083 +0100
 @@ -61,6 +61,10 @@
  ifdef CONFIG_IP_NF_NAT_RTSP
         export-objs += ip_conntrack_rtsp.o
@@ -45,9 +47,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/Makefile linux-2.4.32.new/net/ipv4/net
  
  # generic IP tables 
  obj-$(CONFIG_IP_NF_IPTABLES) += ip_tables.o
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_mms.c linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_mms.c
---- linux-2.4.32/net/ipv4/netfilter/ip_conntrack_mms.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_conntrack_mms.c     2006-03-01 01:13:32.991149136 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_mms.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_conntrack_mms.c       2007-12-15 05:20:10.516439541 +0100
 @@ -0,0 +1,292 @@
 +/* MMS extension for IP connection tracking
 + * (C) 2002 by Filip Sneppe <filip.sneppe@cronos.be>
@@ -341,9 +344,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_conntrack_mms.c linux-2.4.32.new/ne
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_mms.c linux-2.4.32.new/net/ipv4/netfilter/ip_nat_mms.c
---- linux-2.4.32/net/ipv4/netfilter/ip_nat_mms.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/net/ipv4/netfilter/ip_nat_mms.c   2006-03-01 01:13:32.992148984 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_mms.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_mms.c     2007-12-15 05:20:10.516439541 +0100
 @@ -0,0 +1,330 @@
 +/* MMS extension for TCP NAT alteration.
 + * (C) 2002 by Filip Sneppe <filip.sneppe@cronos.be>
@@ -675,9 +679,10 @@ diff -urN linux-2.4.32/net/ipv4/netfilter/ip_nat_mms.c linux-2.4.32.new/net/ipv4
 +
 +module_init(init);
 +module_exit(fini);
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h   2006-03-01 01:12:47.910002512 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack.h       2006-03-01 01:16:16.710260048 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_conntrack.h    2007-12-15 05:20:10.204421761 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack.h 2007-12-15 05:20:10.516439541 +0100
 @@ -73,6 +73,7 @@
  #include <linux/netfilter_ipv4/ip_conntrack_pptp.h>
  #include <linux/netfilter_ipv4/ip_conntrack_h323.h>
@@ -702,9 +707,10 @@ diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack.h linux-2.4.32.
  };
  
  #ifdef CONFIG_IP_NF_NAT_NEEDED
-diff -urN linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_mms.h
---- linux-2.4.32/include/linux/netfilter_ipv4/ip_conntrack_mms.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32.new/include/linux/netfilter_ipv4/ip_conntrack_mms.h   2006-03-01 01:13:32.993148832 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_mms.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_conntrack_mms.h     2007-12-15 05:20:10.516439541 +0100
 @@ -0,0 +1,31 @@
 +#ifndef _IP_CONNTRACK_MMS_H
 +#define _IP_CONNTRACK_MMS_H
index e2e45af8820a5604e89c27ecb462e750d77f2f8d..4df115017c351b055429e1a6ba42d67c27bcb421 100644 (file)
@@ -1,7 +1,8 @@
-diff -aurN linux-2.4.28-orig/Documentation/Configure.help linux-2.4.28/Documentation/Configure.help
---- linux-2.4.28-orig/Documentation/Configure.help     2004-11-17 11:54:20.000000000 +0000
-+++ linux-2.4.28/Documentation/Configure.help  2004-12-14 11:43:42.000000000 +0000
-@@ -3147,6 +3147,22 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:09.632389161 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:10.792455269 +0100
+@@ -3160,6 +3160,22 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
  
@@ -24,7 +25,7 @@ diff -aurN linux-2.4.28-orig/Documentation/Configure.help linux-2.4.28/Documenta
  MARK target support
  CONFIG_IP_NF_TARGET_MARK
    This option adds a `MARK' target, which allows you to create rules
-@@ -9799,6 +9815,20 @@
+@@ -9919,6 +9935,20 @@
    say M here and read <file:Documentation/modules.txt>.  The module
    will be called bonding.o.
  
@@ -45,9 +46,10 @@ diff -aurN linux-2.4.28-orig/Documentation/Configure.help linux-2.4.28/Documenta
  SLIP (serial line) support
  CONFIG_SLIP
    Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to
-diff -aurN linux-2.4.28-orig/drivers/net/Config.in linux-2.4.28/drivers/net/Config.in
---- linux-2.4.28-orig/drivers/net/Config.in    2004-08-07 23:26:04.000000000 +0000
-+++ linux-2.4.28/drivers/net/Config.in 2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/drivers/net/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Config.in  2007-12-15 05:19:54.067502171 +0100
++++ linux-2.4.35.4/drivers/net/Config.in       2007-12-15 05:20:10.796455498 +0100
 @@ -7,6 +7,11 @@
  tristate 'Dummy net driver support' CONFIG_DUMMY
  tristate 'Bonding driver support' CONFIG_BONDING
@@ -58,12 +60,13 @@ diff -aurN linux-2.4.28-orig/drivers/net/Config.in linux-2.4.28/drivers/net/Conf
 +  comment 'IMQ needs CONFIG_NETFILTER enabled'
 +fi
  tristate 'Universal TUN/TAP device driver support' CONFIG_TUN
+ bool 'Allow Net Devices to contribute to /dev/random' CONFIG_NET_RANDOM
  if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-    tristate 'Ethertap network tap (OBSOLETE)' CONFIG_ETHERTAP
-diff -aurN linux-2.4.28-orig/drivers/net/Makefile linux-2.4.28/drivers/net/Makefile
---- linux-2.4.28-orig/drivers/net/Makefile     2004-08-07 23:26:04.000000000 +0000
-+++ linux-2.4.28/drivers/net/Makefile  2004-12-14 11:43:42.000000000 +0000
-@@ -170,6 +170,7 @@
+Index: linux-2.4.35.4/drivers/net/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/Makefile   2007-12-15 05:19:51.931380439 +0100
++++ linux-2.4.35.4/drivers/net/Makefile        2007-12-15 05:20:10.804455954 +0100
+@@ -176,6 +176,7 @@
  
  obj-$(CONFIG_STRIP) += strip.o
  obj-$(CONFIG_DUMMY) += dummy.o
@@ -71,9 +74,10 @@ diff -aurN linux-2.4.28-orig/drivers/net/Makefile linux-2.4.28/drivers/net/Makef
  obj-$(CONFIG_DE600) += de600.o
  obj-$(CONFIG_DE620) += de620.o
  obj-$(CONFIG_AT1500) += lance.o
-diff -aurN linux-2.4.28-orig/drivers/net/imq.c linux-2.4.28/drivers/net/imq.c
---- linux-2.4.28-orig/drivers/net/imq.c        1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/drivers/net/imq.c     2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/drivers/net/imq.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/drivers/net/imq.c   2007-12-15 05:20:10.808456180 +0100
 @@ -0,0 +1,321 @@
 +/*
 + *             Pseudo-driver for the intermediate queue device.
@@ -396,9 +400,10 @@ diff -aurN linux-2.4.28-orig/drivers/net/imq.c linux-2.4.28/drivers/net/imq.c
 +module_init(imq_init_module);
 +module_exit(imq_cleanup_module);
 +MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/include/linux/imq.h linux-2.4.28/include/linux/imq.h
---- linux-2.4.28-orig/include/linux/imq.h      1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/imq.h   2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/imq.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/imq.h 2007-12-15 05:20:10.808456180 +0100
 @@ -0,0 +1,9 @@
 +#ifndef _IMQ_H
 +#define _IMQ_H
@@ -409,9 +414,10 @@ diff -aurN linux-2.4.28-orig/include/linux/imq.h linux-2.4.28/include/linux/imq.
 +#define IMQ_F_ENQUEUE 0x80
 +
 +#endif /* _IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.4.28/include/linux/netfilter_ipv4/ipt_IMQ.h
---- linux-2.4.28-orig/include/linux/netfilter_ipv4/ipt_IMQ.h   1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/netfilter_ipv4/ipt_IMQ.h        2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_IMQ.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_IMQ.h      2007-12-15 05:20:10.808456180 +0100
 @@ -0,0 +1,8 @@
 +#ifndef _IPT_IMQ_H
 +#define _IPT_IMQ_H
@@ -421,9 +427,10 @@ diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv4/ipt_IMQ.h linux-2.4.28
 +};
 +
 +#endif /* _IPT_IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.4.28/include/linux/netfilter_ipv6/ip6t_IMQ.h
---- linux-2.4.28-orig/include/linux/netfilter_ipv6/ip6t_IMQ.h  1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/include/linux/netfilter_ipv6/ip6t_IMQ.h       2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_IMQ.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_IMQ.h     2007-12-15 05:20:10.808456180 +0100
 @@ -0,0 +1,8 @@
 +#ifndef _IP6T_IMQ_H
 +#define _IP6T_IMQ_H
@@ -433,9 +440,10 @@ diff -aurN linux-2.4.28-orig/include/linux/netfilter_ipv6/ip6t_IMQ.h linux-2.4.2
 +};
 +
 +#endif /* _IP6T_IMQ_H */
-diff -aurN linux-2.4.28-orig/include/linux/skbuff.h linux-2.4.28/include/linux/skbuff.h
---- linux-2.4.28-orig/include/linux/skbuff.h   2004-08-07 23:26:06.000000000 +0000
-+++ linux-2.4.28/include/linux/skbuff.h        2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/include/linux/skbuff.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/skbuff.h 2007-12-15 05:20:05.060128604 +0100
++++ linux-2.4.35.4/include/linux/skbuff.h      2007-12-15 05:20:10.808456180 +0100
 @@ -93,6 +93,9 @@
        struct nf_conntrack *master;
  };
@@ -465,9 +473,10 @@ diff -aurN linux-2.4.28-orig/include/linux/skbuff.h linux-2.4.28/include/linux/s
  };
  
  #ifdef __KERNEL__
-diff -aurN linux-2.4.28-orig/net/core/skbuff.c linux-2.4.28/net/core/skbuff.c
---- linux-2.4.28-orig/net/core/skbuff.c        2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/core/skbuff.c     2004-12-14 11:43:42.000000000 +0000
+Index: linux-2.4.35.4/net/core/skbuff.c
+===================================================================
+--- linux-2.4.35.4.orig/net/core/skbuff.c      2007-12-15 05:19:37.174539496 +0100
++++ linux-2.4.35.4/net/core/skbuff.c   2007-12-15 05:20:10.812456409 +0100
 @@ -202,6 +202,10 @@
        /* Set up other state */
        skb->len = 0;
@@ -512,31 +521,34 @@ diff -aurN linux-2.4.28-orig/net/core/skbuff.c linux-2.4.28/net/core/skbuff.c
  }
  
  /**
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/Config.in linux-2.4.28/net/ipv4/netfilter/Config.in
---- linux-2.4.28-orig/net/ipv4/netfilter/Config.in     2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/Config.in  2004-12-14 11:43:43.000000000 +0000
-@@ -104,6 +104,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:10.504438857 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:10.812456409 +0100
+@@ -171,6 +171,7 @@
      dep_tristate '    DSCP target support' CONFIG_IP_NF_TARGET_DSCP $CONFIG_IP_NF_MANGLE
   
      dep_tristate '    MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
 +    dep_tristate '    IMQ target support' CONFIG_IP_NF_TARGET_IMQ $CONFIG_IP_NF_MANGLE
    fi
-   dep_tristate '  LOG target support' CONFIG_IP_NF_TARGET_LOG $CONFIG_IP_NF_IPTABLES
-   dep_tristate '  ULOG target support' CONFIG_IP_NF_TARGET_ULOG $CONFIG_IP_NF_IPTABLES
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/Makefile linux-2.4.28/net/ipv4/netfilter/Makefile
---- linux-2.4.28-orig/net/ipv4/netfilter/Makefile      2003-08-25 11:44:44.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/Makefile   2004-12-14 11:43:43.000000000 +0000
-@@ -94,6 +94,7 @@
+   if [ "$CONFIG_IP_NF_CONNTRACK_MARK" != "n" ]; then
+     dep_tristate '  CONNMARK target support' CONFIG_IP_NF_TARGET_CONNMARK $CONFIG_IP_NF_IPTABLES
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:10.508439083 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:10.812456409 +0100
+@@ -138,6 +138,7 @@
  obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
  obj-$(CONFIG_IP_NF_TARGET_DSCP) += ipt_DSCP.o
  obj-$(CONFIG_IP_NF_TARGET_MARK) += ipt_MARK.o
 +obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
  obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
  obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
- obj-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += ip_nat_snmp_basic.o
-diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/ipt_IMQ.c linux-2.4.28/net/ipv4/netfilter/ipt_IMQ.c
---- linux-2.4.28-orig/net/ipv4/netfilter/ipt_IMQ.c     1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/net/ipv4/netfilter/ipt_IMQ.c  2004-12-14 11:43:43.000000000 +0000
+ obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_IMQ.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_IMQ.c        2007-12-15 05:20:10.812456409 +0100
 @@ -0,0 +1,78 @@
 +/* This target marks packets to be enqueued to an imq device */
 +#include <linux/module.h>
@@ -616,10 +628,11 @@ diff -aurN linux-2.4.28-orig/net/ipv4/netfilter/ipt_IMQ.c linux-2.4.28/net/ipv4/
 +module_init(init);
 +module_exit(fini);
 +MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Config.in linux-2.4.28/net/ipv6/netfilter/Config.in
---- linux-2.4.28-orig/net/ipv6/netfilter/Config.in     2003-06-13 14:51:39.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/Config.in  2004-12-14 11:43:43.000000000 +0000
-@@ -71,6 +71,7 @@
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in   2007-12-15 05:20:09.300370243 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in        2007-12-15 05:20:10.816456638 +0100
+@@ -72,6 +72,7 @@
    if [ "$CONFIG_IP6_NF_MANGLE" != "n" ]; then
  #    dep_tristate '    TOS target support' CONFIG_IP6_NF_TARGET_TOS $CONFIG_IP_NF_MANGLE
      dep_tristate '    MARK target support' CONFIG_IP6_NF_TARGET_MARK $CONFIG_IP6_NF_MANGLE
@@ -627,10 +640,11 @@ diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Config.in linux-2.4.28/net/ipv6/
    fi
    #dep_tristate '  LOG target support' CONFIG_IP6_NF_TARGET_LOG $CONFIG_IP6_NF_IPTABLES
  fi
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Makefile linux-2.4.28/net/ipv6/netfilter/Makefile
---- linux-2.4.28-orig/net/ipv6/netfilter/Makefile      2003-06-13 14:51:39.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/Makefile   2004-12-14 11:43:43.000000000 +0000
-@@ -28,6 +28,7 @@
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile    2007-12-15 05:20:09.304370470 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:10.816456638 +0100
+@@ -29,6 +29,7 @@
  obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
  obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
  obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t_MARK.o
@@ -638,9 +652,10 @@ diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/Makefile linux-2.4.28/net/ipv6/n
  obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
  obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
  obj-$(CONFIG_IP6_NF_MATCH_HL) += ip6t_hl.o
-diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/ip6t_IMQ.c linux-2.4.28/net/ipv6/netfilter/ip6t_IMQ.c
---- linux-2.4.28-orig/net/ipv6/netfilter/ip6t_IMQ.c    1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.4.28/net/ipv6/netfilter/ip6t_IMQ.c 2004-12-14 11:43:43.000000000 +0000
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_IMQ.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_IMQ.c       2007-12-15 05:20:10.816456638 +0100
 @@ -0,0 +1,78 @@
 +/* This target marks packets to be enqueued to an imq device */
 +#include <linux/module.h>
@@ -720,9 +735,10 @@ diff -aurN linux-2.4.28-orig/net/ipv6/netfilter/ip6t_IMQ.c linux-2.4.28/net/ipv6
 +module_init(init);
 +module_exit(fini);
 +MODULE_LICENSE("GPL");
-diff -aurN linux-2.4.28-orig/net/sched/sch_generic.c linux-2.4.28/net/sched/sch_generic.c
---- linux-2.4.28-orig/net/sched/sch_generic.c  2004-11-17 11:54:22.000000000 +0000
-+++ linux-2.4.28/net/sched/sch_generic.c       2004-12-14 11:44:27.000000000 +0000
+Index: linux-2.4.35.4/net/sched/sch_generic.c
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/sch_generic.c        2007-12-15 05:19:37.226542457 +0100
++++ linux-2.4.35.4/net/sched/sch_generic.c     2007-12-15 05:20:10.816456638 +0100
 @@ -29,6 +29,9 @@
  #include <linux/skbuff.h>
  #include <linux/rtnetlink.h>
index 3593571b46eaaa2fe19275a2f75998f0041aff37..1167e2b8240cf59a42101ab86dd22868cfe2b1fc 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Config.in linux-2.4.32/net/ipv4/netfilter/Config.in
---- linux-2.4.32.orig/net/ipv4/netfilter/Config.in     2006-01-07 12:11:37.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/Config.in  2006-01-07 12:15:45.000000000 +0100
-@@ -48,6 +48,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:10.812456409 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:11.208478976 +0100
+@@ -47,6 +47,7 @@
    dep_tristate '  netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
    dep_tristate '  Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
    dep_tristate '  TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
@@ -9,9 +10,10 @@ diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Config.in linux-2.4.32/net/ipv4/n
    dep_tristate '  condition match support' CONFIG_IP_NF_MATCH_CONDITION $CONFIG_IP_NF_IPTABLES
    dep_tristate '  recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
    dep_tristate '  ECN match support' CONFIG_IP_NF_MATCH_ECN $CONFIG_IP_NF_IPTABLES
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/ipt_time.c linux-2.4.32/net/ipv4/netfilter/ipt_time.c
---- linux-2.4.32.orig/net/ipv4/netfilter/ipt_time.c    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/ipt_time.c 2006-01-07 12:14:32.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_time.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_time.c       2007-12-15 05:20:11.212479205 +0100
 @@ -0,0 +1,193 @@
 +/*
 +  This is a module which is used for time matching
@@ -206,10 +208,11 @@ diff -urN linux-2.4.32.orig/net/ipv4/netfilter/ipt_time.c linux-2.4.32/net/ipv4/
 +      r->tm_mon=i;
 +      r->tm_mday=work-__spm[i]+1;
 +}
-diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Makefile linux-2.4.32/net/ipv4/netfilter/Makefile
---- linux-2.4.32.orig/net/ipv4/netfilter/Makefile      2006-01-07 12:11:37.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/Makefile   2006-01-07 12:16:07.000000000 +0100
-@@ -118,6 +118,7 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:10.812456409 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.216479434 +0100
+@@ -111,6 +111,7 @@
  obj-$(CONFIG_IP_NF_MATCH_MULTIPORT) += ipt_multiport.o
  obj-$(CONFIG_IP_NF_MATCH_OWNER) += ipt_owner.o
  obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos.o
@@ -217,9 +220,10 @@ diff -urN linux-2.4.32.orig/net/ipv4/netfilter/Makefile linux-2.4.32/net/ipv4/ne
  obj-$(CONFIG_IP_NF_MATCH_CONDITION) += ipt_condition.o
  
  obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
-diff -urN linux-2.4.32.orig/include/linux/netfilter_ipv4/ipt_time.h linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h
---- linux-2.4.32.orig/include/linux/netfilter_ipv4/ipt_time.h  1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/include/linux/netfilter_ipv4/ipt_time.h       2006-01-07 12:16:42.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_time.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_time.h     2007-12-15 05:20:11.216479434 +0100
 @@ -0,0 +1,15 @@
 +#ifndef __ipt_time_h_included__
 +#define __ipt_time_h_included__
index c34f9ecbb7c39075c632d6d905184dd7113fd79a..68f9dab004aa98e5a83551aecd8b16b6fb52b297 100644 (file)
@@ -1,6 +1,7 @@
-diff -urN linux.old/include/linux/netfilter_ipv4/ipt_multiport.h linux.dev/include/linux/netfilter_ipv4/ipt_multiport.h
---- linux.old/include/linux/netfilter_ipv4/ipt_multiport.h     2000-12-11 22:31:30.000000000 +0100
-+++ linux.dev/include/linux/netfilter_ipv4/ipt_multiport.h     2006-02-04 05:23:54.318518250 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_multiport.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ipt_multiport.h   2007-12-15 05:19:37.022530833 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_multiport.h        2007-12-15 05:20:11.456493111 +0100
 @@ -11,11 +11,12 @@
  
  #define IPT_MULTI_PORTS       15
@@ -16,9 +17,10 @@ diff -urN linux.old/include/linux/netfilter_ipv4/ipt_multiport.h linux.dev/inclu
 +      u_int8_t invert;                        /* Invert flag */
  };
  #endif /*_IPT_MULTIPORT_H*/
-diff -urN linux.old/net/ipv4/netfilter/ipt_multiport.c linux.dev/net/ipv4/netfilter/ipt_multiport.c
---- linux.old/net/ipv4/netfilter/ipt_multiport.c       2003-06-13 16:51:39.000000000 +0200
-+++ linux.dev/net/ipv4/netfilter/ipt_multiport.c       2006-02-04 05:34:27.362081000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_multiport.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ipt_multiport.c     2007-12-15 05:19:37.030531288 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_multiport.c  2007-12-15 05:20:11.464493568 +0100
 @@ -1,5 +1,14 @@
  /* Kernel module to match one of a list of TCP/UDP ports: ports are in
     the same place so we can treat them as equal. */
index c9f93925342fa99520e3407e9768241afec74cea..e4bceb95b7f974f2f71cb41df6f41c902a900fc7 100644 (file)
@@ -1,6 +1,7 @@
-diff -uprN linux-2.4.32.reference/include/linux/netfilter_ipv4/ipt_CLASSIFY.h linux-2.4.32/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
---- linux-2.4.32.reference/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/include/linux/netfilter_ipv4/ipt_CLASSIFY.h   2006-08-17 12:33:08.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CLASSIFY.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_CLASSIFY.h 2007-12-15 05:20:11.684506105 +0100
 @@ -0,0 +1,8 @@
 +#ifndef _IPT_CLASSIFY_H
 +#define _IPT_CLASSIFY_H
@@ -10,10 +11,11 @@ diff -uprN linux-2.4.32.reference/include/linux/netfilter_ipv4/ipt_CLASSIFY.h li
 +};
 +
 +#endif /*_IPT_CLASSIFY_H */
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/Config.in linux-2.4.32/net/ipv4/netfilter/Config.in
---- linux-2.4.32.reference/net/ipv4/netfilter/Config.in        2006-08-17 12:28:16.000000000 +0200
-+++ linux-2.4.32/net/ipv4/netfilter/Config.in  2006-08-17 12:33:08.000000000 +0200
-@@ -172,6 +172,7 @@ if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; 
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:11.208478976 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:11.688506331 +0100
+@@ -172,6 +172,7 @@
      dep_tristate '    DSCP target support' CONFIG_IP_NF_TARGET_DSCP $CONFIG_IP_NF_MANGLE
   
      dep_tristate '    MARK target support' CONFIG_IP_NF_TARGET_MARK $CONFIG_IP_NF_MANGLE
@@ -21,9 +23,10 @@ diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/Config.in linux-2.4.32/net/
      dep_tristate '    IMQ target support' CONFIG_IP_NF_TARGET_IMQ $CONFIG_IP_NF_MANGLE
    fi
    if [ "$CONFIG_IP_NF_CONNTRACK_MARK" != "n" ]; then
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/ipt_CLASSIFY.c linux-2.4.32/net/ipv4/netfilter/ipt_CLASSIFY.c
---- linux-2.4.32.reference/net/ipv4/netfilter/ipt_CLASSIFY.c   1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.32/net/ipv4/netfilter/ipt_CLASSIFY.c     2006-08-17 12:33:08.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_CLASSIFY.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_CLASSIFY.c   2007-12-15 05:20:11.696506789 +0100
 @@ -0,0 +1,82 @@
 +/*
 + * This is a module which is used for setting the skb->priority field
@@ -107,10 +110,11 @@ diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/ipt_CLASSIFY.c linux-2.4.32
 +
 +module_init(init);
 +module_exit(fini);
-diff -uprN linux-2.4.32.reference/net/ipv4/netfilter/Makefile linux-2.4.32/net/ipv4/netfilter/Makefile
---- linux-2.4.32.reference/net/ipv4/netfilter/Makefile 2006-08-17 12:28:16.000000000 +0200
-+++ linux-2.4.32/net/ipv4/netfilter/Makefile   2006-08-17 12:33:08.000000000 +0200
-@@ -134,6 +134,7 @@ obj-$(CONFIG_IP_NF_MATCH_LAYER7) += ipt_
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:11.216479434 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.696506789 +0100
+@@ -134,6 +134,7 @@
  
  # targets
  obj-$(CONFIG_IP_NF_TARGET_REJECT) += ipt_REJECT.o
index 32340d2da2ccf3cfb15ae41cebae00718c3a97d4..897226f66b3a47f0df3c09306607d036c5dff9fa 100644 (file)
@@ -1,6 +1,7 @@
-diff -ruaN linux-2.4.34.orig/Documentation/Configure.help linux-2.4.34/Documentation/Configure.help
---- linux-2.4.34.orig/Documentation/Configure.help     2007-06-01 12:17:16.000000000 +0100
-+++ linux-2.4.34/Documentation/Configure.help  2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:10.792455269 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:11.948521148 +0100
 @@ -2986,6 +2986,14 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
@@ -16,9 +17,10 @@ diff -ruaN linux-2.4.34.orig/Documentation/Configure.help linux-2.4.34/Documenta
  Condition variable match support
  CONFIG_IP_NF_MATCH_CONDITION
    This option allows you to match firewall rules against condition
-diff -ruaN linux-2.4.34.orig/include/linux/netfilter_ipv4/ipt_iprange.h linux-2.4.34/include/linux/netfilter_ipv4/ipt_iprange.h
---- linux-2.4.34.orig/include/linux/netfilter_ipv4/ipt_iprange.h       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/include/linux/netfilter_ipv4/ipt_iprange.h    2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_iprange.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_iprange.h  2007-12-15 05:20:11.952521377 +0100
 @@ -0,0 +1,23 @@
 +#ifndef _IPT_IPRANGE_H
 +#define _IPT_IPRANGE_H
@@ -43,9 +45,10 @@ diff -ruaN linux-2.4.34.orig/include/linux/netfilter_ipv4/ipt_iprange.h linux-2.
 +};
 +
 +#endif /* _IPT_IPRANGE_H */
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/Config.in linux-2.4.34/net/ipv4/netfilter/Config.in
---- linux-2.4.34.orig/net/ipv4/netfilter/Config.in     2007-06-01 12:17:17.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/Config.in  2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:11.688506331 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:11.960521836 +0100
 @@ -27,6 +27,7 @@
  if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; then
  # The simple matches.
@@ -54,9 +57,10 @@ diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/Config.in linux-2.4.34/net/ipv4/
    dep_tristate '  quota match support' CONFIG_IP_NF_MATCH_QUOTA $CONFIG_IP_NF_IPTABLES
  
    dep_tristate '  IP set support' CONFIG_IP_NF_SET $CONFIG_IP_NF_IPTABLES
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/ipt_iprange.c linux-2.4.34/net/ipv4/netfilter/ipt_iprange.c
---- linux-2.4.34.orig/net/ipv4/netfilter/ipt_iprange.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/ipt_iprange.c      2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_iprange.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_iprange.c    2007-12-15 05:20:11.964522063 +0100
 @@ -0,0 +1,101 @@
 +/*
 + * iptables module to match IP address ranges
@@ -159,9 +163,10 @@ diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/ipt_iprange.c linux-2.4.34/net/i
 +
 +module_init(init);
 +module_exit(fini);
-diff -ruaN linux-2.4.34.orig/net/ipv4/netfilter/Makefile linux-2.4.34/net/ipv4/netfilter/Makefile
---- linux-2.4.34.orig/net/ipv4/netfilter/Makefile      2007-06-01 12:17:17.000000000 +0100
-+++ linux-2.4.34/net/ipv4/netfilter/Makefile   2007-06-01 12:20:20.000000000 +0100
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:11.696506789 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:11.976522746 +0100
 @@ -90,6 +90,7 @@
  # matches
  obj-$(CONFIG_IP_NF_MATCH_HELPER) += ipt_helper.o
index 1ee85be46f4c6ef00d9e79f1a5a55f613d1f3f07..70c528e8e23c727a68a85bb5ed4d12fb9f30cd97 100644 (file)
@@ -1,7 +1,8 @@
-diff -Naurp linux-2.4.34/Documentation/Configure.help linux-2.4.34.patched/Documentation/Configure.help
---- linux-2.4.34/Documentation/Configure.help  2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/Documentation/Configure.help  2007-07-08 05:02:26.000000000 +0200
-@@ -2914,6 +2914,15 @@ CONFIG_IP_NF_MATCH_MAC
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:11.948521148 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:12.260538930 +0100
+@@ -2914,6 +2914,15 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
  
@@ -17,7 +18,7 @@ diff -Naurp linux-2.4.34/Documentation/Configure.help linux-2.4.34.patched/Docum
  Netfilter MARK match support
  CONFIG_IP_NF_MATCH_MARK
    Netfilter mark matching allows you to match packets based on the
-@@ -3221,6 +3230,7 @@ CONFIG_IP_NF_MATCH_HELPER
+@@ -3229,6 +3238,7 @@
    If you want to compile it as a module, say M here and read
    Documentation/modules.txt.  If unsure, say `Y'.
  
@@ -25,7 +26,7 @@ diff -Naurp linux-2.4.34/Documentation/Configure.help linux-2.4.34.patched/Docum
  TCPMSS match support
  CONFIG_IP_NF_MATCH_TCPMSS
    This option adds a `tcpmss' match, which allows you to examine the
-@@ -3299,6 +3309,14 @@ CONFIG_IP6_NF_MATCH_MAC
+@@ -3376,6 +3386,14 @@
    If you want to compile it as a module, say M here and read
    <file:Documentation/modules.txt>.  If unsure, say `N'.
  
@@ -40,9 +41,10 @@ diff -Naurp linux-2.4.34/Documentation/Configure.help linux-2.4.34.patched/Docum
  length match support
  CONFIG_IP6_NF_MATCH_LENGTH
    This option allows you to match the length of a packet against a
-diff -Naurp linux-2.4.34/include/linux/netfilter_ipv4/ipt_random.h linux-2.4.34.patched/include/linux/netfilter_ipv4/ipt_random.h
---- linux-2.4.34/include/linux/netfilter_ipv4/ipt_random.h     1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/include/linux/netfilter_ipv4/ipt_random.h     2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_random.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ipt_random.h   2007-12-15 05:20:12.264539159 +0100
 @@ -0,0 +1,11 @@
 +#ifndef _IPT_RAND_H
 +#define _IPT_RAND_H
@@ -55,9 +57,10 @@ diff -Naurp linux-2.4.34/include/linux/netfilter_ipv4/ipt_random.h linux-2.4.34.
 +};
 +
 +#endif /*_IPT_RAND_H*/
-diff -Naurp linux-2.4.34/include/linux/netfilter_ipv6/ip6t_random.h linux-2.4.34.patched/include/linux/netfilter_ipv6/ip6t_random.h
---- linux-2.4.34/include/linux/netfilter_ipv6/ip6t_random.h    1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/include/linux/netfilter_ipv6/ip6t_random.h    2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_random.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv6/ip6t_random.h  2007-12-15 05:20:12.272539617 +0100
 @@ -0,0 +1,11 @@
 +#ifndef _IP6T_RAND_H
 +#define _IP6T_RAND_H
@@ -70,10 +73,11 @@ diff -Naurp linux-2.4.34/include/linux/netfilter_ipv6/ip6t_random.h linux-2.4.34
 +};
 +
 +#endif /*_IP6T_RAND_H*/
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/Config.in linux-2.4.34.patched/net/ipv4/netfilter/Config.in
---- linux-2.4.34/net/ipv4/netfilter/Config.in  2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv4/netfilter/Config.in  2007-07-08 05:03:32.000000000 +0200
-@@ -32,6 +32,7 @@ if [ "$CONFIG_IP_NF_IPTABLES" != "n" ]; 
+Index: linux-2.4.35.4/net/ipv4/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Config.in   2007-12-15 05:20:11.960521836 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Config.in        2007-12-15 05:20:12.276539844 +0100
+@@ -48,6 +48,7 @@
    dep_tristate '  netfilter MARK match support' CONFIG_IP_NF_MATCH_MARK $CONFIG_IP_NF_IPTABLES
    dep_tristate '  Multiple port match support' CONFIG_IP_NF_MATCH_MULTIPORT $CONFIG_IP_NF_IPTABLES
    dep_tristate '  TOS match support' CONFIG_IP_NF_MATCH_TOS $CONFIG_IP_NF_IPTABLES
@@ -81,9 +85,10 @@ diff -Naurp linux-2.4.34/net/ipv4/netfilter/Config.in linux-2.4.34.patched/net/i
    dep_tristate '  TIME match support (EXPERIMENTAL)' CONFIG_IP_NF_MATCH_TIME $CONFIG_IP_NF_IPTABLES
    dep_tristate '  condition match support' CONFIG_IP_NF_MATCH_CONDITION $CONFIG_IP_NF_IPTABLES
    dep_tristate '  recent match support' CONFIG_IP_NF_MATCH_RECENT $CONFIG_IP_NF_IPTABLES
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/ipt_random.c linux-2.4.34.patched/net/ipv4/netfilter/ipt_random.c
---- linux-2.4.34/net/ipv4/netfilter/ipt_random.c       1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/net/ipv4/netfilter/ipt_random.c       2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_random.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_random.c     2007-12-15 05:20:12.276539844 +0100
 @@ -0,0 +1,96 @@
 +/*
 +  This is a module which is used for a "random" match support.
@@ -181,10 +186,11 @@ diff -Naurp linux-2.4.34/net/ipv4/netfilter/ipt_random.c linux-2.4.34.patched/ne
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naurp linux-2.4.34/net/ipv4/netfilter/Makefile linux-2.4.34.patched/net/ipv4/netfilter/Makefile
---- linux-2.4.34/net/ipv4/netfilter/Makefile   2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv4/netfilter/Makefile   2007-07-08 05:02:26.000000000 +0200
-@@ -102,6 +102,8 @@ obj-$(CONFIG_IP_NF_MATCH_TOS) += ipt_tos
+Index: linux-2.4.35.4/net/ipv4/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/Makefile    2007-12-15 05:20:11.976522746 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/Makefile 2007-12-15 05:20:12.276539844 +0100
+@@ -115,6 +115,8 @@
  obj-$(CONFIG_IP_NF_MATCH_TIME) += ipt_time.o
  obj-$(CONFIG_IP_NF_MATCH_CONDITION) += ipt_condition.o
  
@@ -193,10 +199,11 @@ diff -Naurp linux-2.4.34/net/ipv4/netfilter/Makefile linux-2.4.34.patched/net/ip
  obj-$(CONFIG_IP_NF_MATCH_RECENT) += ipt_recent.o
  
  obj-$(CONFIG_IP_NF_MATCH_ECN) += ipt_ecn.o
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/Config.in linux-2.4.34.patched/net/ipv6/netfilter/Config.in
---- linux-2.4.34/net/ipv6/netfilter/Config.in  2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv6/netfilter/Config.in  2007-07-08 05:02:26.000000000 +0200
-@@ -19,6 +19,7 @@ if [ "$CONFIG_IP6_NF_IPTABLES" != "n" ];
+Index: linux-2.4.35.4/net/ipv6/netfilter/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Config.in   2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Config.in        2007-12-15 05:20:12.276539844 +0100
+@@ -19,6 +19,7 @@
    dep_tristate '  limit match support' CONFIG_IP6_NF_MATCH_LIMIT $CONFIG_IP6_NF_IPTABLES
    dep_tristate '  condition match support' CONFIG_IP6_NF_MATCH_CONDITION $CONFIG_IP6_NF_IPTABLES
    dep_tristate '  MAC address match support' CONFIG_IP6_NF_MATCH_MAC $CONFIG_IP6_NF_IPTABLES
@@ -204,9 +211,10 @@ diff -Naurp linux-2.4.34/net/ipv6/netfilter/Config.in linux-2.4.34.patched/net/i
    if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
      dep_tristate '  Routing header match support (EXPERIMENTAL)' CONFIG_IP6_NF_MATCH_RT $CONFIG_IP6_NF_IPTABLES
    fi
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/ip6t_random.c linux-2.4.34.patched/net/ipv6/netfilter/ip6t_random.c
---- linux-2.4.34/net/ipv6/netfilter/ip6t_random.c      1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34.patched/net/ipv6/netfilter/ip6t_random.c      2007-07-08 05:02:26.000000000 +0200
+Index: linux-2.4.35.4/net/ipv6/netfilter/ip6t_random.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/ipv6/netfilter/ip6t_random.c    2007-12-15 05:20:12.276539844 +0100
 @@ -0,0 +1,97 @@
 +/*
 +  This is a module which is used for a "random" match support.
@@ -305,10 +313,11 @@ diff -Naurp linux-2.4.34/net/ipv6/netfilter/ip6t_random.c linux-2.4.34.patched/n
 +
 +module_init(init);
 +module_exit(fini);
-diff -Naurp linux-2.4.34/net/ipv6/netfilter/Makefile linux-2.4.34.patched/net/ipv6/netfilter/Makefile
---- linux-2.4.34/net/ipv6/netfilter/Makefile   2007-07-08 05:01:42.000000000 +0200
-+++ linux-2.4.34.patched/net/ipv6/netfilter/Makefile   2007-07-08 05:02:26.000000000 +0200
-@@ -32,6 +32,7 @@ obj-$(CONFIG_IP6_NF_TARGET_MARK) += ip6t
+Index: linux-2.4.35.4/net/ipv6/netfilter/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv6/netfilter/Makefile    2007-12-15 05:20:10.816456638 +0100
++++ linux-2.4.35.4/net/ipv6/netfilter/Makefile 2007-12-15 05:20:12.280540069 +0100
+@@ -32,6 +32,7 @@
  obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
  obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
  obj-$(CONFIG_IP6_NF_TARGET_LOG) += ip6t_LOG.o
index f4b9a6eddadbfe98e3d58ed6373e3fe4ff248679..86935a82b404a5e64549f080f256b24e75347abb 100644 (file)
@@ -1,7 +1,8 @@
-diff -urN linux-2.4.34/Documentation/Configure.help linux-2.4.34/Documentation/Configure.help
---- linux-2.4.34/Documentation/Configure.help  2007-05-10 19:37:42.000000000 -0400
-+++ linux-2.4.34/Documentation/Configure.help  2007-05-10 19:49:49.000000000 -0400
-@@ -11127,6 +11127,24 @@
+Index: linux-2.4.35.4/Documentation/Configure.help
+===================================================================
+--- linux-2.4.35.4.orig/Documentation/Configure.help   2007-12-15 05:20:12.260538930 +0100
++++ linux-2.4.35.4/Documentation/Configure.help        2007-12-15 05:20:12.604558535 +0100
+@@ -11153,6 +11153,24 @@
    whenever you want).  If you want to compile it as a module, say M
    here and read <file:Documentation/modules.txt>.
  
@@ -26,9 +27,10 @@ diff -urN linux-2.4.34/Documentation/Configure.help linux-2.4.34/Documentation/C
  CSZ packet scheduler
  CONFIG_NET_SCH_CSZ
    Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet
-diff -urN linux-2.4.34/include/linux/pkt_sched.h linux-2.4.34/include/linux/pkt_sched.h
---- linux-2.4.34/include/linux/pkt_sched.h     2007-05-10 19:38:19.000000000 -0400
-+++ linux-2.4.34/include/linux/pkt_sched.h     2007-05-10 19:53:59.000000000 -0400
+Index: linux-2.4.35.4/include/linux/pkt_sched.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/pkt_sched.h      2007-12-15 05:19:36.750515331 +0100
++++ linux-2.4.35.4/include/linux/pkt_sched.h   2007-12-15 05:20:12.608558764 +0100
 @@ -173,8 +173,36 @@
   *
   *    The only reason for this is efficiency, it is possible
@@ -66,9 +68,10 @@ diff -urN linux-2.4.34/include/linux/pkt_sched.h linux-2.4.34/include/linux/pkt_
  /* RED section */
  
  enum
-diff -urN linux-2.4.34/net/sched/Config.in linux-2.4.34/net/sched/Config.in
---- linux-2.4.34/net/sched/Config.in   2007-05-10 19:38:31.000000000 -0400
-+++ linux-2.4.34/net/sched/Config.in   2007-05-10 19:54:45.000000000 -0400
+Index: linux-2.4.35.4/net/sched/Config.in
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/Config.in    2007-12-15 05:19:36.758515786 +0100
++++ linux-2.4.35.4/net/sched/Config.in 2007-12-15 05:20:12.608558764 +0100
 @@ -12,6 +12,7 @@
  tristate '  The simplest PRIO pseudoscheduler' CONFIG_NET_SCH_PRIO
  tristate '  RED queue' CONFIG_NET_SCH_RED
@@ -77,9 +80,10 @@ diff -urN linux-2.4.34/net/sched/Config.in linux-2.4.34/net/sched/Config.in
  tristate '  TEQL queue' CONFIG_NET_SCH_TEQL
  tristate '  TBF queue' CONFIG_NET_SCH_TBF
  tristate '  GRED queue' CONFIG_NET_SCH_GRED
-diff -urN linux-2.4.34/net/sched/Makefile linux-2.4.34/net/sched/Makefile
---- linux-2.4.34/net/sched/Makefile    2007-05-10 19:38:31.000000000 -0400
-+++ linux-2.4.34/net/sched/Makefile    2007-05-10 19:55:13.000000000 -0400
+Index: linux-2.4.35.4/net/sched/Makefile
+===================================================================
+--- linux-2.4.35.4.orig/net/sched/Makefile     2007-12-15 05:19:36.766516242 +0100
++++ linux-2.4.35.4/net/sched/Makefile  2007-12-15 05:20:12.608558764 +0100
 @@ -19,6 +19,7 @@
  obj-$(CONFIG_NET_SCH_HFSC)    += sch_hfsc.o
  obj-$(CONFIG_NET_SCH_HTB)     += sch_htb.o
@@ -88,9 +92,10 @@ diff -urN linux-2.4.34/net/sched/Makefile linux-2.4.34/net/sched/Makefile
  obj-$(CONFIG_NET_SCH_RED)     += sch_red.o
  obj-$(CONFIG_NET_SCH_TBF)     += sch_tbf.o
  obj-$(CONFIG_NET_SCH_PRIO)    += sch_prio.o
-diff -urN linux-2.4.34/net/sched/sch_esfq.c linux-2.4.34/net/sched/sch_esfq.c
---- linux-2.4.34/net/sched/sch_esfq.c  1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.4.34/net/sched/sch_esfq.c  2007-05-10 19:57:15.000000000 -0400
+Index: linux-2.4.35.4/net/sched/sch_esfq.c
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/net/sched/sch_esfq.c        2007-12-15 05:20:12.608558764 +0100
 @@ -0,0 +1,649 @@
 +/*
 + * net/sched/sch_esfq.c       Extended Stochastic Fairness Queueing discipline.
index 86a7f1cdf703376bb070b93193ee6647a5a93ba0..b0cba8f264d254a7ef91e9c38ccd311f5490731d 100644 (file)
@@ -1,6 +1,7 @@
-diff -ruN linux-2.4.34.orig/include/linux/netfilter_ipv4/ip_set_ipporthash.h linux-2.4.34/include/linux/netfilter_ipv4/ip_set_ipporthash.h
---- linux-2.4.34.orig/include/linux/netfilter_ipv4/ip_set_ipporthash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.4.34/include/linux/netfilter_ipv4/ip_set_ipporthash.h      2006-12-31 18:32:57.183171722 +0100
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipporthash.h
+===================================================================
+--- /dev/null  1970-01-01 00:00:00.000000000 +0000
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_set_ipporthash.h    2007-12-15 05:20:12.884574492 +0100
 @@ -0,0 +1,34 @@
 +#ifndef __IP_SET_IPPORTHASH_H
 +#define __IP_SET_IPPORTHASH_H
index 46407c85f2df0fddb75b1acde4e71337f214c529..7b4e48f72093d8f6f953847475ce8666e6440b23 100644 (file)
@@ -1,6 +1,7 @@
-diff -ur v2.4.29/linux/include/linux/netfilter_ipv4/ip_nat.h linux/include/linux/netfilter_ipv4/ip_nat.h
---- v2.4.29/linux/include/linux/netfilter_ipv4/ip_nat.h        2005-01-20 09:25:34.000000000 +0200
-+++ linux/include/linux/netfilter_ipv4/ip_nat.h        2005-01-20 09:55:46.998651976 +0200
+Index: linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/netfilter_ipv4/ip_nat.h  2007-12-15 05:19:36.574505299 +0100
++++ linux-2.4.35.4/include/linux/netfilter_ipv4/ip_nat.h       2007-12-15 05:20:13.092586349 +0100
 @@ -121,5 +121,13 @@
  extern u_int16_t ip_nat_cheat_check(u_int32_t oldvalinv,
                                    u_int32_t newval,
@@ -15,9 +16,10 @@ diff -ur v2.4.29/linux/include/linux/netfilter_ipv4/ip_nat.h linux/include/linux
 +
  #endif /*__KERNEL__*/
  #endif
-diff -ur v2.4.29/linux/include/linux/rtnetlink.h linux/include/linux/rtnetlink.h
---- v2.4.29/linux/include/linux/rtnetlink.h    2004-08-08 10:56:48.000000000 +0300
-+++ linux/include/linux/rtnetlink.h    2005-01-20 09:55:33.431714464 +0200
+Index: linux-2.4.35.4/include/linux/rtnetlink.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/rtnetlink.h      2007-12-15 05:19:36.582505757 +0100
++++ linux-2.4.35.4/include/linux/rtnetlink.h   2007-12-15 05:20:13.092586349 +0100
 @@ -234,6 +234,8 @@
  #define RTNH_F_DEAD           1       /* Nexthop is dead (used by multipath)  */
  #define RTNH_F_PERVASIVE      2       /* Do recursive gateway lookup  */
@@ -27,9 +29,10 @@ diff -ur v2.4.29/linux/include/linux/rtnetlink.h linux/include/linux/rtnetlink.h
  
  /* Macros to handle hexthops */
  
-diff -ur v2.4.29/linux/include/net/ip_fib.h linux/include/net/ip_fib.h
---- v2.4.29/linux/include/net/ip_fib.h 2001-11-13 03:24:05.000000000 +0200
-+++ linux/include/net/ip_fib.h 2005-01-20 09:55:33.432714312 +0200
+Index: linux-2.4.35.4/include/net/ip_fib.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/ip_fib.h   2007-12-15 05:19:36.590506213 +0100
++++ linux-2.4.35.4/include/net/ip_fib.h        2007-12-15 05:20:13.100586801 +0100
 @@ -162,7 +162,8 @@
  
  static inline void fib_select_default(const struct rt_key *key, struct fib_result *res)
@@ -55,9 +58,10 @@ diff -ur v2.4.29/linux/include/net/ip_fib.h linux/include/net/ip_fib.h
 +extern rwlock_t fib_nhflags_lock;
  
  #endif  /* _NET_FIB_H */
-diff -ur v2.4.29/linux/include/net/route.h linux/include/net/route.h
---- v2.4.29/linux/include/net/route.h  2003-08-25 22:06:13.000000000 +0300
-+++ linux/include/net/route.h  2005-01-20 09:55:46.999651824 +0200
+Index: linux-2.4.35.4/include/net/route.h
+===================================================================
+--- linux-2.4.35.4.orig/include/net/route.h    2007-12-15 05:19:36.598506668 +0100
++++ linux-2.4.35.4/include/net/route.h 2007-12-15 05:20:13.104587030 +0100
 @@ -49,6 +49,8 @@
  {
        __u32                   dst;
@@ -91,9 +95,10 @@ diff -ur v2.4.29/linux/include/net/route.h linux/include/net/route.h
  static inline void ip_rt_put(struct rtable * rt)
  {
        if (rt)
-diff -ur v2.4.29/linux/net/ipv4/fib_frontend.c linux/net/ipv4/fib_frontend.c
---- v2.4.29/linux/net/ipv4/fib_frontend.c      2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_frontend.c      2005-01-20 09:55:46.999651824 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_frontend.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_frontend.c        2007-12-15 05:19:36.606507123 +0100
++++ linux-2.4.35.4/net/ipv4/fib_frontend.c     2007-12-15 05:20:13.108587259 +0100
 @@ -54,6 +54,8 @@
  struct fib_table *local_table;
  struct fib_table *main_table;
@@ -192,9 +197,10 @@ diff -ur v2.4.29/linux/net/ipv4/fib_frontend.c linux/net/ipv4/fib_frontend.c
                rt_cache_flush(-1);
                break;
        case NETDEV_DOWN:
-diff -ur v2.4.29/linux/net/ipv4/fib_hash.c linux/net/ipv4/fib_hash.c
---- v2.4.29/linux/net/ipv4/fib_hash.c  2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_hash.c  2005-01-20 09:55:47.000651672 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_hash.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_hash.c    2007-12-15 05:19:36.614507579 +0100
++++ linux-2.4.35.4/net/ipv4/fib_hash.c 2007-12-15 05:20:13.108587259 +0100
 @@ -71,6 +71,7 @@
        struct fib_info         *fn_info;
  #define FIB_INFO(f)   ((f)->fn_info)
@@ -408,9 +414,10 @@ diff -ur v2.4.29/linux/net/ipv4/fib_hash.c linux/net/ipv4/fib_hash.c
        new_f->fn_key = key;
  #ifdef CONFIG_IP_ROUTE_TOS
        new_f->fn_tos = tos;
-diff -ur v2.4.29/linux/net/ipv4/fib_rules.c linux/net/ipv4/fib_rules.c
---- v2.4.29/linux/net/ipv4/fib_rules.c 2004-02-19 00:23:39.000000000 +0200
-+++ linux/net/ipv4/fib_rules.c 2005-01-20 09:55:33.433714160 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_rules.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_rules.c   2007-12-15 05:19:36.618507808 +0100
++++ linux-2.4.35.4/net/ipv4/fib_rules.c        2007-12-15 05:20:13.108587259 +0100
 @@ -307,6 +307,11 @@
        }
  }
@@ -436,9 +443,10 @@ diff -ur v2.4.29/linux/net/ipv4/fib_rules.c linux/net/ipv4/fib_rules.c
                struct fib_table *tb;
                if ((tb = fib_get_table(res->r->r_table)) != NULL)
                        tb->tb_select_default(tb, key, res);
-diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
---- v2.4.29/linux/net/ipv4/fib_semantics.c     2003-08-25 22:06:13.000000000 +0300
-+++ linux/net/ipv4/fib_semantics.c     2005-01-20 09:55:47.000651672 +0200
+Index: linux-2.4.35.4/net/ipv4/fib_semantics.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/fib_semantics.c       2007-12-15 05:19:36.626508263 +0100
++++ linux-2.4.35.4/net/ipv4/fib_semantics.c    2007-12-15 05:20:13.112587489 +0100
 @@ -48,6 +48,7 @@
  static struct fib_info        *fib_info_list;
  static rwlock_t fib_info_lock = RW_LOCK_UNLOCKED;
@@ -558,7 +566,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
                }
                nh->nh_dev = in_dev->dev;
                dev_hold(nh->nh_dev);
-@@ -603,8 +635,12 @@
+@@ -606,8 +638,12 @@
                        for_nexthops(fi) {
                                if (nh->nh_flags&RTNH_F_DEAD)
                                        continue;
@@ -573,7 +581,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
                        }
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                        if (nhsel < fi->fib_nhs) {
-@@ -870,22 +906,35 @@
+@@ -873,22 +909,35 @@
                if (local && fi->fib_prefsrc == local) {
                        fi->fib_flags |= RTNH_F_DEAD;
                        ret++;
@@ -618,7 +626,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
                                }
  #ifdef CONFIG_IP_ROUTE_MULTIPATH
                                if (force > 1 && nh->nh_dev == dev) {
-@@ -903,37 +952,55 @@
+@@ -906,37 +955,55 @@
        return ret;
  }
  
@@ -682,7 +690,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
                } endfor_nexthops(fi)
  
                if (alive > 0) {
-@@ -941,9 +1008,13 @@
+@@ -944,9 +1011,13 @@
                        ret++;
                }
        } endfor_fib_info();
@@ -696,7 +704,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
  /*
     The algorithm is suboptimal, but it provides really
     fair weighted route distribution.
-@@ -952,24 +1023,45 @@
+@@ -955,24 +1026,45 @@
  void fib_select_multipath(const struct rt_key *key, struct fib_result *res)
  {
        struct fib_info *fi = res->fi;
@@ -750,7 +758,7 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
        }
  
  
-@@ -979,20 +1071,40 @@
+@@ -982,20 +1074,40 @@
  
        w = jiffies % fi->fib_power;
  
@@ -794,9 +802,10 @@ diff -ur v2.4.29/linux/net/ipv4/fib_semantics.c linux/net/ipv4/fib_semantics.c
        spin_unlock_bh(&fib_multipath_lock);
  }
  #endif
-diff -ur v2.4.29/linux/net/ipv4/ip_nat_dumb.c linux/net/ipv4/ip_nat_dumb.c
---- v2.4.29/linux/net/ipv4/ip_nat_dumb.c       2001-11-13 03:25:26.000000000 +0200
-+++ linux/net/ipv4/ip_nat_dumb.c       2005-01-20 09:55:47.001651520 +0200
+Index: linux-2.4.35.4/net/ipv4/ip_nat_dumb.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/ip_nat_dumb.c 2007-12-15 05:19:36.634508719 +0100
++++ linux-2.4.35.4/net/ipv4/ip_nat_dumb.c      2007-12-15 05:20:13.112587489 +0100
 @@ -124,6 +124,7 @@
                                        key.dst = ciph->saddr;
                                        key.iif = skb->dev->ifindex;
@@ -805,9 +814,10 @@ diff -ur v2.4.29/linux/net/ipv4/ip_nat_dumb.c linux/net/ipv4/ip_nat_dumb.c
  #ifdef CONFIG_IP_ROUTE_TOS
                                        key.tos = RT_TOS(ciph->tos);
  #endif
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_fw_compat_masq.c linux/net/ipv4/netfilter/ip_fw_compat_masq.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_fw_compat_masq.c       2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_fw_compat_masq.c       2005-01-20 09:55:47.001651520 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_fw_compat_masq.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_fw_compat_masq.c 2007-12-15 05:19:36.642509177 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_fw_compat_masq.c      2007-12-15 05:20:13.112587489 +0100
 @@ -41,6 +41,10 @@
        enum ip_conntrack_info ctinfo;
        struct ip_conntrack *ct;
@@ -885,9 +895,10 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_fw_compat_masq.c linux/net/ipv4/net
  }
  
  void
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_core.c linux/net/ipv4/netfilter/ip_nat_core.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_nat_core.c     2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_nat_core.c     2005-01-20 09:55:47.002651368 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_core.c       2007-12-15 05:20:06.404205198 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_core.c    2007-12-15 05:20:13.112587489 +0100
 @@ -994,6 +994,60 @@
        return NF_ACCEPT;
  }
@@ -949,10 +960,11 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_core.c linux/net/ipv4/netfilter
  int __init ip_nat_init(void)
  {
        size_t i;
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c linux/net/ipv4/netfilter/ip_nat_standalone.c
---- v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c       2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ip_nat_standalone.c       2005-01-20 09:55:47.002651368 +0200
-@@ -241,6 +241,9 @@
+Index: linux-2.4.35.4/net/ipv4/netfilter/ip_nat_standalone.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ip_nat_standalone.c 2007-12-15 05:19:36.654509858 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ip_nat_standalone.c      2007-12-15 05:20:13.112587489 +0100
+@@ -245,6 +245,9 @@
  /* Before packet filtering, change destination */
  static struct nf_hook_ops ip_nat_in_ops
  = { { NULL, NULL }, ip_nat_in, PF_INET, NF_IP_PRE_ROUTING, NF_IP_PRI_NAT_DST };
@@ -962,7 +974,7 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c linux/net/ipv4/net
  /* After packet filtering, change source */
  static struct nf_hook_ops ip_nat_out_ops
  = { { NULL, NULL }, ip_nat_out, PF_INET, NF_IP_POST_ROUTING, NF_IP_PRI_NAT_SRC};
-@@ -309,10 +312,15 @@
+@@ -313,10 +316,15 @@
                printk("ip_nat_init: can't register in hook.\n");
                goto cleanup_nat;
        }
@@ -979,7 +991,7 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c linux/net/ipv4/net
        }
        ret = nf_register_hook(&ip_nat_local_out_ops);
        if (ret < 0) {
-@@ -332,6 +340,8 @@
+@@ -336,6 +344,8 @@
        nf_unregister_hook(&ip_nat_local_out_ops);
   cleanup_outops:
        nf_unregister_hook(&ip_nat_out_ops);
@@ -988,9 +1000,10 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ip_nat_standalone.c linux/net/ipv4/net
   cleanup_inops:
        nf_unregister_hook(&ip_nat_in_ops);
   cleanup_nat:
-diff -ur v2.4.29/linux/net/ipv4/netfilter/ipt_MASQUERADE.c linux/net/ipv4/netfilter/ipt_MASQUERADE.c
---- v2.4.29/linux/net/ipv4/netfilter/ipt_MASQUERADE.c  2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/ipv4/netfilter/ipt_MASQUERADE.c  2005-01-20 09:55:47.003651216 +0200
+Index: linux-2.4.35.4/net/ipv4/netfilter/ipt_MASQUERADE.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/netfilter/ipt_MASQUERADE.c    2007-12-15 05:19:36.662510316 +0100
++++ linux-2.4.35.4/net/ipv4/netfilter/ipt_MASQUERADE.c 2007-12-15 05:20:13.116587715 +0100
 @@ -87,7 +87,8 @@
        key.dst = (*pskb)->nh.iph->daddr;
        key.src = 0; /* Unknown: that's what we're trying to establish */
@@ -1015,9 +1028,10 @@ diff -ur v2.4.29/linux/net/ipv4/netfilter/ipt_MASQUERADE.c linux/net/ipv4/netfil
  
        newsrc = rt->rt_src;
        DEBUGP("newsrc = %u.%u.%u.%u\n", NIPQUAD(newsrc));
-diff -ur v2.4.29/linux/net/ipv4/route.c linux/net/ipv4/route.c
---- v2.4.29/linux/net/ipv4/route.c     2004-11-18 08:30:33.000000000 +0200
-+++ linux/net/ipv4/route.c     2005-01-20 09:55:47.004651064 +0200
+Index: linux-2.4.35.4/net/ipv4/route.c
+===================================================================
+--- linux-2.4.35.4.orig/net/ipv4/route.c       2007-12-15 05:19:36.670510772 +0100
++++ linux-2.4.35.4/net/ipv4/route.c    2007-12-15 05:20:13.116587715 +0100
 @@ -919,6 +919,7 @@
  
                                /* Gateway is different ... */
@@ -1286,9 +1300,10 @@ diff -ur v2.4.29/linux/net/ipv4/route.c linux/net/ipv4/route.c
  #ifdef CONFIG_IP_ROUTE_FWMARK
                    rth->key.fwmark == key->fwmark &&
  #endif
-diff -ur v2.4.29/linux/net/netsyms.c linux/net/netsyms.c
---- v2.4.29/linux/net/netsyms.c        2005-01-20 09:25:34.000000000 +0200
-+++ linux/net/netsyms.c        2005-01-20 09:55:47.005650912 +0200
+Index: linux-2.4.35.4/net/netsyms.c
+===================================================================
+--- linux-2.4.35.4.orig/net/netsyms.c  2007-12-15 05:19:36.678511227 +0100
++++ linux-2.4.35.4/net/netsyms.c       2007-12-15 05:20:13.120587941 +0100
 @@ -260,6 +260,7 @@
  EXPORT_SYMBOL(inet_unregister_protosw);
  EXPORT_SYMBOL(ip_route_output_key);
index b0d5facc44682bab109450de825b99fcfbfda7ef..035d5bdb31c34b3428f0427670a2573be3852b56 100644 (file)
@@ -1,12 +1,14 @@
---- linux-2.4.34-old/drivers/usb/serial/usbserial.c    2007-08-27 15:32:14.000000000 +0200
-+++ linux-2.4.34-new/drivers/usb/serial/usbserial.c    2007-09-02 14:10:52.000000000 +0200
+Index: linux-2.4.35.4/drivers/usb/serial/usbserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/usbserial.c 2007-12-15 05:19:36.542503478 +0100
++++ linux-2.4.35.4/drivers/usb/serial/usbserial.c      2007-12-15 05:20:13.496609372 +0100
 @@ -331,6 +331,7 @@
  #ifdef CONFIG_USB_SERIAL_GENERIC
  static __u16  vendor  = 0x05f9;
  static __u16  product = 0xffff;
 +static int    maxSize = 0;
  
- static struct usb_device_id generic_device_ids[9]; /* Initially all zeroes. */
+ static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
  
 @@ -1557,7 +1558,11 @@
                        err("No free urbs available");
@@ -20,7 +22,7 @@
                port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
                port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
                if (!port->bulk_in_buffer) {
-@@ -1945,4 +1950,7 @@
+@@ -1921,4 +1926,7 @@
  
  MODULE_PARM(product, "h");
  MODULE_PARM_DESC(product, "User specified USB idProduct");
index fbbb95883c624d3e30c8b5718a790b6efea2899c..a1828f83120a049d7ae2744ad0ac0d8ae9ce4392 100644 (file)
@@ -1,15 +1,17 @@
---- linux/drivers/usb/serial/usbserial.c.old   2006-05-15 18:16:55.000000000 +0300
-+++ linux/drivers/usb/serial/usbserial.c       2006-05-15 18:19:06.000000000 +0300
-@@ -332,7 +332,7 @@
- static __u16  vendor  = 0x05f9;
+Index: linux-2.4.35.4/drivers/usb/serial/usbserial.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/usb/serial/usbserial.c 2007-12-15 05:20:13.496609372 +0100
++++ linux-2.4.35.4/drivers/usb/serial/usbserial.c      2007-12-15 05:20:13.708621453 +0100
+@@ -333,7 +333,7 @@
  static __u16  product = 0xffff;
+ static int    maxSize = 0;
  
 -static struct usb_device_id generic_device_ids[2]; /* Initially all zeroes. */
 +static struct usb_device_id generic_device_ids[10]; /* Initially all zeroes. */
  
  /* All of the device info needed for the Generic Serial Converter */
  static struct usb_serial_device_type generic_device = {
-@@ -1793,6 +1793,34 @@
+@@ -1836,6 +1836,34 @@
        generic_device_ids[0].idVendor = vendor;
        generic_device_ids[0].idProduct = product;
        generic_device_ids[0].match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT;