aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm63xx-2.6
diff options
context:
space:
mode:
authorFlorian Fainelli <florian@openwrt.org>2006-07-07 21:04:02 +0000
committerFlorian Fainelli <florian@openwrt.org>2006-07-07 21:04:02 +0000
commitfab394afa5d385d3cd45fbf2ccae72d579c944e3 (patch)
treec87f6537b0f16e1af11cd595ef258d109c084120 /target/linux/brcm63xx-2.6
parente7bac6dc6fb189d8c620f19348bba367c05ae423 (diff)
downloadupstream-fab394afa5d385d3cd45fbf2ccae72d579c944e3.tar.gz
upstream-fab394afa5d385d3cd45fbf2ccae72d579c944e3.tar.bz2
upstream-fab394afa5d385d3cd45fbf2ccae72d579c944e3.zip
Fix brcm63xx support. Now a kernel is booting, detecting the flash, and can probably mount a filesystem
Huge thanks to Nico Huber for providing working patches ! git-svn-id: svn://svn.openwrt.org/openwrt/branches/buildroot-ng/openwrt@4117 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/brcm63xx-2.6')
-rw-r--r--target/linux/brcm63xx-2.6/Makefile5
-rw-r--r--target/linux/brcm63xx-2.6/config1011
-rw-r--r--target/linux/brcm63xx-2.6/patches/000-arch_mips.patch143
-rw-r--r--target/linux/brcm63xx-2.6/patches/001-bcm963xx.patch48189
-rw-r--r--target/linux/brcm63xx-2.6/patches/001-brcm_boards.patch9059
-rw-r--r--target/linux/brcm63xx-2.6/patches/002-pci_bcm96348.patch438
-rw-r--r--target/linux/brcm63xx-2.6/patches/010-include_asm_mips.patch77
-rw-r--r--target/linux/brcm63xx-2.6/patches/011-include_mach_bcm963xx.patch40
-rw-r--r--target/linux/brcm63xx-2.6/patches/020-bcmdrivers.patch3249
-rw-r--r--target/linux/brcm63xx-2.6/patches/030-boardparms.patch3186
-rw-r--r--target/linux/brcm63xx-2.6/patches/040-bcm963xx_flashmap.patch135
-rw-r--r--target/linux/brcm63xx-2.6/patches/050-disable-synchronize_net.patch13
12 files changed, 16807 insertions, 48738 deletions
diff --git a/target/linux/brcm63xx-2.6/Makefile b/target/linux/brcm63xx-2.6/Makefile
index ebbb84425a..a27147491a 100644
--- a/target/linux/brcm63xx-2.6/Makefile
+++ b/target/linux/brcm63xx-2.6/Makefile
@@ -6,9 +6,9 @@
#
include $(TOPDIR)/rules.mk
-LINUX_VERSION:=2.6.8.1
+LINUX_VERSION:=2.6.16.7
LINUX_RELEASE:=1
-LINUX_KERNEL_MD5SUM:=9517ca999e822b898fbdc7e72796b1aa
+LINUX_KERNEL_MD5SUM:=9682b2bd6e02f3087982d7c3f5ba824e
include ./config
include $(INCLUDE_DIR)/kernel.mk
@@ -19,6 +19,5 @@ $(LINUX_DIR)/.patched: $(LINUX_DIR)/.unpacked
#[ -d ../generic-$(KERNEL)/patches ] && $(PATCH) $(LINUX_DIR) ../generic-$(KERNEL)/patches $(MAKE_TRACE)
[ -d ./patches ] && $(PATCH) $(LINUX_DIR) ./patches $(MAKE_TRACE)
@$(CP) config $(LINUX_DIR)/.config
- @$(CP) ./files/built-in.o $(LINUX_DIR)/bcmdrivers/broadcom/
touch $@
diff --git a/target/linux/brcm63xx-2.6/config b/target/linux/brcm63xx-2.6/config
index f774cfc276..335bd645f9 100644
--- a/target/linux/brcm63xx-2.6/config
+++ b/target/linux/brcm63xx-2.6/config
@@ -1,133 +1,122 @@
#
# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16.7
+# Fri Jul 7 21:47:39 2006
#
CONFIG_MIPS=y
-# CONFIG_MIPS64 is not set
-# CONFIG_64BIT is not set
-CONFIG_MIPS32=y
-
-#
-# Code maturity level options
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_CLEAN_COMPILE=y
-CONFIG_BROKEN_ON_SMP=y
-
-#
-# General setup
-#
-# CONFIG_SWAP is not set
-CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_HOTPLUG=y
-# CONFIG_IKCONFIG is not set
-CONFIG_EMBEDDED=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_FUTEX is not set
-# CONFIG_EPOLL is not set
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
#
# Machine selection
#
CONFIG_MIPS_BRCM=y
-# CONFIG_BCM96338 is not set
-# CONFIG_BCM96345 is not set
-CONFIG_BCM96348=y
-CONFIG_BCM_BOARD=y
-CONFIG_BCM_SERIAL=y
-CONFIG_BCM_ENET=y
-CONFIG_BCM_USB=m
-CONFIG_BCM_WLAN=m
-CONFIG_BCM_PCI=y
-CONFIG_BCM_ATMAPI=y
-CONFIG_BCM_ATMTEST=m
-CONFIG_BCM_ADSL=y
-CONFIG_BCM_ENDPOINT=m
-CONFIG_BCM_PROCFS=m
-CONFIG_BCM_VDSL=m
-CONFIG_BCM_SECURITY=m
-CONFIG_BCM_HPNA=m
-CONFIG_BCM_BOARD_IMPL=1
-CONFIG_BCM_SERIAL_IMPL=1
-CONFIG_BCM_ENET_IMPL=2
-CONFIG_BCM_USB_IMPL=2
-CONFIG_BCM_WLAN_IMPL=1
-CONFIG_BCM_ATMAPI_IMPL=1
-CONFIG_BCM_ATMTEST_IMPL=1
-CONFIG_BCM_BLAA_IMPL=1
-CONFIG_BCM_ADSL_IMPL=1
-CONFIG_BCM_ENDPOINT_IMPL=1
-CONFIG_BCM_PROCFS_IMPL=1
-CONFIG_BCM_VDSL_IMPL=1
-CONFIG_BCM_SECURITY_IMPL=1
-CONFIG_BCM_HPNA_IMPL=0
-# CONFIG_ROOTFS_SQUASHFS is not set
-CONFIG_ROOTFS_CRAMFS=y
-# CONFIG_ROOTFS_JFFS2 is not set
-# CONFIG_ROOTFS_NFS is not set
-CONFIG_ROOT_FLASHFS="root=31:0 ro noinitrd"
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_BAGET_MIPS is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_MIPS_MTX1 is not set
+# CONFIG_MIPS_BOSPORUS is not set
+# CONFIG_MIPS_PB1000 is not set
+# CONFIG_MIPS_PB1100 is not set
+# CONFIG_MIPS_PB1500 is not set
+# CONFIG_MIPS_PB1550 is not set
+# CONFIG_MIPS_PB1200 is not set
+# CONFIG_MIPS_DB1000 is not set
+# CONFIG_MIPS_DB1100 is not set
+# CONFIG_MIPS_DB1500 is not set
+# CONFIG_MIPS_DB1550 is not set
+# CONFIG_MIPS_DB1200 is not set
+# CONFIG_MIPS_MIRAGE is not set
# CONFIG_MIPS_COBALT is not set
# CONFIG_MACH_DECSTATION is not set
# CONFIG_MIPS_EV64120 is not set
# CONFIG_MIPS_EV96100 is not set
# CONFIG_MIPS_IVR is not set
-# CONFIG_LASAT is not set
# CONFIG_MIPS_ITE8172 is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_LASAT is not set
# CONFIG_MIPS_ATLAS is not set
# CONFIG_MIPS_MALTA is not set
# CONFIG_MIPS_SEAD is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MOMENCO_JAGUAR_ATX is not set
# CONFIG_MOMENCO_OCELOT is not set
-# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MOMENCO_OCELOT_3 is not set
# CONFIG_MOMENCO_OCELOT_C is not set
-# CONFIG_MOMENCO_JAGUAR_ATX is not set
-# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_MOMENCO_OCELOT_G is not set
+# CONFIG_MIPS_XXS1500 is not set
+# CONFIG_PNX8550_V2PCI is not set
+# CONFIG_PNX8550_JBS is not set
# CONFIG_DDB5074 is not set
# CONFIG_DDB5476 is not set
# CONFIG_DDB5477 is not set
-# CONFIG_NEC_OSPREY is not set
+# CONFIG_MACH_VR41XX is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_QEMU is not set
# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
# CONFIG_SGI_IP32 is not set
-# CONFIG_SOC_AU1X00 is not set
-# CONFIG_SIBYTE_SB1xxx_SOC is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_PTSWARM is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CRHONE is not set
# CONFIG_SNI_RM200_PCI is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+# CONFIG_BCM96338 is not set
+# CONFIG_BCM96345 is not set
+CONFIG_BCM96348=y
+# CONFIG_BCM_BOARD is not set
+CONFIG_BCM_SERIAL=y
+# CONFIG_BCM_ENET is not set
+# CONFIG_BCM_USB is not set
+# CONFIG_BCM_WLAN is not set
+# CONFIG_BCM_PCI is not set
+# CONFIG_BCM_ATMAPI is not set
+# CONFIG_BCM_ATMTEST is not set
+# CONFIG_BCM_ADSL is not set
+# CONFIG_BCM_ENDPOINT is not set
+CONFIG_BCM_PROCFS=y
+# CONFIG_BCM_VDSL is not set
+# CONFIG_BCM_SECURITY is not set
+# CONFIG_BCM_HPNA is not set
+CONFIG_BCM_BOARD_IMPL=1
+CONFIG_BCM_SERIAL_IMPL=1
+CONFIG_BCM_ENET_IMPL=1
+CONFIG_BCM_USB_IMPL=1
+CONFIG_BCM_WLAN_IMPL=1
+CONFIG_BCM_ATMAPI_IMPL=1
+CONFIG_BCM_ATMTEST_IMPL=1
+CONFIG_BCM_BLAA_IMPL=1
+CONFIG_BCM_ADSL_IMPL=1
+CONFIG_BCM_ENDPOINT_IMPL=1
+CONFIG_BCM_PROCFS_IMPL=1
+CONFIG_BCM_VDSL_IMPL=1
+CONFIG_BCM_SECURITY_IMPL=1
+CONFIG_BCM_HPNA_IMPL=0
+CONFIG_ROOTFS_SQUASHFS=y
+# CONFIG_ROOTFS_CRAMFS is not set
+# CONFIG_ROOTFS_JFFS2 is not set
+# CONFIG_ROOTFS_NFS is not set
+CONFIG_ROOT_FLASHFS="root=/dev/mtdblock2 rootfstype=cramfs,squashfs,jffs2 noinitrd console=ttyS0,115200"
CONFIG_RWSEM_GENERIC_SPINLOCK=y
-CONFIG_HAVE_DEC_LOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_DMA_NONCOHERENT=y
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+CONFIG_CPU_BIG_ENDIAN=y
# CONFIG_CPU_LITTLE_ENDIAN is not set
+CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
+CONFIG_IRQ_CPU=y
CONFIG_MIPS_L1_CACHE_SHIFT=5
-# CONFIG_FB is not set
#
# CPU selection
#
-CONFIG_CPU_MIPS32=y
-# CONFIG_CPU_MIPS64 is not set
+CONFIG_CPU_MIPS32_R1=y
+# CONFIG_CPU_MIPS32_R2 is not set
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
# CONFIG_CPU_R3000 is not set
# CONFIG_CPU_TX39XX is not set
# CONFIG_CPU_VR41XX is not set
@@ -143,37 +132,132 @@ CONFIG_CPU_MIPS32=y
# CONFIG_CPU_RM7000 is not set
# CONFIG_CPU_RM9000 is not set
# CONFIG_CPU_SB1 is not set
+CONFIG_SYS_HAS_CPU_MIPS32_R1=y
+CONFIG_CPU_MIPS32=y
+CONFIG_CPU_MIPSR1=y
+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+
+#
+# Kernel type
+#
+CONFIG_32BIT=y
+# CONFIG_64BIT is not set
CONFIG_PAGE_SIZE_4KB=y
# CONFIG_PAGE_SIZE_8KB is not set
# CONFIG_PAGE_SIZE_16KB is not set
# CONFIG_PAGE_SIZE_64KB is not set
CONFIG_CPU_HAS_PREFETCH=y
-# CONFIG_VTAG_ICACHE is not set
+# CONFIG_MIPS_MT is not set
# CONFIG_64BIT_PHYS_ADDR is not set
# CONFIG_CPU_ADVANCED is not set
CONFIG_CPU_HAS_LLSC=y
CONFIG_CPU_HAS_SYNC=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+CONFIG_AUDIT=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+# CONFIG_FUTEX is not set
+# CONFIG_EPOLL is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+CONFIG_LBD=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
#
# Bus options (PCI, PCMCIA, EISA, ISA, TC)
#
-CONFIG_PCI=y
-CONFIG_PCI_LEGACY_PROC=y
-CONFIG_PCI_NAMES=y
+CONFIG_HW_HAS_PCI=y
+# CONFIG_PCI is not set
CONFIG_MMU=y
#
-# PCMCIA/CardBus support
+# PCCARD (PCMCIA/CardBus) support
#
-# CONFIG_PCMCIA is not set
+# CONFIG_PCCARD is not set
#
# PCI Hotplug Support
#
-# CONFIG_HOTPLUG_PCI is not set
#
# Executable file formats
@@ -181,7 +265,79 @@ CONFIG_MMU=y
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_TRAD_SIGNALS=y
-# CONFIG_BINFMT_IRIX is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
#
# Device Drivers
@@ -190,31 +346,39 @@ CONFIG_TRAD_SIGNALS=y
#
# Generic Driver Options
#
-# CONFIG_STANDALONE is not set
+CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=m
# CONFIG_DEBUG_DRIVER is not set
#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
# Memory Technology Devices (MTD)
#
CONFIG_MTD=y
-# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=3
+CONFIG_MTD_CONCAT=y
CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_CONCAT is not set
CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
CONFIG_MTD_REDBOOT_PARTS_READONLY=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
#
# User Modules And Translation Layers
#
-# CONFIG_MTD_CHAR is not set
+CONFIG_MTD_CHAR=y
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
#
# RAM/ROM/Flash chip drivers
@@ -241,6 +405,7 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
#
# Mapping drivers for chip access
@@ -248,16 +413,16 @@ CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_COMPLEX_MAPPINGS=y
# CONFIG_MTD_PHYSMAP is not set
CONFIG_MTD_BCM963XX=y
-# CONFIG_MTD_PCI is not set
+# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
-# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
#
# Disk-On-Chip Device Drivers
@@ -272,6 +437,11 @@ CONFIG_MTD_BCM963XX=y
# CONFIG_MTD_NAND is not set
#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
# Parallel port support
#
# CONFIG_PARPORT is not set
@@ -283,16 +453,13 @@ CONFIG_MTD_BCM963XX=y
#
# Block devices
#
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
# CONFIG_BLK_DEV_LOOP is not set
# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_LBD is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
#
# ATA/ATAPI/MFM/RLL support
@@ -302,6 +469,7 @@ CONFIG_MTD_BCM963XX=y
#
# SCSI device support
#
+# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
#
@@ -312,291 +480,61 @@ CONFIG_MTD_BCM963XX=y
#
# Fusion MPT device support
#
+# CONFIG_FUSION is not set
#
# IEEE 1394 (FireWire) support
#
-# CONFIG_IEEE1394 is not set
#
# I2O device support
#
-# CONFIG_I2O is not set
-
-#
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-CONFIG_IP_MROUTE=y
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_FTP=y
-CONFIG_IP_NF_H323=y
-CONFIG_IP_NF_IRC=y
-CONFIG_IP_NF_TFTP=y
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_DTX8 is not set
-CONFIG_IP_NF_WM=m
-CONFIG_IP_NF_PT=m
-CONFIG_IP_NF_IPSEC=m
-# CONFIG_IP_NF_RTSP is not set
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_LIMIT=y
-CONFIG_IP_NF_MATCH_IPRANGE=y
-CONFIG_IP_NF_MATCH_MAC=y
-# CONFIG_IP_NF_MATCH_PKTTYPE is not set
-CONFIG_IP_NF_MATCH_MARK=y
-# CONFIG_IP_NF_MATCH_MULTIPORT is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_DSCP is not set
-# CONFIG_IP_NF_MATCH_AH_ESP is not set
-# CONFIG_IP_NF_MATCH_LENGTH is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_MATCH_TCPMSS is not set
-# CONFIG_IP_NF_MATCH_HELPER is not set
-CONFIG_IP_NF_MATCH_STATE=y
-# CONFIG_IP_NF_MATCH_CONNTRACK is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_NAT=y
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=y
-CONFIG_IP_NF_TARGET_REDIRECT=y
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_SAME is not set
-CONFIG_IP_NF_NAT_LOCAL=y
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-CONFIG_IP_NF_NAT_IRC=y
-CONFIG_IP_NF_NAT_FTP=y
-CONFIG_IP_NF_NAT_H323=y
-CONFIG_IP_NF_NAT_TFTP=y
-CONFIG_IP_NF_NAT_IPSEC=m
-CONFIG_IP_NF_MANGLE=y
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_FTOS is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_DSCP is not set
-CONFIG_IP_NF_TARGET_MARK=y
-# CONFIG_IP_NF_TARGET_CLASSIFY is not set
-CONFIG_IP_NF_TARGET_LOG=y
-# CONFIG_IP_NF_TARGET_ULOG is not set
-CONFIG_IP_NF_TARGET_TCPMSS=y
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_REALM is not set
-# CONFIG_IP_NF_PPTP is not set
-
-#
-# Bridge: Netfilter Configuration
-#
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-CONFIG_ATM=y
-CONFIG_ATM_CLIP=y
-# CONFIG_ATM_CLIP_NO_ICMP is not set
-# CONFIG_ATM_LANE is not set
-CONFIG_ATM_BR2684=y
-# CONFIG_ATM_BR2684_IPFILTER is not set
-CONFIG_ATM_RT2684=y
-CONFIG_BRIDGE=y
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_NET_HW_FLOWCONTROL is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
#
-# Network testing
+# Network device support
#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIUSB=m
-CONFIG_BT_HCIUSB_SCO=y
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_H4=y
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_BCSP_TXCRC=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIVHCI=m
CONFIG_NETDEVICES=y
-CONFIG_DUMMY=m
-CONFIG_BONDING=m
-CONFIG_EQUALIZER=m
-CONFIG_TUN=m
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
#
-# ARCnet devices
+# PHY device support
#
-# CONFIG_ARCNET is not set
#
# Ethernet (10 or 100Mbit)
#
-CONFIG_NET_ETHERNET=y
-CONFIG_MII=m
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_NET_VENDOR_3COM is not set
-
-#
-# Tulip family network device support
-#
-# CONFIG_NET_TULIP is not set
-# CONFIG_HP100 is not set
-# CONFIG_NET_PCI is not set
+# CONFIG_NET_ETHERNET is not set
#
# Ethernet (1000 Mbit)
#
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-# CONFIG_E1000 is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_TIGON3 is not set
#
# Ethernet (10000 Mbit)
#
-# CONFIG_IXGB is not set
-# CONFIG_S2IO is not set
#
# Token Ring devices
#
-# CONFIG_TR is not set
#
# Wireless LAN (non-hamradio)
#
-CONFIG_NET_RADIO=y
-
-#
-# Obsolete Wireless cards support (pre-802.11)
-#
-# CONFIG_STRIP is not set
-
-#
-# Wireless 802.11b ISA/PCI cards support
-#
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-
-#
-# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
-#
-# CONFIG_PRISM54 is not set
-CONFIG_NET_WIRELESS=y
+# CONFIG_NET_RADIO is not set
#
# Wan interfaces
#
# CONFIG_WAN is not set
-
-#
-# ATM drivers
-#
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-CONFIG_PPP=y
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPPOE=y
-CONFIG_PPPOATM=y
+# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_SHAPER is not set
# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
#
# ISDN subsystem
@@ -611,73 +549,30 @@ CONFIG_PPPOATM=y
#
# Input device support
#
-CONFIG_INPUT=y
+# CONFIG_INPUT is not set
#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input I/O drivers
+# Hardware I/O ports
#
+# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
#
# Character devices
#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
+# CONFIG_VT is not set
# CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
+# CONFIG_SERIAL_8250 is not set
#
# Non-8250 serial port support
#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=2
-# CONFIG_QIC02_TAPE is not set
+# CONFIG_LEGACY_PTYS is not set
#
# IPMI
@@ -692,30 +587,51 @@ CONFIG_LEGACY_PTY_COUNT=2
# CONFIG_GEN_RTC is not set
# CONFIG_DTLK is not set
# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
#
# Ftape, the floppy tape device driver
#
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
# CONFIG_RAW_DRIVER is not set
#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
# I2C support
#
# CONFIG_I2C is not set
#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
# Dallas's 1-wire bus
#
# CONFIG_W1 is not set
#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
# Misc devices
#
#
+# Multimedia Capabilities Port drivers
+#
+
+#
# Multimedia devices
#
# CONFIG_VIDEO_DEV is not set
@@ -728,13 +644,7 @@ CONFIG_LEGACY_PTY_COUNT=2
#
# Graphics support
#
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB is not set
#
# Sound
@@ -744,122 +654,49 @@ CONFIG_DUMMY_CONSOLE=y
#
# USB support
#
-CONFIG_USB=m
-# CONFIG_USB_DEBUG is not set
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_BANDWIDTH=y
-CONFIG_USB_DYNAMIC_MINORS=y
-
-#
-# USB Host Controller Drivers
-#
-CONFIG_USB_EHCI_HCD=m
-CONFIG_USB_EHCI_SPLIT_ISO=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_UHCI_HCD=m
-
-#
-# USB Device Class drivers
-#
-
-#
-# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
-#
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_STORAGE is not set
-
-#
-# USB Human Interface Devices (HID)
-#
-# CONFIG_USB_HID is not set
-
-#
-# USB HID Boot Protocol drivers
-#
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_AIPTEK is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_EGALAX is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_ATI_REMOTE is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
#
-# USB Multimedia devices
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
#
-# CONFIG_USB_DABUSB is not set
#
-# Video4Linux support is needed for USB Multimedia device support
-#
-
-#
-# USB Network adaptors
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-
-#
-# USB port drivers
+# USB Gadget Support
#
+# CONFIG_USB_GADGET is not set
#
-# USB Serial Converter support
+# MMC/SD Card support
#
-# CONFIG_USB_SERIAL is not set
+# CONFIG_MMC is not set
#
-# USB Miscellaneous drivers
+# InfiniBand support
#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_TIGL is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_PHIDGETSERVO is not set
-# CONFIG_USB_TEST is not set
#
-# USB Gadget Support
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
#
-# CONFIG_USB_GADGET is not set
#
# File systems
#
# CONFIG_EXT2_FS is not set
# CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
# CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
#
# CD-ROM/DVD Filesystems
@@ -880,13 +717,11 @@ CONFIG_USB_UHCI_HCD=m
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
#
# Miscellaneous filesystems
@@ -899,11 +734,15 @@ CONFIG_RAMFS=y
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set
-# CONFIG_JFFS2_FS is not set
-# CONFIG_SQUASHFS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
CONFIG_CRAMFS=y
-# CONFIG_LZMA_FS_INFLATE is not set
-CONFIG_ZLIB_FS_INFLATE=y
# CONFIG_VXFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
@@ -915,41 +754,113 @@ CONFIG_ZLIB_FS_INFLATE=y
#
# CONFIG_NFS_FS is not set
# CONFIG_NFSD is not set
-# CONFIG_EXPORTFS is not set
# CONFIG_SMB_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
#
# Partition Types
#
-# CONFIG_PARTITION_ADVANCED is not set
-# CONFIG_MSDOS_PARTITION is not set
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
#
# Native Language Support
#
-# CONFIG_NLS is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+CONFIG_NLS_ISO8859_15=m
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
#
# Kernel hacking
#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_VM=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_CROSSCOMPILE=y
CONFIG_CMDLINE=""
-CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_SLAB is not set
# CONFIG_KGDB is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_RUNTIME_DEBUG is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MIPS_UNCACHED is not set
+CONFIG_RUNTIME_DEBUG=y
+CONFIG_MIPS_UNCACHED=y
#
# Security options
#
+# CONFIG_KEYS is not set
# CONFIG_SECURITY is not set
#
@@ -957,32 +868,40 @@ CONFIG_DEBUG_KERNEL=y
#
CONFIG_CRYPTO=y
CONFIG_CRYPTO_HMAC=y
-CONFIG_CRYPTO_NULL=m
-CONFIG_CRYPTO_MD4=m
-CONFIG_CRYPTO_MD5=m
-CONFIG_CRYPTO_SHA1=m
-CONFIG_CRYPTO_SHA256=m
-CONFIG_CRYPTO_SHA512=m
-CONFIG_CRYPTO_DES=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_SERPENT=m
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_CAST5=m
-CONFIG_CRYPTO_CAST6=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_ARC4=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_DEFLATE=m
-CONFIG_CRYPTO_MICHAEL_MIC=m
-CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set
#
+# Hardware crypto devices
+#
+
+#
# Library routines
#
CONFIG_CRC_CCITT=y
-CONFIG_CRC32=m
-CONFIG_LIBCRC32C=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
+CONFIG_ZLIB_DEFLATE=y
diff --git a/target/linux/brcm63xx-2.6/patches/000-arch_mips.patch b/target/linux/brcm63xx-2.6/patches/000-arch_mips.patch
new file mode 100644
index 0000000000..bcb3469769
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/000-arch_mips.patch
@@ -0,0 +1,143 @@
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/Kconfig linux-2.6.16.7-patched/arch/mips/Kconfig
+--- linux-2.6.16.7-generic-patched/arch/mips/Kconfig 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/Kconfig 2006-07-05 15:21:58.000000000 +0200
+@@ -10,7 +10,16 @@ menu "Machine selection"
+
+ choice
+ prompt "System type"
+- default SGI_IP22
++ default MIPS_BRCM
++
++config MIPS_BRCM
++ bool "Support for the Broadcom boards"
++ select SYS_SUPPORTS_32BIT_KERNEL
++ select SYS_SUPPORTS_BIG_ENDIAN
++ select SYS_HAS_CPU_MIPS32_R1
++ select IRQ_CPU
++ help
++ This is a fmaily of boards based on the Broadcom MIPS32
+
+ config MIPS_MTX1
+ bool "Support for 4G Systems MTX-1 board"
+@@ -777,6 +786,7 @@ config TOSHIBA_RBTX4938
+
+ endchoice
+
++source "arch/mips/brcm-boards/bcm963xx/Kconfig"
+ source "arch/mips/ddb5xxx/Kconfig"
+ source "arch/mips/gt64120/ev64120/Kconfig"
+ source "arch/mips/jazz/Kconfig"
+@@ -1046,7 +1056,7 @@ menu "CPU selection"
+
+ choice
+ prompt "CPU type"
+- default CPU_R4X00
++ default CPU_MIPS32_R1
+
+ config CPU_MIPS32_R1
+ bool "MIPS32 Release 1"
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/Makefile linux-2.6.16.7-patched/arch/mips/Makefile
+--- linux-2.6.16.7-generic-patched/arch/mips/Makefile 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/Makefile 2006-07-05 15:21:58.000000000 +0200
+@@ -279,6 +279,20 @@ libs-$(CONFIG_SIBYTE_CFE) += arch/mips/s
+ #
+
+ #
++# Broadcom board
++#
++core-$(CONFIG_MIPS_BRCM) += arch/mips/brcm-boards/generic/ arch/mips/brcm-boards/bcm963xx/
++core-$(CONFIG_MIPS_BRCM) += bcmdrivers/opensource/char/serial/impl1/
++#core-$(CONFIG_MIPS_BRCM) += bcmdrivers/opensource/char/board/bcm963xx/impl1/
++#core-$(CONFIG_MIPS_BRCM) += boardparms/bcm963xx/
++cflags-$(CONFIG_MIPS_BRCM) += -Iinclude/asm-mips/mach-bcm963xx
++cflags-$(CONFIG_MIPS_BRCM) += -Iarch/mips/brcm-boards/generic/include
++cflags-$(CONFIG_MIPS_BRCM) += -Ibcmdrivers/opensource/include/bcm963xx
++cflags-$(CONFIG_MIPS_BRCM) += -Iboardparms/bcm963xx
++load-$(CONFIG_MIPS_BRCM) += 0xffffffff80010000
++
++
++#
+ # Acer PICA 61, Mips Magnum 4000 and Olivetti M700.
+ #
+ core-$(CONFIG_MACH_JAZZ) += arch/mips/jazz/
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/kernel/cpu-probe.c linux-2.6.16.7-patched/arch/mips/kernel/cpu-probe.c
+--- linux-2.6.16.7-generic-patched/arch/mips/kernel/cpu-probe.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/kernel/cpu-probe.c 2006-07-05 15:21:58.000000000 +0200
+@@ -558,6 +558,25 @@ static inline void decode_configs(struct
+ return;
+ }
+
++static inline void cpu_probe_broadcom(struct cpuinfo_mips *c)
++{
++ decode_configs(c);
++ switch (c->processor_id & 0xff00) {
++ case PRID_IMP_BCM6338:
++ c->cputype = CPU_BCM6338;
++ break;
++ case PRID_IMP_BCM6345:
++ c->cputype = CPU_BCM6345;
++ break;
++ case PRID_IMP_BCM6348:
++ c->cputype = CPU_BCM6348;
++ break;
++ default:
++ c->cputype = CPU_UNKNOWN;
++ break;
++ }
++}
++
+ static inline void cpu_probe_mips(struct cpuinfo_mips *c)
+ {
+ decode_configs(c);
+@@ -691,6 +710,9 @@ __init void cpu_probe(void)
+ case PRID_COMP_LEGACY:
+ cpu_probe_legacy(c);
+ break;
++ case PRID_COMP_BROADCOM:
++ cpu_probe_broadcom(c);
++ break;
+ case PRID_COMP_MIPS:
+ cpu_probe_mips(c);
+ break;
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/kernel/proc.c linux-2.6.16.7-patched/arch/mips/kernel/proc.c
+--- linux-2.6.16.7-generic-patched/arch/mips/kernel/proc.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/kernel/proc.c 2006-07-05 15:21:58.000000000 +0200
+@@ -81,6 +81,9 @@ static const char *cpu_name[] = {
+ [CPU_VR4133] = "NEC VR4133",
+ [CPU_VR4181] = "NEC VR4181",
+ [CPU_VR4181A] = "NEC VR4181A",
++ [CPU_BCM6338] = "BCM6338",
++ [CPU_BCM6345] = "BCM6345",
++ [CPU_BCM6348] = "BCM6348",
+ [CPU_SR71000] = "Sandcraft SR71000",
+ [CPU_PR4450] = "Philips PR4450",
+ };
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/mm/c-r4k.c linux-2.6.16.7-patched/arch/mips/mm/c-r4k.c
+--- linux-2.6.16.7-generic-patched/arch/mips/mm/c-r4k.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/mm/c-r4k.c 2006-07-05 15:21:58.000000000 +0200
+@@ -889,6 +889,12 @@ static void __init probe_pcache(void)
+ if (!(config & MIPS_CONF_M))
+ panic("Don't know how to probe P-caches on this cpu.");
+
++ if (c->cputype == CPU_BCM6338 || c->cputype == CPU_BCM6345 || c->cputype == CPU_BCM6348){
++ printk("brcm mips: enabling icache and dcache...\n");
++ /* Enable caches */
++ write_c0_diag(read_c0_diag() | 0xC0000000);
++ }
++
+ /*
+ * So we seem to be a MIPS32 or MIPS64 CPU
+ * So let's probe the I-cache ...
+diff -Naurp -x brcm-boards -x pci linux-2.6.16.7-generic-patched/arch/mips/mm/tlbex.c linux-2.6.16.7-patched/arch/mips/mm/tlbex.c
+--- linux-2.6.16.7-generic-patched/arch/mips/mm/tlbex.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/mm/tlbex.c 2006-07-05 15:21:58.000000000 +0200
+@@ -858,6 +858,9 @@ static __init void build_tlb_write_entry
+ case CPU_4KSC:
+ case CPU_20KC:
+ case CPU_25KF:
++ case CPU_BCM6338:
++ case CPU_BCM6345:
++ case CPU_BCM6348:
+ tlbw(p);
+ break;
+
diff --git a/target/linux/brcm63xx-2.6/patches/001-bcm963xx.patch b/target/linux/brcm63xx-2.6/patches/001-bcm963xx.patch
deleted file mode 100644
index 2565ba8c70..0000000000
--- a/target/linux/brcm63xx-2.6/patches/001-bcm963xx.patch
+++ /dev/null
@@ -1,48189 +0,0 @@
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/Kconfig linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/Kconfig
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/Kconfig 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,169 @@
-+# Kernel and Driver configuration for Broadcom Commengine ADSL board
-+choice
-+ prompt "Broadcom Commengine ADSL board"
-+ depends on MIPS_BRCM
-+ default BCM96345
-+ help
-+ Select different Broadcom ADSL board
-+
-+config BCM96338
-+ bool "96338 ADSL board"
-+ select DMA_NONCOHERENT
-+
-+config BCM96345
-+ bool "96345 ADSL board"
-+ select DMA_NONCOHERENT
-+
-+config BCM96348
-+ bool "96348 ADSL board"
-+ select DMA_NONCOHERENT
-+
-+endchoice
-+
-+config BCM_BOARD
-+ bool "Support for Broadcom Board"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_SERIAL
-+ bool "Support for Serial Port"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ENET
-+ tristate "Support for Ethernet"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_USB
-+ tristate "Support for USB"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_WLAN
-+ tristate "Support for Wireless"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_PCI
-+ bool "Support for PCI"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+ select PCI
-+
-+config BCM_ATMAPI
-+ tristate "Support for ATM"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ATMTEST
-+ tristate "Support for ATM Diagnostic"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ADSL
-+ tristate "Support for ADSL"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ENDPOINT
-+ tristate "Support for VOICE"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_PROCFS
-+ tristate "Support for PROCFS"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_VDSL
-+ tristate "Support for VDSL"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_SECURITY
-+ tristate "Support for SECURITY"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_HPNA
-+ tristate "Support for HPNA"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_BOARD_IMPL
-+ int "Implementation index for ADSL Board"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_SERIAL_IMPL
-+ int "Implementation index for Serial"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ENET_IMPL
-+ int "Implementation index for Ethernet"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_USB_IMPL
-+ int "Implementation index for USB"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_WLAN_IMPL
-+ int "Implementation index for WIRELESS"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ATMAPI_IMPL
-+ int "Implementation index for ATM"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ATMTEST_IMPL
-+ int "Implementation index for ATM Diagnostic"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_BLAA_IMPL
-+ int "Implementation index for BLAA"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ADSL_IMPL
-+ int "Implementation index for ADSL"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_ENDPOINT_IMPL
-+ int "Implementation index for VOICE"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_PROCFS_IMPL
-+ int "Implementation index for PROCFS"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_VDSL_IMPL
-+ int "Implementation index for VDSL"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_SECURITY_IMPL
-+ int "Implementation index for SECURITY"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+config BCM_HPNA_IMPL
-+ int "Implementation index for HPNA"
-+ depends on BCM96338 || BCM96345 || BCM96348
-+
-+choice
-+ prompt "Root File System"
-+ depends on MIPS_BRCM
-+ default ROOTFS_SQUASHFS
-+ help
-+ Select root file system on the board flash.
-+
-+config ROOTFS_SQUASHFS
-+ bool "SQUASHFS"
-+config ROOTFS_CRAMFS
-+ bool "CRAMFS"
-+config ROOTFS_JFFS2
-+ bool "JFFS2"
-+config ROOTFS_NFS
-+ bool "NFS"
-+
-+endchoice
-+
-+config ROOT_FLASHFS
-+ string "flash partition"
-+ depends on ROOTFS_SQUASHFS || ROOTFS_CRAMFS || ROOTFS_JFFS2
-+ default "root=31:0 ro noinitrd" if ROOTFS_SQUASHFS = y || ROOTFS_CRAMFS = y
-+ default "root=31:2 ro noinitrd" if ROOTFS_JFFS2 = y
-+ help
-+ This is the root file system partition on flash memory
-+
-+config ROOT_NFS_DIR
-+ string "NFS server path"
-+ depends on ROOTFS_NFS
-+ default "/opt/bcm96338/targets/96338R/fs" if BCM96338 = y
-+ default "/opt/bcm96345/targets/96345R/fs" if BCM96345 = y
-+ default "/opt/bcm96348/targets/96348R/fs" if BCM96348 = y
-+ help
-+ This is the path of NFS server (host system)
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/Makefile linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/Makefile
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/Makefile 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,23 @@
-+#
-+# Makefile for generic Broadcom MIPS boards
-+#
-+# Copyright (C) 2004 Broadcom Corporation
-+#
-+obj-y := irq.o prom.o setup.o time.o ser_init.o
-+
-+SRCBASE := $(TOPDIR)
-+EXTRA_CFLAGS += -I$(INC_BRCMBOARDPARMS_PATH)/$(BRCM_BOARD) -I$(SRCBASE)/include -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+#EXTRA_CFLAGS += -I$(INC_ADSLDRV_PATH) -DDBG
-+EXTRA_CFLAGS += -I$(INC_ADSLDRV_PATH)
-+
-+
-+ifeq "$(ADSL)" "ANNEX_B"
-+EXTRA_CFLAGS += -DADSL_ANNEXB
-+endif
-+ifeq "$(ADSL)" "SADSL"
-+EXTRA_CFLAGS += -DADSL_SADSL
-+endif
-+ifeq "$(ADSL)" "ANNEX_C"
-+EXTRA_CFLAGS += -DADSL_ANNEXC
-+endif
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/irq.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/irq.c
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/irq.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/irq.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,276 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * Interrupt control functions for Broadcom 963xx MIPS boards
-+ */
-+
-+#include <asm/atomic.h>
-+
-+#include <linux/delay.h>
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/irq.h>
-+#include <linux/interrupt.h>
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+
-+#include <asm/irq.h>
-+#include <asm/mipsregs.h>
-+#include <asm/addrspace.h>
-+#include <asm/signal.h>
-+#include <bcm_map_part.h>
-+#include <bcm_intr.h>
-+
-+extern asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs);
-+
-+static void irq_dispatch_int(struct pt_regs *regs)
-+{
-+ unsigned int pendingIrqs;
-+ static unsigned int irqBit;
-+ static unsigned int isrNumber = 31;
-+
-+ pendingIrqs = PERF->IrqStatus & PERF->IrqMask;
-+ if (!pendingIrqs) {
-+ return;
-+ }
-+
-+ while (1) {
-+ irqBit <<= 1;
-+ isrNumber++;
-+ if (isrNumber == 32) {
-+ isrNumber = 0;
-+ irqBit = 0x1;
-+ }
-+ if (pendingIrqs & irqBit) {
-+ PERF->IrqMask &= ~irqBit; // mask
-+ do_IRQ(isrNumber + INTERNAL_ISR_TABLE_OFFSET, regs);
-+ break;
-+ }
-+ }
-+}
-+
-+static void irq_dispatch_ext(uint32 irq, struct pt_regs *regs)
-+{
-+ if (!(PERF->ExtIrqCfg & (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT)))) {
-+ printk("**** Ext IRQ mask. Should not dispatch ****\n");
-+ }
-+ /* disable and clear interrupt in the controller */
-+ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT));
-+ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
-+ do_IRQ(irq, regs);
-+}
-+
-+void brcm_irq_dispatch(struct pt_regs *regs)
-+{
-+ u32 cause;
-+ while((cause = (read_c0_cause()& CAUSEF_IP))) {
-+ if (cause & CAUSEF_IP7)
-+ do_IRQ(MIPS_TIMER_INT, regs);
-+ else if (cause & CAUSEF_IP2)
-+ irq_dispatch_int(regs);
-+ else if (cause & CAUSEF_IP3)
-+ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_0, regs);
-+ else if (cause & CAUSEF_IP4)
-+ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_1, regs);
-+ else if (cause & CAUSEF_IP5)
-+ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_2, regs);
-+ else if (cause & CAUSEF_IP6)
-+ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_3, regs);
-+ cli();
-+ }
-+}
-+
-+
-+void enable_brcm_irq(unsigned int irq)
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+ if( irq >= INTERNAL_ISR_TABLE_OFFSET ) {
-+ PERF->IrqMask |= (1 << (irq - INTERNAL_ISR_TABLE_OFFSET));
-+ }
-+ else if (irq >= INTERRUPT_ID_EXTERNAL_0 && irq <= INTERRUPT_ID_EXTERNAL_3) {
-+ /* enable and clear interrupt in the controller */
-+ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT));
-+ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
-+ }
-+ local_irq_restore(flags);
-+}
-+
-+void disable_brcm_irq(unsigned int irq)
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+ if( irq >= INTERNAL_ISR_TABLE_OFFSET ) {
-+ PERF->IrqMask &= ~(1 << (irq - INTERNAL_ISR_TABLE_OFFSET));
-+ }
-+ else if (irq >= INTERRUPT_ID_EXTERNAL_0 && irq <= INTERRUPT_ID_EXTERNAL_3) {
-+ /* disable interrupt in the controller */
-+ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
-+ }
-+ local_irq_restore(flags);
-+}
-+
-+void ack_brcm_irq(unsigned int irq)
-+{
-+ /* Already done in brcm_irq_dispatch */
-+}
-+
-+unsigned int startup_brcm_irq(unsigned int irq)
-+{
-+ enable_brcm_irq(irq);
-+
-+ return 0; /* never anything pending */
-+}
-+
-+unsigned int startup_brcm_none(unsigned int irq)
-+{
-+ return 0;
-+}
-+
-+void end_brcm_irq(unsigned int irq)
-+{
-+ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
-+ enable_brcm_irq(irq);
-+}
-+
-+void end_brcm_none(unsigned int irq)
-+{
-+}
-+
-+#define ALLINTS_NOTIMER (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4)
-+
-+static void __init brcm_irq_setup(void)
-+{
-+ extern asmlinkage void brcmIRQ(void);
-+
-+ clear_c0_status(ST0_BEV);
-+ set_except_vector(0, brcmIRQ);
-+ change_c0_status(ST0_IM, ALLINTS_NOTIMER);
-+
-+#ifdef CONFIG_REMOTE_DEBUG
-+ rs_kgdb_hook(0);
-+#endif
-+}
-+
-+static struct hw_interrupt_type brcm_irq_type = {
-+ .typename = "MIPS",
-+ .startup = startup_brcm_irq,
-+ .shutdown = disable_brcm_irq,
-+ .enable = enable_brcm_irq,
-+ .disable = disable_brcm_irq,
-+ .ack = ack_brcm_irq,
-+ .end = end_brcm_irq,
-+ .set_affinity = NULL
-+};
-+
-+static struct hw_interrupt_type brcm_irq_no_end_type = {
-+ .typename = "MIPS",
-+ .startup = startup_brcm_none,
-+ .shutdown = disable_brcm_irq,
-+ .enable = enable_brcm_irq,
-+ .disable = disable_brcm_irq,
-+ .ack = ack_brcm_irq,
-+ .end = end_brcm_none,
-+ .set_affinity = NULL
-+};
-+
-+void __init arch_init_irq(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < NR_IRQS; i++) {
-+ irq_desc[i].status = IRQ_DISABLED;
-+ irq_desc[i].action = 0;
-+ irq_desc[i].depth = 1;
-+ irq_desc[i].handler = &brcm_irq_type;
-+ }
-+
-+ brcm_irq_setup();
-+}
-+
-+int request_external_irq(unsigned int irq,
-+ FN_HANDLER handler,
-+ unsigned long irqflags,
-+ const char * devname,
-+ void *dev_id)
-+{
-+ unsigned long flags;
-+
-+ local_irq_save(flags);
-+
-+ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT)); // Clear
-+ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT)); // Mask
-+ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_INSENS_SHFT)); // Edge insesnsitive
-+ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_LEVEL_SHFT)); // Level triggered
-+ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_SENSE_SHFT)); // Low level
-+
-+ local_irq_restore(flags);
-+
-+ return( request_irq(irq, handler, irqflags, devname, dev_id) );
-+}
-+
-+/* VxWorks compatibility function(s). */
-+
-+unsigned int BcmHalMapInterrupt(FN_HANDLER pfunc, unsigned int param,
-+ unsigned int interruptId)
-+{
-+ int nRet = -1;
-+ char *devname;
-+
-+ devname = kmalloc(16, GFP_KERNEL);
-+ if (devname)
-+ sprintf( devname, "brcm_%d", interruptId );
-+
-+ /* Set the IRQ description to not automatically enable the interrupt at
-+ * the end of an ISR. The driver that handles the interrupt must
-+ * explicitly call BcmHalInterruptEnable or enable_brcm_irq. This behavior
-+ * is consistent with interrupt handling on VxWorks.
-+ */
-+ irq_desc[interruptId].handler = &brcm_irq_no_end_type;
-+
-+ if( interruptId >= INTERNAL_ISR_TABLE_OFFSET )
-+ {
-+ nRet = request_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT,
-+ devname, (void *) param );
-+ }
-+ else if (interruptId >= INTERRUPT_ID_EXTERNAL_0 && interruptId <= INTERRUPT_ID_EXTERNAL_3)
-+ {
-+ nRet = request_external_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT,
-+ devname, (void *) param );
-+ }
-+
-+ return( nRet );
-+}
-+
-+
-+/* Debug function. */
-+
-+void dump_intr_regs(void)
-+{
-+ printk("PERF->ExtIrqCfg [%08x]\n", *(&(PERF->ExtIrqCfg)));
-+}
-+
-+EXPORT_SYMBOL(enable_brcm_irq);
-+EXPORT_SYMBOL(disable_brcm_irq);
-+EXPORT_SYMBOL(request_external_irq);
-+EXPORT_SYMBOL(BcmHalMapInterrupt);
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/prom.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/prom.c
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/prom.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/prom.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,233 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * prom.c: PROM library initialization code.
-+ *
-+ */
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/sched.h>
-+#include <linux/bootmem.h>
-+#include <linux/blkdev.h>
-+#include <asm/addrspace.h>
-+#include <asm/bootinfo.h>
-+#include <asm/cpu.h>
-+#include <asm/time.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+#include "boardparms.h"
-+#include "softdsl/AdslCoreDefs.h"
-+
-+
-+extern int do_syslog(int, char *, int);
-+extern void serial_init(void);
-+extern void __init InitNvramInfo( void );
-+extern void kerSysFlashInit( void );
-+extern unsigned long get_nvram_start_addr(void);
-+void __init create_root_nfs_cmdline( char *cmdline );
-+
-+#if defined(CONFIG_BCM96338)
-+#define CPU_CLOCK 240000000
-+#define MACH_BCM MACH_BCM96338
-+#endif
-+#if defined(CONFIG_BCM96345)
-+#define CPU_CLOCK 140000000
-+#define MACH_BCM MACH_BCM96345
-+#endif
-+#if defined(CONFIG_BCM96348)
-+void __init calculateCpuSpeed(void);
-+static unsigned long cpu_speed;
-+#define CPU_CLOCK cpu_speed
-+#define MACH_BCM MACH_BCM96348
-+#endif
-+
-+const char *get_system_type(void)
-+{
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+
-+ return( pNvramData->szBoardId );
-+}
-+
-+unsigned long getMemorySize(void)
-+{
-+ unsigned long ulSdramType = BOARD_SDRAM_TYPE;
-+
-+ unsigned long ulSdramSize;
-+
-+ switch( ulSdramType )
-+ {
-+ case BP_MEMORY_16MB_1_CHIP:
-+ case BP_MEMORY_16MB_2_CHIP:
-+ ulSdramSize = 16 * 1024 * 1024;
-+ break;
-+ case BP_MEMORY_32MB_1_CHIP:
-+ case BP_MEMORY_32MB_2_CHIP:
-+ ulSdramSize = 32 * 1024 * 1024;
-+ break;
-+ case BP_MEMORY_64MB_2_CHIP:
-+ ulSdramSize = 64 * 1024 * 1024;
-+ break;
-+ default:
-+ ulSdramSize = 8 * 1024 * 1024;
-+ break;
-+ }
-+
-+ return ulSdramSize;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ Name: prom_init
-+ -------------------------------------------------------------------------- */
-+void __init prom_init(void)
-+{
-+ extern ulong r4k_interval;
-+
-+ serial_init();
-+
-+ kerSysFlashInit();
-+
-+ do_syslog(8, NULL, 8);
-+
-+ printk( "%s prom init\n", get_system_type() );
-+
-+ PERF->IrqMask = 0;
-+
-+ arcs_cmdline[0] = '\0';
-+
-+#if defined(CONFIG_ROOT_NFS)
-+ create_root_nfs_cmdline( arcs_cmdline );
-+#elif defined(CONFIG_ROOT_FLASHFS)
-+ strcpy(arcs_cmdline, CONFIG_ROOT_FLASHFS);
-+#endif
-+
-+ add_memory_region(0, (getMemorySize() - ADSL_SDRAM_IMAGE_SIZE), BOOT_MEM_RAM);
-+
-+#if defined(CONFIG_BCM96348)
-+ calculateCpuSpeed();
-+#endif
-+ /* Count register increments every other clock */
-+ r4k_interval = CPU_CLOCK / HZ / 2;
-+ mips_hpt_frequency = CPU_CLOCK / 2;
-+
-+ mips_machgroup = MACH_GROUP_BRCM;
-+ mips_machtype = MACH_BCM;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ Name: prom_free_prom_memory
-+Abstract:
-+ -------------------------------------------------------------------------- */
-+void __init prom_free_prom_memory(void)
-+{
-+
-+}
-+
-+
-+#if defined(CONFIG_ROOT_NFS)
-+/* This function reads in a line that looks something like this:
-+ *
-+ *
-+ * CFE bootline=bcmEnet(0,0)host:vmlinux e=192.169.0.100:ffffff00 h=192.169.0.1
-+ *
-+ *
-+ * and retuns in the cmdline parameter some that looks like this:
-+ *
-+ * CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.0.1:/opt/targets/96345R/fs
-+ * ip=192.168.0.100:192.168.0.1::255.255.255.0::eth0:off rw"
-+ */
-+#define BOOT_LINE_ADDR 0x0
-+#define HEXDIGIT(d) ((d >= '0' && d <= '9') ? (d - '0') : ((d | 0x20) - 'W'))
-+#define HEXBYTE(b) (HEXDIGIT((b)[0]) << 4) + HEXDIGIT((b)[1])
-+extern unsigned long get_nvram_start_addr(void);
-+
-+void __init create_root_nfs_cmdline( char *cmdline )
-+{
-+ char root_nfs_cl[] = "root=/dev/nfs nfsroot=%s:" CONFIG_ROOT_NFS_DIR
-+ " ip=%s:%s::%s::eth0:off rw";
-+
-+ char *localip = NULL;
-+ char *hostip = NULL;
-+ char mask[16] = "";
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+ char bootline[128] = "";
-+ char *p = bootline;
-+
-+ memcpy(bootline, pNvramData->szBootline, sizeof(bootline));
-+ while( *p )
-+ {
-+ if( p[0] == 'e' && p[1] == '=' )
-+ {
-+ /* Found local ip address */
-+ p += 2;
-+ localip = p;
-+ while( *p && *p != ' ' && *p != ':' )
-+ p++;
-+ if( *p == ':' )
-+ {
-+ /* Found network mask (eg FFFFFF00 */
-+ *p++ = '\0';
-+ sprintf( mask, "%u.%u.%u.%u", HEXBYTE(p), HEXBYTE(p + 2),
-+ HEXBYTE(p + 4), HEXBYTE(p + 6) );
-+ p += 4;
-+ }
-+ else if( *p == ' ' )
-+ *p++ = '\0';
-+ }
-+ else if( p[0] == 'h' && p[1] == '=' )
-+ {
-+ /* Found host ip address */
-+ p += 2;
-+ hostip = p;
-+ while( *p && *p != ' ' )
-+ p++;
-+ if( *p == ' ' )
-+ *p++ = '\0';
-+ }
-+ else
-+ p++;
-+ }
-+
-+ if( localip && hostip )
-+ sprintf( cmdline, root_nfs_cl, hostip, localip, hostip, mask );
-+}
-+#endif
-+
-+#if defined(CONFIG_BCM96348)
-+/* *********************************************************************
-+ * calculateCpuSpeed()
-+ * Calculate the BCM6348 CPU speed by reading the PLL strap register
-+ * and applying the following formula:
-+ * cpu_clk = (.25 * 64MHz freq) * (N1 + 1) * (N2 + 2) / (M1_CPU + 1)
-+ * Input parameters:
-+ * none
-+ * Return value:
-+ * none
-+ ********************************************************************* */
-+void __init calculateCpuSpeed(void)
-+{
-+ UINT32 pllStrap = PERF->PllStrap;
-+ int n1 = (pllStrap & PLL_N1_MASK) >> PLL_N1_SHFT;
-+ int n2 = (pllStrap & PLL_N2_MASK) >> PLL_N2_SHFT;
-+ int m1cpu = (pllStrap & PLL_M1_CPU_MASK) >> PLL_M1_CPU_SHFT;
-+
-+ cpu_speed = (16 * (n1 + 1) * (n2 + 2) / (m1cpu + 1)) * 1000000;
-+}
-+#endif
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/ser_init.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/ser_init.c
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/ser_init.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/ser_init.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,180 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * Broadcom bcm63xx serial port initialization, also prepare for printk
-+ * by registering with console_init
-+ *
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/console.h>
-+#include <linux/sched.h>
-+
-+#include <asm/addrspace.h>
-+#include <asm/irq.h>
-+#include <asm/reboot.h>
-+#include <asm/gdb-stub.h>
-+#include <asm/mc146818rtc.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+
-+#define SER63XX_DEFAULT_BAUD 115200
-+#define BD_BCM63XX_TIMER_CLOCK_INPUT (FPERIPH)
-+#define stUart ((volatile Uart * const) UART_BASE)
-+
-+// Transmit interrupts
-+#define TXINT (TXFIFOEMT | TXUNDERR | TXOVFERR)
-+// Receive interrupts
-+#define RXINT (RXFIFONE | RXOVFERR)
-+
-+/* --------------------------------------------------------------------------
-+ Name: serial_init
-+ Purpose: Initalize the UART
-+-------------------------------------------------------------------------- */
-+void __init serial_init(void)
-+{
-+ UINT32 tmpVal = SER63XX_DEFAULT_BAUD;
-+ ULONG clockFreqHz;
-+
-+#if defined(CONFIG_BCM96345)
-+ // Make sure clock is ticking
-+ PERF->blkEnables |= UART_CLK_EN;
-+#endif
-+
-+ /* Dissable channel's receiver and transmitter. */
-+ stUart->control &= ~(BRGEN|TXEN|RXEN);
-+
-+ /*--------------------------------------------------------------------*/
-+ /* Write the table value to the clock select register. */
-+ /* DPullen - this is the equation to use: */
-+ /* value = clockFreqHz / baud / 32-1; */
-+ /* (snmod) Actually you should also take into account any necessary */
-+ /* rounding. Divide by 16, look at lsb, if 0, divide by 2 */
-+ /* and subtract 1. If 1, just divide by 2 */
-+ /*--------------------------------------------------------------------*/
-+ clockFreqHz = BD_BCM63XX_TIMER_CLOCK_INPUT;
-+ tmpVal = (clockFreqHz / tmpVal) / 16;
-+ if( tmpVal & 0x01 )
-+ tmpVal /= 2; //Rounding up, so sub is already accounted for
-+ else
-+ tmpVal = (tmpVal / 2) - 1; // Rounding down so we must sub 1
-+ stUart->baudword = tmpVal;
-+
-+ /* Finally, re-enable the transmitter and receiver. */
-+ stUart->control |= (BRGEN|TXEN|RXEN);
-+
-+ stUart->config = (BITS8SYM | ONESTOP);
-+ // Set the FIFO interrupt depth ... stUart->fifocfg = 0xAA;
-+ stUart->fifoctl = RSTTXFIFOS | RSTRXFIFOS;
-+ stUart->intMask = 0;
-+ stUart->intMask = RXINT | TXINT;
-+}
-+
-+
-+/* prom_putc()
-+ * Output a character to the UART
-+ */
-+void prom_putc(char c)
-+{
-+ /* Wait for Tx uffer to empty */
-+ while (! (READ16(stUart->intStatus) & TXFIFOEMT));
-+ /* Send character */
-+ stUart->Data = c;
-+}
-+
-+/* prom_puts()
-+ * Write a string to the UART
-+ */
-+void prom_puts(const char *s)
-+{
-+ while (*s) {
-+ if (*s == '\n') {
-+ prom_putc('\r');
-+ }
-+ prom_putc(*s++);
-+ }
-+}
-+
-+
-+/* prom_getc_nowait()
-+ * Returns a character from the UART
-+ * Returns -1 if no characters available or corrupted
-+ */
-+int prom_getc_nowait(void)
-+{
-+ uint16 uStatus;
-+ int cData = -1;
-+
-+ uStatus = READ16(stUart->intStatus);
-+
-+ if (uStatus & RXFIFONE) { /* Do we have a character? */
-+ cData = READ16(stUart->Data) & 0xff; /* Read character */
-+ if (uStatus & (RXFRAMERR | RXPARERR)) { /* If we got an error, throw it away */
-+ cData = -1;
-+ }
-+ }
-+
-+ return cData;
-+}
-+
-+/* prom_getc()
-+ * Returns a charcter from the serial port
-+ * Will block until it receives a valid character
-+*/
-+char prom_getc(void)
-+{
-+ int cData = -1;
-+
-+ /* Loop until we get a valid character */
-+ while(cData == -1) {
-+ cData = prom_getc_nowait();
-+ }
-+ return (char) cData;
-+}
-+
-+/* prom_testc()
-+ * Returns 0 if no characters available
-+ */
-+int prom_testc(void)
-+{
-+ uint16 uStatus;
-+
-+ uStatus = READ16(stUart->intStatus);
-+
-+ return (uStatus & RXFIFONE);
-+}
-+
-+#if CONFIG_REMOTE_DEBUG
-+/* Prevent other code from writing to the serial port */
-+void _putc(char c) { }
-+void _puts(const char *ptr) { }
-+#else
-+/* Low level outputs call prom routines */
-+void _putc(char c) {
-+ prom_putc(c);
-+}
-+void _puts(const char *ptr) {
-+ prom_puts(ptr);
-+}
-+#endif
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/setup.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/setup.c
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/setup.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/setup.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,519 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * Generic setup routines for Broadcom 963xx MIPS boards
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+#include <linux/kernel.h>
-+#include <linux/kdev_t.h>
-+#include <linux/types.h>
-+#include <linux/console.h>
-+#include <linux/sched.h>
-+#include <linux/mm.h>
-+#include <linux/slab.h>
-+#include <linux/module.h>
-+
-+#include <asm/addrspace.h>
-+#include <asm/bcache.h>
-+#include <asm/irq.h>
-+#include <asm/time.h>
-+#include <asm/reboot.h>
-+#include <asm/gdb-stub.h>
-+
-+extern void brcm_timer_setup(struct irqaction *irq);
-+extern unsigned long getMemorySize(void);
-+
-+#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
-+#include <linux/pci.h>
-+#include <linux/delay.h>
-+#include <bcm_map_part.h>
-+#include <bcmpci.h>
-+
-+static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
-+#endif
-+
-+/* This function should be in a board specific directory. For now,
-+ * assume that all boards that include this file use a Broadcom chip
-+ * with a soft reset bit in the PLL control register.
-+ */
-+static void brcm_machine_restart(char *command)
-+{
-+ const unsigned long ulSoftReset = 0x00000001;
-+ unsigned long *pulPllCtrl = (unsigned long *) 0xfffe0008;
-+ *pulPllCtrl |= ulSoftReset;
-+}
-+
-+static void brcm_machine_halt(void)
-+{
-+ printk("System halted\n");
-+ while (1);
-+}
-+
-+#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
-+
-+static void mpi_SetLocalPciConfigReg(uint32 reg, uint32 value)
-+{
-+ /* write index then value */
-+ mpi->pcicfgcntrl = PCI_CFG_REG_WRITE_EN + reg;;
-+ mpi->pcicfgdata = value;
-+}
-+
-+static uint32 mpi_GetLocalPciConfigReg(uint32 reg)
-+{
-+ /* write index then get value */
-+ mpi->pcicfgcntrl = PCI_CFG_REG_WRITE_EN + reg;;
-+ return mpi->pcicfgdata;
-+}
-+
-+/*
-+ * mpi_ResetPcCard: Set/Reset the PcCard
-+ */
-+static void mpi_ResetPcCard(int cardtype, BOOL bReset)
-+{
-+ if (cardtype == MPI_CARDTYPE_NONE) {
-+ return;
-+ }
-+
-+ if (cardtype == MPI_CARDTYPE_CARDBUS) {
-+ bReset = ! bReset;
-+ }
-+
-+ if (bReset) {
-+ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & ~PCCARD_CARD_RESET);
-+ } else {
-+ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 | PCCARD_CARD_RESET);
-+ }
-+}
-+
-+/*
-+ * mpi_ConfigCs: Configure an MPI/EBI chip select
-+ */
-+static void mpi_ConfigCs(uint32 cs, uint32 base, uint32 size, uint32 flags)
-+{
-+ mpi->cs[cs].base = ((base & 0x1FFFFFFF) | size);
-+ mpi->cs[cs].config = flags;
-+}
-+
-+/*
-+ * mpi_InitPcmciaSpace
-+ */
-+static void mpi_InitPcmciaSpace(void)
-+{
-+ // ChipSelect 4 controls PCMCIA Memory accesses
-+ mpi_ConfigCs(PCMCIA_COMMON_BASE, pcmciaMem, EBI_SIZE_1M, (EBI_WORD_WIDE|EBI_ENABLE));
-+ // ChipSelect 5 controls PCMCIA Attribute accesses
-+ mpi_ConfigCs(PCMCIA_ATTRIBUTE_BASE, pcmciaAttr, EBI_SIZE_1M, (EBI_WORD_WIDE|EBI_ENABLE));
-+ // ChipSelect 6 controls PCMCIA I/O accesses
-+ mpi_ConfigCs(PCMCIA_IO_BASE, pcmciaIo, EBI_SIZE_64K, (EBI_WORD_WIDE|EBI_ENABLE));
-+
-+ mpi->pcmcia_cntl2 = ((PCMCIA_ATTR_ACTIVE << RW_ACTIVE_CNT_BIT) |
-+ (PCMCIA_ATTR_INACTIVE << INACTIVE_CNT_BIT) |
-+ (PCMCIA_ATTR_CE_SETUP << CE_SETUP_CNT_BIT) |
-+ (PCMCIA_ATTR_CE_HOLD << CE_HOLD_CNT_BIT));
-+
-+ mpi->pcmcia_cntl2 |= (PCMCIA_HALFWORD_EN | PCMCIA_BYTESWAP_DIS);
-+}
-+
-+/*
-+ * cardtype_vcc_detect: PC Card's card detect and voltage sense connection
-+ *
-+ * CD1#/ CD2#/ VS1#/ VS2#/ Card Initial Vcc
-+ * CCD1# CCD2# CVS1 CVS2 Type
-+ *
-+ * GND GND open open 16-bit 5 vdc
-+ *
-+ * GND GND GND open 16-bit 3.3 vdc
-+ *
-+ * GND GND open GND 16-bit x.x vdc
-+ *
-+ * GND GND GND GND 16-bit 3.3 & x.x vdc
-+ *
-+ *====================================================================
-+ *
-+ * CVS1 GND CCD1# open CardBus 3.3 vdc
-+ *
-+ * GND CVS2 open CCD2# CardBus x.x vdc
-+ *
-+ * GND CVS1 CCD2# open CardBus y.y vdc
-+ *
-+ * GND CVS2 GND CCD2# CardBus 3.3 & x.x vdc
-+ *
-+ * CVS2 GND open CCD1# CardBus x.x & y.y vdc
-+ *
-+ * GND CVS1 CCD2# open CardBus 3.3, x.x & y.y vdc
-+ *
-+ */
-+static int cardtype_vcc_detect(void)
-+{
-+ uint32 data32;
-+ int cardtype;
-+
-+ cardtype = MPI_CARDTYPE_NONE;
-+ mpi->pcmcia_cntl1 = 0x0000A000; // Turn on the output enables and drive
-+ // the CVS pins to 0.
-+ data32 = mpi->pcmcia_cntl1;
-+ switch (data32 & 0x00000003) // Test CD1# and CD2#, see if card is plugged in.
-+ {
-+ case 0x00000003: // No Card is in the slot.
-+ printk("mpi: No Card is in the PCMCIA slot\n");
-+ break;
-+
-+ case 0x00000002: // Partial insertion, No CD2#.
-+ printk("mpi: Card in the PCMCIA slot partial insertion, no CD2 signal\n");
-+ break;
-+
-+ case 0x00000001: // Partial insertion, No CD1#.
-+ printk("mpi: Card in the PCMCIA slot partial insertion, no CD1 signal\n");
-+ break;
-+
-+ case 0x00000000:
-+ mpi->pcmcia_cntl1 = 0x0000A0C0; // Turn off the CVS output enables and
-+ // float the CVS pins.
-+ mdelay(1);
-+ data32 = mpi->pcmcia_cntl1;
-+ // Read the Register.
-+ switch (data32 & 0x0000000C) // See what is on the CVS pins.
-+ {
-+ case 0x00000000: // CVS1 and CVS2 are tied to ground, only 1 option.
-+ printk("mpi: Detected 3.3 & x.x 16-bit PCMCIA card\n");
-+ cardtype = MPI_CARDTYPE_PCMCIA;
-+ break;
-+
-+ case 0x00000004: // CVS1 is open or tied to CCD1/CCD2 and CVS2 is tied to ground.
-+ // 2 valid voltage options.
-+ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
-+ {
-+ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
-+ // This is not a valid combination.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
-+ mpi->pcmcia_cntl1 = 0x0000A080; // Drive CVS1 to a 0.
-+ mdelay(1);
-+ data32 = mpi->pcmcia_cntl1;
-+ if (data32 & 0x00000002) { // CCD2 is tied to CVS2, not valid.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ } else { // CCD2 is tied to CVS1.
-+ printk("mpi: Detected 3.3, x.x and y.y Cardbus card\n");
-+ cardtype = MPI_CARDTYPE_CARDBUS;
-+ }
-+ break;
-+
-+ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
-+ // This is not a valid combination.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ case 0x00000000: // CCD1 and CCD2 are tied to ground.
-+ printk("mpi: Detected x.x vdc 16-bit PCMCIA card\n");
-+ cardtype = MPI_CARDTYPE_PCMCIA;
-+ break;
-+ }
-+ break;
-+
-+ case 0x00000008: // CVS2 is open or tied to CCD1/CCD2 and CVS1 is tied to ground.
-+ // 2 valid voltage options.
-+ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
-+ {
-+ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
-+ // This is not a valid combination.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
-+ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
-+ mdelay(1);
-+ data32 = mpi->pcmcia_cntl1;
-+ if (data32 & 0x00000002) { // CCD2 is tied to CVS1, not valid.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ } else {// CCD2 is tied to CVS2.
-+ printk("mpi: Detected 3.3 and x.x Cardbus card\n");
-+ cardtype = MPI_CARDTYPE_CARDBUS;
-+ }
-+ break;
-+
-+ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
-+ // This is not a valid combination.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ case 0x00000000: // CCD1 and CCD2 are tied to ground.
-+ cardtype = MPI_CARDTYPE_PCMCIA;
-+ printk("mpi: Detected 3.3 vdc 16-bit PCMCIA card\n");
-+ break;
-+ }
-+ break;
-+
-+ case 0x0000000C: // CVS1 and CVS2 are open or tied to CCD1/CCD2.
-+ // 5 valid voltage options.
-+
-+ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
-+ {
-+ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
-+ // This is not a valid combination.
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
-+ // CCD1 is tied to ground.
-+ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
-+ mdelay(1);
-+ data32 = mpi->pcmcia_cntl1;
-+ if (data32 & 0x00000002) { // CCD2 is tied to CVS1.
-+ printk("mpi: Detected y.y vdc Cardbus card\n");
-+ } else { // CCD2 is tied to CVS2.
-+ printk("mpi: Detected x.x vdc Cardbus card\n");
-+ }
-+ cardtype = MPI_CARDTYPE_CARDBUS;
-+ break;
-+
-+ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
-+ // CCD2 is tied to ground.
-+
-+ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
-+ mdelay(1);
-+ data32 = mpi->pcmcia_cntl1;
-+ if (data32 & 0x00000001) {// CCD1 is tied to CVS1.
-+ printk("mpi: Detected 3.3 vdc Cardbus card\n");
-+ } else { // CCD1 is tied to CVS2.
-+ printk("mpi: Detected x.x and y.y Cardbus card\n");
-+ }
-+ cardtype = MPI_CARDTYPE_CARDBUS;
-+ break;
-+
-+ case 0x00000000: // CCD1 and CCD2 are tied to ground.
-+ cardtype = MPI_CARDTYPE_PCMCIA;
-+ printk("mpi: Detected 5 vdc 16-bit PCMCIA card\n");
-+ break;
-+ }
-+ break;
-+
-+ default:
-+ printk("mpi: Unknown card plugged into slot\n");
-+ break;
-+
-+ }
-+ }
-+ return cardtype;
-+}
-+
-+/*
-+ * mpi_DetectPcCard: Detect the plugged in PC-Card
-+ * Return: < 0 => Unknown card detected
-+ * 0 => No card detected
-+ * 1 => 16-bit card detected
-+ * 2 => 32-bit CardBus card detected
-+ */
-+static int mpi_DetectPcCard(void)
-+{
-+ int cardtype;
-+
-+ cardtype = cardtype_vcc_detect();
-+ switch(cardtype) {
-+ case MPI_CARDTYPE_PCMCIA:
-+ mpi->pcmcia_cntl1 &= ~0x0000e000; // disable enable bits
-+ //mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & ~PCCARD_CARD_RESET);
-+ mpi->pcmcia_cntl1 |= (PCMCIA_ENABLE | PCMCIA_GPIO_ENABLE);
-+ mpi_InitPcmciaSpace();
-+ mpi_ResetPcCard(cardtype, FALSE);
-+ // Hold card in reset for 10ms
-+ mdelay(10);
-+ mpi_ResetPcCard(cardtype, TRUE);
-+ // Let card come out of reset
-+ mdelay(100);
-+ break;
-+ case MPI_CARDTYPE_CARDBUS:
-+ // 8 => CardBus Enable
-+ // 1 => PCI Slot Number
-+ // C => Float VS1 & VS2
-+ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & 0xFFFF0000) |
-+ CARDBUS_ENABLE |
-+ (CARDBUS_SLOT << 8)|
-+ VS2_OEN |
-+ VS1_OEN;
-+ /* access to this memory window will be to/from CardBus */
-+ mpi->l2pmremap1 |= CARDBUS_MEM;
-+
-+ // Need to reset the Cardbus Card. There's no CardManager to do this,
-+ // and we need to be ready for PCI configuration.
-+ mpi_ResetPcCard(cardtype, FALSE);
-+ // Hold card in reset for 10ms
-+ mdelay(10);
-+ mpi_ResetPcCard(cardtype, TRUE);
-+ // Let card come out of reset
-+ mdelay(100);
-+ break;
-+ default:
-+ break;
-+ }
-+ return cardtype;
-+}
-+
-+static int mpi_init(void)
-+{
-+ unsigned long data;
-+ unsigned int chipid;
-+ unsigned int chiprev;
-+ unsigned int sdramsize;
-+
-+ chipid = (PERF->RevID & 0xFFFF0000) >> 16;
-+ chiprev = (PERF->RevID & 0xFF);
-+ sdramsize = getMemorySize();
-+ /*
-+ * Init the pci interface
-+ */
-+ data = GPIO->GPIOMode; // GPIO mode register
-+ data |= GROUP2_PCI | GROUP1_MII_PCCARD; // PCI internal arbiter + Cardbus
-+ GPIO->GPIOMode = data; // PCI internal arbiter
-+
-+ /*
-+ * In the BCM6348 CardBus support is defaulted to Slot 0
-+ * because there is no external IDSEL for CardBus. To disable
-+ * the CardBus and allow a standard PCI card in Slot 0
-+ * set the cbus_idsel field to 0x1f.
-+ */
-+ /*
-+ uData = mpi->pcmcia_cntl1;
-+ uData |= CARDBUS_IDSEL;
-+ mpi->pcmcia_cntl1 = uData;
-+ */
-+ // Setup PCI I/O Window range. Give 64K to PCI I/O
-+ mpi->l2piorange = ~(BCM_PCI_IO_SIZE_64KB-1);
-+ // UBUS to PCI I/O base address
-+ mpi->l2piobase = BCM_PCI_IO_BASE & BCM_PCI_ADDR_MASK;
-+ // UBUS to PCI I/O Window remap
-+ mpi->l2pioremap = (BCM_PCI_IO_BASE | MEM_WINDOW_EN);
-+
-+ // enable PCI related GPIO pins and data swap between system and PCI bus
-+ mpi->locbuscntrl = (EN_PCI_GPIO | DIR_U2P_NOSWAP);
-+
-+ /* Enable 6348 BusMaster and Memory access mode */
-+ data = mpi_GetLocalPciConfigReg(PCI_COMMAND);
-+ data |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
-+ mpi_SetLocalPciConfigReg(PCI_COMMAND, data);
-+
-+ /* Configure two 16 MByte PCI to System memory regions. */
-+ /* These memory regions are used when PCI device is a bus master */
-+ /* Accesses to the SDRAM from PCI bus will be "byte swapped" for this region */
-+ mpi_SetLocalPciConfigReg(PCI_BASE_ADDRESS_3, BCM_HOST_MEM_SPACE1);
-+ mpi->sp0remap = 0x0;
-+
-+ /* Accesses to the SDRAM from PCI bus will not be "byte swapped" for this region */
-+ mpi_SetLocalPciConfigReg(PCI_BASE_ADDRESS_4, BCM_HOST_MEM_SPACE2);
-+ mpi->sp1remap = 0x0;
-+ mpi->pcimodesel |= (PCI_BAR2_NOSWAP | 0x40);
-+
-+ if ((chipid == 0x6348) && (chiprev == 0xb0)) {
-+ mpi->sp0range = ~(sdramsize-1);
-+ mpi->sp1range = ~(sdramsize-1);
-+ }
-+ /*
-+ * Change 6348 PCI Cfg Reg. offset 0x40 to PCI memory read retry count infinity
-+ * by set 0 in bit 8~15. This resolve read Bcm4306 srom return 0xffff in
-+ * first read.
-+ */
-+ data = mpi_GetLocalPciConfigReg(BRCM_PCI_CONFIG_TIMER);
-+ data &= ~BRCM_PCI_CONFIG_TIMER_RETRY_MASK;
-+ data |= 0x00000080;
-+ mpi_SetLocalPciConfigReg(BRCM_PCI_CONFIG_TIMER, data);
-+
-+ /* enable pci interrupt */
-+ mpi->locintstat |= (EXT_PCI_INT << 16);
-+
-+ mpi_DetectPcCard();
-+
-+ ioport_resource.start = BCM_PCI_IO_BASE;
-+ ioport_resource.end = BCM_PCI_IO_BASE + BCM_PCI_IO_SIZE_64KB;
-+
-+#if defined(CONFIG_USB)
-+ PERF->blkEnables |= USBH_CLK_EN;
-+ mdelay(100);
-+ *USBH_NON_OHCI = NON_OHCI_BYTE_SWAP;
-+#endif
-+
-+ return 0;
-+}
-+#endif
-+
-+static int __init brcm63xx_setup(void)
-+{
-+ extern int panic_timeout;
-+
-+ _machine_restart = brcm_machine_restart;
-+ _machine_halt = brcm_machine_halt;
-+ _machine_power_off = brcm_machine_halt;
-+
-+ board_timer_setup = brcm_timer_setup;
-+
-+ panic_timeout = 180;
-+
-+#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
-+ /* mpi initialization */
-+ mpi_init();
-+#endif
-+ return 0;
-+}
-+
-+early_initcall(brcm63xx_setup);
-+
-+/***************************************************************************
-+ * C++ New and delete operator functions
-+ ***************************************************************************/
-+
-+/* void *operator new(unsigned int sz) */
-+void *_Znwj(unsigned int sz)
-+{
-+ return( kmalloc(sz, GFP_KERNEL) );
-+}
-+
-+/* void *operator new[](unsigned int sz)*/
-+void *_Znaj(unsigned int sz)
-+{
-+ return( kmalloc(sz, GFP_KERNEL) );
-+}
-+
-+/* placement new operator */
-+/* void *operator new (unsigned int size, void *ptr) */
-+void *ZnwjPv(unsigned int size, void *ptr)
-+{
-+ return ptr;
-+}
-+
-+/* void operator delete(void *m) */
-+void _ZdlPv(void *m)
-+{
-+ kfree(m);
-+}
-+
-+/* void operator delete[](void *m) */
-+void _ZdaPv(void *m)
-+{
-+ kfree(m);
-+}
-+
-+EXPORT_SYMBOL(_Znwj);
-+EXPORT_SYMBOL(_Znaj);
-+EXPORT_SYMBOL(ZnwjPv);
-+EXPORT_SYMBOL(_ZdlPv);
-+EXPORT_SYMBOL(_ZdaPv);
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/time.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/time.c
---- linux-2.6.8.1/arch/mips/brcm-boards/bcm963xx/time.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/bcm963xx/time.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,277 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * Setup time for Broadcom 963xx MIPS boards
-+ */
-+
-+#include <linux/config.h>
-+#include <linux/init.h>
-+#include <linux/kernel_stat.h>
-+#include <linux/sched.h>
-+#include <linux/spinlock.h>
-+#include <linux/interrupt.h>
-+#include <linux/module.h>
-+#include <linux/time.h>
-+#include <linux/timex.h>
-+
-+#include <asm/mipsregs.h>
-+#include <asm/ptrace.h>
-+#include <asm/div64.h>
-+#include <asm/time.h>
-+
-+#include <bcm_map_part.h>
-+#include <bcm_intr.h>
-+
-+unsigned long r4k_interval; /* Amount to increment compare reg each time */
-+static unsigned long r4k_cur; /* What counter should be at next timer irq */
-+
-+/* Cycle counter value at the previous timer interrupt.. */
-+static unsigned int timerhi = 0, timerlo = 0;
-+
-+extern volatile unsigned long wall_jiffies;
-+
-+/* Optional board-specific timer routine */
-+void (*board_timer_interrupt)(int irq, void *dev_id, struct pt_regs * regs);
-+
-+static inline void ack_r4ktimer(unsigned long newval)
-+{
-+ write_c0_compare(newval);
-+}
-+
-+/*
-+ * There are a lot of conceptually broken versions of the MIPS timer interrupt
-+ * handler floating around. This one is rather different, but the algorithm
-+ * is provably more robust.
-+ */
-+static irqreturn_t brcm_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-+{
-+ unsigned int count;
-+
-+ if (r4k_interval == 0)
-+ goto null;
-+
-+ do {
-+ do_timer(regs);
-+
-+ if (board_timer_interrupt)
-+ board_timer_interrupt(irq, dev_id, regs);
-+
-+ r4k_cur += r4k_interval;
-+ ack_r4ktimer(r4k_cur);
-+
-+ } while (((count = (unsigned long)read_c0_count())
-+ - r4k_cur) < 0x7fffffff);
-+
-+ if (!jiffies) {
-+ /*
-+ * If jiffies has overflowed in this timer_interrupt we must
-+ * update the timer[hi]/[lo] to make do_fast_gettimeoffset()
-+ * quotient calc still valid. -arca
-+ */
-+ timerhi = timerlo = 0;
-+ } else {
-+ /*
-+ * The cycle counter is only 32 bit which is good for about
-+ * a minute at current count rates of upto 150MHz or so.
-+ */
-+ timerhi += (count < timerlo); /* Wrap around */
-+ timerlo = count;
-+ }
-+
-+ return IRQ_HANDLED;
-+
-+null:
-+ ack_r4ktimer(0);
-+ return IRQ_NONE;
-+}
-+
-+static struct irqaction brcm_timer_action = {
-+ .handler = brcm_timer_interrupt,
-+ .flags = SA_INTERRUPT,
-+ .mask = CPU_MASK_NONE,
-+ .name = "timer",
-+ .next = NULL,
-+ .dev_id = brcm_timer_interrupt,
-+};
-+
-+
-+void __init brcm_timer_setup(struct irqaction *irq)
-+{
-+ r4k_cur = (read_c0_count() + r4k_interval);
-+ write_c0_compare(r4k_cur);
-+
-+ /* we are using the cpu counter for timer interrupts */
-+ irq->handler = no_action; /* we use our own handler */
-+ setup_irq(MIPS_TIMER_INT, &brcm_timer_action);
-+ set_c0_status(IE_IRQ5);
-+}
-+
-+#if 0
-+/* This is for machines which generate the exact clock. */
-+#define USECS_PER_JIFFY (1000000/HZ)
-+#define USECS_PER_JIFFY_FRAC (0x100000000*1000000/HZ&0xffffffff)
-+
-+static void call_do_div64_32( unsigned long *res, unsigned int high,
-+ unsigned int low, unsigned long base )
-+{
-+ do_div64_32(*res, high, low, base);
-+}
-+
-+/*
-+ * FIXME: Does playing with the RP bit in c0_status interfere with this code?
-+ */
-+static unsigned long do_fast_gettimeoffset(void)
-+{
-+ u32 count;
-+ unsigned long res, tmp;
-+
-+ /* Last jiffy when do_fast_gettimeoffset() was called. */
-+ static unsigned long last_jiffies=0;
-+ unsigned long quotient;
-+
-+ /*
-+ * Cached "1/(clocks per usec)*2^32" value.
-+ * It has to be recalculated once each jiffy.
-+ */
-+ static unsigned long cached_quotient=0;
-+
-+ tmp = jiffies;
-+
-+ quotient = cached_quotient;
-+
-+ if (tmp && last_jiffies != tmp) {
-+ last_jiffies = tmp;
-+#ifdef CONFIG_CPU_MIPS32
-+ if (last_jiffies != 0) {
-+
-+ unsigned long r0;
-+ /* gcc 3.0.1 gets an internal compiler error if there are two
-+ * do_div64_32 inline macros. To work around this problem,
-+ * do_div64_32 is called as a function.
-+ */
-+ call_do_div64_32(&r0, timerhi, timerlo, tmp);
-+ call_do_div64_32(&quotient, USECS_PER_JIFFY,
-+ USECS_PER_JIFFY_FRAC, r0);
-+
-+ cached_quotient = quotient;
-+
-+ }
-+#else
-+ __asm__(".set\tnoreorder\n\t"
-+ ".set\tnoat\n\t"
-+ ".set\tmips3\n\t"
-+ "lwu\t%0,%2\n\t"
-+ "dsll32\t$1,%1,0\n\t"
-+ "or\t$1,$1,%0\n\t"
-+ "ddivu\t$0,$1,%3\n\t"
-+ "mflo\t$1\n\t"
-+ "dsll32\t%0,%4,0\n\t"
-+ "nop\n\t"
-+ "ddivu\t$0,%0,$1\n\t"
-+ "mflo\t%0\n\t"
-+ ".set\tmips0\n\t"
-+ ".set\tat\n\t"
-+ ".set\treorder"
-+ :"=&r" (quotient)
-+ :"r" (timerhi),
-+ "m" (timerlo),
-+ "r" (tmp),
-+ "r" (USECS_PER_JIFFY)
-+ :"$1");
-+ cached_quotient = quotient;
-+#endif
-+ }
-+
-+ /* Get last timer tick in absolute kernel time */
-+ count = read_c0_count();
-+
-+ /* .. relative to previous jiffy (32 bits is enough) */
-+ count -= timerlo;
-+
-+ __asm__("multu\t%1,%2\n\t"
-+ "mfhi\t%0"
-+ :"=r" (res)
-+ :"r" (count),
-+ "r" (quotient));
-+
-+ /*
-+ * Due to possible jiffies inconsistencies, we need to check
-+ * the result so that we'll get a timer that is monotonic.
-+ */
-+ if (res >= USECS_PER_JIFFY)
-+ res = USECS_PER_JIFFY-1;
-+
-+ return res;
-+}
-+
-+void do_gettimeofday(struct timeval *tv)
-+{
-+ unsigned int flags;
-+
-+ read_lock_irqsave (&xtime_lock, flags);
-+ tv->tv_sec = xtime.tv_sec;
-+ tv->tv_usec = xtime.tv_nsec/1000;
-+ tv->tv_usec += do_fast_gettimeoffset();
-+
-+ /*
-+ * xtime is atomically updated in timer_bh. jiffies - wall_jiffies
-+ * is nonzero if the timer bottom half hasnt executed yet.
-+ */
-+ if (jiffies - wall_jiffies)
-+ tv->tv_usec += USECS_PER_JIFFY;
-+
-+ read_unlock_irqrestore (&xtime_lock, flags);
-+
-+ if (tv->tv_usec >= 1000000) {
-+ tv->tv_usec -= 1000000;
-+ tv->tv_sec++;
-+ }
-+}
-+
-+EXPORT_SYMBOL(do_gettimeofday);
-+
-+int do_settimeofday(struct timespec *tv)
-+{
-+ write_lock_irq (&xtime_lock);
-+
-+ /* This is revolting. We need to set the xtime.tv_usec correctly.
-+ * However, the value in this location is is value at the last tick.
-+ * Discover what correction gettimeofday would have done, and then
-+ * undo it!
-+ */
-+ tv->tv_nsec -= do_fast_gettimeoffset()*NSEC_PER_USEC;
-+
-+ if (tv->tv_nsec < 0) {
-+ tv->tv_nsec += 1000000*NSEC_PER_USEC;
-+ tv->tv_sec--;
-+ }
-+
-+ xtime.tv_sec = tv->tv_sec;
-+ xtime.tv_nsec = tv->tv_nsec;
-+ time_adjust = 0; /* stop active adjtime() */
-+ time_status |= STA_UNSYNC;
-+ time_maxerror = NTP_PHASE_LIMIT;
-+ time_esterror = NTP_PHASE_LIMIT;
-+
-+ write_unlock_irq (&xtime_lock);
-+}
-+
-+EXPORT_SYMBOL(do_settimeofday);
-+
-+#endif
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/generic/Makefile linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/Makefile
---- linux-2.6.8.1/arch/mips/brcm-boards/generic/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/Makefile 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,11 @@
-+#
-+# Makefile for generic Broadcom MIPS boards
-+#
-+# Copyright (C) 2001 Broadcom Corporation
-+#
-+obj-y := int-handler.o
-+
-+ifdef CONFIG_REMOTE_DEBUG
-+obj-y += dbg_io.o
-+endif
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/generic/dbg_io.c linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/dbg_io.c
---- linux-2.6.8.1/arch/mips/brcm-boards/generic/dbg_io.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/dbg_io.c 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,260 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#include <linux/config.h>
-+#include <linux/tty.h>
-+#include <linux/major.h>
-+#include <linux/init.h>
-+#include <linux/console.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/kernel.h>
-+#include <linux/types.h>
-+#include <linux/sched.h>
-+
-+#include <bcm_map_part.h>
-+
-+#undef PRNT /* define for debug printing */
-+
-+#define UART16550_BAUD_2400 2400
-+#define UART16550_BAUD_4800 4800
-+#define UART16550_BAUD_9600 9600
-+#define UART16550_BAUD_19200 19200
-+#define UART16550_BAUD_38400 38400
-+#define UART16550_BAUD_57600 57600
-+#define UART16550_BAUD_115200 115200
-+
-+#define UART16550_PARITY_NONE 0
-+#define UART16550_PARITY_ODD 0x08
-+#define UART16550_PARITY_EVEN 0x18
-+#define UART16550_PARITY_MARK 0x28
-+#define UART16550_PARITY_SPACE 0x38
-+
-+#define UART16550_DATA_5BIT 0x0
-+#define UART16550_DATA_6BIT 0x1
-+#define UART16550_DATA_7BIT 0x2
-+#define UART16550_DATA_8BIT 0x3
-+
-+#define UART16550_STOP_1BIT 0x0
-+#define UART16550_STOP_2BIT 0x4
-+
-+volatile Uart * stUart = UART_BASE;
-+
-+#define WRITE16(addr, value) ((*(volatile UINT16 *)((ULONG)&addr)) = value)
-+
-+/* Low level UART routines from promcon.c */
-+extern void prom_putc(char c);
-+extern char prom_getc(void);
-+extern int prom_getc_nowait(void);
-+extern int prom_testc(void);
-+
-+extern void set_debug_traps(void);
-+extern void breakpoint(void);
-+extern void enable_brcm_irq(unsigned int);
-+extern void set_async_breakpoint(unsigned int epc);
-+
-+#ifdef CONFIG_GDB_CONSOLE
-+extern void register_gdb_console(void);
-+#endif
-+
-+int gdb_initialized = 0;
-+
-+#define GDB_BUF_SIZE 512 /* power of 2, please */
-+
-+static char gdb_buf[GDB_BUF_SIZE] ;
-+static int gdb_buf_in_inx ;
-+static atomic_t gdb_buf_in_cnt ;
-+static int gdb_buf_out_inx ;
-+
-+void debugInit(uint32 baud, uint8 data, uint8 parity, uint8 stop)
-+{
-+ /* Do nothing, assume boot loader has already set up serial port */
-+ printk("debugInit called\n");
-+}
-+
-+/*
-+ * Get a char if available, return -1 if nothing available.
-+ * Empty the receive buffer first, then look at the interface hardware.
-+ */
-+static int read_char(void)
-+{
-+ if (atomic_read(&gdb_buf_in_cnt) != 0) /* intr routine has q'd chars */
-+ {
-+ int chr ;
-+
-+ chr = gdb_buf[gdb_buf_out_inx++] ;
-+ gdb_buf_out_inx &= (GDB_BUF_SIZE - 1) ;
-+ atomic_dec(&gdb_buf_in_cnt) ;
-+ return(chr) ;
-+ }
-+ return(prom_getc_nowait()) ; /* read from hardware */
-+} /* read_char */
-+
-+/*
-+ * This is the receiver interrupt routine for the GDB stub.
-+ * It will receive a limited number of characters of input
-+ * from the gdb host machine and save them up in a buffer.
-+ *
-+ * When the gdb stub routine getDebugChar() is called it
-+ * draws characters out of the buffer until it is empty and
-+ * then reads directly from the serial port.
-+ *
-+ * We do not attempt to write chars from the interrupt routine
-+ * since the stubs do all of that via putDebugChar() which
-+ * writes one byte after waiting for the interface to become
-+ * ready.
-+ *
-+ * The debug stubs like to run with interrupts disabled since,
-+ * after all, they run as a consequence of a breakpoint in
-+ * the kernel.
-+ *
-+ * Perhaps someone who knows more about the tty driver than I
-+ * care to learn can make this work for any low level serial
-+ * driver.
-+ */
-+static void gdb_interrupt(int irq, void *dev_id, struct pt_regs * regs)
-+{
-+ int chr ;
-+ int more;
-+ do
-+ {
-+ chr = prom_getc_nowait() ;
-+ more = prom_testc();
-+ if (chr < 0) continue ;
-+
-+ /* If we receive a Ctrl-C then this is GDB trying to break in */
-+ if (chr == 3)
-+ {
-+ /* Replace current instruction with breakpoint */
-+ set_async_breakpoint(regs->cp0_epc);
-+ //breakpoint();
-+ }
-+
-+#ifdef PRNT
-+ printk("gdb_interrupt: chr=%02x '%c', more = %x\n",
-+ chr, chr > ' ' && chr < 0x7F ? chr : ' ', more) ;
-+#endif
-+
-+ if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE)
-+ { /* buffer overflow, clear it */
-+ gdb_buf_in_inx = 0 ;
-+ atomic_set(&gdb_buf_in_cnt, 0) ;
-+ gdb_buf_out_inx = 0 ;
-+ break ;
-+ }
-+
-+ gdb_buf[gdb_buf_in_inx++] = chr ;
-+ gdb_buf_in_inx &= (GDB_BUF_SIZE - 1) ;
-+ atomic_inc(&gdb_buf_in_cnt) ;
-+ }
-+ while (more !=0);
-+
-+} /* gdb_interrupt */
-+
-+/*
-+ * getDebugChar
-+ *
-+ * This is a GDB stub routine. It waits for a character from the
-+ * serial interface and then returns it. If there is no serial
-+ * interface connection then it returns a bogus value which will
-+ * almost certainly cause the system to hang.
-+ */
-+int getDebugChar(void)
-+{
-+ volatile int chr ;
-+
-+#ifdef PRNT
-+ printk("getDebugChar: ") ;
-+#endif
-+
-+ while ( (chr = read_char()) < 0 ) ;
-+
-+#ifdef PRNT
-+ printk("%c\n", chr > ' ' && chr < 0x7F ? chr : ' ') ;
-+#endif
-+ return(chr) ;
-+
-+} /* getDebugChar */
-+
-+/*
-+ * putDebugChar
-+ *
-+ * This is a GDB stub routine. It waits until the interface is ready
-+ * to transmit a char and then sends it. If there is no serial
-+ * interface connection then it simply returns to its caller, having
-+ * pretended to send the char.
-+ */
-+int putDebugChar(unsigned char chr)
-+{
-+#ifdef PRNT
-+ printk("putDebugChar: chr=%02x '%c'\n", chr,
-+ chr > ' ' && chr < 0x7F ? chr : ' ') ;
-+#endif
-+
-+ prom_putc(chr) ; /* this routine will wait */
-+ return 1;
-+
-+} /* putDebugChar */
-+
-+/* Just a NULL routine for testing. */
-+void gdb_null(void)
-+{
-+}
-+
-+void rs_kgdb_hook(int tty_no)
-+{
-+ printk("rs_kgdb_hook: tty %d\n", tty_no);
-+
-+ /* Call GDB routine to setup the exception vectors for the debugger */
-+ set_debug_traps();
-+
-+ printk("Breaking into debugger...\n");
-+ breakpoint();
-+ gdb_null() ;
-+ printk("Connected.\n");
-+
-+ gdb_initialized = 1;
-+
-+#ifdef CONFIG_GDB_CONSOLE
-+ register_gdb_console();
-+#endif
-+}
-+
-+void kgdb_hook_irq()
-+{
-+ int retval ;
-+ uint16 uMask;
-+
-+ printk("GDB: Hooking UART interrupt\n");
-+
-+ retval = request_irq(INTERRUPT_ID_UART,
-+ gdb_interrupt,
-+ SA_INTERRUPT,
-+ "GDB-stub", NULL);
-+
-+ if (retval != 0)
-+ printk("gdb_hook: request_irq(irq=%d) failed: %d\n", INTERRUPT_ID_UART, retval);
-+
-+ // Enable UART config Rx not empty IRQ
-+ uMask = READ16(stUart->intMask) ;
-+ // printk("intMask: 0x%x\n", uMask);
-+ WRITE16(stUart->intMask, uMask | RXFIFONE);
-+}
-+
-+
-diff -urN linux-2.6.8.1/arch/mips/brcm-boards/generic/int-handler.S linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/int-handler.S
---- linux-2.6.8.1/arch/mips/brcm-boards/generic/int-handler.S 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/brcm-boards/generic/int-handler.S 2006-06-26 09:07:08.000000000 +0200
-@@ -0,0 +1,59 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ * Generic interrupt handler for Broadcom MIPS boards
-+ */
-+
-+#include <linux/config.h>
-+
-+#include <asm/asm.h>
-+#include <asm/mipsregs.h>
-+#include <asm/regdef.h>
-+#include <asm/stackframe.h>
-+
-+/*
-+ * MIPS IRQ Source
-+ * -------- ------
-+ * 0 Software (ignored)
-+ * 1 Software (ignored)
-+ * 2 Combined hardware interrupt (hw0)
-+ * 3 Hardware
-+ * 4 Hardware
-+ * 5 Hardware
-+ * 6 Hardware
-+ * 7 R4k timer
-+ */
-+
-+ .text
-+ .set noreorder
-+ .set noat
-+ .align 5
-+ NESTED(brcmIRQ, PT_SIZE, sp)
-+ SAVE_ALL
-+ CLI
-+ .set noreorder
-+ .set at
-+
-+ jal brcm_irq_dispatch
-+ move a0, sp
-+
-+ j ret_from_irq
-+ nop
-+
-+ END(brcmIRQ)
---- linux-2.6.8.1/arch/mips/Kconfig 2004-08-14 12:55:32.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/Kconfig 2006-06-26 09:07:08.000000000 +0200
-@@ -27,6 +27,17 @@
-
- menu "Machine selection"
-
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+
-+config MIPS_BRCM
-+ bool "Support for the Broadcom boards"
-+ help
-+ This is a family of boards based on the Broadcom MIPS32
-+
-+source "arch/mips/brcm-boards/bcm963xx/Kconfig"
-+
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-+
- config MACH_JAZZ
- bool "Support for the Jazz family of machines"
- select ISA
-@@ -146,6 +157,7 @@
- depends on MIPS32
- select DMA_NONCOHERENT
- select HW_HAS_PCI
-+ select SWAP_IO_SPACE
-
- config MIPS_COBALT
- bool "Support for Cobalt Server (EXPERIMENTAL)"
-@@ -198,6 +210,7 @@
- select IRQ_CPU
- select MIPS_GT96100
- select RM7000_CPU_SCACHE
-+ select SWAP_IO_SPACE
- help
- This is an evaluation board based on the Galileo GT-96100 LAN/WAN
- communications controllers containing a MIPS R5000 compatible core
-@@ -268,6 +281,7 @@
- bool "Support for MIPS Atlas board"
- select DMA_NONCOHERENT
- select HW_HAS_PCI
-+ select SWAP_IO_SPACE
- help
- This enables support for the QED R5231-based MIPS Atlas evaluation
- board.
-@@ -277,6 +291,7 @@
- select HAVE_STD_PC_SERIAL_PORT
- select DMA_NONCOHERENT
- select HW_HAS_PCI
-+ select SWAP_IO_SPACE
- help
- This enables support for the VR5000-based MIPS Malta evaluation
- board.
-@@ -294,6 +309,7 @@
- select IRQ_CPU
- select IRQ_CPU_RM7K
- select RM7000_CPU_SCACHE
-+ select SWAP_IO_SPACE
- help
- The Ocelot is a MIPS-based Single Board Computer (SBC) made by
- Momentum Computer <http://www.momenco.com/>.
-@@ -306,6 +322,7 @@
- select IRQ_CPU_RM7K
- select PCI_MARVELL
- select RM7000_CPU_SCACHE
-+ select SWAP_IO_SPACE
- help
- The Ocelot is a MIPS-based Single Board Computer (SBC) made by
- Momentum Computer <http://www.momenco.com/>.
-@@ -318,6 +335,7 @@
- select IRQ_MV64340
- select PCI_MARVELL
- select RM7000_CPU_SCACHE
-+ select SWAP_IO_SPACE
- help
- The Ocelot is a MIPS-based Single Board Computer (SBC) made by
- Momentum Computer <http://www.momenco.com/>.
-@@ -332,6 +350,7 @@
- select LIMITED_DMA
- select PCI_MARVELL
- select RM7000_CPU_SCACHE
-+ select SWAP_IO_SPACE
- help
- The Jaguar ATX is a MIPS-based Single Board Computer (SBC) made by
- Momentum Computer <http://www.momenco.com/>.
-@@ -349,6 +368,7 @@
- select HW_HAS_PCI
- select IRQ_CPU
- select IRQ_CPU_RM7K
-+ select SWAP_IO_SPACE
- help
- Yosemite is an evaluation board for the RM9000x2 processor
- manufactured by PMC-Sierra
-@@ -411,6 +431,7 @@
- select DMA_NONCOHERENT
- select IP22_CPU_SCACHE
- select IRQ_CPU
-+ select SWAP_IO_SPACE
- help
- This are the SGI Indy, Challenge S and Indigo2, as well as certain
- OEM variants like the Tandem CMN B006S. To compile a Linux kernel
-@@ -529,12 +550,14 @@
- depends on SOC_AU1000
- select DMA_NONCOHERENT
- select HW_HAS_PCI
-+ select SWAP_IO_SPACE
-
- config MIPS_PB1100
- bool "PB1100 board"
- depends on SOC_AU1100
- select DMA_NONCOHERENT
- select HW_HAS_PCI
-+ select SWAP_IO_SPACE
-
- config MIPS_PB1500
- bool "PB1500 board"
-@@ -596,6 +619,7 @@
- bool "Support for Broadcom BCM1xxx SOCs (EXPERIMENTAL)"
- depends on EXPERIMENTAL
- select DMA_COHERENT
-+ select SWAP_IO_SPACE
-
- choice
- prompt "BCM1xxx SOC-based board"
-@@ -818,6 +842,7 @@
- select DMA_NONCOHERENT
- select HW_HAS_PCI
- select ISA
-+ select SWAP_IO_SPACE
-
- config RWSEM_GENERIC_SPINLOCK
- bool
-@@ -934,8 +959,6 @@
-
- config SWAP_IO_SPACE
- bool
-- depends on TOSHIBA_JMR3927 || TOSHIBA_RBTX4927 || SIBYTE_SB1xxx_SOC || SGI_IP22 || MOMENCO_OCELOT_C || MOMENCO_OCELOT_G || MOMENCO_OCELOT || MOMENCO_JAGUAR_ATX || MIPS_MALTA || MIPS_ATLAS || MIPS_EV96100 || MIPS_PB1100 || MIPS_PB1000
-- default y
-
- #
- # Unfortunately not all GT64120 systems run the chip at the same clock.
---- linux-2.6.8.1/arch/mips/kernel/cpu-probe.c 2004-08-14 12:55:10.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/cpu-probe.c 2006-06-26 09:07:09.000000000 +0200
-@@ -538,6 +538,27 @@
- }
- }
-
-+#if defined(CONFIG_MIPS_BRCM)
-+static inline void cpu_probe_broadcom(struct cpuinfo_mips *c)
-+{
-+ decode_config1(c);
-+ switch (c->processor_id & 0xff00) {
-+ case PRID_IMP_BCM6338:
-+ c->cputype = CPU_BCM6338;
-+ break;
-+ case PRID_IMP_BCM6345:
-+ c->cputype = CPU_BCM6345;
-+ break;
-+ case PRID_IMP_BCM6348:
-+ c->cputype = CPU_BCM6348;
-+ break;
-+ default:
-+ c->cputype = CPU_UNKNOWN;
-+ break;
-+ }
-+}
-+#endif
-+
- static inline void cpu_probe_sandcraft(struct cpuinfo_mips *c)
- {
- decode_config1(c);
-@@ -576,6 +597,11 @@
- case PRID_COMP_SIBYTE:
- cpu_probe_sibyte(c);
- break;
-+#if defined(CONFIG_MIPS_BRCM)
-+ case PRID_COMP_BROADCOM:
-+ cpu_probe_broadcom(c);
-+ break;
-+#endif
-
- case PRID_COMP_SANDCRAFT:
- cpu_probe_sandcraft(c);
---- linux-2.6.8.1/arch/mips/kernel/gdb-stub.c 2004-08-14 12:56:23.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/gdb-stub.c 2006-06-26 09:07:09.000000000 +0200
-@@ -171,6 +171,8 @@
- static unsigned char *mem2hex(char *mem, char *buf, int count, int may_fault);
- void handle_exception(struct gdb_regs *regs);
-
-+int kgdb_enabled;
-+
- /*
- * spin locks for smp case
- */
---- linux-2.6.8.1/arch/mips/kernel/irq.c 2004-08-14 12:54:50.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/irq.c 2006-06-26 09:07:09.000000000 +0200
-@@ -30,12 +30,7 @@
- /*
- * Controller mappings for all interrupt sources:
- */
--irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned = {
-- [0 ... NR_IRQS-1] = {
-- .handler = &no_irq_type,
-- .lock = SPIN_LOCK_UNLOCKED
-- }
--};
-+irq_desc_t irq_desc[NR_IRQS] __cacheline_aligned;
-
- static void register_irq_proc (unsigned int irq);
-
-@@ -809,7 +804,20 @@
- return 0;
- }
-
--void __init init_generic_irq(void)
-+#ifdef CONFIG_KGDB
-+extern void breakpoint(void);
-+extern void set_debug_traps(void);
-+
-+static int kgdb_flag = 1;
-+static int __init nokgdb(char *str)
-+{
-+ kgdb_flag = 0;
-+ return 1;
-+}
-+__setup("nokgdb", nokgdb);
-+#endif
-+
-+void __init init_IRQ(void)
- {
- int i;
-
-@@ -818,7 +826,18 @@
- irq_desc[i].action = NULL;
- irq_desc[i].depth = 1;
- irq_desc[i].handler = &no_irq_type;
-+ irq_desc[i].lock = SPIN_LOCK_UNLOCKED;
-+ }
-+
-+ arch_init_irq();
-+
-+#ifdef CONFIG_KGDB
-+ if (kgdb_flag) {
-+ printk("Wait for gdb client connection ...\n");
-+ set_debug_traps();
-+ breakpoint();
- }
-+#endif
- }
-
- EXPORT_SYMBOL(disable_irq_nosync);
-@@ -833,7 +852,7 @@
-
- static struct proc_dir_entry * smp_affinity_entry [NR_IRQS];
-
--static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = ~0UL };
-+static cpumask_t irq_affinity [NR_IRQS] = { [0 ... NR_IRQS-1] = CPU_MASK_ALL };
- static int irq_affinity_read_proc (char *page, char **start, off_t off,
- int count, int *eof, void *data)
- {
---- linux-2.6.8.1/arch/mips/kernel/Makefile 2004-08-14 12:55:19.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/Makefile 2006-06-26 09:07:09.000000000 +0200
-@@ -8,6 +8,13 @@
- ptrace.o reset.o semaphore.o setup.o signal.o syscall.o \
- time.o traps.o unaligned.o
-
-+# CONFIG_MIPS_BRCM Begin Broadcom added code.
-+# gcc 3.4.x reorders code with -Os and -O2, breaking the save_static stuff.
-+CFLAGS_syscall.o := -O1
-+CFLAGS_signal.o := -O1
-+CFLAGS_signal32.o := -O1
-+# CONFIG_MIPS_BRCM End Broadcom added code.
-+
- ifdef CONFIG_MODULES
- obj-y += mips_ksyms.o module.o
- obj-$(CONFIG_MIPS32) += module-elf32.o
---- linux-2.6.8.1/arch/mips/kernel/proc.c 2004-08-14 12:55:09.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/proc.c 2006-06-26 09:07:09.000000000 +0200
-@@ -75,6 +75,11 @@
- [CPU_VR4133] "NEC VR4133",
- [CPU_VR4181] "NEC VR4181",
- [CPU_VR4181A] "NEC VR4181A",
-+#if defined(CONFIG_MIPS_BRCM)
-+ [CPU_BCM6338] "BCM6338",
-+ [CPU_BCM6345] "BCM6345",
-+ [CPU_BCM6348] "BCM6348",
-+#endif
- [CPU_SR71000] "Sandcraft SR71000"
- };
-
---- linux-2.6.8.1/arch/mips/kernel/scall32-o32.S 2004-08-14 12:54:49.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/scall32-o32.S 2006-06-26 12:42:05.000000000 +0200
-@@ -640,9 +640,9 @@
- syscalltable
- .size sys_call_table, . - sys_call_table
-
-- .macro sys function, nargs
-+ /*.macro sys function, nargs
- .byte \nargs
-- .endm
-+ .endm*/
-
- sys_narg_table:
- syscalltable
---- linux-2.6.8.1/arch/mips/kernel/time.c 2004-08-14 12:55:20.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/time.c 2006-06-26 09:07:09.000000000 +0200
-@@ -274,11 +274,15 @@
-
- /* .. relative to previous jiffy (32 bits is enough) */
- count -= timerlo;
--
-+
- __asm__("multu %1,%2"
- : "=h" (res)
- : "r" (count), "r" (sll32_usecs_per_cycle)
-+#if defined(CONFIG_MIPS_BRCM)
-+ : "lo");
-+#else
- : "lo", "accum");
-+#endif
-
- /*
- * Due to possible jiffies inconsistencies, we need to check
-@@ -333,7 +337,11 @@
- __asm__("multu %1,%2"
- : "=h" (res)
- : "r" (count), "r" (quotient)
-+#if defined(CONFIG_MIPS_BRCM)
-+ : "lo");
-+#else
- : "lo", "accum");
-+#endif
-
- /*
- * Due to possible jiffies inconsistencies, we need to check
-@@ -375,7 +383,11 @@
- : "r" (timerhi), "m" (timerlo),
- "r" (tmp), "r" (USECS_PER_JIFFY),
- "r" (USECS_PER_JIFFY_FRAC)
-+#if defined(CONFIG_MIPS_BRCM)
-+ : "hi", "lo");
-+#else
- : "hi", "lo", "accum");
-+#endif
- cached_quotient = quotient;
- }
- }
-@@ -389,7 +401,11 @@
- __asm__("multu %1,%2"
- : "=h" (res)
- : "r" (count), "r" (quotient)
-+#if defined(CONFIG_MIPS_BRCM)
-+ : "lo");
-+#else
- : "lo", "accum");
-+#endif
-
- /*
- * Due to possible jiffies inconsistencies, we need to check
-@@ -738,6 +754,7 @@
- board_timer_setup(&timer_irqaction);
- }
-
-+
- #define FEBRUARY 2
- #define STARTOFTIME 1970
- #define SECDAY 86400L
---- linux-2.6.8.1/arch/mips/kernel/traps.c 2004-08-14 12:55:20.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/kernel/traps.c 2006-06-26 09:07:09.000000000 +0200
-@@ -246,6 +246,13 @@
-
- static spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
-
-+#if defined(CONFIG_MIPS_BRCM)
-+#ifdef CONFIG_REMOTE_DEBUG
-+#include <asm/gdb-stub.h>
-+extern void handle_exception(struct gdb_regs *regs);
-+#endif
-+#endif
-+
- NORET_TYPE void __die(const char * str, struct pt_regs * regs,
- const char * file, const char * func, unsigned long line)
- {
-@@ -258,7 +265,33 @@
- printk(" in %s:%s, line %ld", file, func, line);
- printk("[#%d]:\n", ++die_counter);
- show_registers(regs);
-+#if defined(CONFIG_MIPS_BRCM)
-+#ifdef CONFIG_REMOTE_DEBUG
-+ {
-+ struct gdb_regs regs2;
-+ int i;
-+ long *ptr;
-+
-+ ptr = &regs2.reg0;
-+ /* Copy registers to GDB structure */
-+ for(i=0; i<32;i++)
-+ *ptr++ = regs->regs[i];
-+
-+ regs2.lo = regs->lo;
-+ regs2.hi = regs->hi;
-+ regs2.cp0_epc = regs->cp0_epc;
-+ regs2.cp0_badvaddr = regs->cp0_badvaddr;
-+ regs2.cp0_status = regs->cp0_status;
-+ regs2.cp0_cause = regs->cp0_cause;
-+
-+ handle_exception(&regs2); /* Break to GDB */
-+ }
-+#endif
-+#endif
- spin_unlock_irq(&die_lock);
-+ /* Ron add for kernel crash */
-+ (*(volatile unsigned int *)(0xfffe040c)) &= ~(1<<5);
-+ machine_restart(NULL);
- do_exit(SIGSEGV);
- }
-
---- linux-2.6.8.1/arch/mips/Makefile 2004-08-14 12:54:47.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/Makefile 2006-06-26 09:07:09.000000000 +0200
-@@ -41,8 +41,14 @@
- endif
-
- ifdef CONFIG_CROSSCOMPILE
-+# CONFIG_MIPS_BRCM Begin Broadcom added code.
-+ifdef CONFIG_MIPS_BRCM
-+CROSS_COMPILE := mips-linux-uclibc-#$(tool-prefix)
-+else
- CROSS_COMPILE := $(tool-prefix)
- endif
-+# CONFIG_MIPS_BRCM End Broadcom added code.
-+endif
-
- #
- # GCC uses -G 0 -mabicalls -fpic as default. We don't want PIC in the kernel
-@@ -57,6 +63,9 @@
- cflags-y := -I $(TOPDIR)/include/asm/gcc
- cflags-y += -G 0 -mno-abicalls -fno-pic -pipe
- cflags-y += $(call check_gcc, -finline-limit=100000,)
-+ifeq ($(strip $(JTAG_KERNEL_DEBUG)),y)
-+cflags-y += -g
-+endif
- LDFLAGS_vmlinux += -G 0 -static -n
- MODFLAGS += -mlong-calls
-
-@@ -64,6 +73,12 @@
-
- check_warning = $(shell if $(CC) $(1) -c -o /dev/null -xc /dev/null > /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi)
-
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+ifdef CONFIG_MIPS_BRCM
-+cflags-$(CONFIG_REMOTE_DEBUG) += -ggdb
-+endif
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-+
- #
- # Use: $(call set_gccflags,<cpu0>,<isa0>,<cpu1>,<isa1>,<isa2>)
- #
-@@ -302,6 +317,20 @@
- libs-$(CONFIG_BAGET_MIPS) += arch/mips/baget/ arch/mips/baget/prom/
- load-$(CONFIG_BAGET_MIPS) += 0x80001000
-
-+# CONFIG_MIPS_BRCM Begin Broadcom added code.
-+ifdef CONFIG_MIPS_BRCM
-+#
-+# Broadcom board
-+core-$(CONFIG_BCM96338) += arch/mips/brcm-boards/generic/ arch/mips/brcm-boards/bcm963xx/
-+cflags-$(CONFIG_BCM96338) += -Iinclude/asm-mips/mach-bcm963xx
-+core-$(CONFIG_BCM96345) += arch/mips/brcm-boards/generic/ arch/mips/brcm-boards/bcm963xx/
-+cflags-$(CONFIG_BCM96345) += -Iinclude/asm-mips/mach-bcm963xx
-+core-$(CONFIG_BCM96348) += arch/mips/brcm-boards/generic/ arch/mips/brcm-boards/bcm963xx/
-+cflags-$(CONFIG_BCM96348) += -Iinclude/asm-mips/mach-bcm963xx
-+load-$(CONFIG_MIPS_BRCM) += 0x80010000
-+endif
-+# CONFIG_MIPS_BRCM End Broadcom added code.
-+
- #
- # Cobalt Server
- #
---- linux-2.6.8.1/arch/mips/mm/c-r4k.c 2004-08-14 12:56:22.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/mm/c-r4k.c 2006-06-26 09:07:09.000000000 +0200
-@@ -86,7 +86,7 @@
-
- static void (* r4k_blast_dcache)(void);
-
--static void r4k_blast_dcache_setup(void)
-+static inline void r4k_blast_dcache_setup(void)
- {
- unsigned long dc_lsize = cpu_dcache_line_size();
-
-@@ -385,6 +385,7 @@
- static void r4k_flush_icache_range(unsigned long start, unsigned long end)
- {
- unsigned long dc_lsize = current_cpu_data.dcache.linesz;
-+ unsigned long ic_lsize = current_cpu_data.icache.linesz;
- unsigned long addr, aend;
-
- if (!cpu_has_ic_fills_f_dc) {
-@@ -407,14 +408,14 @@
- if (end - start > icache_size)
- r4k_blast_icache();
- else {
-- addr = start & ~(dc_lsize - 1);
-- aend = (end - 1) & ~(dc_lsize - 1);
-+ addr = start & ~(ic_lsize - 1);
-+ aend = (end - 1) & ~(ic_lsize - 1);
- while (1) {
- /* Hit_Invalidate_I */
- protected_flush_icache_line(addr);
- if (addr == aend)
- break;
-- addr += dc_lsize;
-+ addr += ic_lsize;
- }
- }
- }
-@@ -802,6 +803,13 @@
- if (!(config & MIPS_CONF_M))
- panic("Don't know how to probe P-caches on this cpu.");
-
-+#if defined(CONFIG_MIPS_BRCM)
-+ if (c->cputype == CPU_BCM6338 || c->cputype == CPU_BCM6345 || c->cputype == CPU_BCM6348){
-+ printk("brcm mips: enabling icache and dcache...\n");
-+ /* Enable caches */
-+ write_c0_diag(read_c0_diag() | 0xC0000000);
-+ }
-+#endif
- /*
- * So we seem to be a MIPS32 or MIPS64 CPU
- * So let's probe the I-cache ...
---- linux-2.6.8.1/arch/mips/pci/fixup-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/pci/fixup-bcm96348.c 2006-06-26 09:07:09.000000000 +0200
-@@ -0,0 +1,85 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+#include <linux/init.h>
-+#include <linux/types.h>
-+#include <linux/pci.h>
-+
-+#include <bcmpci.h>
-+#include <bcm_intr.h>
-+#include <bcm_map_part.h>
-+
-+static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
-+
-+static char irq_tab_bcm96348[] __initdata = {
-+ [0] = INTERRUPT_ID_MPI,
-+ [1] = INTERRUPT_ID_MPI,
-+#if defined(CONFIG_USB)
-+ [USB_HOST_SLOT] = INTERRUPT_ID_USBH
-+#endif
-+};
-+
-+int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+ return irq_tab_bcm96348[slot];
-+}
-+
-+static void bcm96348_fixup(struct pci_dev *dev)
-+{
-+ uint32 memaddr;
-+ uint32 size;
-+
-+ memaddr = pci_resource_start(dev, 0);
-+ size = pci_resource_len(dev, 0);
-+
-+ switch (PCI_SLOT(dev->devfn)) {
-+ case 0:
-+ // UBUS to PCI address range
-+ // Memory Window 1. Mask determines which bits are decoded.
-+ mpi->l2pmrange1 = ~(size-1);
-+ // UBUS to PCI Memory base address. This is akin to the ChipSelect base
-+ // register.
-+ mpi->l2pmbase1 = memaddr & BCM_PCI_ADDR_MASK;
-+ // UBUS to PCI Remap Address. Replaces the masked address bits in the
-+ // range register with this setting.
-+ // Also, enable direct I/O and direct Memory accesses
-+ mpi->l2pmremap1 = (memaddr | MEM_WINDOW_EN);
-+ break;
-+
-+ case 1:
-+ // Memory Window 2
-+ mpi->l2pmrange2 = ~(size-1);
-+ // UBUS to PCI Memory base address.
-+ mpi->l2pmbase2 = memaddr & BCM_PCI_ADDR_MASK;
-+ // UBUS to PCI Remap Address
-+ mpi->l2pmremap2 = (memaddr | MEM_WINDOW_EN);
-+ break;
-+
-+#if defined(CONFIG_USB)
-+ case USB_HOST_SLOT:
-+ dev->resource[0].start = USB_HOST_BASE;
-+ dev->resource[0].end = USB_HOST_BASE+USB_BAR0_MEM_SIZE-1;
-+ break;
-+#endif
-+ }
-+}
-+
-+struct pci_fixup pcibios_fixups[] = {
-+ { PCI_FIXUP_FINAL, PCI_ANY_ID, PCI_ANY_ID, bcm96348_fixup },
-+ {0}
-+};
---- linux-2.6.8.1/arch/mips/pci/ops-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/pci/ops-bcm96348.c 2006-06-26 09:07:09.000000000 +0200
-@@ -0,0 +1,276 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+#include <linux/types.h>
-+#include <linux/pci.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <asm/addrspace.h>
-+
-+#include <bcm_intr.h>
-+#include <bcm_map_part.h>
-+#include <bcmpci.h>
-+
-+#include <linux/delay.h>
-+
-+#if defined(CONFIG_USB)
-+#if 0
-+#define DPRINT(x...) printk(x)
-+#else
-+#define DPRINT(x...)
-+#endif
-+
-+static int
-+pci63xx_int_read(unsigned int devfn, int where, u32 * value, int size);
-+static int
-+pci63xx_int_write(unsigned int devfn, int where, u32 * value, int size);
-+
-+static bool usb_mem_size_rd = FALSE;
-+static uint32 usb_mem_base = 0;
-+static uint32 usb_cfg_space_cmd_reg = 0;
-+#endif
-+static bool pci_mem_size_rd = FALSE;
-+
-+static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
-+
-+static void mpi_SetupPciConfigAccess(uint32 addr)
-+{
-+ mpi->l2pcfgctl = (DIR_CFG_SEL | DIR_CFG_USEREG | addr) & ~CONFIG_TYPE;
-+}
-+
-+static void mpi_ClearPciConfigAccess(void)
-+{
-+ mpi->l2pcfgctl = 0x00000000;
-+}
-+
-+#if defined(CONFIG_USB)
-+/* --------------------------------------------------------------------------
-+ Name: pci63xx_int_write
-+Abstract: PCI Config write on internal device(s)
-+ -------------------------------------------------------------------------- */
-+static int
-+pci63xx_int_write(unsigned int devfn, int where, u32 * value, int size)
-+{
-+ if (PCI_SLOT(devfn) != USB_HOST_SLOT) {
-+ return PCIBIOS_SUCCESSFUL;
-+ }
-+
-+ switch (size) {
-+ case 1:
-+ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %02X\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ break;
-+ case 2:
-+ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %04X\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ switch (where) {
-+ case PCI_COMMAND:
-+ usb_cfg_space_cmd_reg = *value;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case 4:
-+ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %08lX\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ switch (where) {
-+ case PCI_BASE_ADDRESS_0:
-+ if (*value == 0xffffffff) {
-+ usb_mem_size_rd = TRUE;
-+ } else {
-+ usb_mem_base = *value;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return PCIBIOS_SUCCESSFUL;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ Name: pci63xx_int_read
-+Abstract: PCI Config read on internal device(s)
-+ -------------------------------------------------------------------------- */
-+static int
-+pci63xx_int_read(unsigned int devfn, int where, u32 * value, int size)
-+{
-+ uint32 retValue = 0xFFFFFFFF;
-+
-+ if (PCI_SLOT(devfn) != USB_HOST_SLOT) {
-+ return PCIBIOS_SUCCESSFUL;
-+ }
-+
-+ // For now, this is specific to the USB Host controller. We can
-+ // make it more general if we have to...
-+ // Emulate PCI Config accesses
-+ switch (where) {
-+ case PCI_VENDOR_ID:
-+ case PCI_DEVICE_ID:
-+ retValue = PCI_VENDOR_ID_BROADCOM | 0x63000000;
-+ break;
-+ case PCI_COMMAND:
-+ case PCI_STATUS:
-+ retValue = (0x0006 << 16) | usb_cfg_space_cmd_reg;
-+ break;
-+ case PCI_CLASS_REVISION:
-+ case PCI_CLASS_DEVICE:
-+ retValue = (PCI_CLASS_SERIAL_USB << 16) | (0x10 << 8) | 0x01;
-+ break;
-+ case PCI_BASE_ADDRESS_0:
-+ if (usb_mem_size_rd) {
-+ retValue = USB_BAR0_MEM_SIZE;
-+ } else {
-+ if (usb_mem_base != 0)
-+ retValue = usb_mem_base;
-+ else
-+ retValue = USB_HOST_BASE;
-+ }
-+ usb_mem_size_rd = FALSE;
-+ break;
-+ case PCI_CACHE_LINE_SIZE:
-+ case PCI_LATENCY_TIMER:
-+ retValue = 0;
-+ break;
-+ case PCI_HEADER_TYPE:
-+ retValue = PCI_HEADER_TYPE_NORMAL;
-+ break;
-+ case PCI_SUBSYSTEM_VENDOR_ID:
-+ retValue = PCI_VENDOR_ID_BROADCOM;
-+ break;
-+ case PCI_SUBSYSTEM_ID:
-+ retValue = 0x6300;
-+ break;
-+ case PCI_INTERRUPT_LINE:
-+ retValue = INTERRUPT_ID_USBH;
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ switch (size) {
-+ case 1:
-+ *value = (retValue >> ((where & 3) << 3)) & 0xff;
-+ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %02X\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ break;
-+ case 2:
-+ *value = (retValue >> ((where & 3) << 3)) & 0xffff;
-+ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %04X\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ break;
-+ case 4:
-+ *value = retValue;
-+ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %08lX\n",
-+ PCI_SLOT(devfn), where, size, *value);
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return PCIBIOS_SUCCESSFUL;
-+}
-+#endif
-+
-+static int bcm96348_pcibios_read(struct pci_bus *bus, unsigned int devfn,
-+ int where, int size, u32 * val)
-+{
-+ volatile unsigned char *ioBase = (unsigned char *)(mpi->l2piobase | KSEG1);
-+ uint32 data;
-+
-+#if defined(CONFIG_USB)
-+ if (PCI_SLOT(devfn) == USB_HOST_SLOT)
-+ return pci63xx_int_read(devfn, where, val, size);
-+#endif
-+
-+ mpi_SetupPciConfigAccess(BCM_PCI_CFG(PCI_SLOT(devfn), PCI_FUNC(devfn), where));
-+ data = *(uint32 *)ioBase;
-+ switch(size) {
-+ case 1:
-+ *val = (data >> ((where & 3) << 3)) & 0xff;
-+ break;
-+ case 2:
-+ *val = (data >> ((where & 3) << 3)) & 0xffff;
-+ break;
-+ case 4:
-+ *val = data;
-+ /* Special case for reading PCI device range */
-+ if ((where >= PCI_BASE_ADDRESS_0) && (where <= PCI_BASE_ADDRESS_5)) {
-+ if (pci_mem_size_rd) {
-+ /* bcm6348 PCI memory window minimum size is 64K */
-+ *val &= PCI_SIZE_64K;
-+ }
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ pci_mem_size_rd = FALSE;
-+ mpi_ClearPciConfigAccess();
-+
-+ return PCIBIOS_SUCCESSFUL;
-+}
-+
-+static int bcm96348_pcibios_write(struct pci_bus *bus, unsigned int devfn,
-+ int where, int size, u32 val)
-+{
-+ volatile unsigned char *ioBase = (unsigned char *)(mpi->l2piobase | KSEG1);
-+ uint32 data;
-+
-+#if defined(CONFIG_USB)
-+ if (PCI_SLOT(devfn) == USB_HOST_SLOT)
-+ return pci63xx_int_write(devfn, where, &val, size);
-+#endif
-+ mpi_SetupPciConfigAccess(BCM_PCI_CFG(PCI_SLOT(devfn), PCI_FUNC(devfn), where));
-+ data = *(uint32 *)ioBase;
-+ switch(size) {
-+ case 1:
-+ data = (data & ~(0xff << ((where & 3) << 3))) |
-+ (val << ((where & 3) << 3));
-+ break;
-+ case 2:
-+ data = (data & ~(0xffff << ((where & 3) << 3))) |
-+ (val << ((where & 3) << 3));
-+ break;
-+ case 4:
-+ data = val;
-+ /* Special case for reading PCI device range */
-+ if ((where >= PCI_BASE_ADDRESS_0) && (where <= PCI_BASE_ADDRESS_5)) {
-+ if (val == 0xffffffff)
-+ pci_mem_size_rd = TRUE;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+ *(uint32 *)ioBase = data;
-+ udelay(500);
-+ mpi_ClearPciConfigAccess();
-+
-+ return PCIBIOS_SUCCESSFUL;
-+}
-+
-+struct pci_ops bcm96348_pci_ops = {
-+ .read = bcm96348_pcibios_read,
-+ .write = bcm96348_pcibios_write
-+};
---- linux-2.6.8.1/arch/mips/pci/Makefile 2004-08-14 12:54:47.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/arch/mips/pci/Makefile 2006-06-26 09:07:09.000000000 +0200
-@@ -17,6 +17,8 @@
- obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o
- obj-$(CONFIG_MIPS_TX3927) += ops-jmr3927.o
- obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o
-+obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o
-+obj-$(CONFIG_BCM_PCI) += fixup-bcm96348.o pci-bcm96348.o ops-bcm96348.o
-
- #
- # These are still pretty much in the old state, watch, go blind.
-@@ -51,3 +53,7 @@
- obj-$(CONFIG_TOSHIBA_RBTX4927) += fixup-rbtx4927.o ops-tx4927.o
- obj-$(CONFIG_VICTOR_MPC30X) += fixup-mpc30x.o
- obj-$(CONFIG_ZAO_CAPCELLA) += fixup-capcella.o
-+
-+ifeq "$(CONFIG_BCM_PCI)" "y"
-+EXTRA_CFLAGS += -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+endif
---- linux-2.6.8.1/arch/mips/pci/pci-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/arch/mips/pci/pci-bcm96348.c 2006-06-26 09:07:09.000000000 +0200
-@@ -0,0 +1,54 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+#include <linux/types.h>
-+#include <linux/pci.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+
-+#include <asm/pci_channel.h>
-+#include <bcmpci.h>
-+
-+static struct resource bcm_pci_io_resource = {
-+ .name = "bcm96348 pci IO space",
-+ .start = BCM_PCI_IO_BASE,
-+ .end = BCM_PCI_IO_BASE + BCM_PCI_IO_SIZE_64KB - 1,
-+ .flags = IORESOURCE_IO
-+};
-+
-+static struct resource bcm_pci_mem_resource = {
-+ .name = "bcm96348 pci memory space",
-+ .start = BCM_PCI_MEM_BASE,
-+ .end = BCM_PCI_MEM_BASE + BCM_PCI_MEM_SIZE_16MB - 1,
-+ .flags = IORESOURCE_MEM
-+};
-+
-+extern struct pci_ops bcm96348_pci_ops;
-+
-+struct pci_controller bcm96348_controller = {
-+ .pci_ops = &bcm96348_pci_ops,
-+ .io_resource = &bcm_pci_io_resource,
-+ .mem_resource = &bcm_pci_mem_resource,
-+};
-+
-+static void bcm96348_pci_init(void)
-+{
-+ register_pci_controller(&bcm96348_controller);
-+}
-+
-+arch_initcall(bcm96348_pci_init);
---- linux-2.6.8.1/drivers/mtd/maps/bcm963xx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/drivers/mtd/maps/bcm963xx.c 2006-06-26 09:07:13.000000000 +0200
-@@ -0,0 +1,162 @@
-+/*
-+ * A simple flash mapping code for BCM963xx board flash memory
-+ * It is simple because it only treats all the flash memory as ROM
-+ * It is used with chips/map_rom.c
-+ *
-+ * Song Wang (songw@broadcom.com)
-+ */
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <asm/io.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/map.h>
-+#include <linux/config.h>
-+#include <linux/mtd/partitions.h>
-+
-+#include <board.h>
-+#include <bcmTag.h>
-+#define VERSION "1.0"
-+
-+
-+extern PFILE_TAG kerSysImageTagGet(void);
-+
-+static struct mtd_info *mymtd;
-+static struct mtd_partition brcm_partition_info[4];
-+
-+#define CFE_ADDR 0xbfc00000
-+#define CFE_SIZE 64 << 10
-+#define FLASH_2M_SIZE 2048 << 10
-+#define FLASH_4M_SIZE 4096 << 10
-+#define NVRAM_SIZE 64 << 10
-+#define TAG_SIZE 0x100
-+#define FS_KERNEL_SIZE_4M 0x3E0000
-+#define NVRAM_ADDR_4M 0x3F0000
-+
-+static map_word brcm_physmap_read16(struct map_info *map, unsigned long ofs)
-+{
-+ map_word val;
-+
-+ val.x[0] = __raw_readw(map->map_priv_1 + ofs);
-+
-+ return val;
-+}
-+
-+void brcm_physmap_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
-+{
-+ memcpy_fromio(to, map->map_priv_1 + from, len);
-+}
-+
-+static void brcm_physmap_write16(struct map_info *map, __u16 d, unsigned long adr)
-+{
-+ __raw_writew(d, map->map_priv_1 + adr);
-+ mb();
-+}
-+
-+void brcm_physmap_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len)
-+{
-+ memcpy_toio(map->map_priv_1 + to, from, len);
-+}
-+
-+struct map_info brcm_physmap_map = {
-+ .name = "Physically mapped flash",
-+ .bankwidth = 2,
-+ .read = brcm_physmap_read16,
-+ .copy_from = brcm_physmap_copy_from,
-+ .write = brcm_physmap_write16,
-+ .copy_to = brcm_physmap_copy_to
-+
-+};
-+
-+
-+
-+int __init init_brcm_physmap(void)
-+{
-+ PFILE_TAG pTag = NULL;
-+ u_int32_t rootfs_addr, kernel_addr,fs_len,cfe_len;
-+ FLASH_ADDR_INFO info;
-+
-+ kerSysFlashAddrInfoGet( &info );
-+
-+ /* Read the flash memory map from flash memory. */
-+ if (!(pTag = kerSysImageTagGet())) {
-+ printk("Failed to read image tag from flash\n");
-+ return -EIO;
-+ }
-+
-+ rootfs_addr = (u_int32_t) simple_strtoul(pTag->rootfsAddress, NULL, 10);
-+ kernel_addr = (u_int32_t) simple_strtoul(pTag->kernelAddress, NULL, 10);
-+
-+
-+ brcm_physmap_map.size = FLASH_4M_SIZE;
-+
-+ fs_len = kernel_addr - rootfs_addr;
-+ cfe_len=CFE_SIZE;
-+ /* Ron mapping from fs */
-+ brcm_physmap_map.map_priv_1 = (unsigned long)CFE_ADDR;
-+
-+ if (!brcm_physmap_map.map_priv_1) {
-+ printk("Wrong flash starting address\n");
-+ return -EIO;
-+ }
-+
-+ if (brcm_physmap_map.size <= 0) {
-+ printk("Wrong flash size\n");
-+ return -EIO;
-+ }
-+
-+ mymtd = do_map_probe("cfi_probe", &brcm_physmap_map);
-+ if (!mymtd)
-+ return -EIO;
-+
-+ mymtd->owner = THIS_MODULE;
-+ /* Ron file system */
-+ brcm_partition_info[0].name = "fs";
-+ brcm_partition_info[0].offset = (cfe_len + TAG_SIZE);
-+ brcm_partition_info[0].size = fs_len;
-+ brcm_partition_info[0].mask_flags = 0;
-+
-+ /* Ron tag + file system + kernel */
-+ brcm_partition_info[1].name = "tag+fs+kernel";
-+ brcm_partition_info[1].offset = cfe_len;
-+ brcm_partition_info[1].size = FS_KERNEL_SIZE_4M;
-+ brcm_partition_info[1].mask_flags = 0;
-+
-+ /* Ron bootloader */
-+ brcm_partition_info[2].name = "bootloader";
-+ brcm_partition_info[2].offset = 0x00;
-+ brcm_partition_info[2].size = cfe_len;
-+ brcm_partition_info[2].mask_flags = 0;
-+
-+ /* Ron nvram */
-+ brcm_partition_info[3].name = "nvram";
-+ brcm_partition_info[3].offset = NVRAM_ADDR_4M;
-+ brcm_partition_info[3].size = NVRAM_SIZE;
-+ brcm_partition_info[3].mask_flags = 0;
-+
-+ add_mtd_partitions(mymtd, brcm_partition_info, 4);
-+
-+ return 0;
-+
-+}
-+
-+static void __exit cleanup_brcm_physmap(void)
-+{
-+if (mymtd) {
-+ del_mtd_partitions(mymtd);
-+ del_mtd_device(mymtd);
-+ map_destroy(mymtd);
-+}
-+if (brcm_physmap_map.map_priv_1) {
-+ brcm_physmap_map.map_priv_1 = 0;
-+}
-+}
-+
-+module_init(init_brcm_physmap);
-+module_exit(cleanup_brcm_physmap);
-+
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Song Wang songw@broadcom.com");
-+MODULE_DESCRIPTION("Configurable MTD map driver for read-only root file system");
---- linux-2.6.8.1/drivers/mtd/maps/Makefile 2004-08-14 12:54:46.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/drivers/mtd/maps/Makefile 2006-06-26 09:07:13.000000000 +0200
-@@ -39,13 +39,13 @@
- obj-$(CONFIG_MTD_SCx200_DOCFLASH)+= scx200_docflash.o
- obj-$(CONFIG_MTD_DBOX2) += dbox2-flash.o
- obj-$(CONFIG_MTD_OCELOT) += ocelot.o
-+obj-$(CONFIG_MTD_LASAT) += lasat.o
- obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o
- obj-$(CONFIG_MTD_PCI) += pci.o
--obj-$(CONFIG_MTD_PB1XXX) += pb1xxx-flash.o
--obj-$(CONFIG_MTD_DB1X00) += db1x00-flash.o
--obj-$(CONFIG_MTD_PB1550) += pb1550-flash.o
--obj-$(CONFIG_MTD_DB1550) += db1550-flash.o
- obj-$(CONFIG_MTD_LASAT) += lasat.o
-+obj-$(CONFIG_MTD_DB1X00) += db1x00-flash.o
-+obj-$(CONFIG_MTD_PB1550) += pb1550-flash.o
-+obj-$(CONFIG_MTD_DB1550) += db1550-flash.o
- obj-$(CONFIG_MTD_AUTCPU12) += autcpu12-nvram.o
- obj-$(CONFIG_MTD_EDB7312) += edb7312.o
- obj-$(CONFIG_MTD_IMPA7) += impa7.o
-@@ -64,3 +64,11 @@
- obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o
- obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o
- obj-$(CONFIG_MTD_DMV182) += dmv182.o
-+obj-$(CONFIG_MTD_PB1000) += pb1xxx-flash.o
-+obj-$(CONFIG_MTD_PB1100) += pb1xxx-flash.o
-+obj-$(CONFIG_MTD_PB1500) += pb1xxx-flash.o
-+obj-$(CONFIG_MTD_DB1X00) += db1x00-flash.o
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+obj-$(CONFIG_MTD_BCM963XX) += bcm963xx.o
-+EXTRA_CFLAGS += -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
---- linux-2.6.8.1/drivers/mtd/maps/Kconfig 2004-08-14 12:56:23.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/drivers/mtd/maps/Kconfig 2006-06-26 09:07:13.000000000 +0200
-@@ -60,6 +60,12 @@
- Ignore this option if you use run-time physmap configuration
- (i.e., run-time calling physmap_configure()).
-
-+config MTD_BCM963XX
-+ tristate "Broadcom 963xx ADSL board flash memory support"
-+ depends on MIPS_BRCM
-+ help
-+ Broadcom 963xx ADSL board flash memory
-+
- config MTD_SUN_UFLASH
- tristate "Sun Microsystems userflash support"
- depends on (SPARC32 || SPARC64) && MTD_CFI
-@@ -182,41 +188,12 @@
- help
- Support for the flash chip on Tsunami TIG bus.
-
--config MTD_LASAT
-- tristate "Flash chips on LASAT board"
-- depends on LASAT
-- help
-- Support for the flash chips on the Lasat 100 and 200 boards.
--
- config MTD_NETtel
- tristate "CFI flash device on SnapGear/SecureEdge"
- depends on X86 && MTD_PARTITIONS && MTD_JEDECPROBE
- help
- Support for flash chips on NETtel/SecureEdge/SnapGear boards.
-
--config MTD_PB1XXX
-- tristate "Flash devices on Alchemy PB1xxx boards"
-- depends on MIPS && ( MIPS_PB1000 || MIPS_PB1100 || MIPS_PB1500 )
-- help
-- Flash memory access on Alchemy Pb1000/Pb1100/Pb1500 boards
--
--config MTD_PB1XXX_BOOT
-- bool "PB1x00 boot flash device"
-- depends on MTD_PB1XXX && ( MIPS_PB1100 || MIPS_PB1500 )
-- help
-- Use the first of the two 32MiB flash banks on Pb1100/Pb1500 board.
-- You can say 'Y' to both this and 'MTD_PB1XXX_USER' below, to use
-- both banks.
--
--config MTD_PB1XXX_USER
-- bool "PB1x00 user flash device"
-- depends on MTD_PB1XXX && ( MIPS_PB1100 || MIPS_PB1500 )
-- default y if MTD_PB1XX_BOOT = n
-- help
-- Use the second of the two 32MiB flash banks on Pb1100/Pb1500 board.
-- You can say 'Y' to both this and 'MTD_PB1XXX_BOOT' above, to use
-- both banks.
--
- config MTD_PB1550
- tristate "Flash devices on Alchemy PB1550 board"
- depends on MIPS && MIPS_PB1550
-@@ -338,6 +315,80 @@
- Mapping for the Flaga digital module. If you don´t have one, ignore
- this setting.
-
-+config MTD_PB1000
-+ tristate "Pb1000 Boot Flash device"
-+ depends on MIPS && MIPS_PB1000
-+ help
-+ Flash memory access on Alchemy Pb1000
-+
-+config MTD_PB1100
-+ tristate "Pb1100 Flash device"
-+ depends on MIPS && MIPS_PB1100
-+ help
-+ Flash memory access on Alchemy Pb1100
-+
-+config MTD_PB1500
-+ tristate "Pb1500 Flash device"
-+ depends on MIPS && MIPS_PB1500
-+ help
-+ Flash memory access on Alchemy Pb1500
-+
-+config MTD_PB1500_BOOT
-+ bool "Pb1100/Pb1500 Boot Flash device"
-+ depends on MIPS && (MTD_PB1500 || MTD_PB1100)
-+ help
-+ Use the first of the two 32MB flash banks on Pb1100/Pb1500 board.
-+ You can say 'Y' to both this and the USER flash option, to use
-+ both banks.
-+
-+config MTD_PB1500_USER
-+ bool "Pb1100/Pb1500 User Flash device (2nd 32MB bank)"
-+ depends on MIPS && (MTD_PB1500 || MTD_PB1100)
-+ help
-+ Use the second of the two 32MB flash banks on Pb1100/Pb1500 board.
-+ You can say 'Y' to both this and the BOOT flash option, to use
-+ both banks.
-+
-+config MTD_DB1X00
-+ tristate "Db1X00 Flash device"
-+ depends on MIPS && (MIPS_DB1000 || MIPS_DB1100 || MIPS_DB1500)
-+ help
-+ Flash memory access on Alchemy Db1X00 Boards
-+
-+config MTD_DB1X00_BOOT
-+ bool "Db1X00 Boot Flash device"
-+ depends on MIPS && MTD_DB1X00
-+ help
-+ Use the first of the two 32MB flash banks on Db1X00 board.
-+ You can say 'Y' to both this and the USER flash option, to use
-+ both banks.
-+
-+config MTD_DB1X00_USER
-+ bool "Db1X00 User Flash device (2nd 32MB bank)"
-+ depends on MIPS && MTD_DB1X00
-+ help
-+ Use the second of the two 32MB flash banks on Db1X00 boards.
-+ You can say 'Y' to both this and the BOOT flash option, to use
-+ both banks.
-+
-+config MTD_BOSPORUS
-+ tristate "Bosporus Flash device"
-+ depends on MIPS && MIPS_BOSPORUS
-+ help
-+ Flash memory access on Alchemy Bosporus Board
-+
-+config MTD_XXS1500
-+ tristate "MyCable XXS1500 Flash device"
-+ depends on MIPS && MIPS_XXS1500
-+ help
-+ Flash memory access on MyCable XXS1500 Board
-+
-+config MTD_MTX1
-+ tristate "4-G Systems MTX-1 Flash device"
-+ depends on MIPS && MIPS_MTX1
-+ help
-+ Flash memory access on 4-G Systems MTX-1 Board
-+
- config MTD_BEECH
- tristate "CFI Flash device mapped on IBM 405LP Beech"
- depends on MTD_CFI && PPC32 && 40x && BEECH
-@@ -422,6 +473,12 @@
- NVRAM on the Momenco Ocelot board. If you have one of these boards
- and would like access to either of these, say 'Y'.
-
-+config MTD_LASAT
-+ tristate "LASAT flash device"
-+ depends on LASAT && MTD_CFI
-+ help
-+ Support for the flash chips on the Lasat 100 and 200 boards.
-+
- config MTD_SOLUTIONENGINE
- tristate "CFI Flash device mapped on Hitachi SolutionEngine"
- depends on SUPERH && MTD_CFI && MTD_REDBOOT_PARTS
---- linux-2.6.8.1/drivers/usb/host/Makefile 2004-08-14 12:56:23.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/drivers/usb/host/Makefile 2006-06-26 09:07:14.000000000 +0200
-@@ -8,3 +8,7 @@
- obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o
-
- obj-$(CONFIG_USB_SL811HS) += hc_sl811.o
-+
-+ifeq ($(CONFIG_MIPS_BRCM),y)
-+EXTRA_CFLAGS += -DCONFIG_SWAP_IO_SPACE -D__MIPSEB__
-+endif
-\ No newline at end of file
---- linux-2.6.8.1/include/asm-mips/addrspace.h 2004-08-14 12:54:47.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/addrspace.h 2006-06-26 09:07:15.000000000 +0200
-@@ -11,7 +11,13 @@
- #define _ASM_ADDRSPACE_H
-
- #include <linux/config.h>
-+#ifdef __KERNEL__
-+#if defined(CONFIG_BCM_ENDPOINT_MODULE)
-+#include <asm/mach-generic/spaces.h>
-+#else
- #include <spaces.h>
-+#endif
-+#endif
-
- /*
- * Configure language
---- linux-2.6.8.1/include/asm-mips/bootinfo.h 2004-08-14 12:54:51.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/bootinfo.h 2006-06-26 09:07:15.000000000 +0200
-@@ -210,6 +210,16 @@
- #define MACH_GROUP_TITAN 22 /* PMC-Sierra Titan */
- #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */
-
-+#if defined(CONFIG_MIPS_BRCM)
-+/*
-+ * Valid machtype for group BRCM
-+ */
-+#define MACH_GROUP_BRCM 23 /* Broadcom boards */
-+#define MACH_BCM96338 0
-+#define MACH_BCM96345 1
-+#define MACH_BCM96348 2
-+#endif
-+
- #define CL_SIZE COMMAND_LINE_SIZE
-
- const char *get_system_type(void);
---- linux-2.6.8.1/include/asm-mips/cpu.h 2004-08-14 12:54:50.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/cpu.h 2006-06-26 09:07:15.000000000 +0200
-@@ -71,6 +71,11 @@
- #define PRID_IMP_4KEMPR2 0x9100
- #define PRID_IMP_4KSD 0x9200
- #define PRID_IMP_24K 0x9300
-+#if defined(CONFIG_MIPS_BRCM)
-+#define PRID_IMP_BCM6338 0x9000
-+#define PRID_IMP_BCM6345 0x8000
-+#define PRID_IMP_BCM6348 0x9100
-+#endif
-
- #define PRID_IMP_UNKNOWN 0xff00
-
-@@ -177,7 +182,14 @@
- #define CPU_VR4133 56
- #define CPU_AU1550 57
- #define CPU_24K 58
-+#if defined(CONFIG_MIPS_BRCM)
-+#define CPU_BCM6338 59
-+#define CPU_BCM6345 60
-+#define CPU_BCM6348 61
-+#define CPU_LAST 61
-+#else
- #define CPU_LAST 58
-+#endif
-
- /*
- * ISA Level encodings
-diff -urN linux-2.6.8.1/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h linux-2.6.8.1-brcm63xx/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h
---- linux-2.6.8.1/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h 2006-06-26 09:07:15.000000000 +0200
-@@ -0,0 +1,36 @@
-+#ifndef __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H
-+#define __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H
-+
-+#define cpu_has_tlb 1
-+#define cpu_has_4kex 4
-+#define cpu_has_4ktlb 8
-+#define cpu_has_fpu 0
-+#define cpu_has_32fpr 0
-+#define cpu_has_counter 0x40
-+#define cpu_has_watch 0
-+#define cpu_has_mips16 0
-+#define cpu_has_divec 0x200
-+#define cpu_has_vce 0
-+#define cpu_has_cache_cdex_p 0
-+#define cpu_has_cache_cdex_s 0
-+#define cpu_has_prefetch 0x40000
-+#define cpu_has_mcheck 0x2000
-+#define cpu_has_ejtag 0x4000
-+#define cpu_has_llsc 0x10000
-+#define cpu_has_vtag_icache 0
-+#define cpu_has_dc_aliases 0
-+#define cpu_has_ic_fills_f_dc 0
-+
-+#define cpu_has_nofpuex 0
-+#define cpu_has_64bits 0
-+#define cpu_has_64bit_zero_reg 0
-+#define cpu_has_64bit_gp_regs 0
-+#define cpu_has_64bit_addresses 0
-+
-+#define cpu_has_subset_pcaches 0
-+
-+#define cpu_dcache_line_size() 16
-+#define cpu_icache_line_size() 16
-+#define cpu_scache_line_size() 0
-+
-+#endif /* __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H */
---- linux-2.6.8.1/include/asm-mips/mach-generic/param.h 2004-08-14 12:55:10.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/mach-generic/param.h 2006-06-26 09:07:15.000000000 +0200
-@@ -8,6 +8,10 @@
- #ifndef __ASM_MACH_GENERIC_PARAM_H
- #define __ASM_MACH_GENERIC_PARAM_H
-
-+#if defined(CONFIG_MIPS_BRCM)
-+#define HZ 200 /* Internal kernel timer frequency */
-+#else
- #define HZ 1000 /* Internal kernel timer frequency */
-+#endif
-
- #endif /* __ASM_MACH_GENERIC_PARAM_H */
---- linux-2.6.8.1/include/asm-mips/page.h 2004-08-14 12:55:10.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/page.h 2006-06-26 09:07:15.000000000 +0200
-@@ -13,7 +13,13 @@
-
- #ifdef __KERNEL__
-
-+#if defined(CONFIG_BCM_ENDPOINT_MODULE)
-+#include <asm/mach-generic/spaces.h>
-+#else
- #include <spaces.h>
-+#endif
-+
-+#endif
-
- /*
- * PAGE_SHIFT determines the page size
-@@ -33,6 +39,7 @@
- #define PAGE_SIZE (1UL << PAGE_SHIFT)
- #define PAGE_MASK (~(PAGE_SIZE-1))
-
-+#ifdef __KERNEL__
- #ifndef __ASSEMBLY__
-
- extern void clear_page(void * page);
---- linux-2.6.8.1/include/asm-mips/param.h 2004-08-14 12:54:51.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/param.h 2006-06-26 09:07:15.000000000 +0200
-@@ -12,7 +12,11 @@
- #ifdef __KERNEL__
-
- # include <param.h> /* Internal kernel timer frequency */
-+#if defined(CONFIG_BCM_ENDPOINT_MODULE)
-+# define USER_HZ HZ /* .. some user interfaces are in "ticks" */
-+#else
- # define USER_HZ 100 /* .. some user interfaces are in "ticks" */
-+#endif
- # define CLOCKS_PER_SEC (USER_HZ) /* like times() */
- #endif
-
---- linux-2.6.8.1/include/asm-mips/timex.h 2004-08-14 12:56:15.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/include/asm-mips/timex.h 2006-06-26 09:07:15.000000000 +0200
-@@ -31,7 +31,11 @@
- * no reason to make this a separate architecture.
- */
-
-+#if defined(CONFIG_BCM_ENDPOINT_MODULE)
-+#include <asm/mach-generic/timex.h>
-+#else
- #include <timex.h>
-+#endif
-
- /*
- * Standard way to access the cycle counter.
-diff -urN linux-2.6.8.1/bcmdrivers/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/Makefile
---- linux-2.6.8.1/bcmdrivers/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,17 @@
-+# File: bcmdrivers/Makefile
-+#
-+# Makefile for the Linux kernel modules.
-+#
-+-include $(KERNEL_DIR)/.config
-+
-+obj-y += opensource/
-+
-+# If rootfs is nfs, we have to build Ethernet
-+# driver as built-n
-+ifeq ($(CONFIG_ROOTFS_NFS),y)
-+obj-y += broadcom/
-+endif
-+
-+obj-y += broadcom/
-+obj-m += broadcom/
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/Makefile
---- linux-2.6.8.1/bcmdrivers/broadcom/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/Makefile 2006-06-26 10:29:23.000000000 +0200
-@@ -0,0 +1,3 @@
-+
-+symlinks:
-+ #cp ../../../tools/built-in.o built-in.o
-Files linux-2.6.8.1/bcmdrivers/broadcom/built-in.o and linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/built-in.o differ
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_defs.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_defs.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_defs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_defs.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,133 @@
-+/* TARGET=bcm6348-dmt-T1-dmtbis-adsl2plus-L2-SRA-firmware-Qproc-HW-RTL-pipeline-IncOneBit-Readsl2-doubleUS */
-+
-+#define SOURCE_FILE_
-+#define BCM6348_SRC
-+#define G994_T1P413_1024_FFT
-+#define ENABLE_DIG_USPWR_CUTBACK
-+#define ADSLCORE_ONLY
-+#define TEQ_DF
-+#define LOOP_TIMING_PLL
-+#define RCV_PHASE_TWEAK_ONLY
-+#define ADSL_MAX_POSSIBLE_RCV_RATE
-+#define HARDWARE_CHANNEL
-+#define ADSL_HARDWARE_AGC
-+#define HW_CHANNEL_ADC
-+#define HW_CHANNEL_DAC
-+#define HW_PGA
-+#define DIGITALEC_SINGLE_TAP_UPDATE
-+#define ANALOGEC_SINGLE_TAP_UPDATE
-+#define HWLOG
-+#define G992_TRELLIS_CODE_CLAMPING
-+#define G992DECODERTRELLISBOUNDARY
-+#define MEMORYLIMIT64K
-+#define bcm47xx
-+#define DSL_BIG_ENDIAN
-+#define MIPS_SRC
-+#define VP_INLINE -Winline
-+#define USE_ASM_API
-+#define RTL_SRC
-+#define RSENC_INLINE
-+#define BITENC_INLINE
-+#define USE_SLOW_DATA
-+#define USE_FAST_TEXT
-+#define PROFILE_INLINE
-+#define CHIP_SRC
-+#define G992_RESYNC_PILOT_PHASE_IN_SHOWTIME
-+#define G992_APPLY_SSVI
-+#define SHARE_TEQ_VARS
-+#define ANNEX_M
-+#define DOUBLE_UP_STREAM
-+#define G994P1_SUPPORT_A43C
-+#define USE_ASM_API
-+#define MIPS_ASM
-+#define MEMORYLIMIT64K
-+#define ADSL_FIRMWARE
-+#define G992DATA_XMT_COMPACT_WORD
-+#define ADSL_MAX_POSSIBLE_RCV_RATE
-+#define DSP_FRONTEND_ONLY
-+#define G992P3_ONE_BIT_CONSTELLATION
-+#define ADSL_MODEM
-+#define ATM
-+#define ADSL_ATUR
-+#define ADSL_SOFTWARE_TIME_ERROR_CALCULATION
-+#define DSL_REPORT_ALL_COUNTERS
-+#define ADSL_MONITOR_LCD
-+#define G994P1
-+#define G994P1_ATUR
-+#define G992
-+#define G992_ATUR
-+#define ADSL_FRAMER
-+#define G997_1
-+#define ATM_I432
-+#define TEQ_DF
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G994P1_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G992_TRELLISCODE
-+#define ADSL_HARDWARE_ECHO_CANCELLOR
-+#define G992P1
-+#define G992P1_ATUR
-+#define G992P1_ANNEX_A
-+#define ADSL_HARDWARE_TIME_ERROR_TRACKING
-+#define G992P1_NEWFRAME
-+#define G992P1_NEWFRAME_ATUR
-+#define G992P1_ANNEX_A_USED_FOR_G992P2
-+#define T1P413
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G992_CALC_DEBUG_SNR_BEFORE_TEQ
-+#define G992P3
-+#define RATE_SELECT_E14
-+#define G992P3_ATUR
-+#define G992P3AMENDMENT
-+#define GLOBESPAN_DM
-+#define G992P3_COMB_MSG_THREE_COPIES
-+#define G992P3_POWER_MANAGEMENT
-+#define G992P3_SRA
-+#define G992P5
-+#define G992P5_ATUR
-+#define ADSL_PIPELINE_CODE
-+#define ADSL_HARDWARE_TIME_ERROR_TRACKING
-+#define G994P1RCV_QPROC
-+#define G994P1XMT_QPROC
-+#define G992RCV_QPROC
-+#define G992XMT_QPROC
-+#define G992RCV_RS
-+#define VP_SIMULATOR
-+#define T1P413RCV_QPROC
-+#define T1P413XMT_QPROC
-+#define G992ENC_HW_DATAMODE
-+#define G992DATA_XMT_HW_RS
-+#define G992DATA_XMT_COMPACT_WORD
-+#define G992RCV_QPROC_FAST
-+#define G992_BIT_SWAP
-+#define ADSL_IDENTIFY_VENDOR_FIRMWARE
-+#define ADSL_ATUR_FORCE_BIGGER_UPSTREAM_MARGIN
-+#define G992_MORE_FRAME_MODE
-+#define XMT_RACT2_FOR_ADI_COMPATIBILITY
-+#define XMT_FFT_SIZE_2X
-+#define SYNCH_SYMBOL_DETECTION
-+#define ANSI_CACT12_PING_PONG
-+#define ADSL_SPECIAL_FIX_FOR_FRENCH_TELECOM
-+#define G994P1_CHECK_SECURITY
-+#define G994P1_NON_STD_INFO
-+#define I432_HEADER_COMPRESSION
-+#define TDC_IOP_FIX_ERICSSON_TI_4000C_350
-+#define TDC_IOP_FIX_SEIMENS_TI
-+#define FT_ADI_US_RATE_FIX
-+#define ANSI_CACT12_PING_PONG
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G994P1_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define READSL2
-+#define G992_APPLY_SSVI
-+#define READSL2_FILTERS
-+
-+
-+#define ADSL_PHY_XFACE_OFFSET 0x21F90
-+
-+
-+#define ADSL_PHY_SDRAM_BIAS 0x1A0000
-+
-+
-+#define ADSL_PHY_SDRAM_LINK_OFFSET 0x1A0000
-+
-+
-+#define ADSL_PHY_SDRAM_PAGE_SIZE 0x200000
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_lmem.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_lmem.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_lmem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_lmem.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,6 @@
-+/*
-+** Don't change!
-+** This file has been generated automatically by bin2c program
-+*/
-+
-+extern const unsigned char adsl_lmem[51036];
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_sdram.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_sdram.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_sdram.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/adslcore6348/adsl_sdram.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,6 @@
-+/*
-+** Don't change!
-+** This file has been generated automatically by bin2c program
-+*/
-+
-+extern const unsigned char adsl_sdram[364348];
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslCoreDefs.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslCoreDefs.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslCoreDefs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslCoreDefs.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,245 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslCore.c -- Bcm ADSL core driver
-+ *
-+ * Description:
-+ * This file contains BCM ADSL core driver
-+ *
-+ *
-+ * Copyright (c) 2000-2001 Broadcom Corporation
-+ * All Rights Reserved
-+ * No portions of this material may be reproduced in any form without the
-+ * written permission of:
-+ * Broadcom Corporation
-+ * 16215 Alton Parkway
-+ * Irvine, California 92619
-+ * All information contained in this document is Broadcom Corporation
-+ * company private, proprietary, and trade secret.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.4 $
-+ *
-+ * $Id: AdslCoreDefs.h,v 1.4 2004/07/20 23:45:48 ilyas Exp $
-+ *
-+ * $Log: AdslCoreDefs.h,v $
-+ * Revision 1.4 2004/07/20 23:45:48 ilyas
-+ * Added driver version info, SoftDslPrintf support. Fixed G.997 related issues
-+ *
-+ * Revision 1.3 2004/06/10 00:20:33 ilyas
-+ * Added L2/L3 and SRA
-+ *
-+ * Revision 1.2 2004/04/12 23:24:38 ilyas
-+ * Added default G992P5 PHY definition
-+ *
-+ * Revision 1.1 2004/04/08 23:59:15 ilyas
-+ * Initial CVS checkin
-+ *
-+ ****************************************************************************/
-+
-+#ifndef _ADSL_CORE_DEFS_H
-+#define _ADSL_CORE_DEFS_H
-+
-+#if defined(__KERNEL__)
-+#include <linux/config.h>
-+#endif
-+
-+#if defined(CONFIG_BCM96348) || defined(BOARD_bcm96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(BOARD_bcm96338) || defined(_BCM96338_)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcore6348C/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcore6348B/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcore6348SA/adsl_defs.h"
-+#else
-+#include "../adslcore6348/adsl_defs.h"
-+#endif
-+#endif
-+
-+#if defined(__KERNEL__) || defined(TARG_OS_RTEMS) || defined(_CFE_)
-+#if defined(CONFIG_BCM96345) || defined(BOARD_bcm96345) || defined(_BCM96345_)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcore6345C/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcore6345B/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcore6345SA/adsl_defs.h"
-+#else
-+#include "../adslcore6345/adsl_defs.h"
-+#endif
-+#endif /* of CONFIG_BCM96345 */
-+#else
-+#if defined(CONFIG_BCM96345)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcoreC/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcoreB/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcoreSA/adsl_defs.h"
-+#else
-+#include "../adslcore/adsl_defs.h"
-+#endif
-+#endif /* of CONFIG_BCM96345 */
-+#endif /* __KERNEL__ */
-+
-+#ifdef _WIN32_WCE
-+#define ASSERT(a)
-+#endif
-+
-+#include "AdslXfaceData.h"
-+
-+/* adjust some definitions for the HOST */
-+
-+#undef GLOBAL_PTR_BIAS
-+#undef ADSLCORE_ONLY
-+#undef USE_SLOW_DATA
-+#undef USE_FAST_TEXT
-+#undef VP_SIMULATOR
-+#undef bcm47xx
-+#undef ADSL_FRAMER
-+#undef ATM
-+#undef ATM_I432
-+#undef DSL_OS
-+
-+#define HOST_ONLY
-+#define G997_1_FRAMER
-+#define ADSL_MIB
-+
-+#ifndef FLATTEN_ADDR_ADJUST
-+#define FLATTEN_ADDR_ADJUST 0xFFF00000
-+#endif
-+
-+/* definitions for combo PHY (AnnexA(ADSL2) and AnnexB) */
-+
-+#if !(defined(ADSL_SINGLE_PHY) || defined(G992_ANNEXC))
-+
-+#undef G992P1_ANNEX_A
-+#define G992P1_ANNEX_A
-+#undef G992P3
-+#define G992P3
-+#undef G992P5
-+#define G992P5
-+#define G992P1_ANNEX_A
-+#undef READSL2
-+#define READSL2
-+#undef G992P1_ANNEX_A_USED_FOR_G992P2
-+#define G992P1_ANNEX_A_USED_FOR_G992P2
-+#undef T1P413
-+#define T1P413
-+
-+#undef G992P1_ANNEX_B
-+#define G992P1_ANNEX_B
-+
-+#endif
-+
-+/* ADSL PHY definition */
-+
-+typedef struct {
-+ unsigned long sdramPageAddr;
-+ unsigned long sdramImageAddr;
-+ unsigned long sdramImageSize;
-+ unsigned long sdramPhyImageAddr;
-+ unsigned short fwType;
-+ unsigned short chipType;
-+ unsigned short mjVerNum;
-+ unsigned short mnVerNum;
-+ char *pVerStr;
-+ unsigned long features[4];
-+} adslPhyInfo;
-+extern adslPhyInfo adslCorePhyDesc;
-+
-+/* chip list */
-+
-+#define kAdslPhyChipMjMask 0xFF00
-+#define kAdslPhyChipMnMask 0x00FF
-+#define kAdslPhyChipUnknown 0
-+#define kAdslPhyChip6345 0x100
-+#define kAdslPhyChip6348 0x200
-+#define kAdslPhyChipRev0 0
-+#define kAdslPhyChipRev1 1
-+#define kAdslPhyChipRev2 2
-+#define kAdslPhyChipRev3 3
-+#define kAdslPhyChipRev4 4
-+#define kAdslPhyChipRev5 5
-+
-+#define ADSL_PHY_SUPPORT(f) AdslFeatureSupported(adslCorePhyDesc.features,f)
-+#define ADSL_PHY_SET_SUPPORT(p,f) AdslFeatureSet((p)->features,f)
-+
-+/* ADSL Driver to/from PHY address and data conversion macros */
-+
-+#ifdef ADSLDRV_LITTLE_ENDIAN
-+#define ADSL_ENDIAN_CONV_LONG(x) ( ((x) << 24) | (((x) << 8) & 0x00FF0000) | (((x) >> 8) & 0x0000FF00) | ((unsigned long)(x) >> 24) )
-+#define ADSL_ENDIAN_CONV_SHORT(x) ( ((x) << 8) | ((unsigned short)(x) >> 8) )
-+#define ADSL_ENDIAN_CONV_2SHORTS(x) ( ((x) << 16) | ((unsigned long)(x) >> 16) )
-+#else
-+#define ADSL_ENDIAN_CONV_LONG(x) x
-+#define ADSL_ENDIAN_CONV_SHORT(x) x
-+#define ADSL_ENDIAN_CONV_2SHORTS(x) x
-+#endif
-+
-+#ifndef ADSL_PHY_XFACE_OFFSET
-+#define ADSL_PHY_XFACE_OFFSET 0x00017F90
-+#endif
-+#define ADSL_LMEM_XFACE_DATA (0xFFF00000 | ADSL_PHY_XFACE_OFFSET)
-+
-+#ifndef ADSL_PHY_SDRAM_START
-+#define ADSL_PHY_SDRAM_START 0x10000000
-+#endif
-+#ifndef ADSL_PHY_SDRAM_BIAS
-+#define ADSL_PHY_SDRAM_BIAS 0x00040000
-+#endif
-+#define ADSL_PHY_SDRAM_START_4 (ADSL_PHY_SDRAM_START + ADSL_PHY_SDRAM_BIAS)
-+
-+#ifndef ADSL_PHY_SDRAM_PAGE_SIZE
-+#define ADSL_PHY_SDRAM_PAGE_SIZE 0x00080000
-+#endif
-+
-+#ifdef ADSL_PHY_SDRAM_BIAS
-+#define ADSL_SDRAM_IMAGE_SIZE (ADSL_PHY_SDRAM_PAGE_SIZE - ADSL_PHY_SDRAM_BIAS)
-+#else
-+#define ADSL_SDRAM_IMAGE_SIZE (256*1024)
-+#endif
-+
-+
-+#ifndef ADSL_PHY_SDRAM_LINK_OFFSET
-+#define ADSL_PHY_SDRAM_LINK_OFFSET 0x00040000
-+#endif
-+
-+#define ADSL_SDRAM_TOTAL_SIZE 0x00800000
-+#define ADSL_SDRAM_HOST_MIPS_DEFAULT (0xA0000000 | (ADSL_SDRAM_TOTAL_SIZE - ADSL_PHY_SDRAM_PAGE_SIZE + ADSL_PHY_SDRAM_BIAS))
-+
-+#define ADSLXF ((AdslXfaceData *) ADSL_LMEM_XFACE_DATA)
-+
-+#define ADSL_MIPS_LMEM_ADDR(a) (((ulong)(a) & 0x19000000) == 0x19000000)
-+#define SDRAM_ADDR_TO_HOST(a) ((void *) ((ulong)(a) - adslCorePhyDesc.sdramPhyImageAddr + \
-+ (ADSLXF->sdramBaseAddr ? (unsigned long) ADSLXF->sdramBaseAddr : ADSL_SDRAM_HOST_MIPS_DEFAULT)))
-+#define SDRAM_ADDR_TO_ADSL(a) ((void *) (adslCorePhyDesc.sdramPhyImageAddr + ((ulong)(a) - \
-+ (ADSLXF->sdramBaseAddr ? (unsigned long) ADSLXF->sdramBaseAddr : ADSL_SDRAM_HOST_MIPS_DEFAULT))))
-+
-+#define ADSL_ADDR_TO_HOST(addr) ADSL_MIPS_LMEM_ADDR(addr) ? (void *) ((ulong) (addr) | FLATTEN_ADDR_ADJUST) : SDRAM_ADDR_TO_HOST(addr)
-+
-+
-+#ifndef DEBUG
-+#define DEBUG
-+#endif
-+
-+#ifndef __SoftDslPrintf
-+void __SoftDslPrintf(void *gDslVars, char *fmt, int argNum, ...);
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,94 @@
-+/****************************************************************************
-+ *
-+ * AdslMib.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for AdslMib
-+ * global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.8 $
-+ *
-+ * $Id: AdslMib.gh,v 1.8 2004/06/04 18:56:01 ilyas Exp $
-+ *
-+ * $Log: AdslMib.gh,v $
-+ * Revision 1.8 2004/06/04 18:56:01 ilyas
-+ * Added counter for ADSL2 framing and performance
-+ *
-+ * Revision 1.7 2003/10/17 21:02:12 ilyas
-+ * Added more data for ADSL2
-+ *
-+ * Revision 1.6 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.5 2003/07/18 19:07:15 ilyas
-+ * Merged with ADSL driver
-+ *
-+ * Revision 1.4 2002/11/13 21:32:49 ilyas
-+ * Added adjustK support for Centillium non-standard framing mode
-+ *
-+ * Revision 1.3 2002/10/31 20:27:13 ilyas
-+ * Merged with the latest changes for VxWorks/Linux driver
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibGlobals
-+#define AdslMibGlobals
-+
-+#include "AdslMib.h"
-+
-+typedef struct
-+ {
-+ /* MIB data */
-+
-+ adslMibInfo adslMib;
-+
-+ /* ADSL state data */
-+
-+ adslMibNotifyHandlerType notifyHandlerPtr;
-+ ulong timeSec;
-+ ulong timeMs;
-+ Boolean currSecondErrored;
-+ Boolean currSecondLOS;
-+ Boolean currSecondSES;
-+ Boolean currSecondFEC;
-+ ulong rcvPower;
-+ ulong rcvRateBps;
-+ ulong xmtRateBps;
-+ ulong linkStatus;
-+ G992CodingParams rcvParams;
-+ G992CodingParams xmtParams;
-+ ulong shtCounters[kG992ShowtimeNumOfMonitorCounters];
-+ ulong scratchData;
-+ long showtimeMarginThld;
-+
-+ /* ADSL diag data */
-+
-+ short snr[kAdslMibMaxToneNum];
-+ short showtimeMargin[kAdslMibMaxToneNum];
-+ uchar bitAlloc[kAdslMibMaxToneNum];
-+ short gain[kAdslMibMaxToneNum];
-+ ComplexShort chanCharLin[kAdslMibMaxToneNum];
-+ short chanCharLog[kAdslMibMaxToneNum];
-+ short quietLineNoise[kAdslMibMaxToneNum];
-+
-+ ushort nTones;
-+ uchar nMsgCnt;
-+ ulong g992MsgType;
-+ uchar rsOption[1+4];
-+ Boolean rsOptionValid;
-+ }
-+ adslMibVarsStruct;
-+
-+#endif /* AdslMibGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMib.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,114 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslMib.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for AdslMib
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: AdslMib.h,v 1.9 2004/04/12 23:34:52 ilyas Exp $
-+ *
-+ * $Log: AdslMib.h,v $
-+ * Revision 1.9 2004/04/12 23:34:52 ilyas
-+ * Merged the latest ADSL driver chnages for ADSL2+
-+ *
-+ * Revision 1.8 2004/03/03 20:14:05 ilyas
-+ * Merged changes for ADSL2+ from ADSL driver
-+ *
-+ * Revision 1.7 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.6 2003/07/18 19:07:15 ilyas
-+ * Merged with ADSL driver
-+ *
-+ * Revision 1.5 2002/10/31 20:27:13 ilyas
-+ * Merged with the latest changes for VxWorks/Linux driver
-+ *
-+ * Revision 1.4 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.3 2002/01/13 22:25:40 ilyas
-+ * Added functions to get channels rate
-+ *
-+ * Revision 1.2 2002/01/03 06:03:36 ilyas
-+ * Handle byte moves tha are not multiple of 2
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibHeader
-+#define AdslMibHeader
-+
-+#if defined(_CFE_)
-+#include "lib_types.h"
-+#include "lib_string.h"
-+#endif
-+
-+#include "AdslMibDef.h"
-+
-+/* Interface functions */
-+
-+typedef int (SM_DECL *adslMibNotifyHandlerType) (void *gDslVars, ulong event);
-+
-+extern Boolean AdslMibInit(void *gDslVars);
-+extern void AdslMibTimer(void *gDslVars, long timeMs);
-+extern void AdslMibStatusSnooper (void *gDslVars, dslStatusStruct *status);
-+extern void AdslMibSetNotifyHandler(void *gDslVars, adslMibNotifyHandlerType notifyHandlerPtr);
-+extern int AdslMibGetModulationType(void *gDslVars);
-+extern Boolean AdslMibIsAdsl2Mod(void *gDslVars);
-+extern int AdslMibGetActiveChannel(void *gDslVars);
-+extern int AdslMibGetGetChannelRate(void *gDslVars, int dir, int channel);
-+extern Boolean AdslMibIsLinkActive(void *gDslVars);
-+extern int AdslMibPowerState(void *gDslVars);
-+extern int AdslMibTrainingState (void *gDslVars);
-+extern void AdslMibClearData(void *gDslVars);
-+extern void AdslMibClearBertResults(void *gDslVars);
-+extern void AdslMibBertStartEx(void *gDslVars, ulong bertSec);
-+extern void AdslMibBertStopEx(void *gDslVars);
-+extern ulong AdslMibBertContinueEx(void *gDslVars, ulong totalBits, ulong errBits);
-+extern void AdslMibSetLPR(void *gDslVars);
-+extern void AdslMibSetShowtimeMargin(void *gDslVars, long showtimeMargin);
-+extern void AdslMibResetConectionStatCounters(void *gDslVars);
-+
-+extern void AdslMibByteMove (int size, void* srcPtr, void* dstPtr);
-+extern void AdslMibByteClear(int size, void* dstPtr);
-+extern int AdslMibStrCopy(char *srcPtr, char *dstPtr);
-+
-+/* AdslMibGetData dataId codes */
-+
-+#define kAdslMibDataAll 0
-+
-+extern void *AdslMibGetData (void *gDslVars, int dataId, void *pAdslMibData);
-+
-+extern int AdslMibGetObjectValue (
-+ void *gDslVars,
-+ uchar *objId,
-+ int objIdLen,
-+ uchar *dataBuf,
-+ ulong *dataBufLen);
-+
-+#endif /* AdslMibHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMibOid.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMibOid.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMibOid.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslMibOid.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,177 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslMibOid.h
-+ *
-+ * Description:
-+ * SNMP object identifiers for ADSL MIB and other related MIBs
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: AdslMibOid.h,v 1.5 2004/06/04 18:56:01 ilyas Exp $
-+ *
-+ * $Log: AdslMibOid.h,v $
-+ * Revision 1.5 2004/06/04 18:56:01 ilyas
-+ * Added counter for ADSL2 framing and performance
-+ *
-+ * Revision 1.4 2003/10/17 21:02:12 ilyas
-+ * Added more data for ADSL2
-+ *
-+ * Revision 1.3 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibOidHeader
-+#define AdslMibOidHeader
-+
-+#define kOidAdsl 94
-+#define kOidAdslInterleave 124
-+#define kOidAdslFast 125
-+#define kOidAtm 37
-+
-+#define kOidAdslLine 1
-+#define kOidAdslMibObjects 1
-+
-+#define kOidAdslLineTable 1
-+#define kOidAdslLineEntry 1
-+#define kOidAdslLineCoding 1
-+#define kOidAdslLineType 2
-+#define kOidAdslLineSpecific 3
-+#define kOidAdslLineConfProfile 4
-+#define kOidAdslLineAlarmConfProfile 5
-+
-+#define kOidAdslAtucPhysTable 2
-+#define kOidAdslAturPhysTable 3
-+#define kOidAdslPhysEntry 1
-+#define kOidAdslPhysInvSerialNumber 1
-+#define kOidAdslPhysInvVendorID 2
-+#define kOidAdslPhysInvVersionNumber 3
-+#define kOidAdslPhysCurrSnrMgn 4
-+#define kOidAdslPhysCurrAtn 5
-+#define kOidAdslPhysCurrStatus 6
-+#define kOidAdslPhysCurrOutputPwr 7
-+#define kOidAdslPhysCurrAttainableRate 8
-+
-+#define kOidAdslAtucChanTable 4
-+#define kOidAdslAturChanTable 5
-+#define kOidAdslChanEntry 1
-+#define kOidAdslChanInterleaveDelay 1
-+#define kOidAdslChanCurrTxRate 2
-+#define kOidAdslChanPrevTxRate 3
-+#define kOidAdslChanCrcBlockLength 4
-+
-+#define kOidAdslAtucPerfDataTable 6
-+#define kOidAdslAturPerfDataTable 7
-+#define kOidAdslPerfDataEntry 1
-+#define kOidAdslPerfLofs 1
-+#define kOidAdslPerfLoss 2
-+#define kOidAdslPerfLprs 3
-+#define kOidAdslPerfESs 4
-+#define kOidAdslPerfValidIntervals 5
-+#define kOidAdslPerfInvalidIntervals 6
-+#define kOidAdslPerfCurr15MinTimeElapsed 7
-+#define kOidAdslPerfCurr15MinLofs 8
-+#define kOidAdslPerfCurr15MinLoss 9
-+#define kOidAdslPerfCurr15MinLprs 10
-+#define kOidAdslPerfCurr15MinESs 11
-+#define kOidAdslPerfCurr1DayTimeElapsed 12
-+#define kOidAdslPerfCurr1DayLofs 13
-+#define kOidAdslPerfCurr1DayLoss 14
-+#define kOidAdslPerfCurr1DayLprs 15
-+#define kOidAdslPerfCurr1DayESs 16
-+#define kOidAdslPerfPrev1DayMoniSecs 17
-+#define kOidAdslPerfPrev1DayLofs 18
-+#define kOidAdslPerfPrev1DayLoss 19
-+#define kOidAdslPerfPrev1DayLprs 20
-+#define kOidAdslPerfPrev1DayESs 21
-+
-+#define kOidAdslAtucPerfIntervalTable 8
-+#define kOidAdslAturPerfIntervalTable 9
-+#define kOidAdslPerfIntervalEntry 1
-+#define kOidAdslIntervalNumber 1
-+#define kOidAdslIntervalLofs 2
-+#define kOidAdslIntervalLoss 3
-+#define kOidAdslIntervalLprs 4
-+#define kOidAdslIntervalESs 5
-+#define kOidAdslIntervalValidData 6
-+
-+#define kOidAdslAtucChanPerfTable 10
-+#define kOidAdslAturChanPerfTable 11
-+#define kOidAdslChanPerfEntry 1
-+#define kOidAdslChanReceivedBlks 1
-+#define kOidAdslChanTransmittedBlks 2
-+#define kOidAdslChanCorrectedBlks 3
-+#define kOidAdslChanUncorrectBlks 4
-+#define kOidAdslChanPerfValidIntervals 5
-+#define kOidAdslChanPerfInvalidIntervals 6
-+#define kOidAdslChanPerfCurr15MinTimeElapsed 7
-+#define kOidAdslChanPerfCurr15MinReceivedBlks 8
-+#define kOidAdslChanPerfCurr15MinTransmittedBlks 9
-+#define kOidAdslChanPerfCurr15MinCorrectedBlks 10
-+#define kOidAdslChanPerfCurr15MinUncorrectBlks 11
-+#define kOidAdslChanPerfCurr1DayTimeElapsed 12
-+#define kOidAdslChanPerfCurr1DayReceivedBlks 13
-+#define kOidAdslChanPerfCurr1DayTransmittedBlks 14
-+#define kOidAdslChanPerfCurr1DayCorrectedBlks 15
-+#define kOidAdslChanPerfCurr1DayUncorrectBlks 16
-+#define kOidAdslChanPerfPrev1DayMoniSecs 17
-+#define kOidAdslChanPerfPrev1DayReceivedBlks 18
-+#define kOidAdslChanPerfPrev1DayTransmittedBlks 19
-+#define kOidAdslChanPerfPrev1DayCorrectedBlks 20
-+#define kOidAdslChanPerfPrev1DayUncorrectBlks 21
-+
-+#define kOidAdslAtucChanIntervalTable 12
-+#define kOidAdslAturChanIntervalTable 13
-+#define kOidAdslChanIntervalEntry 1
-+#define kOidAdslChanIntervalNumber 1
-+#define kOidAdslChanIntervalReceivedBlks 2
-+#define kOidAdslChanIntervalTransmittedBlks 3
-+#define kOidAdslChanIntervalCorrectedBlks 4
-+#define kOidAdslChanIntervalUncorrectBlks 5
-+#define kOidAdslChanIntervalValidData 6
-+
-+/* AdslExtra OIDs for kOidAdslPrivate, kOidAdslPrivExtraInfo (defined in AdslMibDef.h) */
-+
-+#define kOidAdslExtraConnectionInfo 1
-+#define kOidAdslExtraConnectionStat 2
-+#define kOidAdslExtraFramingMode 3
-+#define kOidAdslExtraTrainingState 4
-+#define kOidAdslExtraNonStdFramingAdjustK 5
-+#define kOidAdslExtraAtmStat 6
-+#define kOidAdslExtraDiagModeData 7
-+#define kOidAdslExtraAdsl2Info 8
-+#define kOidAdslExtraTxPerfCounterInfo 9
-+
-+#define kOidAtmMibObjects 1
-+#define kOidAtmTcTable 4
-+#define kOidAtmTcEntry 1
-+#define kOidAtmOcdEvents 1
-+#define kOidAtmAlarmState 2
-+
-+#endif /* AdslMibOidHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslXfaceData.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslXfaceData.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslXfaceData.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/AdslXfaceData.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,129 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslXfaceData.h -- ADSL Core interface data structure
-+ *
-+ * Description:
-+ * To be included both in SoftDsl and BcmAdslCore driver
-+ *
-+ *
-+ * Copyright (c) 2000-2001 Broadcom Corporation
-+ * All Rights Reserved
-+ * No portions of this material may be reproduced in any form without the
-+ * written permission of:
-+ * Broadcom Corporation
-+ * 16215 Alton Parkway
-+ * Irvine, California 92619
-+ * All information contained in this document is Broadcom Corporation
-+ * company private, proprietary, and trade secret.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: AdslXfaceData.h,v 1.9 2004/02/03 02:57:22 ilyas Exp $
-+ *
-+ * $Log: AdslXfaceData.h,v $
-+ * Revision 1.9 2004/02/03 02:57:22 ilyas
-+ * Added PHY feature settings
-+ *
-+ * Revision 1.8 2003/07/18 04:50:21 ilyas
-+ * Added shared buffer for clEoc messages to avoid copying thru command buffer
-+ *
-+ * Revision 1.7 2003/02/25 00:46:32 ilyas
-+ * Added T1.413 EOC vendor ID
-+ *
-+ * Revision 1.6 2003/02/21 23:29:13 ilyas
-+ * Added OEM vendor ID parameter for T1.413 mode
-+ *
-+ * Revision 1.5 2002/09/13 21:17:12 ilyas
-+ * Added pointers to version and build string to OEM interface structure
-+ *
-+ * Revision 1.4 2002/09/07 04:16:29 ilyas
-+ * Fixed HOST to ADSL MIPS SDRAM address translation for relocatable images
-+ *
-+ * Revision 1.3 2002/09/07 01:43:59 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.2 2002/01/22 19:03:10 khp
-+ * -put sdramBaseAddr at end of Xface struct
-+ *
-+ * Revision 1.1 2002/01/15 06:25:08 ilyas
-+ * Initial implementation of ADSL core firmware
-+ *
-+ ****************************************************************************/
-+
-+#ifndef AdslXfaceDataHeader
-+#define AdslXfaceDataHeader
-+
-+#include "CircBuf.h"
-+
-+typedef struct _AdslXfaceData {
-+ stretchBufferStruct sbSta;
-+ stretchBufferStruct sbCmd;
-+ unsigned long gfcTable[15];
-+ void *sdramBaseAddr;
-+} AdslXfaceData;
-+
-+/* Shared SDRAM configuration data */
-+
-+#define kAdslOemVendorIdMaxSize 8
-+#define kAdslOemVersionMaxSize 32
-+#define kAdslOemSerNumMaxSize 32
-+#define kAdslOemNonStdInfoMaxSize 64
-+
-+typedef struct _AdslOemSharedData {
-+ unsigned long g994VendorIdLen;
-+ unsigned long g994XmtNonStdInfoLen;
-+ unsigned long g994RcvNonStdInfoLen;
-+ unsigned long eocVendorIdLen;
-+ unsigned long eocVersionLen;
-+ unsigned long eocSerNumLen;
-+ unsigned char g994VendorId[kAdslOemVendorIdMaxSize];
-+ unsigned char eocVendorId[kAdslOemVendorIdMaxSize];
-+ unsigned char eocVersion[kAdslOemVersionMaxSize];
-+ unsigned char eocSerNum[kAdslOemSerNumMaxSize];
-+ unsigned char g994XmtNonStdInfo[kAdslOemNonStdInfoMaxSize];
-+ unsigned char g994RcvNonStdInfo[kAdslOemNonStdInfoMaxSize];
-+ char *gDslVerionStringPtr;
-+ char *gDslBuildDataStringPtr;
-+ unsigned long t1413VendorIdLen;
-+ unsigned char t1413VendorId[kAdslOemVendorIdMaxSize];
-+ unsigned long t1413EocVendorIdLen;
-+ unsigned char t1413EocVendorId[kAdslOemVendorIdMaxSize];
-+ unsigned long clEocBufLen;
-+ unsigned char *clEocBufPtr;
-+} AdslOemSharedData;
-+
-+/* feature list */
-+
-+#define kAdslPhyAnnexA 0
-+#define kAdslPhyAnnexB 1
-+#define kAdslPhyAnnexC 2
-+#define kAdslPhySADSL 3
-+#define kAdslPhyAdsl2 4
-+#define kAdslPhyAdslG992p3 4
-+#define kAdslPhyAdsl2p 5
-+#define kAdslPhyAdslG992p5 5
-+#define kAdslPhyAnnexI 6
-+#define kAdslPhyAdslReAdsl2 7
-+#define kAdslPhyG992p2Init 8
-+#define kAdslPhyT1P413 9
-+
-+#define AdslFeatureSupported(fa,f) ((fa)[(f) >> 5] & (1 << ((f) & 0x1F)))
-+#define AdslFeatureSet(fa,f) (fa)[(f) >> 5] |= (1 << ((f) & 0x1F))
-+
-+#endif /* AdslXfaceDataHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlankList.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlankList.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlankList.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlankList.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,87 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * BlankList.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of blank list - list of unused items of any size (not less than
-+ * sizeof(void *)
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef BlankListHeader
-+#define BlankListHeader
-+
-+#define BlankListPeek(head) ((void *) (head))
-+#define BlankListNext(p) (*(void **) (p))
-+
-+#define BlankListAdd(pHead,p) do { \
-+ BlankListNext(p) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = (void *) (p); \
-+} while (0)
-+
-+#define BlankListAddList(pHead,pFirst,pLast) do { \
-+ if (NULL != (pLast)) { \
-+ BlankListNext(pLast) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = (void *) (pFirst); \
-+ } \
-+} while (0)
-+
-+#define BlankListGet(pHead) \
-+ BlankListNext(pHead); \
-+ { \
-+ void **__p; \
-+ __p = (void **) BlankListNext(pHead); \
-+ if (NULL != __p) \
-+ BlankListNext(pHead) = *__p; \
-+ }
-+
-+
-+#define BlankListForEach(pHead,f,ref) do { \
-+ void *p = BlankListNext(pHead); \
-+ \
-+ while (NULL != p) { \
-+ if ( (f)((p), ref) ) break; \
-+ p = BlankListNext(p); \
-+ } \
-+} while (0)
-+
-+
-+#include "Que.h"
-+
-+#define BlankListAddQue(pHead,pqHdr) do { \
-+ if (NULL != ((QueHeader *)(pqHdr))->tail) { \
-+ BlankListNext(((QueHeader *)(pqHdr))->tail) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = ((QueHeader *)(pqHdr))->head; \
-+ } \
-+} while (0)
-+
-+#include "DList.h"
-+
-+#define BlankListAddDList(pHead,pDListHead) do { \
-+ if (!DListEmpty(pDListHead)) { \
-+ BlankListNext(DListLast(pDListHead)) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = DListFirst(pDListHead); \
-+ } \
-+} while (0)
-+
-+#endif /* BlankListHeader */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlockUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlockUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlockUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/BlockUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,235 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/* BlockUtil.h
-+ *
-+ * Description:
-+ * This file contains the interfaces for the fixed point block
-+ * processing utilities.
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.23 $
-+ *
-+ * $Id: BlockUtil.h,v 1.23 2004/04/13 00:31:10 ilyas Exp $
-+ *
-+ * $Log: BlockUtil.h,v $
-+ * Revision 1.23 2004/04/13 00:31:10 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.22 2003/07/11 01:49:01 gsyu
-+ * Added BlockShortClearByLong to speed up performance
-+ *
-+ * Revision 1.21 2003/07/10 22:35:23 gsyu
-+ * Speed up BlockByteXXX performance
-+ *
-+ * Revision 1.20 2003/07/10 22:15:51 gsyu
-+ * Added BlockByteMoveByWord to speed up performance
-+ *
-+ * Revision 1.19 2002/03/12 00:03:03 yongbing
-+ * Modify cplxScaleCplxSymbols to accept a shift value instead of an array of shifts
-+ *
-+ * Revision 1.18 2001/03/14 00:50:25 georgep
-+ * All targets use FEQ_PASS_FFTSHIFT, remove code for case where its not defined
-+ *
-+ * Revision 1.17 2000/11/30 03:54:09 khp
-+ * -BlockRealScaleCplxSymbols instead of BlockScaleComplexSymbols
-+ *
-+ * Revision 1.16 2000/11/29 20:42:12 liang
-+ * Add function for ADSL xmt gains with fixed shift.
-+ *
-+ * Revision 1.15 2000/10/02 19:24:08 georgep
-+ * Modify FEQ for new fft, fft outputs a shift for each block
-+ *
-+ * Revision 1.14 2000/09/09 00:23:48 liang
-+ * Add corresponding functions for the ComplexLong FEQ coef.
-+ *
-+ * Revision 1.13 2000/05/17 01:36:52 yongbing
-+ * Add Pentium MMX assembly codes for more block related functions
-+ *
-+ * Revision 1.12 2000/04/19 19:22:22 yongbing
-+ * Add BlockShortScaleby2 function used in G994p1
-+ *
-+ * Revision 1.11 2000/04/04 02:28:01 liang
-+ * Merged with SoftDsl_0_2 from old tree.
-+ *
-+ * Revision 1.11 2000/03/14 23:29:01 yongbing
-+ * Add Pentim MMX codes for BlockCplxSymbolUpdateCplxScale function
-+ *
-+ * Revision 1.10 2000/02/16 01:53:00 yongbing
-+ * Add Pentium MMX module for FEQ
-+ *
-+ * Revision 1.9 1999/11/02 02:49:55 liang
-+ * Add BlockComplexPower function.
-+ *
-+ * Revision 1.8 1999/08/05 19:42:34 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.7 1999/06/16 00:54:39 liang
-+ * BlockRealScaleComplexSymbols takes a scale shift buffer now.
-+ *
-+ * Revision 1.6 1999/05/22 02:18:29 liang
-+ * Add one more parameter to BlockCplxSymbolUpdateCplxScale function.
-+ *
-+ * Revision 1.5 1999/05/14 22:49:39 liang
-+ * Added two more functions.
-+ *
-+ * Revision 1.4 1999/03/26 03:29:57 liang
-+ * Add function BlockComplexMultLongAcc.
-+ *
-+ * Revision 1.3 1999/02/22 22:40:59 liang
-+ * BlockByteSum takes uchar inputs instead of schar.
-+ *
-+ * Revision 1.2 1999/02/10 01:56:44 liang
-+ * Added BlockByteSum, BlockRealScaleComplexSymbols and BlockCplxScaleComplexSymbols.
-+ *
-+ * Revision 1.1 1998/10/28 01:35:38 liang
-+ * *** empty log message ***
-+ *
-+ * Revision 1.12 1998/07/08 17:09:25 scott
-+ * Removed unnecessary undefs
-+ *
-+ * Revision 1.11 1998/04/02 06:19:44 mwg
-+ * Added two new utilities.
-+ *
-+ * Revision 1.10 1998/03/26 23:20:55 liang
-+ * Added function BlockShortMultiply.
-+ *
-+ * Revision 1.9 1998/02/16 18:41:00 scott
-+ * Added MMX autodetect support
-+ *
-+ * Revision 1.8 1997/12/13 06:11:35 mwg
-+ * Added new functions:
-+ * BlockLongSubtract()
-+ * BlockLongAdd()
-+ * BlockLong2ShortSubtract()
-+ * BlockShort2LongMove()
-+ * BlockShortInterpolate()
-+ * BlockLongCorrelate()
-+ * BlockMapShort2Short()
-+ *
-+ * Revision 1.7 1997/03/19 18:35:10 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.6 1997/02/11 00:08:18 mwg
-+ * Added BlockByteMove function
-+ *
-+ * Revision 1.5 1997/02/04 08:40:08 mwg
-+ * Changed interface forBlockReal2ComplexMacc()
-+ *
-+ * Revision 1.4 1997/01/23 02:04:28 mwg
-+ * Added return value to BlockShortMove
-+ *
-+ * Revision 1.3 1996/12/19 22:34:55 mwg
-+ * Added new function BlockFullPower().
-+ *
-+ * Revision 1.2 1996/02/21 03:59:15 mwg
-+ * Added new function BlockReal2ComplexMacc
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1995/04/04 06:09:32 mwg
-+ * Changed the SoftModem status reporting: now the status is a structure/union
-+ * where different fields used for different status code. This will enable
-+ * efficient status snooping for high level protocols on top of the softmodem.
-+ *
-+ */
-+
-+#ifndef BlockUtilPh
-+#define BlockUtilPh
-+
-+extern void BlockLongAdd (int, long*, long*, long*);
-+extern void BlockLong2ShortSubtract (int, long*, long*, short*);
-+extern void BlockShort2LongMove (int, short*, long*);
-+extern void BlockShortMultiply (int, int, short*, short*, short*);
-+extern void BlockByteMoveUnaligned (int size, uchar *srcPtr, uchar *dstPtr);
-+extern void BlockShortOffset (int, short, short*, short*);
-+extern long BlockShortInterpolateWithIncrement (int size, long scaleFactor, long increment, int shift, short* src1Ptr, short* src2Ptr, short* dstPtr);
-+extern void BlockReal2ComplexMult (int, short*, ComplexShort*, ComplexShort*);
-+extern void BlockComplexConjigateMult (int, ComplexShort*, ComplexShort*, ComplexShort*);
-+
-+extern long BlockSum (int, short*);
-+extern long BlockByteSum (int, uchar*);
-+extern void BlockComplexSum (int, ComplexShort*, ComplexLong*);
-+extern void BlockComplexPower (int, int, ComplexShort*, long*);
-+extern long BlockFullPower (int, short*);
-+extern long BlockLongCorrelate (int, long*, long*);
-+
-+extern int BlockSymbol2Byte (int, int, ushort*, uchar*);
-+extern int BlockByte2Symbol (int, int, uchar*, ushort*);
-+
-+extern void BlockMapShort2Complex (int, ushort*, ComplexByte*, ComplexShort*);
-+extern void BlockMapShort2Short (int size, ushort *srcPtr, short *mapPtr, short *dstPtr);
-+extern void BlockMapByte2Byte (int size, uchar *srcPtr, uchar *mapPtr, uchar *dstPtr);
-+extern void BlockMapByte2Short (int size, uchar *srcPtr, short *mapPtr, short *dstPtr);
-+extern void BlockShortMult (int size, int shift, short* src1Ptr, short* src2Ptr, short* dstPtr);
-+
-+extern int SM_DECL Idle(void);
-+
-+extern void BlockGenerateAngles(int size, ComplexShort *anglePtr, ComplexShort *incPtr, ComplexShort *dstPtr);
-+extern void BlockExtractRealPart(int size, ComplexShort *srcPtr, short *dstPtr);
-+extern void BlockShortScaleByShift (int size, int shift, short* srcPtr, short* dstPtr);
-+
-+#ifndef PENTIUM_REDEFS /* only if these have not been redefined to function pointers */
-+extern long BlockPower (int, short*);
-+extern void BlockReal2ComplexMacc (int, int, short*, ComplexShort*, ComplexLong*);
-+extern void BlockComplexMult (int, ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockShortScale (int, short, int, short*, short*);
-+extern int SM_DECL BlockShortMove (int, short*, short*);
-+extern long BlockCorrelate (int, short*, short*);
-+
-+extern void BlockRealScaleComplexSymbols(int, int, uchar*, short*, ComplexShort*, ComplexShort*);
-+/* FIXME -- the following 3 functions can be removed */
-+extern void BlockCplxScaleComplexSymbols(int, int, int, ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockCplxSymbolUpdateCplxScale(int, int, int, uchar*, ComplexShort*,
-+ ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockComplexShortFill (int, short, short, ComplexShort*);
-+
-+
-+extern void BlockRealScaleCplxSymbols(int, int, int, short*, ComplexShort*, ComplexShort*);
-+extern void BlockCplxLongConjigateMultCplxShort(int, ComplexLong*, ComplexShort*, ComplexLong*);
-+
-+extern void BlockCplxLongScaleCplxSymbols(int, int, int, ComplexLong*, ComplexShort*, short*, ComplexShort*);
-+extern void BlockCplxSymbolUpdateCplxLongScale(int, int, int, int,
-+ ComplexShort*, short *, ComplexLong*, ComplexShort*);
-+
-+extern void BlockComplexLongFill (int, long, long, ComplexLong*);
-+
-+extern void BlockShortSubtract (int, short*, short*, short*);
-+extern void BlockLongSubtract (int, long*, long*, long*);
-+extern void BlockShortAdd (int, short*, short*, short*);
-+extern void BlockByteMove (int, uchar*, uchar*);
-+extern void BlockByteMoveByLong (int, uchar*, uchar*);
-+extern void SM_DECL BlockByteFill (int, uchar, uchar*);
-+extern void BlockByteFillByLong (int, uchar, uchar*);
-+extern void BlockByteClear (int, uchar*);
-+extern void BlockByteClearByLong (int, uchar*);
-+extern void BlockShortFill (int, short, short*);
-+extern void BlockShortClear (int, short*);
-+extern void BlockShortClearByLong (int, short*);
-+extern void BlockLongFill (int, long, long*);
-+extern void BlockLongClear (int, long*);
-+extern void BlockComplexShortClear (int, ComplexShort*);
-+extern void BlockShortInvert (int, short*, short*);
-+extern void BlockShortScaleDown (int, short*);
-+extern void BlockLongMove (int, long*, long*);
-+extern void BlockShortInterpolate (int, short, int, short*, short*, short*);
-+extern void BlockComplexMultLongAcc (int, int, ComplexShort*, ComplexShort*, ComplexLong*);
-+
-+#endif
-+
-+#endif /* BlockUtilPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/CircBuf.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/CircBuf.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/CircBuf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/CircBuf.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,217 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * CircBuf -- Generic Circular Buffer
-+ *
-+ * Description:
-+ * Implementation of generic circular buffer algorithms
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.14 $
-+ *
-+ * $Id: CircBuf.h,v 1.14 2004/06/24 03:10:37 ilyas Exp $
-+ *
-+ * $Log: CircBuf.h,v $
-+ * Revision 1.14 2004/06/24 03:10:37 ilyas
-+ * Added extra macro to be able to use un-cached variable (for status write)
-+ *
-+ * Revision 1.13 2004/02/09 23:47:02 ilyas
-+ * Fixed last change
-+ *
-+ * Revision 1.12 2004/02/06 22:52:58 ilyas
-+ * Improved stretch buffer write
-+ *
-+ * Revision 1.11 2002/12/30 23:27:55 ilyas
-+ * Added macro for HostDma optimizations
-+ *
-+ * Revision 1.10 2002/10/26 02:15:02 ilyas
-+ * Optimized and added new macros for HostDma
-+ *
-+ * Revision 1.9 2002/01/22 23:59:29 ilyas
-+ * Added paraenthesis around macro argument
-+ *
-+ * Revision 1.8 2002/01/15 22:28:38 ilyas
-+ * Extended macro to support readPtr from uncached address
-+ *
-+ * Revision 1.7 2001/09/21 19:47:05 ilyas
-+ * Fixed compiler warnings for VxWorks build
-+ *
-+ * Revision 1.6 2001/06/07 18:47:56 ilyas
-+ * Added more macros for circular buffer arithmetics
-+ *
-+ * Revision 1.5 2001/04/18 03:58:34 ilyas
-+ * Added LOG file write granularity
-+ *
-+ * Revision 1.4 2001/01/19 04:34:12 ilyas
-+ * Added more macros to circular buffer implementation
-+ *
-+ * Revision 1.3 2001/01/06 04:01:41 ilyas
-+ * Changed the way we write status messages
-+ *
-+ * Revision 1.2 2001/01/04 05:52:21 ilyas
-+ * Added implementation of stretchable circular buffer used in LOG and Status
-+ * handlers
-+ *
-+ * Revision 1.1 2000/05/03 03:45:55 ilyas
-+ * Original implementation
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef CircBufHeader_H_
-+#define CircBufHeader_H_
-+
-+
-+typedef struct {
-+ char *pStart;
-+ char *pEnd;
-+ char *pRead;
-+ char *pWrite;
-+} circBufferStruct;
-+
-+/* Initialize circular buffer */
-+
-+#define CircBufferInit(pCB,buf,size) do { \
-+ (pCB)->pStart = (char *) (buf); \
-+ (pCB)->pRead = (pCB)->pWrite = (pCB)->pStart; \
-+ (pCB)->pEnd = (pCB)->pStart + size; \
-+} while (0)
-+
-+#define CircBufferGetSize(pCB) ((pCB)->pEnd - (pCB)->pStart)
-+#define CircBufferGetStartPtr(pCB) ((void *) (pCB)->pStart)
-+#define CircBufferGetEndPtr(pCB) ((void *) (pCB)->pEnd)
-+
-+#define CircBufferReset(pCB) (pCB)->pRead = (pCB)->pWrite = (pCB)->pStart
-+
-+
-+#define CircBufferGetReadPtr(pCB) ((void *) (pCB)->pRead)
-+#define CircBufferGetWritePtr(pCB) ((void *) (pCB)->pWrite)
-+
-+
-+#ifndef bcm47xx
-+#define CircBufferDistance(pCB,p1,p2,d) ((char*)(p2) - (char*)(p1) - d >= 0 ? \
-+ (char*)(p2) - (char*)(p1) - d : \
-+ ((char*)(p2)- (char*)(p1) - d + ((pCB)->pEnd - (pCB)->pStart)))
-+
-+#define CircBufferAddContig(pCB,p,n) ((char*)(p) + (n) == (pCB)->pEnd ? (pCB)->pStart : (char*)(p) + (n))
-+#else
-+static __inline int CircBufferDistance(circBufferStruct *pCB, char *p1, char *p2, int d)
-+{
-+ int tmp = p2 - p1 - d;
-+
-+ return (tmp >= 0 ? tmp : tmp + (pCB->pEnd - pCB->pStart));
-+}
-+
-+static __inline char * CircBufferAddContig(circBufferStruct *pCB, char *p, int n)
-+{
-+ p += n;
-+ return (p == pCB->pEnd ? pCB->pStart : p);
-+}
-+#endif
-+
-+#define CircBufferAdd(pCB,p,n) ((char*)(p) + (n) >= (pCB)->pEnd ? \
-+ (pCB)->pStart + ((char*)(p) + (n) - (pCB)->pEnd) : \
-+ (char*)(p) + (n))
-+
-+#define CircBufferReadUpdate(pCB,n) (pCB)->pRead = CircBufferAdd(pCB,(pCB)->pRead,n)
-+#define CircBufferWriteUpdate(pCB,n) (pCB)->pWrite= CircBufferAdd(pCB,(pCB)->pWrite,n)
-+
-+#define CircBufferReadUpdateContig(pCB,n) (pCB)->pRead = CircBufferAddContig(pCB,(pCB)->pRead,n)
-+#define CircBufferWriteUpdateContig(pCB,n) (pCB)->pWrite= CircBufferAddContig(pCB,(pCB)->pWrite,n)
-+
-+#define CircBufferGetReadAvail(pCB) CircBufferDistance(pCB,(pCB)->pRead,(pCB)->pWrite,0)
-+#define CircBufferIsReadEmpty(pCB) ((pCB)->pRead == (pCB)->pWrite)
-+#define CircBufferGetWriteAvail(pCB) CircBufferDistance(pCB,(pCB)->pWrite,(pCB)->pRead,1)
-+#define CircBufferGetWriteAvailN(pCB,n) CircBufferDistance(pCB,(pCB)->pWrite,(pCB)->pRead,n)
-+
-+#define CircBufferGetReadContig(pCB) ((unsigned long)(pCB)->pWrite >= (unsigned long) (pCB)->pRead ? \
-+ (pCB)->pWrite - (pCB)->pRead : \
-+ (pCB)->pEnd - (pCB)->pRead)
-+
-+#define CircBufferGetWriteContig(pCB) ((pCB)->pEnd - (pCB)->pWrite > CircBufferGetWriteAvail(pCB) ? \
-+ CircBufferGetWriteAvail(pCB) : \
-+ (pCB)->pEnd - (pCB)->pWrite)
-+
-+/*
-+**
-+** structure and macros for "strectch" buffer
-+**
-+*/
-+
-+typedef struct {
-+ char *pStart;
-+ char *pEnd;
-+ char *pExtraEnd;
-+ char *pStretchEnd;
-+ char *pRead;
-+ char *pWrite;
-+} stretchBufferStruct;
-+
-+#define StretchBufferInit(pSB,buf,size,extra) do { \
-+ (pSB)->pStart = (char *) (buf); \
-+ (pSB)->pRead = (pSB)->pWrite = (pSB)->pStart; \
-+ (pSB)->pEnd = (pSB)->pStart + (size); \
-+ (pSB)->pStretchEnd = (pSB)->pEnd; \
-+ (pSB)->pExtraEnd = (pSB)->pEnd+(extra); \
-+} while (0)
-+
-+#define StretchBufferGetSize(pSB) ((pSB)->pEnd - (pSB)->pStart)
-+#define StretchBufferGetStartPtr(pSB) ((void *) (pSB)->pStart)
-+#define StretchBufferGetReadPtr(pSB) ((void *) (pSB)->pRead)
-+#define StretchBufferGetWritePtr(pSB) ((void *) (pSB)->pWrite)
-+#define StretchBufferReset(pSB) ((pSB)->pRead = (pSB)->pWrite = (pSB)->pStart)
-+
-+#define StretchBufferGetReadToEnd(pSB) ((pSB)->pStretchEnd - (pSB)->pRead)
-+
-+#define StretchBufferGetReadAvail(pSB) ((pSB)->pWrite - (pSB)->pRead >= 0 ? \
-+ (pSB)->pWrite - (pSB)->pRead : \
-+ (pSB)->pStretchEnd - (pSB)->pRead)
-+#define _StretchBufferGetWriteAvail(pSB,rd) ((rd) - (pSB)->pWrite > 0 ? \
-+ (rd) - (pSB)->pWrite - 1 : \
-+ ((pSB)->pExtraEnd - (pSB)->pWrite))
-+#define StretchBufferGetWriteAvail(pSB) _StretchBufferGetWriteAvail(pSB, (pSB)->pRead)
-+
-+#define StretchBufferReadUpdate(pSB,n) do { \
-+ char *p; \
-+ \
-+ p = (pSB)->pRead + (n); \
-+ (pSB)->pRead = (p >= (pSB)->pStretchEnd ? (pSB)->pStart : p); \
-+} while (0)
-+
-+#define _StretchBufferWriteUpdate(pSB,rd,n) do { \
-+ char *p; \
-+ \
-+ p = (pSB)->pWrite + (n); \
-+ if (p >= (pSB)->pEnd) { \
-+ if ((rd) != (pSB)->pStart) { \
-+ (pSB)->pStretchEnd = p; \
-+ (pSB)->pWrite = (pSB)->pStart; \
-+ } \
-+ } \
-+ else \
-+ (pSB)->pWrite = p; \
-+} while (0)
-+
-+#define StretchBufferWriteUpdate(pSB,n) _StretchBufferWriteUpdate(pSB,(pSB)->pRead,n)
-+
-+#endif /* CircBufHeader_H_ */
-+
-+
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DList.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DList.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DList.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DList.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,131 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * DList.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of double-linked list
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef DListHeader_H_
-+#define DListHeader_H_
-+
-+typedef struct _DListHeader
-+ {
-+ struct _DListHeader *next; /* next item in the list */
-+ struct _DListHeader *prev; /* prev item in the list */
-+ } DListHeader;
-+
-+typedef struct _DListUpHeader
-+ {
-+ struct _DListUpHeader *next; /* next item in the list */
-+ struct _DListUpHeader *prev; /* prev item in the list */
-+ struct _DListUpHeader *head; /* head of the list */
-+ } DListUpHeader;
-+
-+/* Double linked list DList management macros */
-+
-+#define DListInit(pDListHead) do { \
-+ ((DListHeader *)(pDListHead))->next = pDListHead; \
-+ ((DListHeader *)(pDListHead))->prev = pDListHead; \
-+} while (0)
-+
-+#define DListNext(pDListEntry) (((DListHeader *)(pDListEntry))->next)
-+#define DListPrev(pDListEntry) (((DListHeader *)(pDListEntry))->prev)
-+
-+#define DListEntryLinked(pDListEntry) (NULL != DListNext(pDListEntry))
-+#define DListUnlinkEntry(pDListEntry) (DListNext(pDListEntry) = DListPrev(pDListEntry) = NULL)
-+
-+#define DListFirst(pDListHead) DListNext(pDListHead)
-+#define DListLast(pDListHead) DListPrev(pDListHead)
-+#define DListValid(pDListHead,pEntry) ((void *)(pDListHead) != (pEntry))
-+#define DListEmpty(pDListHead) ((void *)pDListHead == ((DListHeader *)pDListHead)->next)
-+
-+#define DListInsertAfter(pDListEntry,pEntry) do { \
-+ ((DListHeader *)(pEntry))->next = ((DListHeader *)(pDListEntry))->next; \
-+ ((DListHeader *)(pEntry))->prev = (DListHeader *)(pDListEntry); \
-+ ((DListHeader *)(pDListEntry))->next->prev = (DListHeader *) (pEntry); \
-+ ((DListHeader *)(pDListEntry))->next = (DListHeader *) (pEntry); \
-+} while (0)
-+
-+#define DListInsertBefore(pDListEntry,pEntry) do { \
-+ ((DListHeader *)(pEntry))->next = (DListHeader *)(pDListEntry); \
-+ ((DListHeader *)(pEntry))->prev = ((DListHeader *)(pDListEntry))->prev; \
-+ ((DListHeader *)(pDListEntry))->prev->next = (DListHeader *) (pEntry); \
-+ ((DListHeader *)(pDListEntry))->prev = (DListHeader *) (pEntry); \
-+} while (0)
-+
-+#define DListInsertTail(pDListHead,pEntry) DListInsertBefore(pDListHead,pEntry)
-+#define DListInsertHead(pDListHead,pEntry) DListInsertAfter(pDListHead,pEntry)
-+
-+#define DListRemove(pDListEntry) do { \
-+ ((DListHeader *)(pDListEntry))->prev->next = ((DListHeader *)(pDListEntry))->next; \
-+ ((DListHeader *)(pDListEntry))->next->prev = ((DListHeader *)(pDListEntry))->prev; \
-+} while (0)
-+
-+
-+#define DListForEach(pDListHead,f,ref) do { \
-+ DListHeader *p = ((DListHeader *)(pDListHead))->next; \
-+ \
-+ while (DListValid(pDListHead,p)) { \
-+ DListHeader *p0 = p; \
-+ p = DListNext(p); \
-+ if ( (f)((void *)p0, ref) ) break; \
-+ } \
-+} while (0)
-+
-+
-+/* Double linked list with up link DListUp management macros */
-+
-+#define DListUpInit(pDListHead) do { \
-+ ((DListUpHeader *)(pDListHead))->next = (DListUpHeader *) (pDListHead); \
-+ ((DListUpHeader *)(pDListHead))->prev = (DListUpHeader *) (pDListHead); \
-+ ((DListUpHeader *)(pDListHead))->head = (DListUpHeader *) (pDListHead); \
-+} while (0)
-+
-+#define DListUpNext(pDListEntry) ((DListUpHeader *) DListNext(pDListEntry))
-+#define DListUpPrev(pDListEntry) ((DListUpHeader *) DListPrev(pDListEntry))
-+#define DListUpHead(pDListEntry) (((DListUpHeader *)(pDListEntry))->head)
-+
-+#define DListUpFirst(pDListHead) DListUpNext(pDListHead)
-+#define DListUpLast(pDListHead) DListUpPrev(pDListHead)
-+#define DListUpValid(pEntry) (((DListUpHeader *)(pEntry))->head != (void *) pEntry)
-+#define DListUpEmpty(pDListHead) DListEmpty(pDListHead)
-+
-+#define DListUpInsertAfter(pDListEntry,pEntry) do { \
-+ DListInsertAfter(pDListEntry,pEntry); \
-+ ((DListUpHeader *)(pEntry))->head = ((DListUpHeader *)(pDListEntry))->head; \
-+} while (0)
-+
-+#define DListUpInsertBefore(pDListEntry,pEntry) do { \
-+ DListInsertBefore(pDListEntry,pEntry); \
-+ ((DListUpHeader *)(pEntry))->head = ((DListUpHeader *)(pDListEntry))->head; \
-+} while (0)
-+
-+#define DListUpInsertTail(pDListHead,pEntry) DListUpInsertBefore(pDListHead,pEntry)
-+#define DListUpInsertHead(pDListHead,pEntry) DListUpInsertAfter(pDListHead,pEntry)
-+
-+#define DListUpRemove(pDListEntry) DListRemove(pDListEntry)
-+#define DListUpForEach(pDListHead,f,ref) DListForEach((DListHeader *)(pDListHead),f,ref)
-+
-+#endif /* DListHeader_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DslFramer.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DslFramer.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DslFramer.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/DslFramer.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,159 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * DslFramer.h
-+ *
-+ * Description:
-+ * This file contains common DSL framer definitions
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: DslFramer.h,v 1.3 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: DslFramer.h,v $
-+ * Revision 1.3 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.2 2004/04/12 23:41:10 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef DslFramerHeader
-+#define DslFramerHeader
-+
-+#include "DList.h"
-+
-+#define kDslFramerInitialized 0x80000000
-+
-+/* status codes */
-+
-+#define kDslFramerRxFrame 1
-+#define kDslFramerRxFrameErr 2
-+#define kDslFramerTxFrame 3
-+#define kDslFramerTxFrameErr 4
-+
-+#define kDslFramerRxFrameErrFlushed 1
-+#define kDslFramerRxFrameErrAbort 2
-+#define kDslFramerRxFrameErrPhy 3
-+
-+#define kDslFramerTxFrameErrFlushed 1
-+
-+
-+typedef struct _dslFramerBufDesc {
-+ long pkId;
-+ long bufFlags;
-+ void *bufPtr;
-+ long bufLen;
-+} dslFramerBufDesc;
-+
-+/* data bufDesc flags */
-+
-+#define kDslFramerStartNewFrame 1
-+#define kDslFramerEndOfFrame 2
-+#define kDslFramerAbortFrame 4
-+
-+#define kDslFramerExtraByteShift 3
-+#define kDslFramerExtraByteMask (0x7 << kDslFramerExtraByteShift)
-+
-+typedef struct _dslFramerControl {
-+ bitMap setup;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+ ulong statusCode;
-+ ulong statusOffset;
-+
-+ int nRxBuffers;
-+ int nRxBufSize;
-+ int nRxPackets;
-+
-+ dslFrame *freeBufListPtr;
-+ void *freeBufPool;
-+ void *pBufMemory;
-+
-+ dslFrame *freePacketListPtr;
-+ void *freePacketPool;
-+
-+ /* RX working data set */
-+
-+ dslFrame *pRxFrame;
-+ dslFrameBuffer *pRxBuf;
-+ uchar *pRxBufData;
-+ uchar *pRxBufDataEnd;
-+ int rxFrameLen;
-+
-+ /* TX working data set */
-+
-+ DListHeader dlistTxWaiting;
-+ dslFrame *pTxFrame;
-+ dslFrameBuffer *pTxBuf;
-+ uchar *pTxBufData;
-+ uchar *pTxBufDataEnd;
-+
-+ /* stats data */
-+
-+ ulong dslByteCntRxTotal;
-+ ulong dslByteCntTxTotal;
-+
-+ ulong dslFrameCntRxTotal;
-+ ulong dslFrameCntRxErr;
-+ ulong dslFrameCntTxTotal;
-+
-+} dslFramerControl;
-+
-+
-+extern Boolean DslFramerInit(
-+ void *gDslVars,
-+ dslFramerControl *dfCtrl,
-+ bitMap setup,
-+ ulong statusCode,
-+ ulong statusOffset,
-+ dslFrameHandlerType rxIndicateHandlerPtr,
-+ dslFrameHandlerType txCompleteHandlerPtr,
-+ dslStatusHandlerType statusHandlerPtr,
-+ ulong rxBufNum,
-+ ulong rxBufSize,
-+ ulong rxPacketNum);
-+extern void DslFramerClose(void *gDslVars, dslFramerControl *dfCtrl);
-+extern void DslFramerSendFrame(void *gDslVars, dslFramerControl *dfCtrl, dslFrame *pFrame);
-+extern void DslFramerReturnFrame(void *gDslVars, dslFramerControl *dfCtrl, dslFrame *pFrame);
-+
-+
-+extern Boolean DslFramerRxGetPtr(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern void DslFramerRxDone (void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern Boolean DslFramerTxGetPtr(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern void DslFramerTxDone(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern Boolean DslFramerTxIdle (void *gDslVars, dslFramerControl *dfCtrl);
-+extern void DslFramerTxFlush(void *gDslVars, dslFramerControl *dfCtrl);
-+
-+extern void * DslFramerGetFramePoolHandler(dslFramerControl *dfCtrl);
-+extern void DslFramerClearStat(dslFramerControl *dfCtrl);
-+
-+extern void DslFramerRxFlushFrame (void *gDslVars, dslFramerControl *dfCtrl, int errCode);
-+extern void DslFramerRxFlush(void *gDslVars, dslFramerControl *dfCtrl);
-+
-+#endif /* DslFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Flatten.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Flatten.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Flatten.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Flatten.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,115 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * Flatten.h -- Header for Flatten/Unflatten command/status
-+ *
-+ * Copyright (c) 1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.14 $
-+ *
-+ * $Id: Flatten.h,v 1.14 2004/03/04 19:48:52 linyin Exp $
-+ *
-+ * $Log: Flatten.h,v $
-+ * Revision 1.14 2004/03/04 19:48:52 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.13 2003/10/17 22:45:14 yongbing
-+ * Increase buffer size for large B&G table of G992P3
-+ *
-+ * Revision 1.12 2003/08/12 23:16:26 khp
-+ * - for Haixiang: added support for ADSL_MARGIN_TWEAK_TEST
-+ *
-+ * Revision 1.11 2003/02/27 06:33:03 ilyas
-+ * Improved free space checking in command buffer (became a problem with
-+ * 2 commands SetXmtgain and StartPhy)
-+ *
-+ * Revision 1.10 2003/01/11 01:27:07 ilyas
-+ * Improved checking for available space in status buffer
-+ *
-+ * Revision 1.9 2002/09/07 01:43:59 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.8 2002/05/16 00:01:52 khp
-+ * -added missing #endif
-+ *
-+ * Revision 1.7 2002/05/15 00:04:48 mprahlad
-+ * increase the status buffer size - prevent memory overflow for annexC cases
-+ *
-+ * Revision 1.6 2002/04/05 04:10:33 linyin
-+ * -hack to fit in Annex C firmware in LMEM
-+ *
-+ * Revision 1.5 2002/04/05 02:45:25 linyin
-+ * Make the buffer side larger for annexC
-+ *
-+ * Revision 1.4 2002/01/30 07:19:06 ilyas
-+ * Moved showtime code to LMEM
-+ *
-+ * Revision 1.3 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.2 2001/04/25 00:30:54 ilyas
-+ * Adjusted MaxFrameLen
-+ *
-+ * Revision 1.1 2001/04/24 21:41:21 ilyas
-+ * Implemented status flattening/unflattaning to transfer statuses between
-+ * modules asynchronously through the circular buffer
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef _Flatten_H_
-+#define _Flatten_H_
-+
-+#include "CircBuf.h"
-+
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+#define kMaxFlattenedCommandSize 272 /* maximum no. of bytes in flattened cmd */
-+#else
-+#define kMaxFlattenedCommandSize 128 /* maximum no. of bytes in flattened cmd */
-+#endif
-+#if defined(G992_ANNEXC) || defined(G992P3)
-+#if defined(G992P5)
-+#define kMaxFlattenedStatusSize 2200 /* maximum no. of bytes in flattened status */
-+#else
-+#define kMaxFlattenedStatusSize 1100 /* maximum no. of bytes in flattened status */
-+#endif
-+#else
-+#define kMaxFlattenedStatusSize 550 /* maximum no. of bytes in flattened status */
-+#endif
-+
-+#define kMaxFlattenFramelength (kMaxFlattenedStatusSize - (4*sizeof(long)) - 20)
-+
-+extern int SM_DECL FlattenCommand (dslCommandStruct *cmd, ulong *dstPtr, ulong nAvail);
-+extern int SM_DECL UnflattenCommand(ulong *srcPtr, dslCommandStruct *cmd);
-+extern int SM_DECL FlattenStatus (dslStatusStruct *status, ulong *dstPtr, ulong nAvail);
-+extern int SM_DECL UnflattenStatus (ulong *srcPtr, dslStatusStruct *status);
-+
-+#define FlattenBufferInit(fb,fbData,bufSize,itemSize) \
-+ StretchBufferInit(fb, fbData, bufSize, itemSize)
-+
-+extern int SM_DECL FlattenBufferStatusWrite(stretchBufferStruct *fBuf, dslStatusStruct *status);
-+extern int SM_DECL FlattenBufferStatusRead(stretchBufferStruct *fBuf, dslStatusStruct *status);
-+
-+extern int SM_DECL FlattenBufferCommandWrite(stretchBufferStruct *fBuf, dslCommandStruct *cmd);
-+extern int SM_DECL FlattenBufferCommandRead(stretchBufferStruct *fBuf, dslCommandStruct *cmd);
-+
-+#define FlattenBufferReadComplete(fb,nBytes) \
-+ StretchBufferReadUpdate (fb, nBytes)
-+
-+#endif /* _Flatten_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,110 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G992p3OvhMsg.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the G992p3 overhead
-+ * channel messages global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1999-2003 BroadCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: G992p3OvhMsg.gh,v 1.5 2004/09/11 03:52:25 ilyas Exp $
-+ *
-+ * $Log: G992p3OvhMsg.gh,v $
-+ * Revision 1.5 2004/09/11 03:52:25 ilyas
-+ * Added support for overhead message segmentation
-+ *
-+ * Revision 1.4 2004/07/07 01:27:20 ilyas
-+ * Fixed OHC message stuck problem on L2 entry/exit
-+ *
-+ * Revision 1.3 2004/06/10 00:13:31 ilyas
-+ * Added L2/L3 and SRA
-+ *
-+ * Revision 1.2 2004/04/12 23:34:52 ilyas
-+ * Merged the latest ADSL driver chnages for ADSL2+
-+ *
-+ * Revision 1.1 2003/07/18 19:39:18 ilyas
-+ * Initial G.992.3 overhead channel message implementation (from ADSL driver)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G992p3OvhMsgFramerGlobals
-+#define G992p3OvhMsgFramerGlobals
-+
-+#define kG992p3OvhMsgMaxCmdSize (16 + 16)
-+#define kG992p3OvhMsgMaxRspSize (16 + 2*512)
-+
-+typedef struct
-+ {
-+ dslFrame *segFrame;
-+ dslFrameBuffer *segFrBufCur;
-+ dslFrameBuffer segFrBuf;
-+ ulong timeSegOut;
-+ uchar tryCnt;
-+ uchar segTotal;
-+ uchar segId;
-+ }
-+ g992p3SegFrameCtlStruct;
-+
-+typedef struct
-+ {
-+ bitMap setup;
-+ dslFrameHandlerType rxReturnFramePtr;
-+ dslFrameHandlerType txSendFramePtr;
-+ dslCommandHandlerType cmdHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+
-+ dslFrame txRspFrame;
-+ dslFrameBuffer txRspFrBuf;
-+ dslFrameBuffer txRspFrBuf1;
-+ uchar txRspBuf[kG992p3OvhMsgMaxRspSize];
-+ dslFrame txPwrRspFrame;
-+ dslFrameBuffer txPwrRspFrBuf0;
-+ dslFrameBuffer txPwrRspFrBuf0a;
-+ dslFrameBuffer txPwrRspFrBuf1;
-+ uchar txPwrRspBuf0[8];
-+ dslFrame txCmdFrame;
-+ dslFrameBuffer txCmdFrBuf0;
-+ dslFrameBuffer txCmdFrBuf0a;
-+ dslFrameBuffer txCmdFrBuf1;
-+ uchar txCmdBuf[kG992p3OvhMsgMaxCmdSize];
-+ g992p3SegFrameCtlStruct txSegFrameCtl;
-+ ulong txFlags;
-+ uchar txL0Rq;
-+ uchar txL3Rq;
-+
-+ ulong timeMs;
-+ ulong timeCmdOut;
-+ ulong cmdTryCnt;
-+ ulong cmdNum;
-+ ulong timeRspOut;
-+ uchar *txPmdCmd;
-+
-+ uchar rxCmdMsgNum;
-+ uchar rxRspMsgNum;
-+ uchar txCmdMsgNum;
-+ uchar txRspMsgNum;
-+ }
-+ g992p3OvhMsgVarsStruct;
-+
-+#endif /* G992p3OvhMsgFramerGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G992p3OvhMsg.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,64 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G992p3OvhMsg.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for G992p3
-+ * overhead channel messages
-+ *
-+ *
-+ * Copyright (c) 1999-2003 BroadCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.1 $
-+ *
-+ * $Id: G992p3OvhMsg.h,v 1.1 2003/07/18 19:39:18 ilyas Exp $
-+ *
-+ * $Log: G992p3OvhMsg.h,v $
-+ * Revision 1.1 2003/07/18 19:39:18 ilyas
-+ * Initial G.992.3 overhead channel message implementation (from ADSL driver)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G992p3OvhMsgFramerHeader
-+#define G992p3OvhMsgFramerHeader
-+
-+#define kG992p3OvhMsgFrameBufCnt -1
-+
-+extern Boolean G992p3OvhMsgInit(
-+ void *gDslVars,
-+ bitMap setup,
-+ dslFrameHandlerType rxReturnFramePtr,
-+ dslFrameHandlerType txSendFramePtr,
-+ dslCommandHandlerType commandHandler,
-+ dslStatusHandlerType statusHandler);
-+
-+extern void G992p3OvhMsgReset(void *gDslVars);
-+extern void G992p3OvhMsgClose(void *gDslVars);
-+extern void G992p3OvhMsgTimer(void *gDslVars, long timeQ24ms);
-+extern Boolean G992p3OvhMsgCommandHandler (void *gDslVars, dslCommandStruct *cmd);
-+extern void G992p3OvhMsgStatusSnooper (void *gDslVars, dslStatusStruct *status);
-+
-+extern int G992p3OvhMsgSendCompleteFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+extern int G992p3OvhMsgIndicateRcvFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+
-+extern void G992p3OvhMsgSetL3(void *gDslVars);
-+extern void G992p3OvhMsgSetL0(void *gDslVars);
-+
-+#endif /* G992p3OvhMsgFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,66 @@
-+/****************************************************************************
-+ *
-+ * G997.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the G997 Framer
-+ * global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: G997.gh,v 1.5 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: G997.gh,v $
-+ * Revision 1.5 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.4 2004/04/27 00:27:16 ilyas
-+ * Implemented double buffering to ensure G.997 HDLC frame is continuous
-+ *
-+ * Revision 1.3 2003/07/18 18:56:59 ilyas
-+ * Added support for shared TX buffer (for ADSL driver)
-+ *
-+ * Revision 1.2 2002/01/11 06:48:27 ilyas
-+ * Added command handler pointer
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G997FramerGlobals
-+#define G997FramerGlobals
-+
-+#include "DslFramer.h"
-+#include "HdlcFramer.h"
-+
-+#define kG997MsgBufSize 64
-+
-+typedef struct
-+ {
-+ bitMap setup;
-+ dslFramerControl dslFramer;
-+ hdlcByteControl hdlcByte;
-+ dslCommandHandlerType commandHandler;
-+
-+ ulong timeMs;
-+ ulong timeCmdOut;
-+
-+ uchar rxMsgNum;
-+ uchar txMsgNum;
-+ Boolean txIdle;
-+ uchar txMsgBuf[kG997MsgBufSize];
-+ ulong txMsgBufLen;
-+ uchar *txMsgBufPtr;
-+ ulong txMsgLen;
-+ ulong txMsgBufs;
-+ ulong txMsgBufNum;
-+ }
-+ g997VarsStruct;
-+
-+#endif /* G997FramerGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/G997.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,68 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G997.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for G97Framer
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: G997.h,v 1.3 2003/07/18 18:56:59 ilyas Exp $
-+ *
-+ * $Log: G997.h,v $
-+ * Revision 1.3 2003/07/18 18:56:59 ilyas
-+ * Added support for shared TX buffer (for ADSL driver)
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G997FramerHeader
-+#define G997FramerHeader
-+
-+extern Boolean G997Init(
-+ void *gDslVars,
-+ bitMap setup,
-+ ulong rxBufNum,
-+ ulong rxBufSize,
-+ ulong rxPacketNum,
-+ upperLayerFunctions *pUpperLayerFunctions,
-+ dslCommandHandlerType g997PhyCommandHandler);
-+
-+extern void G997Close(void *gDslVars);
-+extern void G997Timer(void *gDslVars, long timeQ24ms);
-+extern Boolean G997CommandHandler (void *gDslVars, dslCommandStruct *cmd);
-+extern void G997StatusSnooper (void *gDslVars, dslStatusStruct *status);
-+
-+extern int G997SendFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+extern int G997ReturnFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+
-+extern Boolean G997SetTxBuffer(void *gDslVars, ulong len, void *bufPtr);
-+extern void * G997GetFramePoolHandler(void *gDslVars);
-+
-+#endif /* G997FramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/HdlcFramer.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/HdlcFramer.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/HdlcFramer.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/HdlcFramer.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,237 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * HdlcFramer.h
-+ *
-+ * Description:
-+ * This file contains common HDLC definitions for bit/byte stuffing
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: HdlcFramer.h,v 1.3 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: HdlcFramer.h,v $
-+ * Revision 1.3 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.2 2003/07/18 18:51:05 ilyas
-+ * Added mode (default) to pass address and control field
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef HdlcFramerHeader
-+#define HdlcFramerHeader
-+
-+/* setup bitmap definitions */
-+
-+#define kHdlcSetupShift 16
-+#define kHdlcSetupMask ((long)0xFFFF << kHdlcSetupShift)
-+
-+#define kHdlcCrcMask 0x00030000
-+#define kHdlcCrcNone 0x00000000
-+#define kHdlcCrc16 0x00010000
-+#define kHdlcCrc32 0x00020000
-+
-+#define kHdlcTxIdleStop 0x00040000
-+#define kHdlcSpecialAddrCtrl 0x00080000
-+
-+extern ushort HdlcCrc16Table[];
-+
-+#define HDLC16_CRC_INIT 0xFFFF
-+#define HDLC16_CRC_FINAL(crc) ((crc) ^ 0xFFFF)
-+#define HDLC16_GOOD_CRC 0xF0B8
-+#define Hdlc16UpdateCrc(crc,b) ((crc) >> 8) ^ HdlcCrc16Table[((crc) ^ (b)) & 0xFF]
-+
-+extern ulong HdlcCrc32Table[];
-+
-+#define HDLC32_CRC_INIT 0xFFFFFFFF
-+#define HDLC32_CRC_FINAL(crc) ((crc) ^ 0xFFFFFFFF)
-+#define HDLC32_GOOD_CRC 0xDEBB20E3
-+#define Hdlc32UpdateCrc(crc,b) ((crc) >> 8) ^ HdlcCrc32Table[((crc) ^ (b)) & 0xFF]
-+
-+extern ulong HdlcCrc32Table[];
-+
-+/* HDLC common fields */
-+
-+#define HDLC_ADDR 0xFF
-+#define HDLC_CTRL 0x3
-+
-+#define HDLC_BYTE_FLAG 0x7E
-+#define HDLC_BYTE_ESC 0x7D
-+
-+/* HDLC frame assembly states */
-+
-+#define HDLC_STATE_START_FLAG 0
-+#define HDLC_STATE_ADDRESS (HDLC_STATE_START_FLAG + 1)
-+#define HDLC_STATE_CONTROL (HDLC_STATE_START_FLAG + 2)
-+#define HDLC_STATE_DATA (HDLC_STATE_START_FLAG + 3)
-+#define HDLC_STATE_FCS1 (HDLC_STATE_START_FLAG + 4)
-+#define HDLC_STATE_FCS2 (HDLC_STATE_START_FLAG + 5)
-+#define HDLC_STATE_END_FLAG (HDLC_STATE_START_FLAG + 6)
-+
-+
-+/* HDLC common types */
-+
-+typedef struct _hdlcByteControl {
-+ bitMap setup;
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+
-+ /* RX working data set */
-+
-+ uchar rxFrameState;
-+ int rxFrameLen;
-+ ulong rxCrc;
-+ Boolean rxEscChar;
-+
-+ uchar *pRxData;
-+ uchar *pRxDataEnd;
-+ long rxDataLen;
-+
-+ /* TX working data set */
-+
-+ uchar txFrameState;
-+ int txFrameLen;
-+ ulong txCrc;
-+ int txCharPending;
-+
-+ uchar *pTxData;
-+ uchar *pTxDataEnd;
-+ long txDataLen;
-+} hdlcByteControl;
-+
-+typedef struct _hdlcBitControl {
-+ bitMap setup;
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+
-+ /* RX working data set */
-+
-+ uchar rxFrameState;
-+ int rxFrameLen;
-+ ulong rxCrc;
-+ int rxNibblePending;
-+ int rxOutVal;
-+ uchar rxOutBits;
-+ uchar rxRem1Bits;
-+ Boolean rxEscChar; /* ???? */
-+
-+ uchar *pRxData;
-+ uchar *pRxDataEnd;
-+ long rxDataLen;
-+
-+ /* TX working data set */
-+
-+ uchar txFrameState;
-+ int txFrameLen;
-+ ulong txCrc;
-+ int txOutVal;
-+ uchar txOutBits;
-+ uchar txLast1Bits;
-+ int txCharPending; /* ???? */
-+
-+ uchar *pTxData;
-+ uchar *pTxDataEnd;
-+ long txDataLen;
-+} hdlcBitControl;
-+
-+/* HDLC common functions */
-+
-+#define HdlcFramerTxFrameInit(ctrl) do { \
-+ ctrl->txFrameState = HDLC_STATE_START_FLAG; \
-+ ctrl->txFrameLen = 0; \
-+ ctrl->txCrc = HDLC16_CRC_INIT; \
-+ ctrl->txCharPending= -1; \
-+} while (0)
-+
-+#define HdlcFramerRxFrameInit(ctrl) do { \
-+ ctrl->rxFrameState = HDLC_STATE_START_FLAG; \
-+ ctrl->rxFrameLen = 0; \
-+ ctrl->rxCrc = HDLC16_CRC_INIT; \
-+ ctrl->rxEscChar = false; \
-+} while (0)
-+
-+#define HdlcFramerTxGetData(ctrl) do { \
-+ dslFramerBufDesc bufDesc; \
-+ \
-+ if ((ctrl->txDataGetPtrHandler) (gDslVars, &bufDesc)) { \
-+ ctrl->pTxData = bufDesc.bufPtr; \
-+ ctrl->pTxDataEnd = (uchar*)bufDesc.bufPtr + bufDesc.bufLen; \
-+ ctrl->txDataLen = bufDesc.bufLen; \
-+ if (bufDesc.bufFlags & kDslFramerStartNewFrame) \
-+ HdlcFramerTxFrameInit(ctrl); \
-+ } \
-+ else { \
-+ HdlcFramerTxFrameInit(ctrl); \
-+ } \
-+} while (0);
-+
-+#define HdlcFramerRxGetData(ctrl, frFlag) do { \
-+ dslFramerBufDesc bufDesc; \
-+ \
-+ bufDesc.bufFlags = frFlag; \
-+ if ((ctrl->rxDataGetPtrHandler) (gDslVars, &bufDesc)) { \
-+ ctrl->pRxData = bufDesc.bufPtr; \
-+ ctrl->pRxDataEnd = (uchar*)bufDesc.bufPtr + bufDesc.bufLen; \
-+ ctrl->rxDataLen = bufDesc.bufLen; \
-+ } \
-+} while (0);
-+
-+/* HDLC functions headers */
-+
-+extern Boolean HdlcByteInit(
-+ void *gDslVars,
-+ hdlcByteControl *hbyCtrl,
-+ bitMap setup,
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType rxDataDoneHandler,
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType txDataDoneHandler);
-+
-+extern void HdlcByteReset(void *gDslVars, hdlcByteControl *hbyCtrl);
-+extern void HdlcByteRxFlush(void *gDslVars, hdlcByteControl *hbyCtrl);
-+extern int HdlcByteRx(void *gDslVars, hdlcByteControl *hbyCtrl, int nBytes, uchar *srcPtr) FAST_TEXT;
-+extern int HdlcByteTx(void *gDslVars, hdlcByteControl *hbyCtrl, int nBytes, uchar *dstPtr) FAST_TEXT;
-+extern Boolean HdlcByteTxIdle(void *gDslVars, hdlcByteControl *hbyCtrl);
-+
-+extern Boolean HdlcBitInit(
-+ void *gDslVars,
-+ hdlcBitControl *hbiCtrl,
-+ bitMap setup,
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType rxDataDoneHandler,
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType txDataDoneHandler);
-+
-+extern void HdlcBitReset(void *gDslVars, hdlcByteControl *hbiCtrl);
-+extern int HdlcBitRx(void *gDslVars, hdlcBitControl *hbiCtrl, int nBytes, uchar *srcPtr) FAST_TEXT;
-+extern int HdlcBitTx(void *gDslVars, hdlcBitControl *hbiCtrl, int nBytes, uchar *dstPtr) FAST_TEXT;
-+
-+#endif /* HdlcFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MathUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MathUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MathUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MathUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,135 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/************************************************************************
-+ *
-+ * MathUtil.h:
-+ *
-+ * Description:
-+ * This file contains the exported interface for MathUtil.c module.
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.6 $
-+ *
-+ * $Id: MathUtil.h,v 1.6 2004/04/13 00:21:13 ilyas Exp $
-+ *
-+ * $Log: MathUtil.h,v $
-+ * Revision 1.6 2004/04/13 00:21:13 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.5 2001/08/16 02:18:08 khp
-+ * - mark functions with FAST_TEXT to reduce cycle counts for QPROC targets
-+ * (replaces use of LMEM_INSN)
-+ *
-+ * Revision 1.4 1999/10/06 04:55:22 liang
-+ * Added function to multiply two long values to save result as VeryLong.
-+ *
-+ * Revision 1.3 1999/08/05 19:42:52 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.2 1999/03/26 03:29:59 liang
-+ * Export CosSin table.
-+ *
-+ * Revision 1.1 1998/10/28 01:28:07 liang
-+ * *** empty log message ***
-+ *
-+ * Revision 1.12 1998/02/10 17:19:49 scott
-+ * Changed MathVL routines to return arguments using pointers
-+ *
-+ * Revision 1.11 1997/12/13 06:12:07 mwg
-+ * Added more Atan2 flavors
-+ *
-+ * Revision 1.10 1997/11/18 01:11:48 mwg
-+ * Removed <CR> symbols which accidently slipped in.
-+ *
-+ * Revision 1.9 1997/11/03 19:07:52 scott
-+ * No longer redefine max() and min() if already defined
-+ *
-+ * Revision 1.8 1997/07/30 01:35:20 liang
-+ * Add more accurate atan2 function UtilLongLongAtan2.
-+ *
-+ * Revision 1.7 1997/07/21 20:23:19 mwg
-+ * Added new function: UtilBlockCos()
-+ *
-+ * Revision 1.6 1997/03/21 23:50:10 liang
-+ * Added initial version of V8bis module to CVS tree.
-+ *
-+ * Revision 1.5 1997/03/19 18:35:34 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.4 1997/01/21 00:36:15 mwg
-+ * Added new function: UtilBlockCosSin()
-+ *
-+ * Revision 1.3 1996/06/18 21:14:45 mwg
-+ * Modified VLDivVL by allowing to specify the result scaling.
-+ *
-+ * Revision 1.2 1996/06/12 02:31:59 mwg
-+ * Added 64bit arithmetic functions.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:15 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.4 1995/12/04 23:08:15 liang
-+ * Add file Math/LinearToLog.c.
-+ *
-+ ************************************************************************/
-+#ifndef MathUtilPh
-+#define MathUtilPh
-+
-+/* Exported tables */
-+extern const short UtilCosTable[];
-+
-+/* Exported functions */
-+extern ComplexShort UtilCosSin(ushort angle);
-+extern long UtilBlockCosSin (int nValues, long angle, long delta, ComplexShort *dstPtr);
-+extern long UtilBlockCos (int nValues, long angle, long delta, short *dstPtr);
-+extern ushort UtilShortShortAtan2(ComplexShort point);
-+extern ushort UtilLongShortAtan2(ComplexLong point);
-+extern ulong UtilShortLongAtan2(ComplexShort point) FAST_TEXT;
-+extern ulong UtilLongLongAtan2(ComplexLong point) FAST_TEXT;
-+extern ushort UtilSqrt(ulong y);
-+extern ushort UtilMaxMagnitude(int blkSize, ComplexShort *dataPtr);
-+extern short UtilQ0LinearToQ4dB (ulong x);
-+extern ulong UtilQ4dBToQ12Linear (short x);
-+extern void UtilAdjustComplexMagnitude(ComplexShort *srcPtr, short mag, short adjustment);
-+
-+extern void VLMultLongByLong(long x, long y, VeryLong *dst);
-+extern void VLMultShort (VeryLong x, short y, VeryLong *dst);
-+extern void VLAddVL (VeryLong x, VeryLong y, VeryLong *dst);
-+extern void VLAddLong (VeryLong x, long y, VeryLong *dst);
-+extern void VLSubVL (VeryLong x, VeryLong y, VeryLong *dst);
-+extern void VLSubLong (VeryLong x, long y, VeryLong *dst);
-+extern void VLDivVL (VeryLong x, VeryLong y, int scale, long *dst);
-+extern void VLShiftLeft(VeryLong x, int shift, VeryLong *dst);
-+extern void VLShiftRight(VeryLong x, int shift, VeryLong *dst);
-+
-+
-+#define UtilAtan2 UtilShortShortAtan2
-+#define UtilLongAtan2 UtilLongShortAtan2
-+
-+/* Standard Macros */
-+#undef abs
-+#define abs(x) ((x) >= 0 ? (x) : -(x))
-+
-+#undef max
-+#define max(x, y) ((x) >= (y) ? (x) : (y))
-+
-+#undef min
-+#define min(x, y) ((x) <= (y) ? (x) : (y))
-+
-+#endif /* MathUtilPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MipsAsm.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MipsAsm.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MipsAsm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MipsAsm.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,264 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/************************************************************************
-+ *
-+ * MipsAsm.h:
-+ *
-+ * Description:
-+ * This file contains definitions specific to MIPS assembly
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: MipsAsm.h,v 1.5 2004/04/13 00:16:59 ilyas Exp $
-+ *
-+ * $Log: MipsAsm.h,v $
-+ * Revision 1.5 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.4 2002/09/12 04:08:50 ilyas
-+ * Added macros for BCM MIPS specific instructions
-+ *
-+ * Revision 1.3 2000/11/18 21:28:19 mprahlad
-+ * ifdef bcm47xx -
-+ * define MSUB(src1,src2) msub src1, src2
-+ * change Mult(dst, src1, src2) to use "mul" instead of "mult; mflo"
-+ * define Mul(src1, src2) mult src1, src2
-+ *
-+ * Revision 1.2 2000/07/28 21:05:05 mprahlad
-+ * Macros specific to bcm47xx added.
-+ *
-+ * Revision 1.1 1999/08/05 19:52:57 liang
-+ * Copied from the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.5 1999/04/02 23:16:21 mwg
-+ * Fixed a minor comatibility issue with mult
-+ *
-+ * Revision 1.4 1999/02/03 20:25:43 mwg
-+ * Added an option for R4010
-+ *
-+ * Revision 1.3 1998/10/30 02:21:34 mwg
-+ * Added targets for 4640
-+ *
-+ * Revision 1.2 1998/10/16 18:52:09 ilyas
-+ * Added ASM_PROLOG[5-7] macros to save on stores
-+ *
-+ * Revision 1.1 1998/06/03 23:28:39 mwg
-+ * Renamed from DinoDefs.h
-+ *
-+ * Revision 1.6 1998/02/09 18:23:11 scott
-+ * Added EMBEDDED_CALLING_CONVENTION (GreenHill) and R3900/R4102
-+ *
-+ * Revision 1.5 1997/03/19 18:35:02 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.4 1996/10/02 20:28:41 liang
-+ * Remove parameter "acc" from the non-DINO version of MAD.
-+ *
-+ * Revision 1.3 1996/10/02 19:44:36 liang
-+ * Separated MultAdd into MAD and MADW, added NO_DINO_WRITEBACK option.
-+ *
-+ * Revision 1.2 1996/08/14 03:06:07 liang
-+ * Modified macro MultAdd so that the assembly code build works.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1994/11/04 22:41:29 mwg
-+ * Added #ifdefs for different targets.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _MIPS_ASM_H_
-+#define _MIPS_ASM_H_
-+
-+#define zero $0
-+#define v0 $2
-+#define v1 $3
-+#define a0 $4
-+#define a1 $5
-+#define a2 $6
-+#define a3 $7
-+#define t0 $8
-+#define t1 $9
-+#define t2 $10
-+#define t3 $11
-+#define t4 $12
-+#define t5 $13
-+#define t6 $14
-+#define t7 $15
-+#define s0 $16
-+#define s1 $17
-+#define s2 $18
-+#define s3 $19
-+#define s4 $20
-+#define s5 $21
-+#define s6 $22
-+#define s7 $23
-+#define t8 $24
-+#define t9 $25
-+#define k0 $26
-+#define k1 $27
-+#define gp $28
-+#define sp $29
-+#define fp $30
-+#define s8 $30
-+#define ra $31
-+
-+#ifdef EMBEDDED_CALLING_CONVENTION
-+
-+/* Support for GreenHills embedded calling convention */
-+
-+#define ASM_PROLOG subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp); \
-+ sw $10, 24(sp); \
-+ sw $11, 28(sp);
-+
-+#define ASM_PROLOG5 subu sp, 32; \
-+ sw $8, 16(sp);
-+
-+#define ASM_PROLOG6 subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp);
-+
-+#define ASM_PROLOG7 subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp); \
-+ sw $10, 24(sp);
-+
-+#define ASM_EPILOG addu sp, 32
-+
-+#else
-+#define ASM_PROLOG
-+#define ASM_PROLOG5
-+#define ASM_PROLOG6
-+#define ASM_PROLOG7
-+#define ASM_EPILOG
-+#endif
-+
-+#ifdef DINO /* Special DSP extensions to MIPS core */
-+
-+#ifndef NO_DINO_WRITEBACK /* DSP extensions with writeback register */
-+
-+#define MAD(src1, src2) .set noreorder ; mad $0, src1, src2 ; .set reorder
-+#define MADW(acc, src1, src2) .set noreorder ; mad acc, src1, src2 ; .set reorder
-+#define Mult(dst, src1, src2) .set noreorder ; mult dst, src1, src2 ; .set reorder
-+#define MultU(dst, src1, src2) .set noreorder ; multu dst, src1, src2 ; .set reorder
-+
-+#else /* NO_DINO_WRITEBACK */
-+
-+#define MAD(src1, src2) .set noreorder ; mad $0, src1, src2 ; .set reorder
-+#define MADW(acc, src1, src2) .set noreorder ; mad $0, src1, src2 ; mflo acc ; .set reorder
-+#define Mult(dst, src1, src2) multu src1, src2 ; mflo dst
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#endif /* NO_DINO_WRITEBACK */
-+
-+#else /* DINO */
-+
-+#if defined(R3900)
-+
-+#define MAD(src1, src2) madd $0, src1, src2
-+#define MADW(acc, src1, src2) madd acc, src1, src2
-+#define Mult(dst, src1, src2) mult dst, src1, src2
-+#define MultU(dst, src1, src2) multu dst, src1, src2
-+
-+#elif defined(bcm47xx_INSTR_MACROS) && defined(bcm47xx)
-+
-+#define mips_froo(s1,s2,s3) s1##s2##s3
-+#define MSUB(s1,s2) .set noreorder ; mips_froo(msub_,s1,s2) ; .set reorder
-+#define MAD(s1,s2) .set noreorder ; mips_froo(mad_,s1,s2) ; .set reorder
-+#define MADW(acc, s1,s2) .set noreorder ; mips_froo(mad_,s1,s2) ; mflo acc ; .set reorder
-+
-+#include "BCM4710.h"
-+
-+#define Mult(dst, src1, src2) mul dst, src1, src2
-+#define Mul( src1, src2) mult src1, src2 ;
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#elif defined(bcm47xx)
-+#define MSUB(src1, src2) msub src1, src2
-+#define MAD(src1, src2) madd src1, src2
-+#define MADW(acc, src1, src2) .set noreorder ; madd src1, src2; mflo acc ; .set reorder
-+/*
-+#define Mult(dst, src1, src2) mult src1, src2 ; mflo dst
-+*/
-+#define Mult(dst, src1, src2) mul dst , src1, src2 ;
-+#define Mul( src1, src2) mult src1, src2 ;
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#else
-+
-+#ifdef R4102
-+#define MAD(src1, src2) madd16 src1, src2
-+#define MADW(acc, src1, src2) madd16 src1, src2 ; mflo acc
-+#else /* R4102 */
-+
-+#ifdef R4640
-+
-+#define MAD(src1, src2) madd $0, src1, src2
-+#define MADW(acc, src1, src2) madd src1, src2; mflo acc
-+
-+#else /* R4640 */
-+
-+#ifdef R4010
-+
-+#define MAD(src1, src2) madd src1, src2
-+#define MADW(acc, src1, src2) madd src1, src2; mflo acc
-+
-+#else
-+#define MAD(src1, src2) .set noat ;\
-+ mflo $at ;\
-+ sw $2, -4(sp) ;\
-+ multu src1, src2 ;\
-+ mflo $2 ;\
-+ addu $at, $2, $at ;\
-+ lw $2, -4(sp) ;\
-+ mtlo $at ;\
-+ .set at
-+
-+#define MADW(acc, src1, src2) .set noat ;\
-+ mflo $at ;\
-+ sw $2, -4(sp) ;\
-+ multu src1, src2 ;\
-+ mflo $2 ;\
-+ addu $at, $2, $at ;\
-+ lw $2, -4(sp) ;\
-+ move acc, $at ;\
-+ mtlo $at ;\
-+ .set at
-+#endif /* R4010 */
-+#endif /* R4102 */
-+#endif /* R4640 */
-+
-+#define Mult(dst, src1, src2) mul dst, src1, src2
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#endif /* !3900 */
-+#endif /* DINO */
-+
-+
-+
-+
-+
-+
-+
-+
-+#endif /* _MIPS_ASM_H_ */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MiscUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MiscUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MiscUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/MiscUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,65 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * MiscUtil.h -- Miscellaneous utilities
-+ *
-+ * Description:
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg Haixiang Liang
-+ *
-+ * $Revision: 1.4 $
-+ *
-+ * $Id: MiscUtil.h,v 1.4 2004/04/13 00:21:46 ilyas Exp $
-+ *
-+ * $Log: MiscUtil.h,v $
-+ * Revision 1.4 2004/04/13 00:21:46 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.3 2001/07/21 01:21:06 ilyas
-+ * Added more functions for int to string conversion used by log file
-+ *
-+ * Revision 1.2 1999/08/05 19:42:56 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.1 1999/01/27 22:10:12 liang
-+ * Initial version.
-+ *
-+ * Revision 1.1 1997/07/10 01:18:45 mwg
-+ * Initial revision.
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+#ifndef _MISC_UTIL_H_
-+#define _MISC_UTIL_H_
-+
-+extern long SM_DECL GetRateValue(dataRateMap rate);
-+extern int SM_DECL DecToString(ulong value, uchar *dstPtr, uint nDigits);
-+extern int SM_DECL HexToString(ulong value, uchar *dstPtr, uint nDigits);
-+extern char * SM_DECL DecToStr(char *s, ulong num);
-+extern char * SM_DECL SignedToStr(char *s, long num);
-+extern char * SM_DECL HexToStr(char *s, ulong num);
-+
-+#define EvenParityBit(x) ((z = (y = x ^ (x >> 4)) ^ (y >> 2)) ^ (z >> 1))
-+#define OddParityBit(x) (EvenParityBit(x) ^ 1)
-+
-+extern void ParityApply(int nBytes, int nDataBits, int parity, uchar *srcPtr, uchar *dstPtr);
-+extern void ParityStrip(int nBytes, int nDataBits, int parity, uchar *srcPtr, uchar *dstPtr, statusHandlerType statusHandler);
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Que.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Que.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Que.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/Que.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,106 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * Que.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of a simple queue
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef QueHeader_H_
-+#define QueHeader_H_
-+
-+typedef void * _QueItem;
-+
-+typedef struct _QueHeader
-+ {
-+ _QueItem *head; /* first item in the queue */
-+ _QueItem *tail; /* last item in the queue */
-+ } QueHeader;
-+
-+/* Queue management macros */
-+
-+#define QueInit(pqHdr) (((QueHeader *)(pqHdr))->head = ((QueHeader *)(pqHdr))->tail = NULL)
-+#define QueEmpty(pqHdr) (NULL == ((QueHeader *)(pqHdr))->head)
-+
-+#define QueFirst(pqHdr) ((QueHeader *)(pqHdr))->head
-+#define QueLast(pqHdr) ((QueHeader *)(pqHdr))->tail
-+#define QueNext(pqItem) (*((void **)(pqItem)))
-+
-+
-+#define QueRemoveFirst(pqHdr) do { \
-+ if (!QueEmpty(pqHdr)) { \
-+ ((QueHeader *)(pqHdr))->head = *((QueHeader *)(pqHdr))->head; \
-+ if (QueEmpty(pqHdr)) \
-+ ((QueHeader *)(pqHdr))->tail = NULL; \
-+ } \
-+} while (0)
-+#define QueRemove(pqHdr) QueRemoveFirst(pqHdr)
-+
-+
-+#define QueAddLast(pqHdr,pqItem) do { \
-+ QueNext(pqItem) = NULL; \
-+ if (NULL != ((QueHeader *)(pqHdr))->tail) \
-+ *((QueHeader *)(pqHdr))->tail = (pqItem); \
-+ else \
-+ ((QueHeader *)(pqHdr))->head = (_QueItem *)(pqItem); \
-+ ((QueHeader *)(pqHdr))->tail = (_QueItem *)(pqItem); \
-+} while (0)
-+#define QueAdd(pqHdr,pItem) QueAddLast(pqHdr,pItem)
-+
-+#define QueAddFirst(pqHdr,pqItem) do { \
-+ if (NULL == ((QueHeader *)(pqHdr))->tail) \
-+ ((QueHeader *)(pqHdr))->tail = (_QueItem *)(pqItem); \
-+ QueNext(pqItem) = ((QueHeader *)(pqHdr))->head; \
-+ ((QueHeader *)(pqHdr))->head = (_QueItem *)(pqItem); \
-+} while (0)
-+
-+
-+#define QueGet(pqHdr) \
-+ (void *) QueFirst(pqHdr); \
-+ QueRemove(pqHdr);
-+
-+#define QueMerge(pqHdr1,pqHdr2) do { \
-+ if (NULL == ((QueHeader *)(pqHdr1))->tail) \
-+ ((QueHeader *)(pqHdr1))->head = ((QueHeader *)(pqHdr2))->head; \
-+ else \
-+ QueNext(((QueHeader *)(pqHdr1))->tail) = ((QueHeader *)(pqHdr2))->head; \
-+ if (NULL != ((QueHeader *)(pqHdr2))->tail) \
-+ ((QueHeader *)(pqHdr1))->tail = ((QueHeader *)(pqHdr2))->tail; \
-+} while (0)
-+
-+#define QueCopy(pqHdr1,pqHdr2) do { \
-+ ((QueHeader *)(pqHdr1))->head = ((QueHeader *)(pqHdr2))->head; \
-+ ((QueHeader *)(pqHdr1))->tail = ((QueHeader *)(pqHdr2))->tail; \
-+} while (0)
-+
-+#define QueForEach(pqHdr,f,ref) do { \
-+ _QueItem *p = ((QueHeader *)(pqHdr))->head; \
-+ \
-+ while (NULL != p) { \
-+ if ( (f)((void *)p, ref) ) break; \
-+ p = QueNext(p); \
-+ } \
-+} while (0)
-+
-+#endif /* QueHeader_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftAtmVc.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftAtmVc.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftAtmVc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftAtmVc.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,569 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftAtmVc.h
-+ *
-+ * Description:
-+ * This file contains ATM VC definitions
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.27 $
-+ *
-+ * $Id: SoftAtmVc.h,v 1.27 2004/06/02 22:26:17 ilyas Exp $
-+ *
-+ * $Log: SoftAtmVc.h,v $
-+ * Revision 1.27 2004/06/02 22:26:17 ilyas
-+ * Added ATM counters for G.992.3
-+ *
-+ * Revision 1.26 2004/03/10 22:57:20 ilyas
-+ * Added I.432 scramling control
-+ *
-+ * Revision 1.25 2003/09/23 00:21:59 ilyas
-+ * Added status to indicate ATM header compression
-+ *
-+ * Revision 1.24 2003/08/27 02:00:50 ilyas
-+ * Original implementation of ATM header compression
-+ *
-+ * Revision 1.23 2003/02/25 04:13:15 ilyas
-+ * Added standard Broadcom header
-+ *
-+ * Revision 1.22 2003/01/10 23:25:48 ilyas
-+ * Added ATM status definition
-+ *
-+ * Revision 1.21 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.20 2002/04/02 09:58:00 ilyas
-+ * Initial implementatoin of BERT
-+ *
-+ * Revision 1.19 2001/10/09 22:35:14 ilyas
-+ * Added more ATM statistics and OAM support
-+ *
-+ * Revision 1.18 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.17 2001/02/23 05:49:57 ilyas
-+ * Added routed 1483 encapsulation
-+ *
-+ * Revision 1.16 2001/02/09 04:18:18 ilyas
-+ * Added framer for bridged ethernet PDUs
-+ *
-+ * Revision 1.15 2001/02/09 01:55:27 ilyas
-+ * Added status codes and macros to support printing of AAL packets
-+ *
-+ * Revision 1.14 2000/09/21 17:28:35 ilyas
-+ * Added VBR support to traffic management code, separated UBR to a different
-+ * Tx list, changed some of the algorithms
-+ *
-+ * Revision 1.13 2000/08/23 18:42:13 ilyas
-+ * Added AAL2, added VcConfigure functions, moved commonly used look-up
-+ * tables for CRC calculation to AtmLayer
-+ *
-+ * Revision 1.12 2000/08/02 03:06:22 ilyas
-+ * Added support for reserving space in RX packets for ATm protocols
-+ *
-+ * Revision 1.11 2000/07/28 17:23:39 ilyas
-+ * Added ATM connect/disconnect statuses
-+ *
-+ * Revision 1.10 2000/07/25 02:16:12 ilyas
-+ * Added EClip (with Eth to ATM ARP translation) implementation
-+ *
-+ * Revision 1.9 2000/07/23 20:57:14 ilyas
-+ * Added ATM framer and protocol layers
-+ *
-+ * Revision 1.8 2000/07/17 21:08:16 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.7 2000/06/09 18:33:04 liang
-+ * Fixed Irix compiler warnings.
-+ *
-+ * Revision 1.6 2000/05/18 21:47:31 ilyas
-+ * Added detection of preassigned cells such as OAM F4, F5
-+ *
-+ * Revision 1.5 2000/05/14 01:50:11 ilyas
-+ * Added more statuses to ATM code
-+ *
-+ * Revision 1.4 2000/05/10 02:41:28 liang
-+ * Added status report for no cell memory
-+ *
-+ * Revision 1.3 2000/05/09 23:00:27 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.2 2000/05/03 03:53:00 ilyas
-+ * Added support for pVc to vcID translation needed for LOG file and other
-+ * definitions for ATM data in LOG file
-+ *
-+ * Revision 1.1 2000/04/19 00:21:35 ilyas
-+ * Fixed some problems and added Out Of Band (OOB) support to ATM packets
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftAtmVcHeader
-+#define SoftAtmVcHeader
-+
-+/*
-+**
-+** ATM UNI types
-+**
-+*/
-+
-+#define AtmLinkFlags(bMap,name) (((bMap) >> name##Shift) & name##Mask)
-+
-+/* ATM service category types */
-+
-+#define kAtmSrvcCBR 1 /* Constant Bit Rate */
-+#define kAtmSrvcVBR 2 /* Variable Bit Rate */
-+#define kAtmSrvcUBR 4 /* Unspecified Bit Rate */
-+#define kAtmSrvcABR 8 /* Available Bit Rate */
-+#define kAtmSrvcUnknown 0xFF
-+
-+/* ATM AAL types (as encoded at UNI) */
-+
-+#define kAtmAalIE 0x58
-+
-+#define kAtmRaw 0
-+#define kAtmAal1 1
-+#define kAtmAal2 2
-+#define kAtmAal34 3
-+#define kAtmAal5 5
-+#define kAtmAalUser 16
-+#define kAtmAalUnknown 0xFF
-+
-+/* ATM AAL1 parameters */
-+
-+#define kAal1SubTypeId 0x85
-+
-+#define kAal1TransportShift 0
-+#define kAal1TransportMask 0x7
-+
-+#define kAal1NullTransport 0
-+#define kAal1VoiceTransport 1
-+#define kAal1CircuitTransport 2
-+#define kAal1AudioTransport 4
-+#define kAal1VideoTransport 5
-+
-+
-+#define kAal1CBRId 0x86
-+
-+#define kAal1CBRShift 24
-+#define kAal1CBRMask 0xFF
-+
-+#define kAal1CBR64 1
-+#define kAal1CBR1544 4 /* DS1 */
-+#define kAal1CBR6312 5 /* DS2 */
-+#define kAal1CBR32064 6
-+#define kAal1CBR44736 7 /* DS3 */
-+#define kAal1CBR97728 8
-+#define kAal1CBR2048 0x10 /* E1 */
-+#define kAal1CBR8448 0x11 /* E2 */
-+#define kAal1CBR34368 0x12 /* E3 */
-+#define kAal1CBR139264 0x13
-+#define kAal1CBR64xN 0x40
-+#define kAal1CBR8xN 0x41
-+
-+
-+#define kAal1MultiplierId 0x87
-+
-+#define kAal1ClockRecoveryId 0x88
-+
-+#define kAal1ClockRecoveryShift 3
-+#define kAal1ClockRecoveryMask 0x3
-+
-+#define kAal1ClockRecoveryNull 1 /* synchronous transport */
-+#define kAal1ClockRecoverySRTS 1 /* asynchronous transport */
-+#define kAal1ClockRecoveryAdaptive 2
-+
-+
-+#define kAal1ECMId 0x89 /* Error correction method */
-+
-+#define kAal1ECMShift (kAal1ClockRecoveryShift + 2)
-+#define kAal1ECMMask 0x3
-+
-+#define kAal1ECMNull 0
-+#define kAal1ECMLossSensitive 1
-+#define kAal1ECMDelaySensitive 2
-+
-+
-+#define kAal1SDTBlockSizeId 0x8A
-+
-+#define kAal1CellFillId 0x8B
-+
-+/* ATM AAL34 and AAL5 parameters */
-+
-+#define kAalFwdMaxSDUSizeId 0x8C
-+#define kAalBacMaxkSDUSizeId 0x81
-+
-+#define kAal34MidRangeId 0x82
-+
-+#define kAalSSCSTypeId 0x84
-+
-+#define kAalSSCSAssured 1
-+#define kAalSSCSNonAssured 2
-+#define kAalSSCSFrameRelay 4
-+
-+/* ATM AAL2 parameters */
-+
-+#define kAal2SSNone 0
-+#define kAal2SSSAR 1
-+#define kAal2SSTED 2
-+#define kAal2SSSARMask 3
-+#define kAal2SSType1 4
-+#define kAal2SSType3 5
-+
-+typedef struct {
-+ uchar aalType;
-+ union {
-+ struct {
-+ bitMap aal1Flags;
-+ ulong cbrRate;
-+ ushort blkSize;
-+ uchar sarUsed;
-+ } aal1Params;
-+ struct {
-+ ushort fwdMaxCpSize; /* Max "common part" packet size */
-+ ushort backMaxCpSize;
-+ ushort cidLow;
-+ ushort cidHigh;
-+ ushort fwdMaxSsSize; /* Max "service specific" packet size */
-+ ushort backMaxSsSize;
-+ uchar sscsType;
-+ } aal2Params;
-+ struct {
-+ ushort fwdMaxSDUSize;
-+ ushort backMaxSDUSize;
-+ ushort midLow;
-+ ushort midHigh;
-+ uchar sscsType;
-+ } aal34Params;
-+ struct {
-+ ushort fwdMaxSDUSize;
-+ ushort backMaxSDUSize;
-+ uchar sscsType;
-+ } aal5Params;
-+ } param;
-+} atmAalParams;
-+
-+/* ATM Traffic Descriptor types (as encoded at UNI) */
-+
-+#define kAtmTrafficIE 0x59
-+
-+#define kTrafficFwdPeakCellRateId0 0x82
-+#define kTrafficBackPeakCellRateId0 0x83
-+#define kTrafficFwdPeakCellRateId 0x84
-+#define kTrafficBackPeakCellRateId 0x85
-+
-+#define kTrafficFwdSustainCellRateId0 0x88
-+#define kTrafficBackSustainCellRateId0 0x89
-+#define kTrafficFwdSustainCellRateId 0x90
-+#define kTrafficBackSustainCellRateId 0x91
-+
-+#define kTrafficFwdMaxBurstSizeId0 0xA0
-+#define kTrafficBackMaxBurstSizeId0 0xA1
-+#define kTrafficFwdMaxBurstSizeId 0xB0
-+#define kTrafficBackMaxBurstSizeId 0xB1
-+
-+#define kTrafficBestEffortId 0xBE
-+#define kTrafficMgrOptionsId 0xBF
-+
-+#define kTrafficMaxTolerance 0x7FFFFFFF
-+
-+/* trafficFlags coding */
-+
-+#define kTrafficTagFwd 1
-+#define kTrafficTagBack 2
-+#define kTrafficBestEffort 4
-+
-+typedef struct {
-+ ulong tPCR0; /* CLP = 0, time between cells in us */
-+ ulong tPCR; /* CLP = 0+1 */
-+ ulong tolPCR; /* tolerance for PCR in us */
-+
-+ ulong tSCR0; /* CLP = 0 */
-+ ulong tSCR; /* CLP = 0+1 */
-+ ulong tolSCR; /* tolerance for SCR in us */
-+
-+ uchar atmServiceType; /* CBR, VBR, UBR, etc. */
-+ uchar trafficFlags;
-+} atmTrafficParams;
-+
-+/* ATM Broadband Bearer Capabilty (BBC) types (as encoded at UNI) */
-+
-+#define kAtmBBCIE 0x5E
-+
-+#define kBBCClassShift 0
-+#define kBBCClassMask 0x1F
-+
-+#define kBBCClassA 0x1
-+#define kBBCClassC 0x3
-+#define kBBCClassX 0x10
-+
-+
-+#define kBBCTrafficShift (kBBCClassShift + 5)
-+#define kBBCTrafficMask 0x7
-+
-+#define kBBCTrafficNull 0
-+#define kBBCTrafficCBR 1
-+#define kBBCTrafficVBR 2
-+
-+
-+#define kBBCTimingShift (kBBCTrafficShift + 3)
-+#define kBBCTimingMask 0x3
-+
-+#define kBBCTimingNull 0
-+#define kBBCTimingRequired 1
-+#define kBBCTimingNotRequired 2
-+
-+
-+#define kBBCClippingShift (kBBCTimingShift + 2)
-+#define kBBCClippingMask 0x3
-+
-+#define kBBCNoClipping 0
-+#define kBBCClippingOk 1
-+
-+#define kBBCConnectionShift (kBBCClippingShift + 2)
-+#define kBBCConnectionMask 0x3
-+
-+#define kBBCPoint2Point 0
-+#define kBBCPoint2MPoint 1
-+
-+/* ATM Broadband High/Low Layer Information (BHLI/BLLI) types (as encoded at UNI) */
-+
-+#define kAtmBHLIIE 0x5D
-+#define kAtmBLLIIE 0x5F
-+
-+/* ATM QoS types (as encoded at UNI) */
-+
-+#define kAtmQoSIE 0x5C
-+
-+#define kQoSNull 0
-+#define kQoSClass1 1
-+#define kQoSClass2 2
-+#define kQoSClass3 3
-+#define kQoSClass4 4
-+#define kQoSReserved 0xFF
-+
-+typedef struct {
-+ uchar fwdQoSClass;
-+ uchar backQoSClass;
-+} atmQoSParams;
-+
-+/* ATM MID definitions (ConfigureHandler) */
-+
-+#define kAtmMidEntireVc ((ulong) -1)
-+
-+typedef struct {
-+ void *pUserVc; /* VC id from the caller: has to be 1st !!! */
-+ ulong vci;
-+ uchar defaultCLP; /* default CLP for tx packets on this VC */
-+ uchar framerId;
-+ uchar protoId;
-+ uchar protoRxBytesReserved; /* # bytes reserved by protocol in the beginning of Rx packet */
-+ uchar protoTxBytesReserved; /* # bytes reserved by protocol in the beginning of Tx packet */
-+
-+ atmAalParams aalParams;
-+ atmTrafficParams rxTrafficParams;
-+ atmTrafficParams txTrafficParams;
-+ bitMap bbcFlags;
-+ atmQoSParams qosParams;
-+} atmVcParams;
-+
-+/*
-+**
-+** ATM Out of Band (OOB) packet information
-+**
-+*/
-+
-+typedef struct {
-+ Boolean clp; /* Cell Loss Prioroty */
-+ uchar aalType;
-+ union {
-+ struct {
-+ uchar payloadType;
-+ } aalRawParams;
-+ struct {
-+ uchar payloadType;
-+ ushort mid;
-+ } aal34Params;
-+ struct {
-+ uchar uui; /* Uses to user indicator */
-+ uchar cpi; /* common part indicator */
-+ } aal5Params;
-+ } aalParam;
-+} atmOobPacketInfo;
-+
-+/*
-+**
-+** ATM setup bit definition
-+**
-+*/
-+
-+#define kAtmCorrectHecErrors 1
-+#define kCorrectHecErrors kAtmCorrectHecErrors
-+#define kAtmPhyHeaderCompression 2
-+#define kAtmPhyNoDataScrambling 4
-+
-+#define kAtmTxIdleTimeoutMask 0x6
-+#define kAtmTxIdleNoTimeout 0
-+#define kAtmTxIdleTimeout10s 2
-+#define kAtmTxIdleTimeout30s 4
-+#define kAtmTxIdleTimeout60s 6
-+
-+/*
-+**
-+** ATM framer modes and protocol definitions
-+**
-+*/
-+
-+#define kAtmFramerNone 0
-+#define kAtmFramerISO 1
-+#define kAtmFramerIP 2
-+#define kAtmFramerEth 3
-+#define kAtmFramerEthWithCRC 4
-+
-+#define kAtmProtoNone 0
-+#define kAtmProtoEClip 1
-+#define kAtmProtoERouted1483 2
-+#define kAtmProtoPPP 3
-+
-+
-+/*
-+**
-+** ATM status codes
-+**
-+*/
-+
-+typedef void (*atmStatusHandler) (void *gDslVars, ulong statusCode, ...);
-+
-+/* physical layer I.432 */
-+
-+#define kAtmStatRxHunt 1
-+#define kAtmStatRxPreSync 2
-+#define kAtmStatRxSync 3
-+#define kAtmStatRxPlOamCell 4
-+#define kAtmStatBertResult 5
-+#define kAtmStatHec 6
-+#define kAtmStatHdrCompr 7
-+#define kAtmStatCounters 8
-+
-+/* ATM layer */
-+
-+#define kAtmLayerStatFirst 100
-+#define kAtmStatRxDiscarded 100
-+#define kAtmStatTxDelayed 101
-+
-+#define kAtmStatVcCreated 102
-+#define kAtmStatVcStarted 103
-+#define kAtmStatVcStopped 104
-+#define kAtmStatVcDeleted 105
-+
-+#define kAtmStatTimeout 106
-+#define kAtmStatNoCellMemory 107
-+#define kAtmStatPrintCell 108
-+#define kAtmStatInvalidCell 109
-+#define kAtmStatUnassignedCell 110
-+#define kAtmStatOamF4SegmentCell 111
-+#define kAtmStatOamF4End2EndCell 112
-+#define kAtmStatOamI371Cell 113
-+#define kAtmStatOamF5SegmentCell 114
-+#define kAtmStatOamF5End2EndCell 115
-+#define kAtmStatReservedCell 116
-+
-+#define kAtmStatConnected 117
-+#define kAtmStatDisconnected 118
-+
-+#define kAtmStatRxPacket 119
-+#define kAtmStatTxPacket 120
-+
-+#define kAtmStatOamLoopback 121
-+
-+
-+typedef struct _atmPhyCounters {
-+ ushort id;
-+ ushort bertStatus;
-+ ulong bertCellTotal;
-+ ulong bertCellCnt;
-+ ulong bertBitErrors;
-+
-+ ulong rxHecCnt;
-+ ulong rxCellTotal;
-+ ulong rxCellData;
-+ ulong rxCellDrop;
-+} atmPhyCounters;
-+
-+/* AAL layer */
-+
-+
-+
-+/*
-+**
-+** ATM log file definitions
-+**
-+*/
-+
-+/* ATM log file flags */
-+
-+#define kAtmLogFrameFlagMask 3 /* mask */
-+
-+#define kAtmLogFrameFlagNone 0 /* nothing */
-+#define kAtmLogFrameFlagNoData 1 /* no data only frame size */
-+#define kAtmLogFrameFlagBinData 2 /* data in binary form */
-+#define kAtmLogFrameFlagTextData 3 /* data in text form */
-+
-+#define kAtmLogSendFrameShift 0
-+#define kAtmLogSendFrameNoData (kAtmLogFrameFlagNoData << kAtmLogSendFrameShift)
-+#define kAtmLogSendFrameBinData (kAtmLogFrameFlagBinData << kAtmLogSendFrameShift)
-+#define kAtmLogSendFrameTextData (kAtmLogFrameFlagTextData << kAtmLogSendFrameShift)
-+
-+#define kAtmLogRcvFrameShift 2
-+#define kAtmLogRcvFrameNone (kAtmLogFrameFlagNone << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameNoData (kAtmLogFrameFlagNoData << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameBinData (kAtmLogFrameFlagBinData << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameTextData (kAtmLogFrameFlagTextData << kAtmLogRcvFrameShift)
-+
-+#define kAtmLogSendCompleteFrameShift 4
-+#define kAtmLogSendCompleteFrameNone (kAtmLogFrameFlagNone << kAtmLogSendCompleteFrameShift)
-+#define kAtmLogSendCompleteFrameNoData (kAtmLogFrameFlagNoData << kAtmLogSendCompleteFrameShift)
-+
-+#define kAtmLogReturnFrameShift 6
-+#define kAtmLogReturnFrameNoData (kAtmLogFrameFlagNoData << kAtmLogReturnFrameShift)
-+
-+#define kAtmLogCellFlag (1 << 8)
-+
-+/* ATM log codes */
-+
-+#define kAtmLogSendFrame 1
-+#define kAtmLogRcvFrame 2
-+#define kAtmLogSendFrameComplete 3
-+#define kAtmLogReturnFrame 4
-+#define kAtmLogVcAllocate 5
-+#define kAtmLogVcFree 6
-+#define kAtmLogVcActivate 7
-+#define kAtmLogVcDeactivate 8
-+#define kAtmLogTimer 9
-+#define kAtmLogCell 10
-+#define kAtmLogVcConfigure 11
-+
-+#define kAtmLogRxCellHeader 12
-+#define kAtmLogRxCellData 13
-+#define kAtmLogTxCell 14
-+
-+#endif /* SoftAtmVcHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,675 @@
-+/****************************************************************************
-+ *
-+ * SoftDsl.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the DSL
-+ * global variable structure.
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.72 $
-+ *
-+ * $Id: SoftDsl.gh,v 1.72 2004/04/30 23:05:19 kdu Exp $
-+ *
-+ * $Log: SoftDsl.gh,v $
-+ * Revision 1.72 2004/04/30 23:05:19 kdu
-+ * Fixed interop issues in TDC lab for TMM.
-+ *
-+ * Revision 1.70 2004/04/10 23:30:48 ilyas
-+ * Defined gloval structure for slow (SDRAM) data
-+ *
-+ * Revision 1.69 2004/04/02 18:33:45 gsyu
-+ * Share MuxFramer buffers with scratch memory
-+ *
-+ * Revision 1.68 2004/02/04 20:12:38 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.67 2004/02/03 19:10:37 gsyu
-+ * Added separated carrierInfo structures for G992P5
-+ *
-+ * Revision 1.66 2004/01/26 04:21:06 yongbing
-+ * Merge changes in ADSL2 branch into Annex A branch
-+ *
-+ * Revision 1.65 2004/01/13 19:12:07 gsyu
-+ * Added two more variables for Double upstream
-+ *
-+ * Revision 1.64 2003/12/04 02:10:37 linyin
-+ * Add a variable for FbmsOL mode
-+ *
-+ * Revision 1.63 2003/11/20 00:57:50 yongbing
-+ * Merge ADSL2 functionalities into Annex A branch
-+ *
-+ * Revision 1.62 2003/11/05 01:59:12 liang
-+ * Add vendor ID code for Infineon.
-+ *
-+ * Revision 1.61 2003/08/12 22:59:41 khp
-+ * - for Haixiang: added support for ADSL_MARGIN_TWEAK_TEST
-+ *
-+ * Revision 1.60 2003/08/01 00:08:19 liang
-+ * Added firmware ID for Samsung ADI 930 DSLAM.
-+ *
-+ * Revision 1.59 2003/07/14 14:40:08 khp
-+ * - AnnexB: added bad SNR2 retrain counter to connectin setup
-+ *
-+ * Revision 1.58 2003/06/25 02:40:22 liang
-+ * Added firmware ID for Annex A UE9000 ADI918 (from Aliant, Canada).
-+ *
-+ * Revision 1.57 2003/06/25 00:00:40 ilyas
-+ * -added firmware IDs for TI 4000C and AC5 (Annex B)
-+ *
-+ * Revision 1.56 2003/05/31 01:50:38 khp
-+ * -add firmware IDs for ECI16 and ECI16A
-+ *
-+ * Revision 1.55 2003/03/27 19:30:52 liang
-+ * Add and initialize new connectionSetup field coVendorFirmwareID under module ADSL_IDENTIFY_VENDOR_FIRMWARE.
-+ *
-+ * Revision 1.54 2002/12/13 18:35:48 yongbing
-+ * Add support for G.992.2 Annex C in start up
-+ *
-+ * Revision 1.53 2002/12/06 02:06:33 liang
-+ * Moved the T1.413 RAck1/RAck2 switching variables to connection setup structure.
-+ *
-+ * Revision 1.52 2002/11/26 02:49:46 liang
-+ * Added variable codingGainDecrement to the connectionSetup structure to solve the C-Rates-RA option failure problem.
-+ *
-+ * Revision 1.51 2002/10/20 18:56:16 khp
-+ * - for linyin:
-+ * - #ifdef NEC_NSIF_WORKAROUND:
-+ * - add status and fail counter for NSIF
-+ *
-+ * Revision 1.50 2002/09/28 02:36:50 yongbing
-+ * Add retrain in T1.413 with R-Ack1 tone
-+ *
-+ * Revision 1.49 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.48 2002/07/19 01:51:35 liang
-+ * Added vendor ID constant for Alcatel.
-+ *
-+ * Revision 1.47 2002/06/27 21:51:08 liang
-+ * Added xmt and rcv tone selection bitmap in connection setup.
-+ *
-+ * Revision 1.46 2002/06/11 20:48:06 liang
-+ * Added CO vendor ID field to connectionSetup structure.
-+ *
-+ * Revision 1.45 2002/06/06 03:05:43 khp
-+ * -use boolean in connectup setup instead of localCapabilities.features to indicate FBM mode
-+ *
-+ * Revision 1.44 2002/03/22 19:38:58 yongbing
-+ * Modify for co-exist of G994P1 and T1P413
-+ *
-+ * Revision 1.43 2002/03/02 00:52:40 ilyas
-+ * AnnexC delay needs to be long for prototype
-+ *
-+ * Revision 1.42 2002/01/19 23:59:17 ilyas
-+ * Added support for LOG and eye data to ADSL core target
-+ *
-+ * Revision 1.41 2002/01/16 19:03:59 ilyas
-+ * Added HOST_ONLY ifdefs around ADSL core data
-+ *
-+ * Revision 1.40 2002/01/14 17:41:04 liang
-+ * Move xmt & rcv sample buffers to top level.
-+ *
-+ * Revision 1.39 2001/12/21 22:45:34 ilyas
-+ * Added support for ADSL MIB data object
-+ *
-+ * Revision 1.38 2001/12/13 02:24:22 ilyas
-+ * Added G997 (Clear EOC and G997 framer) support
-+ *
-+ * Revision 1.37 2001/11/30 05:56:31 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.36 2001/10/19 00:12:07 ilyas
-+ * Added support for frame oriented (no ATM) data link layer
-+ *
-+ * Revision 1.29.2.5 2001/10/03 01:44:00 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.29.2.4 2001/08/18 00:00:36 georgep
-+ * Add variable to store annexC pathDelay
-+ *
-+ * Revision 1.29.2.3 2001/08/08 17:33:27 yongbing
-+ * Merge with tag SoftDsl_2_17
-+ *
-+ * Revision 1.35 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.34 2001/08/28 03:26:32 ilyas
-+ * Added support for running host and adsl core parts separately ("dual" mode)
-+ *
-+ * Revision 1.33 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.32 2001/05/18 21:21:44 liang
-+ * Save the current number of rcv samples to line handler for QProc test.
-+ *
-+ * Revision 1.31 2001/04/25 01:20:11 ilyas
-+ *
-+ * Don't use DSL frame functions if ATM_LAYER is not defined
-+ *
-+ * Revision 1.30 2001/03/25 06:11:20 liang
-+ * Combined separate loop attenuation status for ATUR & ATUC into one status.
-+ * Replace separate hardware AGC info status for ATUR & ATUC into hardware AGC
-+ * request status and hardware AGC obtained status.
-+ * Use store AGC command to save hardware AGC value instead of returning value
-+ * from status report.
-+ *
-+ * Revision 1.29 2001/03/17 03:00:46 georgep
-+ * Added agcInfo to connectionSetupStruct
-+ *
-+ * Revision 1.28 2001/02/10 03:03:09 ilyas
-+ * Added one more DslFrame function
-+ *
-+ * Revision 1.27 2000/08/31 19:04:24 liang
-+ * Added scratch buffer structure definition.
-+ *
-+ * Revision 1.26 2000/07/23 20:52:52 ilyas
-+ * Added xxxFrameBufSetAddress() function for ATM framer layers
-+ * Rearranged linkLayer functions in one structure which is passed as a
-+ * parameter to xxxLinkLayerInit() function to be set there
-+ *
-+ * Revision 1.25 2000/07/18 21:42:25 ilyas
-+ * Fixed compiler warning about pointer casting
-+ *
-+ * Revision 1.24 2000/07/18 21:18:45 ilyas
-+ * Added GLOBAL_PTR_BIAS feature to utilize full 64K MIPS relative addressing space
-+ *
-+ * Revision 1.23 2000/07/18 20:03:24 ilyas
-+ * Changed DslFrame functions definitions to macros,
-+ * Removed gDslVars from their parameter list
-+ *
-+ * Revision 1.22 2000/07/17 21:08:15 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.21 2000/05/09 23:00:26 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.20 2000/05/03 03:57:04 ilyas
-+ * Added LOG file support for writing ATM data
-+ *
-+ * Revision 1.19 2000/04/19 00:31:47 ilyas
-+ * Added global SoftDsl functions for Vc, added OOB info functions
-+ *
-+ * Revision 1.18 2000/04/13 08:36:22 yura
-+ * Added SoftDslSetRefData, SoftDslGetRefData functions
-+ *
-+ * Revision 1.17 2000/04/13 05:38:54 georgep
-+ * Added T1p413 "Activation and Acknowledgement" which can substitute G994P1
-+ *
-+ * Revision 1.16 2000/04/05 22:30:42 liang
-+ * Changed function & constant names from G992p2 to G992 for the Main module.
-+ *
-+ * Revision 1.15 2000/04/04 04:16:06 liang
-+ * Merged with SoftDsl_0_03 from old tree.
-+ *
-+ * Revision 1.15 2000/04/04 01:47:21 ilyas
-+ * Implemented abstract dslFrame and dslFrameBuffer objects
-+ *
-+ * Revision 1.14 2000/04/01 02:53:33 georgep
-+ * Added pointer to G992p2Profile inside connectionSetup
-+ *
-+ * Revision 1.13 2000/03/18 01:27:56 georgep
-+ * Changed connectionSetup to include G992p1 Capabilities
-+ *
-+ * Revision 1.12 2000/02/29 01:39:05 georgep
-+ * put variable haveRemoteCapabilities inside connectionSetupStruct
-+ *
-+ * Revision 1.11 2000/02/08 00:44:36 liang
-+ * Fix the gDslVars definition for Irix environment.
-+ *
-+ * Revision 1.10 1999/11/19 00:59:29 george
-+ * Define physicalLayerVars as a union
-+ *
-+ * Revision 1.9 1999/11/11 19:19:42 george
-+ * Porting to 16Bit Compiler
-+ *
-+ * Revision 1.8 1999/11/09 20:26:17 george
-+ * Added G992P2_PROFILE to modules list
-+ *
-+ * Revision 1.7 1999/10/27 23:01:54 wan
-+ * Add G.994.1 setup in dslConnectionSetupStruct for setting up Initiation side
-+ *
-+ * Revision 1.6 1999/08/12 21:16:27 george
-+ * Move profileVars definition to G992p2/G992p2Profile.gh
-+ *
-+ * Revision 1.5 1999/08/10 18:20:43 george
-+ * Define fastRetrainVars
-+ *
-+ * Revision 1.4 1999/07/16 02:03:02 liang
-+ * Added Tx & Rx data handler function pointers.
-+ *
-+ * Revision 1.3 1999/07/03 01:40:15 liang
-+ * Redefined dsl command parameter list and added connection setup struct.
-+ *
-+ * Revision 1.2 1999/02/10 01:56:37 liang
-+ * Added hooks for G994.1 and G992.2.
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftDslGlobals
-+#define SoftDslGlobals
-+
-+#include "SoftDsl.h"
-+
-+#ifdef G992P2_PROFILE
-+#include "G992p2Profile.gh"
-+#endif
-+
-+typedef enum
-+ {
-+ kVendorUnknown = 0,
-+ kVendorBroadcom,
-+ kVendorGlobespan,
-+ kVendorADI,
-+ kVendorTI,
-+ kVendorCentillium,
-+ kVendorAlcatel,
-+ kVendorInfineon
-+ } VendorIDType;
-+
-+#define kDslVendorFirwareUnknown 0
-+typedef enum
-+ {
-+ kVendorADI_Anaconda = 1,
-+ kVendorADI_ECI918,
-+ kVendorADI_ECI930,
-+ kVendorADI_Cisco,
-+ kVendorADI_UE9000_918,
-+ kVendorADI_Samsung_930,
-+ kVendorTI_4000C_ERICSSON_350,
-+ kVendorTI_4000C_SEIMENS,
-+ kVendorADI_ECI16_AnnexB = 50, /* leave space for more Annex A types */
-+ kVendorADI_ECI16A_AnnexB,
-+ kVendorTI_4000C_AnnexB,
-+ kVendorTI_AC5_AnnexB
-+ } VendorFirmwareIDType;
-+
-+#define kDslXmtToneSelectionStartTone 0
-+#ifdef G992P1_ANNEX_B
-+#define kDslXmtToneSelectionEndTone 63
-+#else
-+#define kDslXmtToneSelectionEndTone 31
-+#endif
-+#define kDslXmtToneSelectionNumOfTones (kDslXmtToneSelectionEndTone-kDslXmtToneSelectionStartTone+1)
-+#define kDslXmtToneSelectionNumOfBytes ((kDslXmtToneSelectionNumOfTones+7)/8)
-+#define kDslRcvToneSelectionStartTone 32
-+#define kDslRcvToneSelectionEndTone 255
-+#define kDslRcvToneSelectionNumOfTones (kDslRcvToneSelectionEndTone-kDslRcvToneSelectionStartTone+1)
-+#define kDslRcvToneSelectionNumOfBytes ((kDslRcvToneSelectionNumOfTones+7)/8)
-+
-+#define kDslT1p413RAckModeTryRAck1 0x01
-+#define kDslT1p413RAckModeTryRAck2 0x02
-+#define kDslT1p413RAckModeTrialMask 0x0F
-+#define kDslT1p413RAckModeSelected 0x10
-+#define kDslT1p413RAckModeTrialCount 10 /* when in trial mode */
-+#define kDslT1p413RAckModeSwitchCount 20 /* when mode is selected */
-+
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+#define kDslMarginTweakNumOfTones 256
-+#endif
-+
-+typedef struct
-+ {
-+ Boolean haveRemoteCapabilities;
-+ dslModulationType selectedModulation;
-+ dslModulationType startupModulation;
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+ ushort downstreamMinCarr, downstreamMaxCarr;
-+#else
-+ uchar downstreamMinCarr, downstreamMaxCarr;
-+#endif
-+ uchar upstreamMinCarr, upstreamMaxCarr;
-+#if defined(DOUBLE_UP_STREAM)
-+ Boolean isDoubleUsEnabled;
-+ short selectedPilotTone;
-+#endif
-+ dslDataPumpCapabilities localCapabilities, remoteCapabilities;
-+#ifdef G992P3
-+ g992p3DataPumpCapabilities localCarrierInfoG992p3AnnexA;
-+ g992p3DataPumpCapabilities remoteCarrierInfoG992p3AnnexA;
-+ g992p3DataPumpCapabilities selectedCarrierInfoG992p3AnnexA;
-+ uchar xmtG992p3State;
-+#ifdef G992P5
-+ g992p3DataPumpCapabilities localCarrierInfoG992p5AnnexA;
-+ g992p3DataPumpCapabilities remoteCarrierInfoG992p5AnnexA;
-+ g992p3DataPumpCapabilities selectedCarrierInfoG992p5AnnexA;
-+#endif /* G992P5 */
-+#endif /* G992P3 */
-+ uchar handshakingDuplexMode;
-+ Boolean handshakingClientInitiation;
-+ short handshakingXmtPowerLevel;
-+ uchar handshakingXmtCarrierSet;
-+ short hwAgcQ4dB; /* for loop attenuation calculation */
-+ uchar coVendorID;
-+#ifdef ADSL_IDENTIFY_VENDOR_FIRMWARE
-+ uchar coVendorFirmwareID;
-+#endif
-+ uchar codingGainDecrement; /* coding gain decrement in Q4dB for initial rate calculation */
-+ uchar xmtToneSelection[kDslXmtToneSelectionNumOfBytes];
-+ uchar rcvToneSelection[kDslRcvToneSelectionNumOfBytes];
-+#ifdef G992_ANNEXC
-+ Boolean isFbmMode;
-+ Boolean isFbmsOLMode;
-+ long xmtToRcvPathDelay;
-+#endif
-+#if defined(T1P413) && defined(XMT_RACT2_FOR_ADI_COMPATIBILITY)
-+ uchar t1p413RAckModeUsed;
-+ uchar t1p413RAckModeCounter;
-+#endif
-+#ifdef G992P1_ANNEX_B
-+ uchar badSNR2RetrainCounter;
-+#endif
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+ short marginTweakExtraPowerQ4dB;
-+ char marginTweakTableQ4dB[kDslMarginTweakNumOfTones];
-+#endif
-+#ifdef G992P2_PROFILE
-+ G992p2ProfileVarsStruct* profileVarsPtr;
-+#endif
-+#ifdef TDC_IOP_FIX_SEIMENS_TI
-+ char t1p413RetrainCounter; /* 0: no retrain needed; 1: force to T1.413 mode and retrain after R-MSG1; 2: 2nd T1.413 session, go to showtime */
-+#endif
-+#ifdef ANSI_CACT12_PING_PONG
-+ char t1p413SkipToneIndex; /* to alternate between CAct1 and CAct2 detection */
-+#endif
-+ } dslConnectionSetupStruct;
-+
-+#ifdef ADSL_FRAMER
-+#include "MuxFramer.gh"
-+#endif
-+
-+#ifdef ATM
-+#include "SoftAtm.gh"
-+#endif
-+
-+#ifdef DSL_PACKET
-+#include "DslPacket.gh"
-+#endif
-+
-+#ifdef G997_1_FRAMER
-+#include "G997.gh"
-+#ifdef G992P3
-+#include "G992p3OvhMsg.gh"
-+#endif
-+#endif
-+
-+#ifdef ADSL_MIB
-+#include "AdslMib.gh"
-+#endif
-+
-+#ifndef HOST_ONLY
-+#ifdef T1P413
-+#include "T1p413Main.gh"
-+#endif
-+
-+#ifdef G994P1
-+#include "G994p1Main.gh"
-+#endif
-+
-+#ifdef G992
-+#include "G992Main.gh"
-+#endif
-+
-+#include "SoftDslSampleBuffers.gh"
-+#endif
-+
-+typedef struct __dslSlowVarsStruct
-+ {
-+ int tmp;
-+ }
-+ dslSlowVarsStruct;
-+
-+typedef struct __dslVarsStruct
-+ {
-+ bitMap setup;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+ dslDriverCallbackType driverCallback;
-+
-+ rcvHandlerType rcvHandlerPtr;
-+ xmtHandlerType xmtHandlerPtr;
-+
-+#ifndef ADSLCORE_ONLY
-+ dslCommandHandlerType adslCoreCommandHandlerPtr;
-+#endif
-+ dslCommandHandlerType dataPumpCommandHandlerPtr;
-+
-+ dslStatusHandlerType internalStatusHandlerPtr;
-+ dslStatusHandlerType externalStatusHandlerPtr;
-+#ifndef ADSLCORE_ONLY
-+ dslStatusHandlerType externalLinkLayerStatusHandlerPtr;
-+#endif
-+
-+ dslDirectionType direction;
-+ dslConnectionSetupStruct connectionSetup;
-+
-+#ifdef NEC_NSIF_WORKAROUND
-+ uchar G994NsStatus;
-+ uchar G994NsFailCounter;
-+#endif
-+
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+
-+ linkLayerFunctions LinkLayerFunctions;
-+ dslSlowVarsStruct *dslSlowVars;
-+
-+#ifdef DSL_FRAME_FUNCTIONS
-+ dslFrameFunctions DslFrameFunctions;
-+#endif
-+ ulong refData;
-+ ulong execTime;
-+ int currRcvNSamps;
-+
-+#ifndef HOST_ONLY
-+ DslSampleBuffersStruct sampleBuffersVars;
-+
-+#ifdef G992P2_PROFILE
-+ G992p2ProfileVarsStruct G992p2ProfileVars;
-+#endif
-+
-+#ifdef ADSL_FRAMER
-+ muxFramerVarsStruct muxFramerVars;
-+#endif
-+#endif /* HOST_ONLY */
-+
-+#ifdef DSL_LINKLAYER
-+ union
-+ {
-+#ifdef ATM
-+ atmVarsStruct atmVars;
-+#endif
-+#ifdef DSL_PACKET
-+ dslPacketVarsStruct dslPacketVars;
-+#endif
-+ } linkLayerVars;
-+#endif
-+
-+#ifdef G997_1_FRAMER
-+ g997VarsStruct G997Vars;
-+#ifdef G992P3
-+ g992p3OvhMsgVarsStruct G992p3OvhMsgVars;
-+#endif
-+#endif
-+
-+#ifdef ADSL_MIB
-+ adslMibVarsStruct adslMibVars;
-+#endif
-+
-+#ifndef HOST_ONLY
-+ union
-+ {
-+#ifdef T1P413
-+ T1p413VarsStruct T1p413Vars;
-+#endif
-+#ifdef G994P1
-+ G994p1VarsStruct G994p1Vars;
-+#endif
-+#ifdef G992
-+ G992VarsStruct G992Vars;
-+#endif
-+ } physicalLayerVars;
-+ union
-+ {
-+#ifdef G992
-+ G992ScratchVarsStruct G992ScratchVars;
-+#endif
-+#if defined(ADSL_FRAMER) && defined(SHARE_MUX_FRAMER_VARS)
-+ muxFramerSharedVarsStruct muxFramerSharedVars;
-+#endif
-+ } scratchVars;
-+#endif /* HOST_ONLY */
-+
-+ }
-+ dslVarsStruct;
-+
-+#ifndef GLOBAL_PTR_BIAS
-+#define gDslGlobalVarPtr ((struct __dslVarsStruct *)gDslVars)
-+#define gDslGlobalSlowVarPtr (gDslGlobalVarPtr->dslSlowVars)
-+#else
-+#define gDslGlobalVarPtr ((struct __dslVarsStruct *) (void*)((uchar*)(gDslVars) - GLOBAL_PTR_BIAS))
-+#define gDslGlobalSlowVarPtr ((struct __dslSlowVarsStruct *) (void*)((uchar*)(gDslGlobalVarPtr->dslSlowVars) - GLOBAL_PTR_BIAS))
-+#endif
-+
-+#define gDslSampleBuffersVars (gDslGlobalVarPtr->sampleBuffersVars)
-+
-+#define gDslMuxFramerVars (gDslGlobalVarPtr->muxFramerVars)
-+#define gDslMuxFramerSharedVars (gDslGlobalVarPtr->scratchVars.muxFramerSharedVars)
-+#define gDslLinkLayerVars (gDslGlobalVarPtr->linkLayerVars)
-+#define gDslAtmVars (gDslGlobalVarPtr->linkLayerVars.atmVars)
-+#define gDslPacketVars (gDslGlobalVarPtr->linkLayerVars.dslPacketVars)
-+#define gG997Vars (gDslGlobalVarPtr->G997Vars)
-+
-+#ifdef G992P3
-+#define gG992p3OvhMsgVars (gDslGlobalVarPtr->G992p3OvhMsgVars)
-+#endif
-+
-+#define gAdslMibVars (gDslGlobalVarPtr->adslMibVars)
-+
-+#define gT1p413Vars (gDslGlobalVarPtr->physicalLayerVars.T1p413Vars)
-+#define gG994p1Vars (gDslGlobalVarPtr->physicalLayerVars.G994p1Vars)
-+#define gG992Vars (gDslGlobalVarPtr->physicalLayerVars.G992Vars)
-+#define gG992p2ProfileVars (gDslGlobalVarPtr->G992p2ProfileVars)
-+
-+#define gG992ScratchVars (gDslGlobalVarPtr->scratchVars.G992ScratchVars)
-+
-+#ifndef gEyeHandlerPtr
-+#define gEyeHandlerPtr (gDslGlobalVarPtr->eyeHandlerPtr)
-+#endif
-+
-+#ifndef gLogHandlerPtr
-+#define gLogHandlerPtr (gDslGlobalVarPtr->logHandlerPtr)
-+#endif
-+
-+#ifdef VP_SIMULATOR
-+#define gDriverCallback(x) (gDslGlobalVarPtr->driverCallback)(x)
-+#else
-+#define gDriverCallback(x)
-+#endif
-+
-+/*
-+**
-+** Frame functions callouts
-+**
-+*/
-+
-+#define gDslFrameFunc (gDslGlobalVarPtr->DslFrameFunctions)
-+
-+#define DslFrameBufferGetLength(gDslVars, fb) \
-+ gDslFrameFunc.__DslFrameBufferGetLength(fb)
-+
-+#define DslFrameBufferGetAddress(gDslVars, fb) \
-+ gDslFrameFunc.__DslFrameBufferGetAddress(fb)
-+
-+#define DslFrameBufferSetLength(gDslVars, fb, l) \
-+ gDslFrameFunc.__DslFrameBufferSetLength(fb, l)
-+
-+#define DslFrameBufferSetAddress(gDslVars, fb, p) \
-+ gDslFrameFunc.__DslFrameBufferSetAddress(fb, p)
-+
-+#define DslFrameInit(gDslVars, f) \
-+ gDslFrameFunc.__DslFrameInit(f)
-+
-+#define DslFrameGetLength(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetLength(pFrame)
-+
-+#define DslFrameGetBufCnt(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetBufCnt(pFrame)
-+
-+#define DslFrameGetFirstBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetFirstBuffer(pFrame)
-+
-+#define DslFrameGetNextBuffer(gDslVars, pFrBuffer) \
-+ gDslFrameFunc.__DslFrameGetNextBuffer(pFrBuffer)
-+
-+#define DslFrameSetNextBuffer(gDslVars, pFrBuf, pFrBufNext) \
-+ gDslFrameFunc.__DslFrameSetNextBuffer(pFrBuf, pFrBufNext)
-+
-+#define DslFrameGetLastBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetLastBuffer(pFrame)
-+
-+#define DslFrameGetLinkFieldAddress(gDslVars, f) \
-+ gDslFrameFunc.__DslFrameGetLinkFieldAddress(f)
-+
-+#define DslFrameGetFrameAddressFromLink(gDslVars, lnk) \
-+ gDslFrameFunc.__DslFrameGetFrameAddressFromLink(lnk)
-+
-+
-+#define DslFrameGetOobInfo(gDslVars, f, pOobInfo) \
-+ gDslFrameFunc.__DslFrameGetOobInfo(f, pOobInfo)
-+
-+#define DslFrameSetOobInfo(gDslVars, f, pOobInfo) \
-+ gDslFrameFunc.__DslFrameSetOobInfo(f, pOobInfo)
-+
-+
-+#define DslFrameEnqueBufferAtBack(gDslVars, f, b) \
-+ gDslFrameFunc.__DslFrameEnqueBufferAtBack(f, b)
-+
-+#define DslFrameEnqueFrameAtBack(gDslVars, fMain, f) \
-+ gDslFrameFunc.__DslFrameEnqueFrameAtBack(fMain, f)
-+
-+#define DslFrameEnqueBufferAtFront(gDslVars, f, b) \
-+ gDslFrameFunc.__DslFrameEnqueBufferAtFront(f, b)
-+
-+#define DslFrameEnqueFrameAtFront(gDslVars, fMain, f) \
-+ gDslFrameFunc.__DslFrameEnqueFrameAtFront(fMain, f)
-+
-+#define DslFrameDequeBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameDequeBuffer(pFrame)
-+
-+#define DslFrameAllocMemForFrames(gDslVars, frameNum) \
-+ gDslFrameFunc.__DslFrameAllocMemForFrames(frameNum)
-+
-+#define DslFrameFreeMemForFrames(gDslVars, hMem) \
-+ gDslFrameFunc.__DslFrameFreeMemForFrames(hMem)
-+
-+#define DslFrameAllocFrame(gDslVars, handle) \
-+ gDslFrameFunc.__DslFrameAllocFrame(handle)
-+
-+#define DslFrameFreeFrame(gDslVars, handle, pFrame) \
-+ gDslFrameFunc.__DslFrameFreeFrame(handle, pFrame)
-+
-+#define DslFrameAllocMemForBuffers(gDslVars, ppMemPool, bufNum, memSize) \
-+ gDslFrameFunc.__DslFrameAllocMemForBuffers(ppMemPool, bufNum, memSize)
-+
-+#define DslFrameFreeMemForBuffers(gDslVars, hMem, memSize, pMemPool) \
-+ gDslFrameFunc.__DslFrameFreeMemForBuffers(hMem, memSize, pMemPool)
-+
-+#define DslFrameAllocBuffer(gDslVars, handle, pMem, length) \
-+ gDslFrameFunc.__DslFrameAllocBuffer(handle, pMem, length)
-+
-+#define DslFrameFreeBuffer(gDslVars, handle, pBuf) \
-+ gDslFrameFunc.__DslFrameFreeBuffer(handle, pBuf)
-+
-+#define DslFrame2Id(gDslVars, handle, pFrame) \
-+ gDslFrameFunc.__DslFrame2Id(handle, pFrame)
-+
-+#define DslFrameId2Frame(gDslVars, handle, frameId) \
-+ gDslFrameFunc.__DslFrameId2Frame (handle, frameId)
-+
-+
-+#endif /* SoftDslGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftDsl.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,2920 @@
-+/****************************************************************************
-+ *
-+ * SoftDsl.h
-+ *
-+ *
-+ * Description:
-+ * This file contains the exported interface for SoftDsl.c
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.275 $
-+ *
-+ * $Id: SoftDsl.h,v 1.275 2005/04/28 22:55:36 ilyas Exp $
-+ *
-+ * $Log: SoftDsl.h,v $
-+ * Revision 1.275 2005/04/28 22:55:36 ilyas
-+ * Cleaned up kDslG992RunAnnexaP3ModeInAnnexaP5, kG992EnableAnnexM and kDslAtuChangeTxFilterRequest definitions
-+ *
-+ * Revision 1.274 2005/04/27 20:57:32 yongbing
-+ * Implement 32 frequency break points for TSSI, PR 30211
-+ *
-+ * Revision 1.273 2005/04/02 03:27:52 kdu
-+ * PR30236: Define kDslEnableRoundUpDSLoopAttn, this is shared with kDslCentilliumCRCWorkAroundEnabled.
-+ *
-+ * Revision 1.272 2005/04/01 21:56:39 ilyas
-+ * Added more test commands definitions
-+ *
-+ * Revision 1.271 2005/02/11 05:03:57 ilyas
-+ * Added support for DslOs
-+ *
-+ * Revision 1.270 2005/02/11 03:33:22 lke
-+ * Support 2X, 4X, and 8X spectrum in ANNEX_I DS
-+ *
-+ * Revision 1.269 2005/01/08 00:11:58 ilyas
-+ * Added definition for AnnexL status
-+ *
-+ * Revision 1.268 2004/12/18 00:52:35 mprahlad
-+ * Add Dig US Pwr cutback status
-+ *
-+ * Revision 1.267 2004/11/08 22:21:38 ytan
-+ * init swap state after retrain
-+ *
-+ * Revision 1.266 2004/11/05 21:16:50 ilyas
-+ * Added support for pwmSyncClock
-+ *
-+ * Revision 1.265 2004/10/28 20:05:17 gsyu
-+ * Fixed compilation errors for simulation targets
-+ *
-+ * Revision 1.264 2004/10/23 00:16:35 nino
-+ * Added kDslHardwareSetRcvAGC status to set absolute rcv agc gain.
-+ *
-+ * Revision 1.263 2004/10/22 21:21:06 ilyas
-+ * Fixed bit definition overlap in demodCapabilities
-+ *
-+ * Revision 1.262 2004/10/20 00:43:20 gsyu
-+ * Added constants to support new xmt sample buffer control scheme
-+ *
-+ * Revision 1.261 2004/10/12 01:09:28 nino
-+ * Remove kDslHardwareEnablePwmSyncClk and kDslHardwareSetPwmSyncClkFreq
-+ * status definitions. Add kDslEnablePwmSyncClk and kDslSetPwmSyncClkFreq
-+ * command definitions.
-+ *
-+ * Revision 1.260 2004/10/11 20:21:26 nino
-+ * Added kDslHardwareEnablePwmSyncClk and kDslHardwareSetPwmSynClkFreq hardware statuses.
-+ *
-+ * Revision 1.259 2004/10/07 19:17:29 nino
-+ * Added kDslHardwareGetRcvAGC status.
-+ *
-+ * Revision 1.258 2004/10/02 00:17:14 nino
-+ * Added kDslHardwareAGCSetPga2 and kDslSetPilotEyeDisplay status definitions.
-+ *
-+ * Revision 1.257 2004/08/27 01:00:30 mprahlad
-+ *
-+ * Keep kDslAtuChangeTxFilterRequest defined by default so ADSL1 only targets can
-+ * build
-+ *
-+ * Revision 1.256 2004/08/20 19:00:34 ilyas
-+ * Added power management code for 2+
-+ *
-+ * Revision 1.255 2004/08/17 23:18:25 kdu
-+ * Merged interop changes for TDC lab from a023e9.
-+ *
-+ * Revision 1.254 2004/07/22 00:56:03 yongbing
-+ * Add ADSL2 Annex B modulation definition
-+ *
-+ * Revision 1.253 2004/07/16 22:23:28 nino
-+ * - Defined macros to extract subcarrier and supported set information
-+ * for tssi. Subcarrier and suported set indicator is packed into
-+ * dsSubcarrier index array.
-+ *
-+ * Revision 1.252 2004/07/01 00:11:22 nino
-+ * Added preliminary code for debugDataHandler (inside of #if DEBUG_DATA_HANDLER).
-+ *
-+ * Revision 1.251 2004/06/24 03:08:39 ilyas
-+ * Added GFC mapping control for ATM bonding
-+ *
-+ * Revision 1.250 2004/06/23 00:03:20 khp
-+ * - shorten self test result register length to 1 (satisfied requirement
-+ * at DT, no known requirement anywhere else)
-+ *
-+ * Revision 1.249 2004/06/15 20:18:33 ilyas
-+ * Made D uchar again for compatibility with older ADSl drivers that use this structure. ADSL driver will rely on G992p3 parameters for large D
-+ *
-+ * Revision 1.248 2004/06/12 00:26:03 gsyu
-+ * Added constants for AnnexM
-+ *
-+ * Revision 1.247 2004/06/10 18:53:24 yjchen
-+ * add large D support
-+ *
-+ * Revision 1.246 2004/06/04 01:55:00 linyin
-+ * Add a constant for SRA enable/disable
-+ *
-+ * Revision 1.245 2004/05/19 23:22:23 linyin
-+ * Support L2
-+ *
-+ * Revision 1.244 2004/05/15 03:04:58 ilyas
-+ * Added L3 test definition
-+ *
-+ * Revision 1.243 2004/05/14 03:04:38 ilyas
-+ * Fixed structure name typo
-+ *
-+ * Revision 1.242 2004/05/14 02:01:01 ilyas
-+ * Fixed structure name typo
-+ *
-+ * Revision 1.241 2004/05/14 01:21:49 nino
-+ * Added kDslSignalAttenuation, kDslAttainableNetDataRate kDslHLinScale constant definitions.
-+ *
-+ * Revision 1.240 2004/05/13 19:07:58 ilyas
-+ * Added new statuses for ADSL2
-+ *
-+ * Revision 1.239 2004/05/01 01:09:51 ilyas
-+ * Added power management command and statuses
-+ *
-+ * Revision 1.238 2004/04/23 22:50:38 ilyas
-+ * Implemented double buffering to ensure G.997 HDLC frame (OvhMsg) is continuous
-+ *
-+ * Revision 1.237 2004/03/31 18:57:39 ilyas
-+ * Added drop on data error capability control
-+ *
-+ * Revision 1.236 2004/03/30 03:11:30 ilyas
-+ * Added #ifdef for CFE build
-+ *
-+ * Revision 1.235 2004/03/29 23:06:39 ilyas
-+ * Added status for BG table update
-+ *
-+ * Revision 1.234 2004/03/17 02:49:49 ilyas
-+ * Turn off ATM bit reversal for Alcatel DSLAM only
-+ *
-+ * Revision 1.233 2004/03/11 03:09:48 mprahlad
-+ * Add test mode for afeloopback test
-+ *
-+ * Revision 1.232 2004/03/10 23:15:53 ilyas
-+ * Added ETSI modem support
-+ *
-+ * Revision 1.231 2004/03/04 19:28:14 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.230 2004/02/28 00:06:21 ilyas
-+ * Added OLR message definitions for ADSL2+
-+ *
-+ * Revision 1.229 2004/02/13 03:21:15 mprahlad
-+ * define kDslAturHwAgcMaxGain correctly for 6348
-+ *
-+ * Revision 1.228 2004/02/09 05:06:17 yongbing
-+ * Add ADSL2 bit swap function
-+ *
-+ * Revision 1.227 2004/02/04 02:08:19 linyin
-+ * remove the redefined kG992p5AnnexA
-+ *
-+ * Revision 1.226 2004/02/04 01:41:48 linyin
-+ * Add some variables for G992P5
-+ *
-+ * Revision 1.225 2004/02/03 19:12:22 gsyu
-+ * Added a dedicate structure and constants for G992P5
-+ *
-+ * Revision 1.224 2004/01/24 01:18:34 ytan
-+ * add multi-section swapping flag
-+ *
-+ * Revision 1.223 2004/01/17 00:21:48 ilyas
-+ * Added commands and statuses for OLR
-+ *
-+ * Revision 1.222 2004/01/13 19:12:37 gsyu
-+ * Added more constants for Double upstream
-+ *
-+ * Revision 1.221 2003/12/23 21:19:04 mprahlad
-+ * Define BCM6348_TEMP_MOVE_TO_LMEM to FAST_TEXT for 6348 targets - this is for
-+ * ADSL2/AnnexA multimode builds - move a few functions to Lmem for now to avoid
-+ * changes for swap on 6348.
-+ *
-+ * Revision 1.220 2003/12/19 21:21:53 ilyas
-+ * Added dying gasp support for ADSL2
-+ *
-+ * Revision 1.219 2003/12/05 02:09:51 mprahlad
-+ * Leave the AnalogEC defs in - saves ifdef-ing all uses of these defines.
-+ * Include Bcm6345_To_Bcm6348.h - to be able to pick up macros for the
-+ * transition
-+ *
-+ * Revision 1.218 2003/12/04 02:10:58 linyin
-+ * Redefine some constants for supporting different pilot and TTR
-+ *
-+ * Revision 1.217 2003/12/03 02:24:39 gsyu
-+ * Reverse previous check in for Double Upstream demo
-+ *
-+ * Revision 1.215 2003/11/20 00:58:47 yongbing
-+ * Merge ADSL2 functionalities into Annex A branch
-+ *
-+ * Revision 1.214 2003/11/06 00:35:06 nino
-+ * Added kDslWriteAfeRegCmd and kDslReadAfeRegCmd commands.
-+ *
-+ * Revision 1.213 2003/11/05 21:04:23 ilyas
-+ * Added more codes for LOG data
-+ *
-+ * Revision 1.212 2003/10/22 00:51:52 yjchen
-+ * define constant for quiet line noise
-+ *
-+ * Revision 1.211 2003/10/20 22:08:57 nino
-+ * Added kDslSetRcvGainCmd and kDslBypassRcvHpfCmd debug commands.
-+ *
-+ * Revision 1.210 2003/10/18 00:04:59 yjchen
-+ * define constants for G992P3 diagnostic mode channel response
-+ *
-+ * Revision 1.209 2003/10/17 22:41:29 yongbing
-+ * Add INP message support
-+ *
-+ * Revision 1.208 2003/10/16 00:06:09 uid1249
-+ * Moved G.994 definitions from G.994p1MainTypes.h
-+ *
-+ * Revision 1.207 2003/10/15 20:45:11 linyin
-+ * Add some constants for support Revision 2
-+ *
-+ * Revision 1.206 2003/10/14 22:04:02 ilyas
-+ * Added Nino's AFE statuses for 6348
-+ *
-+ * Revision 1.205 2003/10/10 18:49:26 gsyu
-+ * Added test modes to workaround the clock domain crossing bug, PR18038
-+ *
-+ * Revision 1.204 2003/09/30 19:27:46 mprahlad
-+ * ifdef AnalogEC definies with #ifndef BCM6348_SRC
-+ *
-+ * Revision 1.203 2003/09/26 19:36:34 linyin
-+ * Add annexi constant and vars
-+ *
-+ * Revision 1.202 2003/09/25 20:16:13 yjchen
-+ * remove featureNTR definition
-+ *
-+ * Revision 1.201 2003/09/08 20:29:51 ilyas
-+ * Added test commands for chip regression tests
-+ *
-+ * Revision 1.200 2003/08/26 00:58:14 ilyas
-+ * Added I432 reset command (for header compression)
-+ * Fixed SoftDsl time (for I432 header compression)
-+ *
-+ * Revision 1.199 2003/08/26 00:37:29 ilyas
-+ * #ifdef'ed DslFrameFunctions in dslCommand structure to save space
-+ *
-+ * Revision 1.198 2003/08/22 22:45:00 liang
-+ * Change the NF field in G992CodingParams from uchar to ushort to support K=256 (dataRate=255*32kbps) in fast path.
-+ *
-+ * Revision 1.197 2003/08/21 21:19:05 ilyas
-+ * Changed dataPumpCapabilities structure for G992P3
-+ *
-+ * Revision 1.196 2003/08/12 22:44:28 khp
-+ * - for Haixiang: added kDslTestMarginTweak command and marginTweakSpec
-+ *
-+ * Revision 1.195 2003/07/24 17:28:16 ovandewi
-+ * added Tx filter change request code
-+ *
-+ * Revision 1.194 2003/07/24 15:48:55 yongbing
-+ * Reduce TSSI buffer size to avoid crash at the beginning of G.994.1. Need to find out why
-+ *
-+ * Revision 1.193 2003/07/19 07:11:47 nino
-+ * Revert back to version 1.191.
-+ *
-+ * Revision 1.191 2003/07/17 21:25:25 yongbing
-+ * Add support for READSL2 and TSSI
-+ *
-+ * Revision 1.190 2003/07/14 19:42:33 yjchen
-+ * add constants for G992P3
-+ *
-+ * Revision 1.189 2003/07/10 23:07:11 liang
-+ * Add demodCapability bit to minimize showtime ATUC xmt power through b&g table.
-+ *
-+ * Revision 1.188 2003/07/08 22:18:50 liang
-+ * Added demodCapability bit for G.994.1 Annex A multimode operation.
-+ *
-+ * Revision 1.187 2003/07/07 23:24:43 ilyas
-+ * Added G.dmt.bis definitions
-+ *
-+ * Revision 1.186 2003/06/25 02:44:02 liang
-+ * Added demod capability bit kDslUE9000ADI918FECFixEnabled.
-+ * Added back kDslHWEnableAnalogECUpdate & kDslHWEnableAnalogEC for backward compatibility (annex A).
-+ *
-+ * Revision 1.185 2003/06/18 01:39:19 ilyas
-+ * Added AFE test commands. Add #defines for driver's builds
-+ *
-+ * Revision 1.184 2003/06/06 23:58:09 ilyas
-+ * Added command and status for standalone AFE tests
-+ *
-+ * Revision 1.183 2003/05/29 21:09:32 nino
-+ * - kDslHWEnableAnalogECUpdate define replaced with kDslHWSetDigitalEcUpdateMode
-+ * - kDslHWEnableAnalogEC define replaced with kDslHWDisableDigitalECUpdate
-+ *
-+ * Revision 1.182 2003/04/15 22:08:15 liang
-+ * Changed one of the demodCapability bit name from last checkin.
-+ *
-+ * Revision 1.181 2003/04/13 19:25:54 liang
-+ * Added three more demodCapability bits.
-+ *
-+ * Revision 1.180 2003/04/02 02:09:17 liang
-+ * Added demodCapability bit for ADI low rate option fix disable.
-+ *
-+ * Revision 1.179 2003/03/18 18:22:06 yongbing
-+ * Use 32 tap TEQ for Annex I
-+ *
-+ * Revision 1.178 2003/03/06 00:58:07 ilyas
-+ * Added SetStausBuffer command
-+ *
-+ * Revision 1.177 2003/02/25 00:46:26 ilyas
-+ * Added T1.413 EOC vendor ID
-+ *
-+ * Revision 1.176 2003/02/21 23:30:54 ilyas
-+ * Added Xmtgain command framing mode status and T1413VendorId parameters
-+ *
-+ * Revision 1.175 2003/02/07 22:13:55 liang
-+ * Add demodCapabilities bits for sub-sample alignment and higher T1.413 level (used internally only).
-+ *
-+ * Revision 1.174 2003/01/23 02:54:07 liang
-+ * Added demod capability bit for bitswap enable.
-+ *
-+ * Revision 1.173 2002/12/13 18:36:33 yongbing
-+ * Add support for G.992.2 Annex C
-+ *
-+ * Revision 1.172 2002/12/10 23:27:12 ilyas
-+ * Extended dslException parameter structure to allow printout from DslDiags
-+ *
-+ * Revision 1.171 2002/12/06 02:10:19 liang
-+ * Moved the T1.413 RAck1/RAck2 switching variables to connection setup structure.
-+ * Added/Modified the training progress codes for T1.413 RAck1/RAck2 and upstream 2x IFFT disable.
-+ *
-+ * Revision 1.170 2002/11/11 00:20:05 liang
-+ * Add demod capability constant for internally disabling upstream 2x IFFT in T1.413 mode.
-+ *
-+ * Revision 1.169 2002/11/06 03:46:19 liang
-+ * Add training progress code for upstream 2x IFFT disable.
-+ *
-+ * Revision 1.168 2002/11/01 01:41:06 ilyas
-+ * Added flags for Centillium 4103 workarround
-+ *
-+ * Revision 1.167 2002/10/26 01:26:11 gsyu
-+ * Move SoftDslLineHandler from SDRAM to LMEM
-+ *
-+ * Revision 1.166 2002/10/20 18:56:20 khp
-+ * - for linyin
-+ * - #ifdef NEC_NSIF_WORKAROUND:
-+ * - add macros to extract NSIF status and fail counter vars
-+ *
-+ * Revision 1.165 2002/10/14 05:24:35 liang
-+ * Add training status code to request alternate xmt filter (for Samsung 6-port ADI918 DSLAMs) to meet KT 2km spec.
-+ *
-+ * Revision 1.164 2002/10/08 21:44:50 ilyas
-+ * Fixed EOC stuffing byte to indicate "no synchronization" action
-+ *
-+ * Revision 1.163 2002/10/03 19:34:24 ilyas
-+ * Added size for EOC serial number register
-+ *
-+ * Revision 1.162 2002/09/28 02:42:27 yongbing
-+ * Add retrain in T1.413 with R-Ack1 tone
-+ *
-+ * Revision 1.161 2002/09/28 01:23:35 gsyu
-+ * Reverse us2xifft change so that we can install new us2xifft on the tree
-+ *
-+ * Revision 1.160 2002/09/26 23:30:48 yongbing
-+ * Add synch symbol detection in Showtime
-+ *
-+ * Revision 1.159 2002/09/20 23:47:52 khp
-+ * - for gsyu: enable 2X IFFT for Annex A (XMT_FFT_SIZE_2X)
-+ *
-+ * Revision 1.158 2002/09/14 03:26:39 ilyas
-+ * Changed far-end RDI reporting
-+ *
-+ * Revision 1.157 2002/09/13 21:10:54 ilyas
-+ * Added reporting of remote modem LOS and RDI.
-+ * Moved G992CodingParams definition to SoftDsl.h
-+ *
-+ * Revision 1.156 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.155 2002/09/09 21:31:30 linyin
-+ * Add two constant to support long reach
-+ *
-+ * Revision 1.154 2002/09/07 01:31:51 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.153 2002/09/04 22:36:14 mprahlad
-+ * defines for non standard info added
-+ *
-+ * Revision 1.152 2002/08/02 21:59:09 liang
-+ * Enable G.992.2 carrierInfo in capabitilities when G.992.1 annex A is used for G.992.2.
-+ *
-+ * Revision 1.151 2002/07/29 20:01:03 ilyas
-+ * Added command for Atm VC map table change
-+ *
-+ * Revision 1.150 2002/07/18 22:30:47 liang
-+ * Add xmt power and power cutback related constants.
-+ *
-+ * Revision 1.149 2002/07/11 01:30:58 ilyas
-+ * Changed status for ShowtimeMargin reporting
-+ *
-+ * Revision 1.148 2002/07/09 19:19:09 ilyas
-+ * Added status parameters for ShowtimeSNRMargin info and command to filter
-+ * out SNR margin data
-+ *
-+ * Revision 1.147 2002/06/27 21:50:24 liang
-+ * Added test command related demodCapabilities bits.
-+ *
-+ * Revision 1.146 2002/06/26 21:29:00 liang
-+ * Added dsl test cmd structure and showtime margin connection info status.
-+ *
-+ * Revision 1.145 2002/06/15 05:15:51 ilyas
-+ * Added definitions for Ping, Dying Gasp and other test commands
-+ *
-+ * Revision 1.144 2002/05/30 19:55:15 ilyas
-+ * Added status for ADSL PHY MIPS exception
-+ * Changed conflicting definition for higher rates (S=1/2)
-+ *
-+ * Revision 1.143 2002/05/21 23:41:07 yongbing
-+ * First check-in of Annex C S=1/2 codes
-+ *
-+ * Revision 1.142 2002/04/29 22:25:09 georgep
-+ * Merge from branch annexC_demo - add status message constants
-+ *
-+ * Revision 1.141 2002/04/18 19:00:35 ilyas
-+ * Added include file for builds in CommEngine environment
-+ *
-+ * Revision 1.140 2002/04/18 00:18:36 yongbing
-+ * Add detailed timeout error messages
-+ *
-+ * Revision 1.139 2002/04/02 10:03:18 ilyas
-+ * Merged BERT from AnnexA branch
-+ *
-+ * Revision 1.138 2002/03/26 01:42:29 ilyas
-+ * Added timeout message constants for annex C
-+ *
-+ * Revision 1.137 2002/03/22 19:39:22 yongbing
-+ * Modify for co-exist of G994P1 and T1P413
-+ *
-+ * Revision 1.136 2002/03/22 01:19:40 ilyas
-+ * Add status message constants for total FEXT Bits, NEXT bits
-+ *
-+ * Revision 1.135 2002/03/10 22:32:24 liang
-+ * Added report constants for LOS recovery and timing tone index.
-+ *
-+ * Revision 1.134 2002/03/07 22:06:32 georgep
-+ * Replace ifdef G992P1 with G992P1_ANNEX_A for annex A variables
-+ *
-+ * Revision 1.133 2002/02/16 01:08:18 georgep
-+ * Add log constant for showtime mse
-+ *
-+ * Revision 1.132 2002/02/08 04:36:27 ilyas
-+ * Added commands for LOG file and fixed Idle mode pointer update
-+ *
-+ * Revision 1.131 2002/01/24 20:21:30 georgep
-+ * Add logging defines, remove fast retrain defines
-+ *
-+ * Revision 1.130 2002/01/19 23:59:17 ilyas
-+ * Added support for LOG and eye data to ADSL core target
-+ *
-+ * Revision 1.129 2002/01/16 23:43:54 liang
-+ * Remove the carriage return character from last checkin.
-+ *
-+ * Revision 1.128 2002/01/15 22:27:13 ilyas
-+ * Added command for ADSL loopback
-+ *
-+ * Revision 1.127 2002/01/10 07:18:22 ilyas
-+ * Added status for printf (mainly for ADSL core debugging)
-+ *
-+ * Revision 1.126 2001/12/21 22:45:34 ilyas
-+ * Added support for ADSL MIB data object
-+ *
-+ * Revision 1.125 2001/12/13 02:24:22 ilyas
-+ * Added G997 (Clear EOC and G997 framer) support
-+ *
-+ * Revision 1.124 2001/11/30 05:56:31 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.123 2001/11/15 19:01:07 yongbing
-+ * Modify only T1.413 part to the top of tree based on AnnexBDevelopment branch
-+ *
-+ * Revision 1.122 2001/10/19 00:12:07 ilyas
-+ * Added support for frame oriented (no ATM) data link layer
-+ *
-+ * Revision 1.121 2001/10/09 22:35:13 ilyas
-+ * Added more ATM statistics and OAM support
-+ *
-+ * Revision 1.105.2.20 2001/11/27 02:32:03 liang
-+ * Combine vendor ID, serial #, and version number into SoftModemVersionNumber.c.
-+ *
-+ * Revision 1.105.2.19 2001/11/21 01:29:14 georgep
-+ * Add a status message define for annexC
-+ *
-+ * Revision 1.105.2.18 2001/11/08 23:26:28 yongbing
-+ * Add carrier selection function for Annex A and B
-+ *
-+ * Revision 1.105.2.17 2001/11/07 22:55:30 liang
-+ * Report G992 rcv msg CRC error as what it is instead of time out.
-+ *
-+ * Revision 1.105.2.16 2001/11/05 19:56:21 liang
-+ * Add DC offset info code.
-+ *
-+ * Revision 1.105.2.15 2001/10/16 00:47:16 yongbing
-+ * Add return-to-T1p413 starting point if in error
-+ *
-+ * Revision 1.105.2.14 2001/10/15 23:14:01 yjchen
-+ * remove ADSL_SINGLE_SYMBOL_BLOCK
-+ *
-+ * Revision 1.105.2.13 2001/10/12 18:07:16 yongbing
-+ * Add support for T1.413
-+ *
-+ * Revision 1.105.2.12 2001/10/04 00:23:52 liang
-+ * Add connection info constants for TEQ coef and PSD.
-+ *
-+ * Revision 1.105.2.11 2001/10/03 01:44:01 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.105.2.10 2001/09/28 22:10:04 liang
-+ * Add G994 exchange message status reports.
-+ *
-+ * Revision 1.105.2.9 2001/09/26 18:08:21 georgep
-+ * Send status error message in case features field is not setup properly
-+ *
-+ * Revision 1.105.2.8 2001/09/05 01:58:13 georgep
-+ * Added status message for annexC measured delay
-+ *
-+ * Revision 1.105.2.7 2001/08/29 00:37:52 georgep
-+ * Add log constants for annexC
-+ *
-+ * Revision 1.105.2.6 2001/08/18 00:01:34 georgep
-+ * Add constants for annexC
-+ *
-+ * Revision 1.105.2.5 2001/08/08 17:33:28 yongbing
-+ * Merge with tag SoftDsl_2_17
-+ *
-+ * Revision 1.120 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.119 2001/08/28 03:26:32 ilyas
-+ * Added support for running host and adsl core parts separately ("dual" mode)
-+ *
-+ * Revision 1.118 2001/08/16 02:16:10 khp
-+ * - mark functions with FAST_TEXT to reduce cycle counts for QPROC targets
-+ * (replaces use of LMEM_INSN)
-+ *
-+ * Revision 1.117 2001/06/18 20:06:35 ilyas
-+ * Added forward declaration of dslCommandStruc to avoid gcc warnings
-+ *
-+ * Revision 1.116 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.115 2001/06/01 22:00:33 ilyas
-+ * Changed ATM PHY interface to accomodate UTOPIA needs
-+ *
-+ * Revision 1.114 2001/05/16 06:22:24 liang
-+ * Added status reports for xmt & rcv prefix enable position.
-+ *
-+ * Revision 1.113 2001/05/02 20:34:32 georgep
-+ * Added log constants for snr1 calculation
-+ *
-+ * Revision 1.112 2001/04/25 01:20:11 ilyas
-+ *
-+ * Don't use DSL frame functions if ATM_LAYER is not defined
-+ *
-+ * Revision 1.111 2001/04/17 21:13:00 georgep
-+ * Define status constant kDslHWSetDigitalEcUpdateShift
-+ *
-+ * Revision 1.110 2001/04/16 23:38:36 georgep
-+ * Add HW AGC constants for ATUR
-+ *
-+ * Revision 1.109 2001/04/06 23:44:53 georgep
-+ * Added status constant for setting up digitalEcGainShift
-+ *
-+ * Revision 1.108 2001/03/29 05:58:34 liang
-+ * Replaced the Aware compatibility codes with automatic detection codes.
-+ *
-+ * Revision 1.107 2001/03/25 06:11:22 liang
-+ * Combined separate loop attenuation status for ATUR & ATUC into one status.
-+ * Replace separate hardware AGC info status for ATUR & ATUC into hardware AGC
-+ * request status and hardware AGC obtained status.
-+ * Use store AGC command to save hardware AGC value instead of returning value
-+ * from status report.
-+ *
-+ * Revision 1.106 2001/03/24 00:43:22 liang
-+ * Report more checksum results (NumOfCalls, txSignal, rxSignal & eyeData).
-+ *
-+ * Revision 1.105 2001/03/16 23:57:31 georgep
-+ * Added more loop attenuation reporting status constants
-+ *
-+ * Revision 1.104 2001/03/15 00:22:07 liang
-+ * Back to version 1.101.
-+ *
-+ * Revision 1.103 2001/03/15 00:03:44 yjchen
-+ * use kDslATURHardwareAGCInfo for AltoE14 AGC as well
-+ *
-+ * Revision 1.102 2001/03/14 23:10:56 yjchen
-+ * add defns for AltoE14 AGC
-+ *
-+ * Revision 1.101 2001/03/08 23:31:34 georgep
-+ * Added R, S, D, coding parameters to dslDataPumpCapabilities
-+ *
-+ * Revision 1.100 2001/02/10 03:03:09 ilyas
-+ * Added one more DslFrame function
-+ *
-+ * Revision 1.99 2001/02/09 01:55:27 ilyas
-+ * Added status codes and macros to support printing of AAL packets
-+ *
-+ * Revision 1.98 2001/01/30 23:28:10 georgep
-+ * Added kDslDspControlStatus for handling changes to dsp params
-+ *
-+ * Revision 1.97 2001/01/12 01:17:18 georgep
-+ * Added bit in demodCapabilities for analog echo cancellor
-+ *
-+ * Revision 1.96 2001/01/04 05:51:03 ilyas
-+ * Added more dslStatuses
-+ *
-+ * Revision 1.95 2000/12/21 05:46:07 ilyas
-+ * Added name for struct _dslFrame
-+ *
-+ * Revision 1.94 2000/12/13 22:04:39 liang
-+ * Add Reed-Solomon coding enable bit in demodCapabilities.
-+ *
-+ * Revision 1.93 2000/11/29 20:42:02 liang
-+ * Add defines for SNR & max achivable rate status and DEC enable demodCapabilities bit.
-+ *
-+ * Revision 1.92 2000/09/22 21:55:13 ilyas
-+ * Added support for DSL + Atm physical layer only (I.432) simulations
-+ *
-+ * Revision 1.91 2000/09/10 09:20:53 lkaplan
-+ * Improve interface for sending Eoc messages
-+ *
-+ * Revision 1.90 2000/09/08 19:37:58 lkaplan
-+ * Added code for handling EOC messages
-+ *
-+ * Revision 1.89 2000/09/07 23:02:27 georgep
-+ * Add HarwareAGC Bit to demod Capabilities
-+ *
-+ * Revision 1.88 2000/09/01 00:57:34 georgep
-+ * Added Hardware AGC status defines
-+ *
-+ * Revision 1.87 2000/08/31 19:04:26 liang
-+ * Added external reference for stack size requirement test functions.
-+ *
-+ * Revision 1.86 2000/08/24 23:16:46 liang
-+ * Increased sample block size for noBlock.
-+ *
-+ * Revision 1.85 2000/08/23 18:34:39 ilyas
-+ * Added XxxVcConfigure function
-+ *
-+ * Revision 1.84 2000/08/05 00:25:04 georgep
-+ * Redefine sampling freq constants
-+ *
-+ * Revision 1.83 2000/08/03 14:04:00 liang
-+ * Add hardware time tracking clock error reset code.
-+ *
-+ * Revision 1.82 2000/07/23 20:52:52 ilyas
-+ * Added xxxFrameBufSetAddress() function for ATM framer layers
-+ * Rearranged linkLayer functions in one structure which is passed as a
-+ * parameter to xxxLinkLayerInit() function to be set there
-+ *
-+ * Revision 1.81 2000/07/18 20:03:24 ilyas
-+ * Changed DslFrame functions definitions to macros,
-+ * Removed gDslVars from their parameter list
-+ *
-+ * Revision 1.80 2000/07/17 21:08:15 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.79 2000/06/21 20:38:44 georgep
-+ * Added bit to demodCapabilities for HW_TIME_TRACKING
-+ *
-+ * Revision 1.78 2000/06/19 19:57:55 georgep
-+ * Added constants for logging of HWResampler data
-+ *
-+ * Revision 1.77 2000/06/02 18:57:21 ilyas
-+ * Added support for DSL buffers consisting of many ATM cells
-+ *
-+ * Revision 1.76 2000/05/27 02:19:28 liang
-+ * G992MonitorParams structure is moved here, and Tx/Rx data handler type definitions changed.
-+ *
-+ * Revision 1.75 2000/05/15 18:17:21 liang
-+ * Added statuses for sent and received frames
-+ *
-+ * Revision 1.74 2000/05/14 01:56:38 ilyas
-+ * Added ATM cell printouts
-+ *
-+ * Revision 1.73 2000/05/09 23:00:26 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.72 2000/05/03 18:01:18 georgep
-+ * Removed old function declarations for Eoc/Aoc
-+ *
-+ * Revision 1.71 2000/05/03 03:57:04 ilyas
-+ * Added LOG file support for writing ATM data
-+ *
-+ * Revision 1.70 2000/05/02 00:04:36 liang
-+ * Add showtime monitoring and message exchange info constants.
-+ *
-+ * Revision 1.69 2000/04/28 23:34:20 yongbing
-+ * Add constants for reporting error events in performance monitoring
-+ *
-+ * Revision 1.68 2000/04/21 23:09:04 liang
-+ * Added G992 time out training progress constant.
-+ *
-+ * Revision 1.67 2000/04/19 00:31:47 ilyas
-+ * Added global SoftDsl functions for Vc, added OOB info functions
-+ *
-+ * Revision 1.66 2000/04/18 00:45:31 yongbing
-+ * Add G.DMT new frame structure, define G992P1_NEWFRAME to enable, need ATM layer to work
-+ *
-+ * Revision 1.65 2000/04/15 01:48:34 georgep
-+ * Added T1p413 status constants
-+ *
-+ * Revision 1.64 2000/04/13 08:36:22 yura
-+ * Added SoftDslSetRefData, SoftDslGetRefData functions
-+ *
-+ * Revision 1.63 2000/04/13 05:42:35 georgep
-+ * Added constant for T1p413
-+ *
-+ * Revision 1.62 2000/04/05 21:49:54 liang
-+ * minor change.
-+ *
-+ * Revision 1.61 2000/04/04 04:16:06 liang
-+ * Merged with SoftDsl_0_03 from old tree.
-+ *
-+ * Revision 1.65 2000/04/04 01:47:21 ilyas
-+ * Implemented abstract dslFrame and dslFrameBuffer objects
-+ *
-+ * Revision 1.64 2000/04/01 08:12:10 yura
-+ * Added preliminary revision of the SoftDsl driver architecture
-+ *
-+ * Revision 1.63 2000/04/01 02:55:33 georgep
-+ * New defines for G992p2Profile Structure
-+ *
-+ * Revision 1.62 2000/04/01 00:50:36 yongbing
-+ * Add initial version of new frame structure for full-rate
-+ *
-+ * Revision 1.61 2000/03/24 03:30:45 georgep
-+ * Define new constant kDslUpstreamSamplingFreq
-+ *
-+ * Revision 1.60 2000/03/23 19:51:30 georgep
-+ * Define new features bits for G992p1
-+ *
-+ * Revision 1.59 2000/03/18 01:28:41 georgep
-+ * Changed connectionSetup to include G992p1 Capabilities
-+ *
-+ * Revision 1.58 2000/02/29 01:40:03 georgep
-+ * Changed modulationtype defines to be the same as SPAR1 in G994p1
-+ *
-+ * Revision 1.57 1999/11/19 01:03:19 george
-+ * Use Block Size 256 for single symbol Mode
-+ *
-+ * Revision 1.56 1999/11/18 02:37:43 george
-+ * Porting to 16Bit
-+ *
-+ * Revision 1.55 1999/11/12 02:12:55 george
-+ * Added status constant for reporting of profile channel matching calculation
-+ *
-+ * Revision 1.54 1999/11/11 19:19:42 george
-+ * Porting to 16Bit Compiler
-+ *
-+ * Revision 1.53 1999/11/05 01:27:06 liang
-+ * Add recovery-from-inpulse-noise progress report.
-+ *
-+ * Revision 1.52 1999/11/02 02:06:27 george
-+ * Added SNRMargin training status value
-+ *
-+ * Revision 1.51 1999/10/27 23:02:03 wan
-+ * Add G.994.1 setup in dslConnectionSetupStruct for setting up Initiation side
-+ *
-+ * Revision 1.50 1999/10/25 21:55:36 liang
-+ * Renamed the constant for FEQ output error.
-+ *
-+ * Revision 1.49 1999/10/23 02:20:55 george
-+ * Add debug data codes
-+ *
-+ * Revision 1.48 1999/10/19 23:59:06 liang
-+ * Change line handler interface to work with nonsymmetric sampling freq.
-+ *
-+ * Revision 1.47 1999/10/09 01:38:04 george
-+ * Define maxProfileNumber
-+ *
-+ * Revision 1.46 1999/10/07 23:30:51 wan
-+ * Add G.994.1 Tone and Fast Retrain Recov detections in G.992p2 SHOWTIME and Fast Retrain
-+ *
-+ * Revision 1.45 1999/10/06 13:59:27 liang
-+ * Escape to G994.1 should be done through status instead of command.
-+ *
-+ * Revision 1.44 1999/10/06 02:01:28 george
-+ * Add kDslReturnToG994p1Cmd
-+ *
-+ * Revision 1.43 1999/09/30 19:29:58 george
-+ * Add reporting constant for Fast Retrain
-+ *
-+ * Revision 1.42 1999/09/16 23:41:56 liang
-+ * Added command for host forced retrain.
-+ *
-+ * Revision 1.41 1999/08/20 00:47:25 wan
-+ * Add constants for Fast Retrain progress status
-+ *
-+ * Revision 1.40 1999/08/16 18:06:01 wan
-+ * Add more reporting constants for Fast Retrain
-+ *
-+ * Revision 1.39 1999/08/12 00:18:10 wan
-+ * Add several Fast Retrain Status constants
-+ *
-+ * Revision 1.38 1999/08/10 18:25:38 george
-+ * Define constants used for Fast Retrain
-+ *
-+ * Revision 1.37 1999/07/31 01:47:43 george
-+ * Add status constants for eoc/aoc
-+ *
-+ * Revision 1.36 1999/07/27 18:19:52 george
-+ * declare aoc/eoc functions
-+ *
-+ * Revision 1.35 1999/07/19 22:44:47 george
-+ * Add constants for G994p1 Message Exchange
-+ *
-+ * Revision 1.34 1999/07/16 02:03:03 liang
-+ * Modified Dsl link layer command spec structure.
-+ *
-+ * Revision 1.33 1999/07/14 22:53:16 george
-+ * Add Constants for G994p1
-+ *
-+ * Revision 1.32 1999/07/13 00:02:26 liang
-+ * Added more feature bits.
-+ *
-+ * Revision 1.31 1999/07/09 01:58:14 wan
-+ * Added more constants G.994.1 testing reports
-+ *
-+ * Revision 1.30 1999/07/07 23:51:04 liang
-+ * Added rcv power and loop attenuation reports.
-+ *
-+ * Revision 1.29 1999/07/06 21:32:01 liang
-+ * Added some aux. feature bits, and field performanceMargin was changed to noiseMargin in Capabilities.
-+ *
-+ * Revision 1.28 1999/07/03 01:40:17 liang
-+ * Redefined dsl command parameter list and added connection setup struct.
-+ *
-+ * Revision 1.27 1999/07/02 00:41:18 liang
-+ * Add bit and gain logging as well as rcv carrier range status.
-+ *
-+ * Revision 1.26 1999/06/25 21:37:10 wan
-+ * Work in progress for G994.1.
-+ *
-+ * Revision 1.25 1999/06/16 00:54:36 liang
-+ * Added Tx/Rx SHOWTIME active training progress codes.
-+ *
-+ * Revision 1.24 1999/06/11 21:59:37 wan
-+ * Added G994.1 fail status constant.
-+ *
-+ * Revision 1.23 1999/06/11 21:29:01 liang
-+ * Constants for C/R-Msgs was changed to C/R-Msg.
-+ *
-+ * Revision 1.22 1999/06/08 02:49:42 liang
-+ * Added SNR data logging.
-+ *
-+ * Revision 1.21 1999/06/07 21:05:08 liang
-+ * Added more training status values.
-+ *
-+ * Revision 1.20 1999/05/22 02:18:26 liang
-+ * More constant defines.
-+ *
-+ * Revision 1.19 1999/05/14 22:49:35 liang
-+ * Added more status codes and debug data codes.
-+ *
-+ * Revision 1.18 1999/04/12 22:41:39 liang
-+ * Work in progress.
-+ *
-+ * Revision 1.17 1999/04/01 20:28:07 liang
-+ * Added RReverb detect event status.
-+ *
-+ * Revision 1.16 1999/03/26 03:29:54 liang
-+ * Add DSL debug data constants.
-+ *
-+ * Revision 1.15 1999/03/08 21:58:00 liang
-+ * Added more constant definitions.
-+ *
-+ * Revision 1.14 1999/03/02 01:49:36 liang
-+ * Added more connection info codes.
-+ *
-+ * Revision 1.13 1999/03/02 00:25:55 liang
-+ * Added DSL tx and rx data handler type definitions.
-+ *
-+ * Revision 1.12 1999/02/27 01:16:55 liang
-+ * Increase allowable static memory size to a VERY large number for now.
-+ *
-+ * Revision 1.11 1999/02/25 00:24:06 liang
-+ * Increased symbol block size to 16.
-+ *
-+ * Revision 1.10 1999/02/23 22:03:26 liang
-+ * Increased maximal static memory size allowed.
-+ *
-+ * Revision 1.9 1999/02/17 02:39:21 ilyas
-+ * Changes for NDIS
-+ *
-+ * Revision 1.8 1999/02/11 22:44:30 ilyas
-+ * More definitions for ATM
-+ *
-+ * Revision 1.7 1999/02/10 01:56:38 liang
-+ * Added hooks for G994.1 and G992.2.
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftDslHeader
-+#define SoftDslHeader
-+
-+/* for builds in Linux/VxWorks CommEngine environment */
-+#if (defined(__KERNEL__) && !defined(LINUX_DRIVER)) || defined(VXWORKS) || defined(_WIN32_WCE) || defined(TARG_OS_RTEMS) || defined(_CFE_)
-+#include "AdslCoreDefs.h"
-+#else
-+#include "Bcm6345_To_Bcm6348.h" /* File for 45->48 changes */
-+#endif
-+
-+#ifndef SoftModemPh
-+#include "SoftModem.h"
-+#endif
-+
-+#ifdef DSL_OS
-+#include "DslOs.h"
-+#endif
-+
-+/*
-+**
-+** Type definitions
-+**
-+*/
-+
-+#if defined(ATM) || defined(DSL_PACKET)
-+#define DSL_LINKLAYER
-+#endif
-+
-+#if defined(ATM_LAYER) || defined(DSL_PACKET_LAYER) || defined(G997_1_FRAMER)
-+#define DSL_FRAME_FUNCTIONS
-+#endif
-+
-+#define FLD_OFFSET(type,fld) ((int)(void *)&(((type *)0)->fld))
-+
-+#include "Que.h"
-+#include "SoftAtmVc.h"
-+
-+typedef struct _dslFrameBuffer
-+ {
-+ struct _dslFrameBuffer *next; /* link to the next buffer in the frame */
-+ void *pData; /* pointer to data */
-+ ulong length; /* size (in bytes) of data */
-+ } dslFrameBuffer;
-+
-+typedef struct _dslFrame
-+ {
-+ ulong Reserved[3];
-+
-+ ulong totalLength; /* total amount of data in the packet */
-+ int bufCnt; /* buffer counter */
-+ struct _dslFrameBuffer *head; /* first buffer in the chain */
-+ struct _dslFrameBuffer *tail; /* last buffer in the chain */
-+ } dslFrame;
-+
-+
-+/* VC types and parameters */
-+
-+#define kDslVcAtm 1
-+
-+typedef struct
-+ {
-+ ulong vcType;
-+ union
-+ {
-+ atmVcParams atmParams;
-+ } params;
-+ } dslVcParams;
-+
-+/*
-+** Assuming that dslVcParams.params is the first field in VC
-+** and RefData is the first field in dslVcParams.params
-+*/
-+
-+#define DslVcGetRefData(pVc) (*(void **) (pVc))
-+
-+/* Frame OOB types */
-+
-+#define kDslFrameAtm 1
-+
-+typedef struct
-+ {
-+ ulong frameType;
-+ union
-+ {
-+ atmOobPacketInfo atmInfo;
-+ } param;
-+ } dslOobFrameInfo;
-+
-+
-+typedef struct
-+ {
-+ ulong (SM_DECL *__DslFrameBufferGetLength) (dslFrameBuffer *fb);
-+ void * (SM_DECL *__DslFrameBufferGetAddress) (dslFrameBuffer *fb);
-+ void (SM_DECL *__DslFrameBufferSetLength) (dslFrameBuffer *fb, ulong l);
-+ void (SM_DECL *__DslFrameBufferSetAddress) (dslFrameBuffer *fb, void *p);
-+
-+ void (SM_DECL *__DslFrameInit) (dslFrame *f);
-+ ulong (SM_DECL *__DslFrameGetLength) (dslFrame *pFrame);
-+ ulong (SM_DECL *__DslFrameGetBufCnt) (dslFrame *pFrame);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetFirstBuffer) (dslFrame *pFrame);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetNextBuffer) (dslFrameBuffer *pFrBuffer);
-+ void (SM_DECL *__DslFrameSetNextBuffer) (dslFrameBuffer *pFrBuf, dslFrameBuffer *pFrBufNext);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetLastBuffer) (dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameGetLinkFieldAddress) (dslFrame *f);
-+ dslFrame * (SM_DECL *__DslFrameGetFrameAddressFromLink) (void *lnk);
-+
-+ Boolean (SM_DECL *__DslFrameGetOobInfo) (dslFrame *f, dslOobFrameInfo *pOobInfo);
-+ Boolean (SM_DECL *__DslFrameSetOobInfo) (dslFrame *f, dslOobFrameInfo *pOobInfo);
-+
-+ void (SM_DECL *__DslFrameEnqueBufferAtBack) (dslFrame *f, dslFrameBuffer *b);
-+ void (SM_DECL *__DslFrameEnqueFrameAtBack) (dslFrame *fMain, dslFrame *f);
-+ void (SM_DECL *__DslFrameEnqueBufferAtFront) (dslFrame *f, dslFrameBuffer *b);
-+ void (SM_DECL *__DslFrameEnqueFrameAtFront) (dslFrame *fMain, dslFrame *f);
-+ dslFrameBuffer * (SM_DECL *__DslFrameDequeBuffer) (dslFrame *pFrame);
-+
-+ void * (SM_DECL *__DslFrameAllocMemForFrames) (ulong frameNum);
-+ void (SM_DECL *__DslFrameFreeMemForFrames) (void *hMem);
-+ dslFrame * (SM_DECL *__DslFrameAllocFrame) (void *handle);
-+ void (SM_DECL *__DslFrameFreeFrame) (void *handle, dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameAllocMemForBuffers) (void **ppMemPool, ulong bufNum, ulong memSize);
-+ void (SM_DECL *__DslFrameFreeMemForBuffers) (void *hMem, ulong memSize, void *pMemPool);
-+ dslFrameBuffer * (SM_DECL *__DslFrameAllocBuffer) (void *handle, void *pMem, ulong length);
-+ void (SM_DECL *__DslFrameFreeBuffer) (void *handle, dslFrameBuffer *pBuf);
-+
-+ /* for LOG file support */
-+
-+ ulong (SM_DECL *__DslFrame2Id)(void *handle, dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameId2Frame)(void *handle, ulong frameId);
-+ } dslFrameFunctions;
-+
-+#define DslFrameDeclareFunctions( name_prefix ) \
-+extern ulong SM_DECL name_prefix##BufferGetLength(dslFrameBuffer *fb); \
-+extern void * SM_DECL name_prefix##BufferGetAddress(dslFrameBuffer *fb); \
-+extern void SM_DECL name_prefix##BufferSetLength(dslFrameBuffer *fb, ulong l); \
-+extern void SM_DECL name_prefix##BufferSetAddress(dslFrameBuffer *fb, void *p); \
-+ \
-+extern void SM_DECL name_prefix##Init(dslFrame *f); \
-+extern ulong SM_DECL name_prefix##GetLength (dslFrame *pFrame); \
-+extern ulong SM_DECL name_prefix##GetBufCnt(dslFrame *pFrame); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetFirstBuffer(dslFrame *pFrame); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetNextBuffer(dslFrameBuffer *pFrBuffer); \
-+extern void SM_DECL name_prefix##SetNextBuffer(dslFrameBuffer *pFrBuf, dslFrameBuffer *pFrBufNext); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetLastBuffer(dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##GetLinkFieldAddress(dslFrame *f); \
-+extern Boolean SM_DECL name_prefix##GetOobInfo(dslFrame *f, dslOobFrameInfo *pOobInfo); \
-+extern Boolean SM_DECL name_prefix##SetOobInfo(dslFrame *f, dslOobFrameInfo *pOobInfo); \
-+extern dslFrame* SM_DECL name_prefix##GetFrameAddressFromLink(void *lnk); \
-+extern void SM_DECL name_prefix##EnqueBufferAtBack(dslFrame *f, dslFrameBuffer *b); \
-+extern void SM_DECL name_prefix##EnqueFrameAtBack(dslFrame *fMain, dslFrame *f); \
-+extern void SM_DECL name_prefix##EnqueBufferAtFront(dslFrame *f, dslFrameBuffer *b); \
-+extern void SM_DECL name_prefix##EnqueFrameAtFront(dslFrame *fMain, dslFrame *f); \
-+extern dslFrameBuffer * SM_DECL name_prefix##DequeBuffer(dslFrame *pFrame); \
-+ \
-+extern void * SM_DECL name_prefix##AllocMemForFrames(ulong frameNum); \
-+extern void SM_DECL name_prefix##FreeMemForFrames(void *hMem); \
-+extern dslFrame * SM_DECL name_prefix##AllocFrame(void *handle); \
-+extern void SM_DECL name_prefix##FreeFrame(void *handle, dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##AllocMemForBuffers(void **ppMemPool, ulong bufNum, ulong memSize); \
-+extern void SM_DECL name_prefix##FreeMemForBuffers(void *hMem, ulong memSize, void *pMemPool); \
-+extern dslFrameBuffer * SM_DECL name_prefix##AllocBuffer(void *handle, void *pMem, ulong length); \
-+extern void SM_DECL name_prefix##FreeBuffer(void *handle, dslFrameBuffer *pBuf); \
-+extern ulong SM_DECL name_prefix##2Id(void *handle, dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##Id2Frame(void *handle, ulong frameId);
-+
-+
-+#define DslFrameAssignFunctions( var, name_prefix ) do { \
-+ (var).__DslFrameBufferGetLength = name_prefix##BufferGetLength; \
-+ (var).__DslFrameBufferGetAddress= name_prefix##BufferGetAddress; \
-+ (var).__DslFrameBufferSetLength = name_prefix##BufferSetLength; \
-+ (var).__DslFrameBufferSetAddress= name_prefix##BufferSetAddress; \
-+ \
-+ (var).__DslFrameInit = name_prefix##Init; \
-+ (var).__DslFrameGetLength = name_prefix##GetLength; \
-+ (var).__DslFrameGetBufCnt = name_prefix##GetBufCnt; \
-+ (var).__DslFrameGetFirstBuffer = name_prefix##GetFirstBuffer; \
-+ (var).__DslFrameGetNextBuffer = name_prefix##GetNextBuffer; \
-+ (var).__DslFrameSetNextBuffer = name_prefix##SetNextBuffer; \
-+ (var).__DslFrameGetLastBuffer = name_prefix##GetLastBuffer; \
-+ (var).__DslFrameGetLinkFieldAddress = name_prefix##GetLinkFieldAddress; \
-+ (var).__DslFrameGetFrameAddressFromLink = name_prefix##GetFrameAddressFromLink; \
-+ \
-+ (var).__DslFrameGetOobInfo = name_prefix##GetOobInfo; \
-+ (var).__DslFrameSetOobInfo = name_prefix##SetOobInfo; \
-+ \
-+ (var).__DslFrameEnqueBufferAtBack = name_prefix##EnqueBufferAtBack; \
-+ (var).__DslFrameEnqueFrameAtBack = name_prefix##EnqueFrameAtBack; \
-+ (var).__DslFrameEnqueBufferAtFront= name_prefix##EnqueBufferAtFront; \
-+ (var).__DslFrameEnqueFrameAtFront = name_prefix##EnqueFrameAtFront; \
-+ (var).__DslFrameDequeBuffer = name_prefix##DequeBuffer; \
-+ \
-+ (var).__DslFrameAllocMemForFrames = name_prefix##AllocMemForFrames; \
-+ (var).__DslFrameFreeMemForFrames = name_prefix##FreeMemForFrames; \
-+ (var).__DslFrameAllocFrame = name_prefix##AllocFrame; \
-+ (var).__DslFrameFreeFrame = name_prefix##FreeFrame; \
-+ (var).__DslFrameAllocMemForBuffers= name_prefix##AllocMemForBuffers; \
-+ (var).__DslFrameFreeMemForBuffers = name_prefix##FreeMemForBuffers; \
-+ (var).__DslFrameAllocBuffer = name_prefix##AllocBuffer; \
-+ (var).__DslFrameFreeBuffer = name_prefix##FreeBuffer; \
-+ \
-+ (var).__DslFrame2Id = name_prefix##2Id; \
-+ (var).__DslFrameId2Frame = name_prefix##Id2Frame; \
-+} while (0)
-+
-+typedef struct
-+ {
-+ Boolean febe_I;
-+ Boolean fecc_I;
-+ Boolean los, rdi;
-+ Boolean ncd_I;
-+ Boolean hec_I;
-+#ifdef G992P3
-+ Boolean lpr;
-+#endif
-+
-+#ifdef G992P1_NEWFRAME
-+
-+ Boolean febe_F;
-+ Boolean fecc_F;
-+ Boolean ncd_F;
-+ Boolean hec_F;
-+
-+#endif
-+ } G992MonitorParams;
-+
-+typedef struct
-+ {
-+ ushort K;
-+ uchar S, R;
-+ uchar D;
-+#ifdef G992P3
-+ uchar T, SEQ;
-+#endif
-+ directionType direction;
-+
-+#ifdef G992P1_NEWFRAME
-+
-+ ushort N;
-+ ushort NF;
-+ uchar RSF;
-+
-+ uchar AS0BF, AS1BF, AS2BF, AS3BF, AEXAF;
-+ ushort AS0BI;
-+ uchar AS1BI, AS2BI, AS3BI, AEXAI;
-+
-+ uchar LS0CF, LS1BF, LS2BF, LEXLF;
-+ uchar LS0CI, LS1BI, LS2BI, LEXLI;
-+
-+ uchar mergedModeEnabled;
-+
-+#endif
-+
-+ } G992CodingParams;
-+
-+typedef struct
-+ {
-+ uchar Nlp;
-+ uchar Nbc;
-+ uchar MSGlp;
-+ ushort MSGc;
-+
-+ ulong L;
-+ ushort M;
-+ ushort T;
-+ ushort D;
-+ ushort R;
-+ ushort B;
-+ } G992p3CodingParams;
-+
-+/* Power Management Message definitions (used in command and status) */
-+
-+typedef struct
-+ {
-+ long msgType;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long msgLen;
-+ void *msgData;
-+ } msg;
-+ } param;
-+ } dslPwrMessage;
-+
-+/* Power Management commands and responses */
-+
-+#define kPwrSimpleRequest 1
-+#define kPwrL2Request 2
-+#define kPwrL2TrimRequest 3
-+
-+#define kPwrGrant 0x80
-+#define kPwrReject 0x81
-+#define kPwrL2Grant 0x82
-+#define kPwrL2Reject 0x83
-+#define kPwrL2TrimGrant 0x84
-+#define kPwrL2TrimReject 0x85
-+#define kPwrL2Grant2p 0x86
-+
-+#define kPwrBusy 0x01
-+#define kPwrInvalid 0x02
-+#define kPwrNotDesired 0x03
-+#define kPwrInfeasibleParam 0x04
-+
-+/* Power Management reason codes */
-+
-+/* OLR definitions (used in command and status) */
-+
-+typedef struct
-+ {
-+ ushort msgType;
-+ ushort nCarrs;
-+ ushort L[4];
-+ uchar B[4];
-+ void *carrParamPtr;
-+ } dslOLRMessage;
-+
-+typedef struct
-+ {
-+ uchar ind;
-+ uchar gain;
-+ uchar gb;
-+ } dslOLRCarrParam;
-+
-+typedef struct
-+ {
-+ ushort ind;
-+ uchar gain;
-+ uchar gb;
-+ } dslOLRCarrParam2p;
-+
-+/* OLR messages */
-+
-+#define kOLRRequestType1 1
-+#define kOLRRequestType2 2
-+#define kOLRRequestType3 3
-+#define kOLRRequestType4 4
-+#define kOLRRequestType5 5
-+#define kOLRRequestType6 6
-+
-+#define kOLRDeferType1 0x81
-+#define kOLRRejectType2 0x82
-+#define kOLRRejectType3 0x83
-+
-+/* OLR reason codes */
-+
-+#define kOLRBusy 1
-+#define kOLRInvalidParam 2
-+#define kOLRNotEnabled 3
-+#define kOLRNotSupported 4
-+
-+/* common EOC definitions */
-+#define kG992EocStuffingByte 0x0C
-+
-+/* showtime monitor counters */
-+#define kG992ShowtimeRSCodewordsRcved 0 /* number of Reed-Solomon codewords received */
-+#define kG992ShowtimeRSCodewordsRcvedOK 1 /* number of Reed-Solomon codewords received with all symdromes zero */
-+#define kG992ShowtimeRSCodewordsRcvedCorrectable 2 /* number of Reed-Solomon codewords received with correctable errors */
-+#define kG992ShowtimeRSCodewordsRcvedUncorrectable 3 /* number of Reed-Solomon codewords received with un-correctable errors */
-+#define kG992ShowtimeSuperFramesRcvd 4 /* number of super frames received */
-+#define kG992ShowtimeSuperFramesRcvdWrong 5 /* number of super frames received with CRC error */
-+#define kG992ShowtimeLastUncorrectableRSCount 6 /* last recorded value for kG992ShowtimeRSCodewordsRcvedUncorrectable */
-+#define kG992ShowtimeLastWrongSuperFrameCount 7 /* last recorded value for kG992ShowtimeSuperFramesRcvdWrong */
-+#define kG992ShowtimeNumOfShortResync 8 /* number of short interrupt recoveries by FEQ */
-+
-+#define kG992ShowtimeNumOfFEBE 9 /* number of other side superframe errors */
-+#define kG992ShowtimeNumOfFECC 10 /* number of other side superframe FEC errors */
-+#define kG992ShowtimeNumOfFHEC 11 /* number of far-end ATM header CRC errors */
-+#define kG992ShowtimeNumOfFOCD 12 /* number of far-end OCD events */
-+#define kG992ShowtimeNumOfFLCD 13 /* number of far-end LCD events */
-+#define kG992ShowtimeNumOfHEC 14 /* number of ATM header CRC errors */
-+#define kG992ShowtimeNumOfOCD 15 /* number of OCD events */
-+#define kG992ShowtimeNumOfLCD 16 /* number of LCD events */
-+
-+#define kG992ShowtimeNumOfMonitorCounters (kG992ShowtimeNumOfLCD+1) /* always last number + 1 */
-+#define kG992ShowtimeMonitorReportNumber 9
-+
-+#define kG992ShowtimeLCDNumShift 1
-+#define kG992ShowtimeLCDFlag 1
-+
-+typedef int (SM_DECL *dslFrameHandlerType) (void *gDslVars, void *pVc, ulong mid, dslFrame *);
-+
-+typedef void* (SM_DECL *dslHeaderHandlerType) (void *gDslVars, ulong hdr, uchar hdrHec);
-+typedef void* (SM_DECL *dslTxFrameBufferHandlerType) (void *gDslVars, int*, void*);
-+typedef void* (SM_DECL *dslRxFrameBufferHandlerType) (void *gDslVars, int, void*);
-+
-+typedef void* (SM_DECL *dslVcAllocateHandlerType) (void *gDslVars, void *);
-+typedef void (SM_DECL *dslVcFreeHandlerType) (void *gDslVars, void *);
-+typedef Boolean (SM_DECL *dslVcActivateHandlerType) (void *gDslVars, void *);
-+typedef void (SM_DECL *dslVcDeactivateHandlerType) (void *gDslVars, void *);
-+typedef Boolean (SM_DECL *dslVcConfigureHandlerType) (void *gDslVars, void *pVc, ulong mid, void *);
-+
-+typedef ulong (SM_DECL *dslLinkVc2IdHandlerType) (void *gDslVars, void *);
-+typedef void* (SM_DECL *dslLinkVcId2VcHandlerType) (void *gDslVars, ulong);
-+typedef void* (SM_DECL *dslGetFramePoolHandlerType) (void *gDslVars);
-+
-+typedef void (SM_DECL *dslLinkCloseHandlerType) (void *gDslVars);
-+typedef int (SM_DECL *dslTxDataHandlerType)(void *gDslVars, int, int, uchar*, G992MonitorParams*);
-+typedef int (SM_DECL *dslRxDataHandlerType)(void *gDslVars, int, uchar*, G992MonitorParams*);
-+
-+typedef void (SM_DECL *dslLinkStatusHandler) (void *gDslVars, ulong statusCode, ...);
-+
-+typedef Boolean (SM_DECL *dslPhyInitType) (
-+ void *gDslVars,
-+ bitMap setupMap,
-+ dslHeaderHandlerType rxCellHeaderHandlerPtr,
-+ dslRxFrameBufferHandlerType rxFrameHandlerPtr,
-+ dslTxFrameBufferHandlerType txFrameHandlerPtr,
-+ atmStatusHandler statusHandlerPtr);
-+
-+struct _dslFramerBufDesc;
-+
-+typedef Boolean (SM_DECL *dslFramerDataGetPtrHandlerType) (void *gDslVars, struct _dslFramerBufDesc *pBufDesc);
-+typedef void (SM_DECL *dslFramerDataDoneHandlerType) (void *gDslVars, struct _dslFramerBufDesc *pBufDesc);
-+
-+typedef void (SM_DECL *dslDriverCallbackType) (void *gDslVars);
-+
-+#ifdef DSL_PACKET
-+
-+typedef struct
-+ {
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+ } dslPacketPhyFunctions;
-+
-+typedef Boolean (SM_DECL *dslPacketPhyInitType) (
-+ void *gDslVars,
-+ bitMap setupMap,
-+ dslPacketPhyFunctions dslPhyFunctions,
-+ dslLinkStatusHandler statusHandlerPtr);
-+
-+
-+#endif /* DSL_PACKET */
-+
-+
-+typedef int dslDirectionType;
-+typedef bitMap dslModulationType;
-+typedef bitMap dslLinkLayerType;
-+
-+/*
-+**
-+** Log data codes
-+**
-+*/
-+
-+#define kDslEyeData eyeData
-+
-+#define kDslLogComplete (inputSignalData - 1)
-+#define kDslLogInputData inputSignalData
-+#define kDslLogInputData1 (inputSignalData + 1)
-+#define kDslLogInputData2 (inputSignalData + 2)
-+#define kDslLogInputData3 (inputSignalData + 3)
-+
-+/*
-+**
-+** Status codes
-+**
-+*/
-+
-+typedef long dslStatusCode;
-+#define kFirstDslStatusCode 256
-+#define kDslError (kFirstDslStatusCode + 0)
-+#define kAtmStatus (kFirstDslStatusCode + 1)
-+#define kDslTrainingStatus (kFirstDslStatusCode + 2)
-+#define kDslConnectInfoStatus (kFirstDslStatusCode + 3)
-+#define kDslEscapeToG994p1Status (kFirstDslStatusCode + 4)
-+#define kDslFrameStatus (kFirstDslStatusCode + 5)
-+#define kDslReceivedEocCommand (kFirstDslStatusCode + 6)
-+#define kDslSendEocCommandDone (kFirstDslStatusCode + 7)
-+#define kDslSendEocCommandFailed (kFirstDslStatusCode + 8)
-+#define kDslWriteRemoteRegisterDone (kFirstDslStatusCode + 9)
-+#define kDslReadRemoteRegisterDone (kFirstDslStatusCode + 10)
-+#define kDslExternalError (kFirstDslStatusCode + 11)
-+#define kDslDspControlStatus (kFirstDslStatusCode + 12)
-+#define kDslATUHardwareAGCRequest (kFirstDslStatusCode + 13)
-+#define kDslPacketStatus (kFirstDslStatusCode + 14)
-+#define kDslG997Status (kFirstDslStatusCode + 15)
-+#define kDslPrintfStatus (kFirstDslStatusCode + 16)
-+#define kDslPrintfStatus1 (kFirstDslStatusCode + 17)
-+#define kDslExceptionStatus (kFirstDslStatusCode + 18)
-+#define kDslPingResponse (kFirstDslStatusCode + 19)
-+#define kDslShowtimeSNRMarginInfo (kFirstDslStatusCode + 20)
-+#define kDslGetOemParameter (kFirstDslStatusCode + 21)
-+#define kDslOemDataAddrStatus (kFirstDslStatusCode + 22)
-+#define kDslDataAvailStatus (kFirstDslStatusCode + 23)
-+/* #define kDslAtuChangeTxFilterRequest (kFirstDslStatusCode + 24) */
-+#define kDslTestPllPhaseResult (kFirstDslStatusCode + 25)
-+#ifdef BCM6348_SRC
-+#define kDslHardwareAGCSetPga1 (kFirstDslStatusCode + 26)
-+#define kDslHardwareAGCDecPga1 (kFirstDslStatusCode + 27)
-+#define kDslHardwareAGCIncPga1 (kFirstDslStatusCode + 28)
-+#define kDslHardwareAGCSetPga2Delta (kFirstDslStatusCode + 29)
-+#endif
-+#define kDslOLRRequestStatus (kFirstDslStatusCode + 30)
-+#define kDslOLRResponseStatus (kFirstDslStatusCode + 31)
-+#define kDslOLRBitGainUpdateStatus (kFirstDslStatusCode + 32)
-+#define kDslPwrMgrStatus (kFirstDslStatusCode + 33)
-+#define kDslEscapeToT1p413Status (kFirstDslStatusCode + 34)
-+#ifdef BCM6348_SRC
-+#define kDslHardwareAGCSetPga2 (kFirstDslStatusCode + 35)
-+#define kDslHardwareGetRcvAGC (kFirstDslStatusCode + 36)
-+#endif
-+#define kDslUpdateXmtReadPtr (kFirstDslStatusCode + 37)
-+#define kDslHardwareSetRcvAGC (kFirstDslStatusCode + 38)
-+#ifdef BCM6348_SRC
-+#define kDslSetDigUsPwrCutback (kFirstDslStatusCode + 39)
-+#endif
-+
-+#define kClientSideInitiation 0
-+#define kClientSideRespond 1
-+#define kCentralSideInitiation 2
-+#define kCentralSideRespond 3
-+
-+/* OEM parameter ID definition */
-+
-+#define kDslOemG994VendorId 1
-+#define kDslOemG994XmtNSInfo 2
-+#define kDslOemG994RcvNSInfo 3
-+#define kDslOemEocVendorId 4
-+#define kDslOemEocVersion 5
-+#define kDslOemEocSerNum 6
-+#define kDslOemT1413VendorId 7
-+#define kDslOemT1413EocVendorId 8
-+
-+typedef long dslErrorCode;
-+
-+typedef long atmStatusCode;
-+typedef long dslFramerStatusCode;
-+
-+typedef long atmErrorCode;
-+
-+typedef long dslTrainingStatusCode;
-+
-+#define kDslStartedG994p1 0
-+#define kDslStartedT1p413HS 1
-+
-+/* reserved for G.994.1: 1 ~ 8 */
-+
-+#define kDslG994p1MessageDet 100
-+#define kDslG994p1ToneDet 101
-+#define kDslG994p1RToneDet 102
-+#define kDslG994p1FlagDet 103
-+#define kDslG994p1GalfDet 104
-+#define kDslG994p1ErrorFrameDet 105
-+#define kDslG994p1BadFrameDet 106
-+#define kDslG994p1SilenceDet 107
-+#define kDslG994p1RcvTimeout 108
-+#define kDslG994p1XmtFinished 109
-+#define kDslG994p1ReturntoStartup 110
-+#define kDslG994p1InitiateCleardown 111
-+#define kDslG994p1StartupFinished 112
-+#define kDslG994p1RcvNonStandardInfo 113
-+#define kDslG994p1XmtNonStandardInfo 114
-+
-+#define kG994p1MaxNonstdMessageLength 64
-+
-+#define kDslFinishedT1p413 1100
-+#define kDslT1p413DetectedCTone 1101
-+#define kDslT1p413DetectedCAct 1102
-+#define kDslT1p413DetectedCReveille 1103
-+#define kDslT1p413DetectedRActReq 1104
-+#define kDslT1p413DetectedRQuiet1 1105
-+#define kDslT1p413DetectedRAct 1106
-+#define kDslT1p413TimeoutCReveille 1107
-+#define kDslT1p413ReturntoStartup 1108
-+
-+#define kDslG994p1Timeout 8
-+#define kDslFinishedG994p1 9
-+#define kDslStartedG992p2Training 10
-+#define kDslG992p2DetectedPilotSymbol 11
-+#define kDslG992p2DetectedReverbSymbol 12
-+#define kDslG992p2TEQCalculationDone 13
-+#define kDslG992p2TrainingFEQ 14
-+#define kDslG992p2Phase3Started 15
-+#define kDslG992p2ReceivedRates1 16
-+#define kDslG992p2ReceivedMsg1 17
-+#define kDslG992p2Phase4Started 18
-+#define kDslG992p2ReceivedRatesRA 19
-+#define kDslG992p2ReceivedMsgRA 20
-+#define kDslG992p2ReceivedRates2 21
-+#define kDslG992p2ReceivedMsg2 22
-+#define kDslG992p2ReceivedBitGainTable 23
-+#define kDslG992p2TxShowtimeActive 24
-+#define kDslG992p2RxShowtimeActive 25
-+#define kDslG992p2TxAocMessage 26
-+#define kDslG992p2RxAocMessage 27
-+#define kDslG992p2TxEocMessage 28
-+#define kDslG992p2RxEocMessage 29
-+#define kDslFinishedG992p2Training 30
-+#define kDslRecoveredFromImpulseNoise 31
-+#define kDslG992Timeout 32
-+#define kDslT1p413Isu1SglByteSymDetected 33 /* detected T1.413 Issue 1 single byte per symbol mode */
-+#define kDslG992RxPrefixOnInAFewSymbols 34
-+#define kDslG992TxPrefixOnInAFewSymbols 35
-+#define kDslAnnexCXmtCPilot1Starting 36
-+#define kDslXmtToRcvPathDelay 37
-+#define kDslFeaturesUnsupported 38
-+#define kDslG992RcvMsgCrcError 39
-+#define kDslAnnexCDetectedStartHyperframe 40
-+
-+#define kDslG992AnnexCTimeoutCPilot1Detection 41
-+#define kDslG992AnnexCTimeoutCReverb1Detection 42
-+#define kDslG992AnnexCTimeoutECTraining 43
-+#define kDslG992AnnexCTimeoutHyperframeDetector 44
-+#define kDslG992AnnexCTimeoutSendRSegue2 45
-+#define kDslG992AnnexCTimeoutDetectCSegue1 46
-+#define kDslG992AnnexCAlignmentErrDetected 47
-+#define kDslG992AnnexCTimeoutSendRSegueRA 48
-+#define kDslG992AnnexCTimeoutSendRSegue4 49
-+#define kDslG992AnnexCTimeoutCSegue2Detection 50
-+#define kDslG992AnnexCTimeoutCSegue3Detection 51
-+/* Progress report for fast retrain */
-+
-+#define kG994p1EventToneDetected 54
-+#define kDslG992p2RcvVerifiedBitAndGain 55
-+#define kDslG992p2ProfileChannelResponseCalc 56
-+#define kDslG992AnnexCTotalFEXTBits 57
-+#define kDslG992AnnexCTotalNEXTBits 58
-+#define kDslG992AnnexCTotalFEXTCarrs 59
-+#define kDslG992AnnexCTotalNEXTCarrs 60
-+
-+#define kDslG992p3ReceivedMsgFmt 61
-+#define kDslG992p3ReceivedMsgPcb 62
-+
-+#define kDslG992p3AnnexLMode 63
-+
-+/* performance monitoring report */
-+
-+#define kG992DataRcvDetectFastRSCorrection 70
-+#define kG992DataRcvDetectInterleaveRSCorrection 71
-+#define kG992DataRcvDetectFastCRCError 72
-+#define kG992DataRcvDetectInterleaveCRCError 73
-+#define kG992DataRcvDetectFastRSError 74
-+#define kG992DataRcvDetectInterleaveRSError 75
-+#define kG992DataRcvDetectLOS 76
-+#define kG992DecoderDetectRDI 77
-+#define kG992DataRcvDetectLOSRecovery 78
-+#define kG992AtmDetectHEC 79
-+#define kG992AtmDetectOCD 180
-+#define kG992AtmDetectCD 181
-+#define kG992DecoderDetectRemoteLOS 182
-+#define kG992DecoderDetectRemoteLOSRecovery 183
-+#define kG992DecoderDetectRemoteRDI 184
-+#define kG992DecoderDetectRemoteRDIRecovery 185
-+#define kG992RcvDetectSyncSymbolOffset 186
-+#define kG992Upstream2xIfftDisabled 187
-+#if defined(G992P5)
-+#define kDslG992RunAnnexaP3ModeInAnnexaP5 188 /* run Annex C mode in Annex I compiled codes */
-+#else
-+#define kDslG992RunAnnexCModeInAnnexI 188 /* run Annex C mode in Annex I compiled codes */
-+#endif
-+
-+/* OLR PHY status */
-+
-+#define kG992EventSynchSymbolDetected 189
-+#define kG992EventReverseSynchSymbolDetected 190
-+#define kG992EventL2CReverbSymbolDetected 191
-+#define kG992EventL2CSegueSymbolDetected 192
-+
-+/* ANNEX_M */
-+#define kG992EnableAnnexM 191
-+
-+#define kDslAtuChangeTxFilterRequest 192
-+
-+/* detailed error messages reports */
-+
-+#define kDslG992XmtRReverbRAOver4000 80
-+#define kDslG992XmtRReverb5Over4000 81
-+#define kDslG992RcvCSegue2Failed 82
-+#define kDslG992RcvCSegueRAFailed 83
-+#define kDslG992RcvCSegue3Failed 84
-+#define kDslG992RcvShowtimeStartedTooLate 85
-+#define kDslG992XmtRReverb3Over4000 86
-+#define kDslG992RcvFailDetCSegue1InWindow 87
-+#define kDslG992RcvCPilot1Failed 88
-+#define kDslG992RcvCReverb1Failed 89
-+#define kG992ControlAllRateOptionsFailedErr 90
-+#define kG992ControlInvalidRateOptionErr 91
-+#define kDslG992XmtInvalidXmtDErr 92
-+#define kDslG992BitAndGainCalcFailed 93
-+#define kDslG992BitAndGainVerifyFailed 94
-+
-+#define kDslT1p413RetrainToUseCorrectRAck 95
-+#define kDslUseAlternateTxFilter 96
-+#define kDslT1p413RetrainToUseCorrectIFFT 97
-+
-+typedef long dslConnectInfoStatusCode;
-+#define kG992p2XmtToneOrderingInfo 0
-+#define kG992p2RcvToneOrderingInfo 1
-+#define kG992p2XmtCodingParamsInfo 2
-+#define kG992p2RcvCodingParamsInfo 3
-+#define kG992p2TrainingRcvCarrEdgeInfo 4
-+#define kG992ShowtimeMonitoringStatus 5
-+#define kG992MessageExchangeRcvInfo 6
-+#define kG992MessageExchangeXmtInfo 7
-+#define kG994MessageExchangeRcvInfo 8
-+#define kG994MessageExchangeXmtInfo 9
-+
-+#define kDslATURClockErrorInfo 10
-+#define kDslATURcvPowerInfo 11
-+#define kDslATUAvgLoopAttenuationInfo 12
-+#define kDslHWTimeTrackingResetClockError 13
-+#define kDslHWTimeTrackingClockTweak 14
-+#define kDslATUHardwareAGCObtained 15
-+#define kDslTEQCoefInfo 16
-+#define kDslRcvCarrierSNRInfo 17
-+#define kDslMaxReceivableBitRateInfo 18
-+#define kDslHWSetDigitalEcUpdateMode 19
-+#define kDslHWEnableDigitalECUpdate 20
-+#define kDslHWDisableDigitalECUpdate 21
-+#define kDslHWEnableDigitalEC 22
-+#define kDslHWSetDigitalEcGainShift 23
-+#define kDslHWSetDigitalEcUpdateShift 24
-+#define kDslRcvPsdInfo 25
-+#define kDslHWdcOffsetInfo 26
-+#define kG994SelectedG994p1CarrierIndex 27
-+#define kDslSelectedTimingTone 28
-+
-+#define kDslHWEnableAnalogECUpdate kDslHWSetDigitalEcUpdateMode
-+#define kDslHWEnableAnalogEC kDslHWDisableDigitalECUpdate
-+
-+#define kG992AocMessageExchangeRcvInfo 29
-+#define kG992AocMessageExchangeXmtInfo 30
-+#define kG992AocBitswapTxStarted 31
-+#define kG992AocBitswapRxStarted 32
-+#define kG992AocBitswapTxCompleted 33
-+#define kG992AocBitswapRxCompleted 34
-+#define kDslChannelResponseLog 35
-+#define kDslChannelResponseLinear 36
-+#define kDslChannelQuietLineNoise 37
-+
-+#define kDslATUCXmtPowerCutbackInfo 40
-+#define kDslATURXmtPowerCutbackInfo 41
-+#define kDslATUCXmtPowerInfo 42
-+#define kDslATURXmtPowerInfo 43
-+
-+#define kDslFramingModeInfo 50
-+#define kDslG992VendorID 51
-+
-+#ifdef BCM6348_SRC
-+#define kDslHWSetRcvFir2OutputScale 52
-+#endif
-+
-+#define kDslSignalAttenuation 53
-+#define kDslAttainableNetDataRate 54
-+#define kDslHLinScale 55
-+
-+#define kG992p3XmtCodingParamsInfo 60
-+#define kG992p3RcvCodingParamsInfo 61
-+#define kG992p3PwrStateInfo 62
-+#define kG992PilotToneInfo 63
-+
-+#define kDslSetPilotEyeDisplay 64
-+
-+#define kDslAturHwAgcResolutionMask (0xFFFFFFF8)
-+#define kDslAturHwAgcMinGain ((-12)<<4)
-+#ifndef BCM6348_SRC
-+#define kDslAturHwAgcMaxGain (30<<4)
-+#else
-+#define kDslAturHwAgcMaxGain (36<<4)
-+#endif
-+
-+#define kDslFrameStatusSend 1
-+#define kDslFrameStatusSendComplete 2
-+#define kDslFrameStatusRcv 3
-+#define kDslFrameStatusReturn 4
-+
-+typedef struct _dslFramerStatus
-+ {
-+ dslFramerStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nRxFrameTotal;
-+ long nRxFrameError;
-+ long nTxFrameTotal;
-+ } statistic;
-+ } param;
-+ } dslFramerStatus;
-+
-+typedef struct
-+ {
-+ dslStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ atmStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ long vci;
-+ long mid;
-+ long aalType;
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long vcId;
-+ long vci;
-+ long aalType;
-+ ulong fwdPeakCellTime;
-+ ulong backPeakCellTime;
-+ } vcInfo;
-+ struct
-+ {
-+ long cellHdr;
-+ long oamCmd;
-+ } oamInfo;
-+ struct
-+ {
-+ void *pVc;
-+ char *pHdr;
-+ void *cellHdr;
-+ void *cellData;
-+ } cellInfo;
-+ struct
-+ {
-+ long totalBits;
-+ long errBits;
-+ } bertInfo;
-+ } param;
-+ } atmStatus;
-+#ifdef DSL_PACKET
-+ dslFramerStatus dslPacketStatus;
-+#endif
-+#ifdef G997_1_FRAMER
-+ dslFramerStatus g997Status;
-+#endif
-+ struct
-+ {
-+ dslTrainingStatusCode code;
-+ long value;
-+ } dslTrainingInfo;
-+ struct
-+ {
-+ dslConnectInfoStatusCode code;
-+ long value;
-+ void *buffPtr;
-+ } dslConnectInfo;
-+ struct
-+ {
-+ long maxMarginCarrier;
-+ long maxSNRMargin;
-+ long minMarginCarrier;
-+ long minSNRMargin;
-+ long avgSNRMargin;
-+ long nCarriers;
-+ void *buffPtr;
-+ } dslShowtimeSNRMarginInfo;
-+ struct
-+ {
-+ long code;
-+ long vcId;
-+ long timeStamp;
-+ } dslFrameInfo;
-+#ifdef G997_1
-+ struct
-+ {
-+ long msgId;
-+ long msgType;
-+ char *dataPtr;
-+ } dslClearEocMsg;
-+#endif
-+ struct
-+ {
-+ char *fmt;
-+ long argNum;
-+ void *argPtr;
-+ } dslPrintfMsg;
-+ struct
-+ {
-+ ulong nBits;
-+ ulong nBlocks;
-+ ulong nBitErrors;
-+ ulong nBlockErrors;
-+
-+ ulong nAudioBits;
-+ ulong nAudioBlocks;
-+ ulong nAudioSyncErrors;
-+ ulong nAudioBlockErrors;
-+ } testResults;
-+ struct
-+ {
-+ ulong code;
-+ uchar *valuePtr;
-+ ulong length;
-+ } dslDataRegister;
-+ struct
-+ {
-+ ulong code;
-+ char *desc;
-+ } dslExternalError;
-+ struct
-+ {
-+ ulong numberOfCalls;
-+ ulong txSignalChecksum;
-+ ulong rxSignalChecksum;
-+ ulong eyeDataChecksum;
-+ } checksums;
-+ struct
-+ {
-+ int sp;
-+ int argc;
-+ int *argv;
-+ int *stackPtr;
-+ int stackLen;
-+ } dslException;
-+ struct
-+ {
-+ ulong paramId;
-+ void *dataPtr;
-+ ulong dataLen;
-+ } dslOemParameter;
-+ struct
-+ {
-+ void *dataPtr;
-+ ulong dataLen;
-+ } dslDataAvail;
-+ dslOLRMessage dslOLRRequest;
-+ dslPwrMessage dslPwrMsg;
-+ } param;
-+ } dslStatusStruct;
-+
-+typedef void (SM_DECL *dslStatusHandlerType) (void *gDslVars, dslStatusStruct*);
-+
-+
-+/*
-+**
-+** Command codes
-+**
-+*/
-+
-+typedef long dslCommandCode;
-+#define kFirstDslCommandCode 256
-+#define kDslIdleCmd (kFirstDslCommandCode + 0)
-+#define kDslIdleRcvCmd (kFirstDslCommandCode + 1)
-+#define kDslIdleXmtCmd (kFirstDslCommandCode + 2)
-+#define kDslStartPhysicalLayerCmd (kFirstDslCommandCode + 3)
-+#define kDslStartRetrainCmd (kFirstDslCommandCode + 4)
-+#define kDslSetFrameFunctions (kFirstDslCommandCode + 5)
-+#define kDslSendEocCommand (kFirstDslCommandCode + 6)
-+#define kDslWriteRemoteRegister (kFirstDslCommandCode + 7)
-+#define kDslReadRemoteRegister (kFirstDslCommandCode + 8)
-+#define kDslWriteLocalRegister (kFirstDslCommandCode + 9)
-+#define kDslReadLocalRegister (kFirstDslCommandCode + 10)
-+#define kDslStoreHardwareAGCCmd (kFirstDslCommandCode + 11)
-+#define kDslSetCommandHandlerCmd (kFirstDslCommandCode + 12)
-+#define kSetLinkLayerStatusHandlerCmd (kFirstDslCommandCode + 13)
-+#define kDslSetG997Cmd (kFirstDslCommandCode + 14)
-+#define kDslLoopbackCmd (kFirstDslCommandCode + 15)
-+#define kDslDiagSetupCmd (kFirstDslCommandCode + 16)
-+#define kDslSetDriverCallbackCmd (kFirstDslCommandCode + 17)
-+#define kDslDiagStopLogCmd (kFirstDslCommandCode + 18)
-+#define kDslDiagStartBERT (kFirstDslCommandCode + 19)
-+#define kDslDiagStopBERT (kFirstDslCommandCode + 20)
-+#define kDslPingCmd (kFirstDslCommandCode + 21)
-+#define kDslDyingGaspCmd (kFirstDslCommandCode + 22)
-+#define kDslTestCmd (kFirstDslCommandCode + 23)
-+#define kDslFilterSNRMarginCmd (kFirstDslCommandCode + 24)
-+#define kDslAtmVcMapTableChanged (kFirstDslCommandCode + 25)
-+#define kDslGetOemDataAddrCmd (kFirstDslCommandCode + 26)
-+#define kDslAtmReportHEC (kFirstDslCommandCode + 27)
-+#define kDslAtmReportCD (kFirstDslCommandCode + 28)
-+#define kDslSetXmtGainCmd (kFirstDslCommandCode + 29)
-+#define kDslSetStatusBufferCmd (kFirstDslCommandCode + 30)
-+#define kDslAfeTestCmd (kFirstDslCommandCode + 31)
-+#define kDslI432ResetCmd (kFirstDslCommandCode + 32)
-+#define kDslSetRcvGainCmd (kFirstDslCommandCode + 33)
-+#define kDslBypassRcvHpfCmd (kFirstDslCommandCode + 34)
-+#define kDslWriteAfeRegCmd (kFirstDslCommandCode + 35)
-+#define kDslReadAfeRegCmd (kFirstDslCommandCode + 36)
-+#define kDslOLRRequestCmd (kFirstDslCommandCode + 37)
-+#define kDslOLRResponseCmd (kFirstDslCommandCode + 38)
-+#define kDslI432SetScrambleCmd (kFirstDslCommandCode + 39)
-+#define kDslPwrMgrCmd (kFirstDslCommandCode + 40)
-+#define kDslAtmGfcMappingCmd (kFirstDslCommandCode + 41)
-+
-+#ifdef BCM6348_SRC
-+#define kDslEnablePwmSyncClk (kFirstDslCommandCode + 42)
-+#define kDslSetPwmSyncClkFreq (kFirstDslCommandCode + 43)
-+#endif
-+
-+#define kG994p1Duplex 1
-+#define kG994p1HalfDuplex 2
-+
-+/* Eoc Messages from ATU-C to ATU-R */
-+#define kDslEocHoldStateCmd 1
-+#define kDslEocReturnToNormalCmd 2
-+#define kDslEocPerformSelfTestCmd 3
-+#define kDslEocRequestCorruptCRCCmd 4
-+#define kDslEocRequestEndCorruptCRCCmd 5
-+#define kDslEocNotifyCorruptCRCCmd 6
-+#define kDslEocNotifyEndCorruptCRCCmd 7
-+#define kDslEocRequestTestParametersUpdateCmd 8
-+#define kDslEocGrantPowerDownCmd 9
-+#define kDslEocRejectPowerDownCmd 10
-+
-+/* Eoc Messages from ATU-R to ATU-C */
-+#define kDslEocRequestPowerDownCmd 11
-+#define kDslEocDyingGaspCmd 12
-+
-+/* Clear Eoc Messages */
-+#define kDslClearEocFirstCmd 100
-+#define kDslClearEocSendFrame 100
-+#define kDslClearEocSendComplete 101
-+#define kDslClearEocRcvedFrame 102
-+#define kDslClearEocSendComplete2 103
-+
-+#define kDslClearEocMsgLengthMask 0xFFFF
-+#define kDslClearEocMsgNumMask 0xFF0000
-+#define kDslClearEocMsgDataVolatileMask 0x1000000
-+#define kDslClearEocMsgDataVolatile kDslClearEocMsgDataVolatileMask
-+#define kDslClearEocMsgExtraSendComplete 0x2000000
-+
-+/* ADSL Link Power States */
-+#define kDslPowerFullOn 0
-+#define kDslPowerLow 1
-+#define kDslPowerIdle 3
-+
-+/* ATU-R Data Registers */
-+#define kDslVendorIDRegister 1
-+#define kDslRevisionNumberRegister 2
-+#define kDslSerialNumberRegister 3
-+#define kDslSelfTestResultsRegister 4
-+#define kDslLineAttenuationRegister 5
-+#define kDslSnrMarginRegister 6
-+#define kDslAturConfigurationRegister 7
-+#define kDslLinkStateRegister 8
-+
-+#define kDslVendorIDRegisterLength 8
-+#define kDslRevisionNumberRegisterLength 32
-+#define kDslSerialNumberRegisterLength 32
-+#define kDslSelfTestResultsRegisterLength 1
-+#define kDslLineAttenuationRegisterLength 1
-+#define kDslSnrMarginRegisterLength 1
-+#define kDslAturConfigurationRegisterLength 30
-+#define kDslLinkStateRegisterLength 1
-+
-+/* Dsl Diags setup flags */
-+#define kDslDiagEnableEyeData 1
-+#define kDslDiagEnableLogData 2
-+
-+/* Dsl test commands */
-+typedef long dslTestCmdType;
-+#define kDslTestBackToNormal 0
-+#define kDslTestReverb 1
-+#define kDslTestMedley 2
-+#define kDslTestToneSelection 3
-+#define kDslTestNoAutoRetrain 4
-+#define kDslTestMarginTweak 5
-+#define kDslTestEstimatePllPhase 6
-+#define kDslTestReportPllPhaseStatus 7
-+#define kDslTestAfeLoopback 8
-+#define kDslTestL3 9
-+#define kDslTestAdsl2DiagMode 10
-+#define kDslTestRetL0 11
-+
-+/* Xmt gain default setting */
-+#define kDslXmtGainAuto 0x80000000
-+
-+/* Unit (AFE) test commands */
-+#define kDslAfeTestLoadImage 0
-+#define kDslAfeTestPatternSend 1
-+#define kDslAfeTestLoadImageOnly 2
-+#define kDslAfeTestPhyRun 3
-+#define kDslAfeTestLoadBuffer 4
-+
-+typedef struct
-+ {
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+ ushort downstreamMinCarr, downstreamMaxCarr;
-+#else
-+ uchar downstreamMinCarr, downstreamMaxCarr;
-+#endif
-+ uchar upstreamMinCarr, upstreamMaxCarr;
-+ }carrierInfo;
-+
-+#if defined(G992P3) && !defined(BCM6348_SRC)
-+#define FAST_TEXT_TYPE
-+#else
-+#define FAST_TEXT_TYPE FAST_TEXT
-+#endif
-+
-+#if defined(BCM6348_SRC)
-+#define BCM6348_TEMP_MOVE_TO_LMEM
-+#else
-+#define BCM6348_TEMP_MOVE_TO_LMEM
-+#endif
-+
-+#ifdef G992P3
-+#define PRINT_DEBUG_INFO
-+#else
-+#define PRINT_DEBUG_INFO
-+#endif
-+
-+#ifdef G992P3
-+
-+#define kG992p3MaxSpectBoundsUpSize 16
-+#define kG992p3MaxSpectBoundsDownSize 16
-+
-+/* G.994 definitions */
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 1 ***/
-+
-+#define kG994p1G992p3AnnexASpectrumBoundsUpstream 0x01
-+#define kG994p1G992p3AnnexASpectrumShapingUpstream 0x02
-+#define kG994p1G992p3AnnexASpectrumBoundsDownstream 0x04
-+#define kG994p1G992p3AnnexASpectrumShapingDownstream 0x08
-+#define kG994p1G992p3AnnexATxImageAboveNyquistFreq 0x10
-+#define kG994p1G992p3AnnexLReachExtended 0x20
-+#define kG994p1G992p3AnnexMSubModePSDMasks 0x20
-+
-+#define kG994p1G992p3AnnexLUpNarrowband 0x02
-+#define kG994p1G992p3AnnexLUpWideband 0x01
-+#define kG994p1G992p3AnnexLDownNonoverlap 0x01
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 2 ***/
-+
-+#define kG994p1G992p3AnnexADownOverheadDataRate 0x01
-+#define kG994p1G992p3AnnexAUpOverheadDataRate 0x02
-+#define kG994p1G992p3AnnexAMaxNumberDownTPSTC 0x04
-+#define kG994p1G992p3AnnexAMaxNumberUpTPSTC 0x08
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 3,5,7,9 ***/
-+
-+#define kG994p1G992p3AnnexADownSTM_TPS_TC 0x01
-+#define kG994p1G992p3AnnexAUpSTM_TPS_TC 0x02
-+#define kG994p1G992p3AnnexADownATM_TPS_TC 0x04
-+#define kG994p1G992p3AnnexAUpATM_TPS_TC 0x08
-+#define kG994p1G992p3AnnexADownPTM_TPS_TC 0x10
-+#define kG994p1G992p3AnnexAUpPTM_TPS_TC 0x20
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 4,6,8,10 ***/
-+
-+#define kG994p1G992p3AnnexADownPMS_TC_Latency 0x01
-+#define kG994p1G992p3AnnexAUpPMS_TC_Latency 0x02
-+
-+/***
-+ * TSSI
-+ *
-+ * TSSI information is specified in 2 parts: subcarrier index,
-+ * tssi value, and an indication of whether or no the tone specified
-+ * is part of the supported set.
-+ *
-+ * The subcarrier index information is currently stored in the
-+ * dsSubcarrierIndex array defined below. The tssi value are stored
-+ * in the dsLog_tss array.
-+ *
-+ * The subcarrier index information only occupies the lower 12 bits
-+ * of the available 16 bits (short type). Therefore, we will pack the
-+ * supported set information in bit 15.
-+ */
-+#define kG992DsSubCarrierIndexMask (0x0fff) /* AND mask to ectract ds subcarrier index */
-+#define kG992DsSubCarrierSuppSetMask (0x8000) /* AND mask to extract supported set indication */
-+
-+#define G992GetDsSubCarrierIndex(arg) ((arg) & kG992DsSubCarrierIndexMask)
-+#define G992GetDsSubCarrierSuppSetIndication(arg) (((arg) & kG992DsSubCarrierSuppSetMask) >> 15)
-+
-+/* Caution: Do not change anything in this structure definition, including associated constant */
-+/* This structure definition is used only by the driver and any change impose incompatibility issue in driver */
-+/* The structure following this structure (g992p3PhyDataPumpCapabilities) can be changed in PHY application */
-+
-+typedef struct
-+ {
-+ Boolean rcvNTREnabled, shortInitEnabled, diagnosticsModeEnabled;
-+
-+ char featureSpectrum, featureOverhead;
-+ char featureTPS_TC[4], featurePMS_TC[4];
-+
-+ short rcvNOMPSDus, rcvMAXNOMPSDus, rcvMAXNOMATPus;
-+ short usSubcarrierIndex[kG992p3MaxSpectBoundsUpSize],
-+ usLog_tss[kG992p3MaxSpectBoundsUpSize];
-+ short numUsSubcarrier;
-+ short rcvNOMPSDds, rcvMAXNOMPSDds, rcvMAXNOMATPds;
-+ short dsSubcarrierIndex[kG992p3MaxSpectBoundsDownSize],
-+ dsLog_tss[kG992p3MaxSpectBoundsDownSize];
-+ short numDsSubcarrier;
-+ uchar sizeIDFT, fillIFFT;
-+ uchar readsl2Upstream, readsl2Downstream;
-+ uchar minDownOverheadDataRate, minUpOverheadDataRate;
-+ uchar maxDownSTM_TPSTC, maxDownATM_TPSTC, maxDownPTM_TPSTC;
-+ uchar maxUpSTM_TPSTC, maxUpATM_TPSTC, maxUpPTM_TPSTC;
-+
-+ short minDownSTM_TPS_TC[4], maxDownSTM_TPS_TC[4],
-+ minRevDownSTM_TPS_TC[4], maxDelayDownSTM_TPS_TC[4];
-+ uchar maxErrorDownSTM_TPS_TC[4], minINPDownSTM_TPS_TC[4];
-+ short minUpSTM_TPS_TC[4], maxUpSTM_TPS_TC[4],
-+ minRevUpSTM_TPS_TC[4], maxDelayUpSTM_TPS_TC[4];
-+ uchar maxErrorUpSTM_TPS_TC[4], minINPUpSTM_TPS_TC[4];
-+
-+ short maxDownPMS_TC_Latency[4], maxUpPMS_TC_Latency[4];
-+ short maxDownR_PMS_TC_Latency[4], maxDownD_PMS_TC_Latency[4];
-+ short maxUpR_PMS_TC_Latency[4], maxUpD_PMS_TC_Latency[4];
-+
-+ short minDownATM_TPS_TC[4], maxDownATM_TPS_TC[4],
-+ minRevDownATM_TPS_TC[4], maxDelayDownATM_TPS_TC[4];
-+ uchar maxErrorDownATM_TPS_TC[4], minINPDownATM_TPS_TC[4];
-+ short minUpATM_TPS_TC[4], maxUpATM_TPS_TC[4],
-+ minRevUpATM_TPS_TC[4], maxDelayUpATM_TPS_TC[4];
-+ uchar maxErrorUpATM_TPS_TC[4], minINPUpATM_TPS_TC[4];
-+
-+ short minDownPTM_TPS_TC[4], maxDownPTM_TPS_TC[4],
-+ minRevDownPTM_TPS_TC[4], maxDelayDownPTM_TPS_TC[4];
-+ uchar maxErrorDownPTM_TPS_TC[4], minINPDownPTM_TPS_TC[4];
-+ short minUpPTM_TPS_TC[4], maxUpPTM_TPS_TC[4],
-+ minRevUpPTM_TPS_TC[4], maxDelayUpPTM_TPS_TC[4];
-+ uchar maxErrorUpPTM_TPS_TC[4], minINPUpPTM_TPS_TC[4];
-+
-+ ushort subModePSDMasks;
-+ } g992p3DataPumpCapabilities;
-+
-+#define kG992p3p5MaxSpectBoundsUpSize 16
-+#define kG992p3p5MaxSpectBoundsDownSize 32
-+
-+typedef struct
-+ {
-+ Boolean rcvNTREnabled, shortInitEnabled, diagnosticsModeEnabled;
-+
-+ char featureSpectrum, featureOverhead;
-+ char featureTPS_TC[4], featurePMS_TC[4];
-+
-+ short rcvNOMPSDus, rcvMAXNOMPSDus, rcvMAXNOMATPus;
-+ short usSubcarrierIndex[kG992p3p5MaxSpectBoundsUpSize],
-+ usLog_tss[kG992p3p5MaxSpectBoundsUpSize];
-+ short numUsSubcarrier;
-+ short rcvNOMPSDds, rcvMAXNOMPSDds, rcvMAXNOMATPds;
-+ short dsSubcarrierIndex[kG992p3p5MaxSpectBoundsDownSize],
-+ dsLog_tss[kG992p3p5MaxSpectBoundsDownSize];
-+ short numDsSubcarrier;
-+ uchar sizeIDFT, fillIFFT;
-+ uchar readsl2Upstream, readsl2Downstream;
-+ uchar minDownOverheadDataRate, minUpOverheadDataRate;
-+ uchar maxDownSTM_TPSTC, maxDownATM_TPSTC, maxDownPTM_TPSTC;
-+ uchar maxUpSTM_TPSTC, maxUpATM_TPSTC, maxUpPTM_TPSTC;
-+
-+ short minDownSTM_TPS_TC[4], maxDownSTM_TPS_TC[4],
-+ minRevDownSTM_TPS_TC[4], maxDelayDownSTM_TPS_TC[4];
-+ uchar maxErrorDownSTM_TPS_TC[4], minINPDownSTM_TPS_TC[4];
-+ short minUpSTM_TPS_TC[4], maxUpSTM_TPS_TC[4],
-+ minRevUpSTM_TPS_TC[4], maxDelayUpSTM_TPS_TC[4];
-+ uchar maxErrorUpSTM_TPS_TC[4], minINPUpSTM_TPS_TC[4];
-+
-+ short maxDownPMS_TC_Latency[4], maxUpPMS_TC_Latency[4];
-+ short maxDownR_PMS_TC_Latency[4], maxDownD_PMS_TC_Latency[4];
-+ short maxUpR_PMS_TC_Latency[4], maxUpD_PMS_TC_Latency[4];
-+
-+ short minDownATM_TPS_TC[4], maxDownATM_TPS_TC[4],
-+ minRevDownATM_TPS_TC[4], maxDelayDownATM_TPS_TC[4];
-+ uchar maxErrorDownATM_TPS_TC[4], minINPDownATM_TPS_TC[4];
-+ short minUpATM_TPS_TC[4], maxUpATM_TPS_TC[4],
-+ minRevUpATM_TPS_TC[4], maxDelayUpATM_TPS_TC[4];
-+ uchar maxErrorUpATM_TPS_TC[4], minINPUpATM_TPS_TC[4];
-+
-+ short minDownPTM_TPS_TC[4], maxDownPTM_TPS_TC[4],
-+ minRevDownPTM_TPS_TC[4], maxDelayDownPTM_TPS_TC[4];
-+ uchar maxErrorDownPTM_TPS_TC[4], minINPDownPTM_TPS_TC[4];
-+ short minUpPTM_TPS_TC[4], maxUpPTM_TPS_TC[4],
-+ minRevUpPTM_TPS_TC[4], maxDelayUpPTM_TPS_TC[4];
-+ uchar maxErrorUpPTM_TPS_TC[4], minINPUpPTM_TPS_TC[4];
-+
-+ ushort subModePSDMasks;
-+ } g992p3PhyDataPumpCapabilities;
-+#endif
-+
-+typedef struct
-+ {
-+ dslModulationType modulations;
-+ bitMap auxFeatures;
-+ bitMap features;
-+ bitMap demodCapabilities;
-+ bitMap demodCapabilities2;
-+ ushort noiseMargin; /* Q4 dB */
-+#ifdef G992_ATUC
-+ short xmtRSf, xmtRS, xmtS, xmtD;
-+ short rcvRSf, rcvRS, rcvS, rcvD;
-+#endif
-+#ifdef G992P1_ANNEX_A
-+ bitMap subChannelInfo;
-+ carrierInfo carrierInfoG992p1;
-+#endif
-+#ifdef G992P1_ANNEX_B
-+ bitMap subChannelInfoAnnexB;
-+ carrierInfo carrierInfoG992p1AnnexB;
-+#endif
-+#ifdef G992_ANNEXC
-+ bitMap subChannelInfoAnnexC;
-+ carrierInfo carrierInfoG992p1AnnexC;
-+#endif
-+#if defined(G992P1_ANNEX_I)
-+ bitMap subChannelInfoAnnexI;
-+ carrierInfo carrierInfoG992p1AnnexI;
-+#endif
-+#ifdef G992P5
-+ bitMap subChannelInfop5;
-+ carrierInfo carrierInfoG992p5;
-+#endif
-+#if defined(G992P2) || (defined(G992P1_ANNEX_A) && defined(G992P1_ANNEX_A_USED_FOR_G992P2))
-+ carrierInfo carrierInfoG992p2;
-+#endif
-+ ushort maxDataRate;
-+ uchar minDataRate;
-+#ifdef G992P3
-+ g992p3DataPumpCapabilities *carrierInfoG992p3AnnexA;
-+#endif
-+#ifdef G992P5
-+ g992p3DataPumpCapabilities *carrierInfoG992p5AnnexA;
-+#endif
-+ } dslDataPumpCapabilities;
-+
-+struct __dslCommandStruct;
-+typedef Boolean (*dslCommandHandlerType) (void *gDslVars, struct __dslCommandStruct*);
-+typedef struct __dslCommandStruct
-+ {
-+ dslCommandCode command;
-+ union
-+ {
-+ long value;
-+ Boolean flag;
-+ struct
-+ {
-+ dslTestCmdType type;
-+ union
-+ {
-+ struct
-+ {
-+ ulong xmtStartTone, xmtNumOfTones;
-+ ulong rcvStartTone, rcvNumOfTones;
-+ uchar *xmtMap, *rcvMap;
-+ } toneSelectSpec;
-+ struct
-+ {
-+ long extraPowerRequestQ4dB;
-+ long numOfCarriers;
-+ char *marginTweakTableQ4dB;
-+ } marginTweakSpec;
-+ } param;
-+ } dslTestSpec;
-+ struct
-+ {
-+ dslDirectionType direction;
-+ dslDataPumpCapabilities capabilities;
-+ } dslModeSpec;
-+ struct
-+ {
-+ bitMap setup;
-+ ulong eyeConstIndex1;
-+ ulong eyeConstIndex2;
-+ ulong logTime;
-+ } dslDiagSpec;
-+ struct
-+ {
-+ void *pBuf;
-+ ulong bufSize;
-+ } dslStatusBufSpec;
-+ struct
-+ {
-+ ulong type;
-+ void *afeParamPtr;
-+ ulong afeParamSize;
-+ void *imagePtr;
-+ ulong imageSize;
-+ } dslAfeTestSpec;
-+ struct
-+ {
-+ dslLinkLayerType type;
-+ bitMap setup;
-+ union
-+ {
-+ struct
-+ {
-+ dataRateMap rxDataRate;
-+ dataRateMap txDataRate;
-+ long rtDelayQ4ms;
-+ ulong rxBufNum;
-+ ulong rxCellsInBuf;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslPhyInitType atmPhyInitPtr;
-+ } atmLinkSpec;
-+ struct
-+ {
-+ dslHeaderHandlerType rxHeaderHandlerPtr;
-+ dslRxFrameBufferHandlerType rxDataHandlerPtr;
-+ dslTxFrameBufferHandlerType txHandlerPtr;
-+ } atmPhyLinkSpec;
-+#ifdef DSL_PACKET
-+ struct
-+ {
-+ ulong rxBufNum;
-+ ulong rxBufSize;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslPacketPhyInitType dslPhyInitPtr;
-+ } dslPacketLinkSpec;
-+ dslPacketPhyFunctions dslPacketPhyLinkSpec;
-+#endif
-+ struct
-+ {
-+ txDataHandlerType txDataHandlerPtr;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ } nullLinkSpec;
-+ } param;
-+ } dslLinkLayerSpec;
-+#ifdef G997_1
-+#ifdef G997_1_FRAMER
-+ struct
-+ {
-+ bitMap setup;
-+ ulong rxBufNum;
-+ ulong rxBufSize;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ } dslG997Cmd;
-+#endif
-+ struct
-+ {
-+ long msgId;
-+ long msgType;
-+ char *dataPtr;
-+ } dslClearEocMsg;
-+#endif
-+ struct
-+ {
-+ ulong code;
-+ uchar *valuePtr;
-+ ulong length;
-+ } dslDataRegister;
-+ union
-+ {
-+ dslStatusHandlerType statusHandlerPtr;
-+ dslCommandHandlerType commandHandlerPtr;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+#if defined(DEBUG_DATA_HANDLER)
-+ debugDataHandlerType debugDataHandlerPtr;
-+#endif
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslDriverCallbackType driverCallback;
-+ } handlerSpec;
-+#if !defined(CHIP_SRC) || defined(DSL_FRAME_FUNCTIONS)
-+ dslFrameFunctions DslFunctions;
-+#endif
-+ dslOLRMessage dslOLRRequest;
-+ dslPwrMessage dslPwrMsg;
-+ } param;
-+ } dslCommandStruct;
-+
-+
-+
-+
-+typedef struct
-+ {
-+ dslCommandHandlerType linkCommandHandlerPtr;
-+ timerHandlerType linkTimerHandlerPtr;
-+ dslLinkCloseHandlerType linkCloseHandlerPtr;
-+
-+ dslFrameHandlerType linkSendHandlerPtr;
-+ dslFrameHandlerType linkReturnHandlerPtr;
-+
-+ dslVcAllocateHandlerType linkVcAllocateHandlerPtr;
-+ dslVcFreeHandlerType linkVcFreeHandlerPtr;
-+ dslVcActivateHandlerType linkVcActivateHandlerPtr;
-+ dslVcDeactivateHandlerType linkVcDeactivateHandlerPtr;
-+ dslVcConfigureHandlerType linkVcConfigureHandlerPtr;
-+
-+ dslLinkVc2IdHandlerType linkVc2IdHandlerPtr;
-+ dslLinkVcId2VcHandlerType linkVcId2VcHandlerPtr;
-+ dslGetFramePoolHandlerType linkGetFramePoolHandlerPtr;
-+
-+#ifndef ADSLCORE_ONLY
-+ dslHeaderHandlerType linkRxCellHeaderHandlerPtr;
-+ dslRxFrameBufferHandlerType linkRxCellDataHandlerPtr;
-+ dslTxFrameBufferHandlerType linkTxCellHandlerPtr;
-+#endif
-+
-+ txDataHandlerType linkTxDataHandlerPtr;
-+ rxDataHandlerType linkRxDataHandlerPtr;
-+ } linkLayerFunctions;
-+
-+#ifndef ADSLCORE_ONLY
-+
-+#define LinkLayerAssignFunctions( var, name_prefix ) do { \
-+ (var).linkCommandHandlerPtr = name_prefix##CommandHandler; \
-+ (var).linkTimerHandlerPtr = name_prefix##TimerHandler; \
-+ (var).linkCloseHandlerPtr = name_prefix##CloseHandler; \
-+ \
-+ (var).linkSendHandlerPtr = name_prefix##SendFrameHandler; \
-+ (var).linkReturnHandlerPtr = name_prefix##ReturnFrameHandler; \
-+ \
-+ (var).linkVcAllocateHandlerPtr = name_prefix##VcAllocateHandler; \
-+ (var).linkVcFreeHandlerPtr = name_prefix##VcFreeHandler; \
-+ (var).linkVcActivateHandlerPtr = name_prefix##VcActivateHandler; \
-+ (var).linkVcDeactivateHandlerPtr = name_prefix##VcDeactivateHandler; \
-+ (var).linkVcConfigureHandlerPtr = name_prefix##VcConfigureHandler; \
-+ \
-+ (var).linkVc2IdHandlerPtr = name_prefix##Vc2IdHandler; \
-+ (var).linkVcId2VcHandlerPtr = name_prefix##VcId2VcHandler; \
-+ (var).linkGetFramePoolHandlerPtr = name_prefix##GetFramePoolHandler; \
-+ \
-+ (var).linkRxCellHeaderHandlerPtr = name_prefix##RxCellHeaderHandler; \
-+ (var).linkRxCellDataHandlerPtr = name_prefix##RxCellDataHandler; \
-+ (var).linkTxCellHandlerPtr = name_prefix##TxCellHandler; \
-+ \
-+ (var).linkTxDataHandlerPtr = name_prefix##TxDataHandler; \
-+ (var).linkRxDataHandlerPtr = name_prefix##RxDataHandler; \
-+} while (0)
-+
-+#else
-+
-+#define LinkLayerAssignFunctions( var, name_prefix ) do { \
-+ (var).linkCommandHandlerPtr = name_prefix##CommandHandler; \
-+ (var).linkTimerHandlerPtr = name_prefix##TimerHandler; \
-+ (var).linkCloseHandlerPtr = name_prefix##CloseHandler; \
-+ \
-+ (var).linkSendHandlerPtr = name_prefix##SendFrameHandler; \
-+ (var).linkReturnHandlerPtr = name_prefix##ReturnFrameHandler; \
-+ \
-+ (var).linkVcAllocateHandlerPtr = name_prefix##VcAllocateHandler; \
-+ (var).linkVcFreeHandlerPtr = name_prefix##VcFreeHandler; \
-+ (var).linkVcActivateHandlerPtr = name_prefix##VcActivateHandler; \
-+ (var).linkVcDeactivateHandlerPtr = name_prefix##VcDeactivateHandler; \
-+ (var).linkVcConfigureHandlerPtr = name_prefix##VcConfigureHandler; \
-+ \
-+ (var).linkVc2IdHandlerPtr = name_prefix##Vc2IdHandler; \
-+ (var).linkVcId2VcHandlerPtr = name_prefix##VcId2VcHandler; \
-+ (var).linkGetFramePoolHandlerPtr = name_prefix##GetFramePoolHandler; \
-+ \
-+ (var).linkTxDataHandlerPtr = name_prefix##TxDataHandler; \
-+ (var).linkRxDataHandlerPtr = name_prefix##RxDataHandler; \
-+} while (0)
-+
-+#endif
-+
-+typedef struct
-+ {
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+ } upperLayerFunctions;
-+
-+
-+/*
-+ * Debug data
-+ */
-+#define kDslFirstDebugData 1000
-+#define kDslXmtPerSymTimeCompData (kDslFirstDebugData + 0)
-+#define kDslRcvPerSymTimeCompData (kDslFirstDebugData + 1)
-+#define kDslXmtAccTimeCompData (kDslFirstDebugData + 2)
-+#define kDslRcvAccTimeCompData (kDslFirstDebugData + 3)
-+#define kDslRcvPilotToneData (kDslFirstDebugData + 4)
-+#define kDslTEQCoefData (kDslFirstDebugData + 5)
-+#define kDslTEQInputData (kDslFirstDebugData + 6)
-+#define kDslTEQOutputData (kDslFirstDebugData + 7)
-+#define kDslRcvFFTInputData (kDslFirstDebugData + 8)
-+#define kDslRcvFFTOutputData (kDslFirstDebugData + 9)
-+#define kDslRcvCarrierSNRData (kDslFirstDebugData + 10)
-+#define kDslXmtToneOrderingData (kDslFirstDebugData + 11)
-+#define kDslRcvToneOrderingData (kDslFirstDebugData + 12)
-+#define kDslXmtGainData (kDslFirstDebugData + 13)
-+#define kDslRcvGainData (kDslFirstDebugData + 14)
-+#define kDslMseData (kDslFirstDebugData + 15)
-+#define kDslFEQOutErrData (kDslFirstDebugData + 16)
-+#define kDslFEQCoefData (kDslFirstDebugData + 17)
-+#define kDslShowtimeMseData (kDslFirstDebugData + 18)
-+#define kDslTimeEstimationHWPhaseTweak (kDslFirstDebugData + 24)
-+#define kDslSlicerInput (kDslFirstDebugData + 40)
-+#define kDslXmtConstellations (kDslFirstDebugData + 41)
-+#define kDslSnr1ShiftData (kDslFirstDebugData + 50)
-+#define kDslSnr1InputData (kDslFirstDebugData + 51)
-+#define kDslSnr1ReverbAvgData (kDslFirstDebugData + 52)
-+#define kDslAnnexCFextSnrData (kDslFirstDebugData + 53)
-+#define kDslAnnexCNextSnrData (kDslFirstDebugData + 54)
-+#define kG994p1OutputXmtSample (kDslFirstDebugData + 100)
-+#define kG994p1OutputMicroBit (kDslFirstDebugData + 101)
-+#define kG994p1OutputBit (kDslFirstDebugData + 102)
-+#define kG994p1OutputTimer (kDslFirstDebugData + 103)
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.1 Defininitive constants */
-+/****************************************************************************/
-+
-+/* dslDirectionType */
-+
-+#define kATU_C 0
-+#define kATU_R 1
-+
-+/* ATM setup maps */
-+
-+#define kAtmCallMgrEnabled 0x00000001 /* Bit 0 */
-+#define kAtmAAL1FecEnabledMask 0x00000006 /* Bit 1 */
-+#define kAtmAAL1HiDelayFecEnabled 0x00000002 /* Bit 2 */
-+#define kAtmAAL1LoDelayFecEnabled 0x00000004 /* Bit 3 */
-+
-+/* dslLinkLayerType */
-+
-+#define kNoDataLink 0
-+#define kAtmLink 0x00000001
-+#define kAtmPhyLink 0x00000002
-+#define kDslPacketLink 0x00000003
-+#define kDslPacketPhyLink 0x00000004
-+
-+/* dslModulationType */
-+#define kNoCommonModulation 0x00000000
-+#define kG994p1 0x00000020 /* G.994.1 or G.hs */
-+#define kT1p413 0x00000040 /* T1.413 handshaking */
-+#define kG992p1AnnexA 0x00000001 /* G.992.1 or G.dmt Annex A */
-+#define kG992p1AnnexB 0x00000002 /* G.992.1 or G.dmt Annex B */
-+#define kG992p1AnnexC 0x00000004 /* G.992.1 or G.dmt Annex C */
-+#define kG992p2AnnexAB 0x00000008 /* G.992.2 or G.lite Annex A/B */
-+#define kG992p2AnnexC 0x00000010 /* G.992.2 or G.lite Annex C */
-+#define kG992p3AnnexA 0x00000100 /* G.992.3 or G.DMTbis Annex A */
-+#define kG992p3AnnexB 0x00000200 /* G.992.3 or G.DMTbis Annex A */
-+#define kG992p1AnnexI 0x00000400 /* G.992.1 Annex I */
-+#define kG992p5AnnexA 0x00010000 /* G.992.5 Annex A */
-+#define kG992p5AnnexB 0x00020000 /* G.992.5 Annex B */
-+#define kG992p5AnnexI 0x00040000 /* G.992.5 Annex I */
-+#define kG992p3AnnexM 0x00080000 /* G.992.3 Annex M */
-+#define kG992p5AnnexM 0x01000000 /* G.992.5 Annex M */
-+
-+/* demodCapabilities bitmap */
-+#define kEchoCancellorEnabled 0x00000001
-+#define kSoftwareTimeErrorDetectionEnabled 0x00000002
-+#define kSoftwareTimeTrackingEnabled 0x00000004
-+#define kDslTrellisEnabled 0x00000008
-+#define kHardwareTimeTrackingEnabled 0x00000010
-+#define kHardwareAGCEnabled 0x00000020
-+#define kDigitalEchoCancellorEnabled 0x00000040
-+#define kReedSolomonCodingEnabled 0x00000080
-+#define kAnalogEchoCancellorEnabled 0x00000100
-+#define kT1p413Issue1SingleByteSymMode 0x00000200
-+#define kDslAturXmtPowerCutbackEnabled 0x00000400
-+#ifdef G992_ANNEXC_LONG_REACH
-+#define kDslAnnexCPilot48 0x00000800
-+#define kDslAnnexCReverb33_63 0x00001000
-+#endif
-+#ifdef G992_ANNEXC
-+#define kDslCentilliumCRCWorkAroundEnabled 0x00002000
-+#else
-+#define kDslEnableRoundUpDSLoopAttn 0x00002000
-+#endif
-+#define kDslBitSwapEnabled 0x00004000
-+#define kDslADILowRateOptionFixDisabled 0x00008000
-+#define kDslAnymediaGSPNCrcFixEnabled 0x00010000
-+#define kDslMultiModesPreferT1p413 0x00020000
-+#define kDslT1p413UseRAck1Only 0x00040000
-+#define kDslUE9000ADI918FECFixEnabled 0x00080000
-+#define kDslG994AnnexAMultimodeEnabled 0x00100000
-+#define kDslATUCXmtPowerMinimizeEnabled 0x00200000
-+#define kDropOnDataErrorsDisabled 0x00400000
-+#define kDslSRAEnabled 0x00800000
-+
-+#define kDslT1p413HigherToneLevelNeeded 0x01000000
-+#define kDslT1p413SubsampleAlignmentEnabled 0x02000000
-+#define kDslT1p413DisableUpstream2xIfftMode 0x04000000
-+
-+/* test mode related demodCapabilities, for internal use only */
-+#define kDslTestDemodCapMask 0xF8000000
-+#define kDslSendReverbModeEnabled 0x10000000
-+#define kDslSendMedleyModeEnabled 0x20000000
-+#define kDslAutoRetrainDisabled 0x40000000
-+#define kDslPllWorkaroundEnabled 0x80000000
-+#define kDslAfeLoopbackModeEnabled 0x08000000
-+
-+/* demodCapabilities bitmap2 */
-+
-+#define kDslAnnexCProfile1 0x00000001
-+#define kDslAnnexCProfile2 0x00000002
-+#define kDslAnnexCProfile3 0x00000004
-+#define kDslAnnexCProfile4 0x00000008
-+#define kDslAnnexCProfile5 0x00000010
-+#define kDslAnnexCProfile6 0x00000020
-+#define kDslAnnexCPilot64 0x00000040
-+#define kDslAnnexCPilot48 0x00000080
-+#define kDslAnnexCPilot32 0x00000100
-+#define kDslAnnexCPilot16 0x00000200
-+#define kDslAnnexCA48B48 0x00000400
-+#define kDslAnnexCA24B24 0x00000800
-+#define kDslAnnexCReverb33_63 0x00001000
-+#define kDslAnnexCCReverb6_31 0x00002000
-+
-+#define kDslAnnexIShapedSSVI 0x00004000
-+#define kDslAnnexIFlatSSVI 0x00008000
-+
-+#define kDslAnnexIPilot64 0x00010000
-+#define kDslAnnexIA48B48 0x00020000
-+#define kDslAnnexIPilot128 0x00040000
-+#define kDslAnnexIPilot96 0x00080000
-+
-+/* Features bitmap */
-+#define kG992p2RACK1 0x00000001
-+#define kG992p2RACK2 0x00000002
-+#define kG992p2DBM 0x00000004
-+#define kG992p2FastRetrain 0x00000008
-+#define kG992p2RS16 0x00000010
-+#define kG992p2ClearEOCOAM 0x00000020
-+#define kG992NTREnabled 0x00000040
-+#define kG992p2EraseAllStoredProfiles 0x00000080
-+#define kG992p2FeaturesNPar2Mask 0x0000003B
-+#define kG992p2FeaturesNPar2Shift 0
-+
-+#define kG992p1RACK1 0x00000100
-+#define kG992p1RACK2 0x00000200
-+#define kG992p1STM 0x00000800
-+#define kG992p1ATM 0x00001000
-+#define kG992p1ClearEOCOAM 0x00002000
-+#define kG992p1FeaturesNPar2Mask 0x00003B00
-+#define kG992p1FeaturesNPar2Shift 8
-+#define kG992p1DualLatencyUpstream 0x00004000
-+#define kG992p1DualLatencyDownstream 0x00008000
-+#define kG992p1HigherBitRates 0x40000000
-+
-+#if defined(G992P1_ANNEX_I)
-+#define kG992p1HigherBitRates1over3 0x80000000
-+#define kG992p1AnnexIShapedSSVI 0x00000001
-+#define kG992p1AnnexIFlatSSVI 0x00000002
-+#define kG992p1AnnexIPilotFlag 0x00000008
-+#define kG992p1AnnexIPilot64 0x00000001
-+#define kG992p1AnnexIPilot128 0x00000004
-+#define kG992p1AnnexIPilot96 0x00000008
-+#define kG992p1AnnexIPilotA48B48 0x00000010
-+#endif
-+
-+#define kG992p1AnnexBRACK1 0x00010000
-+#define kG992p1AnnexBRACK2 0x00020000
-+#define kG992p1AnnexBUpstreamTones1to32 0x00040000
-+#define kG992p1AnnexBSTM 0x00080000
-+#define kG992p1AnnexBATM 0x00100000
-+#define kG992p1AnnexBClearEOCOAM 0x00200000
-+#define kG992p1AnnexBFeaturesNPar2Mask 0x003F0000
-+#define kG992p1AnnexBFeaturesNPar2Shift 16
-+
-+#define kG992p1AnnexCRACK1 0x01000000
-+#define kG992p1AnnexCRACK2 0x02000000
-+#define kG992p1AnnexCDBM 0x04000000
-+#define kG992p1AnnexCSTM 0x08000000
-+#define kG992p1AnnexCATM 0x10000000
-+#define kG992p1AnnexCClearEOCOAM 0x20000000
-+#define kG992p1AnnexCFeaturesNPar2Mask 0x3F000000
-+#define kG992p1AnnexCFeaturesNPar2Shift 24
-+
-+#define kG992p1HigherBitRates1over3 0x80000000
-+
-+/* auxFeatures bitmap */
-+#define kG994p1PreferToExchangeCaps 0x00000001
-+#define kG994p1PreferToDecideMode 0x00000002
-+#define kG994p1PreferToMPMode 0x00000004
-+#define kAfePwmSyncClockShift 3
-+#define kAfePwmSyncClockMask (0xF << kAfePwmSyncClockShift)
-+#define AfePwmSyncClockEnabled(val) (((val) & kAfePwmSyncClockMask) != 0)
-+#define AfePwmGetSyncClockFreq(val) ((((val) & kAfePwmSyncClockMask) >> kAfePwmSyncClockShift) - 1)
-+#define AfePwmSetSyncClockFreq(val,freq) ((val) |= ((((freq)+1) << kAfePwmSyncClockShift) & kAfePwmSyncClockMask))
-+
-+/* SubChannel Info bitMap for G992p1 */
-+#define kSubChannelASODownstream 0x00000001
-+#define kSubChannelAS1Downstream 0x00000002
-+#define kSubChannelAS2Downstream 0x00000004
-+#define kSubChannelAS3Downstream 0x00000008
-+#define kSubChannelLSODownstream 0x00000010
-+#define kSubChannelLS1Downstream 0x00000020
-+#define kSubChannelLS2Downstream 0x00000040
-+#define kSubChannelLS0Upstream 0x00000080
-+#define kSubChannelLS1Upstream 0x00000100
-+#define kSubChannelLS2Upstream 0x00000200
-+#define kSubChannelInfoOctet1Mask 0x0000001F
-+#define kSubChannelInfoOctet2Mask 0x000003E0
-+#define kSubChannelInfoOctet1Shift 0
-+#define kSubChannelInfoOctet2Shift 5
-+
-+/****************************************************************************/
-+/* 3. Interface functions. */
-+/* */
-+/****************************************************************************/
-+
-+#ifdef G992P1
-+#if defined(G992P1_ANNEX_I2X) || defined(G992P5)
-+/* lke */
-+#define kDslSamplingFreq 4416000
-+#define kDslMaxFFTSize 1024
-+#define kDslMaxFFTSizeShift 10
-+#elif defined(G992P1_ANNEX_I4X)
-+#define kDslSamplingFreq 8832000
-+#define kDslMaxFFTSize 2048
-+#define kDslMaxFFTSizeShift 11
-+#elif defined(G992P1_ANNEX_I8X)
-+#define kDslSamplingFreq 17664000
-+#define kDslMaxFFTSize 4096
-+#define kDslMaxFFTSizeShift 12
-+#else
-+#define kDslSamplingFreq 2208000
-+#define kDslMaxFFTSize 512
-+#define kDslMaxFFTSizeShift 9
-+#endif
-+#else
-+#define kDslSamplingFreq 1104000
-+#define kDslMaxFFTSize 256
-+#define kDslMaxFFTSizeShift 8
-+#endif
-+
-+#if defined(G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ)
-+#define kDslATURUpstreamSamplingFreq 276000
-+#define kDslATURFFTSizeShiftUpstream 6
-+#elif defined(G992_ATUR_UPSTREAM_SAMPLING_FREQ_552KHZ)
-+#define kDslATURUpstreamSamplingFreq 552000
-+#define kDslATURFFTSizeShiftUpstream 7
-+#else
-+#define kDslATURUpstreamSamplingFreq kDslSamplingFreq
-+#define kDslATURFFTSizeShiftUpstream kDslMaxFFTSizeShift
-+#endif
-+
-+#if defined(G992_ATUC_UPSTREAM_SAMPLING_FREQ_276KHZ)
-+#define kDslATUCUpstreamSamplingFreq 276000
-+#define kDslATUCFFTSizeShiftUpstream 6
-+#elif defined(G992_ATUC_UPSTREAM_SAMPLING_FREQ_552KHZ)
-+#define kDslATUCUpstreamSamplingFreq 552000
-+#define kDslATUCFFTSizeShiftUpstream 7
-+#else
-+#define kDslATUCUpstreamSamplingFreq kDslSamplingFreq
-+#define kDslATUCFFTSizeShiftUpstream kDslMaxFFTSizeShift
-+#endif
-+
-+#define kDslMaxSamplesPerSymbol (kDslMaxFFTSize+kDslMaxFFTSize/16)
-+
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+#define kDslMaxTEQLength 32
-+#else
-+#define kDslMaxTEQLength 16
-+#endif
-+
-+#define kDslMaxSymbolBlockSize 1
-+#define kDslMaxSampleBlockSize (kDslMaxSymbolBlockSize*kDslMaxSamplesPerSymbol)
-+
-+#ifdef G992_ANNEXC
-+#define kG992AnnexCXmtToRcvPathDelay 512 /* In samples at kDslSamplingFreq */
-+#endif
-+
-+/*** For compatibility with existing test codes ***/
-+#if !defined(TARG_OS_RTEMS)
-+typedef dslStatusCode modemStatusCode;
-+typedef dslStatusStruct modemStatusStruct;
-+typedef dslStatusHandlerType statusHandlerType;
-+typedef dslCommandCode modemCommandCode;
-+typedef dslCommandStruct modemCommandStruct;
-+typedef dslCommandHandlerType commandHandlerType;
-+#endif
-+
-+extern void SM_DECL SoftDslSetRefData (void *gDslVars, ulong refData);
-+extern ulong SM_DECL SoftDslGetRefData (void *gDslVars);
-+extern int SM_DECL SoftDslGetMemorySize(void);
-+extern void SM_DECL SoftDslInit (void *gDslVars);
-+extern void SM_DECL SoftDslReset (void *gDslVars);
-+extern void SM_DECL SoftDslLineHandler (void *gDslVars, int rxNSamps, int txNSamps, short *rcvPtr, short *xmtPtr) FAST_TEXT;
-+extern Boolean SM_DECL SoftDslCommandHandler (void *gDslVars, dslCommandStruct *cmdPtr);
-+
-+/* swap Lmem functions */
-+#if defined(bcm47xx) && defined(SWAP_LMEM)
-+extern int SoftDslSwapLmem(void *gDslVars, int sectionN, int imageN);
-+extern void init_SoftDslSwapLmem(void);
-+#endif
-+
-+/* SoftDsl time functions */
-+
-+extern ulong SM_DECL SoftDslGetTime(void *gDslVars);
-+#define __SoftDslGetTime(gv) gDslGlobalVarPtr->execTime
-+
-+extern void SM_DECL SoftDslTimer(void *gDslVars, ulong timeMs);
-+
-+/* SoftDsl IO functions */
-+
-+extern void SM_DECL SoftDslClose (void *gDslVars);
-+extern int SM_DECL SoftDslSendFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+extern int SM_DECL SoftDslReturnFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+
-+/* SoftDsl connection functions */
-+
-+extern void* SM_DECL SoftDslVcAllocate(void *gDslVars, dslVcParams *pVcParams);
-+extern void SM_DECL SoftDslVcFree(void *gDslVars, void *pVc);
-+extern Boolean SM_DECL SoftDslVcActivate(void *gDslVars, void *pVc);
-+extern void SM_DECL SoftDslVcDeactivate(void *gDslVars, void *pVc);
-+extern Boolean SM_DECL SoftDslVcConfigure(void *gDslVars, void *pVc, ulong mid, dslVcParams *pVcParams);
-+
-+/* Special functions for LOG support */
-+
-+extern ulong SM_DECL SoftDslVc2Id(void *gDslVars, void *pVc);
-+extern void* SM_DECL SoftDslVcId2Vc(void *gDslVars, ulong vcId);
-+extern void* SM_DECL SoftDslGetFramePool(void *gDslVars);
-+
-+/* Functions for host mode execution */
-+
-+extern void* SM_DECL SoftDslRxCellHeaderHandler (void *gDslVars, ulong hdr, uchar hdrHec);
-+extern void* SM_DECL SoftDslRxCellDataHandler (void *gDslVars, int, void*);
-+extern void* SM_DECL SoftDslTxCellHandler (void *gDslVars, int*, void*);
-+extern Boolean SM_DECL SoftDslPhyCommandHandler (void *gDslVars, dslCommandStruct *cmdPtr);
-+
-+/* Functions getting OEM parameters including G994 non standard info management */
-+
-+extern char* SM_DECL SoftDslGetTrainingVendorIDString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetVendorIDString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetSerialNumberString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetRevString(void *gDslVars);
-+extern int SM_DECL SoftDslRevStringSize(void *gDslVars);
-+extern int SM_DECL SoftDslSerNumStringSize(void *gDslVars);
-+
-+extern void* SM_DECL SoftDslGetG994p1RcvNonStdInfo(void *gDslVars, ulong *pLen);
-+extern void* SM_DECL SoftDslGetG994p1XmtNonStdInfo(void *gDslVars, ulong *pLen);
-+
-+#ifdef G997_1_FRAMER
-+
-+/* G997 functions */
-+
-+extern int SM_DECL SoftDslG997SendFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+extern int SM_DECL SoftDslG997ReturnFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+
-+#endif
-+
-+#ifdef ADSL_MIB
-+extern void * SM_DECL SoftDslMibGetData (void *gDslVars, int dataId, void *pAdslMibData);
-+#endif
-+
-+#define SoftDsl SoftDslLineHandler
-+#define kSoftDslMaxMemorySize (32768*16384)
-+
-+/*
-+ * Internal functions
-+ */
-+
-+extern void SoftDslStatusHandler (void *gDslVars, dslStatusStruct *status) FAST_TEXT;
-+extern void SoftDslInternalStatusHandler (void *gDslVars, dslStatusStruct *status);
-+
-+/*
-+ * DSL OS functions
-+ */
-+
-+#ifdef DSL_OS
-+
-+#define SoftDslIsBgAvailable(gDslVars) (DSLOS_THREAD_INACTIVE == DslOsGetThreadState(&(gDslGlobalVarPtr->tcbDslBg)))
-+#define SoftDslGetBgThread(gDslVars) \
-+ ((DSLOS_THREAD_INACTIVE != DslOsGetThreadState(&(gDslGlobalVarPtr->tcbDslBg))) ? &gDslGlobalVarPtr->tcbDslBg : NULL)
-+#define SoftDslBgStart(gDslVars, pFunc) \
-+ DslOsCreateThread(&gDslGlobalVarPtr->tcbDslBg, DSLOS_PRIO_HIGHEST - 10, pFunc, gDslVars, \
-+ WB_ADDR(gDslGlobalVarPtr->bgStack), sizeof(gDslGlobalVarPtr->bgStack))
-+#define SoftDslBgStop(gDslVars) DslOsDeleteThread(&gDslGlobalVarPtr->tcbDslBg)
-+
-+#define SoftDslEnterCritical() DslOsEnterCritical()
-+#define SoftDslLeaveCritical(id) DslOsLeaveCritical(id)
-+
-+#else
-+
-+#define SoftDslIsBgAvailable(gDslVars) 1
-+#define SoftDslGetBgThread(gDslVars) 1
-+#define SoftDslBgStart(gDslVars, pFunc) (*pFunc)(gDslVars)
-+#define SoftDslBgStop(gDslVars)
-+
-+#define SoftDslEnterCritical() 0
-+#define SoftDslLeaveCritical(id)
-+
-+#endif
-+
-+/*
-+ * DSL frames and native frame functions
-+ */
-+
-+DslFrameDeclareFunctions (DslFrameNative)
-+
-+/*
-+ * These functions are for testing purpose, they are defined outside.
-+ */
-+#ifdef STACK_SIZE_REQUIREMENT_TEST
-+extern void StackSizeTestInitializeStackBeforeEntry(void);
-+extern void StackSizeTestCheckStackAfterExit(void);
-+extern void StackSizeTestBackupStack(void);
-+extern void StackSizeTestRestoreStack(void);
-+#endif /* STACK_SIZE_REQUIREMENT_TEST */
-+
-+#ifdef NEC_NSIF_WORKAROUND
-+#define SoftDslGetG994NsStatus(gDslVars) (gDslGlobalVarPtr->G994NsStatus)
-+#define SoftDslGetG994NsFailCounter(gDslVars) (gDslGlobalVarPtr->G994NsFailCounter)
-+#endif
-+
-+#endif /* SoftDslHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModem.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModem.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModem.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,3128 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftModem.h
-+ *
-+ *
-+ * Description:
-+ * This file contains the exported interface for SoftModem.c
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.16 $
-+ *
-+ * $Id: SoftModem.h,v 1.16 2004/04/14 21:16:51 ilyas Exp $
-+ *
-+ * $Log: SoftModem.h,v $
-+ * Revision 1.16 2004/04/14 21:16:51 ilyas
-+ * Merged with the latest changes in ADSL driver
-+ *
-+ * Revision 1.15 2004/04/13 00:56:10 ilyas
-+ * Merged the latest ADSL driver changes for RTEMS
-+ *
-+ * Revision 1.14 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.13 2003/02/22 05:07:11 ilyas
-+ * Added VendorID for T1.413 mode
-+ *
-+ * Revision 1.12 2002/10/03 19:34:24 ilyas
-+ * Added size for EOC serial number register
-+ *
-+ * Revision 1.11 2002/09/07 01:37:22 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.10 2001/12/13 02:25:34 ilyas
-+ * Added definitions for G997
-+ *
-+ * Revision 1.9 2001/11/30 05:56:34 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.7.2.2 2001/11/27 02:32:05 liang
-+ * Combine vendor ID, serial #, and version number into SoftModemVersionNumber.c.
-+ *
-+ * Revision 1.7.2.1 2001/10/03 01:44:10 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.8 2001/09/21 19:19:01 ilyas
-+ * Minor fixes for VxWorks build
-+ *
-+ * Revision 1.7 2000/07/17 21:08:16 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.6 2000/05/03 04:09:11 ilyas
-+ * Added ID for ATM log data
-+ *
-+ * Revision 1.5 2000/04/01 01:07:44 liang
-+ * Changed file names and some module names.
-+ *
-+ * Revision 1.4 2000/03/02 20:18:12 ilyas
-+ * Added test status code for ATM VC finished
-+ *
-+ * Revision 1.3 1999/08/05 20:02:11 liang
-+ * Merged with the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.2 1999/01/27 22:19:08 liang
-+ * Merge with SoftModem_3_1_02.
-+ * Include SoftDsl.h conditionlly so that the test utilities from SoftModem
-+ * can be used without major change. It can be merged easily to SoftModem.
-+ *
-+ * Revision 1.170 1998/12/22 00:52:52 liang
-+ * Added auxFeatures bit kV8HoldANSamUntilDetCI. When it is set, ANSam won't be
-+ * sent until CI is detected (normally ANSam will be sent after 200ms). This is
-+ * useful in V34 half duplex fax mode.
-+ *
-+ * Revision 1.169 1998/12/19 04:46:52 mwg
-+ * Added bits for fax/data calling tones
-+ *
-+ * Revision 1.168 1998/12/17 02:46:10 scott
-+ * Removed overlay-related commands/statuses and added
-+ * kSetTrainingDelayReductionCmd
-+ *
-+ * Revision 1.167 1998/12/12 03:17:42 scott
-+ * Added overlay commands and statuses
-+ *
-+ * Revision 1.166 1998/12/02 05:34:23 mwg
-+ * Fixed a problem with bong tone detection
-+ *
-+ * Revision 1.165 1998/11/26 00:22:44 yura
-+ * Added two more log data types: modulatorInputData & modulatorOutputData
-+ *
-+ * Revision 1.164 1998/11/19 03:08:04 mwg
-+ * Added kSetCallProgressParamsCmd
-+ *
-+ * Revision 1.163 1998/11/18 23:00:03 liang
-+ * Added a separate command kLoopbackTestAutoRespEnableCmd to enable or disable
-+ * the loopback test auto respond feature when the modem is already on-line.
-+ *
-+ * Revision 1.162 1998/11/13 20:50:21 scott
-+ * SoftModemInternalStatusHandler is now SM_DECL as well
-+ *
-+ * Revision 1.161 1998/11/13 20:42:25 scott
-+ * Added SM_DECL type to entrypoint functions
-+ *
-+ * Revision 1.160 1998/11/13 03:02:54 scott
-+ * Added SoftModemTimer prototype.
-+ * Also include V.8bis types if AT_COMMANDS_V8BIS is defined.
-+ *
-+ * Revision 1.159 1998/11/12 01:22:46 scott
-+ * Increased number of AT registers to 46
-+ *
-+ * Revision 1.158 1998/11/05 22:35:18 yura
-+ * Added two more S-registers
-+ *
-+ * Revision 1.157 1998/11/05 03:09:54 mwg
-+ * Added kLapmRetryFailed to the list of LAPM errors
-+ *
-+ * Revision 1.156 1998/11/05 00:13:20 liang
-+ * Add new connectionInfo status kLoopbackSelfTestNewErrs to report
-+ * new bit errors whenever it happens.
-+ *
-+ * Revision 1.155 1998/11/04 07:11:33 mwg
-+ * Moved declaration for SoftModemATPrintf() to SoftModem.h
-+ *
-+ * Revision 1.154 1998/10/29 07:24:49 mwg
-+ * *** empty log message ***
-+ *
-+ * Revision 1.153 1998/10/15 02:09:37 luisgm
-+ * added separate data rate mask for Flex to dataPumpCapabilities structure
-+ *
-+ * Revision 1.152 1998/10/14 00:12:15 scott
-+ * Added kMnpOOBFrameCmd and command.frameSpec
-+ *
-+ * Revision 1.151 1998/10/09 02:19:22 luisgm
-+ * added FlexV8bisStruct member to dataPumpCapabilities struc to store flex v8bis info, added define for kFlexSkipV8bis
-+ *
-+ * Revision 1.150 1998/10/06 19:36:33 mwg
-+ * Limited 56K rates to 53K
-+ *
-+ * Revision 1.149 1998/10/03 03:43:38 ilyas
-+ * Added status codes for Audio
-+ *
-+ * Revision 1.148 1998/10/01 02:03:17 mwg
-+ * Added external pulse dialer option
-+ *
-+ * Revision 1.147 1998/09/30 01:44:26 mwg
-+ * Added new functions SoftModemGetWriteBufferSize() & SoftModemGetReadBufferSize()
-+ *
-+ * Revision 1.146 1998/09/22 03:44:38 scott
-+ * Added ALWAYS_LONG_ALIGN() macro
-+ *
-+ * Revision 1.145 1998/09/21 21:49:22 scott
-+ * Added logDataCodes for mnpDecoder(Input/Output)Data
-+ *
-+ * Revision 1.144 1998/08/31 22:57:21 luisgm
-+ * added constants for Flex data rates + kFlexEventTRN2AFinished
-+ *
-+ * Revision 1.143 1998/08/18 05:09:53 mwg
-+ * Increased AT command buffer size to 128
-+ *
-+ * Revision 1.142 1998/08/18 03:45:54 ilyas
-+ * Integrated Audio into V70 test
-+ *
-+ * Revision 1.141 1998/08/14 17:46:04 ilyas
-+ * Integrated Audio and G729a
-+ *
-+ * Revision 1.140 1998/08/10 21:42:19 mwg
-+ * Added space and mark parity
-+ *
-+ * Revision 1.139 1998/08/08 03:39:33 scott
-+ * Moved the C6xDefs and PentiumDefs includes before the internal function
-+ * prototypes (to permit their redefinitions)
-+ *
-+ * Revision 1.138 1998/08/07 20:37:27 yura
-+ * Added new S-register for &T commands
-+ *
-+ * Revision 1.137 1998/08/01 05:22:09 mwg
-+ * Implemented split memory model
-+ *
-+ * Revision 1.136 1998/07/22 02:12:22 liang
-+ * Added self test mode for loopback test.
-+ *
-+ * Revision 1.135 1998/07/21 01:19:03 liang
-+ * Changed loopback test command parameter interface to use regular modeSpec.
-+ *
-+ * Revision 1.134 1998/07/18 03:52:10 liang
-+ * Added V54 loop 2 test for V22.
-+ *
-+ * Revision 1.133 1998/07/15 02:45:03 mwg
-+ * Added new connection info code: kPCMSpectralShapingBits
-+ *
-+ * Revision 1.132 1998/07/15 00:18:48 liang
-+ * Add special turn off command for V34 fax to handle different turn off procedures.
-+ *
-+ * Revision 1.131 1998/07/13 22:19:49 liang
-+ * Add V8 CI detection status and ANSam disable aux feature.
-+ *
-+ * Revision 1.130 1998/07/08 17:09:13 scott
-+ * Added USE_LONG_ALIGN; support for 6 and PentiumDefs.h files
-+ *
-+ * Revision 1.129 1998/07/03 23:28:13 mwg
-+ * Added Fax Class 2 defines
-+ *
-+ * Revision 1.128 1998/07/03 23:17:33 mwg
-+ * Insuread command/status structures are long aligned
-+ *
-+ * Revision 1.127 1998/06/23 16:48:01 mwg
-+ * Fixed a longstanding problem typical for Win95 VxD: whenever new
-+ * VxD is intalled the confuguration profile may not match the old one but
-+ * since the crc is correct it is still being downloaded. To avoid the problem
-+ * a crc for the version number was added to avoid confusion between profiles
-+ * of different versions.
-+ *
-+ * Revision 1.126 1998/06/19 21:04:06 liang
-+ * Add auxiliary feature bit kV90ServerNotDetSbarAfterJdbarFix.
-+ *
-+ * Revision 1.125 1998/06/11 22:48:14 liang
-+ * Add kPCM28000bpsShift constant.
-+ *
-+ * Revision 1.124 1998/06/05 22:11:51 liang
-+ * New V90 DIL works through data mode.
-+ *
-+ * Revision 1.123 1998/06/01 23:03:41 liang
-+ * Add v90RcvdDilDiffData logging.
-+ *
-+ * Revision 1.122 1998/06/01 21:24:38 mwg
-+ * Changed some of the names.
-+ *
-+ * Revision 1.121 1998/05/13 04:55:22 mwg
-+ * Now passing the number of spectral shaping bits in aux features
-+ *
-+ * Revision 1.120 1998/05/13 02:53:13 liang
-+ * Add field "value" to command param structure.
-+ *
-+ * Revision 1.119 1998/05/12 04:42:23 mwg
-+ * Replaced some of the status messages
-+ *
-+ * Revision 1.118 1998/05/11 23:36:10 mwg
-+ * Added 8000Hz symbol rate to the map
-+ *
-+ * Revision 1.117 1998/05/05 04:28:39 liang
-+ * V90 works up to data mode first version.
-+ *
-+ * Revision 1.116 1998/04/21 09:36:45 mwg
-+ * Fixed a few problems for 16Khz and added 32Khz.
-+ *
-+ * Revision 1.115 1998/04/17 22:33:54 liang
-+ * Added V90 DIL for mu-law PCM.
-+ *
-+ * Revision 1.114 1998/04/15 22:36:39 mwg
-+ * Added new parameters to kDialCmd to allow individual control of each
-+ * DTMF group attenuation.
-+ *
-+ * Revision 1.113 1998/04/15 18:16:22 ilyas
-+ * Integrated V.8bis and changed coding of LinkLayerType to bitMap
-+ *
-+ * Revision 1.112 1998/04/15 07:59:06 mwg
-+ * Added new status codes for V.90
-+ *
-+ * Revision 1.111 1998/04/11 00:29:16 mwg
-+ * Fixed the warnings which appeared when Irix builds were upgraded to
-+ * gcc 2.8.1
-+ *
-+ * Revision 1.110 1998/04/11 00:25:01 ilyas
-+ * More V.70 statuses
-+ *
-+ * Revision 1.109 1998/04/10 23:29:31 mwg
-+ * Added new field to capabilities: dataRates56K
-+ *
-+ * Revision 1.108 1998/04/09 02:02:56 mwg
-+ * Added status for Ja detection.
-+ *
-+ * Revision 1.107 1998/04/03 02:05:30 ilyas
-+ * More V.70 commands added
-+ *
-+ * Revision 1.106 1998/04/02 06:15:39 mwg
-+ * Added coding type (Mu-law/A-law) status reporting.
-+ *
-+ * Revision 1.105 1998/03/30 09:53:57 mwg
-+ * Added definition for k56Flex modulation for future use.
-+ *
-+ * Revision 1.104 1998/03/27 17:56:09 ilyas
-+ * Added definitions for V.70
-+ *
-+ * Revision 1.103 1998/03/26 23:29:04 liang
-+ * Added first version of IMD estimation.
-+ *
-+ * Revision 1.102 1998/03/20 04:37:26 mwg
-+ * Increased the size of the nominal variance to 32 bit.
-+ *
-+ * Revision 1.101 1998/03/06 01:22:04 yura
-+ * Improved Win95 VxD segmentation handling
-+ *
-+ * Revision 1.100 1998/03/06 01:06:18 liang
-+ * Add initial version of V90 phase 1 and 2.
-+ *
-+ * Revision 1.99 1998/03/05 23:42:22 mwg
-+ * (hxl) Implemented enable/disable call waiting command.
-+ *
-+ * Revision 1.98 1998/02/26 06:13:06 mwg
-+ * Increased the number of AT S-registers to account for newly introduced
-+ * S9 and S10.
-+ *
-+ * Revision 1.97 1998/02/25 18:18:25 scott
-+ * Added v42bisCycleCount for V42BIS_THROUGHPUT_CONTROL
-+ *
-+ * Revision 1.96 1998/02/24 05:31:20 mwg
-+ * Added stuff required by international version of AT command processor.
-+ *
-+ * Revision 1.95 1998/02/17 01:14:10 scott
-+ * Reenabled sys/types.h for Linux builds
-+ *
-+ * Revision 1.94 1998/02/16 22:32:23 scott
-+ * Changed copyright notice
-+ *
-+ * Revision 1.93 1998/02/16 22:17:44 scott
-+ * Turned off include of sys/types.h for normal builds
-+ *
-+ * Revision 1.92 1998/02/16 21:53:28 scott
-+ * Exclude sys/types.h for another compiler
-+ *
-+ * Revision 1.91 1998/02/09 18:24:10 scott
-+ * Fixed ComplexShort type to work around bugs in MS and GreenHill compilers
-+ *
-+ * Revision 1.90 1998/01/27 01:37:36 mwg
-+ * Added new log identifier for pcm infidelity data.
-+ *
-+ * Revision 1.89 1998/01/22 19:49:32 liang
-+ * Add auxFeature bit kFaxV34HDXAllowAsymCtrlChan.
-+ *
-+ * Revision 1.88 1998/01/21 02:32:01 liang
-+ * Add more V34 half duplex training progress codes.
-+ *
-+ * Revision 1.87 1997/12/23 03:28:25 liang
-+ * Add more half duplex V34 related constants.
-+ *
-+ * Revision 1.86 1997/12/18 19:38:50 scott
-+ * Added agcData log type.
-+ * Added kDisableFaxFastClearDown demod capability
-+ *
-+ * Revision 1.85 1997/12/18 06:02:45 mwg
-+ * Added a function to reenable DC offset tracking.
-+ *
-+ * Revision 1.84 1997/12/17 22:46:30 mwg
-+ * Minor modifications to X2 escape status reporting.
-+ *
-+ * Revision 1.83 1997/12/16 06:49:45 mwg
-+ * Implemented proper data rate reporting for PCM modem.
-+ *
-+ * Revision 1.82 1997/12/13 06:11:08 mwg
-+ * Added X2 interface hooks
-+ *
-+ * Revision 1.81 1997/12/02 06:21:33 mwg
-+ * Implemented kSetATRegister command.
-+ *
-+ * Revision 1.80 1997/11/27 02:11:41 liang
-+ * Add code for half duplex V34 control channel.
-+ *
-+ * Revision 1.79 1997/11/19 19:52:48 guy
-+ * Added constant to define V.34 half duplex operation
-+ *
-+ * Revision 1.78 1997/10/24 05:15:53 scott
-+ * Added AGC and phase hit recovery to demodCapabilities
-+ *
-+ * Revision 1.77 1997/10/01 02:47:50 liang
-+ * Add PCM interface.
-+ *
-+ * Revision 1.76 1997/09/29 15:48:04 yura
-+ * Added #pragma statement for W95 Vxd
-+ *
-+ * Revision 1.75 1997/09/18 20:32:39 scott
-+ * Do not include VxD support files if GENERATE_DEPENDENCIES is defined.
-+ *
-+ * Revision 1.74 1997/09/18 12:40:55 yura
-+ * Removed #ifdef statments to be more robust
-+ *
-+ * Revision 1.73 1997/09/17 17:32:41 scott
-+ * Do not include sys/types.h for 6
-+ *
-+ * Revision 1.72 1997/08/08 00:53:48 mwg
-+ * Added fields for LAP-M frames printout.
-+ * Added fields in auxFeatures to pass preemphasis filter parameters
-+ * to V.34 phase 3 when doing PTT testing.
-+ *
-+ * Revision 1.71 1997/08/06 03:41:45 yura
-+ * Added a few includes and defines needed by Win 95 driver.
-+ *
-+ * Revision 1.70 1997/08/05 03:22:10 liang
-+ * Add equalizer center tap adjustment calculation related constants.
-+ *
-+ * Revision 1.69 1997/07/29 02:44:19 mwg
-+ * Added new field to dataPumpCapabilities structure. This field is not
-+ * yet exposed to external interface and currently is only used to
-+ * enable PTT testing.
-+ * Added new commands: kStartDataModemPTTTestCmd & kStartDataModemLoopbackTestCmd
-+ *
-+ * Revision 1.68 1997/07/22 22:05:10 liang
-+ * Change sample rate setup as a normal command.
-+ *
-+ * Revision 1.67 1997/07/21 23:23:30 liang
-+ * Define SoftModemSetSampleRate as null when SAMPLE_RATE_CONVERSION is not defined.
-+ *
-+ * Revision 1.66 1997/07/21 22:38:36 liang
-+ * Change sample rate converter structure so that sample rate can be changed
-+ * on the fly (at very begining) to either 8KHz or 9600Hz.
-+ *
-+ * Revision 1.65 1997/07/21 20:22:01 mwg
-+ * Added statusInfoData to the log identifiers.
-+ *
-+ * Revision 1.64 1997/07/16 20:40:07 scott
-+ * Added multitone monitor fields
-+ *
-+ * Revision 1.63 1997/07/10 02:31:08 mwg
-+ * 1. Added kRxFrameHDLCFlags detected status for the
-+ * framingInfo.
-+ * 2. Added kLapmMNPFrameDetected status to lapmStatusCode.
-+ * 3. Increased the number of AT registers to 35
-+ * 4. Modified LinkLayerSpec structure in modemCommandStruc
-+ * to provide the initial values of rxDataRate &
-+ * txDataRate and RT delay for the cases when
-+ * link layer is started *after* the data connection
-+ * is established and the status snooper is unable
-+ * to determine the rates and RT delay.
-+ * 5. Added a few extra *empty* constant definitions for
-+ * disabled features.
-+ *
-+ * Revision 1.62 1997/07/02 19:15:05 scott
-+ * Added bits for Bel103 & Bel212 modulations.
-+ *
-+ * Revision 1.61 1997/07/02 05:15:16 mwg
-+ * Added MNP code.
-+ *
-+ * Revision 1.60 1997/07/01 23:52:48 mwg
-+ * Modified the record test setup to log and use all the commands.
-+ *
-+ * Revision 1.59 1997/06/25 19:11:26 mwg
-+ * 1. Added new framingInfoCode values for Async framing error reporting;
-+ * 2. Added a substructure to pass serial data format for kSetDTERate cmd;
-+ *
-+ * Revision 1.58 1997/05/28 02:05:08 liang
-+ * Add PCM modem phase 2 codes.
-+ *
-+ * Revision 1.57 1997/05/12 21:55:08 liang
-+ * Add call waiting tone detector module.
-+ *
-+ * Revision 1.56 1997/03/21 23:50:08 liang
-+ * Added initial version of V8bis module to CVS tree.
-+ *
-+ * Revision 1.55 1997/03/19 18:35:05 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.54 1997/03/11 11:11:45 mwg
-+ * Added code to report V42bis statistics.
-+ *
-+ * Revision 1.53 1997/03/04 06:21:08 mwg
-+ * Added logging of most commands.
-+ *
-+ * Revision 1.52 1997/02/28 23:45:13 liang
-+ * Added training progress status report kPhaseJitterDeactivated.
-+ *
-+ * Revision 1.51 1997/02/28 22:23:22 mwg
-+ * Implemented the following features:
-+ * - Cleardown for fax modulations V.27, V.29 V.17
-+ * - Rockwell compatible bitmap report (needed by a customer)
-+ *
-+ * Revision 1.50 1997/02/28 03:05:31 mwg
-+ * Added more logging data types.
-+ *
-+ * Revision 1.49 1997/02/27 05:28:58 mwg
-+ * Added RxFrameOK report.
-+ *
-+ * Revision 1.48 1997/02/27 01:48:53 liang
-+ * Add kV8MenuDataWord1 and kV8MenuDataWord2 connectionInfo status.
-+ *
-+ * Revision 1.47 1997/02/24 02:30:27 mwg
-+ * Added new log data: predictorErrData
-+ *
-+ * Revision 1.46 1997/02/22 03:00:22 liang
-+ * Add echoCancelledSignalData.
-+ *
-+ * Revision 1.45 1997/02/21 01:26:42 liang
-+ * Add six more bits for the Demodulator capabilities to deal with 2nd order
-+ * time tracking & PLLs, as well as shorter NEEC & PFEEC, and front end HBF.
-+ *
-+ * Revision 1.44 1997/02/17 03:09:00 mwg
-+ * Added LAPM statistics printout.
-+ *
-+ * Revision 1.43 1997/02/04 08:38:47 mwg
-+ * Added dc cancelled samples printout.
-+ *
-+ * Revision 1.42 1997/01/29 21:40:28 mwg
-+ * Changed the way timers work: now time is passed as Q4 ms instead of ticks.
-+ * Completed the 8KHz front end implementation.
-+ * Got rid of kSamplesPerSecond constant.
-+ *
-+ * Revision 1.41 1997/01/24 07:13:50 mwg
-+ * Added new statuses for automoder.
-+ *
-+ * Revision 1.40 1997/01/23 02:03:08 mwg
-+ * Replaced old sample rate conversion with the newer one.
-+ * Still has to resolve the automoding issue.
-+ *
-+ * Revision 1.39 1997/01/21 00:55:04 mwg
-+ * Added 8KHz front end functionality.
-+ *
-+ * Revision 1.38 1996/11/13 00:30:55 liang
-+ * Add kAutoLoadReductionEnabled to demodCapabilities so that PFEEC, FEEC, IEEC
-+ * can be disabled automatically, but for worst processor loading test they
-+ * won't be disabled when this bit is not set.
-+ *
-+ * Revision 1.37 1996/11/07 23:07:18 mwg
-+ * Rearranged global variables to allow V.17 short training.
-+ *
-+ * Revision 1.36 1996/09/17 23:55:05 liang
-+ * Change kMaxDataBlockSize from 16 to 24 to handle high data rates.
-+ *
-+ * Revision 1.35 1996/09/05 19:43:39 liang
-+ * Removed caller ID error status code kCallerIDUnknownMessageType, and
-+ * added caller ID status codes kCallerIDUnknownMessage & kCallerIDWholeMessage.
-+ * Changed the callerIDStatus report structure.
-+ *
-+ * Revision 1.34 1996/08/29 00:36:57 liang
-+ * Added kLapmTxFrameStatus and kLapmRxFrameStatus.
-+ *
-+ * Revision 1.33 1996/08/27 22:56:01 liang
-+ * Added kResetHardware status code.
-+ *
-+ * Revision 1.32 1996/08/23 23:35:35 liang
-+ * Add kATDebugStatus and function SoftModemGetHybridDelay.
-+ *
-+ * Revision 1.31 1996/08/22 01:13:19 yg
-+ * Added AT command processor.
-+ *
-+ * Revision 1.30 1996/08/12 21:46:47 mwg
-+ * Added code to report capabilities.
-+ *
-+ * Revision 1.29 1996/08/10 01:59:59 mwg
-+ * Added report of the sent rate sequence;
-+ *
-+ * Revision 1.28 1996/08/07 22:15:02 mwg
-+ * Added new status reports:
-+ * kRemoteFreqOffset
-+ * kIEECDeactivated
-+ * kPFEECDeactivated
-+ *
-+ * Revision 1.27 1996/06/27 05:15:48 mwg
-+ * Added V.24 circuit status.
-+ *
-+ * Revision 1.26 1996/06/27 02:12:43 mwg
-+ * Cleaned the code.
-+ *
-+ * Revision 1.25 1996/06/20 23:57:30 mwg
-+ * Added new training progress status.
-+ *
-+ * Revision 1.24 1996/06/18 21:13:50 mwg
-+ * Added trellis MSE data logging.
-+ *
-+ * Revision 1.23 1996/06/12 02:31:10 mwg
-+ * Added new type: VeryLong
-+ *
-+ * Revision 1.22 1996/06/08 22:15:39 mwg
-+ * Added new status report: kCleardownStarted
-+ * Added new field for the features: kV34bisEnabled
-+ *
-+ * Revision 1.21 1996/05/31 00:29:11 liang
-+ * Add feature bit kV34ExtraINFOPreamble.
-+ *
-+ * Revision 1.20 1996/05/30 23:28:31 mwg
-+ * Replaced enums with #defines
-+ *
-+ * Revision 1.19 1996/05/25 00:38:27 mwg
-+ * Added kProjectedDataRate training progress report.
-+ *
-+ * Revision 1.18 1996/05/24 23:27:15 mwg
-+ * Added mode status codes.
-+ *
-+ * Revision 1.17 1996/05/10 05:39:59 liang
-+ * Move the includes for DEBUG inside "ifndef SoftModemTypes" so that
-+ * cap build won't break.
-+ *
-+ * Revision 1.16 1996/05/08 01:49:34 mwg
-+ * Added capability to setup auxiliary data channel handlers.
-+ *
-+ * Revision 1.15 1996/05/07 22:51:08 liang
-+ * Added group delay estimation and improved symbol rate selection process.
-+ *
-+ * Revision 1.14 1996/05/06 06:49:09 mwg
-+ * Fixed linux problems.
-+ *
-+ * Revision 1.13 1996/05/02 08:40:16 mwg
-+ * Merged in Chromatic bug fixes.
-+ *
-+ * Revision 1.12 1996/05/02 02:26:21 mwg
-+ * Added code to implement dozing functionality for v.34.
-+ *
-+ * Revision 1.11 1996/05/01 22:43:13 mwg
-+ * Added new command: kDozeCmd;
-+ *
-+ * Revision 1.10 1996/05/01 19:20:16 liang
-+ * Add command codes kInitiateRetrainCmd and kInitiateRateRenegotiationCmd.
-+ *
-+ * Revision 1.9 1996/04/25 01:12:37 mwg
-+ * Added new flag: rapid preliminary EC training.
-+ *
-+ * Revision 1.8 1996/04/20 02:26:22 mwg
-+ * Added preliminary far-end echo support
-+ *
-+ * Revision 1.7 1996/04/15 23:26:16 mwg
-+ * Changed flag definitions for v34 modem.
-+ *
-+ * Revision 1.6 1996/04/04 02:35:50 liang
-+ * Change kCid from 0x0080 to 0x0004 (0x0080 is defined as kV32).
-+ *
-+ * Revision 1.5 1996/03/08 23:07:01 mwg
-+ * Added name for the struct.
-+ *
-+ * Revision 1.4 1996/03/02 00:59:27 liang
-+ * Added typedef for V34CodingParameters structure.
-+ *
-+ * Revision 1.3 1996/02/27 02:28:31 mwg
-+ * Fixed a bug in kLapmLongADPEnabled definition.
-+ *
-+ * Revision 1.2 1996/02/19 23:50:59 liang
-+ * Removed compressionSetup parameter from the link layer command structure.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1996/01/15 23:26:04 liang
-+ * Change the softmodem command structure name from SoftwareModemCommand
-+ * to SoftwareModemCommandParameters.
-+ *
-+ *****************************************************************************/
-+#ifndef SoftModemPh
-+#define SoftModemPh
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.1 General types */
-+/****************************************************************************/
-+
-+#ifndef SM_DECL
-+#define SM_DECL
-+#endif
-+
-+#ifdef __VxWORKS__
-+#include <types/vxTypesOld.h>
-+#endif
-+
-+#ifdef DEBUG
-+/* We have to define __wchar_t for Linux */
-+#if defined __linux__ && !defined _NO_WHCAR_DEF_
-+typedef long int __wchar_t;
-+#endif
-+#if !defined(__KERNEL__) && !defined(_CFE_)
-+#include <stdio.h>
-+#include <stdlib.h>
-+#endif
-+
-+#if defined(__linux__) || defined (__unix__) || defined (__unix) || (defined (__mips__) && !defined(_CFE_) && !defined(VXWORKS) && !defined(TARG_OS_RTEMS))/* enable if necessary, but not for dos-based builds */
-+#include <linux/types.h>
-+#endif
-+
-+
-+#endif /* DEBUG */
-+
-+#if defined(W95_DRIVER)
-+#pragma code_seg("_LTEXT", "LCODE")
-+#pragma data_seg("_LDATA", "LCODE")
-+#pragma const_seg("_LDATA", "LCODE")
-+#pragma bss_seg("_LDATA", "LCODE")
-+#pragma pack(1)
-+#endif /* W95_DRIVER */
-+
-+#ifndef SoftModemTypes
-+#include "SoftModemTypes.h"
-+#endif /* SoftModemTypes */
-+
-+
-+typedef struct
-+ {
-+ schar x, y;
-+ } ComplexByte;
-+
-+typedef struct
-+ {
-+ uchar numerator;
-+ uchar denominator;
-+ } Ratio;
-+
-+#ifdef PEGASUS
-+typedef union
-+ {
-+ struct
-+ {
-+ short x, y;
-+ };
-+
-+ long foo;
-+ } ComplexShort;
-+#else
-+typedef struct
-+ {
-+ short x, y;
-+#ifdef GREENHILL
-+ long a[0];
-+#endif
-+ } ComplexShort;
-+#endif
-+
-+typedef struct
-+ {
-+ long x, y;
-+ } ComplexLong;
-+
-+typedef struct
-+ {
-+ ushort x0, x1, x2;
-+ short x3;
-+ } VeryLong;
-+
-+typedef union
-+ {
-+ struct
-+ {
-+ uchar number;
-+ uchar defaultValue; /* default value */
-+ uchar maxValue; /* max allowed value */
-+ uchar minValue; /* should be greater then maxValue to make reg readonly */
-+ } param;
-+ long alignment;
-+ } SRegisterDefinition;
-+
-+#define MacroPaste2(a,b) a##b
-+#define MacroPaste(a,b) MacroPaste2(a,b)
-+#define ALWAYS_LONG_ALIGN() long MacroPaste(ALIGNMENT,__LINE__);
-+
-+#ifdef USE_LONG_ALIGN
-+#define LONG_ALIGN() ALWAYS_LONG_ALIGN()
-+#else
-+#define LONG_ALIGN()
-+#endif
-+
-+typedef ulong bitMap;
-+
-+typedef int pace;
-+#define kStop 0
-+#define kVerySlow 1
-+#define kSlow 2
-+#define kMedium 3
-+#define kFast 4
-+
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.2 Modem specific types */
-+/****************************************************************************/
-+
-+typedef long directionType;
-+#define kXmt 0
-+#define kRcv 1
-+#define kXmtRcv 2
-+
-+
-+#define originating kXmt
-+#define answering kRcv
-+#define kOrg kXmt
-+#define kAns kRcv
-+#define kOrgAns kXmtRcv
-+
-+#define ORIGINATING originating
-+#define ANSWERING answering
-+
-+typedef int pcmCodingType;
-+#define kMuLawPCM 0
-+#define kALawPCM 1
-+
-+#define kMuLawPCMScaleShift 2
-+#define kALawPCMScaleShift 3
-+
-+/* link layer and framer share defines */
-+typedef bitMap framerType;
-+typedef bitMap linkLayerType;
-+#define kNoFramer 0
-+#define kSync 0x00000001
-+#define kAsync 0x00000002
-+#define kHDLC 0x00000004
-+#define kLapm 0x00000008
-+#define kMnp 0x00000010
-+#define kV70 0x00000020
-+#define kSAM 0x00000040
-+
-+
-+typedef bitMap modulationMap;
-+typedef bitMap symbolRateMap;
-+typedef bitMap dataRateMap;
-+typedef bitMap featureMap;
-+typedef bitMap breakType;
-+
-+typedef bitMap audioType;
-+#define kRawAudio 0
-+#define kAudioG729A 1
-+#define kAudioG729 2
-+#define kAudioG723 3
-+
-+
-+#ifndef ADSL_MODEM
-+typedef long modemStatusCode;
-+#endif
-+ /* Information status Codes: 1-31 */
-+#define kSetSampleRate 1
-+#define kModulationKnown 2
-+#define kRxSymbolRate 3
-+#define kTxSymbolRate 4
-+#define kRxCarrierFreq 5
-+#define kTxCarrierFreq 6
-+#define kTxPreemphasisFilter 7
-+#define kTxPowerAdjustment 8
-+#define kRemoteTxPreemphasisFilter 9
-+#define kRemoteTxPowerAdjustment 10
-+#define kRxRateKnown 11
-+#define kTxRateKnown 12
-+#define kRxDataModeActive 13
-+#define kTxDataModeActive 14
-+#define kTxSignalCompleted 15
-+#define kDTMFSignalDetected 16
-+#define kModemSignalDetected 17
-+#define kCallProgressSignalDetected 18
-+#define kCustomSignalDetected 19
-+#define kFaxPreambleDetected 20
-+#define kV24CircuitStatusChange 21
-+#define kHookStateChange 22
-+#define kCallWaitingToneDetected 23
-+#define kMultiToneSignalDetected 24
-+#define kPulseShuntStateChange 25
-+#define kRingFrequency 26
-+
-+
-+ /* Warning status Codes: 32-64 */
-+#define kError 32
-+#define kV34Exception 33
-+#define kClearDownLocal 34
-+#define kClearDownRemote 35
-+#define kCarrierPresent 36
-+#define kCarrierLost 37
-+#define kRetrainingLocal 38
-+#define kRetrainingRemote 39
-+#define kRateRenegotiationLocal 40
-+#define kRateRenegotiationRemote 41
-+#define kFallbackStarted 42
-+#define kFallForwardStarted 43
-+#define kCleardownStarted 44
-+#define kIllegalCommand 45
-+
-+ /* Auxiliary status Codes: 64-.. */
-+#define kTrainingProgress 64
-+#define kConnectionInfo 65
-+#define kDialerStatus 66
-+#define kFramingInfo 67
-+#define kBreakReceived 68
-+#define kLapmStatus 69
-+#define kLapmParameter 70
-+#define kV42bisStatus 71
-+#define kCallerIDStatus 72
-+#define kIOStatus 73
-+#define kCapabilitiesStatus 74
-+#define kSpeakerStatus 75
-+#define kATProfileChanged 76
-+#define kATDebugStatus 77
-+#define kResetHardware 78
-+#define kV8bisStatus 79
-+#define kMnpStatus 80
-+#define kMnpParameter 81
-+#define kV70Status 82
-+#define kV70Parameter 83
-+#define kFaxClass2Status 84
-+#define kAudioStatus 85
-+#define kAudioParameter 86
-+#define kOverlayStatus 87
-+#define kCallerIDCircuitStatus 88
-+#define kV80Status 89
-+#define kV80Parameter 90
-+#define kLocalCountryChanged 91
-+#define kDTERateChanged 92
-+#define kATResponse 93
-+#define kFramerConfigured 94
-+#define kA8RStatus 95
-+#define kA8TStatus 96
-+#define kVersionStatus 97
-+
-+ /* Testing status codes: 128-... */
-+ /* These statuses are generated by modem test suit */
-+#define kTestFinished 128
-+#define kConnectivityTestFinished 129
-+#define kTestCheckSum 130
-+#define kLogFileControl 131
-+#define kTestAtmVcFinished 132
-+#define kTestClearEocFinished 133
-+#define kTestG997Finished 134
-+
-+typedef long modemErrorCode;
-+#define kNoError 0
-+#define kErrorTimerExpired 1
-+#define kErrorNoSReceived 2
-+#define kErrorNoSbarReceived 3
-+
-+
-+typedef long dialerStatusCode;
-+#define kDialCompleted 0
-+#define kNoDialToneDetected 1
-+#define kBongToneDetected 2
-+#define kNoBongToneDetected 3
-+#define kErrorIllegalDialModifier 5
-+#define kDialStarted 6
-+#define kExternalPulseDialDigit 7
-+
-+
-+typedef long framingInfoCode;
-+#define kRxFrameOK 0
-+#define kRxFrameTooLong 1
-+#define kRxFrameCRCError 2
-+#define kTxFrameUnderrun 3
-+#define kRxFrameOverrun 4
-+#define kRxFrameAborted 5
-+#define kRxFrameParityError 6
-+#define kRxFrameFormatError 7
-+#define kRxFrameHDLCFlagsDetected 8
-+
-+
-+typedef long IOStatusCode;
-+#define kRxDataReady 0
-+#define kRxBufferOverflow 1
-+#define kTxSpaceAvailable 2
-+#define kTxBufferEmpty 3
-+
-+typedef long capabilitiesStatusCode;
-+#define kSymbolRates 0
-+#define kDataRates 1
-+#define kFeatures 2
-+#define kDemodCapabilities 3
-+#define kRateThresholdAdjustment 4
-+#define kXmtLevel 5
-+#define kHybridDelay 6
-+#define kAuxFeatures 7
-+
-+
-+typedef long A8TStatusCode;
-+#define kA8TFinished 0
-+
-+typedef long callerIDStatusCode;
-+#define kCallerIDError 0
-+#define kCallerIDChannelSeizureReceived 1
-+#define kCallerIDMarkSignalReceived 2
-+#define kCallerIDTime 3
-+#define kCallerIDTelnum 4
-+#define kCallerIDName 5
-+#define kCallerIDEnd 6
-+#define kCallerIDUnknownMessage 7
-+#define kCallerIDWholeMessage 8
-+
-+
-+typedef long callerIDErrorCode;
-+#define kCallerIDNoError 0
-+#define kCallerIDMarkSignalError 1
-+#define kCallerIDTooManyMarkBits 2
-+#define kCallerIDMessageTooLong 3
-+#define kCallerIDChecksumError 4
-+
-+
-+typedef long connectionInfoCode;
-+#define kRTDelay 1
-+#define kRxSignalLevel 2
-+#define kTimingOffset 3
-+#define kFreqOffset 4
-+#define kPhaseJitter 5
-+#define kSNR 6
-+#define kNearEchoLevel 7
-+#define kSER 8
-+#define kNearEndDelay 9
-+#define kFarEchoLevel 10
-+#define kL1L2SNRDifference 11
-+#define kDCOffset 12
-+#define kTotalRxPower 13
-+#define kRemoteFreqOffset 14
-+/* obsolete #define kV8MenuDataWord1 15 */
-+/* obsolete #define kV8MenuDataWord2 16 */
-+#define kPCMP2AnalogDetSNR 17
-+#define kPCMP2DigitalDetSNR 18
-+#define kPCMP2RBSDetSNR 19
-+#define kEqCenterTapOffset 20
-+#define kPCMPadValue 21
-+#define kPCMRBSMap 22
-+#define kPCMCodingType 23
-+#define kPCMSpectralShapingBits 24
-+#define kLoopbackSelfTestResult 25
-+#define kEyeQuality 26
-+#define kLoopbackSelfTestNewErrs 27
-+#define kV34EqlLengthStatus 28
-+#define kV34EqlOffsetStatus 29
-+#define kV8CallMenuData 30
-+#define kV8JointMenuData 31
-+#define kPCMClientIeecLengthStatus 32
-+#define kPCMClientIeecOffsetStatus 33
-+#define kSeamlessRateChange 34
-+
-+typedef long trainingProgressCode;
-+#define kPeriodicalSignalDetected 0
-+#define kPhaseReversalDetected 1
-+#define kSignalStartDetected 2
-+#define kSignalEndDetected 3
-+#define kSSignalDetected 4
-+#define kSbarSignalDetected 5
-+#define kJ4SignalDetected 6
-+#define kJ16SignalDetected 7
-+#define kJprimeSignalDetected 8
-+#define kMPSignalDetected 9
-+#define kMPprimeSignalDetected 10
-+#define kMPSignalSent 11
-+#define kMPprimeSignalSent 12
-+#define kRateSignalDetected 13
-+#define kESignalDetected 14
-+#define kRateSignalSent 15
-+
-+#define kAutomodingTryModulation 16
-+#define kAutomodingCompleted 17
-+#define kRCFaxBitMapStatus 18
-+
-+#define kV8CIDetected 19
-+#define kV8ANSToneDetected 20
-+#define kV8ANSamDetected 21
-+#define kV8CMDetected 22
-+#define kV8JMDetected 23
-+#define kV8CJDetected 24
-+#define kV8Finished 25
-+
-+#define kV34Phase2Started 26
-+#define kV34Phase2INFOSequenceDetected 27
-+#define kV34Phase2NearEndEchoDetected 28
-+#define kV34Phase2L1Receiving 29
-+#define kV34Phase2L2Receiving 30
-+#define kV34Phase2Finished 31
-+#define kV34Phase3Started 32
-+#define kV34Phase3Finished 33
-+#define kV34Phase4Started 34
-+#define kV34Phase4Finished 35
-+#define kV34DecoderParameters 36
-+#define kV34EncoderParameters 37
-+
-+#define kMaxLocalRxDataRate 38
-+#define kMaxLocalTxDataRate 39
-+#define kMaxRemoteRxDataRate 40
-+#define kMaxRemoteTxDataRate 41
-+#define kProjectedDataRate 42
-+#define kFEECDeactivated 43
-+#define kIEECDeactivated 44
-+#define kPFEECDeactivated 45
-+#define kPhaseJitterDeactivated 46
-+
-+#define kPCMP2DetectedDigitalConnection 47
-+#define kPCMP2DetectedRBS 48
-+#define kX2DetectedPhase1Escape 49
-+
-+#define kStarted1200BpsTraining 50
-+#define kStarted2400BpsTraining 51
-+#define kUnscrambledOneDetected 52
-+#define kScrambled1200BpsOneDetected 53
-+#define kScrambled2400BpsOneDetected 54
-+#define kV22BisS1Detected 55
-+#define kV22InitiateLoop2Test 56
-+#define kV22RespondLoop2Test 57
-+#define kV22Loop2TestAlt01Detected 58
-+
-+#define kDataModemLoop1TestStarted 59
-+#define kDataModemLoop1TestFinished 60
-+#define kDataModemLoop2TestStarted 61
-+#define kDataModemLoop2TestFinished 62
-+#define kDataModemLoop3TestStarted 63
-+#define kDataModemLoop3TestFinished 64
-+#define kDataModemSelfLoopTestEnabled 65
-+
-+#define kPCMPhase3Started 70
-+#define kPCMPhase3Finished 71
-+#define kPCMPhase4Started 72
-+#define kPCMPhase4Finished 73
-+
-+#define kV90JaSignalDetected 74
-+#define kV90JdSignalDetected 75
-+#define kV90JdPrimeSignalDetected 76
-+#define kV90RSignalDetected 77
-+#define kV90RBarSignalDetected 78
-+#define kV90CPSignalDetected 79
-+
-+#define kV90CPtSignalSent 80
-+#define kV90CPSignalSent 81
-+#define kV90CPprimeSignalSent 82
-+
-+
-+#define kV34SeamlessRateChangeRequestSent 83
-+#define kV34SeamlessRateChangeUpdateSent 84
-+#define kV34SeamlessRateChangeRequestReceived 85
-+#define kV34SeamlessRateChangeUpdateReceived 86
-+#define kV34SeamlessRateChangeUpdateTimeout 87
-+
-+#define kV90JaSignalAcknowledged 88
-+
-+#define kV34HCtrlChanPPhDetected 100
-+#define kV34HCtrlChanMPhDetected 101
-+#define kV34HCtrlChanRatesKnown 102
-+#define kV34HDXCtrlChanBinary1Detected 103
-+#define kV34HDXPhase3Started 104
-+#define kV34HDXPhase3Finished 105
-+#define kV34HDXPrimChanBinary1Detected 106
-+#define kFlexEventTRN2AFinished 107
-+
-+#define kV32RanginigStarted 108
-+#define kV32RangingStarted 108
-+#define kV32RanginigFinished 109
-+#define kV32RangingFinished 109
-+
-+
-+typedef long lapmStatusCode;
-+#define kLapmDisconnected 0 /* LAPM disconnected */
-+#define kLapmConnected 1 /* LAPM is connected */
-+#define kLapmV42ODPDetected 2 /* LAPM ODP is detected */
-+#define kLapmV42ADPDetected 3 /* LAPM V.42 ADP is detected */
-+#define kLapmUnknownADPDetected 4 /* LAPM Unsupported ADP is detected */
-+#define kLapmTimeout 5 /* LAPM Timeout */
-+#define kLapmMNPFrameDetected 6 /* LAPM detected MNP frame */
-+#define kLapmDPDetectionTimedOut 7 /* LAPM Unsupported ADP is detected */
-+#define kLapmError 8 /* LAPM Error */
-+#define kLapmTestResult 9 /* LAPM loopback test result */
-+#define kLapmTxFrameStatus 10
-+#define kLapmRxFrameStatus 11
-+#define kLapmTxStatistics 12
-+#define kLapmRxStatistics 13
-+
-+typedef long lapmTakedownReason;
-+#define kLapmRemoteDisconnect 0
-+#define kLapmLocalDisconnect 1
-+#define kLapmCannotConnect 2
-+#define kLapmProtocolError 3
-+#define kLapmCompressionError 4
-+#define kLapmInactivityTimer 5
-+#define kLapmRetryFailed 6
-+
-+
-+typedef long lapmParameterCode;
-+#define kLapmXmtK 0
-+#define kLapmRcvK 1
-+#define kLapmXmtN401 2
-+#define kLapmRcvN401 3
-+#define kLapmTESTSupport 4
-+#define kLapmSREJSupport 5
-+#define kLapmCompDir 6
-+#define kLapmCompDictSize 7
-+#define kLapmCompStringSize 8
-+
-+
-+typedef long lapmErrorCode;
-+#define kLapmNoError 0
-+#define kLapmBufferOverflow 1
-+#define kLapmFrameTooLong 2
-+#define kLapmBadFrame 3
-+#define kLapmUnknownEvent 4
-+/* 6 is reserved for kLapmRetryFailed defined above */
-+
-+
-+typedef long lapmTestResultCode;
-+#define kLapmTestPassed 0
-+#define kLapmTestRequestIgnored 1
-+#define kLapmTestAlreadyInProgress 2
-+#define kLapmTestNotSupported 3
-+#define kLapmTestFailed 4
-+
-+
-+typedef long v42bisStatusCode;
-+#define kV42bisEncoderTransparentMode 0 /* V.42bis encoder transparent mode active */
-+#define kV42bisEncoderCompressedMode 1 /* V.42bis encoder compressed mode active */
-+#define kV42bisDecoderTransparentMode 2 /* V.42bis decoder transparent mode active */
-+#define kV42bisDecoderCompressedMode 3 /* V.42bis decoder compressed mode active */
-+#define kV42bisError 4 /* V.42bis error */
-+#define kV42bisEncoderStatistics 5
-+#define kV42bisDecoderStatistics 6
-+
-+
-+typedef long v42bisErrorCode;
-+#define kV42bisUndefinedEscSequence 0 /* V.42bis undefined escape sequence */
-+#define kV42bisCodewordSizeOverflow 1 /* V.42bis codeword size overflow */
-+#define kV42bisUndefinedCodeword 2 /* V.42bis undefined codeword */
-+
-+typedef long mnpStatusCode;
-+#define kMnpDisconnected 0 /* Mnp disconnected */
-+#define kMnpConnected 1 /* Mnp is connected */
-+#define kMnpFallback 2 /* Mnp is falling back to buffer mode */
-+#define kMnpError 3 /* Mnp Error */
-+#define kMnpTimeout 4 /* Mnp Timeout */
-+#define kMnpInvalidLT 5 /* Invalid LT received */
-+#define kMnpRetransmitFrame 6
-+#define kMnpNack 7
-+#define kMnpTxFrameStatus 8
-+#define kMnpRxFrameStatus 9
-+#define kMnpTxStatistics 10
-+#define kMnpRxStatistics 11
-+
-+typedef long mnpTakedownReason;
-+#define kMnpRemoteDisconnect 0
-+#define kMnpLocalDisconnect 1
-+#define kMnpCannotConnect 2
-+#define kMnpProtocolError 3
-+#define kMnpCompressionError 4
-+#define kMnpInactivityTimer 5
-+#define kMnpRetryFailed 6
-+
-+
-+typedef long mnpParameterCode;
-+#define kMnpProtocolLevel 0
-+#define kMnpServiceClass 1
-+#define kMnpOptimizationSupport 2
-+#define kMnpCompressionSupport 3
-+#define kMnpN401 4
-+#define kMnpK 5
-+
-+
-+typedef long mnpErrorCode;
-+#define kMnpNoError 0
-+#define kMnpBufferOverflow 1
-+#define kMnpFrameTooLong 2
-+#define kMnpBadFrame 3
-+#define kMnpUnknownEvent 4
-+
-+
-+typedef long v70StatusCode;
-+#define kV70Disconnected 0 /* V70 disconnected */
-+#define kV70Connected 1 /* V70 is connected */
-+#define kV70Error 2 /* V70 Error */
-+#define kV70Timeout 3 /* V70 Timeout */
-+#define kV70ChannelDown 4 /* V70 channel released */
-+#define kV70ChannelUp 5 /* V70 channel established */
-+#define kV70AudioChannelDown 6 /* V70 audio channel released */
-+#define kV70AudioChannelUp 7 /* V70 audio channel established */
-+#define kV70DataChannelDown 8 /* V70 data channel released */
-+#define kV70DataChannelUp 9 /* V70 data channel established */
-+#define kV70OOBChannelDown 10 /* V70 out-of-band channel released */
-+#define kV70OOBChannelUp 11 /* V70 out-of-band channel established */
-+#define kV70TxFrameStatus 12
-+#define kV70RxFrameStatus 13
-+#define kV70TxStatistics 14
-+#define kV70RxStatistics 15
-+#define kV70StateTransition 16
-+
-+typedef long v70TakedownReason;
-+#define kV70RemoteDisconnect 0
-+#define kV70LocalDisconnect 1
-+#define kV70CannotConnect 2
-+#define kV70ProtocolError 3
-+#define kV70CompressionError 4
-+#define kV70InactivityTimer 5
-+#define kV70RetryFailed 6
-+
-+
-+typedef long v70ParameterCode;
-+#define kV70SuspendResume 0
-+#define kV70CrcLength 1
-+#define kV70NumberOfDLCs 2
-+#define kV70uIH 3
-+
-+#define kV70LapmXmtK 10
-+#define kV70LapmRcvK 11
-+#define kV70LapmXmtN401 12
-+#define kV70LapmRcvN401 13
-+#define kV70LapmTESTSupport 14
-+#define kV70LapmSREJSupport 15
-+#define kV70LapmCompDir 16
-+#define kV70LapmCompDictSize 17
-+#define kV70LapmCompStringSize 18
-+
-+#define kV70AudioHeader 20 /* if audio header is present in audio frames */
-+#define kV70BlockingFactor 21 /* audio blocking factor (default 1) */
-+#define kV70SilenceSuppression 22 /* audio silence suppression */
-+
-+
-+
-+typedef long v70ErrorCode;
-+#define kV70NoError 0
-+#define kV70BadFrame 1
-+
-+typedef long audioStatusCode;
-+#define kAudioFramesLost 0 /* One or more audio frames were lost */
-+#define kAudioTxBufferOverflow 1
-+#define kAudioRxBufferOverflow 2
-+#define kAudioRxBufferUnderflow 3
-+
-+
-+typedef long v80StatusCode;
-+#define kV80Disconnected 0 /* V80 disconnected */
-+#define kV80Connected 1 /* V80 is connected */
-+#define kV80Error 2 /* V80 Error */
-+#define kV80InBandStatus 3 /* V80 in-band SAM status */
-+#define kV80TxFrameStatus 12
-+#define kV80RxFrameStatus 13
-+#define kV80TxStatistics 14
-+#define kV80RxStatistics 15
-+
-+typedef long v80TakedownReason;
-+#define kV80RemoteDisconnect 0
-+#define kV80LocalDisconnect 1
-+
-+typedef long v80ErrorCode;
-+#define kV80NoError 0
-+#define kV80BadFrame 1
-+
-+typedef long overlayStatusCode;
-+#define kOverlayBegin 0 /* DSP has halted */
-+#define kOverlayEnd 1 /* DSP has received entire overlay */
-+#define kOverlayElapsedTime 2 /* time elapsed(as viewed by datapump) during overlay */
-+#define kOverlayRecordingData 3 /* ms of data that we are recording */
-+#define kOverlayReplayingData 4 /* ms of data that we have replayed so far */
-+#define kOverlayReplayDone 5 /* playback is done */
-+
-+/* types for kOverlayRecording/ReplayingData */
-+#define kOverlayTxData 0
-+#define kOverlayRxData 1
-+
-+/*
-+ * Rockwell faxmodem compatible bitmap (kRCFaxBitMapStatus)
-+ */
-+#define kRCFaxFCD 0x01
-+#define kRCFaxP2 0x02
-+#define kRCFaxPN 0x04
-+#define kRCFaxDCD 0x08
-+#define kRCFaxTX 0x10
-+#define kRCFaxCTS 0x20
-+
-+
-+#ifndef ADSL_MODEM
-+typedef long modemCommandCode;
-+#endif
-+ /* Basic Action commands 00-63 */
-+#define kIdleCmd 0
-+#define kStartFaxModemCmd 1
-+#define kStartDataModemCmd 2
-+#define kStartCallProgressMonitorCmd 3
-+#define kSendTonesCmd 4
-+#define kStartCallerIDRcvCmd 5
-+#define kSetLinkLayerCmd 6
-+#define kSetFramerCmd 7
-+#define kTestLinkLayerCmd 8
-+#define kIdleRcvCmd 9
-+#define kIdleXmtCmd 10
-+#define kSetStatusHandlerCmd 11
-+#define kSetEyeHandlerCmd 12
-+#define kSetLogHandlerCmd 13
-+#define kSendBreakCmd 14
-+#define kSendTestCmd 15
-+#define kDisconnectLinkCmd 16
-+#define kSetXmtGainCmd 17
-+#define kStartADSICmd 18
-+#define kSetHybridDelayCmd 19
-+#define kCleardownCmd 20
-+#define kInitiateRetrainCmd 21
-+#define kInitiateRateRenegotiationCmd 22
-+#define kDialToneIndicator 23
-+#define kSetRxDataHandler 24 /* not used yet */
-+#define kSetTxDataHandler 25 /* not used yet */
-+#define kSetAuxRxDataHandler 26
-+#define kSetAuxTxDataHandler 27
-+#define kRingIndicatorCmd 28
-+#define kDTERateIndicatorCmd 29
-+#define kStartV8bisCmd 30
-+#define kSendMultiTonesCmd 31
-+#define kSetMultiToneParamsCmd 32
-+#define kSetModemSampleRateCmd 33
-+#define kStartDataModemPTTTestCmd 34
-+#define kStartDataModemLoopbackTestCmd 35
-+#define kRingFrequencyCmd 36
-+#define kSetCallWaitingDetectorStateCmd 37
-+#define kV34HDXTurnOffCurrentModeCmd 38
-+#define kSetAudioCmd 39
-+#define kLoopbackTestAutoRespEnableCmd 40
-+#define kSetCallProgressParamsCmd 41
-+#define kSetTrainingDelayReductionCmd 42
-+#define kSetFaxECMPageBufferPtrCmd 43
-+#define kSetLineCurrentStateCmd 44
-+#define kSetFramerParameterCmd 45
-+#define kStartDozeCmd 46
-+#define kEndDozeCmd 47
-+#define kStartRingFrequencyDetectorCmd 48
-+#define kSetBufferingDelayAdjustmentCmd 49
-+
-+ /* Composite action commands 64-127 */
-+#define kDialCmd 64
-+#define kSendCallingToneCmd 65
-+#define kV24CircuitChangeCmd 66
-+#define kStartATModeCmd 67
-+#define kStopATModeCmd 68
-+#define kSetATRegister 69
-+#define kSetATRegisterLimits 70
-+#define kSetATIResponse 71
-+#define kEnableATDebugMode 72
-+#define kSetWhiteListEntry 73
-+#define kSetBlackListEntry 74
-+
-+#define kV70Setup 75 /* additional V70 configuration */
-+#define kEstablishChannel 76 /* Establish new link layer channel (V70) */
-+#define kReleaseChannel 77 /* Release link layer channel (V70) */
-+#define kWaitChannelEstablished 78 /* Wait for establishment of the new link layer channel (V70) */
-+
-+/* unused 79 */
-+#define kMnpOOBFrameCmd 80
-+#define kV80InBandCmd 81 /* V80 In-band commands */
-+#define kSetV250IdString 82
-+#define kSetInternationalTablesCmd 83
-+#define kConfigureCountryCmd 84
-+#define kConigureCountryCmd 84
-+#define kV8ControlCmd 85
-+#define kV8bisSendMessage 86
-+#define kSetHWIdCmd 87
-+#define kSetCodecIdCmd 88
-+#define kOverCurrentDetected 89
-+
-+
-+
-+typedef long v8ControlType;
-+#define kEnableDTEControl 1
-+#define kSetV8ControlTimeout 2
-+#define kSetCIValue 3
-+#define kSetCMValue 4
-+#define kSetJMValue 5
-+#define kSendCJ 6
-+#define kSetCallFunctionCategory 7
-+
-+typedef long v250IdStringCode;
-+#define kGMIString 1
-+#define kGMMString 2
-+#define kGMRString 3
-+#define kGSNString 4
-+#define kGOIString 5
-+
-+typedef long kCallProgressParameterCode;
-+#define kModemSignalPowerThreshold 1
-+#define kDialtonePowerThreshold 2
-+#define kRingBackPowerThreshold 3
-+#define kBusyPowerThreshold 4
-+#define kReorderPowerThreshold 5
-+#define k2ndDTnPowerThreshold 6
-+#define kMinDialtoneTime 7
-+#define kDialtoneFreqRange 8
-+#define kRingBackFreqRange 9
-+#define kBusyFreqRange 10
-+#define kReorderFreqRange 11
-+#define k2ndDTnFreqRange 12
-+
-+
-+typedef long framerParameterCode;
-+#define kSetHDLCLeadingFlags 0
-+#define kHDLCResetFlagDetection 1
-+#define kSyncFramerSetup 2
-+#define kHDLCSendCRC 3
-+#define kHDLCSendFlags 4
-+#define kHDLCSendAborts 5
-+
-+
-+typedef long logDataCode;
-+#define eyeData 0
-+#define mseData 1
-+#define rxData 2
-+#define txData 3
-+#define neecData 4
-+#define eqlData 5
-+#define ieecData 6
-+#define feecData 7
-+#define eqlPllData 8
-+#define feecPllData 9
-+#define timingData 10
-+#define pjPhaseErrData 11
-+#define pjEstimateData 12
-+#define pjEstDiffData 13
-+#define pjCoefData 14
-+#define inputSignalData 15
-+#define outputSignalData 16
-+#define agcGainData 17
-+#define automoderData 18
-+#define v8CMData 19
-+#define v8JMData 20
-+#define inputAfterNeecData 21
-+#define eqlErrData 22
-+#define dpskMicrobitsData 23
-+#define v34P2LSamplesData 24
-+#define phaseSplittedLData 25
-+#define fftedLData 26
-+#define channelSNRData 27
-+#define noiseEstimateData 28
-+#define signalEstimateData 29
-+#define v34INFOData 30
-+#define v34ChanProbData 31
-+#define v34P2OutputData 32
-+#define v8ANSamDetectData 33
-+#define pFeecData 34
-+#define channelDelayData 35
-+#define timingOffsetData 36
-+#define trellisMSEData 37
-+#define interpolatedSignalData 38
-+#define dcCancelledSignalData 39
-+#define echoCancelledSignalData 40
-+#define predictorErrData 41
-+#define commandInfoData 42
-+#define unusedInfoData 43
-+#define atCommandInfoData 44
-+#define atResponseInfoData 45
-+#define hwTerminalTxData 46
-+#define hwTerminalRxData 47
-+#define statusInfoData 48
-+#define channelResponseData 49
-+#define channelImpulseRespData 50
-+#define x2PcmP1DetectorInData 51
-+#define x2PcmP1DetectorOutData 52
-+#define eqlRealData 53
-+#define ieecRealData 54
-+#define neecOutputData 55
-+#define precodedEqlOutputData 56
-+#define eqlRealErrData 57
-+#define idealEqlOutputData 58
-+#define agcData 59
-+#define pcmInfidelityData 60
-+#define v42bisCycleCount 61
-+#define pcmImdOffsetCoefData 62
-+#define pcmImdOffsetData 63
-+#define v90RcvdDilLongData 64
-+#define v90RcvdDilShortData 65
-+#define v90DilProducedData 66
-+#define pcmEncoderKbitsData 67
-+#define pcmEncoderMbitsData 68
-+#define pcmEncoderSbitsData 69
-+#define pcmDecoderKbitsData 70
-+#define pcmDecoderMbitsData 71
-+#define pcmDecoderSbitsData 72
-+#define v90CPorCPtData 73
-+#define mnpDecoderInputData 74
-+#define mnpDecoderOutputData 75
-+#define v42bisEncoderInputData 76
-+#define v42bisDecoderInputData 77
-+#define modulatorInputData 78
-+#define modulatorOutputData 79
-+#define encodedStatusData 80
-+#define blockFramerTxData 81
-+#define blockFramerRxData 82
-+#define framerTxData 83
-+#define framerRxData 84
-+#define dpskBasebandData 85
-+#define dpskBasebandLPFedData 86
-+#define dpskRealData 87
-+#define bandEdgeCorrectedSignalData 88
-+#define atmLogData 89
-+#define clearEocLogData 90
-+#define g997LogData 91
-+
-+
-+#define kLogDataDelimiter 0xFEFEFEFE
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.3 Handlers */
-+/****************************************************************************/
-+
-+typedef void (SM_DECL *rcvHandlerType) (void *gDslVars, int, short*);
-+typedef void (SM_DECL *xmtHandlerType) (void *gDslVars, int, short*);
-+typedef int (SM_DECL *xmtHandlerWithRtnValType) (void *gDslVars, int, short*);
-+typedef void (SM_DECL *timerHandlerType) (void *gDslVars, long);
-+typedef int (SM_DECL *interpolatorHandlerType) (void *gDslVars, int, short*, short*);
-+typedef void (SM_DECL *controlHandlerType) (void *gDslVars, int);
-+
-+typedef int (SM_DECL *txDataHandlerType) (void *gDslVars, int, uchar*);
-+typedef int (SM_DECL *rxDataHandlerType) (void *gDslVars, int, uchar*);
-+
-+typedef bitMap (SM_DECL *signalDetectorType) (void *gDslVars, int, long, long*);
-+
-+
-+typedef void (SM_DECL *hookHandlerType) (void *gDslVars, Boolean);
-+
-+typedef short* (SM_DECL *sampBuffPtrType) (void *gDslVars, int);
-+
-+typedef void (SM_DECL *eyeHandlerType) (void *gDslVars, int, ComplexShort*);
-+typedef void (SM_DECL *logHandlerType) (void *gDslVars, logDataCode, ...);
-+
-+typedef void (SM_DECL *voidFuncType) (void *gDslVars);
-+
-+typedef int (SM_DECL *txAudioHandlerType) (void *gDslVars, int, short*);
-+typedef int (SM_DECL *rxAudioHandlerType) (void *gDslVars, int, short*);
-+
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.4 Structures */
-+/****************************************************************************/
-+
-+/*
-+ * AT command processor definitions
-+ */
-+#define kATRegistersNumber 56
-+#define kFirstConfigurationRegister 500
-+#define kLastConfigurationRegister 515
-+#define kFirstInternationalRegister 516
-+#define kLastInternationalRegister 595
-+
-+
-+
-+#define kATMaxDialStringSize 128
-+typedef struct
-+ {
-+ struct
-+ {
-+ uchar loadNumber; /* Which profile to load upon powerup/reset */
-+ uchar countryCode; /* T.35 Country Code */
-+ uchar profile[2][kATRegistersNumber];
-+ uchar dialString[4][kATMaxDialStringSize + 1];
-+ } config;
-+ ulong versionCode;
-+ ulong crcCheckSum;
-+ } NVRAMConfiguration;
-+
-+/* Structure to hold international settings */
-+typedef struct
-+ {
-+ char *name;
-+ int countryCode;
-+ const SRegisterDefinition *userRegisters;
-+ const ulong *configRegisters;
-+ } CountryDescriptor;
-+
-+/*
-+ * V.34 coding parameters structure
-+ */
-+
-+typedef struct
-+ {
-+ /* DO NOT CHANGE THE ORDER OF FIELDS IN THIS STRUCTURE!
-+ * (Some assembly code depends on it!) If you
-+ * must add fields, please do so at the bottom.
-+ */
-+
-+ int symbolRateIndex,
-+ dataRateIndex,
-+ userSNRAdjustment;
-+ Boolean auxChannel,
-+ expConstellation,
-+ precoding,
-+ nonlinearCoding;
-+ schar J, /* number of data frames in superframe */
-+ P, /* number of mapping frames in a data frame */
-+ r, /* number of high mapping frames in a data frame */
-+ b, /* number of data bits in a mapping frame */
-+ W, /* number of aux bits in a data frame */
-+ K, /* number of S bits in a mapping frame */
-+ q, /* number of Q bits in a 2D symbol */
-+ M; /* number of rings in shell mapping */
-+ long nominalVariance; /* the signal variance which gives 1e-2 BLER Q10 */
-+ int bitsPerDataFrame;
-+ short quantRoundOff,
-+ quantMask;
-+ uchar nTrellisStates,
-+ log2NTrellisStates;
-+ short gain1xmt,
-+ gain2xmt,
-+ gain1rcv,
-+ gain2rcv;
-+ ushort bitInversionPattern;
-+ } V34CodingParams;
-+
-+typedef long v8bisStatusCode;
-+typedef bitMap v8bisConnectionSetup;
-+#if defined(V8BIS) || defined(AT_COMMANDS_V8BIS)
-+#include "V8bisMainTypes.h"
-+#endif
-+
-+#define kMaxMultiTones 4 /* MultiTone: search for up to this many tones at once */
-+
-+#ifndef ADSL_MODEM
-+typedef struct
-+ {
-+ modemStatusCode code;
-+ union
-+ {
-+ long value;
-+ long freq;
-+ modemErrorCode error;
-+ modulationMap modulation;
-+ modulationMap modemSignal;
-+ dataRateMap dataRate;
-+ long dtmfSignal;
-+ bitMap callProgressSignal;
-+ bitMap customSignal;
-+ void *ptr;
-+ struct
-+ {
-+ long detected;
-+ long numTones;
-+ long tones[kMaxMultiTones];
-+ } multiToneInfo;
-+ struct
-+ {
-+ v8bisStatusCode code;
-+ long value;
-+ } v8bisStatus;
-+ struct
-+ {
-+ trainingProgressCode code;
-+ long value;
-+ } trainingInfo;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } v24Circuit;
-+ struct
-+ {
-+ trainingProgressCode code;
-+ void* ptr;
-+ } advancedTrainingInfo;
-+ struct
-+ {
-+ capabilitiesStatusCode code;
-+ long value;
-+ } capabilitiesStatusInfo;
-+ struct
-+ {
-+ connectionInfoCode code;
-+ long value;
-+ } connectionInfo;
-+ struct
-+ {
-+ connectionInfoCode code;
-+ int length;
-+ uchar *ptr;
-+ } advancedConnectionInfo;
-+ struct
-+ {
-+ dialerStatusCode code;
-+ long value;
-+ long makeTime;
-+ long breakTime;
-+ } dialerStatus;
-+ struct
-+ {
-+ long enabled;
-+ long volume;
-+ } speakerStatus;
-+ framingInfoCode framingInfo;
-+ IOStatusCode ioStatus;
-+ struct
-+ {
-+ lapmStatusCode code;
-+ union
-+ {
-+ long value;
-+ lapmTakedownReason reason;
-+ lapmErrorCode error;
-+ lapmTestResultCode testResult;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ } param;
-+ } lapmStatus;
-+ struct
-+ {
-+ lapmParameterCode code;
-+ long value;
-+ } lapmParameter;
-+ struct
-+ {
-+ v42bisStatusCode code;
-+ union
-+ {
-+ long value;
-+ v42bisErrorCode error;
-+ struct
-+ {
-+ long nBytesIn;
-+ long nBytesOut;
-+ } statistic;
-+ } param;
-+ } v42bisStatus;
-+ struct
-+ {
-+ mnpStatusCode code;
-+ union
-+ {
-+ long value;
-+ mnpTakedownReason reason;
-+ mnpErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ ulong nSize;
-+ uchar *Buffer;
-+ } fallback;
-+ struct
-+ {
-+ char *header;
-+ void *frame;
-+ } frame;
-+ struct
-+ {
-+ long nack;
-+ long rFrameNo;
-+ } timeout;
-+ struct
-+ {
-+ long frameNo;
-+ long framesPending;
-+ } retrFrame;
-+ } param;
-+ } mnpStatus;
-+ struct
-+ {
-+ mnpParameterCode code;
-+ long value;
-+ } mnpParameter;
-+ struct
-+ {
-+ v70StatusCode code;
-+ union
-+ {
-+ long value;
-+ v70TakedownReason reason;
-+ v70ErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nack;
-+ long rFrameNo;
-+ } timeout;
-+ struct
-+ {
-+ long frameNo;
-+ long framesPending;
-+ } retrFrame;
-+ struct
-+ {
-+ long ChannelId;
-+ long DLCI;
-+ ulong LcNum;
-+ v70TakedownReason reason;
-+ } channelInfo;
-+ struct
-+ {
-+ long ChannelId;
-+ long stateOld;
-+ long stateNew;
-+ } stateInfo;
-+ } param;
-+ ulong v70Time;
-+ } v70Status;
-+ struct
-+ {
-+ audioStatusCode code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long nReq;
-+ long nAvail;
-+ } buffer;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ } param;
-+ } audioStatus;
-+ struct
-+ {
-+ v80StatusCode code;
-+ union
-+ {
-+ long value;
-+ v80TakedownReason reason;
-+ v80ErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } inBand;
-+ } param;
-+ ulong v80Time;
-+ } v80Status;
-+ struct
-+ {
-+ v70ParameterCode code;
-+ long value;
-+ } v70Parameter;
-+ struct
-+ {
-+ breakType type;
-+ long length;
-+ } breakStatus;
-+ struct
-+ {
-+ callerIDStatusCode code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ callerIDErrorCode code;
-+ long value;
-+ } callerIDError;
-+ struct
-+ {
-+ long length;
-+ char* ptr;
-+ } message;
-+ } param;
-+ } callerIDStatus;
-+ struct
-+ {
-+ ulong signal;
-+ uchar *msg1;
-+ long msg1Length;
-+ uchar *msg2;
-+ long msg2Length;
-+ } A8RStatus;
-+ struct
-+ {
-+ overlayStatusCode code;
-+ long value;
-+ long value2;
-+ } overlayStatus;
-+ struct
-+ {
-+ ulong nBits;
-+ ulong nBlocks;
-+ ulong nBitErrors;
-+ ulong nBlockErrors;
-+
-+ ulong nAudioBits;
-+ ulong nAudioBlocks;
-+ ulong nAudioSyncErrors;
-+ ulong nAudioBlockErrors;
-+ } testResults;
-+ ulong checksum;
-+ struct
-+ {
-+ ulong sizeM;
-+ uchar *filename;
-+ } logFileControlStatus;
-+ struct
-+ {
-+ long direction;
-+ long module;
-+ long message;
-+ long data;
-+ }
-+ faxClass2Status;
-+
-+ } param;
-+ } modemStatusStruct;
-+
-+typedef void (SM_DECL *statusHandlerType) (void *gDslVars, modemStatusStruct*);
-+#endif /* ADSL_MODEM */
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.5 Command structure */
-+/****************************************************************************/
-+
-+typedef struct
-+ {
-+ Boolean remoteModemIsFlex;
-+ uchar countryCode;
-+ ushort manufacturerId;
-+ uchar licenseeId;
-+ uchar productCapabilities;
-+ Boolean digitalModeFlag;
-+ Boolean prototypeFlag;
-+ uchar version;
-+ }
-+FlexV8bisStruct;
-+
-+typedef struct
-+ {
-+ symbolRateMap symbolRates;
-+ dataRateMap dataRates;
-+ dataRateMap dataRates56k;
-+ dataRateMap dataRatesFlex;
-+ featureMap features;
-+ bitMap auxFeatures;
-+ bitMap demodCapabilities;
-+ long rateThresholdAdjustment; /* dB Q4 */
-+ FlexV8bisStruct flexRemoteV8bisInfo;
-+ } dataPumpCapabilities;
-+
-+#ifndef ADSL_MODEM
-+typedef struct SoftwareModemCommandParameters
-+ {
-+ modemCommandCode command;
-+ union
-+ {
-+ long xmtGain;
-+ ulong hybridDelayQ4ms;
-+ long modemSampleRate;
-+ long timeInMs;
-+ long state;
-+ long freq;
-+ NVRAMConfiguration *nvramConfigurationPtr;
-+ long enabled;
-+ long value;
-+ uchar *phoneNumber;
-+ uchar *faxECMPageBufferPtr;
-+ CountryDescriptor *countryDescriptorTable;
-+ struct
-+ {
-+ dataRateMap dteRate;
-+ bitMap format;
-+ } dteRateSpec;
-+ struct
-+ {
-+ v8ControlType code;
-+ long value;
-+ uchar *buffer;
-+ } v8ControlSpec;
-+ struct
-+ {
-+ directionType direction;
-+ v8bisConnectionSetup setup;
-+ void *capPtr;
-+ voidFuncType confirmMsFunc;
-+ voidFuncType genMsFunc;
-+ xmtHandlerWithRtnValType ogmFunc;
-+ } v8bisSpec;
-+ struct
-+ {
-+ directionType direction;
-+ } ADSISpec;
-+ struct
-+ {
-+ directionType direction;
-+ modulationMap modulations;
-+ dataPumpCapabilities capabilities;
-+ } modeSpec;
-+ struct
-+ {
-+ long time,
-+ freq1,
-+ freq2,
-+ freq3,
-+ freq4,
-+ mag1,
-+ mag2,
-+ mag3,
-+ mag4;
-+ } toneSpec;
-+ struct
-+ {
-+ long signal;
-+ uchar *msg1;
-+ long msg1Length;
-+ uchar *msg2;
-+ long msg2Length;
-+ long sig_en;
-+ long msg_en;
-+ long supp_delay;
-+ }
-+ v8bisMessageSpec;
-+ struct
-+ {
-+ linkLayerType type;
-+ bitMap setup;
-+ dataRateMap rxDataRate;
-+ dataRateMap txDataRate;
-+ long rtDelayQ4ms;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } linkLayerSpec;
-+ struct
-+ {
-+ framerType type;
-+ bitMap setup;
-+ directionType direction;
-+ long fill[2]; /* need to match linkLayerSpec */
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } framerSpec;
-+ struct
-+ {
-+ framerParameterCode code;
-+ long value;
-+ } framerParameterSpec;
-+ struct
-+ {
-+ bitMap callProgressDetectorSetup;
-+ signalDetectorType callProgressDetectorPtr; /* if nil, use defaults */
-+ signalDetectorType customDetectorPtr; /* if nil, no custom detector */
-+ } callProgressMonitorSpec;
-+ struct
-+ {
-+ ulong maxTones; /* maximum number of simultaneous tones to detect */
-+ ulong allowableVariance; /* maximum cumulative variance in the eight interpolated frequencies */
-+ ulong totalPowerThreshold; /* ignore complete block if power less than this */
-+ ulong powerShiftThreshold; /* ignore a bin if its power is less than (totalPowerValue >> powerShiftThreshold) */
-+ ulong toneMatchThresholdHz; /* tones within +/- this many Hz of original tone are considered the same tone */
-+ ulong binSeparation; /* ignore tones with a spacing of less than this */
-+ ulong outsideFreqDeviation; /* an individual value in the interpolated array can be up to this many Hz outside of the expected angle range */
-+ } multiToneSpec;
-+ struct
-+ {
-+ uchar *dialString; /* nil limited string for DTMF dialing sequence */
-+ long pulseBreakTime,
-+ pulseMakeTime,
-+ pulseInterDigitTime,
-+ toneDigitTime,
-+ toneInterDigitTime,
-+ toneLoGroupMag,
-+ toneHiGroupMag,
-+ flashTime,
-+ pauseTime,
-+ signalWaitTimeout,
-+ blindDialingTimeout;
-+ bitMap dialerSetup;
-+ bitMap callProgressDetectorSetup;
-+ signalDetectorType callProgressDetectorPtr; /* if nil, use defaults */
-+ signalDetectorType customDetectorPtr; /* if nil, no custom detector */
-+ hookHandlerType hookHandlerPtr; /* nil if DTMF dialing specified*/
-+ } dialSpec;
-+ struct
-+ {
-+ long timeOn,
-+ timeOff,
-+ freq;
-+ } callingToneSpec;
-+ union
-+ {
-+ statusHandlerType statusHandlerPtr;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } handlerSpec;
-+ struct
-+ {
-+ breakType type;
-+ long length;
-+ } breakSpec;
-+ struct
-+ {
-+ long length;
-+ uchar *dataPtr;
-+ } lapmTestSpec;
-+ struct
-+ {
-+ bitMap setupLapm;
-+ rxDataHandlerType rxAudioHandlerPtr;
-+ txDataHandlerType txAudioHandlerPtr;
-+ } v70SetupSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ ulong LogChannelNum;
-+ ulong PortNum;
-+ } EstChannelSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ } WaitChannelSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ ulong LogChannelNum;
-+ ulong PortNum;
-+ ulong DLCI;
-+ } RelChannelSpec;
-+ struct
-+ {
-+ audioType type;
-+ bitMap setup;
-+ dataRateMap rxAudioRate;
-+ dataRateMap txAudioRate;
-+ rxAudioHandlerType rxAudioHandlerPtr;
-+ txAudioHandlerType txAudioHandlerPtr;
-+ } audioSpec;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } v24Circuit;
-+ struct
-+ {
-+ ulong code;
-+ ulong value;
-+ ulong minValue;
-+ ulong maxValue;
-+ } atRegister;
-+ struct
-+ {
-+ long code;
-+ uchar *response;
-+ } atiSpec;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frameSpec;
-+ struct
-+ {
-+ long code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long loFreq1;
-+ long hiFreq1;
-+ long loFreq2;
-+ long hiFreq2;
-+ } freqRange;
-+ } params;
-+ } callProgressParamSpec;
-+ struct
-+ {
-+ v250IdStringCode v250IdCode;
-+ uchar *v250IdString;
-+ } v250IdSpec;
-+
-+ } param;
-+ } modemCommandStruct;
-+
-+typedef Boolean (*commandHandlerType) (modemCommandStruct*);
-+#endif /* ADSL_MODEM */
-+
-+
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.1 Definitive constants */
-+/****************************************************************************/
-+
-+#define kMaxSampleBlockSize 48
-+#define kMaxDataBlockSize 48
-+
-+#define kMaxDialStringLength 127
-+#define kCallProgressSampleRate 7200
-+
-+#define kMaxCallerIDMessageLength 80
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.2 Bit maps */
-+/****************************************************************************/
-+
-+/* modulationMap */
-+
-+#define kIdle 0x00000000
-+#define kV25 0x00000001
-+#define kV8 0x00000002
-+#define kCid 0x00000004
-+#define kV8bis 0x00000008
-+#define kV21 0x00000010
-+#define kV22 0x00000020
-+#define kV23 0x00000040
-+#define kV32 0x00000080
-+#define kV34 0x00000100
-+#define kX2 0x00000200
-+#define kV90 0x00000400
-+#define k56Flex 0x00000800
-+#define kV27 0x00001000
-+#define kV29 0x00002000
-+#define kV17 0x00004000
-+#define kV34HDX 0x00008000
-+#define kV34HDXC 0x00010000
-+#define kBell103 0x00100000
-+#define kBell212 0x00200000
-+#define kDataCallingTone 0x01000000
-+#define kFaxCallingTone 0x02000000
-+
-+#define kV22FastNZConnect 0x04000000
-+#define kV22FastNNZConnect 0x08000000
-+#define kV22FastConnect (kV22FastNZConnect|kV22FastNNZConnect)
-+#define kV22bisFastConnect 0x10000000
-+
-+
-+#define kDataModulations (kV25 | kV8 | kV21 | kV22FastConnect | kV22bisFastConnect | kV22 | kV23 | kV32 | kV34 | kBell103 | kBell212)
-+#define kDataOnlyModulations (kV21 | kV22 | kV23 | kV32 | kBell103 | kBell212)
-+#define kPCMModulations (kV90 | kX2 | k56Flex)
-+
-+#define kFaxModulations (kV25 | kV21 | kV27 | kV29 | kV17)
-+#define kFaxOnlyModulations (kV27 | kV29 | kV17)
-+#define kFaxModulationShift 12
-+
-+/* symbolRateMap */
-+
-+#define k1200Hz 0x00000001
-+#define k1600Hz 0x00000002
-+#define k2400Hz 0x00000004
-+#define k2743Hz 0x00000008
-+#define k2800Hz 0x00000010
-+#define k3000Hz 0x00000020
-+#define k3200Hz 0x00000040
-+#define k3429Hz 0x00000080
-+#define k8000Hz 0x00000100
-+
-+#define kAllSymbolRates ( k1200Hz | k1600Hz | k2400Hz | k2743Hz | \
-+ k2800Hz | k3000Hz | k3429Hz | k8000Hz )
-+
-+/* dataRateMap */
-+
-+#define k75bps 0x00000002
-+#define k300bps 0x00000004
-+#define k600bps 0x00000008
-+#define k1200bps 0x00000010
-+#define k2400bps 0x00000020
-+#define k4800bps 0x00000040
-+#define k7200bps 0x00000080
-+#define k9600bps 0x00000100
-+#define k12000bps 0x00000200
-+#define k14400bps 0x00000400
-+#define k16800bps 0x00000800
-+#define k19200bps 0x00001000
-+#define k21600bps 0x00002000
-+#define k24000bps 0x00004000
-+#define k26400bps 0x00008000
-+#define k28800bps 0x00010000
-+#define k31200bps 0x00020000
-+#define k33600bps 0x00040000
-+#define k36000bps 0x00080000
-+#define k38400bps 0x00100000
-+#define k57600bps 0x00200000
-+#define k115200bps 0x00400000
-+#define k230400bps 0x00800000
-+#define k460800bps 0x01000000
-+#define k921600bps 0x02000000
-+/*
-+ * kPCMRate is used to identify that the reported rate is
-+ * PCM modulation rate, and is only used for PCM modulation while
-+ * reporting rate !!!!
-+ */
-+#define kPCMRate 0x40000000
-+#define kPCMFlexRate 0x80000000
-+#define kAllDataRates 0x0FFFFFFF
-+
-+/* rates specific for X2 and V.90 */
-+#define kPCM25333bps 0x00000001
-+#define kPCM26666bps 0x00000002
-+#define kPCM28000bps 0x00000004
-+#define kPCM29333bps 0x00000008
-+#define kPCM30666bps 0x00000010
-+#define kPCM32000bps 0x00000020
-+#define kPCM33333bps 0x00000040
-+#define kPCM34666bps 0x00000080
-+#define kPCM36000bps 0x00000100
-+#define kPCM37333bps 0x00000200
-+#define kPCM38666bps 0x00000400
-+#define kPCM40000bps 0x00000800
-+#define kPCM41333bps 0x00001000
-+#define kPCM42666bps 0x00002000
-+#define kPCM44000bps 0x00004000
-+#define kPCM45333bps 0x00008000
-+#define kPCM46666bps 0x00010000
-+#define kPCM48000bps 0x00020000
-+#define kPCM49333bps 0x00040000
-+#define kPCM50666bps 0x00080000
-+#define kPCM52000bps 0x00100000
-+#define kPCM53333bps 0x00200000
-+#define kPCM54666bps 0x00400000
-+#define kPCM56000bps 0x00800000
-+#define kPCM57333bps 0x01000000
-+
-+#define kV90ServerToClientDataRates \
-+ ( kPCM28000bps | kPCM29333bps | kPCM30666bps | \
-+ kPCM32000bps | kPCM33333bps | kPCM34666bps | \
-+ kPCM36000bps | kPCM37333bps | kPCM38666bps | \
-+ kPCM40000bps | kPCM41333bps | kPCM42666bps | \
-+ kPCM44000bps | kPCM45333bps | kPCM46666bps | \
-+ kPCM48000bps | kPCM49333bps | kPCM50666bps | \
-+ kPCM52000bps | kPCM53333bps | kPCM54666bps | \
-+ kPCM56000bps | kPCM57333bps )
-+
-+#define kV90ClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | \
-+ k14400bps | k16800bps | k19200bps | k21600bps | \
-+ k24000bps | k26400bps | k28800bps | k31200bps | \
-+ k33600bps )
-+
-+
-+
-+#define kX2ServerToClientDataRates \
-+ ( kPCM25333bps | kPCM26666bps | kPCM28000bps | \
-+ kPCM29333bps | kPCM30666bps | kPCM32000bps | \
-+ kPCM33333bps | \
-+ kPCM34666bps | kPCM36000bps | kPCM37333bps | \
-+ kPCM38666bps | kPCM40000bps | kPCM41333bps | \
-+ kPCM42666bps | kPCM44000bps | kPCM45333bps | \
-+ kPCM46666bps | kPCM48000bps | kPCM49333bps | \
-+ kPCM50666bps | kPCM52000bps | kPCM53333bps | \
-+ kPCM54666bps | kPCM56000bps | kPCM57333bps )
-+#define kX2ClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | k14400bps | \
-+ k16800bps | k19200bps | k21600bps | k24000bps | k26400bps | k28800bps | \
-+ k31200bps )
-+
-+ /*
-+ Rates specific for Flex
-+ */
-+#define kPCMFlex32000bps 0x00000001
-+#define kPCMFlex34000bps 0x00000002
-+#define kPCMFlex36000bps 0x00000004
-+#define kPCMFlex38000bps 0x00000008
-+#define kPCMFlex40000bps 0x00000010
-+#define kPCMFlex42000bps 0x00000020
-+#define kPCMFlex44000bps 0x00000040
-+#define kPCMFlex46000bps 0x00000080
-+#define kPCMFlex48000bps 0x00000100
-+#define kPCMFlex50000bps 0x00000200
-+#define kPCMFlex52000bps 0x00000400
-+#define kPCMFlex54000bps 0x00000800
-+#define kPCMFlex56000bps 0x00001000
-+#define kPCMFlex58000bps 0x00002000
-+#define kPCMFlex60000bps 0x00004000
-+
-+#define kFlexServerToClientDataRates \
-+ ( kPCMFlex32000bps | kPCMFlex34000bps | kPCMFlex36000bps | kPCMFlex38000bps | \
-+ kPCMFlex40000bps | kPCMFlex42000bps | kPCMFlex44000bps | kPCMFlex46000bps | \
-+ kPCMFlex48000bps | kPCMFlex50000bps | kPCMFlex52000bps | kPCMFlex52000bps | \
-+ kPCMFlex54000bps | kPCMFlex56000bps | kPCMFlex58000bps | kPCMFlex60000bps )
-+
-+#define kFlexClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | \
-+ k14400bps | k16800bps | k19200bps | k21600bps | \
-+ k24000bps | k26400bps | k28800bps | k31200bps )
-+
-+
-+#define k2400BitShift 5
-+#define k4800BitShift 6
-+
-+#define kPCM28000bpsShift 2
-+
-+#define kV21Rates k300bps
-+#define kV22Rates k1200bps
-+#define kV22bisRates (k1200bps | k2400bps)
-+#define kV23Rates (k75bps | k1200bps)
-+#define kCidRates (k1200bps)
-+#define kV32Rates (k4800bps | k9600bps)
-+#define kV32bisRates (kV32Rates | k7200bps | k12000bps | k14400bps)
-+#define kV32terboRates (kV32bisRates | k16800bps | k19200bps)
-+#define kV34Rates ( k2400bps | k4800bps | k7200bps | k9600bps | k12000bps | k14400bps | \
-+ k16800bps | k19200bps | k21600bps | k24000bps | k26400bps | k28800bps | \
-+ k31200bps | k33600bps )
-+
-+#define kV27Rates (k2400bps | k4800bps)
-+#define kV29Rates (k4800bps | k7200bps | k9600bps)
-+#define kBell103Rates k300bps
-+#define kBell212Rates k1200bps
-+
-+
-+/* Demodulator capabilities */
-+#define kNeecEnabled 0x00000001
-+#define kPFeecEnabled 0x00000002
-+#define kIeecEnabled 0x00000004
-+#define kFeecEnabled 0x00000008
-+
-+#define kRapidEqualizerTraining 0x00000010
-+#define kRapidPECTraining 0x00000020
-+#define kRapidECTraining 0x00000040
-+#define kAutoLoadReductionEnabled 0x00000080
-+
-+#define kTimingTrackingEnabled 0x00000100
-+#define kPhaseLockedLoopEnabled 0x00000200
-+#define kFeecPhaseLockedLoopEnabled 0x00000400
-+#define kPhaseJitterTrackingEnabled 0x00000800
-+
-+#define kClockErrorTrackingEnabled 0x00001000
-+#define kFreqOffsetTrackingEnabled 0x00002000
-+#define kFeecFreqOffsetTrackingEnabled 0x00004000
-+
-+#define kShorterNeecEnabled 0x00008000
-+#define kShorterPFeecEnabled 0x00010000
-+#define kFrondEndHPFilterEnabled 0x00020000
-+#define kGainControlEnabled 0x00040000
-+#define kPhaseHitControlEnabled 0x00080000
-+#define kBandEdgeCorrectorEnabled 0x00100000
-+#define kDisableFaxFastClearDown 0x00200000
-+
-+#define kImdOffsetCompensationEnabled 0x00400000
-+
-+#define kV34ShortEqlLengthExtShift 23
-+#define kV34ShortEqlLengthExtMask (0x3<<kV34ShortEqlLengthExtShift)
-+#define kV34EqlLengthReductionEnabled (1<<(kV34ShortEqlLengthExtShift+2))
-+#define kPCMIeecLengthReductionEnabled (1<<(kV34ShortEqlLengthExtShift+3))
-+
-+/* featureMap */
-+
-+#define kAllFeatures 0xFFFFFFFF
-+
-+#define kAutomodingEnabled 0x00000001 /* bit 1 */
-+#define kAutomodingDisabled 0x00000000 /* bit 1 */
-+
-+#define kV8SendCIEnabled 0x00000002 /* bit 2 */
-+#define kV8SendCIDisabled 0x00000000 /* bit 2 */
-+
-+#define kV34CMEModem 0x00000004 /* bit 3 */
-+#define kV34NotCMEModem 0x00000000 /* bit 3 */
-+
-+#define kV34ExtraINFOPreamble 0x00000008 /* bit 4 */
-+
-+#define kRetrainingEnabled 0x00000010
-+#define kRateRenegotiationEnabled 0x00000020
-+#define kTrellisCodingEnabled 0x00000040
-+
-+/* Fax specific features */
-+#define kFaxShortTraining 0x00000080
-+#define kFaxEchoSuppressionEnabled 0x00000100
-+
-+/* V.22/V.22bis specific features */
-+#define kV22GuardTone1800HzEnabled 0x00000200
-+#define kV22GuardTone550HzEnabled 0x00000400
-+
-+
-+/* V.34 specific features */
-+
-+#define kV34bisEnabled 0x00000800
-+
-+#define kV34PowerReductionAllowed 0x00001000
-+#define kAuxChannelEnabled 0x00002000
-+#define kAuxChannelDisabled 0x00000000
-+#define kV34TrellisEncoderTypeMask 0x0000C000
-+#define kV34TrellisEncoderTypeShift 14
-+
-+#define kTRN16 0x00010000
-+#define kAssymDataRatesEnabled 0x00020000
-+#define kNonLinearCodingEnabled 0x00040000
-+#define kConstShapingEnabled 0x00080000
-+#define kPrecodingEnabled 0x00100000
-+
-+#define kV34LoFcAt2400HzEnabled 0x00200000
-+#define kV34HiFcAt2400HzEnabled 0x00400000
-+#define kV34LoFcAt2743HzEnabled 0x00800000
-+#define kV34HiFcAt2743HzEnabled 0x01000000
-+#define kV34LoFcAt2800HzEnabled 0x02000000
-+#define kV34HiFcAt2800HzEnabled 0x04000000
-+#define kV34LoFcAt3000HzEnabled 0x08000000
-+#define kV34HiFcAt3000HzEnabled 0x10000000
-+#define kV34LoFcAt3200HzEnabled 0x20000000
-+#define kV34HiFcAt3200HzEnabled 0x40000000
-+#define kV34LoFcAt3429HzEnabled 0x80000000
-+#define kV34HiFcAt3429HzEnabled 0x80000000
-+
-+/* auxiliary features definintions map */
-+
-+#define kLoopbackTestFinish 0x00000000
-+#define kLoopbackTestV54Loop1 0x00000001
-+#define kLoopbackTestV54Loop2 0x00000002
-+#define kLoopbackTestV54Loop3 0x00000003
-+#define kLoopbackTestTypeMask 0x00000003
-+#define kLoopbackTestAutoRespondEnabled 0x00000004
-+#define kLoopbackSelfTest 0x00000008
-+
-+#define kPreempFilterMask 0x000000F0
-+#define kPreempFilterShift 4
-+
-+#define kPcmCodingTypeMuLaw 0x00000100
-+#define kPcmServerToServerEnabled 0x00000200
-+#define kPcmIsServerModem 0x00000400
-+#define kPcmAnalogModemAvailable 0x00000800
-+#define kPcmDigitalModemAvailable 0x00001000
-+#define kPcmDceOnDigitalNetwork 0x00002000
-+#define kPcmDModemPwrCalAtCodecOut 0x00004000
-+#define kPcm3429UpstreamAvailable 0x00008000
-+
-+#define kPcmSpectralShapingBitsMask 0x00070000
-+#define kPcmSpectralShapingBitsShift 16
-+#define kV90ServerNotDetSbarAfterJdbarFix 0x00080000
-+
-+#define kAutomoderPassive 0x00400000
-+
-+#define kV8HoldANSamUntilDetCI 0x00800000
-+#define kFaxSendFromOrgSide 0x01000000
-+#define kFaxV34HDX2400bpsCtrlChan 0x02000000
-+#define kFaxV34HDXAllowAsymCtrlChan 0x04000000
-+#define kV8ANSamStageDisabled 0x08000000
-+
-+#define kFlexSkipV8bis 0x10000000
-+#define kV34ControlChannelEnabled 0x20000000
-+#define kV34SeamlessRateChangeEnabled 0x40000000
-+
-+#define kPTTTest 0x80000000
-+
-+/* call progress detection Map */
-+
-+#define kDialTone 0x00000001
-+#define kRingBack 0x00000002
-+#define kBusy 0x00000004
-+#define kReorder 0x00000008
-+#define k2ndDTn 0x00000010
-+#define kBongTone 0x00000020
-+
-+/* Break type bit settings */
-+#define kExpedited 0x0001
-+#define kDestructive 0x0002
-+
-+/* async Framer setup map */
-+
-+#define kNDataBitsMask 0x03
-+#define k5DataBits 0x00
-+#define k6DataBits 0x01
-+#define k7DataBits 0x02
-+#define k8DataBits 0x03
-+
-+#define kNDataBitsShift 0
-+#define kNDataBitsOffset 5
-+
-+#define kParityTypeMask 0x1C
-+#define kNoParity 0x00
-+#define kOddParity 0x04
-+#define kEvenParity 0x08
-+#define kMarkParity 0x0C
-+#define kSpaceParity 0x10
-+
-+#define kNStopBitsMask 0x60
-+#define k1StopBits 0x00
-+#define k2StopBits 0x20
-+
-+#define kNStopBitsShift 5
-+#define kNStopBitsOffset 1
-+
-+/* Sync Framer setup map */
-+
-+#define kUnderrunCharMask 0xff
-+#define kRepeatLastCharOnUnderrun 0x100
-+
-+/* HDLC sync framer setup maps */
-+#define kNFlagsBeforeFramesMask 0x3F
-+#define kNFlagsBeforeFramesShift 0
-+
-+#define kNFlagsBetweenFramesMask 0x3F
-+#define kNFlagsBetweenFramesShift 6
-+
-+#define k32BitCRC 0x1000
-+#define kFlagSharingEnabled 0x2000
-+
-+#define kNFlagsBeforeReportMask 0x03 /* no. of *extra* flags reqd before frame */
-+#define kNFlagsBeforeReportShift 14
-+
-+#define kTxDeferredCRC 0x10000
-+#define kRxDeferredCRC 0x20000
-+#define kTxIdleMarks 0x40000
-+#define kNoCRC 0x80000
-+
-+/* SAM framer setup maps */
-+
-+#define kSAMTransparentIdleTypeMask 0x00000003
-+#define kSAMTransparentIdleTypeShift 0
-+#define kSAMFramedIdleTypeMask 0x00000004
-+#define kSAMFramedIdleTypeShift 2
-+#define kSAMFramedOverrunActionMask 0x00000010
-+#define kSAMFramedOverrunActionShift 4
-+#define kSAMHalfDuplexModeMask 0x00000020
-+#define kSAMHalfDuplexModeShift 5
-+#define kSAMCRCTypeMask 0x000000C0
-+#define kSAMCRCTypeShift 6
-+#define kSAMNRZIEnabledMask 0x00000100
-+#define kSAMNRZIEnabledShift 8
-+#define kSAMSyn1Mask 0x00FF0000
-+#define kSAMSyn1Shift 16
-+#define kSAMSyn2Mask 0xFF000000
-+#define kSAMSyn2Shift 24
-+
-+/* <trans_idle> */
-+#define kSAM8bitSYNHuntDisabled 0
-+#define kSAM8bitSYNHuntEnabled ((ulong)1 << kSAMTransparentIdleTypeShift)
-+#define kSAM16bitSYNHuntEnabled ((ulong)2 << kSAMTransparentIdleTypeShift)
-+
-+/* <framed_idle> */
-+#define kSAMSendFlagsOnIdle 0
-+#define kSAMSendMarksOnIdle ((ulong)1 << kSAMFramedIdleTypeShift)
-+
-+/* <framed_un_ov> */
-+#define kSAMAbortOnUnderrun 0
-+#define kSAMFlagsOnUnderrun ((ulong)1 << kSAMFramedOverrunActionShift)
-+
-+/* <hd_auto> */
-+#define kSAMHalfDuplexNoAuto 0
-+#define kSAMHalfDuplexAuto ((ulong)1 << kSAMHalfDuplexModeShift)
-+
-+
-+/* <crc_type> */
-+#define kSAMNoCRC 0
-+#define kSAM16bitCRC ((ulong)1 << kSAMCRCTypeShift)
-+#define kSAM32bitCRC ((ulong)2 << kSAMCRCTypeShift)
-+
-+/* <nrzi_en> */
-+#define kSAMNRZIDisabled 0
-+#define kSAMNRZIEnabled ((ulong)1 << kSAMNRZIEnabledShift)
-+
-+
-+/* LAPM setup maps */
-+#define kLapmDirection 0x00000001 /* Bit 0 */
-+#define kLapmSREJEnabled 0x00000002 /* Bit 1 */
-+#define kLapmDetectionEnabled 0x00000004 /* Bit 2 */
-+#define kLapmLongADPEnabled 0x00000008 /* Bit 3 */
-+
-+#define kLapmCompressionEnabledMask 0x00000030
-+#define kLapmTxCompressionEnabled 0x00000010 /* Bit 4 */
-+#define kLapmRxCompressionEnabled 0x00000020 /* Bit 5 */
-+#define kLapmCompressionEnabledShift 4
-+
-+#define kLapmRetryLimitMask 0x000000C0 /* Bits 6,7 */
-+
-+#define kLapmNoRetryLimit 0x00000000
-+#define kLapm4Retries 0x00000040
-+#define kLapm8Retries 0x00000080
-+#define kLapm20Retries 0x000000C0
-+
-+#define kLapmWindowSizeMask 0x00001F00 /* Bits 8-12 */
-+#define kLapmWindowSizeShift 8
-+
-+#define kLapmWindowSize8 0x00000800
-+#define kLapmWindowSize15 0x00000F00
-+
-+
-+#define kLapmInfoFieldSizeMask 0x0000E000 /* Bits 13-15 */
-+#define kLapmInfoField8Bytes 0x00000000
-+#define kLapmInfoField16Bytes 0x00002000
-+#define kLapmInfoField32Bytes 0x00004000
-+#define kLapmInfoField64Bytes 0x00006000
-+#define kLapmInfoField128Bytes 0x00008000
-+#define kLapmInfoField192Bytes 0x0000A000
-+#define kLapmInfoField256Bytes 0x0000C000
-+#define kLapmInfoField512Bytes 0x0000E000
-+#define kLapmInfoFieldSizeShift 13
-+
-+#define kLapmT400Mask 0x00030000 /* Bits 16-17 */
-+#define kLapmAutoT400 0x00000000
-+#define kLapm750msT400 0x00010000
-+#define kLapm3secT400 0x00020000
-+#define kLapm30secT400 0x00030000
-+
-+#define kLapmT401Mask 0x000C0000 /* Bits 18-19 */
-+#define kLapmAutoT401 0x00000000
-+#define kLapm750msT401 0x00040000
-+#define kLapm3secT401 0x00080000
-+#define kLapm6secT401 0x000C0000
-+
-+#define kLapmT403Mask 0x00300000 /* Bits 20-21 */
-+#define kLapmAutoT403 0x00000000
-+#define kLapm750msT403 0x00100000
-+#define kLapm2secT403 0x00200000
-+#define kLapm4secT403 0x00300000
-+
-+
-+
-+#define kLapmDictSizeMask 0x00C00000 /* Bits 22-23 */
-+#define kLapmDictSize512 0x00000000
-+#define kLapmDictSize1024 0x00400000
-+#define kLapmDictSize2048 0x00800000
-+#define kLapmDictSize4096 0x00C00000
-+
-+#define kLapmStringSizeMask 0xFF000000 /* Bits 24-31 */
-+#define kLapmStringSizeShift 24
-+
-+/* MNP setup maps */
-+
-+#define kMnpMinPLevel 0x00000001 /* Bit 0: 1 - Minimal, 0 - Standard */
-+#define kMnpStdPLevel 0x00000000 /* Bit 0: 1 - Minimal, 0 - Standard */
-+
-+#define kMnpOptimizationEnabled 0x00000002 /* Bit 1 */
-+#define kMnpOptimizationDisabled 0x00000000 /* Bit 1 */
-+
-+#define kMnpCompressionEnabled 0x00000004 /* Bit 2 */
-+#define kMnpCompressionDisabled 0x00000000 /* Bit 2 */
-+
-+#define kMnpClassMask 0x00000018
-+#define kMnpClassShift 3
-+#define kMnpClass1 0x00000008
-+#define kMnpClass2 0x00000010
-+#define kMnpClass3 0x00000018 /* Bits 3,4 */
-+
-+#define kMnpMaxRetryMask 0x00000060 /* Bits 5,6 */
-+#define kMnpMaxRetryShift 5
-+#define kMnpNoRetryLimit 0x00000000
-+#define kMnp4Retries 0x00000020
-+#define kMnp8Retries 0x00000040
-+#define kMnp20Retries 0x00000060
-+
-+#define kMnpInfoFieldSizeMask 0x00000380 /* Bits 7-9 */
-+#define kMnpInfoFieldSizeShift 7
-+#define kMnpInfoField8Bytes 0x00000000
-+#define kMnpInfoField16Bytes 0x00000080
-+#define kMnpInfoField32Bytes 0x00000100
-+#define kMnpInfoField64Bytes 0x00000180
-+#define kMnpInfoField128Bytes 0x00000200
-+#define kMnpInfoField192Bytes 0x00000280
-+#define kMnpInfoField256Bytes 0x00000300
-+#define kMnpInfoField260Bytes 0x00000380
-+
-+#define kMnpT400Mask 0x00003000 /* Bits 12,13 */
-+#define kMnpT400Shift 12
-+#define kMnpAutoT400 0x00000000
-+#define kMnp750msT400 0x00001000
-+#define kMnp3secT400 0x00002000
-+#define kMnp6secT400 0x00003000
-+
-+#define kMnpT401Mask 0x0000C000 /* Bits 14,15 */
-+#define kMnpT401Shift 14
-+#define kMnpAutoT401 0x00000000
-+#define kMnp750msT401 0x00004000
-+#define kMnp3secT401 0x00008000
-+#define kMnp6secT401 0x0000C000
-+
-+#define kMnpT403Mask 0x00030000 /* Bits 16,17 */
-+#define kMnpT403Shift 16
-+#define kMnpAutoT403 0x00000000
-+#define kMnp60secT403 0x00010000
-+#define kMnp600secT403 0x00020000
-+#define kMnp3600secT403 0x00030000
-+
-+#define kMnpFallbackTypeMask 0x000C0000 /* Bits 18,19 */
-+#define kMnpFallbackTypeShift 18
-+#define kMnpNoFallback 0x00000000
-+#define kMnpFallbackTime 0x00040000
-+#define kMnpFallback200 0x00080000
-+#define kMnpFallbackChar 0x000C0000
-+
-+#define kMnpWindowSizeMask 0x00300000 /* Bits 20,21 */
-+#define kMnpWindowSizeShift 20
-+#define kMnp1Frame 0x00000000
-+#define kMnp4Frames 0x00100000
-+#define kMnp8Frames 0x00200000
-+#define kMnp16Frames 0x00300000
-+
-+#define kMnpDirection 0x00800000 /* Bit 22 */
-+
-+#define kMnpFallbackCharMask 0xFF000000 /* Bit 24-31 */
-+#define kMnpFallbackCharShift 24
-+
-+/* kV34HDXTurnOffCurrentModeCmd state parameter values */
-+
-+#define kV34HDXTurnOffAsClearDown 0
-+#define kV34HDXTurnOffFromControlSource 1
-+#define kV34HDXTurnOffFromControlDestination 2
-+#define kV34HDXTurnOffFromPrimarySource 3
-+#define kV34HDXTurnOffFromPrimaryDestination 4
-+
-+/* V70 setup maps */
-+
-+#define kV70Direction 0x00000001 /* Bit 0 */
-+#define kV70uIHEnabled 0x00000002 /* Bit 1 */
-+#define kV70AudioHeaderEnabled 0x00000004 /* Bit 2 */
-+#define kV70SilenceSupprEnabled 0x00000008 /* Bit 3 */
-+
-+#define kV70SuspendResumeShift 4
-+#define kV70SuspendResumeMask (3 << kV70SuspendResumeShift)
-+#define kV70SuspendResumeDisabled 0x00000000 /* Bit 4,5 */
-+#define kV70SuspendResumeWAddr 0x00000010 /* Bit 4 */
-+#define kV70SuspendResumeWoAddr 0x00000020 /* Bit 5 */
-+
-+#define kV70CrcLengthShift 6
-+#define kV70CrcLengthMask (3 << kV70CrcLengthShift)
-+#define kV70CrcLength16 0x00000000 /* Bit 6,7 */
-+#define kV70CrcLength8 0x00000040 /* Bit 6 */
-+#define kV70CrcLength32 0x00000080 /* Bit 7 */
-+
-+#define kV70BlockingFactorShift 8
-+#define kV70BlockingFactorMask (3 << kV70BlockingFactorShift)
-+#define kV70BlockingFactor1 0x00000000 /* Bit 8,9 */
-+#define kV70BlockingFactor2 0x00000100 /* Bit 8 */
-+#define kV70BlockingFactor3 0x00000200 /* Bit 9 */
-+#define kV70BlockingFactor4 0x00000300 /* Bit 8,9 */
-+
-+#define kV70InitChannelsShift 10
-+#define kV70InitChannelsMask (1 << kV70InitChannelsShift)
-+#define kV70InitNoChannels 0x00000000 /* Bit 10,11 */
-+#define kV70InitDataChannel 0x00000400 /* Bit 10,11 */
-+#define kV70InitAudioChannel 0x00000800 /* Bit 10,11 */
-+#define kV70InitBothChannels 0x00000C00 /* Bit 10,11 */
-+
-+#define kV70OOBEnabled 0x00001000 /* Bit 12 */
-+
-+/* V80 setup maps */
-+
-+#define kV80Direction 0x00000001 /* Bit 0 */
-+
-+#define kV80ModeShift 1
-+#define kV80ModeMask (3 << kV80ModeShift)
-+#define kV80SyncMode (0 << kV80ModeShift)
-+#define kV80TunnellingMode (1 << kV80ModeShift)
-+#define kV80SamMode (2 << kV80ModeShift)
-+#define kV80SamTransparentMode (2 << kV80ModeShift)
-+#define kV80SamFramedMode (3 << kV80ModeShift)
-+
-+#define kV80TransIdleShift 3
-+#define kV80TransIdleMask (3 << kV80TransIdleShift)
-+#define kV80TransIdleNoHunt (0 << kV80TransIdleShift)
-+#define kV80TransIdleHunt8 (1 << kV80TransIdleShift)
-+#define kV80TransIdleHunt16 (2 << kV80TransIdleShift)
-+
-+#define kV80FrameIdleShift 5
-+#define kV80FrameIdleMask (1 << kV80FrameIdleShift)
-+#define kV80FrameIdleFlags (0 << kV80FrameIdleShift)
-+#define kV80FrameIdleMarks (1 << kV80FrameIdleShift)
-+
-+#define kV80FrameUnOvShift 6
-+#define kV80FrameUnOvMask (1 << kV80FrameUnOvShift)
-+#define kV80FrameUnOvAbort (0 << kV80FrameUnOvShift)
-+#define kV80FrameUnOvFlag (1 << kV80FrameUnOvShift)
-+
-+#define kV80HdAutoShift 7
-+#define kV80HdAutoMask (1 << kV80HdAutoShift)
-+#define kV80HdAutoNormal (0 << kV80HdAutoShift)
-+#define kV80HdAutoExtended (1 << kV80HdAutoShift)
-+
-+#define kV80CrcTypeShift 8
-+#define kV80CrcTypeMask (3 << kV80CrcTypeShift)
-+#define kV80NoCrc (0 << kV80CrcTypeShift)
-+#define kV80Crc16 (1 << kV80CrcTypeShift)
-+#define kV80Crc32 (2 << kV80CrcTypeShift)
-+
-+#define kV80NrziShift 10
-+#define kV80NrziMask (1 << kV80NrziShift)
-+#define kV80NrziDisabled (0 << kV80NrziShift)
-+#define kV80NrziEnabled (1 << kV80NrziShift)
-+
-+#define kV80Syn1Mask 0x00FF0000 /* Bit 16-23 */
-+#define kV80Syn1Shift 16
-+#define kV80Syn2Mask 0xFF000000 /* Bit 24-31 */
-+#define kV80Syn2Shift 24
-+
-+/* kStartCallProgressMonitorCmd setup masks */
-+
-+#define kDTMFDetectorDebouncerEnabled 0x0001
-+#define kModemSignalDetectorDebouncerEnabled 0x0002
-+#define kCallProgressDetectorDebouncerEnabled 0x0004
-+#define kCustomSignalDebouncerEnabled 0x0008
-+#define kFaxCallingToneSuppressionEnabled 0x0010
-+#define kDataCallingToneSuppressionEnabled 0x0020
-+#define kCISuppressionEnabled 0x0040
-+#define kAnsSuppressionEnabled 0x0080
-+
-+/* kDialCmd setup masks (dialerSetup bit fields) */
-+
-+#define kDTMFDialingEnabled 0x0001
-+#define kPulseDialingEnabled 0x0002
-+#define kModeSwitchEnabled 0x0004
-+#define kBlindDialingEnabled 0x0008
-+#define kPulseDialingMethodMask 0x0030
-+#define kDialModifierTranslationMask 0x00C0
-+#define kFlashWhilePulseDialingEnabled 0x0100
-+
-+/* Pulse dialing method */
-+#define kPulseDialingNPulsesPerDigit 0x0000
-+#define kPulseDialingNplusOnePulsesPerDigit 0x0010
-+#define kPulseDialingTenMinusNPulsesPerDigit 0x0020
-+
-+/* Dial modifier translation */
-+#define kTreatWasPause 0x0040 /* Tread 'W' modifier as pause */
-+#define kTreatCommaAsWaitForDialtone 0x0080
-+
-+#ifdef TI_C6X
-+#include "C6xDefs.h"
-+#endif
-+#ifdef PENTIUM_MMX
-+#include "PentiumDefs.h"
-+#endif
-+
-+
-+#if defined(DSP16K) && !defined(SoftModemGlobals)
-+/* ensure that code generator does not use r5 */
-+register int *softmodem_h_should_not_be_included_after_softmodem_gh asm("r5");
-+#endif
-+
-+/****************************************************************************/
-+/* 3. Interface functions. */
-+/* */
-+/****************************************************************************/
-+
-+#ifdef ADSL_MODEM
-+
-+#ifndef SoftDslHeader
-+#include "SoftDsl.h"
-+#endif
-+extern char* SM_DECL SoftModemGetRevString(void);
-+extern char* SM_DECL SoftModemGetProductName(void);
-+extern char* SM_DECL SoftModemGetBuildDate(void);
-+extern char* SM_DECL SoftModemGetFullManufacturerName(void);
-+extern char* SM_DECL SoftModemGetShortManufacturerName(void);
-+extern int SM_DECL SoftModemRevStringSize(void);
-+extern char* SM_DECL SoftModemGetVendorIDString(void);
-+extern char* SM_DECL SoftModemGetT1413VendorIDString(void);
-+extern char* SM_DECL SoftModemGetSerialNumberString(void);
-+extern int SM_DECL SoftModemSerNumStringSize(void);
-+#define SoftDslGetProductName SoftModemGetProductName
-+#define SoftDslGetBuildDate SoftModemGetBuildDate
-+#define SoftDslGetFullManufacturerName SoftModemGetFullManufacturerName
-+#define SoftDslGetShortManufacturerName SoftModemGetShortManufacturerName
-+
-+#else /* !ADSL_MODEM */
-+
-+extern void SM_DECL SoftModemSetMemoryPtr (void *varsPtr);
-+extern void* SM_DECL SoftModemGetMemoryPtr (void);
-+extern void SM_DECL SoftModemSetRefData (void *varsPtr);
-+extern void* SM_DECL SoftModemGetRefData (void);
-+extern int SM_DECL SoftModemGetMemorySize (void);
-+extern void SM_DECL SoftModemInit (void);
-+extern void SM_DECL SoftModemReset (void);
-+extern void SM_DECL SoftModemLineHandler (int sampleCount, short *srcPtr, short *dstPtr);
-+extern void SM_DECL SoftModemTimer (long timeQ24ms);
-+extern Boolean SM_DECL SoftModemCommandHandler (modemCommandStruct *cmdPtr);
-+extern int SM_DECL SoftModemGetExternalMemorySize(void);
-+extern void SM_DECL SoftModemSetExternalMemoryPtr(void *varsPtr);
-+
-+extern void SM_DECL SoftModemSetPcmCoding (pcmCodingType pcmCoding);
-+extern void SM_DECL SoftModemPcmLineHandler (int sampleCount, uchar *srcPtr, uchar *dstPtr);
-+
-+/* SoftModem IO functions */
-+extern int SM_DECL SoftModemWrite(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemRead(int nBytes, uchar* dstPtr);
-+extern int SM_DECL SoftModemWriteFrame(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemReadFrame(int maxFrameSize, uchar* dstPtr);
-+extern int SM_DECL SoftModemCountWritePending(void);
-+extern int SM_DECL SoftModemCountReadPending(void);
-+extern int SM_DECL SoftModemWriteSpaceAvailable(void);
-+extern void SM_DECL SoftModemWriteFlush(void);
-+extern void SM_DECL SoftModemReadFlush(void);
-+extern int SM_DECL SoftModemGetWriteBufferSize(void);
-+extern int SM_DECL SoftModemGetReadBufferSize(void);
-+
-+#ifdef AUDIO
-+extern int SM_DECL SoftModemAudioHandler(int sampleCount, short *srcPtr, short *dstPtr);
-+extern int SM_DECL SoftModemAudioRxDataHandler(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemAudioTxDataHandler(int nBytes, uchar* dstPtr);
-+#endif
-+
-+
-+#define SoftModemSetGlobalPtr SoftModemSetMemoryPtr
-+#define SoftModem SoftModemLineHandler
-+#ifndef LINKLAYER_V42BIS_LARGE_DICTIONARY
-+#define kSoftModemMaxMemorySize (65536)
-+#else
-+#define kSoftModemMaxMemorySize (65536 + 8192)
-+#endif
-+
-+/*
-+ * Internal functions
-+ */
-+extern long SM_DECL SoftModemGetDCOffset(void);
-+extern void SM_DECL SoftModemDisableDCOffsetTracking(void);
-+extern void SM_DECL SoftModemEnableDCOffsetTracking(void);
-+extern long SM_DECL SoftModemGetRcvPower(void);
-+extern ulong SM_DECL SoftModemGetHybridDelay(void);
-+extern void SM_DECL SoftModemStatusHandler (modemStatusStruct *status);
-+extern Boolean SM_DECL SoftModemInternalCommandHandler (modemCommandStruct *cmdPtr);
-+extern void SM_DECL SoftModemInternalStatusHandler (modemStatusStruct *status);
-+extern void SM_DECL SoftModemSetControllerOnlyMode(commandHandlerType externalDataPumpCommandHandlerPtr);
-+extern char* SM_DECL SoftModemGetRevString(void);
-+extern char* SM_DECL SoftModemGetProductName(void);
-+extern char* SM_DECL SoftModemGetBuildDate(void);
-+extern char* SM_DECL SoftModemGetFullManufacturerName(void);
-+extern char* SM_DECL SoftModemGetShortManufacturerName(void);
-+extern int SM_DECL SoftModemRevStringSize(void);
-+extern char* SM_DECL SoftModemGetVendorIDString(void);
-+extern char* SM_DECL SoftModemGetSerialNumberString(void);
-+extern void SM_DECL SoftModemAuxTxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemAuxRxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemTxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemRxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemATPrintf(uchar *format, void *arg1, void *arg2, void *arg3);
-+
-+#define SoftModemSetInputSaturationLimit(limit) (gSystemVars.inputSignalLimit = limit)
-+#define SoftModemResetInputSaturationLimit() (gSystemVars.inputSignalLimit = 0)
-+
-+#endif /* !ADSL_MODEM */
-+
-+#endif /* SoftModemPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModemTypes.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModemTypes.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModemTypes.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/bcm96348/softdsl/SoftModemTypes.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,292 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftModemTypes.h
-+ *
-+ *
-+ * Description:
-+ * This file contains some of the type declarations for SoftModem
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: SoftModemTypes.h,v 1.9 2004/04/13 00:16:59 ilyas Exp $
-+ *
-+ * $Log: SoftModemTypes.h,v $
-+ * Revision 1.9 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.8 2004/01/24 01:35:33 ytan
-+ * add multi-section lmem swap
-+ *
-+ * Revision 1.7 2001/09/21 19:19:01 ilyas
-+ * Minor fixes for VxWorks build
-+ *
-+ * Revision 1.6 2001/08/16 02:16:39 khp
-+ * - added definitions for SLOW_DATA and FAST_TEXT, defined to nothing
-+ * except when bcm47xx && USE_SLOW_DATA or USE_FAST_TEXT. Any function
-+ * that needs to run fast should be marked with FAST_TEXT. Any data that
-+ * is not referenced often should be marked with SLOW_DATA.
-+ *
-+ * Revision 1.5 2001/03/30 00:49:59 liang
-+ * Changed warning output message.
-+ *
-+ * Revision 1.4 2000/06/21 22:24:40 yongbing
-+ * Modify WARN micro to limit the number of same warnings printed
-+ *
-+ * Revision 1.3 1999/08/05 20:02:13 liang
-+ * Merged with the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.2 1999/01/27 22:14:29 liang
-+ * Merge with SoftModem_3_1_02.
-+ *
-+ * Revision 1.19 1998/11/17 04:02:39 yura
-+ * Fixed WARN and ASSERT redefinition warning for WinNT targets
-+ *
-+ * Revision 1.18 1998/08/26 19:20:43 scott
-+ * Commented out EXCLUDE_CYGWIN32_TYPES define
-+ *
-+ * Revision 1.17 1998/08/13 19:03:06 scott
-+ * Added BitField definition and INT_IS_LONG
-+ *
-+ * Revision 1.16 1998/08/08 03:39:55 scott
-+ * The DEBUG_PTR_ENABLED macro can be used to enable only the DEBUG_PTR macros
-+ *
-+ * Revision 1.15 1998/07/28 22:21:31 mwg
-+ * Fixed problems with NULL & nil being defined incorrectly
-+ *
-+ * Revision 1.14 1998/07/08 17:09:17 scott
-+ * Define ASSERT and WARN only if not already defined
-+ *
-+ * Revision 1.13 1998/07/02 20:46:34 scott
-+ * Added workaround for building certain builds with older SunOS
-+ *
-+ * Revision 1.12 1998/02/09 18:24:49 scott
-+ * Defined "Private" as nothing for GreenHill (to prevent erroneous section
-+ * allocations for data)
-+ *
-+ * Revision 1.11 1997/08/29 21:39:24 scott
-+ * Added check for LONG_IS_INT define (for TI C6X support)
-+ *
-+ * Revision 1.10 1997/05/29 19:50:23 mwg
-+ * Added code to avoid type redefintions under SunOS.
-+ *
-+ * Revision 1.9 1997/03/19 18:35:08 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.8 1997/02/11 00:05:53 mwg
-+ * Minor adjustments for Pentium optimization.
-+ *
-+ * Revision 1.7 1997/01/11 01:30:47 mwg
-+ * Added new macro WARN -- the same as ASSERT but without exit.
-+ *
-+ * Revision 1.6 1996/08/22 20:07:39 liang
-+ * When ASSERT fires, only print out information, don't exit.
-+ *
-+ * Revision 1.5 1996/05/06 06:49:10 mwg
-+ * Fixed linux problems.
-+ *
-+ * Revision 1.4 1996/05/02 08:40:16 mwg
-+ * Merged in Chromatic bug fixes.
-+ *
-+ * Revision 1.3 1996/04/01 20:59:53 mwg
-+ * Added macros to setup and use debug pointer.
-+ *
-+ * Revision 1.2 1996/02/27 01:50:04 mwg
-+ * Added ASSERT() macro.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.2 1995/12/03 06:59:31 mwg
-+ * Fixed all gcc varnings. We are now running under Linux on a PC!
-+ *
-+ *****************************************************************************/
-+#ifndef SoftModemTypesh
-+#define SoftModemTypesh
-+
-+#ifdef LONG_SHORTS
-+#define short long
-+#define ushort unsigned long
-+#endif
-+
-+typedef signed char schar;
-+typedef unsigned char uchar;
-+
-+#if 0 /* This is not currently required */
-+#if defined(_CYGWIN32) && defined(DEBUG)
-+#define EXCLUDE_CYGWIN32_TYPES
-+#endif
-+#endif
-+
-+#if !defined(_SYS_TYPES_H) || !defined(TARG_OS_RTEMS)
-+#if defined(_CFE_)
-+ typedef unsigned int uint;
-+ typedef unsigned long ulong;
-+ typedef unsigned short ushort;
-+#elif defined(TARG_OS_RTEMS)
-+#if defined(HOST_ARCH_LINUX)
-+ typedef unsigned int uint;
-+#endif
-+ typedef unsigned long ulong;
-+#if defined(HOST_ARCH_LINUX)
-+ typedef unsigned short ushort;
-+#endif
-+#elif defined(EXCLUDE_CYGWIN32_TYPES) || (!defined _NO_TYPE_DEFS_ && !defined _SYS_TYPES_H && !defined __SYS_TYPES_H__ && !defined _SYS_BSD_TYPES_H && !defined _LINUX_TYPES_H) || defined(__sparc__)
-+#ifndef EXCLUDE_CYGWIN32_TYPES
-+ typedef unsigned int uint;
-+#endif
-+#ifndef _LINUX_TYPES_H
-+ typedef unsigned long ulong;
-+#endif
-+#if !defined(ushort) && !defined(EXCLUDE_CYGWIN32_TYPES) && !defined(__INCvxTypesOldh)
-+ typedef unsigned short ushort;
-+#endif
-+#endif
-+#else
-+typedef unsigned long ulong;
-+#endif
-+
-+#if defined(GREENHILL) || defined(GNUTX39) /* GH allocates private data to incorrect section */
-+#define Private
-+#else
-+#define Private static
-+#endif
-+
-+#define Public
-+
-+#ifdef NULL
-+#undef NULL
-+#endif
-+#ifdef nil
-+#undef nil
-+#endif
-+
-+#define NULL 0
-+#define nil 0
-+
-+#define false 0
-+#define true 1
-+typedef unsigned char Boolean;
-+typedef unsigned int BitField; /* this must occur BEFORE long_is_int/int_is_long defs */
-+
-+#ifdef LONG_IS_INT
-+#define long int
-+#define ulong uint
-+#endif
-+
-+#ifdef INT_IS_LONG
-+#define int long
-+#define uint ulong
-+#endif
-+
-+#define POSTULATE(postulate) \
-+ do \
-+ { \
-+ typedef struct \
-+ { \
-+ char NegativeSizeIfPostulateFalse[((int)(postulate))*2 - 1]; \
-+ } PostulateCheckStruct; \
-+ } \
-+ while (0)
-+
-+#if defined(DEBUG) && !defined(__KERNEL__)
-+#ifndef WARN
-+#define kDSLNumberWarnTimes 10
-+#define WARN(assertion) \
-+ { static int warnSeveralTimes=0; \
-+ if ((!(assertion))&(warnSeveralTimes<kDSLNumberWarnTimes)) \
-+ { \
-+ fprintf(stderr, "Warning, failed: %s\n", #assertion); \
-+ fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
-+ warnSeveralTimes++; \
-+ } \
-+ }
-+#endif
-+#ifndef ASSERT
-+#define ASSERT(assertion) \
-+ { if (!(assertion)) \
-+ { \
-+ fprintf(stderr, "Assertion failed: %s\n", #assertion); \
-+ fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
-+ exit(1); \
-+ } \
-+ }
-+#endif
-+#else
-+
-+#undef WARN
-+#define WARN(a)
-+
-+#undef ASSERT
-+#define ASSERT(a)
-+
-+#endif
-+
-+/*
-+ * memory allocation macros
-+ */
-+
-+#if defined(bcm47xx) && defined(USE_SLOW_DATA)
-+#define SLOW_DATA __attribute__ ((section(".slow_data")))
-+#else
-+#define SLOW_DATA
-+#endif
-+
-+#if defined(bcm47xx) && defined(USE_FAST_TEXT)
-+#define FAST_TEXT __attribute__ ((section(".fast_text")))
-+#else
-+#define FAST_TEXT
-+#endif
-+
-+#if defined(bcm47xx) && defined(SWAP_LMEM)
-+#define SWAP_TEXT1_1 __attribute__ ((section(".swap_text1_1")))
-+#define SWAP_TEXT1_2 __attribute__ ((section(".swap_text1_2")))
-+#define SWAP_TEXT2_1 __attribute__ ((section(".swap_text2_1")))
-+#define SWAP_TEXT2_2 __attribute__ ((section(".swap_text2_2")))
-+#define SWAP_TEXT3_1 __attribute__ ((section(".swap_text3_1")))
-+#define SWAP_TEXT3_2 __attribute__ ((section(".swap_text3_2")))
-+#else
-+#define SWAP_TEXT1_1 FAST_TEXT
-+#define SWAP_TEXT1_2 FAST_TEXT
-+#define SWAP_TEXT2_1 FAST_TEXT
-+#define SWAP_TEXT2_2 FAST_TEXT
-+#define SWAP_TEXT3_1 FAST_TEXT
-+#define SWAP_TEXT3_2 FAST_TEXT
-+#endif
-+
-+/*
-+ * Debug stuff
-+ */
-+#if defined(DEBUG) || defined(DEBUG_PTR_ENABLED)
-+#define DECLARE_DEBUG_PTR(type) static type *gv;
-+#define SETUP_DEBUG_PTR() gv = &globalVar
-+#else
-+#define DECLARE_DEBUG_PTR(type)
-+#define SETUP_DEBUG_PTR()
-+#endif
-+/*
-+ * Obsolete stuff
-+ */
-+#ifdef DEBUG
-+#define HereIsTheGlobalVarPointerMacro SETUP_DEBUG_PTR();
-+#else
-+#define HereIsTheGlobalVarPointerMacro
-+#endif
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_defs.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_defs.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_defs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_defs.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,133 @@
-+/* TARGET=bcm6348-dmt-T1-dmtbis-adsl2plus-L2-SRA-firmware-Qproc-HW-RTL-pipeline-IncOneBit-Readsl2-doubleUS */
-+
-+#define SOURCE_FILE_
-+#define BCM6348_SRC
-+#define G994_T1P413_1024_FFT
-+#define ENABLE_DIG_USPWR_CUTBACK
-+#define ADSLCORE_ONLY
-+#define TEQ_DF
-+#define LOOP_TIMING_PLL
-+#define RCV_PHASE_TWEAK_ONLY
-+#define ADSL_MAX_POSSIBLE_RCV_RATE
-+#define HARDWARE_CHANNEL
-+#define ADSL_HARDWARE_AGC
-+#define HW_CHANNEL_ADC
-+#define HW_CHANNEL_DAC
-+#define HW_PGA
-+#define DIGITALEC_SINGLE_TAP_UPDATE
-+#define ANALOGEC_SINGLE_TAP_UPDATE
-+#define HWLOG
-+#define G992_TRELLIS_CODE_CLAMPING
-+#define G992DECODERTRELLISBOUNDARY
-+#define MEMORYLIMIT64K
-+#define bcm47xx
-+#define DSL_BIG_ENDIAN
-+#define MIPS_SRC
-+#define VP_INLINE -Winline
-+#define USE_ASM_API
-+#define RTL_SRC
-+#define RSENC_INLINE
-+#define BITENC_INLINE
-+#define USE_SLOW_DATA
-+#define USE_FAST_TEXT
-+#define PROFILE_INLINE
-+#define CHIP_SRC
-+#define G992_RESYNC_PILOT_PHASE_IN_SHOWTIME
-+#define G992_APPLY_SSVI
-+#define SHARE_TEQ_VARS
-+#define ANNEX_M
-+#define DOUBLE_UP_STREAM
-+#define G994P1_SUPPORT_A43C
-+#define USE_ASM_API
-+#define MIPS_ASM
-+#define MEMORYLIMIT64K
-+#define ADSL_FIRMWARE
-+#define G992DATA_XMT_COMPACT_WORD
-+#define ADSL_MAX_POSSIBLE_RCV_RATE
-+#define DSP_FRONTEND_ONLY
-+#define G992P3_ONE_BIT_CONSTELLATION
-+#define ADSL_MODEM
-+#define ATM
-+#define ADSL_ATUR
-+#define ADSL_SOFTWARE_TIME_ERROR_CALCULATION
-+#define DSL_REPORT_ALL_COUNTERS
-+#define ADSL_MONITOR_LCD
-+#define G994P1
-+#define G994P1_ATUR
-+#define G992
-+#define G992_ATUR
-+#define ADSL_FRAMER
-+#define G997_1
-+#define ATM_I432
-+#define TEQ_DF
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G994P1_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G992_TRELLISCODE
-+#define ADSL_HARDWARE_ECHO_CANCELLOR
-+#define G992P1
-+#define G992P1_ATUR
-+#define G992P1_ANNEX_A
-+#define ADSL_HARDWARE_TIME_ERROR_TRACKING
-+#define G992P1_NEWFRAME
-+#define G992P1_NEWFRAME_ATUR
-+#define G992P1_ANNEX_A_USED_FOR_G992P2
-+#define T1P413
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G992_CALC_DEBUG_SNR_BEFORE_TEQ
-+#define G992P3
-+#define RATE_SELECT_E14
-+#define G992P3_ATUR
-+#define G992P3AMENDMENT
-+#define GLOBESPAN_DM
-+#define G992P3_COMB_MSG_THREE_COPIES
-+#define G992P3_POWER_MANAGEMENT
-+#define G992P3_SRA
-+#define G992P5
-+#define G992P5_ATUR
-+#define ADSL_PIPELINE_CODE
-+#define ADSL_HARDWARE_TIME_ERROR_TRACKING
-+#define G994P1RCV_QPROC
-+#define G994P1XMT_QPROC
-+#define G992RCV_QPROC
-+#define G992XMT_QPROC
-+#define G992RCV_RS
-+#define VP_SIMULATOR
-+#define T1P413RCV_QPROC
-+#define T1P413XMT_QPROC
-+#define G992ENC_HW_DATAMODE
-+#define G992DATA_XMT_HW_RS
-+#define G992DATA_XMT_COMPACT_WORD
-+#define G992RCV_QPROC_FAST
-+#define G992_BIT_SWAP
-+#define ADSL_IDENTIFY_VENDOR_FIRMWARE
-+#define ADSL_ATUR_FORCE_BIGGER_UPSTREAM_MARGIN
-+#define G992_MORE_FRAME_MODE
-+#define XMT_RACT2_FOR_ADI_COMPATIBILITY
-+#define XMT_FFT_SIZE_2X
-+#define SYNCH_SYMBOL_DETECTION
-+#define ANSI_CACT12_PING_PONG
-+#define ADSL_SPECIAL_FIX_FOR_FRENCH_TELECOM
-+#define G994P1_CHECK_SECURITY
-+#define G994P1_NON_STD_INFO
-+#define I432_HEADER_COMPRESSION
-+#define TDC_IOP_FIX_ERICSSON_TI_4000C_350
-+#define TDC_IOP_FIX_SEIMENS_TI
-+#define FT_ADI_US_RATE_FIX
-+#define ANSI_CACT12_PING_PONG
-+#define G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define G994P1_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ
-+#define READSL2
-+#define G992_APPLY_SSVI
-+#define READSL2_FILTERS
-+
-+
-+#define ADSL_PHY_XFACE_OFFSET 0x21F90
-+
-+
-+#define ADSL_PHY_SDRAM_BIAS 0x1A0000
-+
-+
-+#define ADSL_PHY_SDRAM_LINK_OFFSET 0x1A0000
-+
-+
-+#define ADSL_PHY_SDRAM_PAGE_SIZE 0x200000
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_lmem.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_lmem.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_lmem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_lmem.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,6 @@
-+/*
-+** Don't change!
-+** This file has been generated automatically by bin2c program
-+*/
-+
-+extern const unsigned char adsl_lmem[51036];
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_sdram.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_sdram.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_sdram.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/adslcore6348/adsl_sdram.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,6 @@
-+/*
-+** Don't change!
-+** This file has been generated automatically by bin2c program
-+*/
-+
-+extern const unsigned char adsl_sdram[364348];
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslCoreDefs.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslCoreDefs.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslCoreDefs.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslCoreDefs.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,245 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslCore.c -- Bcm ADSL core driver
-+ *
-+ * Description:
-+ * This file contains BCM ADSL core driver
-+ *
-+ *
-+ * Copyright (c) 2000-2001 Broadcom Corporation
-+ * All Rights Reserved
-+ * No portions of this material may be reproduced in any form without the
-+ * written permission of:
-+ * Broadcom Corporation
-+ * 16215 Alton Parkway
-+ * Irvine, California 92619
-+ * All information contained in this document is Broadcom Corporation
-+ * company private, proprietary, and trade secret.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.4 $
-+ *
-+ * $Id: AdslCoreDefs.h,v 1.4 2004/07/20 23:45:48 ilyas Exp $
-+ *
-+ * $Log: AdslCoreDefs.h,v $
-+ * Revision 1.4 2004/07/20 23:45:48 ilyas
-+ * Added driver version info, SoftDslPrintf support. Fixed G.997 related issues
-+ *
-+ * Revision 1.3 2004/06/10 00:20:33 ilyas
-+ * Added L2/L3 and SRA
-+ *
-+ * Revision 1.2 2004/04/12 23:24:38 ilyas
-+ * Added default G992P5 PHY definition
-+ *
-+ * Revision 1.1 2004/04/08 23:59:15 ilyas
-+ * Initial CVS checkin
-+ *
-+ ****************************************************************************/
-+
-+#ifndef _ADSL_CORE_DEFS_H
-+#define _ADSL_CORE_DEFS_H
-+
-+#if defined(__KERNEL__)
-+#include <linux/config.h>
-+#endif
-+
-+#if defined(CONFIG_BCM96348) || defined(BOARD_bcm96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(BOARD_bcm96338) || defined(_BCM96338_)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcore6348C/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcore6348B/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcore6348SA/adsl_defs.h"
-+#else
-+#include "../adslcore6348/adsl_defs.h"
-+#endif
-+#endif
-+
-+#if defined(__KERNEL__) || defined(TARG_OS_RTEMS) || defined(_CFE_)
-+#if defined(CONFIG_BCM96345) || defined(BOARD_bcm96345) || defined(_BCM96345_)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcore6345C/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcore6345B/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcore6345SA/adsl_defs.h"
-+#else
-+#include "../adslcore6345/adsl_defs.h"
-+#endif
-+#endif /* of CONFIG_BCM96345 */
-+#else
-+#if defined(CONFIG_BCM96345)
-+#ifdef ADSL_ANNEXC
-+#include "../adslcoreC/adsl_defs.h"
-+#elif defined(ADSL_ANNEXB)
-+#include "../adslcoreB/adsl_defs.h"
-+#elif defined(ADSL_SADSL)
-+#include "../adslcoreSA/adsl_defs.h"
-+#else
-+#include "../adslcore/adsl_defs.h"
-+#endif
-+#endif /* of CONFIG_BCM96345 */
-+#endif /* __KERNEL__ */
-+
-+#ifdef _WIN32_WCE
-+#define ASSERT(a)
-+#endif
-+
-+#include "AdslXfaceData.h"
-+
-+/* adjust some definitions for the HOST */
-+
-+#undef GLOBAL_PTR_BIAS
-+#undef ADSLCORE_ONLY
-+#undef USE_SLOW_DATA
-+#undef USE_FAST_TEXT
-+#undef VP_SIMULATOR
-+#undef bcm47xx
-+#undef ADSL_FRAMER
-+#undef ATM
-+#undef ATM_I432
-+#undef DSL_OS
-+
-+#define HOST_ONLY
-+#define G997_1_FRAMER
-+#define ADSL_MIB
-+
-+#ifndef FLATTEN_ADDR_ADJUST
-+#define FLATTEN_ADDR_ADJUST 0xFFF00000
-+#endif
-+
-+/* definitions for combo PHY (AnnexA(ADSL2) and AnnexB) */
-+
-+#if !(defined(ADSL_SINGLE_PHY) || defined(G992_ANNEXC))
-+
-+#undef G992P1_ANNEX_A
-+#define G992P1_ANNEX_A
-+#undef G992P3
-+#define G992P3
-+#undef G992P5
-+#define G992P5
-+#define G992P1_ANNEX_A
-+#undef READSL2
-+#define READSL2
-+#undef G992P1_ANNEX_A_USED_FOR_G992P2
-+#define G992P1_ANNEX_A_USED_FOR_G992P2
-+#undef T1P413
-+#define T1P413
-+
-+#undef G992P1_ANNEX_B
-+#define G992P1_ANNEX_B
-+
-+#endif
-+
-+/* ADSL PHY definition */
-+
-+typedef struct {
-+ unsigned long sdramPageAddr;
-+ unsigned long sdramImageAddr;
-+ unsigned long sdramImageSize;
-+ unsigned long sdramPhyImageAddr;
-+ unsigned short fwType;
-+ unsigned short chipType;
-+ unsigned short mjVerNum;
-+ unsigned short mnVerNum;
-+ char *pVerStr;
-+ unsigned long features[4];
-+} adslPhyInfo;
-+extern adslPhyInfo adslCorePhyDesc;
-+
-+/* chip list */
-+
-+#define kAdslPhyChipMjMask 0xFF00
-+#define kAdslPhyChipMnMask 0x00FF
-+#define kAdslPhyChipUnknown 0
-+#define kAdslPhyChip6345 0x100
-+#define kAdslPhyChip6348 0x200
-+#define kAdslPhyChipRev0 0
-+#define kAdslPhyChipRev1 1
-+#define kAdslPhyChipRev2 2
-+#define kAdslPhyChipRev3 3
-+#define kAdslPhyChipRev4 4
-+#define kAdslPhyChipRev5 5
-+
-+#define ADSL_PHY_SUPPORT(f) AdslFeatureSupported(adslCorePhyDesc.features,f)
-+#define ADSL_PHY_SET_SUPPORT(p,f) AdslFeatureSet((p)->features,f)
-+
-+/* ADSL Driver to/from PHY address and data conversion macros */
-+
-+#ifdef ADSLDRV_LITTLE_ENDIAN
-+#define ADSL_ENDIAN_CONV_LONG(x) ( ((x) << 24) | (((x) << 8) & 0x00FF0000) | (((x) >> 8) & 0x0000FF00) | ((unsigned long)(x) >> 24) )
-+#define ADSL_ENDIAN_CONV_SHORT(x) ( ((x) << 8) | ((unsigned short)(x) >> 8) )
-+#define ADSL_ENDIAN_CONV_2SHORTS(x) ( ((x) << 16) | ((unsigned long)(x) >> 16) )
-+#else
-+#define ADSL_ENDIAN_CONV_LONG(x) x
-+#define ADSL_ENDIAN_CONV_SHORT(x) x
-+#define ADSL_ENDIAN_CONV_2SHORTS(x) x
-+#endif
-+
-+#ifndef ADSL_PHY_XFACE_OFFSET
-+#define ADSL_PHY_XFACE_OFFSET 0x00017F90
-+#endif
-+#define ADSL_LMEM_XFACE_DATA (0xFFF00000 | ADSL_PHY_XFACE_OFFSET)
-+
-+#ifndef ADSL_PHY_SDRAM_START
-+#define ADSL_PHY_SDRAM_START 0x10000000
-+#endif
-+#ifndef ADSL_PHY_SDRAM_BIAS
-+#define ADSL_PHY_SDRAM_BIAS 0x00040000
-+#endif
-+#define ADSL_PHY_SDRAM_START_4 (ADSL_PHY_SDRAM_START + ADSL_PHY_SDRAM_BIAS)
-+
-+#ifndef ADSL_PHY_SDRAM_PAGE_SIZE
-+#define ADSL_PHY_SDRAM_PAGE_SIZE 0x00080000
-+#endif
-+
-+#ifdef ADSL_PHY_SDRAM_BIAS
-+#define ADSL_SDRAM_IMAGE_SIZE (ADSL_PHY_SDRAM_PAGE_SIZE - ADSL_PHY_SDRAM_BIAS)
-+#else
-+#define ADSL_SDRAM_IMAGE_SIZE (256*1024)
-+#endif
-+
-+
-+#ifndef ADSL_PHY_SDRAM_LINK_OFFSET
-+#define ADSL_PHY_SDRAM_LINK_OFFSET 0x00040000
-+#endif
-+
-+#define ADSL_SDRAM_TOTAL_SIZE 0x00800000
-+#define ADSL_SDRAM_HOST_MIPS_DEFAULT (0xA0000000 | (ADSL_SDRAM_TOTAL_SIZE - ADSL_PHY_SDRAM_PAGE_SIZE + ADSL_PHY_SDRAM_BIAS))
-+
-+#define ADSLXF ((AdslXfaceData *) ADSL_LMEM_XFACE_DATA)
-+
-+#define ADSL_MIPS_LMEM_ADDR(a) (((ulong)(a) & 0x19000000) == 0x19000000)
-+#define SDRAM_ADDR_TO_HOST(a) ((void *) ((ulong)(a) - adslCorePhyDesc.sdramPhyImageAddr + \
-+ (ADSLXF->sdramBaseAddr ? (unsigned long) ADSLXF->sdramBaseAddr : ADSL_SDRAM_HOST_MIPS_DEFAULT)))
-+#define SDRAM_ADDR_TO_ADSL(a) ((void *) (adslCorePhyDesc.sdramPhyImageAddr + ((ulong)(a) - \
-+ (ADSLXF->sdramBaseAddr ? (unsigned long) ADSLXF->sdramBaseAddr : ADSL_SDRAM_HOST_MIPS_DEFAULT))))
-+
-+#define ADSL_ADDR_TO_HOST(addr) ADSL_MIPS_LMEM_ADDR(addr) ? (void *) ((ulong) (addr) | FLATTEN_ADDR_ADJUST) : SDRAM_ADDR_TO_HOST(addr)
-+
-+
-+#ifndef DEBUG
-+#define DEBUG
-+#endif
-+
-+#ifndef __SoftDslPrintf
-+void __SoftDslPrintf(void *gDslVars, char *fmt, int argNum, ...);
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,94 @@
-+/****************************************************************************
-+ *
-+ * AdslMib.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for AdslMib
-+ * global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.8 $
-+ *
-+ * $Id: AdslMib.gh,v 1.8 2004/06/04 18:56:01 ilyas Exp $
-+ *
-+ * $Log: AdslMib.gh,v $
-+ * Revision 1.8 2004/06/04 18:56:01 ilyas
-+ * Added counter for ADSL2 framing and performance
-+ *
-+ * Revision 1.7 2003/10/17 21:02:12 ilyas
-+ * Added more data for ADSL2
-+ *
-+ * Revision 1.6 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.5 2003/07/18 19:07:15 ilyas
-+ * Merged with ADSL driver
-+ *
-+ * Revision 1.4 2002/11/13 21:32:49 ilyas
-+ * Added adjustK support for Centillium non-standard framing mode
-+ *
-+ * Revision 1.3 2002/10/31 20:27:13 ilyas
-+ * Merged with the latest changes for VxWorks/Linux driver
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibGlobals
-+#define AdslMibGlobals
-+
-+#include "AdslMib.h"
-+
-+typedef struct
-+ {
-+ /* MIB data */
-+
-+ adslMibInfo adslMib;
-+
-+ /* ADSL state data */
-+
-+ adslMibNotifyHandlerType notifyHandlerPtr;
-+ ulong timeSec;
-+ ulong timeMs;
-+ Boolean currSecondErrored;
-+ Boolean currSecondLOS;
-+ Boolean currSecondSES;
-+ Boolean currSecondFEC;
-+ ulong rcvPower;
-+ ulong rcvRateBps;
-+ ulong xmtRateBps;
-+ ulong linkStatus;
-+ G992CodingParams rcvParams;
-+ G992CodingParams xmtParams;
-+ ulong shtCounters[kG992ShowtimeNumOfMonitorCounters];
-+ ulong scratchData;
-+ long showtimeMarginThld;
-+
-+ /* ADSL diag data */
-+
-+ short snr[kAdslMibMaxToneNum];
-+ short showtimeMargin[kAdslMibMaxToneNum];
-+ uchar bitAlloc[kAdslMibMaxToneNum];
-+ short gain[kAdslMibMaxToneNum];
-+ ComplexShort chanCharLin[kAdslMibMaxToneNum];
-+ short chanCharLog[kAdslMibMaxToneNum];
-+ short quietLineNoise[kAdslMibMaxToneNum];
-+
-+ ushort nTones;
-+ uchar nMsgCnt;
-+ ulong g992MsgType;
-+ uchar rsOption[1+4];
-+ Boolean rsOptionValid;
-+ }
-+ adslMibVarsStruct;
-+
-+#endif /* AdslMibGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMib.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,114 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslMib.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for AdslMib
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: AdslMib.h,v 1.9 2004/04/12 23:34:52 ilyas Exp $
-+ *
-+ * $Log: AdslMib.h,v $
-+ * Revision 1.9 2004/04/12 23:34:52 ilyas
-+ * Merged the latest ADSL driver chnages for ADSL2+
-+ *
-+ * Revision 1.8 2004/03/03 20:14:05 ilyas
-+ * Merged changes for ADSL2+ from ADSL driver
-+ *
-+ * Revision 1.7 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.6 2003/07/18 19:07:15 ilyas
-+ * Merged with ADSL driver
-+ *
-+ * Revision 1.5 2002/10/31 20:27:13 ilyas
-+ * Merged with the latest changes for VxWorks/Linux driver
-+ *
-+ * Revision 1.4 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.3 2002/01/13 22:25:40 ilyas
-+ * Added functions to get channels rate
-+ *
-+ * Revision 1.2 2002/01/03 06:03:36 ilyas
-+ * Handle byte moves tha are not multiple of 2
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibHeader
-+#define AdslMibHeader
-+
-+#if defined(_CFE_)
-+#include "lib_types.h"
-+#include "lib_string.h"
-+#endif
-+
-+#include "AdslMibDef.h"
-+
-+/* Interface functions */
-+
-+typedef int (SM_DECL *adslMibNotifyHandlerType) (void *gDslVars, ulong event);
-+
-+extern Boolean AdslMibInit(void *gDslVars);
-+extern void AdslMibTimer(void *gDslVars, long timeMs);
-+extern void AdslMibStatusSnooper (void *gDslVars, dslStatusStruct *status);
-+extern void AdslMibSetNotifyHandler(void *gDslVars, adslMibNotifyHandlerType notifyHandlerPtr);
-+extern int AdslMibGetModulationType(void *gDslVars);
-+extern Boolean AdslMibIsAdsl2Mod(void *gDslVars);
-+extern int AdslMibGetActiveChannel(void *gDslVars);
-+extern int AdslMibGetGetChannelRate(void *gDslVars, int dir, int channel);
-+extern Boolean AdslMibIsLinkActive(void *gDslVars);
-+extern int AdslMibPowerState(void *gDslVars);
-+extern int AdslMibTrainingState (void *gDslVars);
-+extern void AdslMibClearData(void *gDslVars);
-+extern void AdslMibClearBertResults(void *gDslVars);
-+extern void AdslMibBertStartEx(void *gDslVars, ulong bertSec);
-+extern void AdslMibBertStopEx(void *gDslVars);
-+extern ulong AdslMibBertContinueEx(void *gDslVars, ulong totalBits, ulong errBits);
-+extern void AdslMibSetLPR(void *gDslVars);
-+extern void AdslMibSetShowtimeMargin(void *gDslVars, long showtimeMargin);
-+extern void AdslMibResetConectionStatCounters(void *gDslVars);
-+
-+extern void AdslMibByteMove (int size, void* srcPtr, void* dstPtr);
-+extern void AdslMibByteClear(int size, void* dstPtr);
-+extern int AdslMibStrCopy(char *srcPtr, char *dstPtr);
-+
-+/* AdslMibGetData dataId codes */
-+
-+#define kAdslMibDataAll 0
-+
-+extern void *AdslMibGetData (void *gDslVars, int dataId, void *pAdslMibData);
-+
-+extern int AdslMibGetObjectValue (
-+ void *gDslVars,
-+ uchar *objId,
-+ int objIdLen,
-+ uchar *dataBuf,
-+ ulong *dataBufLen);
-+
-+#endif /* AdslMibHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMibOid.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMibOid.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMibOid.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslMibOid.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,177 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslMibOid.h
-+ *
-+ * Description:
-+ * SNMP object identifiers for ADSL MIB and other related MIBs
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: AdslMibOid.h,v 1.5 2004/06/04 18:56:01 ilyas Exp $
-+ *
-+ * $Log: AdslMibOid.h,v $
-+ * Revision 1.5 2004/06/04 18:56:01 ilyas
-+ * Added counter for ADSL2 framing and performance
-+ *
-+ * Revision 1.4 2003/10/17 21:02:12 ilyas
-+ * Added more data for ADSL2
-+ *
-+ * Revision 1.3 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibOidHeader
-+#define AdslMibOidHeader
-+
-+#define kOidAdsl 94
-+#define kOidAdslInterleave 124
-+#define kOidAdslFast 125
-+#define kOidAtm 37
-+
-+#define kOidAdslLine 1
-+#define kOidAdslMibObjects 1
-+
-+#define kOidAdslLineTable 1
-+#define kOidAdslLineEntry 1
-+#define kOidAdslLineCoding 1
-+#define kOidAdslLineType 2
-+#define kOidAdslLineSpecific 3
-+#define kOidAdslLineConfProfile 4
-+#define kOidAdslLineAlarmConfProfile 5
-+
-+#define kOidAdslAtucPhysTable 2
-+#define kOidAdslAturPhysTable 3
-+#define kOidAdslPhysEntry 1
-+#define kOidAdslPhysInvSerialNumber 1
-+#define kOidAdslPhysInvVendorID 2
-+#define kOidAdslPhysInvVersionNumber 3
-+#define kOidAdslPhysCurrSnrMgn 4
-+#define kOidAdslPhysCurrAtn 5
-+#define kOidAdslPhysCurrStatus 6
-+#define kOidAdslPhysCurrOutputPwr 7
-+#define kOidAdslPhysCurrAttainableRate 8
-+
-+#define kOidAdslAtucChanTable 4
-+#define kOidAdslAturChanTable 5
-+#define kOidAdslChanEntry 1
-+#define kOidAdslChanInterleaveDelay 1
-+#define kOidAdslChanCurrTxRate 2
-+#define kOidAdslChanPrevTxRate 3
-+#define kOidAdslChanCrcBlockLength 4
-+
-+#define kOidAdslAtucPerfDataTable 6
-+#define kOidAdslAturPerfDataTable 7
-+#define kOidAdslPerfDataEntry 1
-+#define kOidAdslPerfLofs 1
-+#define kOidAdslPerfLoss 2
-+#define kOidAdslPerfLprs 3
-+#define kOidAdslPerfESs 4
-+#define kOidAdslPerfValidIntervals 5
-+#define kOidAdslPerfInvalidIntervals 6
-+#define kOidAdslPerfCurr15MinTimeElapsed 7
-+#define kOidAdslPerfCurr15MinLofs 8
-+#define kOidAdslPerfCurr15MinLoss 9
-+#define kOidAdslPerfCurr15MinLprs 10
-+#define kOidAdslPerfCurr15MinESs 11
-+#define kOidAdslPerfCurr1DayTimeElapsed 12
-+#define kOidAdslPerfCurr1DayLofs 13
-+#define kOidAdslPerfCurr1DayLoss 14
-+#define kOidAdslPerfCurr1DayLprs 15
-+#define kOidAdslPerfCurr1DayESs 16
-+#define kOidAdslPerfPrev1DayMoniSecs 17
-+#define kOidAdslPerfPrev1DayLofs 18
-+#define kOidAdslPerfPrev1DayLoss 19
-+#define kOidAdslPerfPrev1DayLprs 20
-+#define kOidAdslPerfPrev1DayESs 21
-+
-+#define kOidAdslAtucPerfIntervalTable 8
-+#define kOidAdslAturPerfIntervalTable 9
-+#define kOidAdslPerfIntervalEntry 1
-+#define kOidAdslIntervalNumber 1
-+#define kOidAdslIntervalLofs 2
-+#define kOidAdslIntervalLoss 3
-+#define kOidAdslIntervalLprs 4
-+#define kOidAdslIntervalESs 5
-+#define kOidAdslIntervalValidData 6
-+
-+#define kOidAdslAtucChanPerfTable 10
-+#define kOidAdslAturChanPerfTable 11
-+#define kOidAdslChanPerfEntry 1
-+#define kOidAdslChanReceivedBlks 1
-+#define kOidAdslChanTransmittedBlks 2
-+#define kOidAdslChanCorrectedBlks 3
-+#define kOidAdslChanUncorrectBlks 4
-+#define kOidAdslChanPerfValidIntervals 5
-+#define kOidAdslChanPerfInvalidIntervals 6
-+#define kOidAdslChanPerfCurr15MinTimeElapsed 7
-+#define kOidAdslChanPerfCurr15MinReceivedBlks 8
-+#define kOidAdslChanPerfCurr15MinTransmittedBlks 9
-+#define kOidAdslChanPerfCurr15MinCorrectedBlks 10
-+#define kOidAdslChanPerfCurr15MinUncorrectBlks 11
-+#define kOidAdslChanPerfCurr1DayTimeElapsed 12
-+#define kOidAdslChanPerfCurr1DayReceivedBlks 13
-+#define kOidAdslChanPerfCurr1DayTransmittedBlks 14
-+#define kOidAdslChanPerfCurr1DayCorrectedBlks 15
-+#define kOidAdslChanPerfCurr1DayUncorrectBlks 16
-+#define kOidAdslChanPerfPrev1DayMoniSecs 17
-+#define kOidAdslChanPerfPrev1DayReceivedBlks 18
-+#define kOidAdslChanPerfPrev1DayTransmittedBlks 19
-+#define kOidAdslChanPerfPrev1DayCorrectedBlks 20
-+#define kOidAdslChanPerfPrev1DayUncorrectBlks 21
-+
-+#define kOidAdslAtucChanIntervalTable 12
-+#define kOidAdslAturChanIntervalTable 13
-+#define kOidAdslChanIntervalEntry 1
-+#define kOidAdslChanIntervalNumber 1
-+#define kOidAdslChanIntervalReceivedBlks 2
-+#define kOidAdslChanIntervalTransmittedBlks 3
-+#define kOidAdslChanIntervalCorrectedBlks 4
-+#define kOidAdslChanIntervalUncorrectBlks 5
-+#define kOidAdslChanIntervalValidData 6
-+
-+/* AdslExtra OIDs for kOidAdslPrivate, kOidAdslPrivExtraInfo (defined in AdslMibDef.h) */
-+
-+#define kOidAdslExtraConnectionInfo 1
-+#define kOidAdslExtraConnectionStat 2
-+#define kOidAdslExtraFramingMode 3
-+#define kOidAdslExtraTrainingState 4
-+#define kOidAdslExtraNonStdFramingAdjustK 5
-+#define kOidAdslExtraAtmStat 6
-+#define kOidAdslExtraDiagModeData 7
-+#define kOidAdslExtraAdsl2Info 8
-+#define kOidAdslExtraTxPerfCounterInfo 9
-+
-+#define kOidAtmMibObjects 1
-+#define kOidAtmTcTable 4
-+#define kOidAtmTcEntry 1
-+#define kOidAtmOcdEvents 1
-+#define kOidAtmAlarmState 2
-+
-+#endif /* AdslMibOidHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslXfaceData.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslXfaceData.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslXfaceData.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/AdslXfaceData.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,129 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslXfaceData.h -- ADSL Core interface data structure
-+ *
-+ * Description:
-+ * To be included both in SoftDsl and BcmAdslCore driver
-+ *
-+ *
-+ * Copyright (c) 2000-2001 Broadcom Corporation
-+ * All Rights Reserved
-+ * No portions of this material may be reproduced in any form without the
-+ * written permission of:
-+ * Broadcom Corporation
-+ * 16215 Alton Parkway
-+ * Irvine, California 92619
-+ * All information contained in this document is Broadcom Corporation
-+ * company private, proprietary, and trade secret.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: AdslXfaceData.h,v 1.9 2004/02/03 02:57:22 ilyas Exp $
-+ *
-+ * $Log: AdslXfaceData.h,v $
-+ * Revision 1.9 2004/02/03 02:57:22 ilyas
-+ * Added PHY feature settings
-+ *
-+ * Revision 1.8 2003/07/18 04:50:21 ilyas
-+ * Added shared buffer for clEoc messages to avoid copying thru command buffer
-+ *
-+ * Revision 1.7 2003/02/25 00:46:32 ilyas
-+ * Added T1.413 EOC vendor ID
-+ *
-+ * Revision 1.6 2003/02/21 23:29:13 ilyas
-+ * Added OEM vendor ID parameter for T1.413 mode
-+ *
-+ * Revision 1.5 2002/09/13 21:17:12 ilyas
-+ * Added pointers to version and build string to OEM interface structure
-+ *
-+ * Revision 1.4 2002/09/07 04:16:29 ilyas
-+ * Fixed HOST to ADSL MIPS SDRAM address translation for relocatable images
-+ *
-+ * Revision 1.3 2002/09/07 01:43:59 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.2 2002/01/22 19:03:10 khp
-+ * -put sdramBaseAddr at end of Xface struct
-+ *
-+ * Revision 1.1 2002/01/15 06:25:08 ilyas
-+ * Initial implementation of ADSL core firmware
-+ *
-+ ****************************************************************************/
-+
-+#ifndef AdslXfaceDataHeader
-+#define AdslXfaceDataHeader
-+
-+#include "CircBuf.h"
-+
-+typedef struct _AdslXfaceData {
-+ stretchBufferStruct sbSta;
-+ stretchBufferStruct sbCmd;
-+ unsigned long gfcTable[15];
-+ void *sdramBaseAddr;
-+} AdslXfaceData;
-+
-+/* Shared SDRAM configuration data */
-+
-+#define kAdslOemVendorIdMaxSize 8
-+#define kAdslOemVersionMaxSize 32
-+#define kAdslOemSerNumMaxSize 32
-+#define kAdslOemNonStdInfoMaxSize 64
-+
-+typedef struct _AdslOemSharedData {
-+ unsigned long g994VendorIdLen;
-+ unsigned long g994XmtNonStdInfoLen;
-+ unsigned long g994RcvNonStdInfoLen;
-+ unsigned long eocVendorIdLen;
-+ unsigned long eocVersionLen;
-+ unsigned long eocSerNumLen;
-+ unsigned char g994VendorId[kAdslOemVendorIdMaxSize];
-+ unsigned char eocVendorId[kAdslOemVendorIdMaxSize];
-+ unsigned char eocVersion[kAdslOemVersionMaxSize];
-+ unsigned char eocSerNum[kAdslOemSerNumMaxSize];
-+ unsigned char g994XmtNonStdInfo[kAdslOemNonStdInfoMaxSize];
-+ unsigned char g994RcvNonStdInfo[kAdslOemNonStdInfoMaxSize];
-+ char *gDslVerionStringPtr;
-+ char *gDslBuildDataStringPtr;
-+ unsigned long t1413VendorIdLen;
-+ unsigned char t1413VendorId[kAdslOemVendorIdMaxSize];
-+ unsigned long t1413EocVendorIdLen;
-+ unsigned char t1413EocVendorId[kAdslOemVendorIdMaxSize];
-+ unsigned long clEocBufLen;
-+ unsigned char *clEocBufPtr;
-+} AdslOemSharedData;
-+
-+/* feature list */
-+
-+#define kAdslPhyAnnexA 0
-+#define kAdslPhyAnnexB 1
-+#define kAdslPhyAnnexC 2
-+#define kAdslPhySADSL 3
-+#define kAdslPhyAdsl2 4
-+#define kAdslPhyAdslG992p3 4
-+#define kAdslPhyAdsl2p 5
-+#define kAdslPhyAdslG992p5 5
-+#define kAdslPhyAnnexI 6
-+#define kAdslPhyAdslReAdsl2 7
-+#define kAdslPhyG992p2Init 8
-+#define kAdslPhyT1P413 9
-+
-+#define AdslFeatureSupported(fa,f) ((fa)[(f) >> 5] & (1 << ((f) & 0x1F)))
-+#define AdslFeatureSet(fa,f) (fa)[(f) >> 5] |= (1 << ((f) & 0x1F))
-+
-+#endif /* AdslXfaceDataHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlankList.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlankList.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlankList.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlankList.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,87 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * BlankList.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of blank list - list of unused items of any size (not less than
-+ * sizeof(void *)
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef BlankListHeader
-+#define BlankListHeader
-+
-+#define BlankListPeek(head) ((void *) (head))
-+#define BlankListNext(p) (*(void **) (p))
-+
-+#define BlankListAdd(pHead,p) do { \
-+ BlankListNext(p) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = (void *) (p); \
-+} while (0)
-+
-+#define BlankListAddList(pHead,pFirst,pLast) do { \
-+ if (NULL != (pLast)) { \
-+ BlankListNext(pLast) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = (void *) (pFirst); \
-+ } \
-+} while (0)
-+
-+#define BlankListGet(pHead) \
-+ BlankListNext(pHead); \
-+ { \
-+ void **__p; \
-+ __p = (void **) BlankListNext(pHead); \
-+ if (NULL != __p) \
-+ BlankListNext(pHead) = *__p; \
-+ }
-+
-+
-+#define BlankListForEach(pHead,f,ref) do { \
-+ void *p = BlankListNext(pHead); \
-+ \
-+ while (NULL != p) { \
-+ if ( (f)((p), ref) ) break; \
-+ p = BlankListNext(p); \
-+ } \
-+} while (0)
-+
-+
-+#include "Que.h"
-+
-+#define BlankListAddQue(pHead,pqHdr) do { \
-+ if (NULL != ((QueHeader *)(pqHdr))->tail) { \
-+ BlankListNext(((QueHeader *)(pqHdr))->tail) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = ((QueHeader *)(pqHdr))->head; \
-+ } \
-+} while (0)
-+
-+#include "DList.h"
-+
-+#define BlankListAddDList(pHead,pDListHead) do { \
-+ if (!DListEmpty(pDListHead)) { \
-+ BlankListNext(DListLast(pDListHead)) = BlankListNext(pHead); \
-+ BlankListNext(pHead) = DListFirst(pDListHead); \
-+ } \
-+} while (0)
-+
-+#endif /* BlankListHeader */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlockUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlockUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlockUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/BlockUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,235 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/* BlockUtil.h
-+ *
-+ * Description:
-+ * This file contains the interfaces for the fixed point block
-+ * processing utilities.
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.23 $
-+ *
-+ * $Id: BlockUtil.h,v 1.23 2004/04/13 00:31:10 ilyas Exp $
-+ *
-+ * $Log: BlockUtil.h,v $
-+ * Revision 1.23 2004/04/13 00:31:10 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.22 2003/07/11 01:49:01 gsyu
-+ * Added BlockShortClearByLong to speed up performance
-+ *
-+ * Revision 1.21 2003/07/10 22:35:23 gsyu
-+ * Speed up BlockByteXXX performance
-+ *
-+ * Revision 1.20 2003/07/10 22:15:51 gsyu
-+ * Added BlockByteMoveByWord to speed up performance
-+ *
-+ * Revision 1.19 2002/03/12 00:03:03 yongbing
-+ * Modify cplxScaleCplxSymbols to accept a shift value instead of an array of shifts
-+ *
-+ * Revision 1.18 2001/03/14 00:50:25 georgep
-+ * All targets use FEQ_PASS_FFTSHIFT, remove code for case where its not defined
-+ *
-+ * Revision 1.17 2000/11/30 03:54:09 khp
-+ * -BlockRealScaleCplxSymbols instead of BlockScaleComplexSymbols
-+ *
-+ * Revision 1.16 2000/11/29 20:42:12 liang
-+ * Add function for ADSL xmt gains with fixed shift.
-+ *
-+ * Revision 1.15 2000/10/02 19:24:08 georgep
-+ * Modify FEQ for new fft, fft outputs a shift for each block
-+ *
-+ * Revision 1.14 2000/09/09 00:23:48 liang
-+ * Add corresponding functions for the ComplexLong FEQ coef.
-+ *
-+ * Revision 1.13 2000/05/17 01:36:52 yongbing
-+ * Add Pentium MMX assembly codes for more block related functions
-+ *
-+ * Revision 1.12 2000/04/19 19:22:22 yongbing
-+ * Add BlockShortScaleby2 function used in G994p1
-+ *
-+ * Revision 1.11 2000/04/04 02:28:01 liang
-+ * Merged with SoftDsl_0_2 from old tree.
-+ *
-+ * Revision 1.11 2000/03/14 23:29:01 yongbing
-+ * Add Pentim MMX codes for BlockCplxSymbolUpdateCplxScale function
-+ *
-+ * Revision 1.10 2000/02/16 01:53:00 yongbing
-+ * Add Pentium MMX module for FEQ
-+ *
-+ * Revision 1.9 1999/11/02 02:49:55 liang
-+ * Add BlockComplexPower function.
-+ *
-+ * Revision 1.8 1999/08/05 19:42:34 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.7 1999/06/16 00:54:39 liang
-+ * BlockRealScaleComplexSymbols takes a scale shift buffer now.
-+ *
-+ * Revision 1.6 1999/05/22 02:18:29 liang
-+ * Add one more parameter to BlockCplxSymbolUpdateCplxScale function.
-+ *
-+ * Revision 1.5 1999/05/14 22:49:39 liang
-+ * Added two more functions.
-+ *
-+ * Revision 1.4 1999/03/26 03:29:57 liang
-+ * Add function BlockComplexMultLongAcc.
-+ *
-+ * Revision 1.3 1999/02/22 22:40:59 liang
-+ * BlockByteSum takes uchar inputs instead of schar.
-+ *
-+ * Revision 1.2 1999/02/10 01:56:44 liang
-+ * Added BlockByteSum, BlockRealScaleComplexSymbols and BlockCplxScaleComplexSymbols.
-+ *
-+ * Revision 1.1 1998/10/28 01:35:38 liang
-+ * *** empty log message ***
-+ *
-+ * Revision 1.12 1998/07/08 17:09:25 scott
-+ * Removed unnecessary undefs
-+ *
-+ * Revision 1.11 1998/04/02 06:19:44 mwg
-+ * Added two new utilities.
-+ *
-+ * Revision 1.10 1998/03/26 23:20:55 liang
-+ * Added function BlockShortMultiply.
-+ *
-+ * Revision 1.9 1998/02/16 18:41:00 scott
-+ * Added MMX autodetect support
-+ *
-+ * Revision 1.8 1997/12/13 06:11:35 mwg
-+ * Added new functions:
-+ * BlockLongSubtract()
-+ * BlockLongAdd()
-+ * BlockLong2ShortSubtract()
-+ * BlockShort2LongMove()
-+ * BlockShortInterpolate()
-+ * BlockLongCorrelate()
-+ * BlockMapShort2Short()
-+ *
-+ * Revision 1.7 1997/03/19 18:35:10 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.6 1997/02/11 00:08:18 mwg
-+ * Added BlockByteMove function
-+ *
-+ * Revision 1.5 1997/02/04 08:40:08 mwg
-+ * Changed interface forBlockReal2ComplexMacc()
-+ *
-+ * Revision 1.4 1997/01/23 02:04:28 mwg
-+ * Added return value to BlockShortMove
-+ *
-+ * Revision 1.3 1996/12/19 22:34:55 mwg
-+ * Added new function BlockFullPower().
-+ *
-+ * Revision 1.2 1996/02/21 03:59:15 mwg
-+ * Added new function BlockReal2ComplexMacc
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1995/04/04 06:09:32 mwg
-+ * Changed the SoftModem status reporting: now the status is a structure/union
-+ * where different fields used for different status code. This will enable
-+ * efficient status snooping for high level protocols on top of the softmodem.
-+ *
-+ */
-+
-+#ifndef BlockUtilPh
-+#define BlockUtilPh
-+
-+extern void BlockLongAdd (int, long*, long*, long*);
-+extern void BlockLong2ShortSubtract (int, long*, long*, short*);
-+extern void BlockShort2LongMove (int, short*, long*);
-+extern void BlockShortMultiply (int, int, short*, short*, short*);
-+extern void BlockByteMoveUnaligned (int size, uchar *srcPtr, uchar *dstPtr);
-+extern void BlockShortOffset (int, short, short*, short*);
-+extern long BlockShortInterpolateWithIncrement (int size, long scaleFactor, long increment, int shift, short* src1Ptr, short* src2Ptr, short* dstPtr);
-+extern void BlockReal2ComplexMult (int, short*, ComplexShort*, ComplexShort*);
-+extern void BlockComplexConjigateMult (int, ComplexShort*, ComplexShort*, ComplexShort*);
-+
-+extern long BlockSum (int, short*);
-+extern long BlockByteSum (int, uchar*);
-+extern void BlockComplexSum (int, ComplexShort*, ComplexLong*);
-+extern void BlockComplexPower (int, int, ComplexShort*, long*);
-+extern long BlockFullPower (int, short*);
-+extern long BlockLongCorrelate (int, long*, long*);
-+
-+extern int BlockSymbol2Byte (int, int, ushort*, uchar*);
-+extern int BlockByte2Symbol (int, int, uchar*, ushort*);
-+
-+extern void BlockMapShort2Complex (int, ushort*, ComplexByte*, ComplexShort*);
-+extern void BlockMapShort2Short (int size, ushort *srcPtr, short *mapPtr, short *dstPtr);
-+extern void BlockMapByte2Byte (int size, uchar *srcPtr, uchar *mapPtr, uchar *dstPtr);
-+extern void BlockMapByte2Short (int size, uchar *srcPtr, short *mapPtr, short *dstPtr);
-+extern void BlockShortMult (int size, int shift, short* src1Ptr, short* src2Ptr, short* dstPtr);
-+
-+extern int SM_DECL Idle(void);
-+
-+extern void BlockGenerateAngles(int size, ComplexShort *anglePtr, ComplexShort *incPtr, ComplexShort *dstPtr);
-+extern void BlockExtractRealPart(int size, ComplexShort *srcPtr, short *dstPtr);
-+extern void BlockShortScaleByShift (int size, int shift, short* srcPtr, short* dstPtr);
-+
-+#ifndef PENTIUM_REDEFS /* only if these have not been redefined to function pointers */
-+extern long BlockPower (int, short*);
-+extern void BlockReal2ComplexMacc (int, int, short*, ComplexShort*, ComplexLong*);
-+extern void BlockComplexMult (int, ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockShortScale (int, short, int, short*, short*);
-+extern int SM_DECL BlockShortMove (int, short*, short*);
-+extern long BlockCorrelate (int, short*, short*);
-+
-+extern void BlockRealScaleComplexSymbols(int, int, uchar*, short*, ComplexShort*, ComplexShort*);
-+/* FIXME -- the following 3 functions can be removed */
-+extern void BlockCplxScaleComplexSymbols(int, int, int, ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockCplxSymbolUpdateCplxScale(int, int, int, uchar*, ComplexShort*,
-+ ComplexShort*, ComplexShort*, ComplexShort*);
-+extern void BlockComplexShortFill (int, short, short, ComplexShort*);
-+
-+
-+extern void BlockRealScaleCplxSymbols(int, int, int, short*, ComplexShort*, ComplexShort*);
-+extern void BlockCplxLongConjigateMultCplxShort(int, ComplexLong*, ComplexShort*, ComplexLong*);
-+
-+extern void BlockCplxLongScaleCplxSymbols(int, int, int, ComplexLong*, ComplexShort*, short*, ComplexShort*);
-+extern void BlockCplxSymbolUpdateCplxLongScale(int, int, int, int,
-+ ComplexShort*, short *, ComplexLong*, ComplexShort*);
-+
-+extern void BlockComplexLongFill (int, long, long, ComplexLong*);
-+
-+extern void BlockShortSubtract (int, short*, short*, short*);
-+extern void BlockLongSubtract (int, long*, long*, long*);
-+extern void BlockShortAdd (int, short*, short*, short*);
-+extern void BlockByteMove (int, uchar*, uchar*);
-+extern void BlockByteMoveByLong (int, uchar*, uchar*);
-+extern void SM_DECL BlockByteFill (int, uchar, uchar*);
-+extern void BlockByteFillByLong (int, uchar, uchar*);
-+extern void BlockByteClear (int, uchar*);
-+extern void BlockByteClearByLong (int, uchar*);
-+extern void BlockShortFill (int, short, short*);
-+extern void BlockShortClear (int, short*);
-+extern void BlockShortClearByLong (int, short*);
-+extern void BlockLongFill (int, long, long*);
-+extern void BlockLongClear (int, long*);
-+extern void BlockComplexShortClear (int, ComplexShort*);
-+extern void BlockShortInvert (int, short*, short*);
-+extern void BlockShortScaleDown (int, short*);
-+extern void BlockLongMove (int, long*, long*);
-+extern void BlockShortInterpolate (int, short, int, short*, short*, short*);
-+extern void BlockComplexMultLongAcc (int, int, ComplexShort*, ComplexShort*, ComplexLong*);
-+
-+#endif
-+
-+#endif /* BlockUtilPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/CircBuf.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/CircBuf.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/CircBuf.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/CircBuf.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,217 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * CircBuf -- Generic Circular Buffer
-+ *
-+ * Description:
-+ * Implementation of generic circular buffer algorithms
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.14 $
-+ *
-+ * $Id: CircBuf.h,v 1.14 2004/06/24 03:10:37 ilyas Exp $
-+ *
-+ * $Log: CircBuf.h,v $
-+ * Revision 1.14 2004/06/24 03:10:37 ilyas
-+ * Added extra macro to be able to use un-cached variable (for status write)
-+ *
-+ * Revision 1.13 2004/02/09 23:47:02 ilyas
-+ * Fixed last change
-+ *
-+ * Revision 1.12 2004/02/06 22:52:58 ilyas
-+ * Improved stretch buffer write
-+ *
-+ * Revision 1.11 2002/12/30 23:27:55 ilyas
-+ * Added macro for HostDma optimizations
-+ *
-+ * Revision 1.10 2002/10/26 02:15:02 ilyas
-+ * Optimized and added new macros for HostDma
-+ *
-+ * Revision 1.9 2002/01/22 23:59:29 ilyas
-+ * Added paraenthesis around macro argument
-+ *
-+ * Revision 1.8 2002/01/15 22:28:38 ilyas
-+ * Extended macro to support readPtr from uncached address
-+ *
-+ * Revision 1.7 2001/09/21 19:47:05 ilyas
-+ * Fixed compiler warnings for VxWorks build
-+ *
-+ * Revision 1.6 2001/06/07 18:47:56 ilyas
-+ * Added more macros for circular buffer arithmetics
-+ *
-+ * Revision 1.5 2001/04/18 03:58:34 ilyas
-+ * Added LOG file write granularity
-+ *
-+ * Revision 1.4 2001/01/19 04:34:12 ilyas
-+ * Added more macros to circular buffer implementation
-+ *
-+ * Revision 1.3 2001/01/06 04:01:41 ilyas
-+ * Changed the way we write status messages
-+ *
-+ * Revision 1.2 2001/01/04 05:52:21 ilyas
-+ * Added implementation of stretchable circular buffer used in LOG and Status
-+ * handlers
-+ *
-+ * Revision 1.1 2000/05/03 03:45:55 ilyas
-+ * Original implementation
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef CircBufHeader_H_
-+#define CircBufHeader_H_
-+
-+
-+typedef struct {
-+ char *pStart;
-+ char *pEnd;
-+ char *pRead;
-+ char *pWrite;
-+} circBufferStruct;
-+
-+/* Initialize circular buffer */
-+
-+#define CircBufferInit(pCB,buf,size) do { \
-+ (pCB)->pStart = (char *) (buf); \
-+ (pCB)->pRead = (pCB)->pWrite = (pCB)->pStart; \
-+ (pCB)->pEnd = (pCB)->pStart + size; \
-+} while (0)
-+
-+#define CircBufferGetSize(pCB) ((pCB)->pEnd - (pCB)->pStart)
-+#define CircBufferGetStartPtr(pCB) ((void *) (pCB)->pStart)
-+#define CircBufferGetEndPtr(pCB) ((void *) (pCB)->pEnd)
-+
-+#define CircBufferReset(pCB) (pCB)->pRead = (pCB)->pWrite = (pCB)->pStart
-+
-+
-+#define CircBufferGetReadPtr(pCB) ((void *) (pCB)->pRead)
-+#define CircBufferGetWritePtr(pCB) ((void *) (pCB)->pWrite)
-+
-+
-+#ifndef bcm47xx
-+#define CircBufferDistance(pCB,p1,p2,d) ((char*)(p2) - (char*)(p1) - d >= 0 ? \
-+ (char*)(p2) - (char*)(p1) - d : \
-+ ((char*)(p2)- (char*)(p1) - d + ((pCB)->pEnd - (pCB)->pStart)))
-+
-+#define CircBufferAddContig(pCB,p,n) ((char*)(p) + (n) == (pCB)->pEnd ? (pCB)->pStart : (char*)(p) + (n))
-+#else
-+static __inline int CircBufferDistance(circBufferStruct *pCB, char *p1, char *p2, int d)
-+{
-+ int tmp = p2 - p1 - d;
-+
-+ return (tmp >= 0 ? tmp : tmp + (pCB->pEnd - pCB->pStart));
-+}
-+
-+static __inline char * CircBufferAddContig(circBufferStruct *pCB, char *p, int n)
-+{
-+ p += n;
-+ return (p == pCB->pEnd ? pCB->pStart : p);
-+}
-+#endif
-+
-+#define CircBufferAdd(pCB,p,n) ((char*)(p) + (n) >= (pCB)->pEnd ? \
-+ (pCB)->pStart + ((char*)(p) + (n) - (pCB)->pEnd) : \
-+ (char*)(p) + (n))
-+
-+#define CircBufferReadUpdate(pCB,n) (pCB)->pRead = CircBufferAdd(pCB,(pCB)->pRead,n)
-+#define CircBufferWriteUpdate(pCB,n) (pCB)->pWrite= CircBufferAdd(pCB,(pCB)->pWrite,n)
-+
-+#define CircBufferReadUpdateContig(pCB,n) (pCB)->pRead = CircBufferAddContig(pCB,(pCB)->pRead,n)
-+#define CircBufferWriteUpdateContig(pCB,n) (pCB)->pWrite= CircBufferAddContig(pCB,(pCB)->pWrite,n)
-+
-+#define CircBufferGetReadAvail(pCB) CircBufferDistance(pCB,(pCB)->pRead,(pCB)->pWrite,0)
-+#define CircBufferIsReadEmpty(pCB) ((pCB)->pRead == (pCB)->pWrite)
-+#define CircBufferGetWriteAvail(pCB) CircBufferDistance(pCB,(pCB)->pWrite,(pCB)->pRead,1)
-+#define CircBufferGetWriteAvailN(pCB,n) CircBufferDistance(pCB,(pCB)->pWrite,(pCB)->pRead,n)
-+
-+#define CircBufferGetReadContig(pCB) ((unsigned long)(pCB)->pWrite >= (unsigned long) (pCB)->pRead ? \
-+ (pCB)->pWrite - (pCB)->pRead : \
-+ (pCB)->pEnd - (pCB)->pRead)
-+
-+#define CircBufferGetWriteContig(pCB) ((pCB)->pEnd - (pCB)->pWrite > CircBufferGetWriteAvail(pCB) ? \
-+ CircBufferGetWriteAvail(pCB) : \
-+ (pCB)->pEnd - (pCB)->pWrite)
-+
-+/*
-+**
-+** structure and macros for "strectch" buffer
-+**
-+*/
-+
-+typedef struct {
-+ char *pStart;
-+ char *pEnd;
-+ char *pExtraEnd;
-+ char *pStretchEnd;
-+ char *pRead;
-+ char *pWrite;
-+} stretchBufferStruct;
-+
-+#define StretchBufferInit(pSB,buf,size,extra) do { \
-+ (pSB)->pStart = (char *) (buf); \
-+ (pSB)->pRead = (pSB)->pWrite = (pSB)->pStart; \
-+ (pSB)->pEnd = (pSB)->pStart + (size); \
-+ (pSB)->pStretchEnd = (pSB)->pEnd; \
-+ (pSB)->pExtraEnd = (pSB)->pEnd+(extra); \
-+} while (0)
-+
-+#define StretchBufferGetSize(pSB) ((pSB)->pEnd - (pSB)->pStart)
-+#define StretchBufferGetStartPtr(pSB) ((void *) (pSB)->pStart)
-+#define StretchBufferGetReadPtr(pSB) ((void *) (pSB)->pRead)
-+#define StretchBufferGetWritePtr(pSB) ((void *) (pSB)->pWrite)
-+#define StretchBufferReset(pSB) ((pSB)->pRead = (pSB)->pWrite = (pSB)->pStart)
-+
-+#define StretchBufferGetReadToEnd(pSB) ((pSB)->pStretchEnd - (pSB)->pRead)
-+
-+#define StretchBufferGetReadAvail(pSB) ((pSB)->pWrite - (pSB)->pRead >= 0 ? \
-+ (pSB)->pWrite - (pSB)->pRead : \
-+ (pSB)->pStretchEnd - (pSB)->pRead)
-+#define _StretchBufferGetWriteAvail(pSB,rd) ((rd) - (pSB)->pWrite > 0 ? \
-+ (rd) - (pSB)->pWrite - 1 : \
-+ ((pSB)->pExtraEnd - (pSB)->pWrite))
-+#define StretchBufferGetWriteAvail(pSB) _StretchBufferGetWriteAvail(pSB, (pSB)->pRead)
-+
-+#define StretchBufferReadUpdate(pSB,n) do { \
-+ char *p; \
-+ \
-+ p = (pSB)->pRead + (n); \
-+ (pSB)->pRead = (p >= (pSB)->pStretchEnd ? (pSB)->pStart : p); \
-+} while (0)
-+
-+#define _StretchBufferWriteUpdate(pSB,rd,n) do { \
-+ char *p; \
-+ \
-+ p = (pSB)->pWrite + (n); \
-+ if (p >= (pSB)->pEnd) { \
-+ if ((rd) != (pSB)->pStart) { \
-+ (pSB)->pStretchEnd = p; \
-+ (pSB)->pWrite = (pSB)->pStart; \
-+ } \
-+ } \
-+ else \
-+ (pSB)->pWrite = p; \
-+} while (0)
-+
-+#define StretchBufferWriteUpdate(pSB,n) _StretchBufferWriteUpdate(pSB,(pSB)->pRead,n)
-+
-+#endif /* CircBufHeader_H_ */
-+
-+
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DList.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DList.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DList.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DList.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,131 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * DList.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of double-linked list
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef DListHeader_H_
-+#define DListHeader_H_
-+
-+typedef struct _DListHeader
-+ {
-+ struct _DListHeader *next; /* next item in the list */
-+ struct _DListHeader *prev; /* prev item in the list */
-+ } DListHeader;
-+
-+typedef struct _DListUpHeader
-+ {
-+ struct _DListUpHeader *next; /* next item in the list */
-+ struct _DListUpHeader *prev; /* prev item in the list */
-+ struct _DListUpHeader *head; /* head of the list */
-+ } DListUpHeader;
-+
-+/* Double linked list DList management macros */
-+
-+#define DListInit(pDListHead) do { \
-+ ((DListHeader *)(pDListHead))->next = pDListHead; \
-+ ((DListHeader *)(pDListHead))->prev = pDListHead; \
-+} while (0)
-+
-+#define DListNext(pDListEntry) (((DListHeader *)(pDListEntry))->next)
-+#define DListPrev(pDListEntry) (((DListHeader *)(pDListEntry))->prev)
-+
-+#define DListEntryLinked(pDListEntry) (NULL != DListNext(pDListEntry))
-+#define DListUnlinkEntry(pDListEntry) (DListNext(pDListEntry) = DListPrev(pDListEntry) = NULL)
-+
-+#define DListFirst(pDListHead) DListNext(pDListHead)
-+#define DListLast(pDListHead) DListPrev(pDListHead)
-+#define DListValid(pDListHead,pEntry) ((void *)(pDListHead) != (pEntry))
-+#define DListEmpty(pDListHead) ((void *)pDListHead == ((DListHeader *)pDListHead)->next)
-+
-+#define DListInsertAfter(pDListEntry,pEntry) do { \
-+ ((DListHeader *)(pEntry))->next = ((DListHeader *)(pDListEntry))->next; \
-+ ((DListHeader *)(pEntry))->prev = (DListHeader *)(pDListEntry); \
-+ ((DListHeader *)(pDListEntry))->next->prev = (DListHeader *) (pEntry); \
-+ ((DListHeader *)(pDListEntry))->next = (DListHeader *) (pEntry); \
-+} while (0)
-+
-+#define DListInsertBefore(pDListEntry,pEntry) do { \
-+ ((DListHeader *)(pEntry))->next = (DListHeader *)(pDListEntry); \
-+ ((DListHeader *)(pEntry))->prev = ((DListHeader *)(pDListEntry))->prev; \
-+ ((DListHeader *)(pDListEntry))->prev->next = (DListHeader *) (pEntry); \
-+ ((DListHeader *)(pDListEntry))->prev = (DListHeader *) (pEntry); \
-+} while (0)
-+
-+#define DListInsertTail(pDListHead,pEntry) DListInsertBefore(pDListHead,pEntry)
-+#define DListInsertHead(pDListHead,pEntry) DListInsertAfter(pDListHead,pEntry)
-+
-+#define DListRemove(pDListEntry) do { \
-+ ((DListHeader *)(pDListEntry))->prev->next = ((DListHeader *)(pDListEntry))->next; \
-+ ((DListHeader *)(pDListEntry))->next->prev = ((DListHeader *)(pDListEntry))->prev; \
-+} while (0)
-+
-+
-+#define DListForEach(pDListHead,f,ref) do { \
-+ DListHeader *p = ((DListHeader *)(pDListHead))->next; \
-+ \
-+ while (DListValid(pDListHead,p)) { \
-+ DListHeader *p0 = p; \
-+ p = DListNext(p); \
-+ if ( (f)((void *)p0, ref) ) break; \
-+ } \
-+} while (0)
-+
-+
-+/* Double linked list with up link DListUp management macros */
-+
-+#define DListUpInit(pDListHead) do { \
-+ ((DListUpHeader *)(pDListHead))->next = (DListUpHeader *) (pDListHead); \
-+ ((DListUpHeader *)(pDListHead))->prev = (DListUpHeader *) (pDListHead); \
-+ ((DListUpHeader *)(pDListHead))->head = (DListUpHeader *) (pDListHead); \
-+} while (0)
-+
-+#define DListUpNext(pDListEntry) ((DListUpHeader *) DListNext(pDListEntry))
-+#define DListUpPrev(pDListEntry) ((DListUpHeader *) DListPrev(pDListEntry))
-+#define DListUpHead(pDListEntry) (((DListUpHeader *)(pDListEntry))->head)
-+
-+#define DListUpFirst(pDListHead) DListUpNext(pDListHead)
-+#define DListUpLast(pDListHead) DListUpPrev(pDListHead)
-+#define DListUpValid(pEntry) (((DListUpHeader *)(pEntry))->head != (void *) pEntry)
-+#define DListUpEmpty(pDListHead) DListEmpty(pDListHead)
-+
-+#define DListUpInsertAfter(pDListEntry,pEntry) do { \
-+ DListInsertAfter(pDListEntry,pEntry); \
-+ ((DListUpHeader *)(pEntry))->head = ((DListUpHeader *)(pDListEntry))->head; \
-+} while (0)
-+
-+#define DListUpInsertBefore(pDListEntry,pEntry) do { \
-+ DListInsertBefore(pDListEntry,pEntry); \
-+ ((DListUpHeader *)(pEntry))->head = ((DListUpHeader *)(pDListEntry))->head; \
-+} while (0)
-+
-+#define DListUpInsertTail(pDListHead,pEntry) DListUpInsertBefore(pDListHead,pEntry)
-+#define DListUpInsertHead(pDListHead,pEntry) DListUpInsertAfter(pDListHead,pEntry)
-+
-+#define DListUpRemove(pDListEntry) DListRemove(pDListEntry)
-+#define DListUpForEach(pDListHead,f,ref) DListForEach((DListHeader *)(pDListHead),f,ref)
-+
-+#endif /* DListHeader_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DslFramer.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DslFramer.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DslFramer.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/DslFramer.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,159 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * DslFramer.h
-+ *
-+ * Description:
-+ * This file contains common DSL framer definitions
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: DslFramer.h,v 1.3 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: DslFramer.h,v $
-+ * Revision 1.3 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.2 2004/04/12 23:41:10 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef DslFramerHeader
-+#define DslFramerHeader
-+
-+#include "DList.h"
-+
-+#define kDslFramerInitialized 0x80000000
-+
-+/* status codes */
-+
-+#define kDslFramerRxFrame 1
-+#define kDslFramerRxFrameErr 2
-+#define kDslFramerTxFrame 3
-+#define kDslFramerTxFrameErr 4
-+
-+#define kDslFramerRxFrameErrFlushed 1
-+#define kDslFramerRxFrameErrAbort 2
-+#define kDslFramerRxFrameErrPhy 3
-+
-+#define kDslFramerTxFrameErrFlushed 1
-+
-+
-+typedef struct _dslFramerBufDesc {
-+ long pkId;
-+ long bufFlags;
-+ void *bufPtr;
-+ long bufLen;
-+} dslFramerBufDesc;
-+
-+/* data bufDesc flags */
-+
-+#define kDslFramerStartNewFrame 1
-+#define kDslFramerEndOfFrame 2
-+#define kDslFramerAbortFrame 4
-+
-+#define kDslFramerExtraByteShift 3
-+#define kDslFramerExtraByteMask (0x7 << kDslFramerExtraByteShift)
-+
-+typedef struct _dslFramerControl {
-+ bitMap setup;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+ ulong statusCode;
-+ ulong statusOffset;
-+
-+ int nRxBuffers;
-+ int nRxBufSize;
-+ int nRxPackets;
-+
-+ dslFrame *freeBufListPtr;
-+ void *freeBufPool;
-+ void *pBufMemory;
-+
-+ dslFrame *freePacketListPtr;
-+ void *freePacketPool;
-+
-+ /* RX working data set */
-+
-+ dslFrame *pRxFrame;
-+ dslFrameBuffer *pRxBuf;
-+ uchar *pRxBufData;
-+ uchar *pRxBufDataEnd;
-+ int rxFrameLen;
-+
-+ /* TX working data set */
-+
-+ DListHeader dlistTxWaiting;
-+ dslFrame *pTxFrame;
-+ dslFrameBuffer *pTxBuf;
-+ uchar *pTxBufData;
-+ uchar *pTxBufDataEnd;
-+
-+ /* stats data */
-+
-+ ulong dslByteCntRxTotal;
-+ ulong dslByteCntTxTotal;
-+
-+ ulong dslFrameCntRxTotal;
-+ ulong dslFrameCntRxErr;
-+ ulong dslFrameCntTxTotal;
-+
-+} dslFramerControl;
-+
-+
-+extern Boolean DslFramerInit(
-+ void *gDslVars,
-+ dslFramerControl *dfCtrl,
-+ bitMap setup,
-+ ulong statusCode,
-+ ulong statusOffset,
-+ dslFrameHandlerType rxIndicateHandlerPtr,
-+ dslFrameHandlerType txCompleteHandlerPtr,
-+ dslStatusHandlerType statusHandlerPtr,
-+ ulong rxBufNum,
-+ ulong rxBufSize,
-+ ulong rxPacketNum);
-+extern void DslFramerClose(void *gDslVars, dslFramerControl *dfCtrl);
-+extern void DslFramerSendFrame(void *gDslVars, dslFramerControl *dfCtrl, dslFrame *pFrame);
-+extern void DslFramerReturnFrame(void *gDslVars, dslFramerControl *dfCtrl, dslFrame *pFrame);
-+
-+
-+extern Boolean DslFramerRxGetPtr(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern void DslFramerRxDone (void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern Boolean DslFramerTxGetPtr(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern void DslFramerTxDone(void *gDslVars, dslFramerControl *dfCtrl, dslFramerBufDesc *pBufDesc);
-+extern Boolean DslFramerTxIdle (void *gDslVars, dslFramerControl *dfCtrl);
-+extern void DslFramerTxFlush(void *gDslVars, dslFramerControl *dfCtrl);
-+
-+extern void * DslFramerGetFramePoolHandler(dslFramerControl *dfCtrl);
-+extern void DslFramerClearStat(dslFramerControl *dfCtrl);
-+
-+extern void DslFramerRxFlushFrame (void *gDslVars, dslFramerControl *dfCtrl, int errCode);
-+extern void DslFramerRxFlush(void *gDslVars, dslFramerControl *dfCtrl);
-+
-+#endif /* DslFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Flatten.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Flatten.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Flatten.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Flatten.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,115 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * Flatten.h -- Header for Flatten/Unflatten command/status
-+ *
-+ * Copyright (c) 1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.14 $
-+ *
-+ * $Id: Flatten.h,v 1.14 2004/03/04 19:48:52 linyin Exp $
-+ *
-+ * $Log: Flatten.h,v $
-+ * Revision 1.14 2004/03/04 19:48:52 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.13 2003/10/17 22:45:14 yongbing
-+ * Increase buffer size for large B&G table of G992P3
-+ *
-+ * Revision 1.12 2003/08/12 23:16:26 khp
-+ * - for Haixiang: added support for ADSL_MARGIN_TWEAK_TEST
-+ *
-+ * Revision 1.11 2003/02/27 06:33:03 ilyas
-+ * Improved free space checking in command buffer (became a problem with
-+ * 2 commands SetXmtgain and StartPhy)
-+ *
-+ * Revision 1.10 2003/01/11 01:27:07 ilyas
-+ * Improved checking for available space in status buffer
-+ *
-+ * Revision 1.9 2002/09/07 01:43:59 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.8 2002/05/16 00:01:52 khp
-+ * -added missing #endif
-+ *
-+ * Revision 1.7 2002/05/15 00:04:48 mprahlad
-+ * increase the status buffer size - prevent memory overflow for annexC cases
-+ *
-+ * Revision 1.6 2002/04/05 04:10:33 linyin
-+ * -hack to fit in Annex C firmware in LMEM
-+ *
-+ * Revision 1.5 2002/04/05 02:45:25 linyin
-+ * Make the buffer side larger for annexC
-+ *
-+ * Revision 1.4 2002/01/30 07:19:06 ilyas
-+ * Moved showtime code to LMEM
-+ *
-+ * Revision 1.3 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.2 2001/04/25 00:30:54 ilyas
-+ * Adjusted MaxFrameLen
-+ *
-+ * Revision 1.1 2001/04/24 21:41:21 ilyas
-+ * Implemented status flattening/unflattaning to transfer statuses between
-+ * modules asynchronously through the circular buffer
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef _Flatten_H_
-+#define _Flatten_H_
-+
-+#include "CircBuf.h"
-+
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+#define kMaxFlattenedCommandSize 272 /* maximum no. of bytes in flattened cmd */
-+#else
-+#define kMaxFlattenedCommandSize 128 /* maximum no. of bytes in flattened cmd */
-+#endif
-+#if defined(G992_ANNEXC) || defined(G992P3)
-+#if defined(G992P5)
-+#define kMaxFlattenedStatusSize 2200 /* maximum no. of bytes in flattened status */
-+#else
-+#define kMaxFlattenedStatusSize 1100 /* maximum no. of bytes in flattened status */
-+#endif
-+#else
-+#define kMaxFlattenedStatusSize 550 /* maximum no. of bytes in flattened status */
-+#endif
-+
-+#define kMaxFlattenFramelength (kMaxFlattenedStatusSize - (4*sizeof(long)) - 20)
-+
-+extern int SM_DECL FlattenCommand (dslCommandStruct *cmd, ulong *dstPtr, ulong nAvail);
-+extern int SM_DECL UnflattenCommand(ulong *srcPtr, dslCommandStruct *cmd);
-+extern int SM_DECL FlattenStatus (dslStatusStruct *status, ulong *dstPtr, ulong nAvail);
-+extern int SM_DECL UnflattenStatus (ulong *srcPtr, dslStatusStruct *status);
-+
-+#define FlattenBufferInit(fb,fbData,bufSize,itemSize) \
-+ StretchBufferInit(fb, fbData, bufSize, itemSize)
-+
-+extern int SM_DECL FlattenBufferStatusWrite(stretchBufferStruct *fBuf, dslStatusStruct *status);
-+extern int SM_DECL FlattenBufferStatusRead(stretchBufferStruct *fBuf, dslStatusStruct *status);
-+
-+extern int SM_DECL FlattenBufferCommandWrite(stretchBufferStruct *fBuf, dslCommandStruct *cmd);
-+extern int SM_DECL FlattenBufferCommandRead(stretchBufferStruct *fBuf, dslCommandStruct *cmd);
-+
-+#define FlattenBufferReadComplete(fb,nBytes) \
-+ StretchBufferReadUpdate (fb, nBytes)
-+
-+#endif /* _Flatten_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,110 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G992p3OvhMsg.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the G992p3 overhead
-+ * channel messages global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1999-2003 BroadCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: G992p3OvhMsg.gh,v 1.5 2004/09/11 03:52:25 ilyas Exp $
-+ *
-+ * $Log: G992p3OvhMsg.gh,v $
-+ * Revision 1.5 2004/09/11 03:52:25 ilyas
-+ * Added support for overhead message segmentation
-+ *
-+ * Revision 1.4 2004/07/07 01:27:20 ilyas
-+ * Fixed OHC message stuck problem on L2 entry/exit
-+ *
-+ * Revision 1.3 2004/06/10 00:13:31 ilyas
-+ * Added L2/L3 and SRA
-+ *
-+ * Revision 1.2 2004/04/12 23:34:52 ilyas
-+ * Merged the latest ADSL driver chnages for ADSL2+
-+ *
-+ * Revision 1.1 2003/07/18 19:39:18 ilyas
-+ * Initial G.992.3 overhead channel message implementation (from ADSL driver)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G992p3OvhMsgFramerGlobals
-+#define G992p3OvhMsgFramerGlobals
-+
-+#define kG992p3OvhMsgMaxCmdSize (16 + 16)
-+#define kG992p3OvhMsgMaxRspSize (16 + 2*512)
-+
-+typedef struct
-+ {
-+ dslFrame *segFrame;
-+ dslFrameBuffer *segFrBufCur;
-+ dslFrameBuffer segFrBuf;
-+ ulong timeSegOut;
-+ uchar tryCnt;
-+ uchar segTotal;
-+ uchar segId;
-+ }
-+ g992p3SegFrameCtlStruct;
-+
-+typedef struct
-+ {
-+ bitMap setup;
-+ dslFrameHandlerType rxReturnFramePtr;
-+ dslFrameHandlerType txSendFramePtr;
-+ dslCommandHandlerType cmdHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+
-+ dslFrame txRspFrame;
-+ dslFrameBuffer txRspFrBuf;
-+ dslFrameBuffer txRspFrBuf1;
-+ uchar txRspBuf[kG992p3OvhMsgMaxRspSize];
-+ dslFrame txPwrRspFrame;
-+ dslFrameBuffer txPwrRspFrBuf0;
-+ dslFrameBuffer txPwrRspFrBuf0a;
-+ dslFrameBuffer txPwrRspFrBuf1;
-+ uchar txPwrRspBuf0[8];
-+ dslFrame txCmdFrame;
-+ dslFrameBuffer txCmdFrBuf0;
-+ dslFrameBuffer txCmdFrBuf0a;
-+ dslFrameBuffer txCmdFrBuf1;
-+ uchar txCmdBuf[kG992p3OvhMsgMaxCmdSize];
-+ g992p3SegFrameCtlStruct txSegFrameCtl;
-+ ulong txFlags;
-+ uchar txL0Rq;
-+ uchar txL3Rq;
-+
-+ ulong timeMs;
-+ ulong timeCmdOut;
-+ ulong cmdTryCnt;
-+ ulong cmdNum;
-+ ulong timeRspOut;
-+ uchar *txPmdCmd;
-+
-+ uchar rxCmdMsgNum;
-+ uchar rxRspMsgNum;
-+ uchar txCmdMsgNum;
-+ uchar txRspMsgNum;
-+ }
-+ g992p3OvhMsgVarsStruct;
-+
-+#endif /* G992p3OvhMsgFramerGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G992p3OvhMsg.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,64 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G992p3OvhMsg.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for G992p3
-+ * overhead channel messages
-+ *
-+ *
-+ * Copyright (c) 1999-2003 BroadCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.1 $
-+ *
-+ * $Id: G992p3OvhMsg.h,v 1.1 2003/07/18 19:39:18 ilyas Exp $
-+ *
-+ * $Log: G992p3OvhMsg.h,v $
-+ * Revision 1.1 2003/07/18 19:39:18 ilyas
-+ * Initial G.992.3 overhead channel message implementation (from ADSL driver)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G992p3OvhMsgFramerHeader
-+#define G992p3OvhMsgFramerHeader
-+
-+#define kG992p3OvhMsgFrameBufCnt -1
-+
-+extern Boolean G992p3OvhMsgInit(
-+ void *gDslVars,
-+ bitMap setup,
-+ dslFrameHandlerType rxReturnFramePtr,
-+ dslFrameHandlerType txSendFramePtr,
-+ dslCommandHandlerType commandHandler,
-+ dslStatusHandlerType statusHandler);
-+
-+extern void G992p3OvhMsgReset(void *gDslVars);
-+extern void G992p3OvhMsgClose(void *gDslVars);
-+extern void G992p3OvhMsgTimer(void *gDslVars, long timeQ24ms);
-+extern Boolean G992p3OvhMsgCommandHandler (void *gDslVars, dslCommandStruct *cmd);
-+extern void G992p3OvhMsgStatusSnooper (void *gDslVars, dslStatusStruct *status);
-+
-+extern int G992p3OvhMsgSendCompleteFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+extern int G992p3OvhMsgIndicateRcvFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+
-+extern void G992p3OvhMsgSetL3(void *gDslVars);
-+extern void G992p3OvhMsgSetL0(void *gDslVars);
-+
-+#endif /* G992p3OvhMsgFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,66 @@
-+/****************************************************************************
-+ *
-+ * G997.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the G997 Framer
-+ * global variable structure.
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: G997.gh,v 1.5 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: G997.gh,v $
-+ * Revision 1.5 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.4 2004/04/27 00:27:16 ilyas
-+ * Implemented double buffering to ensure G.997 HDLC frame is continuous
-+ *
-+ * Revision 1.3 2003/07/18 18:56:59 ilyas
-+ * Added support for shared TX buffer (for ADSL driver)
-+ *
-+ * Revision 1.2 2002/01/11 06:48:27 ilyas
-+ * Added command handler pointer
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G997FramerGlobals
-+#define G997FramerGlobals
-+
-+#include "DslFramer.h"
-+#include "HdlcFramer.h"
-+
-+#define kG997MsgBufSize 64
-+
-+typedef struct
-+ {
-+ bitMap setup;
-+ dslFramerControl dslFramer;
-+ hdlcByteControl hdlcByte;
-+ dslCommandHandlerType commandHandler;
-+
-+ ulong timeMs;
-+ ulong timeCmdOut;
-+
-+ uchar rxMsgNum;
-+ uchar txMsgNum;
-+ Boolean txIdle;
-+ uchar txMsgBuf[kG997MsgBufSize];
-+ ulong txMsgBufLen;
-+ uchar *txMsgBufPtr;
-+ ulong txMsgLen;
-+ ulong txMsgBufs;
-+ ulong txMsgBufNum;
-+ }
-+ g997VarsStruct;
-+
-+#endif /* G997FramerGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/G997.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,68 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * G997.h
-+ *
-+ * Description:
-+ * This file contains the exported functions and definitions for G97Framer
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: G997.h,v 1.3 2003/07/18 18:56:59 ilyas Exp $
-+ *
-+ * $Log: G997.h,v $
-+ * Revision 1.3 2003/07/18 18:56:59 ilyas
-+ * Added support for shared TX buffer (for ADSL driver)
-+ *
-+ * Revision 1.2 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef G997FramerHeader
-+#define G997FramerHeader
-+
-+extern Boolean G997Init(
-+ void *gDslVars,
-+ bitMap setup,
-+ ulong rxBufNum,
-+ ulong rxBufSize,
-+ ulong rxPacketNum,
-+ upperLayerFunctions *pUpperLayerFunctions,
-+ dslCommandHandlerType g997PhyCommandHandler);
-+
-+extern void G997Close(void *gDslVars);
-+extern void G997Timer(void *gDslVars, long timeQ24ms);
-+extern Boolean G997CommandHandler (void *gDslVars, dslCommandStruct *cmd);
-+extern void G997StatusSnooper (void *gDslVars, dslStatusStruct *status);
-+
-+extern int G997SendFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+extern int G997ReturnFrame(void *gDslVars, void *pVc, ulong mid, dslFrame *pFrame);
-+
-+extern Boolean G997SetTxBuffer(void *gDslVars, ulong len, void *bufPtr);
-+extern void * G997GetFramePoolHandler(void *gDslVars);
-+
-+#endif /* G997FramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/HdlcFramer.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/HdlcFramer.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/HdlcFramer.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/HdlcFramer.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,237 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * HdlcFramer.h
-+ *
-+ * Description:
-+ * This file contains common HDLC definitions for bit/byte stuffing
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.3 $
-+ *
-+ * $Id: HdlcFramer.h,v 1.3 2004/07/21 01:39:41 ilyas Exp $
-+ *
-+ * $Log: HdlcFramer.h,v $
-+ * Revision 1.3 2004/07/21 01:39:41 ilyas
-+ * Reset entire G.997 state on retrain. Timeout in G.997 if no ACK
-+ *
-+ * Revision 1.2 2003/07/18 18:51:05 ilyas
-+ * Added mode (default) to pass address and control field
-+ *
-+ * Revision 1.1 2001/12/13 02:28:27 ilyas
-+ * Added common framer (DslPacket and G997) and G997 module
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef HdlcFramerHeader
-+#define HdlcFramerHeader
-+
-+/* setup bitmap definitions */
-+
-+#define kHdlcSetupShift 16
-+#define kHdlcSetupMask ((long)0xFFFF << kHdlcSetupShift)
-+
-+#define kHdlcCrcMask 0x00030000
-+#define kHdlcCrcNone 0x00000000
-+#define kHdlcCrc16 0x00010000
-+#define kHdlcCrc32 0x00020000
-+
-+#define kHdlcTxIdleStop 0x00040000
-+#define kHdlcSpecialAddrCtrl 0x00080000
-+
-+extern ushort HdlcCrc16Table[];
-+
-+#define HDLC16_CRC_INIT 0xFFFF
-+#define HDLC16_CRC_FINAL(crc) ((crc) ^ 0xFFFF)
-+#define HDLC16_GOOD_CRC 0xF0B8
-+#define Hdlc16UpdateCrc(crc,b) ((crc) >> 8) ^ HdlcCrc16Table[((crc) ^ (b)) & 0xFF]
-+
-+extern ulong HdlcCrc32Table[];
-+
-+#define HDLC32_CRC_INIT 0xFFFFFFFF
-+#define HDLC32_CRC_FINAL(crc) ((crc) ^ 0xFFFFFFFF)
-+#define HDLC32_GOOD_CRC 0xDEBB20E3
-+#define Hdlc32UpdateCrc(crc,b) ((crc) >> 8) ^ HdlcCrc32Table[((crc) ^ (b)) & 0xFF]
-+
-+extern ulong HdlcCrc32Table[];
-+
-+/* HDLC common fields */
-+
-+#define HDLC_ADDR 0xFF
-+#define HDLC_CTRL 0x3
-+
-+#define HDLC_BYTE_FLAG 0x7E
-+#define HDLC_BYTE_ESC 0x7D
-+
-+/* HDLC frame assembly states */
-+
-+#define HDLC_STATE_START_FLAG 0
-+#define HDLC_STATE_ADDRESS (HDLC_STATE_START_FLAG + 1)
-+#define HDLC_STATE_CONTROL (HDLC_STATE_START_FLAG + 2)
-+#define HDLC_STATE_DATA (HDLC_STATE_START_FLAG + 3)
-+#define HDLC_STATE_FCS1 (HDLC_STATE_START_FLAG + 4)
-+#define HDLC_STATE_FCS2 (HDLC_STATE_START_FLAG + 5)
-+#define HDLC_STATE_END_FLAG (HDLC_STATE_START_FLAG + 6)
-+
-+
-+/* HDLC common types */
-+
-+typedef struct _hdlcByteControl {
-+ bitMap setup;
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+
-+ /* RX working data set */
-+
-+ uchar rxFrameState;
-+ int rxFrameLen;
-+ ulong rxCrc;
-+ Boolean rxEscChar;
-+
-+ uchar *pRxData;
-+ uchar *pRxDataEnd;
-+ long rxDataLen;
-+
-+ /* TX working data set */
-+
-+ uchar txFrameState;
-+ int txFrameLen;
-+ ulong txCrc;
-+ int txCharPending;
-+
-+ uchar *pTxData;
-+ uchar *pTxDataEnd;
-+ long txDataLen;
-+} hdlcByteControl;
-+
-+typedef struct _hdlcBitControl {
-+ bitMap setup;
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+
-+ /* RX working data set */
-+
-+ uchar rxFrameState;
-+ int rxFrameLen;
-+ ulong rxCrc;
-+ int rxNibblePending;
-+ int rxOutVal;
-+ uchar rxOutBits;
-+ uchar rxRem1Bits;
-+ Boolean rxEscChar; /* ???? */
-+
-+ uchar *pRxData;
-+ uchar *pRxDataEnd;
-+ long rxDataLen;
-+
-+ /* TX working data set */
-+
-+ uchar txFrameState;
-+ int txFrameLen;
-+ ulong txCrc;
-+ int txOutVal;
-+ uchar txOutBits;
-+ uchar txLast1Bits;
-+ int txCharPending; /* ???? */
-+
-+ uchar *pTxData;
-+ uchar *pTxDataEnd;
-+ long txDataLen;
-+} hdlcBitControl;
-+
-+/* HDLC common functions */
-+
-+#define HdlcFramerTxFrameInit(ctrl) do { \
-+ ctrl->txFrameState = HDLC_STATE_START_FLAG; \
-+ ctrl->txFrameLen = 0; \
-+ ctrl->txCrc = HDLC16_CRC_INIT; \
-+ ctrl->txCharPending= -1; \
-+} while (0)
-+
-+#define HdlcFramerRxFrameInit(ctrl) do { \
-+ ctrl->rxFrameState = HDLC_STATE_START_FLAG; \
-+ ctrl->rxFrameLen = 0; \
-+ ctrl->rxCrc = HDLC16_CRC_INIT; \
-+ ctrl->rxEscChar = false; \
-+} while (0)
-+
-+#define HdlcFramerTxGetData(ctrl) do { \
-+ dslFramerBufDesc bufDesc; \
-+ \
-+ if ((ctrl->txDataGetPtrHandler) (gDslVars, &bufDesc)) { \
-+ ctrl->pTxData = bufDesc.bufPtr; \
-+ ctrl->pTxDataEnd = (uchar*)bufDesc.bufPtr + bufDesc.bufLen; \
-+ ctrl->txDataLen = bufDesc.bufLen; \
-+ if (bufDesc.bufFlags & kDslFramerStartNewFrame) \
-+ HdlcFramerTxFrameInit(ctrl); \
-+ } \
-+ else { \
-+ HdlcFramerTxFrameInit(ctrl); \
-+ } \
-+} while (0);
-+
-+#define HdlcFramerRxGetData(ctrl, frFlag) do { \
-+ dslFramerBufDesc bufDesc; \
-+ \
-+ bufDesc.bufFlags = frFlag; \
-+ if ((ctrl->rxDataGetPtrHandler) (gDslVars, &bufDesc)) { \
-+ ctrl->pRxData = bufDesc.bufPtr; \
-+ ctrl->pRxDataEnd = (uchar*)bufDesc.bufPtr + bufDesc.bufLen; \
-+ ctrl->rxDataLen = bufDesc.bufLen; \
-+ } \
-+} while (0);
-+
-+/* HDLC functions headers */
-+
-+extern Boolean HdlcByteInit(
-+ void *gDslVars,
-+ hdlcByteControl *hbyCtrl,
-+ bitMap setup,
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType rxDataDoneHandler,
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType txDataDoneHandler);
-+
-+extern void HdlcByteReset(void *gDslVars, hdlcByteControl *hbyCtrl);
-+extern void HdlcByteRxFlush(void *gDslVars, hdlcByteControl *hbyCtrl);
-+extern int HdlcByteRx(void *gDslVars, hdlcByteControl *hbyCtrl, int nBytes, uchar *srcPtr) FAST_TEXT;
-+extern int HdlcByteTx(void *gDslVars, hdlcByteControl *hbyCtrl, int nBytes, uchar *dstPtr) FAST_TEXT;
-+extern Boolean HdlcByteTxIdle(void *gDslVars, hdlcByteControl *hbyCtrl);
-+
-+extern Boolean HdlcBitInit(
-+ void *gDslVars,
-+ hdlcBitControl *hbiCtrl,
-+ bitMap setup,
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType rxDataDoneHandler,
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler,
-+ dslFramerDataDoneHandlerType txDataDoneHandler);
-+
-+extern void HdlcBitReset(void *gDslVars, hdlcByteControl *hbiCtrl);
-+extern int HdlcBitRx(void *gDslVars, hdlcBitControl *hbiCtrl, int nBytes, uchar *srcPtr) FAST_TEXT;
-+extern int HdlcBitTx(void *gDslVars, hdlcBitControl *hbiCtrl, int nBytes, uchar *dstPtr) FAST_TEXT;
-+
-+#endif /* HdlcFramerHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MathUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MathUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MathUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MathUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,135 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/************************************************************************
-+ *
-+ * MathUtil.h:
-+ *
-+ * Description:
-+ * This file contains the exported interface for MathUtil.c module.
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.6 $
-+ *
-+ * $Id: MathUtil.h,v 1.6 2004/04/13 00:21:13 ilyas Exp $
-+ *
-+ * $Log: MathUtil.h,v $
-+ * Revision 1.6 2004/04/13 00:21:13 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.5 2001/08/16 02:18:08 khp
-+ * - mark functions with FAST_TEXT to reduce cycle counts for QPROC targets
-+ * (replaces use of LMEM_INSN)
-+ *
-+ * Revision 1.4 1999/10/06 04:55:22 liang
-+ * Added function to multiply two long values to save result as VeryLong.
-+ *
-+ * Revision 1.3 1999/08/05 19:42:52 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.2 1999/03/26 03:29:59 liang
-+ * Export CosSin table.
-+ *
-+ * Revision 1.1 1998/10/28 01:28:07 liang
-+ * *** empty log message ***
-+ *
-+ * Revision 1.12 1998/02/10 17:19:49 scott
-+ * Changed MathVL routines to return arguments using pointers
-+ *
-+ * Revision 1.11 1997/12/13 06:12:07 mwg
-+ * Added more Atan2 flavors
-+ *
-+ * Revision 1.10 1997/11/18 01:11:48 mwg
-+ * Removed <CR> symbols which accidently slipped in.
-+ *
-+ * Revision 1.9 1997/11/03 19:07:52 scott
-+ * No longer redefine max() and min() if already defined
-+ *
-+ * Revision 1.8 1997/07/30 01:35:20 liang
-+ * Add more accurate atan2 function UtilLongLongAtan2.
-+ *
-+ * Revision 1.7 1997/07/21 20:23:19 mwg
-+ * Added new function: UtilBlockCos()
-+ *
-+ * Revision 1.6 1997/03/21 23:50:10 liang
-+ * Added initial version of V8bis module to CVS tree.
-+ *
-+ * Revision 1.5 1997/03/19 18:35:34 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.4 1997/01/21 00:36:15 mwg
-+ * Added new function: UtilBlockCosSin()
-+ *
-+ * Revision 1.3 1996/06/18 21:14:45 mwg
-+ * Modified VLDivVL by allowing to specify the result scaling.
-+ *
-+ * Revision 1.2 1996/06/12 02:31:59 mwg
-+ * Added 64bit arithmetic functions.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:15 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.4 1995/12/04 23:08:15 liang
-+ * Add file Math/LinearToLog.c.
-+ *
-+ ************************************************************************/
-+#ifndef MathUtilPh
-+#define MathUtilPh
-+
-+/* Exported tables */
-+extern const short UtilCosTable[];
-+
-+/* Exported functions */
-+extern ComplexShort UtilCosSin(ushort angle);
-+extern long UtilBlockCosSin (int nValues, long angle, long delta, ComplexShort *dstPtr);
-+extern long UtilBlockCos (int nValues, long angle, long delta, short *dstPtr);
-+extern ushort UtilShortShortAtan2(ComplexShort point);
-+extern ushort UtilLongShortAtan2(ComplexLong point);
-+extern ulong UtilShortLongAtan2(ComplexShort point) FAST_TEXT;
-+extern ulong UtilLongLongAtan2(ComplexLong point) FAST_TEXT;
-+extern ushort UtilSqrt(ulong y);
-+extern ushort UtilMaxMagnitude(int blkSize, ComplexShort *dataPtr);
-+extern short UtilQ0LinearToQ4dB (ulong x);
-+extern ulong UtilQ4dBToQ12Linear (short x);
-+extern void UtilAdjustComplexMagnitude(ComplexShort *srcPtr, short mag, short adjustment);
-+
-+extern void VLMultLongByLong(long x, long y, VeryLong *dst);
-+extern void VLMultShort (VeryLong x, short y, VeryLong *dst);
-+extern void VLAddVL (VeryLong x, VeryLong y, VeryLong *dst);
-+extern void VLAddLong (VeryLong x, long y, VeryLong *dst);
-+extern void VLSubVL (VeryLong x, VeryLong y, VeryLong *dst);
-+extern void VLSubLong (VeryLong x, long y, VeryLong *dst);
-+extern void VLDivVL (VeryLong x, VeryLong y, int scale, long *dst);
-+extern void VLShiftLeft(VeryLong x, int shift, VeryLong *dst);
-+extern void VLShiftRight(VeryLong x, int shift, VeryLong *dst);
-+
-+
-+#define UtilAtan2 UtilShortShortAtan2
-+#define UtilLongAtan2 UtilLongShortAtan2
-+
-+/* Standard Macros */
-+#undef abs
-+#define abs(x) ((x) >= 0 ? (x) : -(x))
-+
-+#undef max
-+#define max(x, y) ((x) >= (y) ? (x) : (y))
-+
-+#undef min
-+#define min(x, y) ((x) <= (y) ? (x) : (y))
-+
-+#endif /* MathUtilPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MipsAsm.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MipsAsm.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MipsAsm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MipsAsm.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,264 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/************************************************************************
-+ *
-+ * MipsAsm.h:
-+ *
-+ * Description:
-+ * This file contains definitions specific to MIPS assembly
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.5 $
-+ *
-+ * $Id: MipsAsm.h,v 1.5 2004/04/13 00:16:59 ilyas Exp $
-+ *
-+ * $Log: MipsAsm.h,v $
-+ * Revision 1.5 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.4 2002/09/12 04:08:50 ilyas
-+ * Added macros for BCM MIPS specific instructions
-+ *
-+ * Revision 1.3 2000/11/18 21:28:19 mprahlad
-+ * ifdef bcm47xx -
-+ * define MSUB(src1,src2) msub src1, src2
-+ * change Mult(dst, src1, src2) to use "mul" instead of "mult; mflo"
-+ * define Mul(src1, src2) mult src1, src2
-+ *
-+ * Revision 1.2 2000/07/28 21:05:05 mprahlad
-+ * Macros specific to bcm47xx added.
-+ *
-+ * Revision 1.1 1999/08/05 19:52:57 liang
-+ * Copied from the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.5 1999/04/02 23:16:21 mwg
-+ * Fixed a minor comatibility issue with mult
-+ *
-+ * Revision 1.4 1999/02/03 20:25:43 mwg
-+ * Added an option for R4010
-+ *
-+ * Revision 1.3 1998/10/30 02:21:34 mwg
-+ * Added targets for 4640
-+ *
-+ * Revision 1.2 1998/10/16 18:52:09 ilyas
-+ * Added ASM_PROLOG[5-7] macros to save on stores
-+ *
-+ * Revision 1.1 1998/06/03 23:28:39 mwg
-+ * Renamed from DinoDefs.h
-+ *
-+ * Revision 1.6 1998/02/09 18:23:11 scott
-+ * Added EMBEDDED_CALLING_CONVENTION (GreenHill) and R3900/R4102
-+ *
-+ * Revision 1.5 1997/03/19 18:35:02 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.4 1996/10/02 20:28:41 liang
-+ * Remove parameter "acc" from the non-DINO version of MAD.
-+ *
-+ * Revision 1.3 1996/10/02 19:44:36 liang
-+ * Separated MultAdd into MAD and MADW, added NO_DINO_WRITEBACK option.
-+ *
-+ * Revision 1.2 1996/08/14 03:06:07 liang
-+ * Modified macro MultAdd so that the assembly code build works.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1994/11/04 22:41:29 mwg
-+ * Added #ifdefs for different targets.
-+ *
-+ ************************************************************************/
-+
-+#ifndef _MIPS_ASM_H_
-+#define _MIPS_ASM_H_
-+
-+#define zero $0
-+#define v0 $2
-+#define v1 $3
-+#define a0 $4
-+#define a1 $5
-+#define a2 $6
-+#define a3 $7
-+#define t0 $8
-+#define t1 $9
-+#define t2 $10
-+#define t3 $11
-+#define t4 $12
-+#define t5 $13
-+#define t6 $14
-+#define t7 $15
-+#define s0 $16
-+#define s1 $17
-+#define s2 $18
-+#define s3 $19
-+#define s4 $20
-+#define s5 $21
-+#define s6 $22
-+#define s7 $23
-+#define t8 $24
-+#define t9 $25
-+#define k0 $26
-+#define k1 $27
-+#define gp $28
-+#define sp $29
-+#define fp $30
-+#define s8 $30
-+#define ra $31
-+
-+#ifdef EMBEDDED_CALLING_CONVENTION
-+
-+/* Support for GreenHills embedded calling convention */
-+
-+#define ASM_PROLOG subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp); \
-+ sw $10, 24(sp); \
-+ sw $11, 28(sp);
-+
-+#define ASM_PROLOG5 subu sp, 32; \
-+ sw $8, 16(sp);
-+
-+#define ASM_PROLOG6 subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp);
-+
-+#define ASM_PROLOG7 subu sp, 32; \
-+ sw $8, 16(sp); \
-+ sw $9, 20(sp); \
-+ sw $10, 24(sp);
-+
-+#define ASM_EPILOG addu sp, 32
-+
-+#else
-+#define ASM_PROLOG
-+#define ASM_PROLOG5
-+#define ASM_PROLOG6
-+#define ASM_PROLOG7
-+#define ASM_EPILOG
-+#endif
-+
-+#ifdef DINO /* Special DSP extensions to MIPS core */
-+
-+#ifndef NO_DINO_WRITEBACK /* DSP extensions with writeback register */
-+
-+#define MAD(src1, src2) .set noreorder ; mad $0, src1, src2 ; .set reorder
-+#define MADW(acc, src1, src2) .set noreorder ; mad acc, src1, src2 ; .set reorder
-+#define Mult(dst, src1, src2) .set noreorder ; mult dst, src1, src2 ; .set reorder
-+#define MultU(dst, src1, src2) .set noreorder ; multu dst, src1, src2 ; .set reorder
-+
-+#else /* NO_DINO_WRITEBACK */
-+
-+#define MAD(src1, src2) .set noreorder ; mad $0, src1, src2 ; .set reorder
-+#define MADW(acc, src1, src2) .set noreorder ; mad $0, src1, src2 ; mflo acc ; .set reorder
-+#define Mult(dst, src1, src2) multu src1, src2 ; mflo dst
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#endif /* NO_DINO_WRITEBACK */
-+
-+#else /* DINO */
-+
-+#if defined(R3900)
-+
-+#define MAD(src1, src2) madd $0, src1, src2
-+#define MADW(acc, src1, src2) madd acc, src1, src2
-+#define Mult(dst, src1, src2) mult dst, src1, src2
-+#define MultU(dst, src1, src2) multu dst, src1, src2
-+
-+#elif defined(bcm47xx_INSTR_MACROS) && defined(bcm47xx)
-+
-+#define mips_froo(s1,s2,s3) s1##s2##s3
-+#define MSUB(s1,s2) .set noreorder ; mips_froo(msub_,s1,s2) ; .set reorder
-+#define MAD(s1,s2) .set noreorder ; mips_froo(mad_,s1,s2) ; .set reorder
-+#define MADW(acc, s1,s2) .set noreorder ; mips_froo(mad_,s1,s2) ; mflo acc ; .set reorder
-+
-+#include "BCM4710.h"
-+
-+#define Mult(dst, src1, src2) mul dst, src1, src2
-+#define Mul( src1, src2) mult src1, src2 ;
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#elif defined(bcm47xx)
-+#define MSUB(src1, src2) msub src1, src2
-+#define MAD(src1, src2) madd src1, src2
-+#define MADW(acc, src1, src2) .set noreorder ; madd src1, src2; mflo acc ; .set reorder
-+/*
-+#define Mult(dst, src1, src2) mult src1, src2 ; mflo dst
-+*/
-+#define Mult(dst, src1, src2) mul dst , src1, src2 ;
-+#define Mul( src1, src2) mult src1, src2 ;
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#else
-+
-+#ifdef R4102
-+#define MAD(src1, src2) madd16 src1, src2
-+#define MADW(acc, src1, src2) madd16 src1, src2 ; mflo acc
-+#else /* R4102 */
-+
-+#ifdef R4640
-+
-+#define MAD(src1, src2) madd $0, src1, src2
-+#define MADW(acc, src1, src2) madd src1, src2; mflo acc
-+
-+#else /* R4640 */
-+
-+#ifdef R4010
-+
-+#define MAD(src1, src2) madd src1, src2
-+#define MADW(acc, src1, src2) madd src1, src2; mflo acc
-+
-+#else
-+#define MAD(src1, src2) .set noat ;\
-+ mflo $at ;\
-+ sw $2, -4(sp) ;\
-+ multu src1, src2 ;\
-+ mflo $2 ;\
-+ addu $at, $2, $at ;\
-+ lw $2, -4(sp) ;\
-+ mtlo $at ;\
-+ .set at
-+
-+#define MADW(acc, src1, src2) .set noat ;\
-+ mflo $at ;\
-+ sw $2, -4(sp) ;\
-+ multu src1, src2 ;\
-+ mflo $2 ;\
-+ addu $at, $2, $at ;\
-+ lw $2, -4(sp) ;\
-+ move acc, $at ;\
-+ mtlo $at ;\
-+ .set at
-+#endif /* R4010 */
-+#endif /* R4102 */
-+#endif /* R4640 */
-+
-+#define Mult(dst, src1, src2) mul dst, src1, src2
-+#define MultU(dst, src1, src2) multu src1, src2 ; mflo dst
-+
-+#endif /* !3900 */
-+#endif /* DINO */
-+
-+
-+
-+
-+
-+
-+
-+
-+#endif /* _MIPS_ASM_H_ */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MiscUtil.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MiscUtil.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MiscUtil.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/MiscUtil.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,65 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * MiscUtil.h -- Miscellaneous utilities
-+ *
-+ * Description:
-+ *
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg Haixiang Liang
-+ *
-+ * $Revision: 1.4 $
-+ *
-+ * $Id: MiscUtil.h,v 1.4 2004/04/13 00:21:46 ilyas Exp $
-+ *
-+ * $Log: MiscUtil.h,v $
-+ * Revision 1.4 2004/04/13 00:21:46 ilyas
-+ * Added standard header for shared ADSL driver files
-+ *
-+ * Revision 1.3 2001/07/21 01:21:06 ilyas
-+ * Added more functions for int to string conversion used by log file
-+ *
-+ * Revision 1.2 1999/08/05 19:42:56 liang
-+ * Merged with the softmodem top of the tree on 08/04/99 for assembly files.
-+ *
-+ * Revision 1.1 1999/01/27 22:10:12 liang
-+ * Initial version.
-+ *
-+ * Revision 1.1 1997/07/10 01:18:45 mwg
-+ * Initial revision.
-+ *
-+ *
-+ *
-+ *****************************************************************************/
-+#ifndef _MISC_UTIL_H_
-+#define _MISC_UTIL_H_
-+
-+extern long SM_DECL GetRateValue(dataRateMap rate);
-+extern int SM_DECL DecToString(ulong value, uchar *dstPtr, uint nDigits);
-+extern int SM_DECL HexToString(ulong value, uchar *dstPtr, uint nDigits);
-+extern char * SM_DECL DecToStr(char *s, ulong num);
-+extern char * SM_DECL SignedToStr(char *s, long num);
-+extern char * SM_DECL HexToStr(char *s, ulong num);
-+
-+#define EvenParityBit(x) ((z = (y = x ^ (x >> 4)) ^ (y >> 2)) ^ (z >> 1))
-+#define OddParityBit(x) (EvenParityBit(x) ^ 1)
-+
-+extern void ParityApply(int nBytes, int nDataBits, int parity, uchar *srcPtr, uchar *dstPtr);
-+extern void ParityStrip(int nBytes, int nDataBits, int parity, uchar *srcPtr, uchar *dstPtr, statusHandlerType statusHandler);
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Que.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Que.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Que.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/Que.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,106 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * Que.h
-+ *
-+ * Description:
-+ * Definition and implementation (via macros and inline functions)
-+ * of a simple queue
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ *****************************************************************************/
-+
-+#ifndef QueHeader_H_
-+#define QueHeader_H_
-+
-+typedef void * _QueItem;
-+
-+typedef struct _QueHeader
-+ {
-+ _QueItem *head; /* first item in the queue */
-+ _QueItem *tail; /* last item in the queue */
-+ } QueHeader;
-+
-+/* Queue management macros */
-+
-+#define QueInit(pqHdr) (((QueHeader *)(pqHdr))->head = ((QueHeader *)(pqHdr))->tail = NULL)
-+#define QueEmpty(pqHdr) (NULL == ((QueHeader *)(pqHdr))->head)
-+
-+#define QueFirst(pqHdr) ((QueHeader *)(pqHdr))->head
-+#define QueLast(pqHdr) ((QueHeader *)(pqHdr))->tail
-+#define QueNext(pqItem) (*((void **)(pqItem)))
-+
-+
-+#define QueRemoveFirst(pqHdr) do { \
-+ if (!QueEmpty(pqHdr)) { \
-+ ((QueHeader *)(pqHdr))->head = *((QueHeader *)(pqHdr))->head; \
-+ if (QueEmpty(pqHdr)) \
-+ ((QueHeader *)(pqHdr))->tail = NULL; \
-+ } \
-+} while (0)
-+#define QueRemove(pqHdr) QueRemoveFirst(pqHdr)
-+
-+
-+#define QueAddLast(pqHdr,pqItem) do { \
-+ QueNext(pqItem) = NULL; \
-+ if (NULL != ((QueHeader *)(pqHdr))->tail) \
-+ *((QueHeader *)(pqHdr))->tail = (pqItem); \
-+ else \
-+ ((QueHeader *)(pqHdr))->head = (_QueItem *)(pqItem); \
-+ ((QueHeader *)(pqHdr))->tail = (_QueItem *)(pqItem); \
-+} while (0)
-+#define QueAdd(pqHdr,pItem) QueAddLast(pqHdr,pItem)
-+
-+#define QueAddFirst(pqHdr,pqItem) do { \
-+ if (NULL == ((QueHeader *)(pqHdr))->tail) \
-+ ((QueHeader *)(pqHdr))->tail = (_QueItem *)(pqItem); \
-+ QueNext(pqItem) = ((QueHeader *)(pqHdr))->head; \
-+ ((QueHeader *)(pqHdr))->head = (_QueItem *)(pqItem); \
-+} while (0)
-+
-+
-+#define QueGet(pqHdr) \
-+ (void *) QueFirst(pqHdr); \
-+ QueRemove(pqHdr);
-+
-+#define QueMerge(pqHdr1,pqHdr2) do { \
-+ if (NULL == ((QueHeader *)(pqHdr1))->tail) \
-+ ((QueHeader *)(pqHdr1))->head = ((QueHeader *)(pqHdr2))->head; \
-+ else \
-+ QueNext(((QueHeader *)(pqHdr1))->tail) = ((QueHeader *)(pqHdr2))->head; \
-+ if (NULL != ((QueHeader *)(pqHdr2))->tail) \
-+ ((QueHeader *)(pqHdr1))->tail = ((QueHeader *)(pqHdr2))->tail; \
-+} while (0)
-+
-+#define QueCopy(pqHdr1,pqHdr2) do { \
-+ ((QueHeader *)(pqHdr1))->head = ((QueHeader *)(pqHdr2))->head; \
-+ ((QueHeader *)(pqHdr1))->tail = ((QueHeader *)(pqHdr2))->tail; \
-+} while (0)
-+
-+#define QueForEach(pqHdr,f,ref) do { \
-+ _QueItem *p = ((QueHeader *)(pqHdr))->head; \
-+ \
-+ while (NULL != p) { \
-+ if ( (f)((void *)p, ref) ) break; \
-+ p = QueNext(p); \
-+ } \
-+} while (0)
-+
-+#endif /* QueHeader_H_ */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftAtmVc.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftAtmVc.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftAtmVc.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftAtmVc.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,569 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftAtmVc.h
-+ *
-+ * Description:
-+ * This file contains ATM VC definitions
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.27 $
-+ *
-+ * $Id: SoftAtmVc.h,v 1.27 2004/06/02 22:26:17 ilyas Exp $
-+ *
-+ * $Log: SoftAtmVc.h,v $
-+ * Revision 1.27 2004/06/02 22:26:17 ilyas
-+ * Added ATM counters for G.992.3
-+ *
-+ * Revision 1.26 2004/03/10 22:57:20 ilyas
-+ * Added I.432 scramling control
-+ *
-+ * Revision 1.25 2003/09/23 00:21:59 ilyas
-+ * Added status to indicate ATM header compression
-+ *
-+ * Revision 1.24 2003/08/27 02:00:50 ilyas
-+ * Original implementation of ATM header compression
-+ *
-+ * Revision 1.23 2003/02/25 04:13:15 ilyas
-+ * Added standard Broadcom header
-+ *
-+ * Revision 1.22 2003/01/10 23:25:48 ilyas
-+ * Added ATM status definition
-+ *
-+ * Revision 1.21 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.20 2002/04/02 09:58:00 ilyas
-+ * Initial implementatoin of BERT
-+ *
-+ * Revision 1.19 2001/10/09 22:35:14 ilyas
-+ * Added more ATM statistics and OAM support
-+ *
-+ * Revision 1.18 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.17 2001/02/23 05:49:57 ilyas
-+ * Added routed 1483 encapsulation
-+ *
-+ * Revision 1.16 2001/02/09 04:18:18 ilyas
-+ * Added framer for bridged ethernet PDUs
-+ *
-+ * Revision 1.15 2001/02/09 01:55:27 ilyas
-+ * Added status codes and macros to support printing of AAL packets
-+ *
-+ * Revision 1.14 2000/09/21 17:28:35 ilyas
-+ * Added VBR support to traffic management code, separated UBR to a different
-+ * Tx list, changed some of the algorithms
-+ *
-+ * Revision 1.13 2000/08/23 18:42:13 ilyas
-+ * Added AAL2, added VcConfigure functions, moved commonly used look-up
-+ * tables for CRC calculation to AtmLayer
-+ *
-+ * Revision 1.12 2000/08/02 03:06:22 ilyas
-+ * Added support for reserving space in RX packets for ATm protocols
-+ *
-+ * Revision 1.11 2000/07/28 17:23:39 ilyas
-+ * Added ATM connect/disconnect statuses
-+ *
-+ * Revision 1.10 2000/07/25 02:16:12 ilyas
-+ * Added EClip (with Eth to ATM ARP translation) implementation
-+ *
-+ * Revision 1.9 2000/07/23 20:57:14 ilyas
-+ * Added ATM framer and protocol layers
-+ *
-+ * Revision 1.8 2000/07/17 21:08:16 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.7 2000/06/09 18:33:04 liang
-+ * Fixed Irix compiler warnings.
-+ *
-+ * Revision 1.6 2000/05/18 21:47:31 ilyas
-+ * Added detection of preassigned cells such as OAM F4, F5
-+ *
-+ * Revision 1.5 2000/05/14 01:50:11 ilyas
-+ * Added more statuses to ATM code
-+ *
-+ * Revision 1.4 2000/05/10 02:41:28 liang
-+ * Added status report for no cell memory
-+ *
-+ * Revision 1.3 2000/05/09 23:00:27 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.2 2000/05/03 03:53:00 ilyas
-+ * Added support for pVc to vcID translation needed for LOG file and other
-+ * definitions for ATM data in LOG file
-+ *
-+ * Revision 1.1 2000/04/19 00:21:35 ilyas
-+ * Fixed some problems and added Out Of Band (OOB) support to ATM packets
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftAtmVcHeader
-+#define SoftAtmVcHeader
-+
-+/*
-+**
-+** ATM UNI types
-+**
-+*/
-+
-+#define AtmLinkFlags(bMap,name) (((bMap) >> name##Shift) & name##Mask)
-+
-+/* ATM service category types */
-+
-+#define kAtmSrvcCBR 1 /* Constant Bit Rate */
-+#define kAtmSrvcVBR 2 /* Variable Bit Rate */
-+#define kAtmSrvcUBR 4 /* Unspecified Bit Rate */
-+#define kAtmSrvcABR 8 /* Available Bit Rate */
-+#define kAtmSrvcUnknown 0xFF
-+
-+/* ATM AAL types (as encoded at UNI) */
-+
-+#define kAtmAalIE 0x58
-+
-+#define kAtmRaw 0
-+#define kAtmAal1 1
-+#define kAtmAal2 2
-+#define kAtmAal34 3
-+#define kAtmAal5 5
-+#define kAtmAalUser 16
-+#define kAtmAalUnknown 0xFF
-+
-+/* ATM AAL1 parameters */
-+
-+#define kAal1SubTypeId 0x85
-+
-+#define kAal1TransportShift 0
-+#define kAal1TransportMask 0x7
-+
-+#define kAal1NullTransport 0
-+#define kAal1VoiceTransport 1
-+#define kAal1CircuitTransport 2
-+#define kAal1AudioTransport 4
-+#define kAal1VideoTransport 5
-+
-+
-+#define kAal1CBRId 0x86
-+
-+#define kAal1CBRShift 24
-+#define kAal1CBRMask 0xFF
-+
-+#define kAal1CBR64 1
-+#define kAal1CBR1544 4 /* DS1 */
-+#define kAal1CBR6312 5 /* DS2 */
-+#define kAal1CBR32064 6
-+#define kAal1CBR44736 7 /* DS3 */
-+#define kAal1CBR97728 8
-+#define kAal1CBR2048 0x10 /* E1 */
-+#define kAal1CBR8448 0x11 /* E2 */
-+#define kAal1CBR34368 0x12 /* E3 */
-+#define kAal1CBR139264 0x13
-+#define kAal1CBR64xN 0x40
-+#define kAal1CBR8xN 0x41
-+
-+
-+#define kAal1MultiplierId 0x87
-+
-+#define kAal1ClockRecoveryId 0x88
-+
-+#define kAal1ClockRecoveryShift 3
-+#define kAal1ClockRecoveryMask 0x3
-+
-+#define kAal1ClockRecoveryNull 1 /* synchronous transport */
-+#define kAal1ClockRecoverySRTS 1 /* asynchronous transport */
-+#define kAal1ClockRecoveryAdaptive 2
-+
-+
-+#define kAal1ECMId 0x89 /* Error correction method */
-+
-+#define kAal1ECMShift (kAal1ClockRecoveryShift + 2)
-+#define kAal1ECMMask 0x3
-+
-+#define kAal1ECMNull 0
-+#define kAal1ECMLossSensitive 1
-+#define kAal1ECMDelaySensitive 2
-+
-+
-+#define kAal1SDTBlockSizeId 0x8A
-+
-+#define kAal1CellFillId 0x8B
-+
-+/* ATM AAL34 and AAL5 parameters */
-+
-+#define kAalFwdMaxSDUSizeId 0x8C
-+#define kAalBacMaxkSDUSizeId 0x81
-+
-+#define kAal34MidRangeId 0x82
-+
-+#define kAalSSCSTypeId 0x84
-+
-+#define kAalSSCSAssured 1
-+#define kAalSSCSNonAssured 2
-+#define kAalSSCSFrameRelay 4
-+
-+/* ATM AAL2 parameters */
-+
-+#define kAal2SSNone 0
-+#define kAal2SSSAR 1
-+#define kAal2SSTED 2
-+#define kAal2SSSARMask 3
-+#define kAal2SSType1 4
-+#define kAal2SSType3 5
-+
-+typedef struct {
-+ uchar aalType;
-+ union {
-+ struct {
-+ bitMap aal1Flags;
-+ ulong cbrRate;
-+ ushort blkSize;
-+ uchar sarUsed;
-+ } aal1Params;
-+ struct {
-+ ushort fwdMaxCpSize; /* Max "common part" packet size */
-+ ushort backMaxCpSize;
-+ ushort cidLow;
-+ ushort cidHigh;
-+ ushort fwdMaxSsSize; /* Max "service specific" packet size */
-+ ushort backMaxSsSize;
-+ uchar sscsType;
-+ } aal2Params;
-+ struct {
-+ ushort fwdMaxSDUSize;
-+ ushort backMaxSDUSize;
-+ ushort midLow;
-+ ushort midHigh;
-+ uchar sscsType;
-+ } aal34Params;
-+ struct {
-+ ushort fwdMaxSDUSize;
-+ ushort backMaxSDUSize;
-+ uchar sscsType;
-+ } aal5Params;
-+ } param;
-+} atmAalParams;
-+
-+/* ATM Traffic Descriptor types (as encoded at UNI) */
-+
-+#define kAtmTrafficIE 0x59
-+
-+#define kTrafficFwdPeakCellRateId0 0x82
-+#define kTrafficBackPeakCellRateId0 0x83
-+#define kTrafficFwdPeakCellRateId 0x84
-+#define kTrafficBackPeakCellRateId 0x85
-+
-+#define kTrafficFwdSustainCellRateId0 0x88
-+#define kTrafficBackSustainCellRateId0 0x89
-+#define kTrafficFwdSustainCellRateId 0x90
-+#define kTrafficBackSustainCellRateId 0x91
-+
-+#define kTrafficFwdMaxBurstSizeId0 0xA0
-+#define kTrafficBackMaxBurstSizeId0 0xA1
-+#define kTrafficFwdMaxBurstSizeId 0xB0
-+#define kTrafficBackMaxBurstSizeId 0xB1
-+
-+#define kTrafficBestEffortId 0xBE
-+#define kTrafficMgrOptionsId 0xBF
-+
-+#define kTrafficMaxTolerance 0x7FFFFFFF
-+
-+/* trafficFlags coding */
-+
-+#define kTrafficTagFwd 1
-+#define kTrafficTagBack 2
-+#define kTrafficBestEffort 4
-+
-+typedef struct {
-+ ulong tPCR0; /* CLP = 0, time between cells in us */
-+ ulong tPCR; /* CLP = 0+1 */
-+ ulong tolPCR; /* tolerance for PCR in us */
-+
-+ ulong tSCR0; /* CLP = 0 */
-+ ulong tSCR; /* CLP = 0+1 */
-+ ulong tolSCR; /* tolerance for SCR in us */
-+
-+ uchar atmServiceType; /* CBR, VBR, UBR, etc. */
-+ uchar trafficFlags;
-+} atmTrafficParams;
-+
-+/* ATM Broadband Bearer Capabilty (BBC) types (as encoded at UNI) */
-+
-+#define kAtmBBCIE 0x5E
-+
-+#define kBBCClassShift 0
-+#define kBBCClassMask 0x1F
-+
-+#define kBBCClassA 0x1
-+#define kBBCClassC 0x3
-+#define kBBCClassX 0x10
-+
-+
-+#define kBBCTrafficShift (kBBCClassShift + 5)
-+#define kBBCTrafficMask 0x7
-+
-+#define kBBCTrafficNull 0
-+#define kBBCTrafficCBR 1
-+#define kBBCTrafficVBR 2
-+
-+
-+#define kBBCTimingShift (kBBCTrafficShift + 3)
-+#define kBBCTimingMask 0x3
-+
-+#define kBBCTimingNull 0
-+#define kBBCTimingRequired 1
-+#define kBBCTimingNotRequired 2
-+
-+
-+#define kBBCClippingShift (kBBCTimingShift + 2)
-+#define kBBCClippingMask 0x3
-+
-+#define kBBCNoClipping 0
-+#define kBBCClippingOk 1
-+
-+#define kBBCConnectionShift (kBBCClippingShift + 2)
-+#define kBBCConnectionMask 0x3
-+
-+#define kBBCPoint2Point 0
-+#define kBBCPoint2MPoint 1
-+
-+/* ATM Broadband High/Low Layer Information (BHLI/BLLI) types (as encoded at UNI) */
-+
-+#define kAtmBHLIIE 0x5D
-+#define kAtmBLLIIE 0x5F
-+
-+/* ATM QoS types (as encoded at UNI) */
-+
-+#define kAtmQoSIE 0x5C
-+
-+#define kQoSNull 0
-+#define kQoSClass1 1
-+#define kQoSClass2 2
-+#define kQoSClass3 3
-+#define kQoSClass4 4
-+#define kQoSReserved 0xFF
-+
-+typedef struct {
-+ uchar fwdQoSClass;
-+ uchar backQoSClass;
-+} atmQoSParams;
-+
-+/* ATM MID definitions (ConfigureHandler) */
-+
-+#define kAtmMidEntireVc ((ulong) -1)
-+
-+typedef struct {
-+ void *pUserVc; /* VC id from the caller: has to be 1st !!! */
-+ ulong vci;
-+ uchar defaultCLP; /* default CLP for tx packets on this VC */
-+ uchar framerId;
-+ uchar protoId;
-+ uchar protoRxBytesReserved; /* # bytes reserved by protocol in the beginning of Rx packet */
-+ uchar protoTxBytesReserved; /* # bytes reserved by protocol in the beginning of Tx packet */
-+
-+ atmAalParams aalParams;
-+ atmTrafficParams rxTrafficParams;
-+ atmTrafficParams txTrafficParams;
-+ bitMap bbcFlags;
-+ atmQoSParams qosParams;
-+} atmVcParams;
-+
-+/*
-+**
-+** ATM Out of Band (OOB) packet information
-+**
-+*/
-+
-+typedef struct {
-+ Boolean clp; /* Cell Loss Prioroty */
-+ uchar aalType;
-+ union {
-+ struct {
-+ uchar payloadType;
-+ } aalRawParams;
-+ struct {
-+ uchar payloadType;
-+ ushort mid;
-+ } aal34Params;
-+ struct {
-+ uchar uui; /* Uses to user indicator */
-+ uchar cpi; /* common part indicator */
-+ } aal5Params;
-+ } aalParam;
-+} atmOobPacketInfo;
-+
-+/*
-+**
-+** ATM setup bit definition
-+**
-+*/
-+
-+#define kAtmCorrectHecErrors 1
-+#define kCorrectHecErrors kAtmCorrectHecErrors
-+#define kAtmPhyHeaderCompression 2
-+#define kAtmPhyNoDataScrambling 4
-+
-+#define kAtmTxIdleTimeoutMask 0x6
-+#define kAtmTxIdleNoTimeout 0
-+#define kAtmTxIdleTimeout10s 2
-+#define kAtmTxIdleTimeout30s 4
-+#define kAtmTxIdleTimeout60s 6
-+
-+/*
-+**
-+** ATM framer modes and protocol definitions
-+**
-+*/
-+
-+#define kAtmFramerNone 0
-+#define kAtmFramerISO 1
-+#define kAtmFramerIP 2
-+#define kAtmFramerEth 3
-+#define kAtmFramerEthWithCRC 4
-+
-+#define kAtmProtoNone 0
-+#define kAtmProtoEClip 1
-+#define kAtmProtoERouted1483 2
-+#define kAtmProtoPPP 3
-+
-+
-+/*
-+**
-+** ATM status codes
-+**
-+*/
-+
-+typedef void (*atmStatusHandler) (void *gDslVars, ulong statusCode, ...);
-+
-+/* physical layer I.432 */
-+
-+#define kAtmStatRxHunt 1
-+#define kAtmStatRxPreSync 2
-+#define kAtmStatRxSync 3
-+#define kAtmStatRxPlOamCell 4
-+#define kAtmStatBertResult 5
-+#define kAtmStatHec 6
-+#define kAtmStatHdrCompr 7
-+#define kAtmStatCounters 8
-+
-+/* ATM layer */
-+
-+#define kAtmLayerStatFirst 100
-+#define kAtmStatRxDiscarded 100
-+#define kAtmStatTxDelayed 101
-+
-+#define kAtmStatVcCreated 102
-+#define kAtmStatVcStarted 103
-+#define kAtmStatVcStopped 104
-+#define kAtmStatVcDeleted 105
-+
-+#define kAtmStatTimeout 106
-+#define kAtmStatNoCellMemory 107
-+#define kAtmStatPrintCell 108
-+#define kAtmStatInvalidCell 109
-+#define kAtmStatUnassignedCell 110
-+#define kAtmStatOamF4SegmentCell 111
-+#define kAtmStatOamF4End2EndCell 112
-+#define kAtmStatOamI371Cell 113
-+#define kAtmStatOamF5SegmentCell 114
-+#define kAtmStatOamF5End2EndCell 115
-+#define kAtmStatReservedCell 116
-+
-+#define kAtmStatConnected 117
-+#define kAtmStatDisconnected 118
-+
-+#define kAtmStatRxPacket 119
-+#define kAtmStatTxPacket 120
-+
-+#define kAtmStatOamLoopback 121
-+
-+
-+typedef struct _atmPhyCounters {
-+ ushort id;
-+ ushort bertStatus;
-+ ulong bertCellTotal;
-+ ulong bertCellCnt;
-+ ulong bertBitErrors;
-+
-+ ulong rxHecCnt;
-+ ulong rxCellTotal;
-+ ulong rxCellData;
-+ ulong rxCellDrop;
-+} atmPhyCounters;
-+
-+/* AAL layer */
-+
-+
-+
-+/*
-+**
-+** ATM log file definitions
-+**
-+*/
-+
-+/* ATM log file flags */
-+
-+#define kAtmLogFrameFlagMask 3 /* mask */
-+
-+#define kAtmLogFrameFlagNone 0 /* nothing */
-+#define kAtmLogFrameFlagNoData 1 /* no data only frame size */
-+#define kAtmLogFrameFlagBinData 2 /* data in binary form */
-+#define kAtmLogFrameFlagTextData 3 /* data in text form */
-+
-+#define kAtmLogSendFrameShift 0
-+#define kAtmLogSendFrameNoData (kAtmLogFrameFlagNoData << kAtmLogSendFrameShift)
-+#define kAtmLogSendFrameBinData (kAtmLogFrameFlagBinData << kAtmLogSendFrameShift)
-+#define kAtmLogSendFrameTextData (kAtmLogFrameFlagTextData << kAtmLogSendFrameShift)
-+
-+#define kAtmLogRcvFrameShift 2
-+#define kAtmLogRcvFrameNone (kAtmLogFrameFlagNone << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameNoData (kAtmLogFrameFlagNoData << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameBinData (kAtmLogFrameFlagBinData << kAtmLogRcvFrameShift)
-+#define kAtmLogRcvFrameTextData (kAtmLogFrameFlagTextData << kAtmLogRcvFrameShift)
-+
-+#define kAtmLogSendCompleteFrameShift 4
-+#define kAtmLogSendCompleteFrameNone (kAtmLogFrameFlagNone << kAtmLogSendCompleteFrameShift)
-+#define kAtmLogSendCompleteFrameNoData (kAtmLogFrameFlagNoData << kAtmLogSendCompleteFrameShift)
-+
-+#define kAtmLogReturnFrameShift 6
-+#define kAtmLogReturnFrameNoData (kAtmLogFrameFlagNoData << kAtmLogReturnFrameShift)
-+
-+#define kAtmLogCellFlag (1 << 8)
-+
-+/* ATM log codes */
-+
-+#define kAtmLogSendFrame 1
-+#define kAtmLogRcvFrame 2
-+#define kAtmLogSendFrameComplete 3
-+#define kAtmLogReturnFrame 4
-+#define kAtmLogVcAllocate 5
-+#define kAtmLogVcFree 6
-+#define kAtmLogVcActivate 7
-+#define kAtmLogVcDeactivate 8
-+#define kAtmLogTimer 9
-+#define kAtmLogCell 10
-+#define kAtmLogVcConfigure 11
-+
-+#define kAtmLogRxCellHeader 12
-+#define kAtmLogRxCellData 13
-+#define kAtmLogTxCell 14
-+
-+#endif /* SoftAtmVcHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.gh linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.gh
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.gh 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.gh 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,675 @@
-+/****************************************************************************
-+ *
-+ * SoftDsl.gh
-+ *
-+ * Description:
-+ * This is a header file which defines the type for the DSL
-+ * global variable structure.
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.72 $
-+ *
-+ * $Id: SoftDsl.gh,v 1.72 2004/04/30 23:05:19 kdu Exp $
-+ *
-+ * $Log: SoftDsl.gh,v $
-+ * Revision 1.72 2004/04/30 23:05:19 kdu
-+ * Fixed interop issues in TDC lab for TMM.
-+ *
-+ * Revision 1.70 2004/04/10 23:30:48 ilyas
-+ * Defined gloval structure for slow (SDRAM) data
-+ *
-+ * Revision 1.69 2004/04/02 18:33:45 gsyu
-+ * Share MuxFramer buffers with scratch memory
-+ *
-+ * Revision 1.68 2004/02/04 20:12:38 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.67 2004/02/03 19:10:37 gsyu
-+ * Added separated carrierInfo structures for G992P5
-+ *
-+ * Revision 1.66 2004/01/26 04:21:06 yongbing
-+ * Merge changes in ADSL2 branch into Annex A branch
-+ *
-+ * Revision 1.65 2004/01/13 19:12:07 gsyu
-+ * Added two more variables for Double upstream
-+ *
-+ * Revision 1.64 2003/12/04 02:10:37 linyin
-+ * Add a variable for FbmsOL mode
-+ *
-+ * Revision 1.63 2003/11/20 00:57:50 yongbing
-+ * Merge ADSL2 functionalities into Annex A branch
-+ *
-+ * Revision 1.62 2003/11/05 01:59:12 liang
-+ * Add vendor ID code for Infineon.
-+ *
-+ * Revision 1.61 2003/08/12 22:59:41 khp
-+ * - for Haixiang: added support for ADSL_MARGIN_TWEAK_TEST
-+ *
-+ * Revision 1.60 2003/08/01 00:08:19 liang
-+ * Added firmware ID for Samsung ADI 930 DSLAM.
-+ *
-+ * Revision 1.59 2003/07/14 14:40:08 khp
-+ * - AnnexB: added bad SNR2 retrain counter to connectin setup
-+ *
-+ * Revision 1.58 2003/06/25 02:40:22 liang
-+ * Added firmware ID for Annex A UE9000 ADI918 (from Aliant, Canada).
-+ *
-+ * Revision 1.57 2003/06/25 00:00:40 ilyas
-+ * -added firmware IDs for TI 4000C and AC5 (Annex B)
-+ *
-+ * Revision 1.56 2003/05/31 01:50:38 khp
-+ * -add firmware IDs for ECI16 and ECI16A
-+ *
-+ * Revision 1.55 2003/03/27 19:30:52 liang
-+ * Add and initialize new connectionSetup field coVendorFirmwareID under module ADSL_IDENTIFY_VENDOR_FIRMWARE.
-+ *
-+ * Revision 1.54 2002/12/13 18:35:48 yongbing
-+ * Add support for G.992.2 Annex C in start up
-+ *
-+ * Revision 1.53 2002/12/06 02:06:33 liang
-+ * Moved the T1.413 RAck1/RAck2 switching variables to connection setup structure.
-+ *
-+ * Revision 1.52 2002/11/26 02:49:46 liang
-+ * Added variable codingGainDecrement to the connectionSetup structure to solve the C-Rates-RA option failure problem.
-+ *
-+ * Revision 1.51 2002/10/20 18:56:16 khp
-+ * - for linyin:
-+ * - #ifdef NEC_NSIF_WORKAROUND:
-+ * - add status and fail counter for NSIF
-+ *
-+ * Revision 1.50 2002/09/28 02:36:50 yongbing
-+ * Add retrain in T1.413 with R-Ack1 tone
-+ *
-+ * Revision 1.49 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.48 2002/07/19 01:51:35 liang
-+ * Added vendor ID constant for Alcatel.
-+ *
-+ * Revision 1.47 2002/06/27 21:51:08 liang
-+ * Added xmt and rcv tone selection bitmap in connection setup.
-+ *
-+ * Revision 1.46 2002/06/11 20:48:06 liang
-+ * Added CO vendor ID field to connectionSetup structure.
-+ *
-+ * Revision 1.45 2002/06/06 03:05:43 khp
-+ * -use boolean in connectup setup instead of localCapabilities.features to indicate FBM mode
-+ *
-+ * Revision 1.44 2002/03/22 19:38:58 yongbing
-+ * Modify for co-exist of G994P1 and T1P413
-+ *
-+ * Revision 1.43 2002/03/02 00:52:40 ilyas
-+ * AnnexC delay needs to be long for prototype
-+ *
-+ * Revision 1.42 2002/01/19 23:59:17 ilyas
-+ * Added support for LOG and eye data to ADSL core target
-+ *
-+ * Revision 1.41 2002/01/16 19:03:59 ilyas
-+ * Added HOST_ONLY ifdefs around ADSL core data
-+ *
-+ * Revision 1.40 2002/01/14 17:41:04 liang
-+ * Move xmt & rcv sample buffers to top level.
-+ *
-+ * Revision 1.39 2001/12/21 22:45:34 ilyas
-+ * Added support for ADSL MIB data object
-+ *
-+ * Revision 1.38 2001/12/13 02:24:22 ilyas
-+ * Added G997 (Clear EOC and G997 framer) support
-+ *
-+ * Revision 1.37 2001/11/30 05:56:31 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.36 2001/10/19 00:12:07 ilyas
-+ * Added support for frame oriented (no ATM) data link layer
-+ *
-+ * Revision 1.29.2.5 2001/10/03 01:44:00 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.29.2.4 2001/08/18 00:00:36 georgep
-+ * Add variable to store annexC pathDelay
-+ *
-+ * Revision 1.29.2.3 2001/08/08 17:33:27 yongbing
-+ * Merge with tag SoftDsl_2_17
-+ *
-+ * Revision 1.35 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.34 2001/08/28 03:26:32 ilyas
-+ * Added support for running host and adsl core parts separately ("dual" mode)
-+ *
-+ * Revision 1.33 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.32 2001/05/18 21:21:44 liang
-+ * Save the current number of rcv samples to line handler for QProc test.
-+ *
-+ * Revision 1.31 2001/04/25 01:20:11 ilyas
-+ *
-+ * Don't use DSL frame functions if ATM_LAYER is not defined
-+ *
-+ * Revision 1.30 2001/03/25 06:11:20 liang
-+ * Combined separate loop attenuation status for ATUR & ATUC into one status.
-+ * Replace separate hardware AGC info status for ATUR & ATUC into hardware AGC
-+ * request status and hardware AGC obtained status.
-+ * Use store AGC command to save hardware AGC value instead of returning value
-+ * from status report.
-+ *
-+ * Revision 1.29 2001/03/17 03:00:46 georgep
-+ * Added agcInfo to connectionSetupStruct
-+ *
-+ * Revision 1.28 2001/02/10 03:03:09 ilyas
-+ * Added one more DslFrame function
-+ *
-+ * Revision 1.27 2000/08/31 19:04:24 liang
-+ * Added scratch buffer structure definition.
-+ *
-+ * Revision 1.26 2000/07/23 20:52:52 ilyas
-+ * Added xxxFrameBufSetAddress() function for ATM framer layers
-+ * Rearranged linkLayer functions in one structure which is passed as a
-+ * parameter to xxxLinkLayerInit() function to be set there
-+ *
-+ * Revision 1.25 2000/07/18 21:42:25 ilyas
-+ * Fixed compiler warning about pointer casting
-+ *
-+ * Revision 1.24 2000/07/18 21:18:45 ilyas
-+ * Added GLOBAL_PTR_BIAS feature to utilize full 64K MIPS relative addressing space
-+ *
-+ * Revision 1.23 2000/07/18 20:03:24 ilyas
-+ * Changed DslFrame functions definitions to macros,
-+ * Removed gDslVars from their parameter list
-+ *
-+ * Revision 1.22 2000/07/17 21:08:15 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.21 2000/05/09 23:00:26 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.20 2000/05/03 03:57:04 ilyas
-+ * Added LOG file support for writing ATM data
-+ *
-+ * Revision 1.19 2000/04/19 00:31:47 ilyas
-+ * Added global SoftDsl functions for Vc, added OOB info functions
-+ *
-+ * Revision 1.18 2000/04/13 08:36:22 yura
-+ * Added SoftDslSetRefData, SoftDslGetRefData functions
-+ *
-+ * Revision 1.17 2000/04/13 05:38:54 georgep
-+ * Added T1p413 "Activation and Acknowledgement" which can substitute G994P1
-+ *
-+ * Revision 1.16 2000/04/05 22:30:42 liang
-+ * Changed function & constant names from G992p2 to G992 for the Main module.
-+ *
-+ * Revision 1.15 2000/04/04 04:16:06 liang
-+ * Merged with SoftDsl_0_03 from old tree.
-+ *
-+ * Revision 1.15 2000/04/04 01:47:21 ilyas
-+ * Implemented abstract dslFrame and dslFrameBuffer objects
-+ *
-+ * Revision 1.14 2000/04/01 02:53:33 georgep
-+ * Added pointer to G992p2Profile inside connectionSetup
-+ *
-+ * Revision 1.13 2000/03/18 01:27:56 georgep
-+ * Changed connectionSetup to include G992p1 Capabilities
-+ *
-+ * Revision 1.12 2000/02/29 01:39:05 georgep
-+ * put variable haveRemoteCapabilities inside connectionSetupStruct
-+ *
-+ * Revision 1.11 2000/02/08 00:44:36 liang
-+ * Fix the gDslVars definition for Irix environment.
-+ *
-+ * Revision 1.10 1999/11/19 00:59:29 george
-+ * Define physicalLayerVars as a union
-+ *
-+ * Revision 1.9 1999/11/11 19:19:42 george
-+ * Porting to 16Bit Compiler
-+ *
-+ * Revision 1.8 1999/11/09 20:26:17 george
-+ * Added G992P2_PROFILE to modules list
-+ *
-+ * Revision 1.7 1999/10/27 23:01:54 wan
-+ * Add G.994.1 setup in dslConnectionSetupStruct for setting up Initiation side
-+ *
-+ * Revision 1.6 1999/08/12 21:16:27 george
-+ * Move profileVars definition to G992p2/G992p2Profile.gh
-+ *
-+ * Revision 1.5 1999/08/10 18:20:43 george
-+ * Define fastRetrainVars
-+ *
-+ * Revision 1.4 1999/07/16 02:03:02 liang
-+ * Added Tx & Rx data handler function pointers.
-+ *
-+ * Revision 1.3 1999/07/03 01:40:15 liang
-+ * Redefined dsl command parameter list and added connection setup struct.
-+ *
-+ * Revision 1.2 1999/02/10 01:56:37 liang
-+ * Added hooks for G994.1 and G992.2.
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftDslGlobals
-+#define SoftDslGlobals
-+
-+#include "SoftDsl.h"
-+
-+#ifdef G992P2_PROFILE
-+#include "G992p2Profile.gh"
-+#endif
-+
-+typedef enum
-+ {
-+ kVendorUnknown = 0,
-+ kVendorBroadcom,
-+ kVendorGlobespan,
-+ kVendorADI,
-+ kVendorTI,
-+ kVendorCentillium,
-+ kVendorAlcatel,
-+ kVendorInfineon
-+ } VendorIDType;
-+
-+#define kDslVendorFirwareUnknown 0
-+typedef enum
-+ {
-+ kVendorADI_Anaconda = 1,
-+ kVendorADI_ECI918,
-+ kVendorADI_ECI930,
-+ kVendorADI_Cisco,
-+ kVendorADI_UE9000_918,
-+ kVendorADI_Samsung_930,
-+ kVendorTI_4000C_ERICSSON_350,
-+ kVendorTI_4000C_SEIMENS,
-+ kVendorADI_ECI16_AnnexB = 50, /* leave space for more Annex A types */
-+ kVendorADI_ECI16A_AnnexB,
-+ kVendorTI_4000C_AnnexB,
-+ kVendorTI_AC5_AnnexB
-+ } VendorFirmwareIDType;
-+
-+#define kDslXmtToneSelectionStartTone 0
-+#ifdef G992P1_ANNEX_B
-+#define kDslXmtToneSelectionEndTone 63
-+#else
-+#define kDslXmtToneSelectionEndTone 31
-+#endif
-+#define kDslXmtToneSelectionNumOfTones (kDslXmtToneSelectionEndTone-kDslXmtToneSelectionStartTone+1)
-+#define kDslXmtToneSelectionNumOfBytes ((kDslXmtToneSelectionNumOfTones+7)/8)
-+#define kDslRcvToneSelectionStartTone 32
-+#define kDslRcvToneSelectionEndTone 255
-+#define kDslRcvToneSelectionNumOfTones (kDslRcvToneSelectionEndTone-kDslRcvToneSelectionStartTone+1)
-+#define kDslRcvToneSelectionNumOfBytes ((kDslRcvToneSelectionNumOfTones+7)/8)
-+
-+#define kDslT1p413RAckModeTryRAck1 0x01
-+#define kDslT1p413RAckModeTryRAck2 0x02
-+#define kDslT1p413RAckModeTrialMask 0x0F
-+#define kDslT1p413RAckModeSelected 0x10
-+#define kDslT1p413RAckModeTrialCount 10 /* when in trial mode */
-+#define kDslT1p413RAckModeSwitchCount 20 /* when mode is selected */
-+
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+#define kDslMarginTweakNumOfTones 256
-+#endif
-+
-+typedef struct
-+ {
-+ Boolean haveRemoteCapabilities;
-+ dslModulationType selectedModulation;
-+ dslModulationType startupModulation;
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+ ushort downstreamMinCarr, downstreamMaxCarr;
-+#else
-+ uchar downstreamMinCarr, downstreamMaxCarr;
-+#endif
-+ uchar upstreamMinCarr, upstreamMaxCarr;
-+#if defined(DOUBLE_UP_STREAM)
-+ Boolean isDoubleUsEnabled;
-+ short selectedPilotTone;
-+#endif
-+ dslDataPumpCapabilities localCapabilities, remoteCapabilities;
-+#ifdef G992P3
-+ g992p3DataPumpCapabilities localCarrierInfoG992p3AnnexA;
-+ g992p3DataPumpCapabilities remoteCarrierInfoG992p3AnnexA;
-+ g992p3DataPumpCapabilities selectedCarrierInfoG992p3AnnexA;
-+ uchar xmtG992p3State;
-+#ifdef G992P5
-+ g992p3DataPumpCapabilities localCarrierInfoG992p5AnnexA;
-+ g992p3DataPumpCapabilities remoteCarrierInfoG992p5AnnexA;
-+ g992p3DataPumpCapabilities selectedCarrierInfoG992p5AnnexA;
-+#endif /* G992P5 */
-+#endif /* G992P3 */
-+ uchar handshakingDuplexMode;
-+ Boolean handshakingClientInitiation;
-+ short handshakingXmtPowerLevel;
-+ uchar handshakingXmtCarrierSet;
-+ short hwAgcQ4dB; /* for loop attenuation calculation */
-+ uchar coVendorID;
-+#ifdef ADSL_IDENTIFY_VENDOR_FIRMWARE
-+ uchar coVendorFirmwareID;
-+#endif
-+ uchar codingGainDecrement; /* coding gain decrement in Q4dB for initial rate calculation */
-+ uchar xmtToneSelection[kDslXmtToneSelectionNumOfBytes];
-+ uchar rcvToneSelection[kDslRcvToneSelectionNumOfBytes];
-+#ifdef G992_ANNEXC
-+ Boolean isFbmMode;
-+ Boolean isFbmsOLMode;
-+ long xmtToRcvPathDelay;
-+#endif
-+#if defined(T1P413) && defined(XMT_RACT2_FOR_ADI_COMPATIBILITY)
-+ uchar t1p413RAckModeUsed;
-+ uchar t1p413RAckModeCounter;
-+#endif
-+#ifdef G992P1_ANNEX_B
-+ uchar badSNR2RetrainCounter;
-+#endif
-+#ifdef ADSL_MARGIN_TWEAK_TEST
-+ short marginTweakExtraPowerQ4dB;
-+ char marginTweakTableQ4dB[kDslMarginTweakNumOfTones];
-+#endif
-+#ifdef G992P2_PROFILE
-+ G992p2ProfileVarsStruct* profileVarsPtr;
-+#endif
-+#ifdef TDC_IOP_FIX_SEIMENS_TI
-+ char t1p413RetrainCounter; /* 0: no retrain needed; 1: force to T1.413 mode and retrain after R-MSG1; 2: 2nd T1.413 session, go to showtime */
-+#endif
-+#ifdef ANSI_CACT12_PING_PONG
-+ char t1p413SkipToneIndex; /* to alternate between CAct1 and CAct2 detection */
-+#endif
-+ } dslConnectionSetupStruct;
-+
-+#ifdef ADSL_FRAMER
-+#include "MuxFramer.gh"
-+#endif
-+
-+#ifdef ATM
-+#include "SoftAtm.gh"
-+#endif
-+
-+#ifdef DSL_PACKET
-+#include "DslPacket.gh"
-+#endif
-+
-+#ifdef G997_1_FRAMER
-+#include "G997.gh"
-+#ifdef G992P3
-+#include "G992p3OvhMsg.gh"
-+#endif
-+#endif
-+
-+#ifdef ADSL_MIB
-+#include "AdslMib.gh"
-+#endif
-+
-+#ifndef HOST_ONLY
-+#ifdef T1P413
-+#include "T1p413Main.gh"
-+#endif
-+
-+#ifdef G994P1
-+#include "G994p1Main.gh"
-+#endif
-+
-+#ifdef G992
-+#include "G992Main.gh"
-+#endif
-+
-+#include "SoftDslSampleBuffers.gh"
-+#endif
-+
-+typedef struct __dslSlowVarsStruct
-+ {
-+ int tmp;
-+ }
-+ dslSlowVarsStruct;
-+
-+typedef struct __dslVarsStruct
-+ {
-+ bitMap setup;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+ dslDriverCallbackType driverCallback;
-+
-+ rcvHandlerType rcvHandlerPtr;
-+ xmtHandlerType xmtHandlerPtr;
-+
-+#ifndef ADSLCORE_ONLY
-+ dslCommandHandlerType adslCoreCommandHandlerPtr;
-+#endif
-+ dslCommandHandlerType dataPumpCommandHandlerPtr;
-+
-+ dslStatusHandlerType internalStatusHandlerPtr;
-+ dslStatusHandlerType externalStatusHandlerPtr;
-+#ifndef ADSLCORE_ONLY
-+ dslStatusHandlerType externalLinkLayerStatusHandlerPtr;
-+#endif
-+
-+ dslDirectionType direction;
-+ dslConnectionSetupStruct connectionSetup;
-+
-+#ifdef NEC_NSIF_WORKAROUND
-+ uchar G994NsStatus;
-+ uchar G994NsFailCounter;
-+#endif
-+
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+
-+ linkLayerFunctions LinkLayerFunctions;
-+ dslSlowVarsStruct *dslSlowVars;
-+
-+#ifdef DSL_FRAME_FUNCTIONS
-+ dslFrameFunctions DslFrameFunctions;
-+#endif
-+ ulong refData;
-+ ulong execTime;
-+ int currRcvNSamps;
-+
-+#ifndef HOST_ONLY
-+ DslSampleBuffersStruct sampleBuffersVars;
-+
-+#ifdef G992P2_PROFILE
-+ G992p2ProfileVarsStruct G992p2ProfileVars;
-+#endif
-+
-+#ifdef ADSL_FRAMER
-+ muxFramerVarsStruct muxFramerVars;
-+#endif
-+#endif /* HOST_ONLY */
-+
-+#ifdef DSL_LINKLAYER
-+ union
-+ {
-+#ifdef ATM
-+ atmVarsStruct atmVars;
-+#endif
-+#ifdef DSL_PACKET
-+ dslPacketVarsStruct dslPacketVars;
-+#endif
-+ } linkLayerVars;
-+#endif
-+
-+#ifdef G997_1_FRAMER
-+ g997VarsStruct G997Vars;
-+#ifdef G992P3
-+ g992p3OvhMsgVarsStruct G992p3OvhMsgVars;
-+#endif
-+#endif
-+
-+#ifdef ADSL_MIB
-+ adslMibVarsStruct adslMibVars;
-+#endif
-+
-+#ifndef HOST_ONLY
-+ union
-+ {
-+#ifdef T1P413
-+ T1p413VarsStruct T1p413Vars;
-+#endif
-+#ifdef G994P1
-+ G994p1VarsStruct G994p1Vars;
-+#endif
-+#ifdef G992
-+ G992VarsStruct G992Vars;
-+#endif
-+ } physicalLayerVars;
-+ union
-+ {
-+#ifdef G992
-+ G992ScratchVarsStruct G992ScratchVars;
-+#endif
-+#if defined(ADSL_FRAMER) && defined(SHARE_MUX_FRAMER_VARS)
-+ muxFramerSharedVarsStruct muxFramerSharedVars;
-+#endif
-+ } scratchVars;
-+#endif /* HOST_ONLY */
-+
-+ }
-+ dslVarsStruct;
-+
-+#ifndef GLOBAL_PTR_BIAS
-+#define gDslGlobalVarPtr ((struct __dslVarsStruct *)gDslVars)
-+#define gDslGlobalSlowVarPtr (gDslGlobalVarPtr->dslSlowVars)
-+#else
-+#define gDslGlobalVarPtr ((struct __dslVarsStruct *) (void*)((uchar*)(gDslVars) - GLOBAL_PTR_BIAS))
-+#define gDslGlobalSlowVarPtr ((struct __dslSlowVarsStruct *) (void*)((uchar*)(gDslGlobalVarPtr->dslSlowVars) - GLOBAL_PTR_BIAS))
-+#endif
-+
-+#define gDslSampleBuffersVars (gDslGlobalVarPtr->sampleBuffersVars)
-+
-+#define gDslMuxFramerVars (gDslGlobalVarPtr->muxFramerVars)
-+#define gDslMuxFramerSharedVars (gDslGlobalVarPtr->scratchVars.muxFramerSharedVars)
-+#define gDslLinkLayerVars (gDslGlobalVarPtr->linkLayerVars)
-+#define gDslAtmVars (gDslGlobalVarPtr->linkLayerVars.atmVars)
-+#define gDslPacketVars (gDslGlobalVarPtr->linkLayerVars.dslPacketVars)
-+#define gG997Vars (gDslGlobalVarPtr->G997Vars)
-+
-+#ifdef G992P3
-+#define gG992p3OvhMsgVars (gDslGlobalVarPtr->G992p3OvhMsgVars)
-+#endif
-+
-+#define gAdslMibVars (gDslGlobalVarPtr->adslMibVars)
-+
-+#define gT1p413Vars (gDslGlobalVarPtr->physicalLayerVars.T1p413Vars)
-+#define gG994p1Vars (gDslGlobalVarPtr->physicalLayerVars.G994p1Vars)
-+#define gG992Vars (gDslGlobalVarPtr->physicalLayerVars.G992Vars)
-+#define gG992p2ProfileVars (gDslGlobalVarPtr->G992p2ProfileVars)
-+
-+#define gG992ScratchVars (gDslGlobalVarPtr->scratchVars.G992ScratchVars)
-+
-+#ifndef gEyeHandlerPtr
-+#define gEyeHandlerPtr (gDslGlobalVarPtr->eyeHandlerPtr)
-+#endif
-+
-+#ifndef gLogHandlerPtr
-+#define gLogHandlerPtr (gDslGlobalVarPtr->logHandlerPtr)
-+#endif
-+
-+#ifdef VP_SIMULATOR
-+#define gDriverCallback(x) (gDslGlobalVarPtr->driverCallback)(x)
-+#else
-+#define gDriverCallback(x)
-+#endif
-+
-+/*
-+**
-+** Frame functions callouts
-+**
-+*/
-+
-+#define gDslFrameFunc (gDslGlobalVarPtr->DslFrameFunctions)
-+
-+#define DslFrameBufferGetLength(gDslVars, fb) \
-+ gDslFrameFunc.__DslFrameBufferGetLength(fb)
-+
-+#define DslFrameBufferGetAddress(gDslVars, fb) \
-+ gDslFrameFunc.__DslFrameBufferGetAddress(fb)
-+
-+#define DslFrameBufferSetLength(gDslVars, fb, l) \
-+ gDslFrameFunc.__DslFrameBufferSetLength(fb, l)
-+
-+#define DslFrameBufferSetAddress(gDslVars, fb, p) \
-+ gDslFrameFunc.__DslFrameBufferSetAddress(fb, p)
-+
-+#define DslFrameInit(gDslVars, f) \
-+ gDslFrameFunc.__DslFrameInit(f)
-+
-+#define DslFrameGetLength(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetLength(pFrame)
-+
-+#define DslFrameGetBufCnt(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetBufCnt(pFrame)
-+
-+#define DslFrameGetFirstBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetFirstBuffer(pFrame)
-+
-+#define DslFrameGetNextBuffer(gDslVars, pFrBuffer) \
-+ gDslFrameFunc.__DslFrameGetNextBuffer(pFrBuffer)
-+
-+#define DslFrameSetNextBuffer(gDslVars, pFrBuf, pFrBufNext) \
-+ gDslFrameFunc.__DslFrameSetNextBuffer(pFrBuf, pFrBufNext)
-+
-+#define DslFrameGetLastBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameGetLastBuffer(pFrame)
-+
-+#define DslFrameGetLinkFieldAddress(gDslVars, f) \
-+ gDslFrameFunc.__DslFrameGetLinkFieldAddress(f)
-+
-+#define DslFrameGetFrameAddressFromLink(gDslVars, lnk) \
-+ gDslFrameFunc.__DslFrameGetFrameAddressFromLink(lnk)
-+
-+
-+#define DslFrameGetOobInfo(gDslVars, f, pOobInfo) \
-+ gDslFrameFunc.__DslFrameGetOobInfo(f, pOobInfo)
-+
-+#define DslFrameSetOobInfo(gDslVars, f, pOobInfo) \
-+ gDslFrameFunc.__DslFrameSetOobInfo(f, pOobInfo)
-+
-+
-+#define DslFrameEnqueBufferAtBack(gDslVars, f, b) \
-+ gDslFrameFunc.__DslFrameEnqueBufferAtBack(f, b)
-+
-+#define DslFrameEnqueFrameAtBack(gDslVars, fMain, f) \
-+ gDslFrameFunc.__DslFrameEnqueFrameAtBack(fMain, f)
-+
-+#define DslFrameEnqueBufferAtFront(gDslVars, f, b) \
-+ gDslFrameFunc.__DslFrameEnqueBufferAtFront(f, b)
-+
-+#define DslFrameEnqueFrameAtFront(gDslVars, fMain, f) \
-+ gDslFrameFunc.__DslFrameEnqueFrameAtFront(fMain, f)
-+
-+#define DslFrameDequeBuffer(gDslVars, pFrame) \
-+ gDslFrameFunc.__DslFrameDequeBuffer(pFrame)
-+
-+#define DslFrameAllocMemForFrames(gDslVars, frameNum) \
-+ gDslFrameFunc.__DslFrameAllocMemForFrames(frameNum)
-+
-+#define DslFrameFreeMemForFrames(gDslVars, hMem) \
-+ gDslFrameFunc.__DslFrameFreeMemForFrames(hMem)
-+
-+#define DslFrameAllocFrame(gDslVars, handle) \
-+ gDslFrameFunc.__DslFrameAllocFrame(handle)
-+
-+#define DslFrameFreeFrame(gDslVars, handle, pFrame) \
-+ gDslFrameFunc.__DslFrameFreeFrame(handle, pFrame)
-+
-+#define DslFrameAllocMemForBuffers(gDslVars, ppMemPool, bufNum, memSize) \
-+ gDslFrameFunc.__DslFrameAllocMemForBuffers(ppMemPool, bufNum, memSize)
-+
-+#define DslFrameFreeMemForBuffers(gDslVars, hMem, memSize, pMemPool) \
-+ gDslFrameFunc.__DslFrameFreeMemForBuffers(hMem, memSize, pMemPool)
-+
-+#define DslFrameAllocBuffer(gDslVars, handle, pMem, length) \
-+ gDslFrameFunc.__DslFrameAllocBuffer(handle, pMem, length)
-+
-+#define DslFrameFreeBuffer(gDslVars, handle, pBuf) \
-+ gDslFrameFunc.__DslFrameFreeBuffer(handle, pBuf)
-+
-+#define DslFrame2Id(gDslVars, handle, pFrame) \
-+ gDslFrameFunc.__DslFrame2Id(handle, pFrame)
-+
-+#define DslFrameId2Frame(gDslVars, handle, frameId) \
-+ gDslFrameFunc.__DslFrameId2Frame (handle, frameId)
-+
-+
-+#endif /* SoftDslGlobals */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftDsl.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,2920 @@
-+/****************************************************************************
-+ *
-+ * SoftDsl.h
-+ *
-+ *
-+ * Description:
-+ * This file contains the exported interface for SoftDsl.c
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.275 $
-+ *
-+ * $Id: SoftDsl.h,v 1.275 2005/04/28 22:55:36 ilyas Exp $
-+ *
-+ * $Log: SoftDsl.h,v $
-+ * Revision 1.275 2005/04/28 22:55:36 ilyas
-+ * Cleaned up kDslG992RunAnnexaP3ModeInAnnexaP5, kG992EnableAnnexM and kDslAtuChangeTxFilterRequest definitions
-+ *
-+ * Revision 1.274 2005/04/27 20:57:32 yongbing
-+ * Implement 32 frequency break points for TSSI, PR 30211
-+ *
-+ * Revision 1.273 2005/04/02 03:27:52 kdu
-+ * PR30236: Define kDslEnableRoundUpDSLoopAttn, this is shared with kDslCentilliumCRCWorkAroundEnabled.
-+ *
-+ * Revision 1.272 2005/04/01 21:56:39 ilyas
-+ * Added more test commands definitions
-+ *
-+ * Revision 1.271 2005/02/11 05:03:57 ilyas
-+ * Added support for DslOs
-+ *
-+ * Revision 1.270 2005/02/11 03:33:22 lke
-+ * Support 2X, 4X, and 8X spectrum in ANNEX_I DS
-+ *
-+ * Revision 1.269 2005/01/08 00:11:58 ilyas
-+ * Added definition for AnnexL status
-+ *
-+ * Revision 1.268 2004/12/18 00:52:35 mprahlad
-+ * Add Dig US Pwr cutback status
-+ *
-+ * Revision 1.267 2004/11/08 22:21:38 ytan
-+ * init swap state after retrain
-+ *
-+ * Revision 1.266 2004/11/05 21:16:50 ilyas
-+ * Added support for pwmSyncClock
-+ *
-+ * Revision 1.265 2004/10/28 20:05:17 gsyu
-+ * Fixed compilation errors for simulation targets
-+ *
-+ * Revision 1.264 2004/10/23 00:16:35 nino
-+ * Added kDslHardwareSetRcvAGC status to set absolute rcv agc gain.
-+ *
-+ * Revision 1.263 2004/10/22 21:21:06 ilyas
-+ * Fixed bit definition overlap in demodCapabilities
-+ *
-+ * Revision 1.262 2004/10/20 00:43:20 gsyu
-+ * Added constants to support new xmt sample buffer control scheme
-+ *
-+ * Revision 1.261 2004/10/12 01:09:28 nino
-+ * Remove kDslHardwareEnablePwmSyncClk and kDslHardwareSetPwmSyncClkFreq
-+ * status definitions. Add kDslEnablePwmSyncClk and kDslSetPwmSyncClkFreq
-+ * command definitions.
-+ *
-+ * Revision 1.260 2004/10/11 20:21:26 nino
-+ * Added kDslHardwareEnablePwmSyncClk and kDslHardwareSetPwmSynClkFreq hardware statuses.
-+ *
-+ * Revision 1.259 2004/10/07 19:17:29 nino
-+ * Added kDslHardwareGetRcvAGC status.
-+ *
-+ * Revision 1.258 2004/10/02 00:17:14 nino
-+ * Added kDslHardwareAGCSetPga2 and kDslSetPilotEyeDisplay status definitions.
-+ *
-+ * Revision 1.257 2004/08/27 01:00:30 mprahlad
-+ *
-+ * Keep kDslAtuChangeTxFilterRequest defined by default so ADSL1 only targets can
-+ * build
-+ *
-+ * Revision 1.256 2004/08/20 19:00:34 ilyas
-+ * Added power management code for 2+
-+ *
-+ * Revision 1.255 2004/08/17 23:18:25 kdu
-+ * Merged interop changes for TDC lab from a023e9.
-+ *
-+ * Revision 1.254 2004/07/22 00:56:03 yongbing
-+ * Add ADSL2 Annex B modulation definition
-+ *
-+ * Revision 1.253 2004/07/16 22:23:28 nino
-+ * - Defined macros to extract subcarrier and supported set information
-+ * for tssi. Subcarrier and suported set indicator is packed into
-+ * dsSubcarrier index array.
-+ *
-+ * Revision 1.252 2004/07/01 00:11:22 nino
-+ * Added preliminary code for debugDataHandler (inside of #if DEBUG_DATA_HANDLER).
-+ *
-+ * Revision 1.251 2004/06/24 03:08:39 ilyas
-+ * Added GFC mapping control for ATM bonding
-+ *
-+ * Revision 1.250 2004/06/23 00:03:20 khp
-+ * - shorten self test result register length to 1 (satisfied requirement
-+ * at DT, no known requirement anywhere else)
-+ *
-+ * Revision 1.249 2004/06/15 20:18:33 ilyas
-+ * Made D uchar again for compatibility with older ADSl drivers that use this structure. ADSL driver will rely on G992p3 parameters for large D
-+ *
-+ * Revision 1.248 2004/06/12 00:26:03 gsyu
-+ * Added constants for AnnexM
-+ *
-+ * Revision 1.247 2004/06/10 18:53:24 yjchen
-+ * add large D support
-+ *
-+ * Revision 1.246 2004/06/04 01:55:00 linyin
-+ * Add a constant for SRA enable/disable
-+ *
-+ * Revision 1.245 2004/05/19 23:22:23 linyin
-+ * Support L2
-+ *
-+ * Revision 1.244 2004/05/15 03:04:58 ilyas
-+ * Added L3 test definition
-+ *
-+ * Revision 1.243 2004/05/14 03:04:38 ilyas
-+ * Fixed structure name typo
-+ *
-+ * Revision 1.242 2004/05/14 02:01:01 ilyas
-+ * Fixed structure name typo
-+ *
-+ * Revision 1.241 2004/05/14 01:21:49 nino
-+ * Added kDslSignalAttenuation, kDslAttainableNetDataRate kDslHLinScale constant definitions.
-+ *
-+ * Revision 1.240 2004/05/13 19:07:58 ilyas
-+ * Added new statuses for ADSL2
-+ *
-+ * Revision 1.239 2004/05/01 01:09:51 ilyas
-+ * Added power management command and statuses
-+ *
-+ * Revision 1.238 2004/04/23 22:50:38 ilyas
-+ * Implemented double buffering to ensure G.997 HDLC frame (OvhMsg) is continuous
-+ *
-+ * Revision 1.237 2004/03/31 18:57:39 ilyas
-+ * Added drop on data error capability control
-+ *
-+ * Revision 1.236 2004/03/30 03:11:30 ilyas
-+ * Added #ifdef for CFE build
-+ *
-+ * Revision 1.235 2004/03/29 23:06:39 ilyas
-+ * Added status for BG table update
-+ *
-+ * Revision 1.234 2004/03/17 02:49:49 ilyas
-+ * Turn off ATM bit reversal for Alcatel DSLAM only
-+ *
-+ * Revision 1.233 2004/03/11 03:09:48 mprahlad
-+ * Add test mode for afeloopback test
-+ *
-+ * Revision 1.232 2004/03/10 23:15:53 ilyas
-+ * Added ETSI modem support
-+ *
-+ * Revision 1.231 2004/03/04 19:28:14 linyin
-+ * Support adsl2plus
-+ *
-+ * Revision 1.230 2004/02/28 00:06:21 ilyas
-+ * Added OLR message definitions for ADSL2+
-+ *
-+ * Revision 1.229 2004/02/13 03:21:15 mprahlad
-+ * define kDslAturHwAgcMaxGain correctly for 6348
-+ *
-+ * Revision 1.228 2004/02/09 05:06:17 yongbing
-+ * Add ADSL2 bit swap function
-+ *
-+ * Revision 1.227 2004/02/04 02:08:19 linyin
-+ * remove the redefined kG992p5AnnexA
-+ *
-+ * Revision 1.226 2004/02/04 01:41:48 linyin
-+ * Add some variables for G992P5
-+ *
-+ * Revision 1.225 2004/02/03 19:12:22 gsyu
-+ * Added a dedicate structure and constants for G992P5
-+ *
-+ * Revision 1.224 2004/01/24 01:18:34 ytan
-+ * add multi-section swapping flag
-+ *
-+ * Revision 1.223 2004/01/17 00:21:48 ilyas
-+ * Added commands and statuses for OLR
-+ *
-+ * Revision 1.222 2004/01/13 19:12:37 gsyu
-+ * Added more constants for Double upstream
-+ *
-+ * Revision 1.221 2003/12/23 21:19:04 mprahlad
-+ * Define BCM6348_TEMP_MOVE_TO_LMEM to FAST_TEXT for 6348 targets - this is for
-+ * ADSL2/AnnexA multimode builds - move a few functions to Lmem for now to avoid
-+ * changes for swap on 6348.
-+ *
-+ * Revision 1.220 2003/12/19 21:21:53 ilyas
-+ * Added dying gasp support for ADSL2
-+ *
-+ * Revision 1.219 2003/12/05 02:09:51 mprahlad
-+ * Leave the AnalogEC defs in - saves ifdef-ing all uses of these defines.
-+ * Include Bcm6345_To_Bcm6348.h - to be able to pick up macros for the
-+ * transition
-+ *
-+ * Revision 1.218 2003/12/04 02:10:58 linyin
-+ * Redefine some constants for supporting different pilot and TTR
-+ *
-+ * Revision 1.217 2003/12/03 02:24:39 gsyu
-+ * Reverse previous check in for Double Upstream demo
-+ *
-+ * Revision 1.215 2003/11/20 00:58:47 yongbing
-+ * Merge ADSL2 functionalities into Annex A branch
-+ *
-+ * Revision 1.214 2003/11/06 00:35:06 nino
-+ * Added kDslWriteAfeRegCmd and kDslReadAfeRegCmd commands.
-+ *
-+ * Revision 1.213 2003/11/05 21:04:23 ilyas
-+ * Added more codes for LOG data
-+ *
-+ * Revision 1.212 2003/10/22 00:51:52 yjchen
-+ * define constant for quiet line noise
-+ *
-+ * Revision 1.211 2003/10/20 22:08:57 nino
-+ * Added kDslSetRcvGainCmd and kDslBypassRcvHpfCmd debug commands.
-+ *
-+ * Revision 1.210 2003/10/18 00:04:59 yjchen
-+ * define constants for G992P3 diagnostic mode channel response
-+ *
-+ * Revision 1.209 2003/10/17 22:41:29 yongbing
-+ * Add INP message support
-+ *
-+ * Revision 1.208 2003/10/16 00:06:09 uid1249
-+ * Moved G.994 definitions from G.994p1MainTypes.h
-+ *
-+ * Revision 1.207 2003/10/15 20:45:11 linyin
-+ * Add some constants for support Revision 2
-+ *
-+ * Revision 1.206 2003/10/14 22:04:02 ilyas
-+ * Added Nino's AFE statuses for 6348
-+ *
-+ * Revision 1.205 2003/10/10 18:49:26 gsyu
-+ * Added test modes to workaround the clock domain crossing bug, PR18038
-+ *
-+ * Revision 1.204 2003/09/30 19:27:46 mprahlad
-+ * ifdef AnalogEC definies with #ifndef BCM6348_SRC
-+ *
-+ * Revision 1.203 2003/09/26 19:36:34 linyin
-+ * Add annexi constant and vars
-+ *
-+ * Revision 1.202 2003/09/25 20:16:13 yjchen
-+ * remove featureNTR definition
-+ *
-+ * Revision 1.201 2003/09/08 20:29:51 ilyas
-+ * Added test commands for chip regression tests
-+ *
-+ * Revision 1.200 2003/08/26 00:58:14 ilyas
-+ * Added I432 reset command (for header compression)
-+ * Fixed SoftDsl time (for I432 header compression)
-+ *
-+ * Revision 1.199 2003/08/26 00:37:29 ilyas
-+ * #ifdef'ed DslFrameFunctions in dslCommand structure to save space
-+ *
-+ * Revision 1.198 2003/08/22 22:45:00 liang
-+ * Change the NF field in G992CodingParams from uchar to ushort to support K=256 (dataRate=255*32kbps) in fast path.
-+ *
-+ * Revision 1.197 2003/08/21 21:19:05 ilyas
-+ * Changed dataPumpCapabilities structure for G992P3
-+ *
-+ * Revision 1.196 2003/08/12 22:44:28 khp
-+ * - for Haixiang: added kDslTestMarginTweak command and marginTweakSpec
-+ *
-+ * Revision 1.195 2003/07/24 17:28:16 ovandewi
-+ * added Tx filter change request code
-+ *
-+ * Revision 1.194 2003/07/24 15:48:55 yongbing
-+ * Reduce TSSI buffer size to avoid crash at the beginning of G.994.1. Need to find out why
-+ *
-+ * Revision 1.193 2003/07/19 07:11:47 nino
-+ * Revert back to version 1.191.
-+ *
-+ * Revision 1.191 2003/07/17 21:25:25 yongbing
-+ * Add support for READSL2 and TSSI
-+ *
-+ * Revision 1.190 2003/07/14 19:42:33 yjchen
-+ * add constants for G992P3
-+ *
-+ * Revision 1.189 2003/07/10 23:07:11 liang
-+ * Add demodCapability bit to minimize showtime ATUC xmt power through b&g table.
-+ *
-+ * Revision 1.188 2003/07/08 22:18:50 liang
-+ * Added demodCapability bit for G.994.1 Annex A multimode operation.
-+ *
-+ * Revision 1.187 2003/07/07 23:24:43 ilyas
-+ * Added G.dmt.bis definitions
-+ *
-+ * Revision 1.186 2003/06/25 02:44:02 liang
-+ * Added demod capability bit kDslUE9000ADI918FECFixEnabled.
-+ * Added back kDslHWEnableAnalogECUpdate & kDslHWEnableAnalogEC for backward compatibility (annex A).
-+ *
-+ * Revision 1.185 2003/06/18 01:39:19 ilyas
-+ * Added AFE test commands. Add #defines for driver's builds
-+ *
-+ * Revision 1.184 2003/06/06 23:58:09 ilyas
-+ * Added command and status for standalone AFE tests
-+ *
-+ * Revision 1.183 2003/05/29 21:09:32 nino
-+ * - kDslHWEnableAnalogECUpdate define replaced with kDslHWSetDigitalEcUpdateMode
-+ * - kDslHWEnableAnalogEC define replaced with kDslHWDisableDigitalECUpdate
-+ *
-+ * Revision 1.182 2003/04/15 22:08:15 liang
-+ * Changed one of the demodCapability bit name from last checkin.
-+ *
-+ * Revision 1.181 2003/04/13 19:25:54 liang
-+ * Added three more demodCapability bits.
-+ *
-+ * Revision 1.180 2003/04/02 02:09:17 liang
-+ * Added demodCapability bit for ADI low rate option fix disable.
-+ *
-+ * Revision 1.179 2003/03/18 18:22:06 yongbing
-+ * Use 32 tap TEQ for Annex I
-+ *
-+ * Revision 1.178 2003/03/06 00:58:07 ilyas
-+ * Added SetStausBuffer command
-+ *
-+ * Revision 1.177 2003/02/25 00:46:26 ilyas
-+ * Added T1.413 EOC vendor ID
-+ *
-+ * Revision 1.176 2003/02/21 23:30:54 ilyas
-+ * Added Xmtgain command framing mode status and T1413VendorId parameters
-+ *
-+ * Revision 1.175 2003/02/07 22:13:55 liang
-+ * Add demodCapabilities bits for sub-sample alignment and higher T1.413 level (used internally only).
-+ *
-+ * Revision 1.174 2003/01/23 02:54:07 liang
-+ * Added demod capability bit for bitswap enable.
-+ *
-+ * Revision 1.173 2002/12/13 18:36:33 yongbing
-+ * Add support for G.992.2 Annex C
-+ *
-+ * Revision 1.172 2002/12/10 23:27:12 ilyas
-+ * Extended dslException parameter structure to allow printout from DslDiags
-+ *
-+ * Revision 1.171 2002/12/06 02:10:19 liang
-+ * Moved the T1.413 RAck1/RAck2 switching variables to connection setup structure.
-+ * Added/Modified the training progress codes for T1.413 RAck1/RAck2 and upstream 2x IFFT disable.
-+ *
-+ * Revision 1.170 2002/11/11 00:20:05 liang
-+ * Add demod capability constant for internally disabling upstream 2x IFFT in T1.413 mode.
-+ *
-+ * Revision 1.169 2002/11/06 03:46:19 liang
-+ * Add training progress code for upstream 2x IFFT disable.
-+ *
-+ * Revision 1.168 2002/11/01 01:41:06 ilyas
-+ * Added flags for Centillium 4103 workarround
-+ *
-+ * Revision 1.167 2002/10/26 01:26:11 gsyu
-+ * Move SoftDslLineHandler from SDRAM to LMEM
-+ *
-+ * Revision 1.166 2002/10/20 18:56:20 khp
-+ * - for linyin
-+ * - #ifdef NEC_NSIF_WORKAROUND:
-+ * - add macros to extract NSIF status and fail counter vars
-+ *
-+ * Revision 1.165 2002/10/14 05:24:35 liang
-+ * Add training status code to request alternate xmt filter (for Samsung 6-port ADI918 DSLAMs) to meet KT 2km spec.
-+ *
-+ * Revision 1.164 2002/10/08 21:44:50 ilyas
-+ * Fixed EOC stuffing byte to indicate "no synchronization" action
-+ *
-+ * Revision 1.163 2002/10/03 19:34:24 ilyas
-+ * Added size for EOC serial number register
-+ *
-+ * Revision 1.162 2002/09/28 02:42:27 yongbing
-+ * Add retrain in T1.413 with R-Ack1 tone
-+ *
-+ * Revision 1.161 2002/09/28 01:23:35 gsyu
-+ * Reverse us2xifft change so that we can install new us2xifft on the tree
-+ *
-+ * Revision 1.160 2002/09/26 23:30:48 yongbing
-+ * Add synch symbol detection in Showtime
-+ *
-+ * Revision 1.159 2002/09/20 23:47:52 khp
-+ * - for gsyu: enable 2X IFFT for Annex A (XMT_FFT_SIZE_2X)
-+ *
-+ * Revision 1.158 2002/09/14 03:26:39 ilyas
-+ * Changed far-end RDI reporting
-+ *
-+ * Revision 1.157 2002/09/13 21:10:54 ilyas
-+ * Added reporting of remote modem LOS and RDI.
-+ * Moved G992CodingParams definition to SoftDsl.h
-+ *
-+ * Revision 1.156 2002/09/12 21:07:19 ilyas
-+ * Added HEC, OCD and LCD counters
-+ *
-+ * Revision 1.155 2002/09/09 21:31:30 linyin
-+ * Add two constant to support long reach
-+ *
-+ * Revision 1.154 2002/09/07 01:31:51 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.153 2002/09/04 22:36:14 mprahlad
-+ * defines for non standard info added
-+ *
-+ * Revision 1.152 2002/08/02 21:59:09 liang
-+ * Enable G.992.2 carrierInfo in capabitilities when G.992.1 annex A is used for G.992.2.
-+ *
-+ * Revision 1.151 2002/07/29 20:01:03 ilyas
-+ * Added command for Atm VC map table change
-+ *
-+ * Revision 1.150 2002/07/18 22:30:47 liang
-+ * Add xmt power and power cutback related constants.
-+ *
-+ * Revision 1.149 2002/07/11 01:30:58 ilyas
-+ * Changed status for ShowtimeMargin reporting
-+ *
-+ * Revision 1.148 2002/07/09 19:19:09 ilyas
-+ * Added status parameters for ShowtimeSNRMargin info and command to filter
-+ * out SNR margin data
-+ *
-+ * Revision 1.147 2002/06/27 21:50:24 liang
-+ * Added test command related demodCapabilities bits.
-+ *
-+ * Revision 1.146 2002/06/26 21:29:00 liang
-+ * Added dsl test cmd structure and showtime margin connection info status.
-+ *
-+ * Revision 1.145 2002/06/15 05:15:51 ilyas
-+ * Added definitions for Ping, Dying Gasp and other test commands
-+ *
-+ * Revision 1.144 2002/05/30 19:55:15 ilyas
-+ * Added status for ADSL PHY MIPS exception
-+ * Changed conflicting definition for higher rates (S=1/2)
-+ *
-+ * Revision 1.143 2002/05/21 23:41:07 yongbing
-+ * First check-in of Annex C S=1/2 codes
-+ *
-+ * Revision 1.142 2002/04/29 22:25:09 georgep
-+ * Merge from branch annexC_demo - add status message constants
-+ *
-+ * Revision 1.141 2002/04/18 19:00:35 ilyas
-+ * Added include file for builds in CommEngine environment
-+ *
-+ * Revision 1.140 2002/04/18 00:18:36 yongbing
-+ * Add detailed timeout error messages
-+ *
-+ * Revision 1.139 2002/04/02 10:03:18 ilyas
-+ * Merged BERT from AnnexA branch
-+ *
-+ * Revision 1.138 2002/03/26 01:42:29 ilyas
-+ * Added timeout message constants for annex C
-+ *
-+ * Revision 1.137 2002/03/22 19:39:22 yongbing
-+ * Modify for co-exist of G994P1 and T1P413
-+ *
-+ * Revision 1.136 2002/03/22 01:19:40 ilyas
-+ * Add status message constants for total FEXT Bits, NEXT bits
-+ *
-+ * Revision 1.135 2002/03/10 22:32:24 liang
-+ * Added report constants for LOS recovery and timing tone index.
-+ *
-+ * Revision 1.134 2002/03/07 22:06:32 georgep
-+ * Replace ifdef G992P1 with G992P1_ANNEX_A for annex A variables
-+ *
-+ * Revision 1.133 2002/02/16 01:08:18 georgep
-+ * Add log constant for showtime mse
-+ *
-+ * Revision 1.132 2002/02/08 04:36:27 ilyas
-+ * Added commands for LOG file and fixed Idle mode pointer update
-+ *
-+ * Revision 1.131 2002/01/24 20:21:30 georgep
-+ * Add logging defines, remove fast retrain defines
-+ *
-+ * Revision 1.130 2002/01/19 23:59:17 ilyas
-+ * Added support for LOG and eye data to ADSL core target
-+ *
-+ * Revision 1.129 2002/01/16 23:43:54 liang
-+ * Remove the carriage return character from last checkin.
-+ *
-+ * Revision 1.128 2002/01/15 22:27:13 ilyas
-+ * Added command for ADSL loopback
-+ *
-+ * Revision 1.127 2002/01/10 07:18:22 ilyas
-+ * Added status for printf (mainly for ADSL core debugging)
-+ *
-+ * Revision 1.126 2001/12/21 22:45:34 ilyas
-+ * Added support for ADSL MIB data object
-+ *
-+ * Revision 1.125 2001/12/13 02:24:22 ilyas
-+ * Added G997 (Clear EOC and G997 framer) support
-+ *
-+ * Revision 1.124 2001/11/30 05:56:31 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.123 2001/11/15 19:01:07 yongbing
-+ * Modify only T1.413 part to the top of tree based on AnnexBDevelopment branch
-+ *
-+ * Revision 1.122 2001/10/19 00:12:07 ilyas
-+ * Added support for frame oriented (no ATM) data link layer
-+ *
-+ * Revision 1.121 2001/10/09 22:35:13 ilyas
-+ * Added more ATM statistics and OAM support
-+ *
-+ * Revision 1.105.2.20 2001/11/27 02:32:03 liang
-+ * Combine vendor ID, serial #, and version number into SoftModemVersionNumber.c.
-+ *
-+ * Revision 1.105.2.19 2001/11/21 01:29:14 georgep
-+ * Add a status message define for annexC
-+ *
-+ * Revision 1.105.2.18 2001/11/08 23:26:28 yongbing
-+ * Add carrier selection function for Annex A and B
-+ *
-+ * Revision 1.105.2.17 2001/11/07 22:55:30 liang
-+ * Report G992 rcv msg CRC error as what it is instead of time out.
-+ *
-+ * Revision 1.105.2.16 2001/11/05 19:56:21 liang
-+ * Add DC offset info code.
-+ *
-+ * Revision 1.105.2.15 2001/10/16 00:47:16 yongbing
-+ * Add return-to-T1p413 starting point if in error
-+ *
-+ * Revision 1.105.2.14 2001/10/15 23:14:01 yjchen
-+ * remove ADSL_SINGLE_SYMBOL_BLOCK
-+ *
-+ * Revision 1.105.2.13 2001/10/12 18:07:16 yongbing
-+ * Add support for T1.413
-+ *
-+ * Revision 1.105.2.12 2001/10/04 00:23:52 liang
-+ * Add connection info constants for TEQ coef and PSD.
-+ *
-+ * Revision 1.105.2.11 2001/10/03 01:44:01 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.105.2.10 2001/09/28 22:10:04 liang
-+ * Add G994 exchange message status reports.
-+ *
-+ * Revision 1.105.2.9 2001/09/26 18:08:21 georgep
-+ * Send status error message in case features field is not setup properly
-+ *
-+ * Revision 1.105.2.8 2001/09/05 01:58:13 georgep
-+ * Added status message for annexC measured delay
-+ *
-+ * Revision 1.105.2.7 2001/08/29 00:37:52 georgep
-+ * Add log constants for annexC
-+ *
-+ * Revision 1.105.2.6 2001/08/18 00:01:34 georgep
-+ * Add constants for annexC
-+ *
-+ * Revision 1.105.2.5 2001/08/08 17:33:28 yongbing
-+ * Merge with tag SoftDsl_2_17
-+ *
-+ * Revision 1.120 2001/08/29 02:56:01 ilyas
-+ * Added tests for flattening/unflatenning command and statuses (dual mode)
-+ *
-+ * Revision 1.119 2001/08/28 03:26:32 ilyas
-+ * Added support for running host and adsl core parts separately ("dual" mode)
-+ *
-+ * Revision 1.118 2001/08/16 02:16:10 khp
-+ * - mark functions with FAST_TEXT to reduce cycle counts for QPROC targets
-+ * (replaces use of LMEM_INSN)
-+ *
-+ * Revision 1.117 2001/06/18 20:06:35 ilyas
-+ * Added forward declaration of dslCommandStruc to avoid gcc warnings
-+ *
-+ * Revision 1.116 2001/06/18 19:49:36 ilyas
-+ * Changes to include support for HOST_ONLY mode
-+ *
-+ * Revision 1.115 2001/06/01 22:00:33 ilyas
-+ * Changed ATM PHY interface to accomodate UTOPIA needs
-+ *
-+ * Revision 1.114 2001/05/16 06:22:24 liang
-+ * Added status reports for xmt & rcv prefix enable position.
-+ *
-+ * Revision 1.113 2001/05/02 20:34:32 georgep
-+ * Added log constants for snr1 calculation
-+ *
-+ * Revision 1.112 2001/04/25 01:20:11 ilyas
-+ *
-+ * Don't use DSL frame functions if ATM_LAYER is not defined
-+ *
-+ * Revision 1.111 2001/04/17 21:13:00 georgep
-+ * Define status constant kDslHWSetDigitalEcUpdateShift
-+ *
-+ * Revision 1.110 2001/04/16 23:38:36 georgep
-+ * Add HW AGC constants for ATUR
-+ *
-+ * Revision 1.109 2001/04/06 23:44:53 georgep
-+ * Added status constant for setting up digitalEcGainShift
-+ *
-+ * Revision 1.108 2001/03/29 05:58:34 liang
-+ * Replaced the Aware compatibility codes with automatic detection codes.
-+ *
-+ * Revision 1.107 2001/03/25 06:11:22 liang
-+ * Combined separate loop attenuation status for ATUR & ATUC into one status.
-+ * Replace separate hardware AGC info status for ATUR & ATUC into hardware AGC
-+ * request status and hardware AGC obtained status.
-+ * Use store AGC command to save hardware AGC value instead of returning value
-+ * from status report.
-+ *
-+ * Revision 1.106 2001/03/24 00:43:22 liang
-+ * Report more checksum results (NumOfCalls, txSignal, rxSignal & eyeData).
-+ *
-+ * Revision 1.105 2001/03/16 23:57:31 georgep
-+ * Added more loop attenuation reporting status constants
-+ *
-+ * Revision 1.104 2001/03/15 00:22:07 liang
-+ * Back to version 1.101.
-+ *
-+ * Revision 1.103 2001/03/15 00:03:44 yjchen
-+ * use kDslATURHardwareAGCInfo for AltoE14 AGC as well
-+ *
-+ * Revision 1.102 2001/03/14 23:10:56 yjchen
-+ * add defns for AltoE14 AGC
-+ *
-+ * Revision 1.101 2001/03/08 23:31:34 georgep
-+ * Added R, S, D, coding parameters to dslDataPumpCapabilities
-+ *
-+ * Revision 1.100 2001/02/10 03:03:09 ilyas
-+ * Added one more DslFrame function
-+ *
-+ * Revision 1.99 2001/02/09 01:55:27 ilyas
-+ * Added status codes and macros to support printing of AAL packets
-+ *
-+ * Revision 1.98 2001/01/30 23:28:10 georgep
-+ * Added kDslDspControlStatus for handling changes to dsp params
-+ *
-+ * Revision 1.97 2001/01/12 01:17:18 georgep
-+ * Added bit in demodCapabilities for analog echo cancellor
-+ *
-+ * Revision 1.96 2001/01/04 05:51:03 ilyas
-+ * Added more dslStatuses
-+ *
-+ * Revision 1.95 2000/12/21 05:46:07 ilyas
-+ * Added name for struct _dslFrame
-+ *
-+ * Revision 1.94 2000/12/13 22:04:39 liang
-+ * Add Reed-Solomon coding enable bit in demodCapabilities.
-+ *
-+ * Revision 1.93 2000/11/29 20:42:02 liang
-+ * Add defines for SNR & max achivable rate status and DEC enable demodCapabilities bit.
-+ *
-+ * Revision 1.92 2000/09/22 21:55:13 ilyas
-+ * Added support for DSL + Atm physical layer only (I.432) simulations
-+ *
-+ * Revision 1.91 2000/09/10 09:20:53 lkaplan
-+ * Improve interface for sending Eoc messages
-+ *
-+ * Revision 1.90 2000/09/08 19:37:58 lkaplan
-+ * Added code for handling EOC messages
-+ *
-+ * Revision 1.89 2000/09/07 23:02:27 georgep
-+ * Add HarwareAGC Bit to demod Capabilities
-+ *
-+ * Revision 1.88 2000/09/01 00:57:34 georgep
-+ * Added Hardware AGC status defines
-+ *
-+ * Revision 1.87 2000/08/31 19:04:26 liang
-+ * Added external reference for stack size requirement test functions.
-+ *
-+ * Revision 1.86 2000/08/24 23:16:46 liang
-+ * Increased sample block size for noBlock.
-+ *
-+ * Revision 1.85 2000/08/23 18:34:39 ilyas
-+ * Added XxxVcConfigure function
-+ *
-+ * Revision 1.84 2000/08/05 00:25:04 georgep
-+ * Redefine sampling freq constants
-+ *
-+ * Revision 1.83 2000/08/03 14:04:00 liang
-+ * Add hardware time tracking clock error reset code.
-+ *
-+ * Revision 1.82 2000/07/23 20:52:52 ilyas
-+ * Added xxxFrameBufSetAddress() function for ATM framer layers
-+ * Rearranged linkLayer functions in one structure which is passed as a
-+ * parameter to xxxLinkLayerInit() function to be set there
-+ *
-+ * Revision 1.81 2000/07/18 20:03:24 ilyas
-+ * Changed DslFrame functions definitions to macros,
-+ * Removed gDslVars from their parameter list
-+ *
-+ * Revision 1.80 2000/07/17 21:08:15 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.79 2000/06/21 20:38:44 georgep
-+ * Added bit to demodCapabilities for HW_TIME_TRACKING
-+ *
-+ * Revision 1.78 2000/06/19 19:57:55 georgep
-+ * Added constants for logging of HWResampler data
-+ *
-+ * Revision 1.77 2000/06/02 18:57:21 ilyas
-+ * Added support for DSL buffers consisting of many ATM cells
-+ *
-+ * Revision 1.76 2000/05/27 02:19:28 liang
-+ * G992MonitorParams structure is moved here, and Tx/Rx data handler type definitions changed.
-+ *
-+ * Revision 1.75 2000/05/15 18:17:21 liang
-+ * Added statuses for sent and received frames
-+ *
-+ * Revision 1.74 2000/05/14 01:56:38 ilyas
-+ * Added ATM cell printouts
-+ *
-+ * Revision 1.73 2000/05/09 23:00:26 ilyas
-+ * Added ATM status messages, ATM timer, Tx frames flush on timeout
-+ * Fixed a bug - adding flushed Tx frames to the list of free Rx frames
-+ *
-+ * Revision 1.72 2000/05/03 18:01:18 georgep
-+ * Removed old function declarations for Eoc/Aoc
-+ *
-+ * Revision 1.71 2000/05/03 03:57:04 ilyas
-+ * Added LOG file support for writing ATM data
-+ *
-+ * Revision 1.70 2000/05/02 00:04:36 liang
-+ * Add showtime monitoring and message exchange info constants.
-+ *
-+ * Revision 1.69 2000/04/28 23:34:20 yongbing
-+ * Add constants for reporting error events in performance monitoring
-+ *
-+ * Revision 1.68 2000/04/21 23:09:04 liang
-+ * Added G992 time out training progress constant.
-+ *
-+ * Revision 1.67 2000/04/19 00:31:47 ilyas
-+ * Added global SoftDsl functions for Vc, added OOB info functions
-+ *
-+ * Revision 1.66 2000/04/18 00:45:31 yongbing
-+ * Add G.DMT new frame structure, define G992P1_NEWFRAME to enable, need ATM layer to work
-+ *
-+ * Revision 1.65 2000/04/15 01:48:34 georgep
-+ * Added T1p413 status constants
-+ *
-+ * Revision 1.64 2000/04/13 08:36:22 yura
-+ * Added SoftDslSetRefData, SoftDslGetRefData functions
-+ *
-+ * Revision 1.63 2000/04/13 05:42:35 georgep
-+ * Added constant for T1p413
-+ *
-+ * Revision 1.62 2000/04/05 21:49:54 liang
-+ * minor change.
-+ *
-+ * Revision 1.61 2000/04/04 04:16:06 liang
-+ * Merged with SoftDsl_0_03 from old tree.
-+ *
-+ * Revision 1.65 2000/04/04 01:47:21 ilyas
-+ * Implemented abstract dslFrame and dslFrameBuffer objects
-+ *
-+ * Revision 1.64 2000/04/01 08:12:10 yura
-+ * Added preliminary revision of the SoftDsl driver architecture
-+ *
-+ * Revision 1.63 2000/04/01 02:55:33 georgep
-+ * New defines for G992p2Profile Structure
-+ *
-+ * Revision 1.62 2000/04/01 00:50:36 yongbing
-+ * Add initial version of new frame structure for full-rate
-+ *
-+ * Revision 1.61 2000/03/24 03:30:45 georgep
-+ * Define new constant kDslUpstreamSamplingFreq
-+ *
-+ * Revision 1.60 2000/03/23 19:51:30 georgep
-+ * Define new features bits for G992p1
-+ *
-+ * Revision 1.59 2000/03/18 01:28:41 georgep
-+ * Changed connectionSetup to include G992p1 Capabilities
-+ *
-+ * Revision 1.58 2000/02/29 01:40:03 georgep
-+ * Changed modulationtype defines to be the same as SPAR1 in G994p1
-+ *
-+ * Revision 1.57 1999/11/19 01:03:19 george
-+ * Use Block Size 256 for single symbol Mode
-+ *
-+ * Revision 1.56 1999/11/18 02:37:43 george
-+ * Porting to 16Bit
-+ *
-+ * Revision 1.55 1999/11/12 02:12:55 george
-+ * Added status constant for reporting of profile channel matching calculation
-+ *
-+ * Revision 1.54 1999/11/11 19:19:42 george
-+ * Porting to 16Bit Compiler
-+ *
-+ * Revision 1.53 1999/11/05 01:27:06 liang
-+ * Add recovery-from-inpulse-noise progress report.
-+ *
-+ * Revision 1.52 1999/11/02 02:06:27 george
-+ * Added SNRMargin training status value
-+ *
-+ * Revision 1.51 1999/10/27 23:02:03 wan
-+ * Add G.994.1 setup in dslConnectionSetupStruct for setting up Initiation side
-+ *
-+ * Revision 1.50 1999/10/25 21:55:36 liang
-+ * Renamed the constant for FEQ output error.
-+ *
-+ * Revision 1.49 1999/10/23 02:20:55 george
-+ * Add debug data codes
-+ *
-+ * Revision 1.48 1999/10/19 23:59:06 liang
-+ * Change line handler interface to work with nonsymmetric sampling freq.
-+ *
-+ * Revision 1.47 1999/10/09 01:38:04 george
-+ * Define maxProfileNumber
-+ *
-+ * Revision 1.46 1999/10/07 23:30:51 wan
-+ * Add G.994.1 Tone and Fast Retrain Recov detections in G.992p2 SHOWTIME and Fast Retrain
-+ *
-+ * Revision 1.45 1999/10/06 13:59:27 liang
-+ * Escape to G994.1 should be done through status instead of command.
-+ *
-+ * Revision 1.44 1999/10/06 02:01:28 george
-+ * Add kDslReturnToG994p1Cmd
-+ *
-+ * Revision 1.43 1999/09/30 19:29:58 george
-+ * Add reporting constant for Fast Retrain
-+ *
-+ * Revision 1.42 1999/09/16 23:41:56 liang
-+ * Added command for host forced retrain.
-+ *
-+ * Revision 1.41 1999/08/20 00:47:25 wan
-+ * Add constants for Fast Retrain progress status
-+ *
-+ * Revision 1.40 1999/08/16 18:06:01 wan
-+ * Add more reporting constants for Fast Retrain
-+ *
-+ * Revision 1.39 1999/08/12 00:18:10 wan
-+ * Add several Fast Retrain Status constants
-+ *
-+ * Revision 1.38 1999/08/10 18:25:38 george
-+ * Define constants used for Fast Retrain
-+ *
-+ * Revision 1.37 1999/07/31 01:47:43 george
-+ * Add status constants for eoc/aoc
-+ *
-+ * Revision 1.36 1999/07/27 18:19:52 george
-+ * declare aoc/eoc functions
-+ *
-+ * Revision 1.35 1999/07/19 22:44:47 george
-+ * Add constants for G994p1 Message Exchange
-+ *
-+ * Revision 1.34 1999/07/16 02:03:03 liang
-+ * Modified Dsl link layer command spec structure.
-+ *
-+ * Revision 1.33 1999/07/14 22:53:16 george
-+ * Add Constants for G994p1
-+ *
-+ * Revision 1.32 1999/07/13 00:02:26 liang
-+ * Added more feature bits.
-+ *
-+ * Revision 1.31 1999/07/09 01:58:14 wan
-+ * Added more constants G.994.1 testing reports
-+ *
-+ * Revision 1.30 1999/07/07 23:51:04 liang
-+ * Added rcv power and loop attenuation reports.
-+ *
-+ * Revision 1.29 1999/07/06 21:32:01 liang
-+ * Added some aux. feature bits, and field performanceMargin was changed to noiseMargin in Capabilities.
-+ *
-+ * Revision 1.28 1999/07/03 01:40:17 liang
-+ * Redefined dsl command parameter list and added connection setup struct.
-+ *
-+ * Revision 1.27 1999/07/02 00:41:18 liang
-+ * Add bit and gain logging as well as rcv carrier range status.
-+ *
-+ * Revision 1.26 1999/06/25 21:37:10 wan
-+ * Work in progress for G994.1.
-+ *
-+ * Revision 1.25 1999/06/16 00:54:36 liang
-+ * Added Tx/Rx SHOWTIME active training progress codes.
-+ *
-+ * Revision 1.24 1999/06/11 21:59:37 wan
-+ * Added G994.1 fail status constant.
-+ *
-+ * Revision 1.23 1999/06/11 21:29:01 liang
-+ * Constants for C/R-Msgs was changed to C/R-Msg.
-+ *
-+ * Revision 1.22 1999/06/08 02:49:42 liang
-+ * Added SNR data logging.
-+ *
-+ * Revision 1.21 1999/06/07 21:05:08 liang
-+ * Added more training status values.
-+ *
-+ * Revision 1.20 1999/05/22 02:18:26 liang
-+ * More constant defines.
-+ *
-+ * Revision 1.19 1999/05/14 22:49:35 liang
-+ * Added more status codes and debug data codes.
-+ *
-+ * Revision 1.18 1999/04/12 22:41:39 liang
-+ * Work in progress.
-+ *
-+ * Revision 1.17 1999/04/01 20:28:07 liang
-+ * Added RReverb detect event status.
-+ *
-+ * Revision 1.16 1999/03/26 03:29:54 liang
-+ * Add DSL debug data constants.
-+ *
-+ * Revision 1.15 1999/03/08 21:58:00 liang
-+ * Added more constant definitions.
-+ *
-+ * Revision 1.14 1999/03/02 01:49:36 liang
-+ * Added more connection info codes.
-+ *
-+ * Revision 1.13 1999/03/02 00:25:55 liang
-+ * Added DSL tx and rx data handler type definitions.
-+ *
-+ * Revision 1.12 1999/02/27 01:16:55 liang
-+ * Increase allowable static memory size to a VERY large number for now.
-+ *
-+ * Revision 1.11 1999/02/25 00:24:06 liang
-+ * Increased symbol block size to 16.
-+ *
-+ * Revision 1.10 1999/02/23 22:03:26 liang
-+ * Increased maximal static memory size allowed.
-+ *
-+ * Revision 1.9 1999/02/17 02:39:21 ilyas
-+ * Changes for NDIS
-+ *
-+ * Revision 1.8 1999/02/11 22:44:30 ilyas
-+ * More definitions for ATM
-+ *
-+ * Revision 1.7 1999/02/10 01:56:38 liang
-+ * Added hooks for G994.1 and G992.2.
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef SoftDslHeader
-+#define SoftDslHeader
-+
-+/* for builds in Linux/VxWorks CommEngine environment */
-+#if (defined(__KERNEL__) && !defined(LINUX_DRIVER)) || defined(VXWORKS) || defined(_WIN32_WCE) || defined(TARG_OS_RTEMS) || defined(_CFE_)
-+#include "AdslCoreDefs.h"
-+#else
-+#include "Bcm6345_To_Bcm6348.h" /* File for 45->48 changes */
-+#endif
-+
-+#ifndef SoftModemPh
-+#include "SoftModem.h"
-+#endif
-+
-+#ifdef DSL_OS
-+#include "DslOs.h"
-+#endif
-+
-+/*
-+**
-+** Type definitions
-+**
-+*/
-+
-+#if defined(ATM) || defined(DSL_PACKET)
-+#define DSL_LINKLAYER
-+#endif
-+
-+#if defined(ATM_LAYER) || defined(DSL_PACKET_LAYER) || defined(G997_1_FRAMER)
-+#define DSL_FRAME_FUNCTIONS
-+#endif
-+
-+#define FLD_OFFSET(type,fld) ((int)(void *)&(((type *)0)->fld))
-+
-+#include "Que.h"
-+#include "SoftAtmVc.h"
-+
-+typedef struct _dslFrameBuffer
-+ {
-+ struct _dslFrameBuffer *next; /* link to the next buffer in the frame */
-+ void *pData; /* pointer to data */
-+ ulong length; /* size (in bytes) of data */
-+ } dslFrameBuffer;
-+
-+typedef struct _dslFrame
-+ {
-+ ulong Reserved[3];
-+
-+ ulong totalLength; /* total amount of data in the packet */
-+ int bufCnt; /* buffer counter */
-+ struct _dslFrameBuffer *head; /* first buffer in the chain */
-+ struct _dslFrameBuffer *tail; /* last buffer in the chain */
-+ } dslFrame;
-+
-+
-+/* VC types and parameters */
-+
-+#define kDslVcAtm 1
-+
-+typedef struct
-+ {
-+ ulong vcType;
-+ union
-+ {
-+ atmVcParams atmParams;
-+ } params;
-+ } dslVcParams;
-+
-+/*
-+** Assuming that dslVcParams.params is the first field in VC
-+** and RefData is the first field in dslVcParams.params
-+*/
-+
-+#define DslVcGetRefData(pVc) (*(void **) (pVc))
-+
-+/* Frame OOB types */
-+
-+#define kDslFrameAtm 1
-+
-+typedef struct
-+ {
-+ ulong frameType;
-+ union
-+ {
-+ atmOobPacketInfo atmInfo;
-+ } param;
-+ } dslOobFrameInfo;
-+
-+
-+typedef struct
-+ {
-+ ulong (SM_DECL *__DslFrameBufferGetLength) (dslFrameBuffer *fb);
-+ void * (SM_DECL *__DslFrameBufferGetAddress) (dslFrameBuffer *fb);
-+ void (SM_DECL *__DslFrameBufferSetLength) (dslFrameBuffer *fb, ulong l);
-+ void (SM_DECL *__DslFrameBufferSetAddress) (dslFrameBuffer *fb, void *p);
-+
-+ void (SM_DECL *__DslFrameInit) (dslFrame *f);
-+ ulong (SM_DECL *__DslFrameGetLength) (dslFrame *pFrame);
-+ ulong (SM_DECL *__DslFrameGetBufCnt) (dslFrame *pFrame);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetFirstBuffer) (dslFrame *pFrame);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetNextBuffer) (dslFrameBuffer *pFrBuffer);
-+ void (SM_DECL *__DslFrameSetNextBuffer) (dslFrameBuffer *pFrBuf, dslFrameBuffer *pFrBufNext);
-+ dslFrameBuffer * (SM_DECL *__DslFrameGetLastBuffer) (dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameGetLinkFieldAddress) (dslFrame *f);
-+ dslFrame * (SM_DECL *__DslFrameGetFrameAddressFromLink) (void *lnk);
-+
-+ Boolean (SM_DECL *__DslFrameGetOobInfo) (dslFrame *f, dslOobFrameInfo *pOobInfo);
-+ Boolean (SM_DECL *__DslFrameSetOobInfo) (dslFrame *f, dslOobFrameInfo *pOobInfo);
-+
-+ void (SM_DECL *__DslFrameEnqueBufferAtBack) (dslFrame *f, dslFrameBuffer *b);
-+ void (SM_DECL *__DslFrameEnqueFrameAtBack) (dslFrame *fMain, dslFrame *f);
-+ void (SM_DECL *__DslFrameEnqueBufferAtFront) (dslFrame *f, dslFrameBuffer *b);
-+ void (SM_DECL *__DslFrameEnqueFrameAtFront) (dslFrame *fMain, dslFrame *f);
-+ dslFrameBuffer * (SM_DECL *__DslFrameDequeBuffer) (dslFrame *pFrame);
-+
-+ void * (SM_DECL *__DslFrameAllocMemForFrames) (ulong frameNum);
-+ void (SM_DECL *__DslFrameFreeMemForFrames) (void *hMem);
-+ dslFrame * (SM_DECL *__DslFrameAllocFrame) (void *handle);
-+ void (SM_DECL *__DslFrameFreeFrame) (void *handle, dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameAllocMemForBuffers) (void **ppMemPool, ulong bufNum, ulong memSize);
-+ void (SM_DECL *__DslFrameFreeMemForBuffers) (void *hMem, ulong memSize, void *pMemPool);
-+ dslFrameBuffer * (SM_DECL *__DslFrameAllocBuffer) (void *handle, void *pMem, ulong length);
-+ void (SM_DECL *__DslFrameFreeBuffer) (void *handle, dslFrameBuffer *pBuf);
-+
-+ /* for LOG file support */
-+
-+ ulong (SM_DECL *__DslFrame2Id)(void *handle, dslFrame *pFrame);
-+ void * (SM_DECL *__DslFrameId2Frame)(void *handle, ulong frameId);
-+ } dslFrameFunctions;
-+
-+#define DslFrameDeclareFunctions( name_prefix ) \
-+extern ulong SM_DECL name_prefix##BufferGetLength(dslFrameBuffer *fb); \
-+extern void * SM_DECL name_prefix##BufferGetAddress(dslFrameBuffer *fb); \
-+extern void SM_DECL name_prefix##BufferSetLength(dslFrameBuffer *fb, ulong l); \
-+extern void SM_DECL name_prefix##BufferSetAddress(dslFrameBuffer *fb, void *p); \
-+ \
-+extern void SM_DECL name_prefix##Init(dslFrame *f); \
-+extern ulong SM_DECL name_prefix##GetLength (dslFrame *pFrame); \
-+extern ulong SM_DECL name_prefix##GetBufCnt(dslFrame *pFrame); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetFirstBuffer(dslFrame *pFrame); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetNextBuffer(dslFrameBuffer *pFrBuffer); \
-+extern void SM_DECL name_prefix##SetNextBuffer(dslFrameBuffer *pFrBuf, dslFrameBuffer *pFrBufNext); \
-+extern dslFrameBuffer * SM_DECL name_prefix##GetLastBuffer(dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##GetLinkFieldAddress(dslFrame *f); \
-+extern Boolean SM_DECL name_prefix##GetOobInfo(dslFrame *f, dslOobFrameInfo *pOobInfo); \
-+extern Boolean SM_DECL name_prefix##SetOobInfo(dslFrame *f, dslOobFrameInfo *pOobInfo); \
-+extern dslFrame* SM_DECL name_prefix##GetFrameAddressFromLink(void *lnk); \
-+extern void SM_DECL name_prefix##EnqueBufferAtBack(dslFrame *f, dslFrameBuffer *b); \
-+extern void SM_DECL name_prefix##EnqueFrameAtBack(dslFrame *fMain, dslFrame *f); \
-+extern void SM_DECL name_prefix##EnqueBufferAtFront(dslFrame *f, dslFrameBuffer *b); \
-+extern void SM_DECL name_prefix##EnqueFrameAtFront(dslFrame *fMain, dslFrame *f); \
-+extern dslFrameBuffer * SM_DECL name_prefix##DequeBuffer(dslFrame *pFrame); \
-+ \
-+extern void * SM_DECL name_prefix##AllocMemForFrames(ulong frameNum); \
-+extern void SM_DECL name_prefix##FreeMemForFrames(void *hMem); \
-+extern dslFrame * SM_DECL name_prefix##AllocFrame(void *handle); \
-+extern void SM_DECL name_prefix##FreeFrame(void *handle, dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##AllocMemForBuffers(void **ppMemPool, ulong bufNum, ulong memSize); \
-+extern void SM_DECL name_prefix##FreeMemForBuffers(void *hMem, ulong memSize, void *pMemPool); \
-+extern dslFrameBuffer * SM_DECL name_prefix##AllocBuffer(void *handle, void *pMem, ulong length); \
-+extern void SM_DECL name_prefix##FreeBuffer(void *handle, dslFrameBuffer *pBuf); \
-+extern ulong SM_DECL name_prefix##2Id(void *handle, dslFrame *pFrame); \
-+extern void * SM_DECL name_prefix##Id2Frame(void *handle, ulong frameId);
-+
-+
-+#define DslFrameAssignFunctions( var, name_prefix ) do { \
-+ (var).__DslFrameBufferGetLength = name_prefix##BufferGetLength; \
-+ (var).__DslFrameBufferGetAddress= name_prefix##BufferGetAddress; \
-+ (var).__DslFrameBufferSetLength = name_prefix##BufferSetLength; \
-+ (var).__DslFrameBufferSetAddress= name_prefix##BufferSetAddress; \
-+ \
-+ (var).__DslFrameInit = name_prefix##Init; \
-+ (var).__DslFrameGetLength = name_prefix##GetLength; \
-+ (var).__DslFrameGetBufCnt = name_prefix##GetBufCnt; \
-+ (var).__DslFrameGetFirstBuffer = name_prefix##GetFirstBuffer; \
-+ (var).__DslFrameGetNextBuffer = name_prefix##GetNextBuffer; \
-+ (var).__DslFrameSetNextBuffer = name_prefix##SetNextBuffer; \
-+ (var).__DslFrameGetLastBuffer = name_prefix##GetLastBuffer; \
-+ (var).__DslFrameGetLinkFieldAddress = name_prefix##GetLinkFieldAddress; \
-+ (var).__DslFrameGetFrameAddressFromLink = name_prefix##GetFrameAddressFromLink; \
-+ \
-+ (var).__DslFrameGetOobInfo = name_prefix##GetOobInfo; \
-+ (var).__DslFrameSetOobInfo = name_prefix##SetOobInfo; \
-+ \
-+ (var).__DslFrameEnqueBufferAtBack = name_prefix##EnqueBufferAtBack; \
-+ (var).__DslFrameEnqueFrameAtBack = name_prefix##EnqueFrameAtBack; \
-+ (var).__DslFrameEnqueBufferAtFront= name_prefix##EnqueBufferAtFront; \
-+ (var).__DslFrameEnqueFrameAtFront = name_prefix##EnqueFrameAtFront; \
-+ (var).__DslFrameDequeBuffer = name_prefix##DequeBuffer; \
-+ \
-+ (var).__DslFrameAllocMemForFrames = name_prefix##AllocMemForFrames; \
-+ (var).__DslFrameFreeMemForFrames = name_prefix##FreeMemForFrames; \
-+ (var).__DslFrameAllocFrame = name_prefix##AllocFrame; \
-+ (var).__DslFrameFreeFrame = name_prefix##FreeFrame; \
-+ (var).__DslFrameAllocMemForBuffers= name_prefix##AllocMemForBuffers; \
-+ (var).__DslFrameFreeMemForBuffers = name_prefix##FreeMemForBuffers; \
-+ (var).__DslFrameAllocBuffer = name_prefix##AllocBuffer; \
-+ (var).__DslFrameFreeBuffer = name_prefix##FreeBuffer; \
-+ \
-+ (var).__DslFrame2Id = name_prefix##2Id; \
-+ (var).__DslFrameId2Frame = name_prefix##Id2Frame; \
-+} while (0)
-+
-+typedef struct
-+ {
-+ Boolean febe_I;
-+ Boolean fecc_I;
-+ Boolean los, rdi;
-+ Boolean ncd_I;
-+ Boolean hec_I;
-+#ifdef G992P3
-+ Boolean lpr;
-+#endif
-+
-+#ifdef G992P1_NEWFRAME
-+
-+ Boolean febe_F;
-+ Boolean fecc_F;
-+ Boolean ncd_F;
-+ Boolean hec_F;
-+
-+#endif
-+ } G992MonitorParams;
-+
-+typedef struct
-+ {
-+ ushort K;
-+ uchar S, R;
-+ uchar D;
-+#ifdef G992P3
-+ uchar T, SEQ;
-+#endif
-+ directionType direction;
-+
-+#ifdef G992P1_NEWFRAME
-+
-+ ushort N;
-+ ushort NF;
-+ uchar RSF;
-+
-+ uchar AS0BF, AS1BF, AS2BF, AS3BF, AEXAF;
-+ ushort AS0BI;
-+ uchar AS1BI, AS2BI, AS3BI, AEXAI;
-+
-+ uchar LS0CF, LS1BF, LS2BF, LEXLF;
-+ uchar LS0CI, LS1BI, LS2BI, LEXLI;
-+
-+ uchar mergedModeEnabled;
-+
-+#endif
-+
-+ } G992CodingParams;
-+
-+typedef struct
-+ {
-+ uchar Nlp;
-+ uchar Nbc;
-+ uchar MSGlp;
-+ ushort MSGc;
-+
-+ ulong L;
-+ ushort M;
-+ ushort T;
-+ ushort D;
-+ ushort R;
-+ ushort B;
-+ } G992p3CodingParams;
-+
-+/* Power Management Message definitions (used in command and status) */
-+
-+typedef struct
-+ {
-+ long msgType;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long msgLen;
-+ void *msgData;
-+ } msg;
-+ } param;
-+ } dslPwrMessage;
-+
-+/* Power Management commands and responses */
-+
-+#define kPwrSimpleRequest 1
-+#define kPwrL2Request 2
-+#define kPwrL2TrimRequest 3
-+
-+#define kPwrGrant 0x80
-+#define kPwrReject 0x81
-+#define kPwrL2Grant 0x82
-+#define kPwrL2Reject 0x83
-+#define kPwrL2TrimGrant 0x84
-+#define kPwrL2TrimReject 0x85
-+#define kPwrL2Grant2p 0x86
-+
-+#define kPwrBusy 0x01
-+#define kPwrInvalid 0x02
-+#define kPwrNotDesired 0x03
-+#define kPwrInfeasibleParam 0x04
-+
-+/* Power Management reason codes */
-+
-+/* OLR definitions (used in command and status) */
-+
-+typedef struct
-+ {
-+ ushort msgType;
-+ ushort nCarrs;
-+ ushort L[4];
-+ uchar B[4];
-+ void *carrParamPtr;
-+ } dslOLRMessage;
-+
-+typedef struct
-+ {
-+ uchar ind;
-+ uchar gain;
-+ uchar gb;
-+ } dslOLRCarrParam;
-+
-+typedef struct
-+ {
-+ ushort ind;
-+ uchar gain;
-+ uchar gb;
-+ } dslOLRCarrParam2p;
-+
-+/* OLR messages */
-+
-+#define kOLRRequestType1 1
-+#define kOLRRequestType2 2
-+#define kOLRRequestType3 3
-+#define kOLRRequestType4 4
-+#define kOLRRequestType5 5
-+#define kOLRRequestType6 6
-+
-+#define kOLRDeferType1 0x81
-+#define kOLRRejectType2 0x82
-+#define kOLRRejectType3 0x83
-+
-+/* OLR reason codes */
-+
-+#define kOLRBusy 1
-+#define kOLRInvalidParam 2
-+#define kOLRNotEnabled 3
-+#define kOLRNotSupported 4
-+
-+/* common EOC definitions */
-+#define kG992EocStuffingByte 0x0C
-+
-+/* showtime monitor counters */
-+#define kG992ShowtimeRSCodewordsRcved 0 /* number of Reed-Solomon codewords received */
-+#define kG992ShowtimeRSCodewordsRcvedOK 1 /* number of Reed-Solomon codewords received with all symdromes zero */
-+#define kG992ShowtimeRSCodewordsRcvedCorrectable 2 /* number of Reed-Solomon codewords received with correctable errors */
-+#define kG992ShowtimeRSCodewordsRcvedUncorrectable 3 /* number of Reed-Solomon codewords received with un-correctable errors */
-+#define kG992ShowtimeSuperFramesRcvd 4 /* number of super frames received */
-+#define kG992ShowtimeSuperFramesRcvdWrong 5 /* number of super frames received with CRC error */
-+#define kG992ShowtimeLastUncorrectableRSCount 6 /* last recorded value for kG992ShowtimeRSCodewordsRcvedUncorrectable */
-+#define kG992ShowtimeLastWrongSuperFrameCount 7 /* last recorded value for kG992ShowtimeSuperFramesRcvdWrong */
-+#define kG992ShowtimeNumOfShortResync 8 /* number of short interrupt recoveries by FEQ */
-+
-+#define kG992ShowtimeNumOfFEBE 9 /* number of other side superframe errors */
-+#define kG992ShowtimeNumOfFECC 10 /* number of other side superframe FEC errors */
-+#define kG992ShowtimeNumOfFHEC 11 /* number of far-end ATM header CRC errors */
-+#define kG992ShowtimeNumOfFOCD 12 /* number of far-end OCD events */
-+#define kG992ShowtimeNumOfFLCD 13 /* number of far-end LCD events */
-+#define kG992ShowtimeNumOfHEC 14 /* number of ATM header CRC errors */
-+#define kG992ShowtimeNumOfOCD 15 /* number of OCD events */
-+#define kG992ShowtimeNumOfLCD 16 /* number of LCD events */
-+
-+#define kG992ShowtimeNumOfMonitorCounters (kG992ShowtimeNumOfLCD+1) /* always last number + 1 */
-+#define kG992ShowtimeMonitorReportNumber 9
-+
-+#define kG992ShowtimeLCDNumShift 1
-+#define kG992ShowtimeLCDFlag 1
-+
-+typedef int (SM_DECL *dslFrameHandlerType) (void *gDslVars, void *pVc, ulong mid, dslFrame *);
-+
-+typedef void* (SM_DECL *dslHeaderHandlerType) (void *gDslVars, ulong hdr, uchar hdrHec);
-+typedef void* (SM_DECL *dslTxFrameBufferHandlerType) (void *gDslVars, int*, void*);
-+typedef void* (SM_DECL *dslRxFrameBufferHandlerType) (void *gDslVars, int, void*);
-+
-+typedef void* (SM_DECL *dslVcAllocateHandlerType) (void *gDslVars, void *);
-+typedef void (SM_DECL *dslVcFreeHandlerType) (void *gDslVars, void *);
-+typedef Boolean (SM_DECL *dslVcActivateHandlerType) (void *gDslVars, void *);
-+typedef void (SM_DECL *dslVcDeactivateHandlerType) (void *gDslVars, void *);
-+typedef Boolean (SM_DECL *dslVcConfigureHandlerType) (void *gDslVars, void *pVc, ulong mid, void *);
-+
-+typedef ulong (SM_DECL *dslLinkVc2IdHandlerType) (void *gDslVars, void *);
-+typedef void* (SM_DECL *dslLinkVcId2VcHandlerType) (void *gDslVars, ulong);
-+typedef void* (SM_DECL *dslGetFramePoolHandlerType) (void *gDslVars);
-+
-+typedef void (SM_DECL *dslLinkCloseHandlerType) (void *gDslVars);
-+typedef int (SM_DECL *dslTxDataHandlerType)(void *gDslVars, int, int, uchar*, G992MonitorParams*);
-+typedef int (SM_DECL *dslRxDataHandlerType)(void *gDslVars, int, uchar*, G992MonitorParams*);
-+
-+typedef void (SM_DECL *dslLinkStatusHandler) (void *gDslVars, ulong statusCode, ...);
-+
-+typedef Boolean (SM_DECL *dslPhyInitType) (
-+ void *gDslVars,
-+ bitMap setupMap,
-+ dslHeaderHandlerType rxCellHeaderHandlerPtr,
-+ dslRxFrameBufferHandlerType rxFrameHandlerPtr,
-+ dslTxFrameBufferHandlerType txFrameHandlerPtr,
-+ atmStatusHandler statusHandlerPtr);
-+
-+struct _dslFramerBufDesc;
-+
-+typedef Boolean (SM_DECL *dslFramerDataGetPtrHandlerType) (void *gDslVars, struct _dslFramerBufDesc *pBufDesc);
-+typedef void (SM_DECL *dslFramerDataDoneHandlerType) (void *gDslVars, struct _dslFramerBufDesc *pBufDesc);
-+
-+typedef void (SM_DECL *dslDriverCallbackType) (void *gDslVars);
-+
-+#ifdef DSL_PACKET
-+
-+typedef struct
-+ {
-+ dslFramerDataGetPtrHandlerType rxDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType rxDataDoneHandler;
-+ dslFramerDataGetPtrHandlerType txDataGetPtrHandler;
-+ dslFramerDataDoneHandlerType txDataDoneHandler;
-+ } dslPacketPhyFunctions;
-+
-+typedef Boolean (SM_DECL *dslPacketPhyInitType) (
-+ void *gDslVars,
-+ bitMap setupMap,
-+ dslPacketPhyFunctions dslPhyFunctions,
-+ dslLinkStatusHandler statusHandlerPtr);
-+
-+
-+#endif /* DSL_PACKET */
-+
-+
-+typedef int dslDirectionType;
-+typedef bitMap dslModulationType;
-+typedef bitMap dslLinkLayerType;
-+
-+/*
-+**
-+** Log data codes
-+**
-+*/
-+
-+#define kDslEyeData eyeData
-+
-+#define kDslLogComplete (inputSignalData - 1)
-+#define kDslLogInputData inputSignalData
-+#define kDslLogInputData1 (inputSignalData + 1)
-+#define kDslLogInputData2 (inputSignalData + 2)
-+#define kDslLogInputData3 (inputSignalData + 3)
-+
-+/*
-+**
-+** Status codes
-+**
-+*/
-+
-+typedef long dslStatusCode;
-+#define kFirstDslStatusCode 256
-+#define kDslError (kFirstDslStatusCode + 0)
-+#define kAtmStatus (kFirstDslStatusCode + 1)
-+#define kDslTrainingStatus (kFirstDslStatusCode + 2)
-+#define kDslConnectInfoStatus (kFirstDslStatusCode + 3)
-+#define kDslEscapeToG994p1Status (kFirstDslStatusCode + 4)
-+#define kDslFrameStatus (kFirstDslStatusCode + 5)
-+#define kDslReceivedEocCommand (kFirstDslStatusCode + 6)
-+#define kDslSendEocCommandDone (kFirstDslStatusCode + 7)
-+#define kDslSendEocCommandFailed (kFirstDslStatusCode + 8)
-+#define kDslWriteRemoteRegisterDone (kFirstDslStatusCode + 9)
-+#define kDslReadRemoteRegisterDone (kFirstDslStatusCode + 10)
-+#define kDslExternalError (kFirstDslStatusCode + 11)
-+#define kDslDspControlStatus (kFirstDslStatusCode + 12)
-+#define kDslATUHardwareAGCRequest (kFirstDslStatusCode + 13)
-+#define kDslPacketStatus (kFirstDslStatusCode + 14)
-+#define kDslG997Status (kFirstDslStatusCode + 15)
-+#define kDslPrintfStatus (kFirstDslStatusCode + 16)
-+#define kDslPrintfStatus1 (kFirstDslStatusCode + 17)
-+#define kDslExceptionStatus (kFirstDslStatusCode + 18)
-+#define kDslPingResponse (kFirstDslStatusCode + 19)
-+#define kDslShowtimeSNRMarginInfo (kFirstDslStatusCode + 20)
-+#define kDslGetOemParameter (kFirstDslStatusCode + 21)
-+#define kDslOemDataAddrStatus (kFirstDslStatusCode + 22)
-+#define kDslDataAvailStatus (kFirstDslStatusCode + 23)
-+/* #define kDslAtuChangeTxFilterRequest (kFirstDslStatusCode + 24) */
-+#define kDslTestPllPhaseResult (kFirstDslStatusCode + 25)
-+#ifdef BCM6348_SRC
-+#define kDslHardwareAGCSetPga1 (kFirstDslStatusCode + 26)
-+#define kDslHardwareAGCDecPga1 (kFirstDslStatusCode + 27)
-+#define kDslHardwareAGCIncPga1 (kFirstDslStatusCode + 28)
-+#define kDslHardwareAGCSetPga2Delta (kFirstDslStatusCode + 29)
-+#endif
-+#define kDslOLRRequestStatus (kFirstDslStatusCode + 30)
-+#define kDslOLRResponseStatus (kFirstDslStatusCode + 31)
-+#define kDslOLRBitGainUpdateStatus (kFirstDslStatusCode + 32)
-+#define kDslPwrMgrStatus (kFirstDslStatusCode + 33)
-+#define kDslEscapeToT1p413Status (kFirstDslStatusCode + 34)
-+#ifdef BCM6348_SRC
-+#define kDslHardwareAGCSetPga2 (kFirstDslStatusCode + 35)
-+#define kDslHardwareGetRcvAGC (kFirstDslStatusCode + 36)
-+#endif
-+#define kDslUpdateXmtReadPtr (kFirstDslStatusCode + 37)
-+#define kDslHardwareSetRcvAGC (kFirstDslStatusCode + 38)
-+#ifdef BCM6348_SRC
-+#define kDslSetDigUsPwrCutback (kFirstDslStatusCode + 39)
-+#endif
-+
-+#define kClientSideInitiation 0
-+#define kClientSideRespond 1
-+#define kCentralSideInitiation 2
-+#define kCentralSideRespond 3
-+
-+/* OEM parameter ID definition */
-+
-+#define kDslOemG994VendorId 1
-+#define kDslOemG994XmtNSInfo 2
-+#define kDslOemG994RcvNSInfo 3
-+#define kDslOemEocVendorId 4
-+#define kDslOemEocVersion 5
-+#define kDslOemEocSerNum 6
-+#define kDslOemT1413VendorId 7
-+#define kDslOemT1413EocVendorId 8
-+
-+typedef long dslErrorCode;
-+
-+typedef long atmStatusCode;
-+typedef long dslFramerStatusCode;
-+
-+typedef long atmErrorCode;
-+
-+typedef long dslTrainingStatusCode;
-+
-+#define kDslStartedG994p1 0
-+#define kDslStartedT1p413HS 1
-+
-+/* reserved for G.994.1: 1 ~ 8 */
-+
-+#define kDslG994p1MessageDet 100
-+#define kDslG994p1ToneDet 101
-+#define kDslG994p1RToneDet 102
-+#define kDslG994p1FlagDet 103
-+#define kDslG994p1GalfDet 104
-+#define kDslG994p1ErrorFrameDet 105
-+#define kDslG994p1BadFrameDet 106
-+#define kDslG994p1SilenceDet 107
-+#define kDslG994p1RcvTimeout 108
-+#define kDslG994p1XmtFinished 109
-+#define kDslG994p1ReturntoStartup 110
-+#define kDslG994p1InitiateCleardown 111
-+#define kDslG994p1StartupFinished 112
-+#define kDslG994p1RcvNonStandardInfo 113
-+#define kDslG994p1XmtNonStandardInfo 114
-+
-+#define kG994p1MaxNonstdMessageLength 64
-+
-+#define kDslFinishedT1p413 1100
-+#define kDslT1p413DetectedCTone 1101
-+#define kDslT1p413DetectedCAct 1102
-+#define kDslT1p413DetectedCReveille 1103
-+#define kDslT1p413DetectedRActReq 1104
-+#define kDslT1p413DetectedRQuiet1 1105
-+#define kDslT1p413DetectedRAct 1106
-+#define kDslT1p413TimeoutCReveille 1107
-+#define kDslT1p413ReturntoStartup 1108
-+
-+#define kDslG994p1Timeout 8
-+#define kDslFinishedG994p1 9
-+#define kDslStartedG992p2Training 10
-+#define kDslG992p2DetectedPilotSymbol 11
-+#define kDslG992p2DetectedReverbSymbol 12
-+#define kDslG992p2TEQCalculationDone 13
-+#define kDslG992p2TrainingFEQ 14
-+#define kDslG992p2Phase3Started 15
-+#define kDslG992p2ReceivedRates1 16
-+#define kDslG992p2ReceivedMsg1 17
-+#define kDslG992p2Phase4Started 18
-+#define kDslG992p2ReceivedRatesRA 19
-+#define kDslG992p2ReceivedMsgRA 20
-+#define kDslG992p2ReceivedRates2 21
-+#define kDslG992p2ReceivedMsg2 22
-+#define kDslG992p2ReceivedBitGainTable 23
-+#define kDslG992p2TxShowtimeActive 24
-+#define kDslG992p2RxShowtimeActive 25
-+#define kDslG992p2TxAocMessage 26
-+#define kDslG992p2RxAocMessage 27
-+#define kDslG992p2TxEocMessage 28
-+#define kDslG992p2RxEocMessage 29
-+#define kDslFinishedG992p2Training 30
-+#define kDslRecoveredFromImpulseNoise 31
-+#define kDslG992Timeout 32
-+#define kDslT1p413Isu1SglByteSymDetected 33 /* detected T1.413 Issue 1 single byte per symbol mode */
-+#define kDslG992RxPrefixOnInAFewSymbols 34
-+#define kDslG992TxPrefixOnInAFewSymbols 35
-+#define kDslAnnexCXmtCPilot1Starting 36
-+#define kDslXmtToRcvPathDelay 37
-+#define kDslFeaturesUnsupported 38
-+#define kDslG992RcvMsgCrcError 39
-+#define kDslAnnexCDetectedStartHyperframe 40
-+
-+#define kDslG992AnnexCTimeoutCPilot1Detection 41
-+#define kDslG992AnnexCTimeoutCReverb1Detection 42
-+#define kDslG992AnnexCTimeoutECTraining 43
-+#define kDslG992AnnexCTimeoutHyperframeDetector 44
-+#define kDslG992AnnexCTimeoutSendRSegue2 45
-+#define kDslG992AnnexCTimeoutDetectCSegue1 46
-+#define kDslG992AnnexCAlignmentErrDetected 47
-+#define kDslG992AnnexCTimeoutSendRSegueRA 48
-+#define kDslG992AnnexCTimeoutSendRSegue4 49
-+#define kDslG992AnnexCTimeoutCSegue2Detection 50
-+#define kDslG992AnnexCTimeoutCSegue3Detection 51
-+/* Progress report for fast retrain */
-+
-+#define kG994p1EventToneDetected 54
-+#define kDslG992p2RcvVerifiedBitAndGain 55
-+#define kDslG992p2ProfileChannelResponseCalc 56
-+#define kDslG992AnnexCTotalFEXTBits 57
-+#define kDslG992AnnexCTotalNEXTBits 58
-+#define kDslG992AnnexCTotalFEXTCarrs 59
-+#define kDslG992AnnexCTotalNEXTCarrs 60
-+
-+#define kDslG992p3ReceivedMsgFmt 61
-+#define kDslG992p3ReceivedMsgPcb 62
-+
-+#define kDslG992p3AnnexLMode 63
-+
-+/* performance monitoring report */
-+
-+#define kG992DataRcvDetectFastRSCorrection 70
-+#define kG992DataRcvDetectInterleaveRSCorrection 71
-+#define kG992DataRcvDetectFastCRCError 72
-+#define kG992DataRcvDetectInterleaveCRCError 73
-+#define kG992DataRcvDetectFastRSError 74
-+#define kG992DataRcvDetectInterleaveRSError 75
-+#define kG992DataRcvDetectLOS 76
-+#define kG992DecoderDetectRDI 77
-+#define kG992DataRcvDetectLOSRecovery 78
-+#define kG992AtmDetectHEC 79
-+#define kG992AtmDetectOCD 180
-+#define kG992AtmDetectCD 181
-+#define kG992DecoderDetectRemoteLOS 182
-+#define kG992DecoderDetectRemoteLOSRecovery 183
-+#define kG992DecoderDetectRemoteRDI 184
-+#define kG992DecoderDetectRemoteRDIRecovery 185
-+#define kG992RcvDetectSyncSymbolOffset 186
-+#define kG992Upstream2xIfftDisabled 187
-+#if defined(G992P5)
-+#define kDslG992RunAnnexaP3ModeInAnnexaP5 188 /* run Annex C mode in Annex I compiled codes */
-+#else
-+#define kDslG992RunAnnexCModeInAnnexI 188 /* run Annex C mode in Annex I compiled codes */
-+#endif
-+
-+/* OLR PHY status */
-+
-+#define kG992EventSynchSymbolDetected 189
-+#define kG992EventReverseSynchSymbolDetected 190
-+#define kG992EventL2CReverbSymbolDetected 191
-+#define kG992EventL2CSegueSymbolDetected 192
-+
-+/* ANNEX_M */
-+#define kG992EnableAnnexM 191
-+
-+#define kDslAtuChangeTxFilterRequest 192
-+
-+/* detailed error messages reports */
-+
-+#define kDslG992XmtRReverbRAOver4000 80
-+#define kDslG992XmtRReverb5Over4000 81
-+#define kDslG992RcvCSegue2Failed 82
-+#define kDslG992RcvCSegueRAFailed 83
-+#define kDslG992RcvCSegue3Failed 84
-+#define kDslG992RcvShowtimeStartedTooLate 85
-+#define kDslG992XmtRReverb3Over4000 86
-+#define kDslG992RcvFailDetCSegue1InWindow 87
-+#define kDslG992RcvCPilot1Failed 88
-+#define kDslG992RcvCReverb1Failed 89
-+#define kG992ControlAllRateOptionsFailedErr 90
-+#define kG992ControlInvalidRateOptionErr 91
-+#define kDslG992XmtInvalidXmtDErr 92
-+#define kDslG992BitAndGainCalcFailed 93
-+#define kDslG992BitAndGainVerifyFailed 94
-+
-+#define kDslT1p413RetrainToUseCorrectRAck 95
-+#define kDslUseAlternateTxFilter 96
-+#define kDslT1p413RetrainToUseCorrectIFFT 97
-+
-+typedef long dslConnectInfoStatusCode;
-+#define kG992p2XmtToneOrderingInfo 0
-+#define kG992p2RcvToneOrderingInfo 1
-+#define kG992p2XmtCodingParamsInfo 2
-+#define kG992p2RcvCodingParamsInfo 3
-+#define kG992p2TrainingRcvCarrEdgeInfo 4
-+#define kG992ShowtimeMonitoringStatus 5
-+#define kG992MessageExchangeRcvInfo 6
-+#define kG992MessageExchangeXmtInfo 7
-+#define kG994MessageExchangeRcvInfo 8
-+#define kG994MessageExchangeXmtInfo 9
-+
-+#define kDslATURClockErrorInfo 10
-+#define kDslATURcvPowerInfo 11
-+#define kDslATUAvgLoopAttenuationInfo 12
-+#define kDslHWTimeTrackingResetClockError 13
-+#define kDslHWTimeTrackingClockTweak 14
-+#define kDslATUHardwareAGCObtained 15
-+#define kDslTEQCoefInfo 16
-+#define kDslRcvCarrierSNRInfo 17
-+#define kDslMaxReceivableBitRateInfo 18
-+#define kDslHWSetDigitalEcUpdateMode 19
-+#define kDslHWEnableDigitalECUpdate 20
-+#define kDslHWDisableDigitalECUpdate 21
-+#define kDslHWEnableDigitalEC 22
-+#define kDslHWSetDigitalEcGainShift 23
-+#define kDslHWSetDigitalEcUpdateShift 24
-+#define kDslRcvPsdInfo 25
-+#define kDslHWdcOffsetInfo 26
-+#define kG994SelectedG994p1CarrierIndex 27
-+#define kDslSelectedTimingTone 28
-+
-+#define kDslHWEnableAnalogECUpdate kDslHWSetDigitalEcUpdateMode
-+#define kDslHWEnableAnalogEC kDslHWDisableDigitalECUpdate
-+
-+#define kG992AocMessageExchangeRcvInfo 29
-+#define kG992AocMessageExchangeXmtInfo 30
-+#define kG992AocBitswapTxStarted 31
-+#define kG992AocBitswapRxStarted 32
-+#define kG992AocBitswapTxCompleted 33
-+#define kG992AocBitswapRxCompleted 34
-+#define kDslChannelResponseLog 35
-+#define kDslChannelResponseLinear 36
-+#define kDslChannelQuietLineNoise 37
-+
-+#define kDslATUCXmtPowerCutbackInfo 40
-+#define kDslATURXmtPowerCutbackInfo 41
-+#define kDslATUCXmtPowerInfo 42
-+#define kDslATURXmtPowerInfo 43
-+
-+#define kDslFramingModeInfo 50
-+#define kDslG992VendorID 51
-+
-+#ifdef BCM6348_SRC
-+#define kDslHWSetRcvFir2OutputScale 52
-+#endif
-+
-+#define kDslSignalAttenuation 53
-+#define kDslAttainableNetDataRate 54
-+#define kDslHLinScale 55
-+
-+#define kG992p3XmtCodingParamsInfo 60
-+#define kG992p3RcvCodingParamsInfo 61
-+#define kG992p3PwrStateInfo 62
-+#define kG992PilotToneInfo 63
-+
-+#define kDslSetPilotEyeDisplay 64
-+
-+#define kDslAturHwAgcResolutionMask (0xFFFFFFF8)
-+#define kDslAturHwAgcMinGain ((-12)<<4)
-+#ifndef BCM6348_SRC
-+#define kDslAturHwAgcMaxGain (30<<4)
-+#else
-+#define kDslAturHwAgcMaxGain (36<<4)
-+#endif
-+
-+#define kDslFrameStatusSend 1
-+#define kDslFrameStatusSendComplete 2
-+#define kDslFrameStatusRcv 3
-+#define kDslFrameStatusReturn 4
-+
-+typedef struct _dslFramerStatus
-+ {
-+ dslFramerStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nRxFrameTotal;
-+ long nRxFrameError;
-+ long nTxFrameTotal;
-+ } statistic;
-+ } param;
-+ } dslFramerStatus;
-+
-+typedef struct
-+ {
-+ dslStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ atmStatusCode code;
-+ union
-+ {
-+ long value;
-+ dslErrorCode error;
-+ struct
-+ {
-+ long vci;
-+ long mid;
-+ long aalType;
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long vcId;
-+ long vci;
-+ long aalType;
-+ ulong fwdPeakCellTime;
-+ ulong backPeakCellTime;
-+ } vcInfo;
-+ struct
-+ {
-+ long cellHdr;
-+ long oamCmd;
-+ } oamInfo;
-+ struct
-+ {
-+ void *pVc;
-+ char *pHdr;
-+ void *cellHdr;
-+ void *cellData;
-+ } cellInfo;
-+ struct
-+ {
-+ long totalBits;
-+ long errBits;
-+ } bertInfo;
-+ } param;
-+ } atmStatus;
-+#ifdef DSL_PACKET
-+ dslFramerStatus dslPacketStatus;
-+#endif
-+#ifdef G997_1_FRAMER
-+ dslFramerStatus g997Status;
-+#endif
-+ struct
-+ {
-+ dslTrainingStatusCode code;
-+ long value;
-+ } dslTrainingInfo;
-+ struct
-+ {
-+ dslConnectInfoStatusCode code;
-+ long value;
-+ void *buffPtr;
-+ } dslConnectInfo;
-+ struct
-+ {
-+ long maxMarginCarrier;
-+ long maxSNRMargin;
-+ long minMarginCarrier;
-+ long minSNRMargin;
-+ long avgSNRMargin;
-+ long nCarriers;
-+ void *buffPtr;
-+ } dslShowtimeSNRMarginInfo;
-+ struct
-+ {
-+ long code;
-+ long vcId;
-+ long timeStamp;
-+ } dslFrameInfo;
-+#ifdef G997_1
-+ struct
-+ {
-+ long msgId;
-+ long msgType;
-+ char *dataPtr;
-+ } dslClearEocMsg;
-+#endif
-+ struct
-+ {
-+ char *fmt;
-+ long argNum;
-+ void *argPtr;
-+ } dslPrintfMsg;
-+ struct
-+ {
-+ ulong nBits;
-+ ulong nBlocks;
-+ ulong nBitErrors;
-+ ulong nBlockErrors;
-+
-+ ulong nAudioBits;
-+ ulong nAudioBlocks;
-+ ulong nAudioSyncErrors;
-+ ulong nAudioBlockErrors;
-+ } testResults;
-+ struct
-+ {
-+ ulong code;
-+ uchar *valuePtr;
-+ ulong length;
-+ } dslDataRegister;
-+ struct
-+ {
-+ ulong code;
-+ char *desc;
-+ } dslExternalError;
-+ struct
-+ {
-+ ulong numberOfCalls;
-+ ulong txSignalChecksum;
-+ ulong rxSignalChecksum;
-+ ulong eyeDataChecksum;
-+ } checksums;
-+ struct
-+ {
-+ int sp;
-+ int argc;
-+ int *argv;
-+ int *stackPtr;
-+ int stackLen;
-+ } dslException;
-+ struct
-+ {
-+ ulong paramId;
-+ void *dataPtr;
-+ ulong dataLen;
-+ } dslOemParameter;
-+ struct
-+ {
-+ void *dataPtr;
-+ ulong dataLen;
-+ } dslDataAvail;
-+ dslOLRMessage dslOLRRequest;
-+ dslPwrMessage dslPwrMsg;
-+ } param;
-+ } dslStatusStruct;
-+
-+typedef void (SM_DECL *dslStatusHandlerType) (void *gDslVars, dslStatusStruct*);
-+
-+
-+/*
-+**
-+** Command codes
-+**
-+*/
-+
-+typedef long dslCommandCode;
-+#define kFirstDslCommandCode 256
-+#define kDslIdleCmd (kFirstDslCommandCode + 0)
-+#define kDslIdleRcvCmd (kFirstDslCommandCode + 1)
-+#define kDslIdleXmtCmd (kFirstDslCommandCode + 2)
-+#define kDslStartPhysicalLayerCmd (kFirstDslCommandCode + 3)
-+#define kDslStartRetrainCmd (kFirstDslCommandCode + 4)
-+#define kDslSetFrameFunctions (kFirstDslCommandCode + 5)
-+#define kDslSendEocCommand (kFirstDslCommandCode + 6)
-+#define kDslWriteRemoteRegister (kFirstDslCommandCode + 7)
-+#define kDslReadRemoteRegister (kFirstDslCommandCode + 8)
-+#define kDslWriteLocalRegister (kFirstDslCommandCode + 9)
-+#define kDslReadLocalRegister (kFirstDslCommandCode + 10)
-+#define kDslStoreHardwareAGCCmd (kFirstDslCommandCode + 11)
-+#define kDslSetCommandHandlerCmd (kFirstDslCommandCode + 12)
-+#define kSetLinkLayerStatusHandlerCmd (kFirstDslCommandCode + 13)
-+#define kDslSetG997Cmd (kFirstDslCommandCode + 14)
-+#define kDslLoopbackCmd (kFirstDslCommandCode + 15)
-+#define kDslDiagSetupCmd (kFirstDslCommandCode + 16)
-+#define kDslSetDriverCallbackCmd (kFirstDslCommandCode + 17)
-+#define kDslDiagStopLogCmd (kFirstDslCommandCode + 18)
-+#define kDslDiagStartBERT (kFirstDslCommandCode + 19)
-+#define kDslDiagStopBERT (kFirstDslCommandCode + 20)
-+#define kDslPingCmd (kFirstDslCommandCode + 21)
-+#define kDslDyingGaspCmd (kFirstDslCommandCode + 22)
-+#define kDslTestCmd (kFirstDslCommandCode + 23)
-+#define kDslFilterSNRMarginCmd (kFirstDslCommandCode + 24)
-+#define kDslAtmVcMapTableChanged (kFirstDslCommandCode + 25)
-+#define kDslGetOemDataAddrCmd (kFirstDslCommandCode + 26)
-+#define kDslAtmReportHEC (kFirstDslCommandCode + 27)
-+#define kDslAtmReportCD (kFirstDslCommandCode + 28)
-+#define kDslSetXmtGainCmd (kFirstDslCommandCode + 29)
-+#define kDslSetStatusBufferCmd (kFirstDslCommandCode + 30)
-+#define kDslAfeTestCmd (kFirstDslCommandCode + 31)
-+#define kDslI432ResetCmd (kFirstDslCommandCode + 32)
-+#define kDslSetRcvGainCmd (kFirstDslCommandCode + 33)
-+#define kDslBypassRcvHpfCmd (kFirstDslCommandCode + 34)
-+#define kDslWriteAfeRegCmd (kFirstDslCommandCode + 35)
-+#define kDslReadAfeRegCmd (kFirstDslCommandCode + 36)
-+#define kDslOLRRequestCmd (kFirstDslCommandCode + 37)
-+#define kDslOLRResponseCmd (kFirstDslCommandCode + 38)
-+#define kDslI432SetScrambleCmd (kFirstDslCommandCode + 39)
-+#define kDslPwrMgrCmd (kFirstDslCommandCode + 40)
-+#define kDslAtmGfcMappingCmd (kFirstDslCommandCode + 41)
-+
-+#ifdef BCM6348_SRC
-+#define kDslEnablePwmSyncClk (kFirstDslCommandCode + 42)
-+#define kDslSetPwmSyncClkFreq (kFirstDslCommandCode + 43)
-+#endif
-+
-+#define kG994p1Duplex 1
-+#define kG994p1HalfDuplex 2
-+
-+/* Eoc Messages from ATU-C to ATU-R */
-+#define kDslEocHoldStateCmd 1
-+#define kDslEocReturnToNormalCmd 2
-+#define kDslEocPerformSelfTestCmd 3
-+#define kDslEocRequestCorruptCRCCmd 4
-+#define kDslEocRequestEndCorruptCRCCmd 5
-+#define kDslEocNotifyCorruptCRCCmd 6
-+#define kDslEocNotifyEndCorruptCRCCmd 7
-+#define kDslEocRequestTestParametersUpdateCmd 8
-+#define kDslEocGrantPowerDownCmd 9
-+#define kDslEocRejectPowerDownCmd 10
-+
-+/* Eoc Messages from ATU-R to ATU-C */
-+#define kDslEocRequestPowerDownCmd 11
-+#define kDslEocDyingGaspCmd 12
-+
-+/* Clear Eoc Messages */
-+#define kDslClearEocFirstCmd 100
-+#define kDslClearEocSendFrame 100
-+#define kDslClearEocSendComplete 101
-+#define kDslClearEocRcvedFrame 102
-+#define kDslClearEocSendComplete2 103
-+
-+#define kDslClearEocMsgLengthMask 0xFFFF
-+#define kDslClearEocMsgNumMask 0xFF0000
-+#define kDslClearEocMsgDataVolatileMask 0x1000000
-+#define kDslClearEocMsgDataVolatile kDslClearEocMsgDataVolatileMask
-+#define kDslClearEocMsgExtraSendComplete 0x2000000
-+
-+/* ADSL Link Power States */
-+#define kDslPowerFullOn 0
-+#define kDslPowerLow 1
-+#define kDslPowerIdle 3
-+
-+/* ATU-R Data Registers */
-+#define kDslVendorIDRegister 1
-+#define kDslRevisionNumberRegister 2
-+#define kDslSerialNumberRegister 3
-+#define kDslSelfTestResultsRegister 4
-+#define kDslLineAttenuationRegister 5
-+#define kDslSnrMarginRegister 6
-+#define kDslAturConfigurationRegister 7
-+#define kDslLinkStateRegister 8
-+
-+#define kDslVendorIDRegisterLength 8
-+#define kDslRevisionNumberRegisterLength 32
-+#define kDslSerialNumberRegisterLength 32
-+#define kDslSelfTestResultsRegisterLength 1
-+#define kDslLineAttenuationRegisterLength 1
-+#define kDslSnrMarginRegisterLength 1
-+#define kDslAturConfigurationRegisterLength 30
-+#define kDslLinkStateRegisterLength 1
-+
-+/* Dsl Diags setup flags */
-+#define kDslDiagEnableEyeData 1
-+#define kDslDiagEnableLogData 2
-+
-+/* Dsl test commands */
-+typedef long dslTestCmdType;
-+#define kDslTestBackToNormal 0
-+#define kDslTestReverb 1
-+#define kDslTestMedley 2
-+#define kDslTestToneSelection 3
-+#define kDslTestNoAutoRetrain 4
-+#define kDslTestMarginTweak 5
-+#define kDslTestEstimatePllPhase 6
-+#define kDslTestReportPllPhaseStatus 7
-+#define kDslTestAfeLoopback 8
-+#define kDslTestL3 9
-+#define kDslTestAdsl2DiagMode 10
-+#define kDslTestRetL0 11
-+
-+/* Xmt gain default setting */
-+#define kDslXmtGainAuto 0x80000000
-+
-+/* Unit (AFE) test commands */
-+#define kDslAfeTestLoadImage 0
-+#define kDslAfeTestPatternSend 1
-+#define kDslAfeTestLoadImageOnly 2
-+#define kDslAfeTestPhyRun 3
-+#define kDslAfeTestLoadBuffer 4
-+
-+typedef struct
-+ {
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+ ushort downstreamMinCarr, downstreamMaxCarr;
-+#else
-+ uchar downstreamMinCarr, downstreamMaxCarr;
-+#endif
-+ uchar upstreamMinCarr, upstreamMaxCarr;
-+ }carrierInfo;
-+
-+#if defined(G992P3) && !defined(BCM6348_SRC)
-+#define FAST_TEXT_TYPE
-+#else
-+#define FAST_TEXT_TYPE FAST_TEXT
-+#endif
-+
-+#if defined(BCM6348_SRC)
-+#define BCM6348_TEMP_MOVE_TO_LMEM
-+#else
-+#define BCM6348_TEMP_MOVE_TO_LMEM
-+#endif
-+
-+#ifdef G992P3
-+#define PRINT_DEBUG_INFO
-+#else
-+#define PRINT_DEBUG_INFO
-+#endif
-+
-+#ifdef G992P3
-+
-+#define kG992p3MaxSpectBoundsUpSize 16
-+#define kG992p3MaxSpectBoundsDownSize 16
-+
-+/* G.994 definitions */
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 1 ***/
-+
-+#define kG994p1G992p3AnnexASpectrumBoundsUpstream 0x01
-+#define kG994p1G992p3AnnexASpectrumShapingUpstream 0x02
-+#define kG994p1G992p3AnnexASpectrumBoundsDownstream 0x04
-+#define kG994p1G992p3AnnexASpectrumShapingDownstream 0x08
-+#define kG994p1G992p3AnnexATxImageAboveNyquistFreq 0x10
-+#define kG994p1G992p3AnnexLReachExtended 0x20
-+#define kG994p1G992p3AnnexMSubModePSDMasks 0x20
-+
-+#define kG994p1G992p3AnnexLUpNarrowband 0x02
-+#define kG994p1G992p3AnnexLUpWideband 0x01
-+#define kG994p1G992p3AnnexLDownNonoverlap 0x01
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 2 ***/
-+
-+#define kG994p1G992p3AnnexADownOverheadDataRate 0x01
-+#define kG994p1G992p3AnnexAUpOverheadDataRate 0x02
-+#define kG994p1G992p3AnnexAMaxNumberDownTPSTC 0x04
-+#define kG994p1G992p3AnnexAMaxNumberUpTPSTC 0x08
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 3,5,7,9 ***/
-+
-+#define kG994p1G992p3AnnexADownSTM_TPS_TC 0x01
-+#define kG994p1G992p3AnnexAUpSTM_TPS_TC 0x02
-+#define kG994p1G992p3AnnexADownATM_TPS_TC 0x04
-+#define kG994p1G992p3AnnexAUpATM_TPS_TC 0x08
-+#define kG994p1G992p3AnnexADownPTM_TPS_TC 0x10
-+#define kG994p1G992p3AnnexAUpPTM_TPS_TC 0x20
-+
-+/*** Standard Info SPar2: G.992.3 Annex A Octet 4,6,8,10 ***/
-+
-+#define kG994p1G992p3AnnexADownPMS_TC_Latency 0x01
-+#define kG994p1G992p3AnnexAUpPMS_TC_Latency 0x02
-+
-+/***
-+ * TSSI
-+ *
-+ * TSSI information is specified in 2 parts: subcarrier index,
-+ * tssi value, and an indication of whether or no the tone specified
-+ * is part of the supported set.
-+ *
-+ * The subcarrier index information is currently stored in the
-+ * dsSubcarrierIndex array defined below. The tssi value are stored
-+ * in the dsLog_tss array.
-+ *
-+ * The subcarrier index information only occupies the lower 12 bits
-+ * of the available 16 bits (short type). Therefore, we will pack the
-+ * supported set information in bit 15.
-+ */
-+#define kG992DsSubCarrierIndexMask (0x0fff) /* AND mask to ectract ds subcarrier index */
-+#define kG992DsSubCarrierSuppSetMask (0x8000) /* AND mask to extract supported set indication */
-+
-+#define G992GetDsSubCarrierIndex(arg) ((arg) & kG992DsSubCarrierIndexMask)
-+#define G992GetDsSubCarrierSuppSetIndication(arg) (((arg) & kG992DsSubCarrierSuppSetMask) >> 15)
-+
-+/* Caution: Do not change anything in this structure definition, including associated constant */
-+/* This structure definition is used only by the driver and any change impose incompatibility issue in driver */
-+/* The structure following this structure (g992p3PhyDataPumpCapabilities) can be changed in PHY application */
-+
-+typedef struct
-+ {
-+ Boolean rcvNTREnabled, shortInitEnabled, diagnosticsModeEnabled;
-+
-+ char featureSpectrum, featureOverhead;
-+ char featureTPS_TC[4], featurePMS_TC[4];
-+
-+ short rcvNOMPSDus, rcvMAXNOMPSDus, rcvMAXNOMATPus;
-+ short usSubcarrierIndex[kG992p3MaxSpectBoundsUpSize],
-+ usLog_tss[kG992p3MaxSpectBoundsUpSize];
-+ short numUsSubcarrier;
-+ short rcvNOMPSDds, rcvMAXNOMPSDds, rcvMAXNOMATPds;
-+ short dsSubcarrierIndex[kG992p3MaxSpectBoundsDownSize],
-+ dsLog_tss[kG992p3MaxSpectBoundsDownSize];
-+ short numDsSubcarrier;
-+ uchar sizeIDFT, fillIFFT;
-+ uchar readsl2Upstream, readsl2Downstream;
-+ uchar minDownOverheadDataRate, minUpOverheadDataRate;
-+ uchar maxDownSTM_TPSTC, maxDownATM_TPSTC, maxDownPTM_TPSTC;
-+ uchar maxUpSTM_TPSTC, maxUpATM_TPSTC, maxUpPTM_TPSTC;
-+
-+ short minDownSTM_TPS_TC[4], maxDownSTM_TPS_TC[4],
-+ minRevDownSTM_TPS_TC[4], maxDelayDownSTM_TPS_TC[4];
-+ uchar maxErrorDownSTM_TPS_TC[4], minINPDownSTM_TPS_TC[4];
-+ short minUpSTM_TPS_TC[4], maxUpSTM_TPS_TC[4],
-+ minRevUpSTM_TPS_TC[4], maxDelayUpSTM_TPS_TC[4];
-+ uchar maxErrorUpSTM_TPS_TC[4], minINPUpSTM_TPS_TC[4];
-+
-+ short maxDownPMS_TC_Latency[4], maxUpPMS_TC_Latency[4];
-+ short maxDownR_PMS_TC_Latency[4], maxDownD_PMS_TC_Latency[4];
-+ short maxUpR_PMS_TC_Latency[4], maxUpD_PMS_TC_Latency[4];
-+
-+ short minDownATM_TPS_TC[4], maxDownATM_TPS_TC[4],
-+ minRevDownATM_TPS_TC[4], maxDelayDownATM_TPS_TC[4];
-+ uchar maxErrorDownATM_TPS_TC[4], minINPDownATM_TPS_TC[4];
-+ short minUpATM_TPS_TC[4], maxUpATM_TPS_TC[4],
-+ minRevUpATM_TPS_TC[4], maxDelayUpATM_TPS_TC[4];
-+ uchar maxErrorUpATM_TPS_TC[4], minINPUpATM_TPS_TC[4];
-+
-+ short minDownPTM_TPS_TC[4], maxDownPTM_TPS_TC[4],
-+ minRevDownPTM_TPS_TC[4], maxDelayDownPTM_TPS_TC[4];
-+ uchar maxErrorDownPTM_TPS_TC[4], minINPDownPTM_TPS_TC[4];
-+ short minUpPTM_TPS_TC[4], maxUpPTM_TPS_TC[4],
-+ minRevUpPTM_TPS_TC[4], maxDelayUpPTM_TPS_TC[4];
-+ uchar maxErrorUpPTM_TPS_TC[4], minINPUpPTM_TPS_TC[4];
-+
-+ ushort subModePSDMasks;
-+ } g992p3DataPumpCapabilities;
-+
-+#define kG992p3p5MaxSpectBoundsUpSize 16
-+#define kG992p3p5MaxSpectBoundsDownSize 32
-+
-+typedef struct
-+ {
-+ Boolean rcvNTREnabled, shortInitEnabled, diagnosticsModeEnabled;
-+
-+ char featureSpectrum, featureOverhead;
-+ char featureTPS_TC[4], featurePMS_TC[4];
-+
-+ short rcvNOMPSDus, rcvMAXNOMPSDus, rcvMAXNOMATPus;
-+ short usSubcarrierIndex[kG992p3p5MaxSpectBoundsUpSize],
-+ usLog_tss[kG992p3p5MaxSpectBoundsUpSize];
-+ short numUsSubcarrier;
-+ short rcvNOMPSDds, rcvMAXNOMPSDds, rcvMAXNOMATPds;
-+ short dsSubcarrierIndex[kG992p3p5MaxSpectBoundsDownSize],
-+ dsLog_tss[kG992p3p5MaxSpectBoundsDownSize];
-+ short numDsSubcarrier;
-+ uchar sizeIDFT, fillIFFT;
-+ uchar readsl2Upstream, readsl2Downstream;
-+ uchar minDownOverheadDataRate, minUpOverheadDataRate;
-+ uchar maxDownSTM_TPSTC, maxDownATM_TPSTC, maxDownPTM_TPSTC;
-+ uchar maxUpSTM_TPSTC, maxUpATM_TPSTC, maxUpPTM_TPSTC;
-+
-+ short minDownSTM_TPS_TC[4], maxDownSTM_TPS_TC[4],
-+ minRevDownSTM_TPS_TC[4], maxDelayDownSTM_TPS_TC[4];
-+ uchar maxErrorDownSTM_TPS_TC[4], minINPDownSTM_TPS_TC[4];
-+ short minUpSTM_TPS_TC[4], maxUpSTM_TPS_TC[4],
-+ minRevUpSTM_TPS_TC[4], maxDelayUpSTM_TPS_TC[4];
-+ uchar maxErrorUpSTM_TPS_TC[4], minINPUpSTM_TPS_TC[4];
-+
-+ short maxDownPMS_TC_Latency[4], maxUpPMS_TC_Latency[4];
-+ short maxDownR_PMS_TC_Latency[4], maxDownD_PMS_TC_Latency[4];
-+ short maxUpR_PMS_TC_Latency[4], maxUpD_PMS_TC_Latency[4];
-+
-+ short minDownATM_TPS_TC[4], maxDownATM_TPS_TC[4],
-+ minRevDownATM_TPS_TC[4], maxDelayDownATM_TPS_TC[4];
-+ uchar maxErrorDownATM_TPS_TC[4], minINPDownATM_TPS_TC[4];
-+ short minUpATM_TPS_TC[4], maxUpATM_TPS_TC[4],
-+ minRevUpATM_TPS_TC[4], maxDelayUpATM_TPS_TC[4];
-+ uchar maxErrorUpATM_TPS_TC[4], minINPUpATM_TPS_TC[4];
-+
-+ short minDownPTM_TPS_TC[4], maxDownPTM_TPS_TC[4],
-+ minRevDownPTM_TPS_TC[4], maxDelayDownPTM_TPS_TC[4];
-+ uchar maxErrorDownPTM_TPS_TC[4], minINPDownPTM_TPS_TC[4];
-+ short minUpPTM_TPS_TC[4], maxUpPTM_TPS_TC[4],
-+ minRevUpPTM_TPS_TC[4], maxDelayUpPTM_TPS_TC[4];
-+ uchar maxErrorUpPTM_TPS_TC[4], minINPUpPTM_TPS_TC[4];
-+
-+ ushort subModePSDMasks;
-+ } g992p3PhyDataPumpCapabilities;
-+#endif
-+
-+typedef struct
-+ {
-+ dslModulationType modulations;
-+ bitMap auxFeatures;
-+ bitMap features;
-+ bitMap demodCapabilities;
-+ bitMap demodCapabilities2;
-+ ushort noiseMargin; /* Q4 dB */
-+#ifdef G992_ATUC
-+ short xmtRSf, xmtRS, xmtS, xmtD;
-+ short rcvRSf, rcvRS, rcvS, rcvD;
-+#endif
-+#ifdef G992P1_ANNEX_A
-+ bitMap subChannelInfo;
-+ carrierInfo carrierInfoG992p1;
-+#endif
-+#ifdef G992P1_ANNEX_B
-+ bitMap subChannelInfoAnnexB;
-+ carrierInfo carrierInfoG992p1AnnexB;
-+#endif
-+#ifdef G992_ANNEXC
-+ bitMap subChannelInfoAnnexC;
-+ carrierInfo carrierInfoG992p1AnnexC;
-+#endif
-+#if defined(G992P1_ANNEX_I)
-+ bitMap subChannelInfoAnnexI;
-+ carrierInfo carrierInfoG992p1AnnexI;
-+#endif
-+#ifdef G992P5
-+ bitMap subChannelInfop5;
-+ carrierInfo carrierInfoG992p5;
-+#endif
-+#if defined(G992P2) || (defined(G992P1_ANNEX_A) && defined(G992P1_ANNEX_A_USED_FOR_G992P2))
-+ carrierInfo carrierInfoG992p2;
-+#endif
-+ ushort maxDataRate;
-+ uchar minDataRate;
-+#ifdef G992P3
-+ g992p3DataPumpCapabilities *carrierInfoG992p3AnnexA;
-+#endif
-+#ifdef G992P5
-+ g992p3DataPumpCapabilities *carrierInfoG992p5AnnexA;
-+#endif
-+ } dslDataPumpCapabilities;
-+
-+struct __dslCommandStruct;
-+typedef Boolean (*dslCommandHandlerType) (void *gDslVars, struct __dslCommandStruct*);
-+typedef struct __dslCommandStruct
-+ {
-+ dslCommandCode command;
-+ union
-+ {
-+ long value;
-+ Boolean flag;
-+ struct
-+ {
-+ dslTestCmdType type;
-+ union
-+ {
-+ struct
-+ {
-+ ulong xmtStartTone, xmtNumOfTones;
-+ ulong rcvStartTone, rcvNumOfTones;
-+ uchar *xmtMap, *rcvMap;
-+ } toneSelectSpec;
-+ struct
-+ {
-+ long extraPowerRequestQ4dB;
-+ long numOfCarriers;
-+ char *marginTweakTableQ4dB;
-+ } marginTweakSpec;
-+ } param;
-+ } dslTestSpec;
-+ struct
-+ {
-+ dslDirectionType direction;
-+ dslDataPumpCapabilities capabilities;
-+ } dslModeSpec;
-+ struct
-+ {
-+ bitMap setup;
-+ ulong eyeConstIndex1;
-+ ulong eyeConstIndex2;
-+ ulong logTime;
-+ } dslDiagSpec;
-+ struct
-+ {
-+ void *pBuf;
-+ ulong bufSize;
-+ } dslStatusBufSpec;
-+ struct
-+ {
-+ ulong type;
-+ void *afeParamPtr;
-+ ulong afeParamSize;
-+ void *imagePtr;
-+ ulong imageSize;
-+ } dslAfeTestSpec;
-+ struct
-+ {
-+ dslLinkLayerType type;
-+ bitMap setup;
-+ union
-+ {
-+ struct
-+ {
-+ dataRateMap rxDataRate;
-+ dataRateMap txDataRate;
-+ long rtDelayQ4ms;
-+ ulong rxBufNum;
-+ ulong rxCellsInBuf;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslPhyInitType atmPhyInitPtr;
-+ } atmLinkSpec;
-+ struct
-+ {
-+ dslHeaderHandlerType rxHeaderHandlerPtr;
-+ dslRxFrameBufferHandlerType rxDataHandlerPtr;
-+ dslTxFrameBufferHandlerType txHandlerPtr;
-+ } atmPhyLinkSpec;
-+#ifdef DSL_PACKET
-+ struct
-+ {
-+ ulong rxBufNum;
-+ ulong rxBufSize;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslPacketPhyInitType dslPhyInitPtr;
-+ } dslPacketLinkSpec;
-+ dslPacketPhyFunctions dslPacketPhyLinkSpec;
-+#endif
-+ struct
-+ {
-+ txDataHandlerType txDataHandlerPtr;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ } nullLinkSpec;
-+ } param;
-+ } dslLinkLayerSpec;
-+#ifdef G997_1
-+#ifdef G997_1_FRAMER
-+ struct
-+ {
-+ bitMap setup;
-+ ulong rxBufNum;
-+ ulong rxBufSize;
-+ ulong rxPacketNum;
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ } dslG997Cmd;
-+#endif
-+ struct
-+ {
-+ long msgId;
-+ long msgType;
-+ char *dataPtr;
-+ } dslClearEocMsg;
-+#endif
-+ struct
-+ {
-+ ulong code;
-+ uchar *valuePtr;
-+ ulong length;
-+ } dslDataRegister;
-+ union
-+ {
-+ dslStatusHandlerType statusHandlerPtr;
-+ dslCommandHandlerType commandHandlerPtr;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+#if defined(DEBUG_DATA_HANDLER)
-+ debugDataHandlerType debugDataHandlerPtr;
-+#endif
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslDriverCallbackType driverCallback;
-+ } handlerSpec;
-+#if !defined(CHIP_SRC) || defined(DSL_FRAME_FUNCTIONS)
-+ dslFrameFunctions DslFunctions;
-+#endif
-+ dslOLRMessage dslOLRRequest;
-+ dslPwrMessage dslPwrMsg;
-+ } param;
-+ } dslCommandStruct;
-+
-+
-+
-+
-+typedef struct
-+ {
-+ dslCommandHandlerType linkCommandHandlerPtr;
-+ timerHandlerType linkTimerHandlerPtr;
-+ dslLinkCloseHandlerType linkCloseHandlerPtr;
-+
-+ dslFrameHandlerType linkSendHandlerPtr;
-+ dslFrameHandlerType linkReturnHandlerPtr;
-+
-+ dslVcAllocateHandlerType linkVcAllocateHandlerPtr;
-+ dslVcFreeHandlerType linkVcFreeHandlerPtr;
-+ dslVcActivateHandlerType linkVcActivateHandlerPtr;
-+ dslVcDeactivateHandlerType linkVcDeactivateHandlerPtr;
-+ dslVcConfigureHandlerType linkVcConfigureHandlerPtr;
-+
-+ dslLinkVc2IdHandlerType linkVc2IdHandlerPtr;
-+ dslLinkVcId2VcHandlerType linkVcId2VcHandlerPtr;
-+ dslGetFramePoolHandlerType linkGetFramePoolHandlerPtr;
-+
-+#ifndef ADSLCORE_ONLY
-+ dslHeaderHandlerType linkRxCellHeaderHandlerPtr;
-+ dslRxFrameBufferHandlerType linkRxCellDataHandlerPtr;
-+ dslTxFrameBufferHandlerType linkTxCellHandlerPtr;
-+#endif
-+
-+ txDataHandlerType linkTxDataHandlerPtr;
-+ rxDataHandlerType linkRxDataHandlerPtr;
-+ } linkLayerFunctions;
-+
-+#ifndef ADSLCORE_ONLY
-+
-+#define LinkLayerAssignFunctions( var, name_prefix ) do { \
-+ (var).linkCommandHandlerPtr = name_prefix##CommandHandler; \
-+ (var).linkTimerHandlerPtr = name_prefix##TimerHandler; \
-+ (var).linkCloseHandlerPtr = name_prefix##CloseHandler; \
-+ \
-+ (var).linkSendHandlerPtr = name_prefix##SendFrameHandler; \
-+ (var).linkReturnHandlerPtr = name_prefix##ReturnFrameHandler; \
-+ \
-+ (var).linkVcAllocateHandlerPtr = name_prefix##VcAllocateHandler; \
-+ (var).linkVcFreeHandlerPtr = name_prefix##VcFreeHandler; \
-+ (var).linkVcActivateHandlerPtr = name_prefix##VcActivateHandler; \
-+ (var).linkVcDeactivateHandlerPtr = name_prefix##VcDeactivateHandler; \
-+ (var).linkVcConfigureHandlerPtr = name_prefix##VcConfigureHandler; \
-+ \
-+ (var).linkVc2IdHandlerPtr = name_prefix##Vc2IdHandler; \
-+ (var).linkVcId2VcHandlerPtr = name_prefix##VcId2VcHandler; \
-+ (var).linkGetFramePoolHandlerPtr = name_prefix##GetFramePoolHandler; \
-+ \
-+ (var).linkRxCellHeaderHandlerPtr = name_prefix##RxCellHeaderHandler; \
-+ (var).linkRxCellDataHandlerPtr = name_prefix##RxCellDataHandler; \
-+ (var).linkTxCellHandlerPtr = name_prefix##TxCellHandler; \
-+ \
-+ (var).linkTxDataHandlerPtr = name_prefix##TxDataHandler; \
-+ (var).linkRxDataHandlerPtr = name_prefix##RxDataHandler; \
-+} while (0)
-+
-+#else
-+
-+#define LinkLayerAssignFunctions( var, name_prefix ) do { \
-+ (var).linkCommandHandlerPtr = name_prefix##CommandHandler; \
-+ (var).linkTimerHandlerPtr = name_prefix##TimerHandler; \
-+ (var).linkCloseHandlerPtr = name_prefix##CloseHandler; \
-+ \
-+ (var).linkSendHandlerPtr = name_prefix##SendFrameHandler; \
-+ (var).linkReturnHandlerPtr = name_prefix##ReturnFrameHandler; \
-+ \
-+ (var).linkVcAllocateHandlerPtr = name_prefix##VcAllocateHandler; \
-+ (var).linkVcFreeHandlerPtr = name_prefix##VcFreeHandler; \
-+ (var).linkVcActivateHandlerPtr = name_prefix##VcActivateHandler; \
-+ (var).linkVcDeactivateHandlerPtr = name_prefix##VcDeactivateHandler; \
-+ (var).linkVcConfigureHandlerPtr = name_prefix##VcConfigureHandler; \
-+ \
-+ (var).linkVc2IdHandlerPtr = name_prefix##Vc2IdHandler; \
-+ (var).linkVcId2VcHandlerPtr = name_prefix##VcId2VcHandler; \
-+ (var).linkGetFramePoolHandlerPtr = name_prefix##GetFramePoolHandler; \
-+ \
-+ (var).linkTxDataHandlerPtr = name_prefix##TxDataHandler; \
-+ (var).linkRxDataHandlerPtr = name_prefix##RxDataHandler; \
-+} while (0)
-+
-+#endif
-+
-+typedef struct
-+ {
-+ dslFrameHandlerType rxIndicateHandlerPtr;
-+ dslFrameHandlerType txCompleteHandlerPtr;
-+ dslStatusHandlerType statusHandlerPtr;
-+ } upperLayerFunctions;
-+
-+
-+/*
-+ * Debug data
-+ */
-+#define kDslFirstDebugData 1000
-+#define kDslXmtPerSymTimeCompData (kDslFirstDebugData + 0)
-+#define kDslRcvPerSymTimeCompData (kDslFirstDebugData + 1)
-+#define kDslXmtAccTimeCompData (kDslFirstDebugData + 2)
-+#define kDslRcvAccTimeCompData (kDslFirstDebugData + 3)
-+#define kDslRcvPilotToneData (kDslFirstDebugData + 4)
-+#define kDslTEQCoefData (kDslFirstDebugData + 5)
-+#define kDslTEQInputData (kDslFirstDebugData + 6)
-+#define kDslTEQOutputData (kDslFirstDebugData + 7)
-+#define kDslRcvFFTInputData (kDslFirstDebugData + 8)
-+#define kDslRcvFFTOutputData (kDslFirstDebugData + 9)
-+#define kDslRcvCarrierSNRData (kDslFirstDebugData + 10)
-+#define kDslXmtToneOrderingData (kDslFirstDebugData + 11)
-+#define kDslRcvToneOrderingData (kDslFirstDebugData + 12)
-+#define kDslXmtGainData (kDslFirstDebugData + 13)
-+#define kDslRcvGainData (kDslFirstDebugData + 14)
-+#define kDslMseData (kDslFirstDebugData + 15)
-+#define kDslFEQOutErrData (kDslFirstDebugData + 16)
-+#define kDslFEQCoefData (kDslFirstDebugData + 17)
-+#define kDslShowtimeMseData (kDslFirstDebugData + 18)
-+#define kDslTimeEstimationHWPhaseTweak (kDslFirstDebugData + 24)
-+#define kDslSlicerInput (kDslFirstDebugData + 40)
-+#define kDslXmtConstellations (kDslFirstDebugData + 41)
-+#define kDslSnr1ShiftData (kDslFirstDebugData + 50)
-+#define kDslSnr1InputData (kDslFirstDebugData + 51)
-+#define kDslSnr1ReverbAvgData (kDslFirstDebugData + 52)
-+#define kDslAnnexCFextSnrData (kDslFirstDebugData + 53)
-+#define kDslAnnexCNextSnrData (kDslFirstDebugData + 54)
-+#define kG994p1OutputXmtSample (kDslFirstDebugData + 100)
-+#define kG994p1OutputMicroBit (kDslFirstDebugData + 101)
-+#define kG994p1OutputBit (kDslFirstDebugData + 102)
-+#define kG994p1OutputTimer (kDslFirstDebugData + 103)
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.1 Defininitive constants */
-+/****************************************************************************/
-+
-+/* dslDirectionType */
-+
-+#define kATU_C 0
-+#define kATU_R 1
-+
-+/* ATM setup maps */
-+
-+#define kAtmCallMgrEnabled 0x00000001 /* Bit 0 */
-+#define kAtmAAL1FecEnabledMask 0x00000006 /* Bit 1 */
-+#define kAtmAAL1HiDelayFecEnabled 0x00000002 /* Bit 2 */
-+#define kAtmAAL1LoDelayFecEnabled 0x00000004 /* Bit 3 */
-+
-+/* dslLinkLayerType */
-+
-+#define kNoDataLink 0
-+#define kAtmLink 0x00000001
-+#define kAtmPhyLink 0x00000002
-+#define kDslPacketLink 0x00000003
-+#define kDslPacketPhyLink 0x00000004
-+
-+/* dslModulationType */
-+#define kNoCommonModulation 0x00000000
-+#define kG994p1 0x00000020 /* G.994.1 or G.hs */
-+#define kT1p413 0x00000040 /* T1.413 handshaking */
-+#define kG992p1AnnexA 0x00000001 /* G.992.1 or G.dmt Annex A */
-+#define kG992p1AnnexB 0x00000002 /* G.992.1 or G.dmt Annex B */
-+#define kG992p1AnnexC 0x00000004 /* G.992.1 or G.dmt Annex C */
-+#define kG992p2AnnexAB 0x00000008 /* G.992.2 or G.lite Annex A/B */
-+#define kG992p2AnnexC 0x00000010 /* G.992.2 or G.lite Annex C */
-+#define kG992p3AnnexA 0x00000100 /* G.992.3 or G.DMTbis Annex A */
-+#define kG992p3AnnexB 0x00000200 /* G.992.3 or G.DMTbis Annex A */
-+#define kG992p1AnnexI 0x00000400 /* G.992.1 Annex I */
-+#define kG992p5AnnexA 0x00010000 /* G.992.5 Annex A */
-+#define kG992p5AnnexB 0x00020000 /* G.992.5 Annex B */
-+#define kG992p5AnnexI 0x00040000 /* G.992.5 Annex I */
-+#define kG992p3AnnexM 0x00080000 /* G.992.3 Annex M */
-+#define kG992p5AnnexM 0x01000000 /* G.992.5 Annex M */
-+
-+/* demodCapabilities bitmap */
-+#define kEchoCancellorEnabled 0x00000001
-+#define kSoftwareTimeErrorDetectionEnabled 0x00000002
-+#define kSoftwareTimeTrackingEnabled 0x00000004
-+#define kDslTrellisEnabled 0x00000008
-+#define kHardwareTimeTrackingEnabled 0x00000010
-+#define kHardwareAGCEnabled 0x00000020
-+#define kDigitalEchoCancellorEnabled 0x00000040
-+#define kReedSolomonCodingEnabled 0x00000080
-+#define kAnalogEchoCancellorEnabled 0x00000100
-+#define kT1p413Issue1SingleByteSymMode 0x00000200
-+#define kDslAturXmtPowerCutbackEnabled 0x00000400
-+#ifdef G992_ANNEXC_LONG_REACH
-+#define kDslAnnexCPilot48 0x00000800
-+#define kDslAnnexCReverb33_63 0x00001000
-+#endif
-+#ifdef G992_ANNEXC
-+#define kDslCentilliumCRCWorkAroundEnabled 0x00002000
-+#else
-+#define kDslEnableRoundUpDSLoopAttn 0x00002000
-+#endif
-+#define kDslBitSwapEnabled 0x00004000
-+#define kDslADILowRateOptionFixDisabled 0x00008000
-+#define kDslAnymediaGSPNCrcFixEnabled 0x00010000
-+#define kDslMultiModesPreferT1p413 0x00020000
-+#define kDslT1p413UseRAck1Only 0x00040000
-+#define kDslUE9000ADI918FECFixEnabled 0x00080000
-+#define kDslG994AnnexAMultimodeEnabled 0x00100000
-+#define kDslATUCXmtPowerMinimizeEnabled 0x00200000
-+#define kDropOnDataErrorsDisabled 0x00400000
-+#define kDslSRAEnabled 0x00800000
-+
-+#define kDslT1p413HigherToneLevelNeeded 0x01000000
-+#define kDslT1p413SubsampleAlignmentEnabled 0x02000000
-+#define kDslT1p413DisableUpstream2xIfftMode 0x04000000
-+
-+/* test mode related demodCapabilities, for internal use only */
-+#define kDslTestDemodCapMask 0xF8000000
-+#define kDslSendReverbModeEnabled 0x10000000
-+#define kDslSendMedleyModeEnabled 0x20000000
-+#define kDslAutoRetrainDisabled 0x40000000
-+#define kDslPllWorkaroundEnabled 0x80000000
-+#define kDslAfeLoopbackModeEnabled 0x08000000
-+
-+/* demodCapabilities bitmap2 */
-+
-+#define kDslAnnexCProfile1 0x00000001
-+#define kDslAnnexCProfile2 0x00000002
-+#define kDslAnnexCProfile3 0x00000004
-+#define kDslAnnexCProfile4 0x00000008
-+#define kDslAnnexCProfile5 0x00000010
-+#define kDslAnnexCProfile6 0x00000020
-+#define kDslAnnexCPilot64 0x00000040
-+#define kDslAnnexCPilot48 0x00000080
-+#define kDslAnnexCPilot32 0x00000100
-+#define kDslAnnexCPilot16 0x00000200
-+#define kDslAnnexCA48B48 0x00000400
-+#define kDslAnnexCA24B24 0x00000800
-+#define kDslAnnexCReverb33_63 0x00001000
-+#define kDslAnnexCCReverb6_31 0x00002000
-+
-+#define kDslAnnexIShapedSSVI 0x00004000
-+#define kDslAnnexIFlatSSVI 0x00008000
-+
-+#define kDslAnnexIPilot64 0x00010000
-+#define kDslAnnexIA48B48 0x00020000
-+#define kDslAnnexIPilot128 0x00040000
-+#define kDslAnnexIPilot96 0x00080000
-+
-+/* Features bitmap */
-+#define kG992p2RACK1 0x00000001
-+#define kG992p2RACK2 0x00000002
-+#define kG992p2DBM 0x00000004
-+#define kG992p2FastRetrain 0x00000008
-+#define kG992p2RS16 0x00000010
-+#define kG992p2ClearEOCOAM 0x00000020
-+#define kG992NTREnabled 0x00000040
-+#define kG992p2EraseAllStoredProfiles 0x00000080
-+#define kG992p2FeaturesNPar2Mask 0x0000003B
-+#define kG992p2FeaturesNPar2Shift 0
-+
-+#define kG992p1RACK1 0x00000100
-+#define kG992p1RACK2 0x00000200
-+#define kG992p1STM 0x00000800
-+#define kG992p1ATM 0x00001000
-+#define kG992p1ClearEOCOAM 0x00002000
-+#define kG992p1FeaturesNPar2Mask 0x00003B00
-+#define kG992p1FeaturesNPar2Shift 8
-+#define kG992p1DualLatencyUpstream 0x00004000
-+#define kG992p1DualLatencyDownstream 0x00008000
-+#define kG992p1HigherBitRates 0x40000000
-+
-+#if defined(G992P1_ANNEX_I)
-+#define kG992p1HigherBitRates1over3 0x80000000
-+#define kG992p1AnnexIShapedSSVI 0x00000001
-+#define kG992p1AnnexIFlatSSVI 0x00000002
-+#define kG992p1AnnexIPilotFlag 0x00000008
-+#define kG992p1AnnexIPilot64 0x00000001
-+#define kG992p1AnnexIPilot128 0x00000004
-+#define kG992p1AnnexIPilot96 0x00000008
-+#define kG992p1AnnexIPilotA48B48 0x00000010
-+#endif
-+
-+#define kG992p1AnnexBRACK1 0x00010000
-+#define kG992p1AnnexBRACK2 0x00020000
-+#define kG992p1AnnexBUpstreamTones1to32 0x00040000
-+#define kG992p1AnnexBSTM 0x00080000
-+#define kG992p1AnnexBATM 0x00100000
-+#define kG992p1AnnexBClearEOCOAM 0x00200000
-+#define kG992p1AnnexBFeaturesNPar2Mask 0x003F0000
-+#define kG992p1AnnexBFeaturesNPar2Shift 16
-+
-+#define kG992p1AnnexCRACK1 0x01000000
-+#define kG992p1AnnexCRACK2 0x02000000
-+#define kG992p1AnnexCDBM 0x04000000
-+#define kG992p1AnnexCSTM 0x08000000
-+#define kG992p1AnnexCATM 0x10000000
-+#define kG992p1AnnexCClearEOCOAM 0x20000000
-+#define kG992p1AnnexCFeaturesNPar2Mask 0x3F000000
-+#define kG992p1AnnexCFeaturesNPar2Shift 24
-+
-+#define kG992p1HigherBitRates1over3 0x80000000
-+
-+/* auxFeatures bitmap */
-+#define kG994p1PreferToExchangeCaps 0x00000001
-+#define kG994p1PreferToDecideMode 0x00000002
-+#define kG994p1PreferToMPMode 0x00000004
-+#define kAfePwmSyncClockShift 3
-+#define kAfePwmSyncClockMask (0xF << kAfePwmSyncClockShift)
-+#define AfePwmSyncClockEnabled(val) (((val) & kAfePwmSyncClockMask) != 0)
-+#define AfePwmGetSyncClockFreq(val) ((((val) & kAfePwmSyncClockMask) >> kAfePwmSyncClockShift) - 1)
-+#define AfePwmSetSyncClockFreq(val,freq) ((val) |= ((((freq)+1) << kAfePwmSyncClockShift) & kAfePwmSyncClockMask))
-+
-+/* SubChannel Info bitMap for G992p1 */
-+#define kSubChannelASODownstream 0x00000001
-+#define kSubChannelAS1Downstream 0x00000002
-+#define kSubChannelAS2Downstream 0x00000004
-+#define kSubChannelAS3Downstream 0x00000008
-+#define kSubChannelLSODownstream 0x00000010
-+#define kSubChannelLS1Downstream 0x00000020
-+#define kSubChannelLS2Downstream 0x00000040
-+#define kSubChannelLS0Upstream 0x00000080
-+#define kSubChannelLS1Upstream 0x00000100
-+#define kSubChannelLS2Upstream 0x00000200
-+#define kSubChannelInfoOctet1Mask 0x0000001F
-+#define kSubChannelInfoOctet2Mask 0x000003E0
-+#define kSubChannelInfoOctet1Shift 0
-+#define kSubChannelInfoOctet2Shift 5
-+
-+/****************************************************************************/
-+/* 3. Interface functions. */
-+/* */
-+/****************************************************************************/
-+
-+#ifdef G992P1
-+#if defined(G992P1_ANNEX_I2X) || defined(G992P5)
-+/* lke */
-+#define kDslSamplingFreq 4416000
-+#define kDslMaxFFTSize 1024
-+#define kDslMaxFFTSizeShift 10
-+#elif defined(G992P1_ANNEX_I4X)
-+#define kDslSamplingFreq 8832000
-+#define kDslMaxFFTSize 2048
-+#define kDslMaxFFTSizeShift 11
-+#elif defined(G992P1_ANNEX_I8X)
-+#define kDslSamplingFreq 17664000
-+#define kDslMaxFFTSize 4096
-+#define kDslMaxFFTSizeShift 12
-+#else
-+#define kDslSamplingFreq 2208000
-+#define kDslMaxFFTSize 512
-+#define kDslMaxFFTSizeShift 9
-+#endif
-+#else
-+#define kDslSamplingFreq 1104000
-+#define kDslMaxFFTSize 256
-+#define kDslMaxFFTSizeShift 8
-+#endif
-+
-+#if defined(G992_ATUR_UPSTREAM_SAMPLING_FREQ_276KHZ)
-+#define kDslATURUpstreamSamplingFreq 276000
-+#define kDslATURFFTSizeShiftUpstream 6
-+#elif defined(G992_ATUR_UPSTREAM_SAMPLING_FREQ_552KHZ)
-+#define kDslATURUpstreamSamplingFreq 552000
-+#define kDslATURFFTSizeShiftUpstream 7
-+#else
-+#define kDslATURUpstreamSamplingFreq kDslSamplingFreq
-+#define kDslATURFFTSizeShiftUpstream kDslMaxFFTSizeShift
-+#endif
-+
-+#if defined(G992_ATUC_UPSTREAM_SAMPLING_FREQ_276KHZ)
-+#define kDslATUCUpstreamSamplingFreq 276000
-+#define kDslATUCFFTSizeShiftUpstream 6
-+#elif defined(G992_ATUC_UPSTREAM_SAMPLING_FREQ_552KHZ)
-+#define kDslATUCUpstreamSamplingFreq 552000
-+#define kDslATUCFFTSizeShiftUpstream 7
-+#else
-+#define kDslATUCUpstreamSamplingFreq kDslSamplingFreq
-+#define kDslATUCFFTSizeShiftUpstream kDslMaxFFTSizeShift
-+#endif
-+
-+#define kDslMaxSamplesPerSymbol (kDslMaxFFTSize+kDslMaxFFTSize/16)
-+
-+#if defined(G992P1_ANNEX_I) || defined(G992P5)
-+#define kDslMaxTEQLength 32
-+#else
-+#define kDslMaxTEQLength 16
-+#endif
-+
-+#define kDslMaxSymbolBlockSize 1
-+#define kDslMaxSampleBlockSize (kDslMaxSymbolBlockSize*kDslMaxSamplesPerSymbol)
-+
-+#ifdef G992_ANNEXC
-+#define kG992AnnexCXmtToRcvPathDelay 512 /* In samples at kDslSamplingFreq */
-+#endif
-+
-+/*** For compatibility with existing test codes ***/
-+#if !defined(TARG_OS_RTEMS)
-+typedef dslStatusCode modemStatusCode;
-+typedef dslStatusStruct modemStatusStruct;
-+typedef dslStatusHandlerType statusHandlerType;
-+typedef dslCommandCode modemCommandCode;
-+typedef dslCommandStruct modemCommandStruct;
-+typedef dslCommandHandlerType commandHandlerType;
-+#endif
-+
-+extern void SM_DECL SoftDslSetRefData (void *gDslVars, ulong refData);
-+extern ulong SM_DECL SoftDslGetRefData (void *gDslVars);
-+extern int SM_DECL SoftDslGetMemorySize(void);
-+extern void SM_DECL SoftDslInit (void *gDslVars);
-+extern void SM_DECL SoftDslReset (void *gDslVars);
-+extern void SM_DECL SoftDslLineHandler (void *gDslVars, int rxNSamps, int txNSamps, short *rcvPtr, short *xmtPtr) FAST_TEXT;
-+extern Boolean SM_DECL SoftDslCommandHandler (void *gDslVars, dslCommandStruct *cmdPtr);
-+
-+/* swap Lmem functions */
-+#if defined(bcm47xx) && defined(SWAP_LMEM)
-+extern int SoftDslSwapLmem(void *gDslVars, int sectionN, int imageN);
-+extern void init_SoftDslSwapLmem(void);
-+#endif
-+
-+/* SoftDsl time functions */
-+
-+extern ulong SM_DECL SoftDslGetTime(void *gDslVars);
-+#define __SoftDslGetTime(gv) gDslGlobalVarPtr->execTime
-+
-+extern void SM_DECL SoftDslTimer(void *gDslVars, ulong timeMs);
-+
-+/* SoftDsl IO functions */
-+
-+extern void SM_DECL SoftDslClose (void *gDslVars);
-+extern int SM_DECL SoftDslSendFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+extern int SM_DECL SoftDslReturnFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+
-+/* SoftDsl connection functions */
-+
-+extern void* SM_DECL SoftDslVcAllocate(void *gDslVars, dslVcParams *pVcParams);
-+extern void SM_DECL SoftDslVcFree(void *gDslVars, void *pVc);
-+extern Boolean SM_DECL SoftDslVcActivate(void *gDslVars, void *pVc);
-+extern void SM_DECL SoftDslVcDeactivate(void *gDslVars, void *pVc);
-+extern Boolean SM_DECL SoftDslVcConfigure(void *gDslVars, void *pVc, ulong mid, dslVcParams *pVcParams);
-+
-+/* Special functions for LOG support */
-+
-+extern ulong SM_DECL SoftDslVc2Id(void *gDslVars, void *pVc);
-+extern void* SM_DECL SoftDslVcId2Vc(void *gDslVars, ulong vcId);
-+extern void* SM_DECL SoftDslGetFramePool(void *gDslVars);
-+
-+/* Functions for host mode execution */
-+
-+extern void* SM_DECL SoftDslRxCellHeaderHandler (void *gDslVars, ulong hdr, uchar hdrHec);
-+extern void* SM_DECL SoftDslRxCellDataHandler (void *gDslVars, int, void*);
-+extern void* SM_DECL SoftDslTxCellHandler (void *gDslVars, int*, void*);
-+extern Boolean SM_DECL SoftDslPhyCommandHandler (void *gDslVars, dslCommandStruct *cmdPtr);
-+
-+/* Functions getting OEM parameters including G994 non standard info management */
-+
-+extern char* SM_DECL SoftDslGetTrainingVendorIDString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetVendorIDString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetSerialNumberString(void *gDslVars);
-+extern char* SM_DECL SoftDslGetRevString(void *gDslVars);
-+extern int SM_DECL SoftDslRevStringSize(void *gDslVars);
-+extern int SM_DECL SoftDslSerNumStringSize(void *gDslVars);
-+
-+extern void* SM_DECL SoftDslGetG994p1RcvNonStdInfo(void *gDslVars, ulong *pLen);
-+extern void* SM_DECL SoftDslGetG994p1XmtNonStdInfo(void *gDslVars, ulong *pLen);
-+
-+#ifdef G997_1_FRAMER
-+
-+/* G997 functions */
-+
-+extern int SM_DECL SoftDslG997SendFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+extern int SM_DECL SoftDslG997ReturnFrame (void *gDslVars, void *pVc, ulong mid, dslFrame * pFrame);
-+
-+#endif
-+
-+#ifdef ADSL_MIB
-+extern void * SM_DECL SoftDslMibGetData (void *gDslVars, int dataId, void *pAdslMibData);
-+#endif
-+
-+#define SoftDsl SoftDslLineHandler
-+#define kSoftDslMaxMemorySize (32768*16384)
-+
-+/*
-+ * Internal functions
-+ */
-+
-+extern void SoftDslStatusHandler (void *gDslVars, dslStatusStruct *status) FAST_TEXT;
-+extern void SoftDslInternalStatusHandler (void *gDslVars, dslStatusStruct *status);
-+
-+/*
-+ * DSL OS functions
-+ */
-+
-+#ifdef DSL_OS
-+
-+#define SoftDslIsBgAvailable(gDslVars) (DSLOS_THREAD_INACTIVE == DslOsGetThreadState(&(gDslGlobalVarPtr->tcbDslBg)))
-+#define SoftDslGetBgThread(gDslVars) \
-+ ((DSLOS_THREAD_INACTIVE != DslOsGetThreadState(&(gDslGlobalVarPtr->tcbDslBg))) ? &gDslGlobalVarPtr->tcbDslBg : NULL)
-+#define SoftDslBgStart(gDslVars, pFunc) \
-+ DslOsCreateThread(&gDslGlobalVarPtr->tcbDslBg, DSLOS_PRIO_HIGHEST - 10, pFunc, gDslVars, \
-+ WB_ADDR(gDslGlobalVarPtr->bgStack), sizeof(gDslGlobalVarPtr->bgStack))
-+#define SoftDslBgStop(gDslVars) DslOsDeleteThread(&gDslGlobalVarPtr->tcbDslBg)
-+
-+#define SoftDslEnterCritical() DslOsEnterCritical()
-+#define SoftDslLeaveCritical(id) DslOsLeaveCritical(id)
-+
-+#else
-+
-+#define SoftDslIsBgAvailable(gDslVars) 1
-+#define SoftDslGetBgThread(gDslVars) 1
-+#define SoftDslBgStart(gDslVars, pFunc) (*pFunc)(gDslVars)
-+#define SoftDslBgStop(gDslVars)
-+
-+#define SoftDslEnterCritical() 0
-+#define SoftDslLeaveCritical(id)
-+
-+#endif
-+
-+/*
-+ * DSL frames and native frame functions
-+ */
-+
-+DslFrameDeclareFunctions (DslFrameNative)
-+
-+/*
-+ * These functions are for testing purpose, they are defined outside.
-+ */
-+#ifdef STACK_SIZE_REQUIREMENT_TEST
-+extern void StackSizeTestInitializeStackBeforeEntry(void);
-+extern void StackSizeTestCheckStackAfterExit(void);
-+extern void StackSizeTestBackupStack(void);
-+extern void StackSizeTestRestoreStack(void);
-+#endif /* STACK_SIZE_REQUIREMENT_TEST */
-+
-+#ifdef NEC_NSIF_WORKAROUND
-+#define SoftDslGetG994NsStatus(gDslVars) (gDslGlobalVarPtr->G994NsStatus)
-+#define SoftDslGetG994NsFailCounter(gDslVars) (gDslGlobalVarPtr->G994NsFailCounter)
-+#endif
-+
-+#endif /* SoftDslHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModem.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModem.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModem.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModem.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,3128 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftModem.h
-+ *
-+ *
-+ * Description:
-+ * This file contains the exported interface for SoftModem.c
-+ *
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.16 $
-+ *
-+ * $Id: SoftModem.h,v 1.16 2004/04/14 21:16:51 ilyas Exp $
-+ *
-+ * $Log: SoftModem.h,v $
-+ * Revision 1.16 2004/04/14 21:16:51 ilyas
-+ * Merged with the latest changes in ADSL driver
-+ *
-+ * Revision 1.15 2004/04/13 00:56:10 ilyas
-+ * Merged the latest ADSL driver changes for RTEMS
-+ *
-+ * Revision 1.14 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.13 2003/02/22 05:07:11 ilyas
-+ * Added VendorID for T1.413 mode
-+ *
-+ * Revision 1.12 2002/10/03 19:34:24 ilyas
-+ * Added size for EOC serial number register
-+ *
-+ * Revision 1.11 2002/09/07 01:37:22 ilyas
-+ * Added support for OEM parameters
-+ *
-+ * Revision 1.10 2001/12/13 02:25:34 ilyas
-+ * Added definitions for G997
-+ *
-+ * Revision 1.9 2001/11/30 05:56:34 liang
-+ * Merged top of the branch AnnexBDevelopment onto top of the tree.
-+ *
-+ * Revision 1.7.2.2 2001/11/27 02:32:05 liang
-+ * Combine vendor ID, serial #, and version number into SoftModemVersionNumber.c.
-+ *
-+ * Revision 1.7.2.1 2001/10/03 01:44:10 liang
-+ * Merged with codes from main tree (tag SoftDsl_2_18).
-+ *
-+ * Revision 1.8 2001/09/21 19:19:01 ilyas
-+ * Minor fixes for VxWorks build
-+ *
-+ * Revision 1.7 2000/07/17 21:08:16 lkaplan
-+ * removed global pointer
-+ *
-+ * Revision 1.6 2000/05/03 04:09:11 ilyas
-+ * Added ID for ATM log data
-+ *
-+ * Revision 1.5 2000/04/01 01:07:44 liang
-+ * Changed file names and some module names.
-+ *
-+ * Revision 1.4 2000/03/02 20:18:12 ilyas
-+ * Added test status code for ATM VC finished
-+ *
-+ * Revision 1.3 1999/08/05 20:02:11 liang
-+ * Merged with the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.2 1999/01/27 22:19:08 liang
-+ * Merge with SoftModem_3_1_02.
-+ * Include SoftDsl.h conditionlly so that the test utilities from SoftModem
-+ * can be used without major change. It can be merged easily to SoftModem.
-+ *
-+ * Revision 1.170 1998/12/22 00:52:52 liang
-+ * Added auxFeatures bit kV8HoldANSamUntilDetCI. When it is set, ANSam won't be
-+ * sent until CI is detected (normally ANSam will be sent after 200ms). This is
-+ * useful in V34 half duplex fax mode.
-+ *
-+ * Revision 1.169 1998/12/19 04:46:52 mwg
-+ * Added bits for fax/data calling tones
-+ *
-+ * Revision 1.168 1998/12/17 02:46:10 scott
-+ * Removed overlay-related commands/statuses and added
-+ * kSetTrainingDelayReductionCmd
-+ *
-+ * Revision 1.167 1998/12/12 03:17:42 scott
-+ * Added overlay commands and statuses
-+ *
-+ * Revision 1.166 1998/12/02 05:34:23 mwg
-+ * Fixed a problem with bong tone detection
-+ *
-+ * Revision 1.165 1998/11/26 00:22:44 yura
-+ * Added two more log data types: modulatorInputData & modulatorOutputData
-+ *
-+ * Revision 1.164 1998/11/19 03:08:04 mwg
-+ * Added kSetCallProgressParamsCmd
-+ *
-+ * Revision 1.163 1998/11/18 23:00:03 liang
-+ * Added a separate command kLoopbackTestAutoRespEnableCmd to enable or disable
-+ * the loopback test auto respond feature when the modem is already on-line.
-+ *
-+ * Revision 1.162 1998/11/13 20:50:21 scott
-+ * SoftModemInternalStatusHandler is now SM_DECL as well
-+ *
-+ * Revision 1.161 1998/11/13 20:42:25 scott
-+ * Added SM_DECL type to entrypoint functions
-+ *
-+ * Revision 1.160 1998/11/13 03:02:54 scott
-+ * Added SoftModemTimer prototype.
-+ * Also include V.8bis types if AT_COMMANDS_V8BIS is defined.
-+ *
-+ * Revision 1.159 1998/11/12 01:22:46 scott
-+ * Increased number of AT registers to 46
-+ *
-+ * Revision 1.158 1998/11/05 22:35:18 yura
-+ * Added two more S-registers
-+ *
-+ * Revision 1.157 1998/11/05 03:09:54 mwg
-+ * Added kLapmRetryFailed to the list of LAPM errors
-+ *
-+ * Revision 1.156 1998/11/05 00:13:20 liang
-+ * Add new connectionInfo status kLoopbackSelfTestNewErrs to report
-+ * new bit errors whenever it happens.
-+ *
-+ * Revision 1.155 1998/11/04 07:11:33 mwg
-+ * Moved declaration for SoftModemATPrintf() to SoftModem.h
-+ *
-+ * Revision 1.154 1998/10/29 07:24:49 mwg
-+ * *** empty log message ***
-+ *
-+ * Revision 1.153 1998/10/15 02:09:37 luisgm
-+ * added separate data rate mask for Flex to dataPumpCapabilities structure
-+ *
-+ * Revision 1.152 1998/10/14 00:12:15 scott
-+ * Added kMnpOOBFrameCmd and command.frameSpec
-+ *
-+ * Revision 1.151 1998/10/09 02:19:22 luisgm
-+ * added FlexV8bisStruct member to dataPumpCapabilities struc to store flex v8bis info, added define for kFlexSkipV8bis
-+ *
-+ * Revision 1.150 1998/10/06 19:36:33 mwg
-+ * Limited 56K rates to 53K
-+ *
-+ * Revision 1.149 1998/10/03 03:43:38 ilyas
-+ * Added status codes for Audio
-+ *
-+ * Revision 1.148 1998/10/01 02:03:17 mwg
-+ * Added external pulse dialer option
-+ *
-+ * Revision 1.147 1998/09/30 01:44:26 mwg
-+ * Added new functions SoftModemGetWriteBufferSize() & SoftModemGetReadBufferSize()
-+ *
-+ * Revision 1.146 1998/09/22 03:44:38 scott
-+ * Added ALWAYS_LONG_ALIGN() macro
-+ *
-+ * Revision 1.145 1998/09/21 21:49:22 scott
-+ * Added logDataCodes for mnpDecoder(Input/Output)Data
-+ *
-+ * Revision 1.144 1998/08/31 22:57:21 luisgm
-+ * added constants for Flex data rates + kFlexEventTRN2AFinished
-+ *
-+ * Revision 1.143 1998/08/18 05:09:53 mwg
-+ * Increased AT command buffer size to 128
-+ *
-+ * Revision 1.142 1998/08/18 03:45:54 ilyas
-+ * Integrated Audio into V70 test
-+ *
-+ * Revision 1.141 1998/08/14 17:46:04 ilyas
-+ * Integrated Audio and G729a
-+ *
-+ * Revision 1.140 1998/08/10 21:42:19 mwg
-+ * Added space and mark parity
-+ *
-+ * Revision 1.139 1998/08/08 03:39:33 scott
-+ * Moved the C6xDefs and PentiumDefs includes before the internal function
-+ * prototypes (to permit their redefinitions)
-+ *
-+ * Revision 1.138 1998/08/07 20:37:27 yura
-+ * Added new S-register for &T commands
-+ *
-+ * Revision 1.137 1998/08/01 05:22:09 mwg
-+ * Implemented split memory model
-+ *
-+ * Revision 1.136 1998/07/22 02:12:22 liang
-+ * Added self test mode for loopback test.
-+ *
-+ * Revision 1.135 1998/07/21 01:19:03 liang
-+ * Changed loopback test command parameter interface to use regular modeSpec.
-+ *
-+ * Revision 1.134 1998/07/18 03:52:10 liang
-+ * Added V54 loop 2 test for V22.
-+ *
-+ * Revision 1.133 1998/07/15 02:45:03 mwg
-+ * Added new connection info code: kPCMSpectralShapingBits
-+ *
-+ * Revision 1.132 1998/07/15 00:18:48 liang
-+ * Add special turn off command for V34 fax to handle different turn off procedures.
-+ *
-+ * Revision 1.131 1998/07/13 22:19:49 liang
-+ * Add V8 CI detection status and ANSam disable aux feature.
-+ *
-+ * Revision 1.130 1998/07/08 17:09:13 scott
-+ * Added USE_LONG_ALIGN; support for 6 and PentiumDefs.h files
-+ *
-+ * Revision 1.129 1998/07/03 23:28:13 mwg
-+ * Added Fax Class 2 defines
-+ *
-+ * Revision 1.128 1998/07/03 23:17:33 mwg
-+ * Insuread command/status structures are long aligned
-+ *
-+ * Revision 1.127 1998/06/23 16:48:01 mwg
-+ * Fixed a longstanding problem typical for Win95 VxD: whenever new
-+ * VxD is intalled the confuguration profile may not match the old one but
-+ * since the crc is correct it is still being downloaded. To avoid the problem
-+ * a crc for the version number was added to avoid confusion between profiles
-+ * of different versions.
-+ *
-+ * Revision 1.126 1998/06/19 21:04:06 liang
-+ * Add auxiliary feature bit kV90ServerNotDetSbarAfterJdbarFix.
-+ *
-+ * Revision 1.125 1998/06/11 22:48:14 liang
-+ * Add kPCM28000bpsShift constant.
-+ *
-+ * Revision 1.124 1998/06/05 22:11:51 liang
-+ * New V90 DIL works through data mode.
-+ *
-+ * Revision 1.123 1998/06/01 23:03:41 liang
-+ * Add v90RcvdDilDiffData logging.
-+ *
-+ * Revision 1.122 1998/06/01 21:24:38 mwg
-+ * Changed some of the names.
-+ *
-+ * Revision 1.121 1998/05/13 04:55:22 mwg
-+ * Now passing the number of spectral shaping bits in aux features
-+ *
-+ * Revision 1.120 1998/05/13 02:53:13 liang
-+ * Add field "value" to command param structure.
-+ *
-+ * Revision 1.119 1998/05/12 04:42:23 mwg
-+ * Replaced some of the status messages
-+ *
-+ * Revision 1.118 1998/05/11 23:36:10 mwg
-+ * Added 8000Hz symbol rate to the map
-+ *
-+ * Revision 1.117 1998/05/05 04:28:39 liang
-+ * V90 works up to data mode first version.
-+ *
-+ * Revision 1.116 1998/04/21 09:36:45 mwg
-+ * Fixed a few problems for 16Khz and added 32Khz.
-+ *
-+ * Revision 1.115 1998/04/17 22:33:54 liang
-+ * Added V90 DIL for mu-law PCM.
-+ *
-+ * Revision 1.114 1998/04/15 22:36:39 mwg
-+ * Added new parameters to kDialCmd to allow individual control of each
-+ * DTMF group attenuation.
-+ *
-+ * Revision 1.113 1998/04/15 18:16:22 ilyas
-+ * Integrated V.8bis and changed coding of LinkLayerType to bitMap
-+ *
-+ * Revision 1.112 1998/04/15 07:59:06 mwg
-+ * Added new status codes for V.90
-+ *
-+ * Revision 1.111 1998/04/11 00:29:16 mwg
-+ * Fixed the warnings which appeared when Irix builds were upgraded to
-+ * gcc 2.8.1
-+ *
-+ * Revision 1.110 1998/04/11 00:25:01 ilyas
-+ * More V.70 statuses
-+ *
-+ * Revision 1.109 1998/04/10 23:29:31 mwg
-+ * Added new field to capabilities: dataRates56K
-+ *
-+ * Revision 1.108 1998/04/09 02:02:56 mwg
-+ * Added status for Ja detection.
-+ *
-+ * Revision 1.107 1998/04/03 02:05:30 ilyas
-+ * More V.70 commands added
-+ *
-+ * Revision 1.106 1998/04/02 06:15:39 mwg
-+ * Added coding type (Mu-law/A-law) status reporting.
-+ *
-+ * Revision 1.105 1998/03/30 09:53:57 mwg
-+ * Added definition for k56Flex modulation for future use.
-+ *
-+ * Revision 1.104 1998/03/27 17:56:09 ilyas
-+ * Added definitions for V.70
-+ *
-+ * Revision 1.103 1998/03/26 23:29:04 liang
-+ * Added first version of IMD estimation.
-+ *
-+ * Revision 1.102 1998/03/20 04:37:26 mwg
-+ * Increased the size of the nominal variance to 32 bit.
-+ *
-+ * Revision 1.101 1998/03/06 01:22:04 yura
-+ * Improved Win95 VxD segmentation handling
-+ *
-+ * Revision 1.100 1998/03/06 01:06:18 liang
-+ * Add initial version of V90 phase 1 and 2.
-+ *
-+ * Revision 1.99 1998/03/05 23:42:22 mwg
-+ * (hxl) Implemented enable/disable call waiting command.
-+ *
-+ * Revision 1.98 1998/02/26 06:13:06 mwg
-+ * Increased the number of AT S-registers to account for newly introduced
-+ * S9 and S10.
-+ *
-+ * Revision 1.97 1998/02/25 18:18:25 scott
-+ * Added v42bisCycleCount for V42BIS_THROUGHPUT_CONTROL
-+ *
-+ * Revision 1.96 1998/02/24 05:31:20 mwg
-+ * Added stuff required by international version of AT command processor.
-+ *
-+ * Revision 1.95 1998/02/17 01:14:10 scott
-+ * Reenabled sys/types.h for Linux builds
-+ *
-+ * Revision 1.94 1998/02/16 22:32:23 scott
-+ * Changed copyright notice
-+ *
-+ * Revision 1.93 1998/02/16 22:17:44 scott
-+ * Turned off include of sys/types.h for normal builds
-+ *
-+ * Revision 1.92 1998/02/16 21:53:28 scott
-+ * Exclude sys/types.h for another compiler
-+ *
-+ * Revision 1.91 1998/02/09 18:24:10 scott
-+ * Fixed ComplexShort type to work around bugs in MS and GreenHill compilers
-+ *
-+ * Revision 1.90 1998/01/27 01:37:36 mwg
-+ * Added new log identifier for pcm infidelity data.
-+ *
-+ * Revision 1.89 1998/01/22 19:49:32 liang
-+ * Add auxFeature bit kFaxV34HDXAllowAsymCtrlChan.
-+ *
-+ * Revision 1.88 1998/01/21 02:32:01 liang
-+ * Add more V34 half duplex training progress codes.
-+ *
-+ * Revision 1.87 1997/12/23 03:28:25 liang
-+ * Add more half duplex V34 related constants.
-+ *
-+ * Revision 1.86 1997/12/18 19:38:50 scott
-+ * Added agcData log type.
-+ * Added kDisableFaxFastClearDown demod capability
-+ *
-+ * Revision 1.85 1997/12/18 06:02:45 mwg
-+ * Added a function to reenable DC offset tracking.
-+ *
-+ * Revision 1.84 1997/12/17 22:46:30 mwg
-+ * Minor modifications to X2 escape status reporting.
-+ *
-+ * Revision 1.83 1997/12/16 06:49:45 mwg
-+ * Implemented proper data rate reporting for PCM modem.
-+ *
-+ * Revision 1.82 1997/12/13 06:11:08 mwg
-+ * Added X2 interface hooks
-+ *
-+ * Revision 1.81 1997/12/02 06:21:33 mwg
-+ * Implemented kSetATRegister command.
-+ *
-+ * Revision 1.80 1997/11/27 02:11:41 liang
-+ * Add code for half duplex V34 control channel.
-+ *
-+ * Revision 1.79 1997/11/19 19:52:48 guy
-+ * Added constant to define V.34 half duplex operation
-+ *
-+ * Revision 1.78 1997/10/24 05:15:53 scott
-+ * Added AGC and phase hit recovery to demodCapabilities
-+ *
-+ * Revision 1.77 1997/10/01 02:47:50 liang
-+ * Add PCM interface.
-+ *
-+ * Revision 1.76 1997/09/29 15:48:04 yura
-+ * Added #pragma statement for W95 Vxd
-+ *
-+ * Revision 1.75 1997/09/18 20:32:39 scott
-+ * Do not include VxD support files if GENERATE_DEPENDENCIES is defined.
-+ *
-+ * Revision 1.74 1997/09/18 12:40:55 yura
-+ * Removed #ifdef statments to be more robust
-+ *
-+ * Revision 1.73 1997/09/17 17:32:41 scott
-+ * Do not include sys/types.h for 6
-+ *
-+ * Revision 1.72 1997/08/08 00:53:48 mwg
-+ * Added fields for LAP-M frames printout.
-+ * Added fields in auxFeatures to pass preemphasis filter parameters
-+ * to V.34 phase 3 when doing PTT testing.
-+ *
-+ * Revision 1.71 1997/08/06 03:41:45 yura
-+ * Added a few includes and defines needed by Win 95 driver.
-+ *
-+ * Revision 1.70 1997/08/05 03:22:10 liang
-+ * Add equalizer center tap adjustment calculation related constants.
-+ *
-+ * Revision 1.69 1997/07/29 02:44:19 mwg
-+ * Added new field to dataPumpCapabilities structure. This field is not
-+ * yet exposed to external interface and currently is only used to
-+ * enable PTT testing.
-+ * Added new commands: kStartDataModemPTTTestCmd & kStartDataModemLoopbackTestCmd
-+ *
-+ * Revision 1.68 1997/07/22 22:05:10 liang
-+ * Change sample rate setup as a normal command.
-+ *
-+ * Revision 1.67 1997/07/21 23:23:30 liang
-+ * Define SoftModemSetSampleRate as null when SAMPLE_RATE_CONVERSION is not defined.
-+ *
-+ * Revision 1.66 1997/07/21 22:38:36 liang
-+ * Change sample rate converter structure so that sample rate can be changed
-+ * on the fly (at very begining) to either 8KHz or 9600Hz.
-+ *
-+ * Revision 1.65 1997/07/21 20:22:01 mwg
-+ * Added statusInfoData to the log identifiers.
-+ *
-+ * Revision 1.64 1997/07/16 20:40:07 scott
-+ * Added multitone monitor fields
-+ *
-+ * Revision 1.63 1997/07/10 02:31:08 mwg
-+ * 1. Added kRxFrameHDLCFlags detected status for the
-+ * framingInfo.
-+ * 2. Added kLapmMNPFrameDetected status to lapmStatusCode.
-+ * 3. Increased the number of AT registers to 35
-+ * 4. Modified LinkLayerSpec structure in modemCommandStruc
-+ * to provide the initial values of rxDataRate &
-+ * txDataRate and RT delay for the cases when
-+ * link layer is started *after* the data connection
-+ * is established and the status snooper is unable
-+ * to determine the rates and RT delay.
-+ * 5. Added a few extra *empty* constant definitions for
-+ * disabled features.
-+ *
-+ * Revision 1.62 1997/07/02 19:15:05 scott
-+ * Added bits for Bel103 & Bel212 modulations.
-+ *
-+ * Revision 1.61 1997/07/02 05:15:16 mwg
-+ * Added MNP code.
-+ *
-+ * Revision 1.60 1997/07/01 23:52:48 mwg
-+ * Modified the record test setup to log and use all the commands.
-+ *
-+ * Revision 1.59 1997/06/25 19:11:26 mwg
-+ * 1. Added new framingInfoCode values for Async framing error reporting;
-+ * 2. Added a substructure to pass serial data format for kSetDTERate cmd;
-+ *
-+ * Revision 1.58 1997/05/28 02:05:08 liang
-+ * Add PCM modem phase 2 codes.
-+ *
-+ * Revision 1.57 1997/05/12 21:55:08 liang
-+ * Add call waiting tone detector module.
-+ *
-+ * Revision 1.56 1997/03/21 23:50:08 liang
-+ * Added initial version of V8bis module to CVS tree.
-+ *
-+ * Revision 1.55 1997/03/19 18:35:05 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.54 1997/03/11 11:11:45 mwg
-+ * Added code to report V42bis statistics.
-+ *
-+ * Revision 1.53 1997/03/04 06:21:08 mwg
-+ * Added logging of most commands.
-+ *
-+ * Revision 1.52 1997/02/28 23:45:13 liang
-+ * Added training progress status report kPhaseJitterDeactivated.
-+ *
-+ * Revision 1.51 1997/02/28 22:23:22 mwg
-+ * Implemented the following features:
-+ * - Cleardown for fax modulations V.27, V.29 V.17
-+ * - Rockwell compatible bitmap report (needed by a customer)
-+ *
-+ * Revision 1.50 1997/02/28 03:05:31 mwg
-+ * Added more logging data types.
-+ *
-+ * Revision 1.49 1997/02/27 05:28:58 mwg
-+ * Added RxFrameOK report.
-+ *
-+ * Revision 1.48 1997/02/27 01:48:53 liang
-+ * Add kV8MenuDataWord1 and kV8MenuDataWord2 connectionInfo status.
-+ *
-+ * Revision 1.47 1997/02/24 02:30:27 mwg
-+ * Added new log data: predictorErrData
-+ *
-+ * Revision 1.46 1997/02/22 03:00:22 liang
-+ * Add echoCancelledSignalData.
-+ *
-+ * Revision 1.45 1997/02/21 01:26:42 liang
-+ * Add six more bits for the Demodulator capabilities to deal with 2nd order
-+ * time tracking & PLLs, as well as shorter NEEC & PFEEC, and front end HBF.
-+ *
-+ * Revision 1.44 1997/02/17 03:09:00 mwg
-+ * Added LAPM statistics printout.
-+ *
-+ * Revision 1.43 1997/02/04 08:38:47 mwg
-+ * Added dc cancelled samples printout.
-+ *
-+ * Revision 1.42 1997/01/29 21:40:28 mwg
-+ * Changed the way timers work: now time is passed as Q4 ms instead of ticks.
-+ * Completed the 8KHz front end implementation.
-+ * Got rid of kSamplesPerSecond constant.
-+ *
-+ * Revision 1.41 1997/01/24 07:13:50 mwg
-+ * Added new statuses for automoder.
-+ *
-+ * Revision 1.40 1997/01/23 02:03:08 mwg
-+ * Replaced old sample rate conversion with the newer one.
-+ * Still has to resolve the automoding issue.
-+ *
-+ * Revision 1.39 1997/01/21 00:55:04 mwg
-+ * Added 8KHz front end functionality.
-+ *
-+ * Revision 1.38 1996/11/13 00:30:55 liang
-+ * Add kAutoLoadReductionEnabled to demodCapabilities so that PFEEC, FEEC, IEEC
-+ * can be disabled automatically, but for worst processor loading test they
-+ * won't be disabled when this bit is not set.
-+ *
-+ * Revision 1.37 1996/11/07 23:07:18 mwg
-+ * Rearranged global variables to allow V.17 short training.
-+ *
-+ * Revision 1.36 1996/09/17 23:55:05 liang
-+ * Change kMaxDataBlockSize from 16 to 24 to handle high data rates.
-+ *
-+ * Revision 1.35 1996/09/05 19:43:39 liang
-+ * Removed caller ID error status code kCallerIDUnknownMessageType, and
-+ * added caller ID status codes kCallerIDUnknownMessage & kCallerIDWholeMessage.
-+ * Changed the callerIDStatus report structure.
-+ *
-+ * Revision 1.34 1996/08/29 00:36:57 liang
-+ * Added kLapmTxFrameStatus and kLapmRxFrameStatus.
-+ *
-+ * Revision 1.33 1996/08/27 22:56:01 liang
-+ * Added kResetHardware status code.
-+ *
-+ * Revision 1.32 1996/08/23 23:35:35 liang
-+ * Add kATDebugStatus and function SoftModemGetHybridDelay.
-+ *
-+ * Revision 1.31 1996/08/22 01:13:19 yg
-+ * Added AT command processor.
-+ *
-+ * Revision 1.30 1996/08/12 21:46:47 mwg
-+ * Added code to report capabilities.
-+ *
-+ * Revision 1.29 1996/08/10 01:59:59 mwg
-+ * Added report of the sent rate sequence;
-+ *
-+ * Revision 1.28 1996/08/07 22:15:02 mwg
-+ * Added new status reports:
-+ * kRemoteFreqOffset
-+ * kIEECDeactivated
-+ * kPFEECDeactivated
-+ *
-+ * Revision 1.27 1996/06/27 05:15:48 mwg
-+ * Added V.24 circuit status.
-+ *
-+ * Revision 1.26 1996/06/27 02:12:43 mwg
-+ * Cleaned the code.
-+ *
-+ * Revision 1.25 1996/06/20 23:57:30 mwg
-+ * Added new training progress status.
-+ *
-+ * Revision 1.24 1996/06/18 21:13:50 mwg
-+ * Added trellis MSE data logging.
-+ *
-+ * Revision 1.23 1996/06/12 02:31:10 mwg
-+ * Added new type: VeryLong
-+ *
-+ * Revision 1.22 1996/06/08 22:15:39 mwg
-+ * Added new status report: kCleardownStarted
-+ * Added new field for the features: kV34bisEnabled
-+ *
-+ * Revision 1.21 1996/05/31 00:29:11 liang
-+ * Add feature bit kV34ExtraINFOPreamble.
-+ *
-+ * Revision 1.20 1996/05/30 23:28:31 mwg
-+ * Replaced enums with #defines
-+ *
-+ * Revision 1.19 1996/05/25 00:38:27 mwg
-+ * Added kProjectedDataRate training progress report.
-+ *
-+ * Revision 1.18 1996/05/24 23:27:15 mwg
-+ * Added mode status codes.
-+ *
-+ * Revision 1.17 1996/05/10 05:39:59 liang
-+ * Move the includes for DEBUG inside "ifndef SoftModemTypes" so that
-+ * cap build won't break.
-+ *
-+ * Revision 1.16 1996/05/08 01:49:34 mwg
-+ * Added capability to setup auxiliary data channel handlers.
-+ *
-+ * Revision 1.15 1996/05/07 22:51:08 liang
-+ * Added group delay estimation and improved symbol rate selection process.
-+ *
-+ * Revision 1.14 1996/05/06 06:49:09 mwg
-+ * Fixed linux problems.
-+ *
-+ * Revision 1.13 1996/05/02 08:40:16 mwg
-+ * Merged in Chromatic bug fixes.
-+ *
-+ * Revision 1.12 1996/05/02 02:26:21 mwg
-+ * Added code to implement dozing functionality for v.34.
-+ *
-+ * Revision 1.11 1996/05/01 22:43:13 mwg
-+ * Added new command: kDozeCmd;
-+ *
-+ * Revision 1.10 1996/05/01 19:20:16 liang
-+ * Add command codes kInitiateRetrainCmd and kInitiateRateRenegotiationCmd.
-+ *
-+ * Revision 1.9 1996/04/25 01:12:37 mwg
-+ * Added new flag: rapid preliminary EC training.
-+ *
-+ * Revision 1.8 1996/04/20 02:26:22 mwg
-+ * Added preliminary far-end echo support
-+ *
-+ * Revision 1.7 1996/04/15 23:26:16 mwg
-+ * Changed flag definitions for v34 modem.
-+ *
-+ * Revision 1.6 1996/04/04 02:35:50 liang
-+ * Change kCid from 0x0080 to 0x0004 (0x0080 is defined as kV32).
-+ *
-+ * Revision 1.5 1996/03/08 23:07:01 mwg
-+ * Added name for the struct.
-+ *
-+ * Revision 1.4 1996/03/02 00:59:27 liang
-+ * Added typedef for V34CodingParameters structure.
-+ *
-+ * Revision 1.3 1996/02/27 02:28:31 mwg
-+ * Fixed a bug in kLapmLongADPEnabled definition.
-+ *
-+ * Revision 1.2 1996/02/19 23:50:59 liang
-+ * Removed compressionSetup parameter from the link layer command structure.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.5 1996/01/15 23:26:04 liang
-+ * Change the softmodem command structure name from SoftwareModemCommand
-+ * to SoftwareModemCommandParameters.
-+ *
-+ *****************************************************************************/
-+#ifndef SoftModemPh
-+#define SoftModemPh
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.1 General types */
-+/****************************************************************************/
-+
-+#ifndef SM_DECL
-+#define SM_DECL
-+#endif
-+
-+#ifdef __VxWORKS__
-+#include <types/vxTypesOld.h>
-+#endif
-+
-+#ifdef DEBUG
-+/* We have to define __wchar_t for Linux */
-+#if defined __linux__ && !defined _NO_WHCAR_DEF_
-+typedef long int __wchar_t;
-+#endif
-+#if !defined(__KERNEL__) && !defined(_CFE_)
-+#include <stdio.h>
-+#include <stdlib.h>
-+#endif
-+
-+#if defined(__linux__) || defined (__unix__) || defined (__unix) || (defined (__mips__) && !defined(_CFE_) && !defined(VXWORKS) && !defined(TARG_OS_RTEMS))/* enable if necessary, but not for dos-based builds */
-+#include <linux/types.h>
-+#endif
-+
-+
-+#endif /* DEBUG */
-+
-+#if defined(W95_DRIVER)
-+#pragma code_seg("_LTEXT", "LCODE")
-+#pragma data_seg("_LDATA", "LCODE")
-+#pragma const_seg("_LDATA", "LCODE")
-+#pragma bss_seg("_LDATA", "LCODE")
-+#pragma pack(1)
-+#endif /* W95_DRIVER */
-+
-+#ifndef SoftModemTypes
-+#include "SoftModemTypes.h"
-+#endif /* SoftModemTypes */
-+
-+
-+typedef struct
-+ {
-+ schar x, y;
-+ } ComplexByte;
-+
-+typedef struct
-+ {
-+ uchar numerator;
-+ uchar denominator;
-+ } Ratio;
-+
-+#ifdef PEGASUS
-+typedef union
-+ {
-+ struct
-+ {
-+ short x, y;
-+ };
-+
-+ long foo;
-+ } ComplexShort;
-+#else
-+typedef struct
-+ {
-+ short x, y;
-+#ifdef GREENHILL
-+ long a[0];
-+#endif
-+ } ComplexShort;
-+#endif
-+
-+typedef struct
-+ {
-+ long x, y;
-+ } ComplexLong;
-+
-+typedef struct
-+ {
-+ ushort x0, x1, x2;
-+ short x3;
-+ } VeryLong;
-+
-+typedef union
-+ {
-+ struct
-+ {
-+ uchar number;
-+ uchar defaultValue; /* default value */
-+ uchar maxValue; /* max allowed value */
-+ uchar minValue; /* should be greater then maxValue to make reg readonly */
-+ } param;
-+ long alignment;
-+ } SRegisterDefinition;
-+
-+#define MacroPaste2(a,b) a##b
-+#define MacroPaste(a,b) MacroPaste2(a,b)
-+#define ALWAYS_LONG_ALIGN() long MacroPaste(ALIGNMENT,__LINE__);
-+
-+#ifdef USE_LONG_ALIGN
-+#define LONG_ALIGN() ALWAYS_LONG_ALIGN()
-+#else
-+#define LONG_ALIGN()
-+#endif
-+
-+typedef ulong bitMap;
-+
-+typedef int pace;
-+#define kStop 0
-+#define kVerySlow 1
-+#define kSlow 2
-+#define kMedium 3
-+#define kFast 4
-+
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.2 Modem specific types */
-+/****************************************************************************/
-+
-+typedef long directionType;
-+#define kXmt 0
-+#define kRcv 1
-+#define kXmtRcv 2
-+
-+
-+#define originating kXmt
-+#define answering kRcv
-+#define kOrg kXmt
-+#define kAns kRcv
-+#define kOrgAns kXmtRcv
-+
-+#define ORIGINATING originating
-+#define ANSWERING answering
-+
-+typedef int pcmCodingType;
-+#define kMuLawPCM 0
-+#define kALawPCM 1
-+
-+#define kMuLawPCMScaleShift 2
-+#define kALawPCMScaleShift 3
-+
-+/* link layer and framer share defines */
-+typedef bitMap framerType;
-+typedef bitMap linkLayerType;
-+#define kNoFramer 0
-+#define kSync 0x00000001
-+#define kAsync 0x00000002
-+#define kHDLC 0x00000004
-+#define kLapm 0x00000008
-+#define kMnp 0x00000010
-+#define kV70 0x00000020
-+#define kSAM 0x00000040
-+
-+
-+typedef bitMap modulationMap;
-+typedef bitMap symbolRateMap;
-+typedef bitMap dataRateMap;
-+typedef bitMap featureMap;
-+typedef bitMap breakType;
-+
-+typedef bitMap audioType;
-+#define kRawAudio 0
-+#define kAudioG729A 1
-+#define kAudioG729 2
-+#define kAudioG723 3
-+
-+
-+#ifndef ADSL_MODEM
-+typedef long modemStatusCode;
-+#endif
-+ /* Information status Codes: 1-31 */
-+#define kSetSampleRate 1
-+#define kModulationKnown 2
-+#define kRxSymbolRate 3
-+#define kTxSymbolRate 4
-+#define kRxCarrierFreq 5
-+#define kTxCarrierFreq 6
-+#define kTxPreemphasisFilter 7
-+#define kTxPowerAdjustment 8
-+#define kRemoteTxPreemphasisFilter 9
-+#define kRemoteTxPowerAdjustment 10
-+#define kRxRateKnown 11
-+#define kTxRateKnown 12
-+#define kRxDataModeActive 13
-+#define kTxDataModeActive 14
-+#define kTxSignalCompleted 15
-+#define kDTMFSignalDetected 16
-+#define kModemSignalDetected 17
-+#define kCallProgressSignalDetected 18
-+#define kCustomSignalDetected 19
-+#define kFaxPreambleDetected 20
-+#define kV24CircuitStatusChange 21
-+#define kHookStateChange 22
-+#define kCallWaitingToneDetected 23
-+#define kMultiToneSignalDetected 24
-+#define kPulseShuntStateChange 25
-+#define kRingFrequency 26
-+
-+
-+ /* Warning status Codes: 32-64 */
-+#define kError 32
-+#define kV34Exception 33
-+#define kClearDownLocal 34
-+#define kClearDownRemote 35
-+#define kCarrierPresent 36
-+#define kCarrierLost 37
-+#define kRetrainingLocal 38
-+#define kRetrainingRemote 39
-+#define kRateRenegotiationLocal 40
-+#define kRateRenegotiationRemote 41
-+#define kFallbackStarted 42
-+#define kFallForwardStarted 43
-+#define kCleardownStarted 44
-+#define kIllegalCommand 45
-+
-+ /* Auxiliary status Codes: 64-.. */
-+#define kTrainingProgress 64
-+#define kConnectionInfo 65
-+#define kDialerStatus 66
-+#define kFramingInfo 67
-+#define kBreakReceived 68
-+#define kLapmStatus 69
-+#define kLapmParameter 70
-+#define kV42bisStatus 71
-+#define kCallerIDStatus 72
-+#define kIOStatus 73
-+#define kCapabilitiesStatus 74
-+#define kSpeakerStatus 75
-+#define kATProfileChanged 76
-+#define kATDebugStatus 77
-+#define kResetHardware 78
-+#define kV8bisStatus 79
-+#define kMnpStatus 80
-+#define kMnpParameter 81
-+#define kV70Status 82
-+#define kV70Parameter 83
-+#define kFaxClass2Status 84
-+#define kAudioStatus 85
-+#define kAudioParameter 86
-+#define kOverlayStatus 87
-+#define kCallerIDCircuitStatus 88
-+#define kV80Status 89
-+#define kV80Parameter 90
-+#define kLocalCountryChanged 91
-+#define kDTERateChanged 92
-+#define kATResponse 93
-+#define kFramerConfigured 94
-+#define kA8RStatus 95
-+#define kA8TStatus 96
-+#define kVersionStatus 97
-+
-+ /* Testing status codes: 128-... */
-+ /* These statuses are generated by modem test suit */
-+#define kTestFinished 128
-+#define kConnectivityTestFinished 129
-+#define kTestCheckSum 130
-+#define kLogFileControl 131
-+#define kTestAtmVcFinished 132
-+#define kTestClearEocFinished 133
-+#define kTestG997Finished 134
-+
-+typedef long modemErrorCode;
-+#define kNoError 0
-+#define kErrorTimerExpired 1
-+#define kErrorNoSReceived 2
-+#define kErrorNoSbarReceived 3
-+
-+
-+typedef long dialerStatusCode;
-+#define kDialCompleted 0
-+#define kNoDialToneDetected 1
-+#define kBongToneDetected 2
-+#define kNoBongToneDetected 3
-+#define kErrorIllegalDialModifier 5
-+#define kDialStarted 6
-+#define kExternalPulseDialDigit 7
-+
-+
-+typedef long framingInfoCode;
-+#define kRxFrameOK 0
-+#define kRxFrameTooLong 1
-+#define kRxFrameCRCError 2
-+#define kTxFrameUnderrun 3
-+#define kRxFrameOverrun 4
-+#define kRxFrameAborted 5
-+#define kRxFrameParityError 6
-+#define kRxFrameFormatError 7
-+#define kRxFrameHDLCFlagsDetected 8
-+
-+
-+typedef long IOStatusCode;
-+#define kRxDataReady 0
-+#define kRxBufferOverflow 1
-+#define kTxSpaceAvailable 2
-+#define kTxBufferEmpty 3
-+
-+typedef long capabilitiesStatusCode;
-+#define kSymbolRates 0
-+#define kDataRates 1
-+#define kFeatures 2
-+#define kDemodCapabilities 3
-+#define kRateThresholdAdjustment 4
-+#define kXmtLevel 5
-+#define kHybridDelay 6
-+#define kAuxFeatures 7
-+
-+
-+typedef long A8TStatusCode;
-+#define kA8TFinished 0
-+
-+typedef long callerIDStatusCode;
-+#define kCallerIDError 0
-+#define kCallerIDChannelSeizureReceived 1
-+#define kCallerIDMarkSignalReceived 2
-+#define kCallerIDTime 3
-+#define kCallerIDTelnum 4
-+#define kCallerIDName 5
-+#define kCallerIDEnd 6
-+#define kCallerIDUnknownMessage 7
-+#define kCallerIDWholeMessage 8
-+
-+
-+typedef long callerIDErrorCode;
-+#define kCallerIDNoError 0
-+#define kCallerIDMarkSignalError 1
-+#define kCallerIDTooManyMarkBits 2
-+#define kCallerIDMessageTooLong 3
-+#define kCallerIDChecksumError 4
-+
-+
-+typedef long connectionInfoCode;
-+#define kRTDelay 1
-+#define kRxSignalLevel 2
-+#define kTimingOffset 3
-+#define kFreqOffset 4
-+#define kPhaseJitter 5
-+#define kSNR 6
-+#define kNearEchoLevel 7
-+#define kSER 8
-+#define kNearEndDelay 9
-+#define kFarEchoLevel 10
-+#define kL1L2SNRDifference 11
-+#define kDCOffset 12
-+#define kTotalRxPower 13
-+#define kRemoteFreqOffset 14
-+/* obsolete #define kV8MenuDataWord1 15 */
-+/* obsolete #define kV8MenuDataWord2 16 */
-+#define kPCMP2AnalogDetSNR 17
-+#define kPCMP2DigitalDetSNR 18
-+#define kPCMP2RBSDetSNR 19
-+#define kEqCenterTapOffset 20
-+#define kPCMPadValue 21
-+#define kPCMRBSMap 22
-+#define kPCMCodingType 23
-+#define kPCMSpectralShapingBits 24
-+#define kLoopbackSelfTestResult 25
-+#define kEyeQuality 26
-+#define kLoopbackSelfTestNewErrs 27
-+#define kV34EqlLengthStatus 28
-+#define kV34EqlOffsetStatus 29
-+#define kV8CallMenuData 30
-+#define kV8JointMenuData 31
-+#define kPCMClientIeecLengthStatus 32
-+#define kPCMClientIeecOffsetStatus 33
-+#define kSeamlessRateChange 34
-+
-+typedef long trainingProgressCode;
-+#define kPeriodicalSignalDetected 0
-+#define kPhaseReversalDetected 1
-+#define kSignalStartDetected 2
-+#define kSignalEndDetected 3
-+#define kSSignalDetected 4
-+#define kSbarSignalDetected 5
-+#define kJ4SignalDetected 6
-+#define kJ16SignalDetected 7
-+#define kJprimeSignalDetected 8
-+#define kMPSignalDetected 9
-+#define kMPprimeSignalDetected 10
-+#define kMPSignalSent 11
-+#define kMPprimeSignalSent 12
-+#define kRateSignalDetected 13
-+#define kESignalDetected 14
-+#define kRateSignalSent 15
-+
-+#define kAutomodingTryModulation 16
-+#define kAutomodingCompleted 17
-+#define kRCFaxBitMapStatus 18
-+
-+#define kV8CIDetected 19
-+#define kV8ANSToneDetected 20
-+#define kV8ANSamDetected 21
-+#define kV8CMDetected 22
-+#define kV8JMDetected 23
-+#define kV8CJDetected 24
-+#define kV8Finished 25
-+
-+#define kV34Phase2Started 26
-+#define kV34Phase2INFOSequenceDetected 27
-+#define kV34Phase2NearEndEchoDetected 28
-+#define kV34Phase2L1Receiving 29
-+#define kV34Phase2L2Receiving 30
-+#define kV34Phase2Finished 31
-+#define kV34Phase3Started 32
-+#define kV34Phase3Finished 33
-+#define kV34Phase4Started 34
-+#define kV34Phase4Finished 35
-+#define kV34DecoderParameters 36
-+#define kV34EncoderParameters 37
-+
-+#define kMaxLocalRxDataRate 38
-+#define kMaxLocalTxDataRate 39
-+#define kMaxRemoteRxDataRate 40
-+#define kMaxRemoteTxDataRate 41
-+#define kProjectedDataRate 42
-+#define kFEECDeactivated 43
-+#define kIEECDeactivated 44
-+#define kPFEECDeactivated 45
-+#define kPhaseJitterDeactivated 46
-+
-+#define kPCMP2DetectedDigitalConnection 47
-+#define kPCMP2DetectedRBS 48
-+#define kX2DetectedPhase1Escape 49
-+
-+#define kStarted1200BpsTraining 50
-+#define kStarted2400BpsTraining 51
-+#define kUnscrambledOneDetected 52
-+#define kScrambled1200BpsOneDetected 53
-+#define kScrambled2400BpsOneDetected 54
-+#define kV22BisS1Detected 55
-+#define kV22InitiateLoop2Test 56
-+#define kV22RespondLoop2Test 57
-+#define kV22Loop2TestAlt01Detected 58
-+
-+#define kDataModemLoop1TestStarted 59
-+#define kDataModemLoop1TestFinished 60
-+#define kDataModemLoop2TestStarted 61
-+#define kDataModemLoop2TestFinished 62
-+#define kDataModemLoop3TestStarted 63
-+#define kDataModemLoop3TestFinished 64
-+#define kDataModemSelfLoopTestEnabled 65
-+
-+#define kPCMPhase3Started 70
-+#define kPCMPhase3Finished 71
-+#define kPCMPhase4Started 72
-+#define kPCMPhase4Finished 73
-+
-+#define kV90JaSignalDetected 74
-+#define kV90JdSignalDetected 75
-+#define kV90JdPrimeSignalDetected 76
-+#define kV90RSignalDetected 77
-+#define kV90RBarSignalDetected 78
-+#define kV90CPSignalDetected 79
-+
-+#define kV90CPtSignalSent 80
-+#define kV90CPSignalSent 81
-+#define kV90CPprimeSignalSent 82
-+
-+
-+#define kV34SeamlessRateChangeRequestSent 83
-+#define kV34SeamlessRateChangeUpdateSent 84
-+#define kV34SeamlessRateChangeRequestReceived 85
-+#define kV34SeamlessRateChangeUpdateReceived 86
-+#define kV34SeamlessRateChangeUpdateTimeout 87
-+
-+#define kV90JaSignalAcknowledged 88
-+
-+#define kV34HCtrlChanPPhDetected 100
-+#define kV34HCtrlChanMPhDetected 101
-+#define kV34HCtrlChanRatesKnown 102
-+#define kV34HDXCtrlChanBinary1Detected 103
-+#define kV34HDXPhase3Started 104
-+#define kV34HDXPhase3Finished 105
-+#define kV34HDXPrimChanBinary1Detected 106
-+#define kFlexEventTRN2AFinished 107
-+
-+#define kV32RanginigStarted 108
-+#define kV32RangingStarted 108
-+#define kV32RanginigFinished 109
-+#define kV32RangingFinished 109
-+
-+
-+typedef long lapmStatusCode;
-+#define kLapmDisconnected 0 /* LAPM disconnected */
-+#define kLapmConnected 1 /* LAPM is connected */
-+#define kLapmV42ODPDetected 2 /* LAPM ODP is detected */
-+#define kLapmV42ADPDetected 3 /* LAPM V.42 ADP is detected */
-+#define kLapmUnknownADPDetected 4 /* LAPM Unsupported ADP is detected */
-+#define kLapmTimeout 5 /* LAPM Timeout */
-+#define kLapmMNPFrameDetected 6 /* LAPM detected MNP frame */
-+#define kLapmDPDetectionTimedOut 7 /* LAPM Unsupported ADP is detected */
-+#define kLapmError 8 /* LAPM Error */
-+#define kLapmTestResult 9 /* LAPM loopback test result */
-+#define kLapmTxFrameStatus 10
-+#define kLapmRxFrameStatus 11
-+#define kLapmTxStatistics 12
-+#define kLapmRxStatistics 13
-+
-+typedef long lapmTakedownReason;
-+#define kLapmRemoteDisconnect 0
-+#define kLapmLocalDisconnect 1
-+#define kLapmCannotConnect 2
-+#define kLapmProtocolError 3
-+#define kLapmCompressionError 4
-+#define kLapmInactivityTimer 5
-+#define kLapmRetryFailed 6
-+
-+
-+typedef long lapmParameterCode;
-+#define kLapmXmtK 0
-+#define kLapmRcvK 1
-+#define kLapmXmtN401 2
-+#define kLapmRcvN401 3
-+#define kLapmTESTSupport 4
-+#define kLapmSREJSupport 5
-+#define kLapmCompDir 6
-+#define kLapmCompDictSize 7
-+#define kLapmCompStringSize 8
-+
-+
-+typedef long lapmErrorCode;
-+#define kLapmNoError 0
-+#define kLapmBufferOverflow 1
-+#define kLapmFrameTooLong 2
-+#define kLapmBadFrame 3
-+#define kLapmUnknownEvent 4
-+/* 6 is reserved for kLapmRetryFailed defined above */
-+
-+
-+typedef long lapmTestResultCode;
-+#define kLapmTestPassed 0
-+#define kLapmTestRequestIgnored 1
-+#define kLapmTestAlreadyInProgress 2
-+#define kLapmTestNotSupported 3
-+#define kLapmTestFailed 4
-+
-+
-+typedef long v42bisStatusCode;
-+#define kV42bisEncoderTransparentMode 0 /* V.42bis encoder transparent mode active */
-+#define kV42bisEncoderCompressedMode 1 /* V.42bis encoder compressed mode active */
-+#define kV42bisDecoderTransparentMode 2 /* V.42bis decoder transparent mode active */
-+#define kV42bisDecoderCompressedMode 3 /* V.42bis decoder compressed mode active */
-+#define kV42bisError 4 /* V.42bis error */
-+#define kV42bisEncoderStatistics 5
-+#define kV42bisDecoderStatistics 6
-+
-+
-+typedef long v42bisErrorCode;
-+#define kV42bisUndefinedEscSequence 0 /* V.42bis undefined escape sequence */
-+#define kV42bisCodewordSizeOverflow 1 /* V.42bis codeword size overflow */
-+#define kV42bisUndefinedCodeword 2 /* V.42bis undefined codeword */
-+
-+typedef long mnpStatusCode;
-+#define kMnpDisconnected 0 /* Mnp disconnected */
-+#define kMnpConnected 1 /* Mnp is connected */
-+#define kMnpFallback 2 /* Mnp is falling back to buffer mode */
-+#define kMnpError 3 /* Mnp Error */
-+#define kMnpTimeout 4 /* Mnp Timeout */
-+#define kMnpInvalidLT 5 /* Invalid LT received */
-+#define kMnpRetransmitFrame 6
-+#define kMnpNack 7
-+#define kMnpTxFrameStatus 8
-+#define kMnpRxFrameStatus 9
-+#define kMnpTxStatistics 10
-+#define kMnpRxStatistics 11
-+
-+typedef long mnpTakedownReason;
-+#define kMnpRemoteDisconnect 0
-+#define kMnpLocalDisconnect 1
-+#define kMnpCannotConnect 2
-+#define kMnpProtocolError 3
-+#define kMnpCompressionError 4
-+#define kMnpInactivityTimer 5
-+#define kMnpRetryFailed 6
-+
-+
-+typedef long mnpParameterCode;
-+#define kMnpProtocolLevel 0
-+#define kMnpServiceClass 1
-+#define kMnpOptimizationSupport 2
-+#define kMnpCompressionSupport 3
-+#define kMnpN401 4
-+#define kMnpK 5
-+
-+
-+typedef long mnpErrorCode;
-+#define kMnpNoError 0
-+#define kMnpBufferOverflow 1
-+#define kMnpFrameTooLong 2
-+#define kMnpBadFrame 3
-+#define kMnpUnknownEvent 4
-+
-+
-+typedef long v70StatusCode;
-+#define kV70Disconnected 0 /* V70 disconnected */
-+#define kV70Connected 1 /* V70 is connected */
-+#define kV70Error 2 /* V70 Error */
-+#define kV70Timeout 3 /* V70 Timeout */
-+#define kV70ChannelDown 4 /* V70 channel released */
-+#define kV70ChannelUp 5 /* V70 channel established */
-+#define kV70AudioChannelDown 6 /* V70 audio channel released */
-+#define kV70AudioChannelUp 7 /* V70 audio channel established */
-+#define kV70DataChannelDown 8 /* V70 data channel released */
-+#define kV70DataChannelUp 9 /* V70 data channel established */
-+#define kV70OOBChannelDown 10 /* V70 out-of-band channel released */
-+#define kV70OOBChannelUp 11 /* V70 out-of-band channel established */
-+#define kV70TxFrameStatus 12
-+#define kV70RxFrameStatus 13
-+#define kV70TxStatistics 14
-+#define kV70RxStatistics 15
-+#define kV70StateTransition 16
-+
-+typedef long v70TakedownReason;
-+#define kV70RemoteDisconnect 0
-+#define kV70LocalDisconnect 1
-+#define kV70CannotConnect 2
-+#define kV70ProtocolError 3
-+#define kV70CompressionError 4
-+#define kV70InactivityTimer 5
-+#define kV70RetryFailed 6
-+
-+
-+typedef long v70ParameterCode;
-+#define kV70SuspendResume 0
-+#define kV70CrcLength 1
-+#define kV70NumberOfDLCs 2
-+#define kV70uIH 3
-+
-+#define kV70LapmXmtK 10
-+#define kV70LapmRcvK 11
-+#define kV70LapmXmtN401 12
-+#define kV70LapmRcvN401 13
-+#define kV70LapmTESTSupport 14
-+#define kV70LapmSREJSupport 15
-+#define kV70LapmCompDir 16
-+#define kV70LapmCompDictSize 17
-+#define kV70LapmCompStringSize 18
-+
-+#define kV70AudioHeader 20 /* if audio header is present in audio frames */
-+#define kV70BlockingFactor 21 /* audio blocking factor (default 1) */
-+#define kV70SilenceSuppression 22 /* audio silence suppression */
-+
-+
-+
-+typedef long v70ErrorCode;
-+#define kV70NoError 0
-+#define kV70BadFrame 1
-+
-+typedef long audioStatusCode;
-+#define kAudioFramesLost 0 /* One or more audio frames were lost */
-+#define kAudioTxBufferOverflow 1
-+#define kAudioRxBufferOverflow 2
-+#define kAudioRxBufferUnderflow 3
-+
-+
-+typedef long v80StatusCode;
-+#define kV80Disconnected 0 /* V80 disconnected */
-+#define kV80Connected 1 /* V80 is connected */
-+#define kV80Error 2 /* V80 Error */
-+#define kV80InBandStatus 3 /* V80 in-band SAM status */
-+#define kV80TxFrameStatus 12
-+#define kV80RxFrameStatus 13
-+#define kV80TxStatistics 14
-+#define kV80RxStatistics 15
-+
-+typedef long v80TakedownReason;
-+#define kV80RemoteDisconnect 0
-+#define kV80LocalDisconnect 1
-+
-+typedef long v80ErrorCode;
-+#define kV80NoError 0
-+#define kV80BadFrame 1
-+
-+typedef long overlayStatusCode;
-+#define kOverlayBegin 0 /* DSP has halted */
-+#define kOverlayEnd 1 /* DSP has received entire overlay */
-+#define kOverlayElapsedTime 2 /* time elapsed(as viewed by datapump) during overlay */
-+#define kOverlayRecordingData 3 /* ms of data that we are recording */
-+#define kOverlayReplayingData 4 /* ms of data that we have replayed so far */
-+#define kOverlayReplayDone 5 /* playback is done */
-+
-+/* types for kOverlayRecording/ReplayingData */
-+#define kOverlayTxData 0
-+#define kOverlayRxData 1
-+
-+/*
-+ * Rockwell faxmodem compatible bitmap (kRCFaxBitMapStatus)
-+ */
-+#define kRCFaxFCD 0x01
-+#define kRCFaxP2 0x02
-+#define kRCFaxPN 0x04
-+#define kRCFaxDCD 0x08
-+#define kRCFaxTX 0x10
-+#define kRCFaxCTS 0x20
-+
-+
-+#ifndef ADSL_MODEM
-+typedef long modemCommandCode;
-+#endif
-+ /* Basic Action commands 00-63 */
-+#define kIdleCmd 0
-+#define kStartFaxModemCmd 1
-+#define kStartDataModemCmd 2
-+#define kStartCallProgressMonitorCmd 3
-+#define kSendTonesCmd 4
-+#define kStartCallerIDRcvCmd 5
-+#define kSetLinkLayerCmd 6
-+#define kSetFramerCmd 7
-+#define kTestLinkLayerCmd 8
-+#define kIdleRcvCmd 9
-+#define kIdleXmtCmd 10
-+#define kSetStatusHandlerCmd 11
-+#define kSetEyeHandlerCmd 12
-+#define kSetLogHandlerCmd 13
-+#define kSendBreakCmd 14
-+#define kSendTestCmd 15
-+#define kDisconnectLinkCmd 16
-+#define kSetXmtGainCmd 17
-+#define kStartADSICmd 18
-+#define kSetHybridDelayCmd 19
-+#define kCleardownCmd 20
-+#define kInitiateRetrainCmd 21
-+#define kInitiateRateRenegotiationCmd 22
-+#define kDialToneIndicator 23
-+#define kSetRxDataHandler 24 /* not used yet */
-+#define kSetTxDataHandler 25 /* not used yet */
-+#define kSetAuxRxDataHandler 26
-+#define kSetAuxTxDataHandler 27
-+#define kRingIndicatorCmd 28
-+#define kDTERateIndicatorCmd 29
-+#define kStartV8bisCmd 30
-+#define kSendMultiTonesCmd 31
-+#define kSetMultiToneParamsCmd 32
-+#define kSetModemSampleRateCmd 33
-+#define kStartDataModemPTTTestCmd 34
-+#define kStartDataModemLoopbackTestCmd 35
-+#define kRingFrequencyCmd 36
-+#define kSetCallWaitingDetectorStateCmd 37
-+#define kV34HDXTurnOffCurrentModeCmd 38
-+#define kSetAudioCmd 39
-+#define kLoopbackTestAutoRespEnableCmd 40
-+#define kSetCallProgressParamsCmd 41
-+#define kSetTrainingDelayReductionCmd 42
-+#define kSetFaxECMPageBufferPtrCmd 43
-+#define kSetLineCurrentStateCmd 44
-+#define kSetFramerParameterCmd 45
-+#define kStartDozeCmd 46
-+#define kEndDozeCmd 47
-+#define kStartRingFrequencyDetectorCmd 48
-+#define kSetBufferingDelayAdjustmentCmd 49
-+
-+ /* Composite action commands 64-127 */
-+#define kDialCmd 64
-+#define kSendCallingToneCmd 65
-+#define kV24CircuitChangeCmd 66
-+#define kStartATModeCmd 67
-+#define kStopATModeCmd 68
-+#define kSetATRegister 69
-+#define kSetATRegisterLimits 70
-+#define kSetATIResponse 71
-+#define kEnableATDebugMode 72
-+#define kSetWhiteListEntry 73
-+#define kSetBlackListEntry 74
-+
-+#define kV70Setup 75 /* additional V70 configuration */
-+#define kEstablishChannel 76 /* Establish new link layer channel (V70) */
-+#define kReleaseChannel 77 /* Release link layer channel (V70) */
-+#define kWaitChannelEstablished 78 /* Wait for establishment of the new link layer channel (V70) */
-+
-+/* unused 79 */
-+#define kMnpOOBFrameCmd 80
-+#define kV80InBandCmd 81 /* V80 In-band commands */
-+#define kSetV250IdString 82
-+#define kSetInternationalTablesCmd 83
-+#define kConfigureCountryCmd 84
-+#define kConigureCountryCmd 84
-+#define kV8ControlCmd 85
-+#define kV8bisSendMessage 86
-+#define kSetHWIdCmd 87
-+#define kSetCodecIdCmd 88
-+#define kOverCurrentDetected 89
-+
-+
-+
-+typedef long v8ControlType;
-+#define kEnableDTEControl 1
-+#define kSetV8ControlTimeout 2
-+#define kSetCIValue 3
-+#define kSetCMValue 4
-+#define kSetJMValue 5
-+#define kSendCJ 6
-+#define kSetCallFunctionCategory 7
-+
-+typedef long v250IdStringCode;
-+#define kGMIString 1
-+#define kGMMString 2
-+#define kGMRString 3
-+#define kGSNString 4
-+#define kGOIString 5
-+
-+typedef long kCallProgressParameterCode;
-+#define kModemSignalPowerThreshold 1
-+#define kDialtonePowerThreshold 2
-+#define kRingBackPowerThreshold 3
-+#define kBusyPowerThreshold 4
-+#define kReorderPowerThreshold 5
-+#define k2ndDTnPowerThreshold 6
-+#define kMinDialtoneTime 7
-+#define kDialtoneFreqRange 8
-+#define kRingBackFreqRange 9
-+#define kBusyFreqRange 10
-+#define kReorderFreqRange 11
-+#define k2ndDTnFreqRange 12
-+
-+
-+typedef long framerParameterCode;
-+#define kSetHDLCLeadingFlags 0
-+#define kHDLCResetFlagDetection 1
-+#define kSyncFramerSetup 2
-+#define kHDLCSendCRC 3
-+#define kHDLCSendFlags 4
-+#define kHDLCSendAborts 5
-+
-+
-+typedef long logDataCode;
-+#define eyeData 0
-+#define mseData 1
-+#define rxData 2
-+#define txData 3
-+#define neecData 4
-+#define eqlData 5
-+#define ieecData 6
-+#define feecData 7
-+#define eqlPllData 8
-+#define feecPllData 9
-+#define timingData 10
-+#define pjPhaseErrData 11
-+#define pjEstimateData 12
-+#define pjEstDiffData 13
-+#define pjCoefData 14
-+#define inputSignalData 15
-+#define outputSignalData 16
-+#define agcGainData 17
-+#define automoderData 18
-+#define v8CMData 19
-+#define v8JMData 20
-+#define inputAfterNeecData 21
-+#define eqlErrData 22
-+#define dpskMicrobitsData 23
-+#define v34P2LSamplesData 24
-+#define phaseSplittedLData 25
-+#define fftedLData 26
-+#define channelSNRData 27
-+#define noiseEstimateData 28
-+#define signalEstimateData 29
-+#define v34INFOData 30
-+#define v34ChanProbData 31
-+#define v34P2OutputData 32
-+#define v8ANSamDetectData 33
-+#define pFeecData 34
-+#define channelDelayData 35
-+#define timingOffsetData 36
-+#define trellisMSEData 37
-+#define interpolatedSignalData 38
-+#define dcCancelledSignalData 39
-+#define echoCancelledSignalData 40
-+#define predictorErrData 41
-+#define commandInfoData 42
-+#define unusedInfoData 43
-+#define atCommandInfoData 44
-+#define atResponseInfoData 45
-+#define hwTerminalTxData 46
-+#define hwTerminalRxData 47
-+#define statusInfoData 48
-+#define channelResponseData 49
-+#define channelImpulseRespData 50
-+#define x2PcmP1DetectorInData 51
-+#define x2PcmP1DetectorOutData 52
-+#define eqlRealData 53
-+#define ieecRealData 54
-+#define neecOutputData 55
-+#define precodedEqlOutputData 56
-+#define eqlRealErrData 57
-+#define idealEqlOutputData 58
-+#define agcData 59
-+#define pcmInfidelityData 60
-+#define v42bisCycleCount 61
-+#define pcmImdOffsetCoefData 62
-+#define pcmImdOffsetData 63
-+#define v90RcvdDilLongData 64
-+#define v90RcvdDilShortData 65
-+#define v90DilProducedData 66
-+#define pcmEncoderKbitsData 67
-+#define pcmEncoderMbitsData 68
-+#define pcmEncoderSbitsData 69
-+#define pcmDecoderKbitsData 70
-+#define pcmDecoderMbitsData 71
-+#define pcmDecoderSbitsData 72
-+#define v90CPorCPtData 73
-+#define mnpDecoderInputData 74
-+#define mnpDecoderOutputData 75
-+#define v42bisEncoderInputData 76
-+#define v42bisDecoderInputData 77
-+#define modulatorInputData 78
-+#define modulatorOutputData 79
-+#define encodedStatusData 80
-+#define blockFramerTxData 81
-+#define blockFramerRxData 82
-+#define framerTxData 83
-+#define framerRxData 84
-+#define dpskBasebandData 85
-+#define dpskBasebandLPFedData 86
-+#define dpskRealData 87
-+#define bandEdgeCorrectedSignalData 88
-+#define atmLogData 89
-+#define clearEocLogData 90
-+#define g997LogData 91
-+
-+
-+#define kLogDataDelimiter 0xFEFEFEFE
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.3 Handlers */
-+/****************************************************************************/
-+
-+typedef void (SM_DECL *rcvHandlerType) (void *gDslVars, int, short*);
-+typedef void (SM_DECL *xmtHandlerType) (void *gDslVars, int, short*);
-+typedef int (SM_DECL *xmtHandlerWithRtnValType) (void *gDslVars, int, short*);
-+typedef void (SM_DECL *timerHandlerType) (void *gDslVars, long);
-+typedef int (SM_DECL *interpolatorHandlerType) (void *gDslVars, int, short*, short*);
-+typedef void (SM_DECL *controlHandlerType) (void *gDslVars, int);
-+
-+typedef int (SM_DECL *txDataHandlerType) (void *gDslVars, int, uchar*);
-+typedef int (SM_DECL *rxDataHandlerType) (void *gDslVars, int, uchar*);
-+
-+typedef bitMap (SM_DECL *signalDetectorType) (void *gDslVars, int, long, long*);
-+
-+
-+typedef void (SM_DECL *hookHandlerType) (void *gDslVars, Boolean);
-+
-+typedef short* (SM_DECL *sampBuffPtrType) (void *gDslVars, int);
-+
-+typedef void (SM_DECL *eyeHandlerType) (void *gDslVars, int, ComplexShort*);
-+typedef void (SM_DECL *logHandlerType) (void *gDslVars, logDataCode, ...);
-+
-+typedef void (SM_DECL *voidFuncType) (void *gDslVars);
-+
-+typedef int (SM_DECL *txAudioHandlerType) (void *gDslVars, int, short*);
-+typedef int (SM_DECL *rxAudioHandlerType) (void *gDslVars, int, short*);
-+
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.4 Structures */
-+/****************************************************************************/
-+
-+/*
-+ * AT command processor definitions
-+ */
-+#define kATRegistersNumber 56
-+#define kFirstConfigurationRegister 500
-+#define kLastConfigurationRegister 515
-+#define kFirstInternationalRegister 516
-+#define kLastInternationalRegister 595
-+
-+
-+
-+#define kATMaxDialStringSize 128
-+typedef struct
-+ {
-+ struct
-+ {
-+ uchar loadNumber; /* Which profile to load upon powerup/reset */
-+ uchar countryCode; /* T.35 Country Code */
-+ uchar profile[2][kATRegistersNumber];
-+ uchar dialString[4][kATMaxDialStringSize + 1];
-+ } config;
-+ ulong versionCode;
-+ ulong crcCheckSum;
-+ } NVRAMConfiguration;
-+
-+/* Structure to hold international settings */
-+typedef struct
-+ {
-+ char *name;
-+ int countryCode;
-+ const SRegisterDefinition *userRegisters;
-+ const ulong *configRegisters;
-+ } CountryDescriptor;
-+
-+/*
-+ * V.34 coding parameters structure
-+ */
-+
-+typedef struct
-+ {
-+ /* DO NOT CHANGE THE ORDER OF FIELDS IN THIS STRUCTURE!
-+ * (Some assembly code depends on it!) If you
-+ * must add fields, please do so at the bottom.
-+ */
-+
-+ int symbolRateIndex,
-+ dataRateIndex,
-+ userSNRAdjustment;
-+ Boolean auxChannel,
-+ expConstellation,
-+ precoding,
-+ nonlinearCoding;
-+ schar J, /* number of data frames in superframe */
-+ P, /* number of mapping frames in a data frame */
-+ r, /* number of high mapping frames in a data frame */
-+ b, /* number of data bits in a mapping frame */
-+ W, /* number of aux bits in a data frame */
-+ K, /* number of S bits in a mapping frame */
-+ q, /* number of Q bits in a 2D symbol */
-+ M; /* number of rings in shell mapping */
-+ long nominalVariance; /* the signal variance which gives 1e-2 BLER Q10 */
-+ int bitsPerDataFrame;
-+ short quantRoundOff,
-+ quantMask;
-+ uchar nTrellisStates,
-+ log2NTrellisStates;
-+ short gain1xmt,
-+ gain2xmt,
-+ gain1rcv,
-+ gain2rcv;
-+ ushort bitInversionPattern;
-+ } V34CodingParams;
-+
-+typedef long v8bisStatusCode;
-+typedef bitMap v8bisConnectionSetup;
-+#if defined(V8BIS) || defined(AT_COMMANDS_V8BIS)
-+#include "V8bisMainTypes.h"
-+#endif
-+
-+#define kMaxMultiTones 4 /* MultiTone: search for up to this many tones at once */
-+
-+#ifndef ADSL_MODEM
-+typedef struct
-+ {
-+ modemStatusCode code;
-+ union
-+ {
-+ long value;
-+ long freq;
-+ modemErrorCode error;
-+ modulationMap modulation;
-+ modulationMap modemSignal;
-+ dataRateMap dataRate;
-+ long dtmfSignal;
-+ bitMap callProgressSignal;
-+ bitMap customSignal;
-+ void *ptr;
-+ struct
-+ {
-+ long detected;
-+ long numTones;
-+ long tones[kMaxMultiTones];
-+ } multiToneInfo;
-+ struct
-+ {
-+ v8bisStatusCode code;
-+ long value;
-+ } v8bisStatus;
-+ struct
-+ {
-+ trainingProgressCode code;
-+ long value;
-+ } trainingInfo;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } v24Circuit;
-+ struct
-+ {
-+ trainingProgressCode code;
-+ void* ptr;
-+ } advancedTrainingInfo;
-+ struct
-+ {
-+ capabilitiesStatusCode code;
-+ long value;
-+ } capabilitiesStatusInfo;
-+ struct
-+ {
-+ connectionInfoCode code;
-+ long value;
-+ } connectionInfo;
-+ struct
-+ {
-+ connectionInfoCode code;
-+ int length;
-+ uchar *ptr;
-+ } advancedConnectionInfo;
-+ struct
-+ {
-+ dialerStatusCode code;
-+ long value;
-+ long makeTime;
-+ long breakTime;
-+ } dialerStatus;
-+ struct
-+ {
-+ long enabled;
-+ long volume;
-+ } speakerStatus;
-+ framingInfoCode framingInfo;
-+ IOStatusCode ioStatus;
-+ struct
-+ {
-+ lapmStatusCode code;
-+ union
-+ {
-+ long value;
-+ lapmTakedownReason reason;
-+ lapmErrorCode error;
-+ lapmTestResultCode testResult;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ } param;
-+ } lapmStatus;
-+ struct
-+ {
-+ lapmParameterCode code;
-+ long value;
-+ } lapmParameter;
-+ struct
-+ {
-+ v42bisStatusCode code;
-+ union
-+ {
-+ long value;
-+ v42bisErrorCode error;
-+ struct
-+ {
-+ long nBytesIn;
-+ long nBytesOut;
-+ } statistic;
-+ } param;
-+ } v42bisStatus;
-+ struct
-+ {
-+ mnpStatusCode code;
-+ union
-+ {
-+ long value;
-+ mnpTakedownReason reason;
-+ mnpErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ ulong nSize;
-+ uchar *Buffer;
-+ } fallback;
-+ struct
-+ {
-+ char *header;
-+ void *frame;
-+ } frame;
-+ struct
-+ {
-+ long nack;
-+ long rFrameNo;
-+ } timeout;
-+ struct
-+ {
-+ long frameNo;
-+ long framesPending;
-+ } retrFrame;
-+ } param;
-+ } mnpStatus;
-+ struct
-+ {
-+ mnpParameterCode code;
-+ long value;
-+ } mnpParameter;
-+ struct
-+ {
-+ v70StatusCode code;
-+ union
-+ {
-+ long value;
-+ v70TakedownReason reason;
-+ v70ErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long nack;
-+ long rFrameNo;
-+ } timeout;
-+ struct
-+ {
-+ long frameNo;
-+ long framesPending;
-+ } retrFrame;
-+ struct
-+ {
-+ long ChannelId;
-+ long DLCI;
-+ ulong LcNum;
-+ v70TakedownReason reason;
-+ } channelInfo;
-+ struct
-+ {
-+ long ChannelId;
-+ long stateOld;
-+ long stateNew;
-+ } stateInfo;
-+ } param;
-+ ulong v70Time;
-+ } v70Status;
-+ struct
-+ {
-+ audioStatusCode code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long nReq;
-+ long nAvail;
-+ } buffer;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ } param;
-+ } audioStatus;
-+ struct
-+ {
-+ v80StatusCode code;
-+ union
-+ {
-+ long value;
-+ v80TakedownReason reason;
-+ v80ErrorCode error;
-+ struct
-+ {
-+ long nFrames;
-+ long nFrameErrors;
-+ } statistic;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frame;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } inBand;
-+ } param;
-+ ulong v80Time;
-+ } v80Status;
-+ struct
-+ {
-+ v70ParameterCode code;
-+ long value;
-+ } v70Parameter;
-+ struct
-+ {
-+ breakType type;
-+ long length;
-+ } breakStatus;
-+ struct
-+ {
-+ callerIDStatusCode code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ callerIDErrorCode code;
-+ long value;
-+ } callerIDError;
-+ struct
-+ {
-+ long length;
-+ char* ptr;
-+ } message;
-+ } param;
-+ } callerIDStatus;
-+ struct
-+ {
-+ ulong signal;
-+ uchar *msg1;
-+ long msg1Length;
-+ uchar *msg2;
-+ long msg2Length;
-+ } A8RStatus;
-+ struct
-+ {
-+ overlayStatusCode code;
-+ long value;
-+ long value2;
-+ } overlayStatus;
-+ struct
-+ {
-+ ulong nBits;
-+ ulong nBlocks;
-+ ulong nBitErrors;
-+ ulong nBlockErrors;
-+
-+ ulong nAudioBits;
-+ ulong nAudioBlocks;
-+ ulong nAudioSyncErrors;
-+ ulong nAudioBlockErrors;
-+ } testResults;
-+ ulong checksum;
-+ struct
-+ {
-+ ulong sizeM;
-+ uchar *filename;
-+ } logFileControlStatus;
-+ struct
-+ {
-+ long direction;
-+ long module;
-+ long message;
-+ long data;
-+ }
-+ faxClass2Status;
-+
-+ } param;
-+ } modemStatusStruct;
-+
-+typedef void (SM_DECL *statusHandlerType) (void *gDslVars, modemStatusStruct*);
-+#endif /* ADSL_MODEM */
-+
-+/****************************************************************************/
-+/* 1. Type definitions. */
-+/* */
-+/* 1.5 Command structure */
-+/****************************************************************************/
-+
-+typedef struct
-+ {
-+ Boolean remoteModemIsFlex;
-+ uchar countryCode;
-+ ushort manufacturerId;
-+ uchar licenseeId;
-+ uchar productCapabilities;
-+ Boolean digitalModeFlag;
-+ Boolean prototypeFlag;
-+ uchar version;
-+ }
-+FlexV8bisStruct;
-+
-+typedef struct
-+ {
-+ symbolRateMap symbolRates;
-+ dataRateMap dataRates;
-+ dataRateMap dataRates56k;
-+ dataRateMap dataRatesFlex;
-+ featureMap features;
-+ bitMap auxFeatures;
-+ bitMap demodCapabilities;
-+ long rateThresholdAdjustment; /* dB Q4 */
-+ FlexV8bisStruct flexRemoteV8bisInfo;
-+ } dataPumpCapabilities;
-+
-+#ifndef ADSL_MODEM
-+typedef struct SoftwareModemCommandParameters
-+ {
-+ modemCommandCode command;
-+ union
-+ {
-+ long xmtGain;
-+ ulong hybridDelayQ4ms;
-+ long modemSampleRate;
-+ long timeInMs;
-+ long state;
-+ long freq;
-+ NVRAMConfiguration *nvramConfigurationPtr;
-+ long enabled;
-+ long value;
-+ uchar *phoneNumber;
-+ uchar *faxECMPageBufferPtr;
-+ CountryDescriptor *countryDescriptorTable;
-+ struct
-+ {
-+ dataRateMap dteRate;
-+ bitMap format;
-+ } dteRateSpec;
-+ struct
-+ {
-+ v8ControlType code;
-+ long value;
-+ uchar *buffer;
-+ } v8ControlSpec;
-+ struct
-+ {
-+ directionType direction;
-+ v8bisConnectionSetup setup;
-+ void *capPtr;
-+ voidFuncType confirmMsFunc;
-+ voidFuncType genMsFunc;
-+ xmtHandlerWithRtnValType ogmFunc;
-+ } v8bisSpec;
-+ struct
-+ {
-+ directionType direction;
-+ } ADSISpec;
-+ struct
-+ {
-+ directionType direction;
-+ modulationMap modulations;
-+ dataPumpCapabilities capabilities;
-+ } modeSpec;
-+ struct
-+ {
-+ long time,
-+ freq1,
-+ freq2,
-+ freq3,
-+ freq4,
-+ mag1,
-+ mag2,
-+ mag3,
-+ mag4;
-+ } toneSpec;
-+ struct
-+ {
-+ long signal;
-+ uchar *msg1;
-+ long msg1Length;
-+ uchar *msg2;
-+ long msg2Length;
-+ long sig_en;
-+ long msg_en;
-+ long supp_delay;
-+ }
-+ v8bisMessageSpec;
-+ struct
-+ {
-+ linkLayerType type;
-+ bitMap setup;
-+ dataRateMap rxDataRate;
-+ dataRateMap txDataRate;
-+ long rtDelayQ4ms;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } linkLayerSpec;
-+ struct
-+ {
-+ framerType type;
-+ bitMap setup;
-+ directionType direction;
-+ long fill[2]; /* need to match linkLayerSpec */
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } framerSpec;
-+ struct
-+ {
-+ framerParameterCode code;
-+ long value;
-+ } framerParameterSpec;
-+ struct
-+ {
-+ bitMap callProgressDetectorSetup;
-+ signalDetectorType callProgressDetectorPtr; /* if nil, use defaults */
-+ signalDetectorType customDetectorPtr; /* if nil, no custom detector */
-+ } callProgressMonitorSpec;
-+ struct
-+ {
-+ ulong maxTones; /* maximum number of simultaneous tones to detect */
-+ ulong allowableVariance; /* maximum cumulative variance in the eight interpolated frequencies */
-+ ulong totalPowerThreshold; /* ignore complete block if power less than this */
-+ ulong powerShiftThreshold; /* ignore a bin if its power is less than (totalPowerValue >> powerShiftThreshold) */
-+ ulong toneMatchThresholdHz; /* tones within +/- this many Hz of original tone are considered the same tone */
-+ ulong binSeparation; /* ignore tones with a spacing of less than this */
-+ ulong outsideFreqDeviation; /* an individual value in the interpolated array can be up to this many Hz outside of the expected angle range */
-+ } multiToneSpec;
-+ struct
-+ {
-+ uchar *dialString; /* nil limited string for DTMF dialing sequence */
-+ long pulseBreakTime,
-+ pulseMakeTime,
-+ pulseInterDigitTime,
-+ toneDigitTime,
-+ toneInterDigitTime,
-+ toneLoGroupMag,
-+ toneHiGroupMag,
-+ flashTime,
-+ pauseTime,
-+ signalWaitTimeout,
-+ blindDialingTimeout;
-+ bitMap dialerSetup;
-+ bitMap callProgressDetectorSetup;
-+ signalDetectorType callProgressDetectorPtr; /* if nil, use defaults */
-+ signalDetectorType customDetectorPtr; /* if nil, no custom detector */
-+ hookHandlerType hookHandlerPtr; /* nil if DTMF dialing specified*/
-+ } dialSpec;
-+ struct
-+ {
-+ long timeOn,
-+ timeOff,
-+ freq;
-+ } callingToneSpec;
-+ union
-+ {
-+ statusHandlerType statusHandlerPtr;
-+ eyeHandlerType eyeHandlerPtr;
-+ logHandlerType logHandlerPtr;
-+ rxDataHandlerType rxDataHandlerPtr;
-+ txDataHandlerType txDataHandlerPtr;
-+ } handlerSpec;
-+ struct
-+ {
-+ breakType type;
-+ long length;
-+ } breakSpec;
-+ struct
-+ {
-+ long length;
-+ uchar *dataPtr;
-+ } lapmTestSpec;
-+ struct
-+ {
-+ bitMap setupLapm;
-+ rxDataHandlerType rxAudioHandlerPtr;
-+ txDataHandlerType txAudioHandlerPtr;
-+ } v70SetupSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ ulong LogChannelNum;
-+ ulong PortNum;
-+ } EstChannelSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ } WaitChannelSpec;
-+ struct
-+ {
-+ ulong ChannelId;
-+ ulong LogChannelNum;
-+ ulong PortNum;
-+ ulong DLCI;
-+ } RelChannelSpec;
-+ struct
-+ {
-+ audioType type;
-+ bitMap setup;
-+ dataRateMap rxAudioRate;
-+ dataRateMap txAudioRate;
-+ rxAudioHandlerType rxAudioHandlerPtr;
-+ txAudioHandlerType txAudioHandlerPtr;
-+ } audioSpec;
-+ struct
-+ {
-+ long code;
-+ long value;
-+ } v24Circuit;
-+ struct
-+ {
-+ ulong code;
-+ ulong value;
-+ ulong minValue;
-+ ulong maxValue;
-+ } atRegister;
-+ struct
-+ {
-+ long code;
-+ uchar *response;
-+ } atiSpec;
-+ struct
-+ {
-+ long length;
-+ uchar *framePtr;
-+ } frameSpec;
-+ struct
-+ {
-+ long code;
-+ union
-+ {
-+ long value;
-+ struct
-+ {
-+ long loFreq1;
-+ long hiFreq1;
-+ long loFreq2;
-+ long hiFreq2;
-+ } freqRange;
-+ } params;
-+ } callProgressParamSpec;
-+ struct
-+ {
-+ v250IdStringCode v250IdCode;
-+ uchar *v250IdString;
-+ } v250IdSpec;
-+
-+ } param;
-+ } modemCommandStruct;
-+
-+typedef Boolean (*commandHandlerType) (modemCommandStruct*);
-+#endif /* ADSL_MODEM */
-+
-+
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.1 Definitive constants */
-+/****************************************************************************/
-+
-+#define kMaxSampleBlockSize 48
-+#define kMaxDataBlockSize 48
-+
-+#define kMaxDialStringLength 127
-+#define kCallProgressSampleRate 7200
-+
-+#define kMaxCallerIDMessageLength 80
-+
-+/****************************************************************************/
-+/* 2. Constant definitions. */
-+/* */
-+/* 2.2 Bit maps */
-+/****************************************************************************/
-+
-+/* modulationMap */
-+
-+#define kIdle 0x00000000
-+#define kV25 0x00000001
-+#define kV8 0x00000002
-+#define kCid 0x00000004
-+#define kV8bis 0x00000008
-+#define kV21 0x00000010
-+#define kV22 0x00000020
-+#define kV23 0x00000040
-+#define kV32 0x00000080
-+#define kV34 0x00000100
-+#define kX2 0x00000200
-+#define kV90 0x00000400
-+#define k56Flex 0x00000800
-+#define kV27 0x00001000
-+#define kV29 0x00002000
-+#define kV17 0x00004000
-+#define kV34HDX 0x00008000
-+#define kV34HDXC 0x00010000
-+#define kBell103 0x00100000
-+#define kBell212 0x00200000
-+#define kDataCallingTone 0x01000000
-+#define kFaxCallingTone 0x02000000
-+
-+#define kV22FastNZConnect 0x04000000
-+#define kV22FastNNZConnect 0x08000000
-+#define kV22FastConnect (kV22FastNZConnect|kV22FastNNZConnect)
-+#define kV22bisFastConnect 0x10000000
-+
-+
-+#define kDataModulations (kV25 | kV8 | kV21 | kV22FastConnect | kV22bisFastConnect | kV22 | kV23 | kV32 | kV34 | kBell103 | kBell212)
-+#define kDataOnlyModulations (kV21 | kV22 | kV23 | kV32 | kBell103 | kBell212)
-+#define kPCMModulations (kV90 | kX2 | k56Flex)
-+
-+#define kFaxModulations (kV25 | kV21 | kV27 | kV29 | kV17)
-+#define kFaxOnlyModulations (kV27 | kV29 | kV17)
-+#define kFaxModulationShift 12
-+
-+/* symbolRateMap */
-+
-+#define k1200Hz 0x00000001
-+#define k1600Hz 0x00000002
-+#define k2400Hz 0x00000004
-+#define k2743Hz 0x00000008
-+#define k2800Hz 0x00000010
-+#define k3000Hz 0x00000020
-+#define k3200Hz 0x00000040
-+#define k3429Hz 0x00000080
-+#define k8000Hz 0x00000100
-+
-+#define kAllSymbolRates ( k1200Hz | k1600Hz | k2400Hz | k2743Hz | \
-+ k2800Hz | k3000Hz | k3429Hz | k8000Hz )
-+
-+/* dataRateMap */
-+
-+#define k75bps 0x00000002
-+#define k300bps 0x00000004
-+#define k600bps 0x00000008
-+#define k1200bps 0x00000010
-+#define k2400bps 0x00000020
-+#define k4800bps 0x00000040
-+#define k7200bps 0x00000080
-+#define k9600bps 0x00000100
-+#define k12000bps 0x00000200
-+#define k14400bps 0x00000400
-+#define k16800bps 0x00000800
-+#define k19200bps 0x00001000
-+#define k21600bps 0x00002000
-+#define k24000bps 0x00004000
-+#define k26400bps 0x00008000
-+#define k28800bps 0x00010000
-+#define k31200bps 0x00020000
-+#define k33600bps 0x00040000
-+#define k36000bps 0x00080000
-+#define k38400bps 0x00100000
-+#define k57600bps 0x00200000
-+#define k115200bps 0x00400000
-+#define k230400bps 0x00800000
-+#define k460800bps 0x01000000
-+#define k921600bps 0x02000000
-+/*
-+ * kPCMRate is used to identify that the reported rate is
-+ * PCM modulation rate, and is only used for PCM modulation while
-+ * reporting rate !!!!
-+ */
-+#define kPCMRate 0x40000000
-+#define kPCMFlexRate 0x80000000
-+#define kAllDataRates 0x0FFFFFFF
-+
-+/* rates specific for X2 and V.90 */
-+#define kPCM25333bps 0x00000001
-+#define kPCM26666bps 0x00000002
-+#define kPCM28000bps 0x00000004
-+#define kPCM29333bps 0x00000008
-+#define kPCM30666bps 0x00000010
-+#define kPCM32000bps 0x00000020
-+#define kPCM33333bps 0x00000040
-+#define kPCM34666bps 0x00000080
-+#define kPCM36000bps 0x00000100
-+#define kPCM37333bps 0x00000200
-+#define kPCM38666bps 0x00000400
-+#define kPCM40000bps 0x00000800
-+#define kPCM41333bps 0x00001000
-+#define kPCM42666bps 0x00002000
-+#define kPCM44000bps 0x00004000
-+#define kPCM45333bps 0x00008000
-+#define kPCM46666bps 0x00010000
-+#define kPCM48000bps 0x00020000
-+#define kPCM49333bps 0x00040000
-+#define kPCM50666bps 0x00080000
-+#define kPCM52000bps 0x00100000
-+#define kPCM53333bps 0x00200000
-+#define kPCM54666bps 0x00400000
-+#define kPCM56000bps 0x00800000
-+#define kPCM57333bps 0x01000000
-+
-+#define kV90ServerToClientDataRates \
-+ ( kPCM28000bps | kPCM29333bps | kPCM30666bps | \
-+ kPCM32000bps | kPCM33333bps | kPCM34666bps | \
-+ kPCM36000bps | kPCM37333bps | kPCM38666bps | \
-+ kPCM40000bps | kPCM41333bps | kPCM42666bps | \
-+ kPCM44000bps | kPCM45333bps | kPCM46666bps | \
-+ kPCM48000bps | kPCM49333bps | kPCM50666bps | \
-+ kPCM52000bps | kPCM53333bps | kPCM54666bps | \
-+ kPCM56000bps | kPCM57333bps )
-+
-+#define kV90ClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | \
-+ k14400bps | k16800bps | k19200bps | k21600bps | \
-+ k24000bps | k26400bps | k28800bps | k31200bps | \
-+ k33600bps )
-+
-+
-+
-+#define kX2ServerToClientDataRates \
-+ ( kPCM25333bps | kPCM26666bps | kPCM28000bps | \
-+ kPCM29333bps | kPCM30666bps | kPCM32000bps | \
-+ kPCM33333bps | \
-+ kPCM34666bps | kPCM36000bps | kPCM37333bps | \
-+ kPCM38666bps | kPCM40000bps | kPCM41333bps | \
-+ kPCM42666bps | kPCM44000bps | kPCM45333bps | \
-+ kPCM46666bps | kPCM48000bps | kPCM49333bps | \
-+ kPCM50666bps | kPCM52000bps | kPCM53333bps | \
-+ kPCM54666bps | kPCM56000bps | kPCM57333bps )
-+#define kX2ClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | k14400bps | \
-+ k16800bps | k19200bps | k21600bps | k24000bps | k26400bps | k28800bps | \
-+ k31200bps )
-+
-+ /*
-+ Rates specific for Flex
-+ */
-+#define kPCMFlex32000bps 0x00000001
-+#define kPCMFlex34000bps 0x00000002
-+#define kPCMFlex36000bps 0x00000004
-+#define kPCMFlex38000bps 0x00000008
-+#define kPCMFlex40000bps 0x00000010
-+#define kPCMFlex42000bps 0x00000020
-+#define kPCMFlex44000bps 0x00000040
-+#define kPCMFlex46000bps 0x00000080
-+#define kPCMFlex48000bps 0x00000100
-+#define kPCMFlex50000bps 0x00000200
-+#define kPCMFlex52000bps 0x00000400
-+#define kPCMFlex54000bps 0x00000800
-+#define kPCMFlex56000bps 0x00001000
-+#define kPCMFlex58000bps 0x00002000
-+#define kPCMFlex60000bps 0x00004000
-+
-+#define kFlexServerToClientDataRates \
-+ ( kPCMFlex32000bps | kPCMFlex34000bps | kPCMFlex36000bps | kPCMFlex38000bps | \
-+ kPCMFlex40000bps | kPCMFlex42000bps | kPCMFlex44000bps | kPCMFlex46000bps | \
-+ kPCMFlex48000bps | kPCMFlex50000bps | kPCMFlex52000bps | kPCMFlex52000bps | \
-+ kPCMFlex54000bps | kPCMFlex56000bps | kPCMFlex58000bps | kPCMFlex60000bps )
-+
-+#define kFlexClientToServerDataRates \
-+ ( k4800bps | k7200bps | k9600bps | k12000bps | \
-+ k14400bps | k16800bps | k19200bps | k21600bps | \
-+ k24000bps | k26400bps | k28800bps | k31200bps )
-+
-+
-+#define k2400BitShift 5
-+#define k4800BitShift 6
-+
-+#define kPCM28000bpsShift 2
-+
-+#define kV21Rates k300bps
-+#define kV22Rates k1200bps
-+#define kV22bisRates (k1200bps | k2400bps)
-+#define kV23Rates (k75bps | k1200bps)
-+#define kCidRates (k1200bps)
-+#define kV32Rates (k4800bps | k9600bps)
-+#define kV32bisRates (kV32Rates | k7200bps | k12000bps | k14400bps)
-+#define kV32terboRates (kV32bisRates | k16800bps | k19200bps)
-+#define kV34Rates ( k2400bps | k4800bps | k7200bps | k9600bps | k12000bps | k14400bps | \
-+ k16800bps | k19200bps | k21600bps | k24000bps | k26400bps | k28800bps | \
-+ k31200bps | k33600bps )
-+
-+#define kV27Rates (k2400bps | k4800bps)
-+#define kV29Rates (k4800bps | k7200bps | k9600bps)
-+#define kBell103Rates k300bps
-+#define kBell212Rates k1200bps
-+
-+
-+/* Demodulator capabilities */
-+#define kNeecEnabled 0x00000001
-+#define kPFeecEnabled 0x00000002
-+#define kIeecEnabled 0x00000004
-+#define kFeecEnabled 0x00000008
-+
-+#define kRapidEqualizerTraining 0x00000010
-+#define kRapidPECTraining 0x00000020
-+#define kRapidECTraining 0x00000040
-+#define kAutoLoadReductionEnabled 0x00000080
-+
-+#define kTimingTrackingEnabled 0x00000100
-+#define kPhaseLockedLoopEnabled 0x00000200
-+#define kFeecPhaseLockedLoopEnabled 0x00000400
-+#define kPhaseJitterTrackingEnabled 0x00000800
-+
-+#define kClockErrorTrackingEnabled 0x00001000
-+#define kFreqOffsetTrackingEnabled 0x00002000
-+#define kFeecFreqOffsetTrackingEnabled 0x00004000
-+
-+#define kShorterNeecEnabled 0x00008000
-+#define kShorterPFeecEnabled 0x00010000
-+#define kFrondEndHPFilterEnabled 0x00020000
-+#define kGainControlEnabled 0x00040000
-+#define kPhaseHitControlEnabled 0x00080000
-+#define kBandEdgeCorrectorEnabled 0x00100000
-+#define kDisableFaxFastClearDown 0x00200000
-+
-+#define kImdOffsetCompensationEnabled 0x00400000
-+
-+#define kV34ShortEqlLengthExtShift 23
-+#define kV34ShortEqlLengthExtMask (0x3<<kV34ShortEqlLengthExtShift)
-+#define kV34EqlLengthReductionEnabled (1<<(kV34ShortEqlLengthExtShift+2))
-+#define kPCMIeecLengthReductionEnabled (1<<(kV34ShortEqlLengthExtShift+3))
-+
-+/* featureMap */
-+
-+#define kAllFeatures 0xFFFFFFFF
-+
-+#define kAutomodingEnabled 0x00000001 /* bit 1 */
-+#define kAutomodingDisabled 0x00000000 /* bit 1 */
-+
-+#define kV8SendCIEnabled 0x00000002 /* bit 2 */
-+#define kV8SendCIDisabled 0x00000000 /* bit 2 */
-+
-+#define kV34CMEModem 0x00000004 /* bit 3 */
-+#define kV34NotCMEModem 0x00000000 /* bit 3 */
-+
-+#define kV34ExtraINFOPreamble 0x00000008 /* bit 4 */
-+
-+#define kRetrainingEnabled 0x00000010
-+#define kRateRenegotiationEnabled 0x00000020
-+#define kTrellisCodingEnabled 0x00000040
-+
-+/* Fax specific features */
-+#define kFaxShortTraining 0x00000080
-+#define kFaxEchoSuppressionEnabled 0x00000100
-+
-+/* V.22/V.22bis specific features */
-+#define kV22GuardTone1800HzEnabled 0x00000200
-+#define kV22GuardTone550HzEnabled 0x00000400
-+
-+
-+/* V.34 specific features */
-+
-+#define kV34bisEnabled 0x00000800
-+
-+#define kV34PowerReductionAllowed 0x00001000
-+#define kAuxChannelEnabled 0x00002000
-+#define kAuxChannelDisabled 0x00000000
-+#define kV34TrellisEncoderTypeMask 0x0000C000
-+#define kV34TrellisEncoderTypeShift 14
-+
-+#define kTRN16 0x00010000
-+#define kAssymDataRatesEnabled 0x00020000
-+#define kNonLinearCodingEnabled 0x00040000
-+#define kConstShapingEnabled 0x00080000
-+#define kPrecodingEnabled 0x00100000
-+
-+#define kV34LoFcAt2400HzEnabled 0x00200000
-+#define kV34HiFcAt2400HzEnabled 0x00400000
-+#define kV34LoFcAt2743HzEnabled 0x00800000
-+#define kV34HiFcAt2743HzEnabled 0x01000000
-+#define kV34LoFcAt2800HzEnabled 0x02000000
-+#define kV34HiFcAt2800HzEnabled 0x04000000
-+#define kV34LoFcAt3000HzEnabled 0x08000000
-+#define kV34HiFcAt3000HzEnabled 0x10000000
-+#define kV34LoFcAt3200HzEnabled 0x20000000
-+#define kV34HiFcAt3200HzEnabled 0x40000000
-+#define kV34LoFcAt3429HzEnabled 0x80000000
-+#define kV34HiFcAt3429HzEnabled 0x80000000
-+
-+/* auxiliary features definintions map */
-+
-+#define kLoopbackTestFinish 0x00000000
-+#define kLoopbackTestV54Loop1 0x00000001
-+#define kLoopbackTestV54Loop2 0x00000002
-+#define kLoopbackTestV54Loop3 0x00000003
-+#define kLoopbackTestTypeMask 0x00000003
-+#define kLoopbackTestAutoRespondEnabled 0x00000004
-+#define kLoopbackSelfTest 0x00000008
-+
-+#define kPreempFilterMask 0x000000F0
-+#define kPreempFilterShift 4
-+
-+#define kPcmCodingTypeMuLaw 0x00000100
-+#define kPcmServerToServerEnabled 0x00000200
-+#define kPcmIsServerModem 0x00000400
-+#define kPcmAnalogModemAvailable 0x00000800
-+#define kPcmDigitalModemAvailable 0x00001000
-+#define kPcmDceOnDigitalNetwork 0x00002000
-+#define kPcmDModemPwrCalAtCodecOut 0x00004000
-+#define kPcm3429UpstreamAvailable 0x00008000
-+
-+#define kPcmSpectralShapingBitsMask 0x00070000
-+#define kPcmSpectralShapingBitsShift 16
-+#define kV90ServerNotDetSbarAfterJdbarFix 0x00080000
-+
-+#define kAutomoderPassive 0x00400000
-+
-+#define kV8HoldANSamUntilDetCI 0x00800000
-+#define kFaxSendFromOrgSide 0x01000000
-+#define kFaxV34HDX2400bpsCtrlChan 0x02000000
-+#define kFaxV34HDXAllowAsymCtrlChan 0x04000000
-+#define kV8ANSamStageDisabled 0x08000000
-+
-+#define kFlexSkipV8bis 0x10000000
-+#define kV34ControlChannelEnabled 0x20000000
-+#define kV34SeamlessRateChangeEnabled 0x40000000
-+
-+#define kPTTTest 0x80000000
-+
-+/* call progress detection Map */
-+
-+#define kDialTone 0x00000001
-+#define kRingBack 0x00000002
-+#define kBusy 0x00000004
-+#define kReorder 0x00000008
-+#define k2ndDTn 0x00000010
-+#define kBongTone 0x00000020
-+
-+/* Break type bit settings */
-+#define kExpedited 0x0001
-+#define kDestructive 0x0002
-+
-+/* async Framer setup map */
-+
-+#define kNDataBitsMask 0x03
-+#define k5DataBits 0x00
-+#define k6DataBits 0x01
-+#define k7DataBits 0x02
-+#define k8DataBits 0x03
-+
-+#define kNDataBitsShift 0
-+#define kNDataBitsOffset 5
-+
-+#define kParityTypeMask 0x1C
-+#define kNoParity 0x00
-+#define kOddParity 0x04
-+#define kEvenParity 0x08
-+#define kMarkParity 0x0C
-+#define kSpaceParity 0x10
-+
-+#define kNStopBitsMask 0x60
-+#define k1StopBits 0x00
-+#define k2StopBits 0x20
-+
-+#define kNStopBitsShift 5
-+#define kNStopBitsOffset 1
-+
-+/* Sync Framer setup map */
-+
-+#define kUnderrunCharMask 0xff
-+#define kRepeatLastCharOnUnderrun 0x100
-+
-+/* HDLC sync framer setup maps */
-+#define kNFlagsBeforeFramesMask 0x3F
-+#define kNFlagsBeforeFramesShift 0
-+
-+#define kNFlagsBetweenFramesMask 0x3F
-+#define kNFlagsBetweenFramesShift 6
-+
-+#define k32BitCRC 0x1000
-+#define kFlagSharingEnabled 0x2000
-+
-+#define kNFlagsBeforeReportMask 0x03 /* no. of *extra* flags reqd before frame */
-+#define kNFlagsBeforeReportShift 14
-+
-+#define kTxDeferredCRC 0x10000
-+#define kRxDeferredCRC 0x20000
-+#define kTxIdleMarks 0x40000
-+#define kNoCRC 0x80000
-+
-+/* SAM framer setup maps */
-+
-+#define kSAMTransparentIdleTypeMask 0x00000003
-+#define kSAMTransparentIdleTypeShift 0
-+#define kSAMFramedIdleTypeMask 0x00000004
-+#define kSAMFramedIdleTypeShift 2
-+#define kSAMFramedOverrunActionMask 0x00000010
-+#define kSAMFramedOverrunActionShift 4
-+#define kSAMHalfDuplexModeMask 0x00000020
-+#define kSAMHalfDuplexModeShift 5
-+#define kSAMCRCTypeMask 0x000000C0
-+#define kSAMCRCTypeShift 6
-+#define kSAMNRZIEnabledMask 0x00000100
-+#define kSAMNRZIEnabledShift 8
-+#define kSAMSyn1Mask 0x00FF0000
-+#define kSAMSyn1Shift 16
-+#define kSAMSyn2Mask 0xFF000000
-+#define kSAMSyn2Shift 24
-+
-+/* <trans_idle> */
-+#define kSAM8bitSYNHuntDisabled 0
-+#define kSAM8bitSYNHuntEnabled ((ulong)1 << kSAMTransparentIdleTypeShift)
-+#define kSAM16bitSYNHuntEnabled ((ulong)2 << kSAMTransparentIdleTypeShift)
-+
-+/* <framed_idle> */
-+#define kSAMSendFlagsOnIdle 0
-+#define kSAMSendMarksOnIdle ((ulong)1 << kSAMFramedIdleTypeShift)
-+
-+/* <framed_un_ov> */
-+#define kSAMAbortOnUnderrun 0
-+#define kSAMFlagsOnUnderrun ((ulong)1 << kSAMFramedOverrunActionShift)
-+
-+/* <hd_auto> */
-+#define kSAMHalfDuplexNoAuto 0
-+#define kSAMHalfDuplexAuto ((ulong)1 << kSAMHalfDuplexModeShift)
-+
-+
-+/* <crc_type> */
-+#define kSAMNoCRC 0
-+#define kSAM16bitCRC ((ulong)1 << kSAMCRCTypeShift)
-+#define kSAM32bitCRC ((ulong)2 << kSAMCRCTypeShift)
-+
-+/* <nrzi_en> */
-+#define kSAMNRZIDisabled 0
-+#define kSAMNRZIEnabled ((ulong)1 << kSAMNRZIEnabledShift)
-+
-+
-+/* LAPM setup maps */
-+#define kLapmDirection 0x00000001 /* Bit 0 */
-+#define kLapmSREJEnabled 0x00000002 /* Bit 1 */
-+#define kLapmDetectionEnabled 0x00000004 /* Bit 2 */
-+#define kLapmLongADPEnabled 0x00000008 /* Bit 3 */
-+
-+#define kLapmCompressionEnabledMask 0x00000030
-+#define kLapmTxCompressionEnabled 0x00000010 /* Bit 4 */
-+#define kLapmRxCompressionEnabled 0x00000020 /* Bit 5 */
-+#define kLapmCompressionEnabledShift 4
-+
-+#define kLapmRetryLimitMask 0x000000C0 /* Bits 6,7 */
-+
-+#define kLapmNoRetryLimit 0x00000000
-+#define kLapm4Retries 0x00000040
-+#define kLapm8Retries 0x00000080
-+#define kLapm20Retries 0x000000C0
-+
-+#define kLapmWindowSizeMask 0x00001F00 /* Bits 8-12 */
-+#define kLapmWindowSizeShift 8
-+
-+#define kLapmWindowSize8 0x00000800
-+#define kLapmWindowSize15 0x00000F00
-+
-+
-+#define kLapmInfoFieldSizeMask 0x0000E000 /* Bits 13-15 */
-+#define kLapmInfoField8Bytes 0x00000000
-+#define kLapmInfoField16Bytes 0x00002000
-+#define kLapmInfoField32Bytes 0x00004000
-+#define kLapmInfoField64Bytes 0x00006000
-+#define kLapmInfoField128Bytes 0x00008000
-+#define kLapmInfoField192Bytes 0x0000A000
-+#define kLapmInfoField256Bytes 0x0000C000
-+#define kLapmInfoField512Bytes 0x0000E000
-+#define kLapmInfoFieldSizeShift 13
-+
-+#define kLapmT400Mask 0x00030000 /* Bits 16-17 */
-+#define kLapmAutoT400 0x00000000
-+#define kLapm750msT400 0x00010000
-+#define kLapm3secT400 0x00020000
-+#define kLapm30secT400 0x00030000
-+
-+#define kLapmT401Mask 0x000C0000 /* Bits 18-19 */
-+#define kLapmAutoT401 0x00000000
-+#define kLapm750msT401 0x00040000
-+#define kLapm3secT401 0x00080000
-+#define kLapm6secT401 0x000C0000
-+
-+#define kLapmT403Mask 0x00300000 /* Bits 20-21 */
-+#define kLapmAutoT403 0x00000000
-+#define kLapm750msT403 0x00100000
-+#define kLapm2secT403 0x00200000
-+#define kLapm4secT403 0x00300000
-+
-+
-+
-+#define kLapmDictSizeMask 0x00C00000 /* Bits 22-23 */
-+#define kLapmDictSize512 0x00000000
-+#define kLapmDictSize1024 0x00400000
-+#define kLapmDictSize2048 0x00800000
-+#define kLapmDictSize4096 0x00C00000
-+
-+#define kLapmStringSizeMask 0xFF000000 /* Bits 24-31 */
-+#define kLapmStringSizeShift 24
-+
-+/* MNP setup maps */
-+
-+#define kMnpMinPLevel 0x00000001 /* Bit 0: 1 - Minimal, 0 - Standard */
-+#define kMnpStdPLevel 0x00000000 /* Bit 0: 1 - Minimal, 0 - Standard */
-+
-+#define kMnpOptimizationEnabled 0x00000002 /* Bit 1 */
-+#define kMnpOptimizationDisabled 0x00000000 /* Bit 1 */
-+
-+#define kMnpCompressionEnabled 0x00000004 /* Bit 2 */
-+#define kMnpCompressionDisabled 0x00000000 /* Bit 2 */
-+
-+#define kMnpClassMask 0x00000018
-+#define kMnpClassShift 3
-+#define kMnpClass1 0x00000008
-+#define kMnpClass2 0x00000010
-+#define kMnpClass3 0x00000018 /* Bits 3,4 */
-+
-+#define kMnpMaxRetryMask 0x00000060 /* Bits 5,6 */
-+#define kMnpMaxRetryShift 5
-+#define kMnpNoRetryLimit 0x00000000
-+#define kMnp4Retries 0x00000020
-+#define kMnp8Retries 0x00000040
-+#define kMnp20Retries 0x00000060
-+
-+#define kMnpInfoFieldSizeMask 0x00000380 /* Bits 7-9 */
-+#define kMnpInfoFieldSizeShift 7
-+#define kMnpInfoField8Bytes 0x00000000
-+#define kMnpInfoField16Bytes 0x00000080
-+#define kMnpInfoField32Bytes 0x00000100
-+#define kMnpInfoField64Bytes 0x00000180
-+#define kMnpInfoField128Bytes 0x00000200
-+#define kMnpInfoField192Bytes 0x00000280
-+#define kMnpInfoField256Bytes 0x00000300
-+#define kMnpInfoField260Bytes 0x00000380
-+
-+#define kMnpT400Mask 0x00003000 /* Bits 12,13 */
-+#define kMnpT400Shift 12
-+#define kMnpAutoT400 0x00000000
-+#define kMnp750msT400 0x00001000
-+#define kMnp3secT400 0x00002000
-+#define kMnp6secT400 0x00003000
-+
-+#define kMnpT401Mask 0x0000C000 /* Bits 14,15 */
-+#define kMnpT401Shift 14
-+#define kMnpAutoT401 0x00000000
-+#define kMnp750msT401 0x00004000
-+#define kMnp3secT401 0x00008000
-+#define kMnp6secT401 0x0000C000
-+
-+#define kMnpT403Mask 0x00030000 /* Bits 16,17 */
-+#define kMnpT403Shift 16
-+#define kMnpAutoT403 0x00000000
-+#define kMnp60secT403 0x00010000
-+#define kMnp600secT403 0x00020000
-+#define kMnp3600secT403 0x00030000
-+
-+#define kMnpFallbackTypeMask 0x000C0000 /* Bits 18,19 */
-+#define kMnpFallbackTypeShift 18
-+#define kMnpNoFallback 0x00000000
-+#define kMnpFallbackTime 0x00040000
-+#define kMnpFallback200 0x00080000
-+#define kMnpFallbackChar 0x000C0000
-+
-+#define kMnpWindowSizeMask 0x00300000 /* Bits 20,21 */
-+#define kMnpWindowSizeShift 20
-+#define kMnp1Frame 0x00000000
-+#define kMnp4Frames 0x00100000
-+#define kMnp8Frames 0x00200000
-+#define kMnp16Frames 0x00300000
-+
-+#define kMnpDirection 0x00800000 /* Bit 22 */
-+
-+#define kMnpFallbackCharMask 0xFF000000 /* Bit 24-31 */
-+#define kMnpFallbackCharShift 24
-+
-+/* kV34HDXTurnOffCurrentModeCmd state parameter values */
-+
-+#define kV34HDXTurnOffAsClearDown 0
-+#define kV34HDXTurnOffFromControlSource 1
-+#define kV34HDXTurnOffFromControlDestination 2
-+#define kV34HDXTurnOffFromPrimarySource 3
-+#define kV34HDXTurnOffFromPrimaryDestination 4
-+
-+/* V70 setup maps */
-+
-+#define kV70Direction 0x00000001 /* Bit 0 */
-+#define kV70uIHEnabled 0x00000002 /* Bit 1 */
-+#define kV70AudioHeaderEnabled 0x00000004 /* Bit 2 */
-+#define kV70SilenceSupprEnabled 0x00000008 /* Bit 3 */
-+
-+#define kV70SuspendResumeShift 4
-+#define kV70SuspendResumeMask (3 << kV70SuspendResumeShift)
-+#define kV70SuspendResumeDisabled 0x00000000 /* Bit 4,5 */
-+#define kV70SuspendResumeWAddr 0x00000010 /* Bit 4 */
-+#define kV70SuspendResumeWoAddr 0x00000020 /* Bit 5 */
-+
-+#define kV70CrcLengthShift 6
-+#define kV70CrcLengthMask (3 << kV70CrcLengthShift)
-+#define kV70CrcLength16 0x00000000 /* Bit 6,7 */
-+#define kV70CrcLength8 0x00000040 /* Bit 6 */
-+#define kV70CrcLength32 0x00000080 /* Bit 7 */
-+
-+#define kV70BlockingFactorShift 8
-+#define kV70BlockingFactorMask (3 << kV70BlockingFactorShift)
-+#define kV70BlockingFactor1 0x00000000 /* Bit 8,9 */
-+#define kV70BlockingFactor2 0x00000100 /* Bit 8 */
-+#define kV70BlockingFactor3 0x00000200 /* Bit 9 */
-+#define kV70BlockingFactor4 0x00000300 /* Bit 8,9 */
-+
-+#define kV70InitChannelsShift 10
-+#define kV70InitChannelsMask (1 << kV70InitChannelsShift)
-+#define kV70InitNoChannels 0x00000000 /* Bit 10,11 */
-+#define kV70InitDataChannel 0x00000400 /* Bit 10,11 */
-+#define kV70InitAudioChannel 0x00000800 /* Bit 10,11 */
-+#define kV70InitBothChannels 0x00000C00 /* Bit 10,11 */
-+
-+#define kV70OOBEnabled 0x00001000 /* Bit 12 */
-+
-+/* V80 setup maps */
-+
-+#define kV80Direction 0x00000001 /* Bit 0 */
-+
-+#define kV80ModeShift 1
-+#define kV80ModeMask (3 << kV80ModeShift)
-+#define kV80SyncMode (0 << kV80ModeShift)
-+#define kV80TunnellingMode (1 << kV80ModeShift)
-+#define kV80SamMode (2 << kV80ModeShift)
-+#define kV80SamTransparentMode (2 << kV80ModeShift)
-+#define kV80SamFramedMode (3 << kV80ModeShift)
-+
-+#define kV80TransIdleShift 3
-+#define kV80TransIdleMask (3 << kV80TransIdleShift)
-+#define kV80TransIdleNoHunt (0 << kV80TransIdleShift)
-+#define kV80TransIdleHunt8 (1 << kV80TransIdleShift)
-+#define kV80TransIdleHunt16 (2 << kV80TransIdleShift)
-+
-+#define kV80FrameIdleShift 5
-+#define kV80FrameIdleMask (1 << kV80FrameIdleShift)
-+#define kV80FrameIdleFlags (0 << kV80FrameIdleShift)
-+#define kV80FrameIdleMarks (1 << kV80FrameIdleShift)
-+
-+#define kV80FrameUnOvShift 6
-+#define kV80FrameUnOvMask (1 << kV80FrameUnOvShift)
-+#define kV80FrameUnOvAbort (0 << kV80FrameUnOvShift)
-+#define kV80FrameUnOvFlag (1 << kV80FrameUnOvShift)
-+
-+#define kV80HdAutoShift 7
-+#define kV80HdAutoMask (1 << kV80HdAutoShift)
-+#define kV80HdAutoNormal (0 << kV80HdAutoShift)
-+#define kV80HdAutoExtended (1 << kV80HdAutoShift)
-+
-+#define kV80CrcTypeShift 8
-+#define kV80CrcTypeMask (3 << kV80CrcTypeShift)
-+#define kV80NoCrc (0 << kV80CrcTypeShift)
-+#define kV80Crc16 (1 << kV80CrcTypeShift)
-+#define kV80Crc32 (2 << kV80CrcTypeShift)
-+
-+#define kV80NrziShift 10
-+#define kV80NrziMask (1 << kV80NrziShift)
-+#define kV80NrziDisabled (0 << kV80NrziShift)
-+#define kV80NrziEnabled (1 << kV80NrziShift)
-+
-+#define kV80Syn1Mask 0x00FF0000 /* Bit 16-23 */
-+#define kV80Syn1Shift 16
-+#define kV80Syn2Mask 0xFF000000 /* Bit 24-31 */
-+#define kV80Syn2Shift 24
-+
-+/* kStartCallProgressMonitorCmd setup masks */
-+
-+#define kDTMFDetectorDebouncerEnabled 0x0001
-+#define kModemSignalDetectorDebouncerEnabled 0x0002
-+#define kCallProgressDetectorDebouncerEnabled 0x0004
-+#define kCustomSignalDebouncerEnabled 0x0008
-+#define kFaxCallingToneSuppressionEnabled 0x0010
-+#define kDataCallingToneSuppressionEnabled 0x0020
-+#define kCISuppressionEnabled 0x0040
-+#define kAnsSuppressionEnabled 0x0080
-+
-+/* kDialCmd setup masks (dialerSetup bit fields) */
-+
-+#define kDTMFDialingEnabled 0x0001
-+#define kPulseDialingEnabled 0x0002
-+#define kModeSwitchEnabled 0x0004
-+#define kBlindDialingEnabled 0x0008
-+#define kPulseDialingMethodMask 0x0030
-+#define kDialModifierTranslationMask 0x00C0
-+#define kFlashWhilePulseDialingEnabled 0x0100
-+
-+/* Pulse dialing method */
-+#define kPulseDialingNPulsesPerDigit 0x0000
-+#define kPulseDialingNplusOnePulsesPerDigit 0x0010
-+#define kPulseDialingTenMinusNPulsesPerDigit 0x0020
-+
-+/* Dial modifier translation */
-+#define kTreatWasPause 0x0040 /* Tread 'W' modifier as pause */
-+#define kTreatCommaAsWaitForDialtone 0x0080
-+
-+#ifdef TI_C6X
-+#include "C6xDefs.h"
-+#endif
-+#ifdef PENTIUM_MMX
-+#include "PentiumDefs.h"
-+#endif
-+
-+
-+#if defined(DSP16K) && !defined(SoftModemGlobals)
-+/* ensure that code generator does not use r5 */
-+register int *softmodem_h_should_not_be_included_after_softmodem_gh asm("r5");
-+#endif
-+
-+/****************************************************************************/
-+/* 3. Interface functions. */
-+/* */
-+/****************************************************************************/
-+
-+#ifdef ADSL_MODEM
-+
-+#ifndef SoftDslHeader
-+#include "SoftDsl.h"
-+#endif
-+extern char* SM_DECL SoftModemGetRevString(void);
-+extern char* SM_DECL SoftModemGetProductName(void);
-+extern char* SM_DECL SoftModemGetBuildDate(void);
-+extern char* SM_DECL SoftModemGetFullManufacturerName(void);
-+extern char* SM_DECL SoftModemGetShortManufacturerName(void);
-+extern int SM_DECL SoftModemRevStringSize(void);
-+extern char* SM_DECL SoftModemGetVendorIDString(void);
-+extern char* SM_DECL SoftModemGetT1413VendorIDString(void);
-+extern char* SM_DECL SoftModemGetSerialNumberString(void);
-+extern int SM_DECL SoftModemSerNumStringSize(void);
-+#define SoftDslGetProductName SoftModemGetProductName
-+#define SoftDslGetBuildDate SoftModemGetBuildDate
-+#define SoftDslGetFullManufacturerName SoftModemGetFullManufacturerName
-+#define SoftDslGetShortManufacturerName SoftModemGetShortManufacturerName
-+
-+#else /* !ADSL_MODEM */
-+
-+extern void SM_DECL SoftModemSetMemoryPtr (void *varsPtr);
-+extern void* SM_DECL SoftModemGetMemoryPtr (void);
-+extern void SM_DECL SoftModemSetRefData (void *varsPtr);
-+extern void* SM_DECL SoftModemGetRefData (void);
-+extern int SM_DECL SoftModemGetMemorySize (void);
-+extern void SM_DECL SoftModemInit (void);
-+extern void SM_DECL SoftModemReset (void);
-+extern void SM_DECL SoftModemLineHandler (int sampleCount, short *srcPtr, short *dstPtr);
-+extern void SM_DECL SoftModemTimer (long timeQ24ms);
-+extern Boolean SM_DECL SoftModemCommandHandler (modemCommandStruct *cmdPtr);
-+extern int SM_DECL SoftModemGetExternalMemorySize(void);
-+extern void SM_DECL SoftModemSetExternalMemoryPtr(void *varsPtr);
-+
-+extern void SM_DECL SoftModemSetPcmCoding (pcmCodingType pcmCoding);
-+extern void SM_DECL SoftModemPcmLineHandler (int sampleCount, uchar *srcPtr, uchar *dstPtr);
-+
-+/* SoftModem IO functions */
-+extern int SM_DECL SoftModemWrite(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemRead(int nBytes, uchar* dstPtr);
-+extern int SM_DECL SoftModemWriteFrame(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemReadFrame(int maxFrameSize, uchar* dstPtr);
-+extern int SM_DECL SoftModemCountWritePending(void);
-+extern int SM_DECL SoftModemCountReadPending(void);
-+extern int SM_DECL SoftModemWriteSpaceAvailable(void);
-+extern void SM_DECL SoftModemWriteFlush(void);
-+extern void SM_DECL SoftModemReadFlush(void);
-+extern int SM_DECL SoftModemGetWriteBufferSize(void);
-+extern int SM_DECL SoftModemGetReadBufferSize(void);
-+
-+#ifdef AUDIO
-+extern int SM_DECL SoftModemAudioHandler(int sampleCount, short *srcPtr, short *dstPtr);
-+extern int SM_DECL SoftModemAudioRxDataHandler(int nBytes, uchar* srcPtr);
-+extern int SM_DECL SoftModemAudioTxDataHandler(int nBytes, uchar* dstPtr);
-+#endif
-+
-+
-+#define SoftModemSetGlobalPtr SoftModemSetMemoryPtr
-+#define SoftModem SoftModemLineHandler
-+#ifndef LINKLAYER_V42BIS_LARGE_DICTIONARY
-+#define kSoftModemMaxMemorySize (65536)
-+#else
-+#define kSoftModemMaxMemorySize (65536 + 8192)
-+#endif
-+
-+/*
-+ * Internal functions
-+ */
-+extern long SM_DECL SoftModemGetDCOffset(void);
-+extern void SM_DECL SoftModemDisableDCOffsetTracking(void);
-+extern void SM_DECL SoftModemEnableDCOffsetTracking(void);
-+extern long SM_DECL SoftModemGetRcvPower(void);
-+extern ulong SM_DECL SoftModemGetHybridDelay(void);
-+extern void SM_DECL SoftModemStatusHandler (modemStatusStruct *status);
-+extern Boolean SM_DECL SoftModemInternalCommandHandler (modemCommandStruct *cmdPtr);
-+extern void SM_DECL SoftModemInternalStatusHandler (modemStatusStruct *status);
-+extern void SM_DECL SoftModemSetControllerOnlyMode(commandHandlerType externalDataPumpCommandHandlerPtr);
-+extern char* SM_DECL SoftModemGetRevString(void);
-+extern char* SM_DECL SoftModemGetProductName(void);
-+extern char* SM_DECL SoftModemGetBuildDate(void);
-+extern char* SM_DECL SoftModemGetFullManufacturerName(void);
-+extern char* SM_DECL SoftModemGetShortManufacturerName(void);
-+extern int SM_DECL SoftModemRevStringSize(void);
-+extern char* SM_DECL SoftModemGetVendorIDString(void);
-+extern char* SM_DECL SoftModemGetSerialNumberString(void);
-+extern void SM_DECL SoftModemAuxTxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemAuxRxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemTxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemRxDataHandler(int nBytes, uchar *dataPtr);
-+extern void SM_DECL SoftModemATPrintf(uchar *format, void *arg1, void *arg2, void *arg3);
-+
-+#define SoftModemSetInputSaturationLimit(limit) (gSystemVars.inputSignalLimit = limit)
-+#define SoftModemResetInputSaturationLimit() (gSystemVars.inputSignalLimit = 0)
-+
-+#endif /* !ADSL_MODEM */
-+
-+#endif /* SoftModemPh */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModemTypes.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModemTypes.h
---- linux-2.6.8.1/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModemTypes.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/char/adsl/impl1/softdsl/SoftModemTypes.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,292 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * SoftModemTypes.h
-+ *
-+ *
-+ * Description:
-+ * This file contains some of the type declarations for SoftModem
-+ *
-+ * Copyright (c) 1993-1997 AltoCom, Inc. All rights reserved.
-+ * Authors: Mark Gonikberg, Haixiang Liang.
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * $Id: SoftModemTypes.h,v 1.9 2004/04/13 00:16:59 ilyas Exp $
-+ *
-+ * $Log: SoftModemTypes.h,v $
-+ * Revision 1.9 2004/04/13 00:16:59 ilyas
-+ * Merged the latest ADSL driver changes
-+ *
-+ * Revision 1.8 2004/01/24 01:35:33 ytan
-+ * add multi-section lmem swap
-+ *
-+ * Revision 1.7 2001/09/21 19:19:01 ilyas
-+ * Minor fixes for VxWorks build
-+ *
-+ * Revision 1.6 2001/08/16 02:16:39 khp
-+ * - added definitions for SLOW_DATA and FAST_TEXT, defined to nothing
-+ * except when bcm47xx && USE_SLOW_DATA or USE_FAST_TEXT. Any function
-+ * that needs to run fast should be marked with FAST_TEXT. Any data that
-+ * is not referenced often should be marked with SLOW_DATA.
-+ *
-+ * Revision 1.5 2001/03/30 00:49:59 liang
-+ * Changed warning output message.
-+ *
-+ * Revision 1.4 2000/06/21 22:24:40 yongbing
-+ * Modify WARN micro to limit the number of same warnings printed
-+ *
-+ * Revision 1.3 1999/08/05 20:02:13 liang
-+ * Merged with the softmodem top of the tree on 08/04/99.
-+ *
-+ * Revision 1.2 1999/01/27 22:14:29 liang
-+ * Merge with SoftModem_3_1_02.
-+ *
-+ * Revision 1.19 1998/11/17 04:02:39 yura
-+ * Fixed WARN and ASSERT redefinition warning for WinNT targets
-+ *
-+ * Revision 1.18 1998/08/26 19:20:43 scott
-+ * Commented out EXCLUDE_CYGWIN32_TYPES define
-+ *
-+ * Revision 1.17 1998/08/13 19:03:06 scott
-+ * Added BitField definition and INT_IS_LONG
-+ *
-+ * Revision 1.16 1998/08/08 03:39:55 scott
-+ * The DEBUG_PTR_ENABLED macro can be used to enable only the DEBUG_PTR macros
-+ *
-+ * Revision 1.15 1998/07/28 22:21:31 mwg
-+ * Fixed problems with NULL & nil being defined incorrectly
-+ *
-+ * Revision 1.14 1998/07/08 17:09:17 scott
-+ * Define ASSERT and WARN only if not already defined
-+ *
-+ * Revision 1.13 1998/07/02 20:46:34 scott
-+ * Added workaround for building certain builds with older SunOS
-+ *
-+ * Revision 1.12 1998/02/09 18:24:49 scott
-+ * Defined "Private" as nothing for GreenHill (to prevent erroneous section
-+ * allocations for data)
-+ *
-+ * Revision 1.11 1997/08/29 21:39:24 scott
-+ * Added check for LONG_IS_INT define (for TI C6X support)
-+ *
-+ * Revision 1.10 1997/05/29 19:50:23 mwg
-+ * Added code to avoid type redefintions under SunOS.
-+ *
-+ * Revision 1.9 1997/03/19 18:35:08 mwg
-+ * Changed copyright notice.
-+ *
-+ * Revision 1.8 1997/02/11 00:05:53 mwg
-+ * Minor adjustments for Pentium optimization.
-+ *
-+ * Revision 1.7 1997/01/11 01:30:47 mwg
-+ * Added new macro WARN -- the same as ASSERT but without exit.
-+ *
-+ * Revision 1.6 1996/08/22 20:07:39 liang
-+ * When ASSERT fires, only print out information, don't exit.
-+ *
-+ * Revision 1.5 1996/05/06 06:49:10 mwg
-+ * Fixed linux problems.
-+ *
-+ * Revision 1.4 1996/05/02 08:40:16 mwg
-+ * Merged in Chromatic bug fixes.
-+ *
-+ * Revision 1.3 1996/04/01 20:59:53 mwg
-+ * Added macros to setup and use debug pointer.
-+ *
-+ * Revision 1.2 1996/02/27 01:50:04 mwg
-+ * Added ASSERT() macro.
-+ *
-+ * Revision 1.1.1.1 1996/02/14 02:35:13 mwg
-+ * Redesigned the project directory structure. Merged V.34 into the project.
-+ *
-+ * Revision 1.2 1995/12/03 06:59:31 mwg
-+ * Fixed all gcc varnings. We are now running under Linux on a PC!
-+ *
-+ *****************************************************************************/
-+#ifndef SoftModemTypesh
-+#define SoftModemTypesh
-+
-+#ifdef LONG_SHORTS
-+#define short long
-+#define ushort unsigned long
-+#endif
-+
-+typedef signed char schar;
-+typedef unsigned char uchar;
-+
-+#if 0 /* This is not currently required */
-+#if defined(_CYGWIN32) && defined(DEBUG)
-+#define EXCLUDE_CYGWIN32_TYPES
-+#endif
-+#endif
-+
-+#if !defined(_SYS_TYPES_H) || !defined(TARG_OS_RTEMS)
-+#if defined(_CFE_)
-+ typedef unsigned int uint;
-+ typedef unsigned long ulong;
-+ typedef unsigned short ushort;
-+#elif defined(TARG_OS_RTEMS)
-+#if defined(HOST_ARCH_LINUX)
-+ typedef unsigned int uint;
-+#endif
-+ typedef unsigned long ulong;
-+#if defined(HOST_ARCH_LINUX)
-+ typedef unsigned short ushort;
-+#endif
-+#elif defined(EXCLUDE_CYGWIN32_TYPES) || (!defined _NO_TYPE_DEFS_ && !defined _SYS_TYPES_H && !defined __SYS_TYPES_H__ && !defined _SYS_BSD_TYPES_H && !defined _LINUX_TYPES_H) || defined(__sparc__)
-+#ifndef EXCLUDE_CYGWIN32_TYPES
-+ typedef unsigned int uint;
-+#endif
-+#ifndef _LINUX_TYPES_H
-+ typedef unsigned long ulong;
-+#endif
-+#if !defined(ushort) && !defined(EXCLUDE_CYGWIN32_TYPES) && !defined(__INCvxTypesOldh)
-+ typedef unsigned short ushort;
-+#endif
-+#endif
-+#else
-+typedef unsigned long ulong;
-+#endif
-+
-+#if defined(GREENHILL) || defined(GNUTX39) /* GH allocates private data to incorrect section */
-+#define Private
-+#else
-+#define Private static
-+#endif
-+
-+#define Public
-+
-+#ifdef NULL
-+#undef NULL
-+#endif
-+#ifdef nil
-+#undef nil
-+#endif
-+
-+#define NULL 0
-+#define nil 0
-+
-+#define false 0
-+#define true 1
-+typedef unsigned char Boolean;
-+typedef unsigned int BitField; /* this must occur BEFORE long_is_int/int_is_long defs */
-+
-+#ifdef LONG_IS_INT
-+#define long int
-+#define ulong uint
-+#endif
-+
-+#ifdef INT_IS_LONG
-+#define int long
-+#define uint ulong
-+#endif
-+
-+#define POSTULATE(postulate) \
-+ do \
-+ { \
-+ typedef struct \
-+ { \
-+ char NegativeSizeIfPostulateFalse[((int)(postulate))*2 - 1]; \
-+ } PostulateCheckStruct; \
-+ } \
-+ while (0)
-+
-+#if defined(DEBUG) && !defined(__KERNEL__)
-+#ifndef WARN
-+#define kDSLNumberWarnTimes 10
-+#define WARN(assertion) \
-+ { static int warnSeveralTimes=0; \
-+ if ((!(assertion))&(warnSeveralTimes<kDSLNumberWarnTimes)) \
-+ { \
-+ fprintf(stderr, "Warning, failed: %s\n", #assertion); \
-+ fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
-+ warnSeveralTimes++; \
-+ } \
-+ }
-+#endif
-+#ifndef ASSERT
-+#define ASSERT(assertion) \
-+ { if (!(assertion)) \
-+ { \
-+ fprintf(stderr, "Assertion failed: %s\n", #assertion); \
-+ fprintf(stderr, "%s:%d\n", __FILE__, __LINE__); \
-+ exit(1); \
-+ } \
-+ }
-+#endif
-+#else
-+
-+#undef WARN
-+#define WARN(a)
-+
-+#undef ASSERT
-+#define ASSERT(a)
-+
-+#endif
-+
-+/*
-+ * memory allocation macros
-+ */
-+
-+#if defined(bcm47xx) && defined(USE_SLOW_DATA)
-+#define SLOW_DATA __attribute__ ((section(".slow_data")))
-+#else
-+#define SLOW_DATA
-+#endif
-+
-+#if defined(bcm47xx) && defined(USE_FAST_TEXT)
-+#define FAST_TEXT __attribute__ ((section(".fast_text")))
-+#else
-+#define FAST_TEXT
-+#endif
-+
-+#if defined(bcm47xx) && defined(SWAP_LMEM)
-+#define SWAP_TEXT1_1 __attribute__ ((section(".swap_text1_1")))
-+#define SWAP_TEXT1_2 __attribute__ ((section(".swap_text1_2")))
-+#define SWAP_TEXT2_1 __attribute__ ((section(".swap_text2_1")))
-+#define SWAP_TEXT2_2 __attribute__ ((section(".swap_text2_2")))
-+#define SWAP_TEXT3_1 __attribute__ ((section(".swap_text3_1")))
-+#define SWAP_TEXT3_2 __attribute__ ((section(".swap_text3_2")))
-+#else
-+#define SWAP_TEXT1_1 FAST_TEXT
-+#define SWAP_TEXT1_2 FAST_TEXT
-+#define SWAP_TEXT2_1 FAST_TEXT
-+#define SWAP_TEXT2_2 FAST_TEXT
-+#define SWAP_TEXT3_1 FAST_TEXT
-+#define SWAP_TEXT3_2 FAST_TEXT
-+#endif
-+
-+/*
-+ * Debug stuff
-+ */
-+#if defined(DEBUG) || defined(DEBUG_PTR_ENABLED)
-+#define DECLARE_DEBUG_PTR(type) static type *gv;
-+#define SETUP_DEBUG_PTR() gv = &globalVar
-+#else
-+#define DECLARE_DEBUG_PTR(type)
-+#define SETUP_DEBUG_PTR()
-+#endif
-+/*
-+ * Obsolete stuff
-+ */
-+#ifdef DEBUG
-+#define HereIsTheGlobalVarPointerMacro SETUP_DEBUG_PTR();
-+#else
-+#define HereIsTheGlobalVarPointerMacro
-+#endif
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6338_common.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6338_common.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6338_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6338_common.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,207 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6338_common.h */
-+/* DATE: 05/10/04 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6338 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6338_MAP_COMMON_H
-+#define __BCM6338_MAP_COMMON_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#define PERF_BASE 0xfffe0000 /* chip control registers */
-+#define BB_BASE 0xfffe0100 /* bus bridge registers */
-+#define TIMR_BASE 0xfffe0200 /* timer registers */
-+#define UART_BASE 0xfffe0300 /* uart registers */
-+#define GPIO_BASE 0xfffe0400 /* gpio registers */
-+#define SPI_BASE 0xfffe0c00 /* SPI master controller registers */
-+
-+#define ADSL_BASE 0xfffe1000 /* ADSL core control registers */
-+#define ATM_BASE 0xfffe2000 /* ATM SAR control registers */
-+#define EMAC_DMA_BASE 0xfffe2400 /* EMAC DMA control registers */
-+#define USB_DMA_BASE 0xfffe2400 /* USB DMA control registers */
-+#define EMAC1_BASE 0xfffe2800 /* EMAC1 control registers */
-+#define USB_CTL_BASE 0xfffe3000 /* USB control registers */
-+#define SDRAM_BASE 0xfffe3100 /* SDRAM control registers */
-+
-+
-+/*
-+#####################################################################
-+# System PLL Control Register
-+#####################################################################
-+*/
-+
-+#define SOFT_RESET 0x00000001
-+
-+/*
-+#####################################################################
-+# SDRAM Control Registers
-+#####################################################################
-+*/
-+#define SDR_INIT_CTL 0x00
-+ /* Control Bits */
-+#define SDR_PFEN1 (1<<16)
-+#define SDR_PFEN0 (1<<15)
-+#define SDR_EMPRS (1<<14)
-+#define SDR_2_BANKS (1<<13)
-+#define SDR_1_BANK (0<<13)
-+#define SDR_CS1_EN (1<<12)
-+#define SDR_PEND (1<<11)
-+#define SDR_32_BIT (1<<10)
-+#define SDR_POWER_DOWN (1<<9)
-+#define SDR_SELF_REFRESH (1<<8)
-+#define SDR_11_COLS (3<<6)
-+#define SDR_10_COLS (2<<6)
-+#define SDR_9_COLS (1<<6)
-+#define SDR_8_COLS (0<<6)
-+#define SDR_13_ROWS (2<<4)
-+#define SDR_12_ROWS (1<<4)
-+#define SDR_11_ROWS (0<<4)
-+#define SDR_MASTER_EN (1<<3)
-+#define SDR_MRS_CMD (1<<2)
-+#define SDR_PRE_CMD (1<<1)
-+#define SDR_CBR_CMD (1<<0)
-+
-+#define SDR_CFG_REG 0x04
-+ /* Control Bits */
-+#define SDR_FULL_PG 0
-+#define SDR_BURST8 1
-+#define SDR_BURST4 2
-+#define SDR_BURST2 3
-+#define SDR_FAST_MEM (1<<2)
-+#define SDR_SLOW_MEM (0<<2)
-+
-+#define SDR_REF_CTL 0x0C
-+ /* Control Bits */
-+#define SDR_REF_EN (1<<15)
-+
-+#define SDR_PRIOR
-+ /* Control Bits */
-+#define SDR_EN_PRIOR (1<<31)
-+
-+
-+/*
-+#####################################################################
-+# MPI Control Registers
-+#####################################################################
-+*/
-+#define CS0BASE 0x00
-+#define CS0CNTL 0x04
-+
-+/*
-+# CSxBASE settings
-+# Size in low 4 bits
-+# Base Address for match in upper 24 bits
-+*/
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+
-+/* CSxCNTL settings */
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define ZEROWT 0x00000000 /* .. 0 WS */
-+#define ONEWT 0x00000002 /* .. 1 WS */
-+#define TWOWT 0x00000004 /* .. 2 WS */
-+#define THREEWT 0x00000006 /* .. 3 WS */
-+#define FOURWT 0x00000008 /* .. 4 WS */
-+#define FIVEWT 0x0000000a /* .. 5 WS */
-+#define SIXWT 0x0000000c /* .. 6 WS */
-+#define SEVENWT 0x0000000e /* .. 7 WS */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert chip select polarity */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. enable fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+
-+/*
-+#####################################################################
-+# UART Control Registers
-+#####################################################################
-+*/
-+#define UART0CONTROL 0x01
-+#define UART0CONFIG 0x02
-+#define UART0RXTIMEOUT 0x03
-+#define UART0BAUD 0x04
-+#define UART0FIFOCFG 0x0a
-+#define UART0INTMASK 0x10
-+#define UART0INTSTAT 0x12
-+#define UART0DATA 0x17
-+
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+#define XMITBREAK 0x40 /* Config register */
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+
-+#define RSTTXFIFOS 0x80 /* Rx Timeout register */
-+#define RSTRXFIFOS 0x40
-+
-+#define TX4 0x40 /* FIFO config register */
-+#define RX4 0x04
-+
-+#define DELTAIP 0x0001 /* Interrupt Status and Mask registers */
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6338_map.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6338_map.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6338_map.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6338_map.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,885 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6338_map.h */
-+/* DATE: 05/10/04 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6338 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6338_MAP_H
-+#define __BCM6338_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+#include "6338_common.h"
-+#include "6338_intr.h"
-+
-+/* macro to convert logical data addresses to physical */
-+/* DMA hardware must see physical address */
-+#define LtoP( x ) ( (uint32)x & 0x1fffffff )
-+#define PtoL( x ) ( LtoP(x) | 0xa0000000 )
-+
-+/*
-+** Interrupt Controller
-+*/
-+typedef struct PerfControl {
-+ uint32 RevID; /* (00) */
-+ uint16 testControl; /* (04) */
-+ uint16 blkEnables; /* (06) */
-+
-+#define ADSL_CLK_EN 0x0001
-+#define MPI_CLK_EN 0x0002
-+#define DRAM_CLK_EN 0x0004
-+#define EMAC_CLK_EN 0x0010
-+#define USBS_CLK_EN 0x0010
-+#define SAR_CLK_EN 0x0020
-+#define SPI_CLK_EN 0x0200
-+
-+ uint32 pll_control; /* (08) */
-+#define CHIP_SOFT_RESET 0x00000001
-+
-+ uint32 IrqMask; /* (0c) */
-+ uint32 IrqStatus; /* (10) */
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 5
-+#define EI_CLEAR_SHFT 10
-+#define EI_MASK_SHFT 15
-+#define EI_INSENS_SHFT 20
-+#define EI_LEVEL_SHFT 25
-+
-+ uint32 unused[4]; /* (18) */
-+ uint32 BlockSoftReset; /* (28) */
-+#define BSR_SPI 0x00000001
-+#define BSR_EMAC 0x00000004
-+#define BSR_USBH 0x00000008
-+#define BSR_USBS 0x00000010
-+#define BSR_ADSL 0x00000020
-+#define BSR_DMAMEM 0x00000040
-+#define BSR_SAR 0x00000080
-+#define BSR_ACLC 0x00000100
-+#define BSR_ADSL_MIPS_PLL 0x00000400
-+#define BSR_ALL_BLOCKS \
-+ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
-+ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
-+} PerfControl;
-+
-+#define PERF ((volatile PerfControl * const) PERF_BASE)
-+
-+/*
-+** Bus Bridge Registers
-+*/
-+typedef struct BusBridge {
-+ uint16 status;
-+#define BB_BUSY 0x8000 /* posted operation in progress */
-+#define BB_RD_PND 0x4000 /* read pending */
-+#define BB_RD_CMPLT 0x2000 /* read complete */
-+#define BB_ERROR 0x1000 /* posted write error */
-+#define BB_TEA 0x0800 /* transfer aborted */
-+ uint16 abortTimeoutCnt; /* abort timeout value */
-+
-+ byte writePostEnable;
-+#define BB_POST_TIMR_EN 0x08 /* post writes to timer regs */
-+#define BB_POST_GPIO_EN 0x04 /* post writes to gpio regs */
-+#define BB_POST_INTC_EN 0x02 /* post writes to interrupt controller regs */
-+#define BB_POST_UART_EN 0x01 /* post writes to uart regs */
-+ byte unused1[5];
-+ uint16 postAddr; /* posted read address (lower half) */
-+ byte unused2[3];
-+ byte postData; /* posted read data */
-+} BusBridge;
-+
-+/* register offsets (needed for EBI master access) */
-+#define BB_STATUS 0
-+#define BB_ABORT_TO_CNT 2
-+#define BB_WR_POST_EN 4
-+#define BB_RD_POST_ADDR 10
-+#define BB_RD_POST_DATA 12
-+
-+#define BRIDGE *bridge ((volatile BusBridge * const) BB_BASE)
-+
-+/*
-+** Timer
-+*/
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+
-+/*
-+** UART
-+*/
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+ byte config;
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+ /* 4-LSBS represent STOP bits/char
-+ * in 1/8 bit-time intervals. Zero
-+ * represents 1/8 stop bit interval.
-+ * Fifteen represents 2 stop bits.
-+ */
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ /* 5-bit TimeoutCnt is in low bits of this register.
-+ * This count represents the number of characters
-+ * idle times before setting receive Irq when below threshold
-+ */
-+ uint32 baudword;
-+ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
-+ */
-+
-+ byte txf_levl; /* Read-only fifo depth */
-+ byte rxf_levl; /* Read-only fifo depth */
-+ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
-+ * RxThreshold. Irq can be asserted
-+ * when rx fifo> thresh, txfifo<thresh
-+ */
-+ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
-+ * if these bits are also enabled to GPIO_o
-+ */
-+#define DTREN 0x01
-+#define RTSEN 0x02
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
-+ * detect irq on rising AND falling
-+ * edges for corresponding GPIO_i
-+ * if enabled (edge insensitive)
-+ */
-+ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
-+ * 0 for negedge sense if
-+ * not configured for edge
-+ * insensitive (see above)
-+ * Lower 4 bits: Mask to enable change
-+ * detection IRQ for corresponding
-+ * GPIO_i
-+ */
-+ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
-+ * have changed (may set IRQ).
-+ * read automatically clears bit
-+ * Lower 4 bits are actual status
-+ */
-+
-+ uint16 intMask; /* Same Bit defs for Mask and status */
-+ uint16 intStatus;
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data; /* Write to TX, Read from RX */
-+ /* bits 11:8 are BRK,PAR,FRM errors */
-+
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+/*
-+** Gpio Controller
-+*/
-+
-+typedef struct GpioControl {
-+ uint32 unused0;
-+ uint32 GPIODir; /* bits 7:0 */
-+ uint32 unused1; /* bits 36:32 */
-+ uint32 GPIOio;
-+ uint32 LEDCtrl;
-+#define LED3_STROBE 0x08000000
-+#define LED2_STROBE 0x04000000
-+#define LED1_STROBE 0x02000000
-+#define LED0_STROBE 0x01000000
-+#define LED_TEST 0x00010000
-+#define LED3_DISABLE_LINK_ACT 0x00008000
-+#define LED2_DISABLE_LINK_ACT 0x00004000
-+#define LED1_DISABLE_LINK_ACT 0x00002000
-+#define LED0_DISABLE_LINK_ACT 0x00001000
-+#define LED_INTERVAL_SET_MASK 0x00000f00
-+#define LED_INTERVAL_SET_320MS 0x00000500
-+#define LED_INTERVAL_SET_160MS 0x00000400
-+#define LED_INTERVAL_SET_80MS 0x00000300
-+#define LED_INTERVAL_SET_40MS 0x00000200
-+#define LED_INTERVAL_SET_20MS 0x00000100
-+#define LED3_ON 0x00000080
-+#define LED2_ON 0x00000040
-+#define LED1_ON 0x00000020
-+#define LED0_ON 0x00000010
-+#define LED3_ENABLE 0x00000008
-+#define LED2_ENABLE 0x00000004
-+#define LED1_ENABLE 0x00000002
-+#define LED0_ENABLE 0x00000001
-+ uint32 SpiSlaveCfg;
-+#define SPI_SLAVE_RESET 0x00010000
-+#define SPI_RESTRICT 0x00000400
-+#define SPI_DELAY_DISABLE 0x00000200
-+#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
-+#define SPI_SER_ADDR_CFG_MASK 0x0000000c
-+#define SPI_MODE 0x00000001
-+ uint32 vRegConfig;
-+} GpioControl;
-+
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+/* Number to mask conversion macro used for GPIODir and GPIOio */
-+#define GPIO_NUM_MAX_BITS_MASK 0x0f
-+#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
-+
-+/*
-+** Spi Controller
-+*/
-+
-+typedef struct SpiControl {
-+ uint16 spiCmd; /* (0x0): SPI command */
-+#define SPI_CMD_NOOP 0
-+#define SPI_CMD_SOFT_RESET 1
-+#define SPI_CMD_HARD_RESET 2
-+#define SPI_CMD_START_IMMEDIATE 3
-+
-+#define SPI_CMD_COMMAND_SHIFT 0
-+#define SPI_CMD_DEVICE_ID_SHIFT 4
-+#define SPI_CMD_PREPEND_BYTE_CNT_SHIFT 8
-+#define SPI_CMD_ONE_BYTE_SHIFT 11
-+#define SPI_CMD_ONE_WIRE_SHIFT 12
-+#define SPI_DEV_ID_0 0
-+#define SPI_DEV_ID_1 1
-+#define SPI_DEV_ID_2 2
-+#define SPI_DEV_ID_3 3
-+
-+ byte spiIntStatus; /* (0x2): SPI interrupt status */
-+ byte spiMaskIntStatus; /* (0x3): SPI masked interrupt status */
-+
-+ byte spiIntMask; /* (0x4): SPI interrupt mask */
-+#define SPI_INTR_CMD_DONE 0x01
-+#define SPI_INTR_RX_OVERFLOW 0x02
-+#define SPI_INTR_INTR_TX_UNDERFLOW 0x04
-+#define SPI_INTR_TX_OVERFLOW 0x08
-+#define SPI_INTR_RX_UNDERFLOW 0x10
-+#define SPI_INTR_CLEAR_ALL 0x1f
-+
-+ byte spiStatus; /* (0x5): SPI status */
-+#define SPI_RX_EMPTY 0x02
-+#define SPI_CMD_BUSY 0x04
-+#define SPI_SERIAL_BUSY 0x08
-+
-+ byte spiClkCfg; /* (0x6): SPI clock configuration */
-+#define SPI_CLK_0_391MHZ 1
-+#define SPI_CLK_0_781MHZ 2 /* default */
-+#define SPI_CLK_1_563MHZ 3
-+#define SPI_CLK_3_125MHZ 4
-+#define SPI_CLK_6_250MHZ 5
-+#define SPI_CLK_12_50MHZ 6
-+#define SPI_CLK_MASK 0x07
-+#define SPI_SSOFFTIME_MASK 0x38
-+#define SPI_SSOFFTIME_SHIFT 3
-+#define SPI_BYTE_SWAP 0x80
-+
-+ byte spiFillByte; /* (0x7): SPI fill byte */
-+
-+ byte unused0;
-+ byte spiMsgTail; /* (0x9): msgtail */
-+ byte unused1;
-+ byte spiRxTail; /* (0xB): rxtail */
-+
-+ uint32 unused2[13]; /* (0x0c - 0x3c) reserved */
-+
-+ byte spiMsgCtl; /* (0x40) control byte */
-+#define FULL_DUPLEX_RW 0
-+#define HALF_DUPLEX_W 1
-+#define HALF_DUPLEX_R 2
-+#define SPI_MSG_TYPE_SHIFT 6
-+#define SPI_BYTE_CNT_SHIFT 0
-+ byte spiMsgData[63]; /* (0x41 - 0x7f) msg data */
-+ byte spiRxDataFifo[64]; /* (0x80 - 0xbf) rx data */
-+ byte unused3[64]; /* (0xc0 - 0xff) reserved */
-+} SpiControl;
-+
-+#define SPI ((volatile SpiControl * const) SPI_BASE)
-+
-+#define IUDMA_MAX_CHANNELS 16
-+
-+/*
-+** DMA Channel Configuration (1 .. 16)
-+*/
-+typedef struct DmaChannelCfg {
-+ uint32 cfg; /* (00) assorted configuration */
-+#define DMA_BURST_HALT 0x00000004 /* idle after finish current memory burst */
-+#define DMA_PKT_HALT 0x00000002 /* idle after an EOP flag is detected */
-+#define DMA_ENABLE 0x00000001 /* set to enable channel */
-+ uint32 intStat; /* (04) interrupts control and status */
-+ uint32 intMask; /* (08) interrupts mask */
-+#define DMA_BUFF_DONE 0x00000001 /* buffer done */
-+#define DMA_DONE 0x00000002 /* packet xfer complete */
-+#define DMA_NO_DESC 0x00000004 /* no valid descriptors */
-+ uint32 maxBurst; /* (0C) max burst length permitted */
-+} DmaChannelCfg;
-+
-+/*
-+** DMA State RAM (1 .. 16)
-+*/
-+typedef struct DmaStateRam {
-+ uint32 baseDescPtr; /* (00) descriptor ring start address */
-+ uint32 state_data; /* (04) state/bytes done/ring offset */
-+ uint32 desc_len_status; /* (08) buffer descriptor status and len */
-+ uint32 desc_base_bufptr; /* (0C) buffer descrpitor current processing */
-+} DmaStateRam;
-+
-+/*
-+** DMA Registers
-+*/
-+typedef struct DmaRegs {
-+#define DMA_MASTER_EN 0x00000001
-+#define DMA_FLOWC_CH1_EN 0x00000002
-+#define DMA_FLOWC_CH3_EN 0x00000004
-+#define DMA_NUM_CHS_MASK 0x0f000000
-+#define DMA_NUM_CHS_SHIFT 24
-+#define DMA_FLOWCTL_MASK 0x30000000
-+#define DMA_FLOWCTL_CH1 0x10000000
-+#define DMA_FLOWCTL_CH3 0x20000000
-+#define DMA_FLOWCTL_SHIFT 28
-+ uint32 controller_cfg; /* (00) controller configuration */
-+
-+ // Flow control Ch1
-+ uint32 flowctl_ch1_thresh_lo; /* (04) EMAC1 RX DMA channel */
-+ uint32 flowctl_ch1_thresh_hi; /* (08) EMAC1 RX DMA channel */
-+ uint32 flowctl_ch1_alloc; /* (0C) EMAC1 RX DMA channel */
-+#define DMA_BUF_ALLOC_FORCE 0x80000000
-+
-+ // Flow control Ch3
-+ uint32 flowctl_ch3_thresh_lo; /* (10) EMAC2 RX DMA channel */
-+ uint32 flowctl_ch3_thresh_hi; /* (14) EMAC2 RX DMA channel */
-+ uint32 flowctl_ch3_alloc; /* (18) EMAC2 RX DMA channel */
-+
-+ // Unused words
-+ uint32 resv[57];
-+
-+ // Per channel registers/state ram
-+ DmaChannelCfg chcfg[IUDMA_MAX_CHANNELS]; /* (100) Channel configuration */
-+ union {
-+ DmaStateRam s[IUDMA_MAX_CHANNELS];
-+ uint32 u32[4 * IUDMA_MAX_CHANNELS];
-+ } stram; /* (200) state ram */
-+} DmaRegs;
-+
-+/*
-+** DMA Buffer
-+*/
-+typedef struct DmaDesc {
-+ uint16 length; /* in bytes of data in buffer */
-+#define DMA_DESC_USEFPM 0x8000
-+#define DMA_DESC_MULTICAST 0x4000
-+#define DMA_DESC_BUFLENGTH 0x0fff
-+ uint16 status; /* buffer status */
-+#define DMA_OWN 0x8000 /* cleared by DMA, set by SW */
-+#define DMA_EOP 0x4000 /* last buffer in packet */
-+#define DMA_SOP 0x2000 /* first buffer in packet */
-+#define DMA_WRAP 0x1000 /* */
-+#define DMA_APPEND_CRC 0x0100
-+
-+/* EMAC Descriptor Status definitions */
-+#define EMAC_MISS 0x0080 /* framed address recognition failed (promiscuous) */
-+#define EMAC_BRDCAST 0x0040 /* DA is Broadcast */
-+#define EMAC_MULT 0x0020 /* DA is multicast */
-+#define EMAC_LG 0x0010 /* frame length > RX_LENGTH register value */
-+#define EMAC_NO 0x0008 /* Non-Octet aligned */
-+#define EMAC_RXER 0x0004 /* RX_ERR on MII while RX_DV assereted */
-+#define EMAC_CRC_ERROR 0x0002 /* CRC error */
-+#define EMAC_OV 0x0001 /* Overflow */
-+
-+/* HDLC Descriptor Status definitions */
-+#define DMA_HDLC_TX_ABORT 0x0100
-+#define DMA_HDLC_RX_OVERRUN 0x4000
-+#define DMA_HDLC_RX_TOO_LONG 0x2000
-+#define DMA_HDLC_RX_CRC_OK 0x1000
-+#define DMA_HDLC_RX_ABORT 0x0100
-+
-+ uint32 address; /* address of data */
-+} DmaDesc;
-+
-+/*
-+** Sdram Controller
-+*/
-+typedef struct SdramControllerRegs {
-+ uint16 unused1;
-+ uint16 initControl; /* 02 */
-+#define SD_POWER_DOWN 0x200 /* put sdram into power down */
-+#define SD_SELF_REFRESH 0x100 /* enable self refresh mode */
-+#define SD_SOFT_RESET 0x080 /* soft reset all sdram controller regs */
-+#define SD_EDO_SELECT 0x040 /* select EDO mode */
-+#define SD_EDO_WAIT_STATE 0x020 /* add an EDO wait state */
-+#define SD_8MEG 0x010 /* map sdram to 8 megs */
-+#define SD_MASTER_ENABLE 0x008 /* enable accesses to external sdram */
-+#define SD_MRS 0x004 /* generate a mode register select cycle */
-+#define SD_PRECHARGE 0x002 /* generate a precharge cycle */
-+#define SD_CBR 0x001 /* generate a refresh cycle */
-+ uint8 unused2[3];
-+ uint8 config; /* 07 */
-+#define SD_FAST_MEM 0x04 /* 1=CAS latency of 2, 0 = CAS latency of 3 */
-+#define SD_BURST_LEN 0x03 /* set burst length */
-+#define SD_BURST_FULL_PAGE 0x00 /* .. full page */
-+#define SD_BURST_8 0x01 /* .. 8 words */
-+#define SD_BURST_4 0x02 /* .. 4 words */
-+#define SD_BURST_2 0x03 /* .. 2 words */
-+ uint16 unused3;
-+ uint16 refreshControl; /* 0a */
-+#define SD_REFRESH_ENABLE 0x8000 /* refresh enable */
-+#define SD_REFRESH_PERIOD 0x00ff /* refresh period (16 x n x clock_period) */
-+
-+ uint32 memoryBase; /* 0c */
-+#define SD_MEMBASE_MASK 0xffffe000 /* base address mask */
-+#define SD_MEMSIZE_8MEG 0x00000001 /* memory is 8 meg */
-+#define SD_MEMSIZE_2MEG 0x00000001 /* memory is 2 meg */
-+
-+} SdramControllerRegs;
-+
-+/*
-+** External Bus Interface
-+*/
-+typedef struct EbiChipSelect {
-+ uint32 base; /* base address in upper 24 bits */
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+ uint32 config;
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_WREN 0x00000020 /* enable posted writes */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert something,
-+ ** don't know what yet */
-+#define EBI_FIFO 0x00000200 /* .. use fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+} EbiChipSelect;
-+
-+typedef struct MpiRegisters {
-+ EbiChipSelect cs[1]; /* size chip select configuration */
-+} MpiRegisters;
-+
-+#define MPI ((volatile MpiRegisters * const) MPI_BASE)
-+
-+/*
-+** EMAC transmit MIB counters
-+*/
-+typedef struct EmacTxMib {
-+ uint32 tx_good_octets; /* (200) good byte count */
-+ uint32 tx_good_pkts; /* (204) good pkt count */
-+ uint32 tx_octets; /* (208) good and bad byte count */
-+ uint32 tx_pkts; /* (20c) good and bad pkt count */
-+ uint32 tx_broadcasts_pkts; /* (210) good broadcast packets */
-+ uint32 tx_multicasts_pkts; /* (214) good mulitcast packets */
-+ uint32 tx_len_64; /* (218) RMON tx pkt size buckets */
-+ uint32 tx_len_65_to_127; /* (21c) */
-+ uint32 tx_len_128_to_255; /* (220) */
-+ uint32 tx_len_256_to_511; /* (224) */
-+ uint32 tx_len_512_to_1023; /* (228) */
-+ uint32 tx_len_1024_to_max; /* (22c) */
-+ uint32 tx_jabber_pkts; /* (230) > 1518 with bad crc */
-+ uint32 tx_oversize_pkts; /* (234) > 1518 with good crc */
-+ uint32 tx_fragment_pkts; /* (238) < 63 with bad crc */
-+ uint32 tx_underruns; /* (23c) fifo underrun */
-+ uint32 tx_total_cols; /* (240) total collisions in all tx pkts */
-+ uint32 tx_single_cols; /* (244) tx pkts with single collisions */
-+ uint32 tx_multiple_cols; /* (248) tx pkts with multiple collisions */
-+ uint32 tx_excessive_cols; /* (24c) tx pkts with excessive cols */
-+ uint32 tx_late_cols; /* (250) tx pkts with late cols */
-+ uint32 tx_defered; /* (254) tx pkts deferred */
-+ uint32 tx_carrier_lost; /* (258) tx pkts with CRS lost */
-+ uint32 tx_pause_pkts; /* (25c) tx pause pkts sent */
-+#define NumEmacTxMibVars 24
-+} EmacTxMib;
-+
-+/*
-+** EMAC receive MIB counters
-+*/
-+typedef struct EmacRxMib {
-+ uint32 rx_good_octets; /* (280) good byte count */
-+ uint32 rx_good_pkts; /* (284) good pkt count */
-+ uint32 rx_octets; /* (288) good and bad byte count */
-+ uint32 rx_pkts; /* (28c) good and bad pkt count */
-+ uint32 rx_broadcasts_pkts; /* (290) good broadcast packets */
-+ uint32 rx_multicasts_pkts; /* (294) good mulitcast packets */
-+ uint32 rx_len_64; /* (298) RMON rx pkt size buckets */
-+ uint32 rx_len_65_to_127; /* (29c) */
-+ uint32 rx_len_128_to_255; /* (2a0) */
-+ uint32 rx_len_256_to_511; /* (2a4) */
-+ uint32 rx_len_512_to_1023; /* (2a8) */
-+ uint32 rx_len_1024_to_max; /* (2ac) */
-+ uint32 rx_jabber_pkts; /* (2b0) > 1518 with bad crc */
-+ uint32 rx_oversize_pkts; /* (2b4) > 1518 with good crc */
-+ uint32 rx_fragment_pkts; /* (2b8) < 63 with bad crc */
-+ uint32 rx_missed_pkts; /* (2bc) missed packets */
-+ uint32 rx_crc_align_errs; /* (2c0) both or either */
-+ uint32 rx_undersize; /* (2c4) < 63 with good crc */
-+ uint32 rx_crc_errs; /* (2c8) crc errors (only) */
-+ uint32 rx_align_errs; /* (2cc) alignment errors (only) */
-+ uint32 rx_symbol_errs; /* (2d0) pkts with RXERR assertions (symbol errs) */
-+ uint32 rx_pause_pkts; /* (2d4) MAC control, PAUSE */
-+ uint32 rx_nonpause_pkts; /* (2d8) MAC control, not PAUSE */
-+#define NumEmacRxMibVars 23
-+} EmacRxMib;
-+
-+typedef struct EmacRegisters {
-+ uint32 rxControl; /* (00) receive control */
-+#define EMAC_PM_REJ 0x80 /* - reject DA match in PMx regs */
-+#define EMAC_UNIFLOW 0x40 /* - accept cam match fc */
-+#define EMAC_FC_EN 0x20 /* - enable flow control */
-+#define EMAC_LOOPBACK 0x10 /* - loopback */
-+#define EMAC_PROM 0x08 /* - promiscuous */
-+#define EMAC_RDT 0x04 /* - ignore transmissions */
-+#define EMAC_ALL_MCAST 0x02 /* - ignore transmissions */
-+#define EMAC_NO_BCAST 0x01 /* - ignore transmissions */
-+
-+
-+ uint32 rxMaxLength; /* (04) receive max length */
-+ uint32 txMaxLength; /* (08) transmit max length */
-+ uint32 unused1[1];
-+ uint32 mdioFreq; /* (10) mdio frequency */
-+#define EMAC_MII_PRE_EN 0x00000080 /* prepend preamble sequence */
-+#define EMAC_MDIO_PRE 0x00000080 /* - enable MDIO preamble */
-+#define EMAC_MDC_FREQ 0x0000007f /* - mdio frequency */
-+
-+ uint32 mdioData; /* (14) mdio data */
-+#define MDIO_WR 0x50020000 /* - write framing */
-+#define MDIO_RD 0x60020000 /* - read framing */
-+#define MDIO_PMD_SHIFT 23
-+#define MDIO_REG_SHIFT 18
-+
-+ uint32 intMask; /* (18) int mask */
-+ uint32 intStatus; /* (1c) int status */
-+#define EMAC_FLOW_INT 0x04 /* - flow control event */
-+#define EMAC_MIB_INT 0x02 /* - mib event */
-+#define EMAC_MDIO_INT 0x01 /* - mdio event */
-+
-+ uint32 unused2[3];
-+ uint32 config; /* (2c) config */
-+#define EMAC_ENABLE 0x001 /* - enable emac */
-+#define EMAC_DISABLE 0x002 /* - disable emac */
-+#define EMAC_SOFT_RST 0x004 /* - soft reset */
-+#define EMAC_SOFT_RESET 0x004 /* - emac soft reset */
-+#define EMAC_EXT_PHY 0x008 /* - external PHY select */
-+
-+ uint32 txControl; /* (30) transmit control */
-+#define EMAC_FD 0x001 /* - full duplex */
-+#define EMAC_FLOWMODE 0x002 /* - flow mode */
-+#define EMAC_NOBKOFF 0x004 /* - no backoff in */
-+#define EMAC_SMALLSLT 0x008 /* - small slot time */
-+
-+ uint32 txThreshold; /* (34) transmit threshold */
-+ uint32 mibControl; /* (38) mib control */
-+#define EMAC_NO_CLEAR 0x001 /* don't clear on read */
-+
-+ uint32 unused3[7];
-+
-+ uint32 pm0DataLo; /* (58) perfect match 0 data lo */
-+ uint32 pm0DataHi; /* (5C) perfect match 0 data hi (15:0) */
-+ uint32 pm1DataLo; /* (60) perfect match 1 data lo */
-+ uint32 pm1DataHi; /* (64) perfect match 1 data hi (15:0) */
-+ uint32 pm2DataLo; /* (68) perfect match 2 data lo */
-+ uint32 pm2DataHi; /* (6C) perfect match 2 data hi (15:0) */
-+ uint32 pm3DataLo; /* (70) perfect match 3 data lo */
-+ uint32 pm3DataHi; /* (74) perfect match 3 data hi (15:0) */
-+#define EMAC_CAM_V 0x10000 /* - cam index */
-+#define EMAC_CAM_VALID 0x00010000
-+
-+ uint32 unused4[98]; /* (78-1fc) */
-+
-+ EmacTxMib tx_mib; /* (200) emac tx mib */
-+ uint32 unused5[8]; /* (260-27c) */
-+
-+ EmacRxMib rx_mib; /* (280) rx mib */
-+
-+} EmacRegisters;
-+
-+/* register offsets for subrouting access */
-+#define EMAC_RX_CONTROL 0x00
-+#define EMAC_RX_MAX_LENGTH 0x04
-+#define EMAC_TX_MAC_LENGTH 0x08
-+#define EMAC_MDIO_FREQ 0x10
-+#define EMAC_MDIO_DATA 0x14
-+#define EMAC_INT_MASK 0x18
-+#define EMAC_INT_STATUS 0x1C
-+#define EMAC_CAM_DATA_LO 0x20
-+#define EMAC_CAM_DATA_HI 0x24
-+#define EMAC_CAM_CONTROL 0x28
-+#define EMAC_CONTROL 0x2C
-+#define EMAC_TX_CONTROL 0x30
-+#define EMAC_TX_THRESHOLD 0x34
-+#define EMAC_MIB_CONTROL 0x38
-+
-+
-+#define EMAC1 ((volatile EmacRegisters * const) EMAC1_BASE)
-+
-+/*
-+** USB Registers
-+*/
-+typedef struct UsbRegisters {
-+ byte inttf_setting;
-+ byte current_config;
-+ uint16 status_frameNum;
-+#define USB_LINK 0x2000
-+#define USB_BUS_RESET 0x1000
-+#define USB_SUSPENDED 0x0800
-+ byte unused1;
-+ byte endpt_prnt;
-+ byte endpt_dirn;
-+ byte endpt_status;
-+#define USB_ENDPOINT_0 0x01
-+#define USB_ENDPOINT_1 0x02
-+#define USB_ENDPOINT_2 0x04
-+#define USB_ENDPOINT_3 0x08
-+#define USB_ENDPOINT_4 0x10
-+#define USB_ENDPOINT_5 0x20
-+#define USB_ENDPOINT_6 0x40
-+#define USB_ENDPOINT_7 0x80
-+ uint32 unused2;
-+ byte conf_mem_ctl;
-+#define USB_CONF_MEM_RD 0x80
-+#define USB_CONF_MEM_RDY 0x40
-+ byte unused2a;
-+ byte conf_mem_read_address;
-+ byte conf_mem_write_address;
-+
-+ byte unused3;
-+ byte dev_req_bytesel;
-+ uint16 ext_dev_data;
-+
-+ byte unused4;
-+ byte clr_fifo;
-+ byte endpt_stall_reset; // use same endpoint #'s from above
-+ byte usb_cntl;
-+#define USB_FORCE_ERR 0x20
-+#define USB_SOFT_RESET 0x10
-+#define USB_RESUME 0x08
-+#define USB_COMMAND_ERR 0x04
-+#define USB_COMMAND_OVER 0x02
-+ byte irq_addr;
-+ byte iso_out_in_addr;
-+ byte blk_out_in_addr;
-+ byte cntl_addr;
-+ uint32 unusedx[2];
-+ uint32 tx_ram_write_port;
-+ uint32 fifo_status; // (see bcm6338 data sheet for definition)
-+
-+ uint32 irq_status;
-+ uint32 irq_mask;
-+#define USB_NEW_CONFIG 0x00000001
-+#define USB_SETUP_COMMAND_RECV 0x00000002 // non-standard setup cmd rcvd
-+#define USB_OUT_FIFO_OV 0x00000004
-+#define USB_RESET_RECV 0x00000008
-+#define USB_SUSPEND_RECV 0x00000010
-+#define USB_FIFO_REWIND 0x00000020
-+#define USB_RX_BULK_FIFO_DATA_AVAIL 0x00000040
-+#define USB_RX_ISO_FIFO_DATA_AVAIL 0x00000080
-+#define USB_LINK_CHANGE 0x00010000
-+ uint32 endpt_cntl;
-+#define USB_R_WK_EN 0x0100
-+#define USB_TX_EOP 0x0200
-+#define USB_TX_CNTL_DMA_EN 0x0400
-+#define USB_TX_BULK_DMA_EN 0x0800
-+#define USB_TX_ISO_DMA_EN 0x1000
-+#define USB_RX_CNTL_DMA_EN 0x2000
-+#define USB_RX_BULK_DMA_EN 0x4800
-+#define USB_RX_ISO_DMA_EN 0x8000
-+ uint32 rx_status_read_port;
-+ uint32 confmem_read_port;
-+ uint32 confmem_write_port;
-+ uint32 fifo_ovf_count;
-+ uint32 fifo_rewind_cnt;
-+ uint32 terminal_count;
-+} UsbRegisters;
-+
-+#define USB ((volatile UsbRegisters * const) USB_CTL_BASE)
-+
-+/*
-+** ADSL core Registers
-+*/
-+
-+#define _PADLINE(line) pad ## line
-+#define _XSTR(line) _PADLINE(line)
-+#define PAD _XSTR(__LINE__)
-+
-+typedef struct AdslRegisters {
-+ uint32 core_control;
-+#define ADSL_RESET 0x01
-+
-+ uint32 core_status;
-+#define ADSL_HOST_MSG 0x01
-+
-+ uint32 PAD;
-+ uint32 bist_status;
-+ uint32 PAD[4];
-+ uint32 int_status_i; /* 0x20 */
-+ uint32 int_mask_i;
-+ uint32 int_status_f;
-+ uint32 int_mask_f;
-+#define ADSL_INT_HOST_MSG 0x00000020
-+#define ADSL_INT_DESC_ERR 0x00000400
-+#define ADSL_INT_DATA_ERR 0x00000800
-+#define ADSL_INT_DESC_PROTO_ERR 0x00001000
-+#define ADSL_INT_RCV_DESC_UF 0x00002000
-+#define ADSL_INT_RCV_FIFO_OF 0x00004000
-+#define ADSL_INT_XMT_FIFO_UF 0x00008000
-+#define ADSL_INT_RCV 0x00010000
-+#define ADSL_INT_XMT 0x01000000
-+
-+ uint32 PAD[116];
-+
-+ uint32 xmtcontrol_intr; /* 0x200 */
-+#define ADSL_DMA_XMT_EN 0x00000001
-+#define ADSL_DMA_XMT_LE 0x00000004
-+ uint32 xmtaddr_intr;
-+#define ADSL_DMA_ADDR_MASK 0xFFFFF000
-+ uint32 xmtptr_intr;
-+#define ADSL_DMA_LAST_DESC_MASK 0x00000FFF
-+ uint32 xmtstatus_intr;
-+#define ADSL_DMA_CURR_DESC_MASK 0x00000FFF
-+#define ADSL_DMA_XMT_STATE_MASK 0x0000F000
-+#define ADSL_DMA_XMT_STATE_DIS 0x00000000
-+#define ADSL_DMA_XMT_STATE_ACT 0x00001000
-+#define ADSL_DMA_XMT_STATE_IDLE 0x00002000
-+#define ADSL_DMA_XMT_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_XMT_ERR_MASK 0x000F0000
-+#define ADSL_DMA_XMT_ERR_NONE 0x00000000
-+#define ADSL_DMA_XMT_ERR_DPE 0x00010000
-+#define ADSL_DMA_XMT_ERR_FIFO 0x00020000
-+#define ADSL_DMA_XMT_ERR_DTE 0x00030000
-+#define ADSL_DMA_XMT_ERR_DRE 0x00040000
-+
-+ uint32 rcvcontrol_intr;
-+#define ADSL_DMA_RCV_EN 0x00000001
-+#define ADSL_DMA_RCV_FO 0x000000FE
-+ uint32 rcvaddr_intr;
-+ uint32 rcvptr_intr;
-+ uint32 rcvstatus_intr;
-+#define ADSL_DMA_RCV_STATE_MASK 0x0000F000
-+#define ADSL_DMA_RCV_STATE_DIS 0x00000000
-+#define ADSL_DMA_RCV_STATE_ACT 0x00001000
-+#define ADSL_DMA_RCV_STATE_IDLE 0x00002000
-+#define ADSL_DMA_RCV_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_RCV_ERR_MASK 0x000F0000
-+#define ADSL_DMA_RCV_ERR_NONE 0x00000000
-+#define ADSL_DMA_RCV_ERR_DPE 0x00010000
-+#define ADSL_DMA_RCV_ERR_FIFO 0x00020000
-+#define ADSL_DMA_RCV_ERR_DTE 0x00030000
-+#define ADSL_DMA_RCV_ERR_DRE 0x00040000
-+
-+ uint32 xmtcontrol_fast;
-+ uint32 xmtaddr_fast;
-+ uint32 xmtptr_fast;
-+ uint32 xmtstatus_fast;
-+ uint32 rcvcontrol_fast;
-+ uint32 rcvaddr_fast;
-+ uint32 rcvptr_fast;
-+ uint32 rcvstatus_fast;
-+ uint32 PAD[48];
-+
-+ uint32 host_message; /* 0x300 */
-+ uint32 PAD[805];
-+ uint32 core_reset;
-+ uint32 core_error;
-+ uint32 core_revision;
-+
-+#define ADSL_CORE_REV 0x0000000F
-+#define ADSL_CORE_TYPE 0x0000FFF0
-+} AdslRegisters;
-+
-+#define ADSL ((volatile AdslRegisters * const) ADSL_BASE)
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6345_common.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6345_common.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6345_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6345_common.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,275 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6345_common.h */
-+/* DATE: 96/12/19 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6345 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6345_MAP_COMMON_H
-+#define __BCM6345_MAP_COMMON_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+/* matches isb_decoder.v */
-+#define INTC_BASE 0xfffe0000 /* interrupts controller registers */
-+#define BB_BASE 0xfffe0100 /* bus bridge registers */
-+#define TIMR_BASE 0xfffe0200 /* timer registers */
-+#define UART_BASE 0xfffe0300 /* uart registers */
-+#define GPIO_BASE 0xfffe0400 /* gpio registers */
-+#define EMAC_BASE 0xfffe1800 /* EMAC control registers */
-+#define EBIC_BASE 0xfffe2000 /* EBI control registers */
-+#define PCMCIA_BASE 0xfffe2028 /* PCMCIA control registers */
-+#define USB_BASE 0xfffe2100 /* USB controll registers */
-+#define SDRAM_BASE 0xfffe2300 /* SDRAM control registers */
-+#define DMA_BASE 0xfffe2800 /* DMA control registers */
-+
-+/* DMA channel assignments */
-+#define EMAC_RX_CHAN 1
-+#define EMAC_TX_CHAN 2
-+#define EBI_RX_CHAN 5
-+#define EBI_TX_CHAN 6
-+#define RESERVED_RX_CHAN 9
-+#define RESERVED_TX_CHAN 10
-+#define USB_BULK_RX_CHAN 13
-+#define USB_BULK_TX_CHAN 14
-+#define USB_ISO_RX_CHAN 15
-+#define USB_ISO_TX_CHAN 16
-+#define USB_CNTL_RX_CHAN 17
-+#define USB_CNTL_TX_CHAN 18
-+
-+/*
-+#-----------------------------------------------------------------------*
-+# *
-+#************************************************************************
-+*/
-+#define SDR_INIT_CTL 0x00
-+ /* Control Bits */
-+#define SDR_9BIT_COL (1<<11)
-+#define SDR_32BIT (1<<10)
-+#define SDR_PWR_DN (1<<9)
-+#define SDR_SELF_REF (1<<8)
-+#define SDR_SOFT_RST (1<<7)
-+#define SDR_64x32 (3<<4)
-+#define SDR_128MEG (2<<4)
-+#define SDR_64MEG (1<<4)
-+#define SDR_16MEG (0<<4)
-+#define SDR_ENABLE (1<<3)
-+#define SDR_MRS_CMD (1<<2)
-+#define SDR_PRE_CMD (1<<1)
-+#define SDR_CBR_CMD (1<<0)
-+
-+#define SDR_CFG_REG 0x04
-+ /* Control Bits */
-+#define SDR_FULL_PG 0x00
-+#define SDR_BURST8 0x01
-+#define SDR_BURST4 0x02
-+#define SDR_BURST2 0x03
-+#define SDR_FAST_MEM (1<<2)
-+#define SDR_SLOW_MEM 0x00
-+
-+#define SDR_REF_CTL 0x08
-+ /* Control Bits */
-+#define SDR_REF_EN (1<<15)
-+
-+#define SDR_MEM_BASE 0x0c
-+ /* Control Bits */
-+#define DRAM2MBSPC 0x00000000
-+#define DRAM8MBSPC 0x00000001
-+#define DRAM16MBSPC 0x00000002
-+#define DRAM32MBSPC 0x00000003
-+#define DRAM64MBSPC 0x00000004
-+
-+#define DRAM2MEG 0x00000000 /* See SDRAM config */
-+#define DRAM8MEG 0x00000001 /* See SDRAM config */
-+#define DRAM16MEG 0x00000002 /* See SDRAM config */
-+#define DRAM32MEG 0x00000003 /* See SDRAM config */
-+#define DRAM64MEG 0x00000004 /* See SDRAM config */
-+
-+/*
-+#-----------------------------------------------------------------------*
-+# *
-+#************************************************************************
-+*/
-+#define CS0BASE 0x00
-+#define CS0CNTL 0x04
-+#define CS1BASE 0x08
-+#define CS1CNTL 0x0c
-+#define CS2BASE 0x10
-+#define CS2CNTL 0x14
-+#define CS3BASE 0x18
-+#define CS3CNTL 0x1c
-+#define CS4BASE 0x20
-+#define CS4CNTL 0x24
-+#define CS5BASE 0x28
-+#define CS5CNTL 0x2c
-+#define CS6BASE 0x30
-+#define CS6CNTL 0x34
-+#define CS7BASE 0x38
-+#define CS7CNTL 0x3c
-+#define EBICONFIG 0x40
-+
-+/*
-+# CSxBASE settings
-+# Size in low 4 bits
-+# Base Address for match in upper 24 bits
-+*/
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+
-+/* CSxCNTL settings */
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define ZEROWT 0x00000000 /* .. 0 WS */
-+#define ONEWT 0x00000002 /* .. 1 WS */
-+#define TWOWT 0x00000004 /* .. 2 WS */
-+#define THREEWT 0x00000006 /* .. 3 WS */
-+#define FOURWT 0x00000008 /* .. 4 WS */
-+#define FIVEWT 0x0000000a /* .. 5 WS */
-+#define SIXWT 0x0000000c /* .. 6 WS */
-+#define SEVENWT 0x0000000e /* .. 7 WS */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert chip select polarity */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. enable fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+
-+/* EBICONFIG settings */
-+#define EBI_MASTER_ENABLE 0x80000000 /* allow external masters */
-+#define EBI_EXT_MAST_PRIO 0x40000000 /* maximize ext master priority */
-+#define EBI_CTRL_ENABLE 0x20000000
-+#define EBI_TA_ENABLE 0x10000000
-+
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define BAUD115200 0x0a
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+#define TX4 0x40
-+#define RX4 0x04
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+#define RXIRQS 0x7fc0
-+#define TXIRQS 0x003e
-+
-+#define CPU_CLK_EN 0x0001
-+#define UART_CLK_EN 0x0008
-+
-+#define BLKEN 06
-+
-+#define FMSEL_MASK 0xf0000000 // 31:28
-+#define FMSEL_SHFT 28
-+#define FM_HI_GEAR 0x08000000 // 27
-+#define FMCLKSEL 0x04000000 // 26
-+#define FMDIV_MASK 0x03000000 // 25:24
-+#define FMDIV_SHFT 24
-+#define FBDIV_MASK 0x00f00000 // 23:20
-+#define FBDIV_SHFT 20
-+#define FB_SEL 0x00010000 // 16
-+#define FU2SEL_MASK 0x0000f000 // 15:12
-+#define FU2SEL_SHFT 12
-+#define FU1SEL_MASK 0x00000f00 // 11:8
-+#define FU1SEL_SHFT 8
-+#define FU1PRS_MASK 0x000000e0 // 7:5
-+#define FU1PRS_SHFT 5
-+#define FU1POS_MASK 0x00000018 // 4:3
-+#define FU1POS_SHFT 3
-+#define SOFT_RESET 0x00000001
-+
-+#define FMSEL 0x08
-+
-+#define UART0CONTROL 0x01
-+#define UART0CONFIG 0x02
-+#define UART0RXTIMEOUT 0x03
-+#define UART0BAUD 0x04
-+#define UART0FIFOCFG 0x0a
-+#define UART0INTMASK 0x10
-+#define UART0INTSTAT 0x12
-+#define UART0DATA 0x17
-+
-+#define GPIOTBUSSEL 0x03
-+#define GPIODIR 0x06
-+#define GPIOLED 0x09
-+#define GPIOIO 0x0a
-+#define GPIOUARTCTL 0x0c
-+
-+/*Defines below show which bit enables which UART signals */
-+#define RI1_EN 0x0001
-+#define CTS1_EN 0x0002
-+#define DCD1_EN 0x0004
-+#define DSR1_EN 0x0008
-+#define DTR1_EN 0x0010
-+#define RTS1_EN 0x0020
-+#define DO1_EN 0x0040
-+#define DI1_EN 0x0080
-+#define RI0_EN 0x0100
-+#define CTS0_EN 0x0200
-+#define DCD0_EN 0x0400
-+#define DSR0_EN 0x0800
-+#define DTR0_EN 0x1000
-+#define RTS0_EN 0x2000
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6345_map.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6345_map.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6345_map.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6345_map.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,939 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6345_map.h */
-+/* DATE: 96/12/19 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6345 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6345_MAP_H
-+#define __BCM6345_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+#include "6345_common.h"
-+#include "6345_intr.h"
-+
-+/* macro to convert logical data addresses to physical */
-+/* DMA hardware must see physical address */
-+#define LtoP( x ) ( (uint32)x & 0x1fffffff )
-+#define PtoL( x ) ( LtoP(x) | 0xa0000000 )
-+
-+/*
-+** Interrupt Controller
-+*/
-+typedef struct IntControl {
-+ uint32 RevID; /* (00) */
-+ uint16 testControl; /* (04) */
-+ uint16 blkEnables; /* (06) */
-+
-+#define USB_CLK_EN 0x0100
-+#define EMAC_CLK_EN 0x0080
-+#define ADSL_CLK_EN 0x0010
-+#define UART_CLK_EN 0x0008
-+#define EBI_CLK_EN 0x0004
-+#define BUS_CLK_EN 0x0002
-+#define CPU_CLK_EN 0x0001
-+
-+ uint32 pll_control; /* (08) */
-+#define FMSEL_MASK 0xf0000000 // 31:28
-+#define FMSEL_SHFT 28
-+#define FM_HI_GEAR 0x08000000 // 27
-+#define FMCLKSEL 0x04000000 // 26
-+#define FMDIV_MASK 0x03000000 // 25:24
-+#define FMDIV_SHFT 24
-+#define FBDIV_MASK 0x00f00000 // 23:20
-+#define FBDIV_SHFT 20
-+#define FB_SEL 0x00010000 // 16
-+#define FU2SEL_MASK 0x0000f000 // 15:12
-+#define FU2SEL_SHFT 12
-+#define FU1SEL_MASK 0x00000f00 // 11:8
-+#define FU1SEL_SHFT 8
-+#define FU1PRS_MASK 0x000000e0 // 7:5
-+#define FU1PRS_SHFT 5
-+#define FU1POS_MASK 0x00000018 // 4:3
-+#define FU1POS_SHFT 3
-+#define SOFT_RESET 0x00000001
-+
-+ uint32 IrqMask; /* (0c) */
-+ uint32 IrqStatus; /* (10) */
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 4
-+#define EI_CLEAR_SHFT 8
-+#define EI_MASK_SHFT 12
-+#define EI_INSENS_SHFT 16
-+#define EI_LEVEL_SHFT 20
-+} IntControl;
-+
-+#define PERF ((volatile IntControl * const) INTC_BASE)
-+
-+/*
-+** Bus Bridge Registers
-+*/
-+typedef struct BusBridge {
-+ uint16 status;
-+#define BB_BUSY 0x8000 /* posted operation in progress */
-+#define BB_RD_PND 0x4000 /* read pending */
-+#define BB_RD_CMPLT 0x2000 /* read complete */
-+#define BB_ERROR 0x1000 /* posted write error */
-+#define BB_TEA 0x0800 /* transfer aborted */
-+ uint16 abortTimeoutCnt; /* abort timeout value */
-+
-+ byte writePostEnable;
-+#define BB_POST_TIMR_EN 0x08 /* post writes to timer regs */
-+#define BB_POST_GPIO_EN 0x04 /* post writes to gpio regs */
-+#define BB_POST_INTC_EN 0x02 /* post writes to interrupt controller regs */
-+#define BB_POST_UART_EN 0x01 /* post writes to uart regs */
-+ byte unused1[5];
-+ uint16 postAddr; /* posted read address (lower half) */
-+ byte unused2[3];
-+ byte postData; /* posted read data */
-+} BusBridge;
-+
-+/* register offsets (needed for EBI master access) */
-+#define BB_STATUS 0
-+#define BB_ABORT_TO_CNT 2
-+#define BB_WR_POST_EN 4
-+#define BB_RD_POST_ADDR 10
-+#define BB_RD_POST_DATA 12
-+
-+#define BRIDGE *bridge ((volatile BusBridge * const) BB_BASE)
-+
-+/*
-+** Timer
-+*/
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+
-+/*
-+** UART
-+*/
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+ byte config;
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+ /* 4-LSBS represent STOP bits/char
-+ * in 1/8 bit-time intervals. Zero
-+ * represents 1/8 stop bit interval.
-+ * Fifteen represents 2 stop bits.
-+ */
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ /* 5-bit TimeoutCnt is in low bits of this register.
-+ * This count represents the number of characters
-+ * idle times before setting receive Irq when below threshold
-+ */
-+ uint32 baudword;
-+ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
-+ */
-+
-+ byte txf_levl; /* Read-only fifo depth */
-+ byte rxf_levl; /* Read-only fifo depth */
-+ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
-+ * RxThreshold. Irq can be asserted
-+ * when rx fifo> thresh, txfifo<thresh
-+ */
-+ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
-+ * if these bits are also enabled to GPIO_o
-+ */
-+#define DTREN 0x01
-+#define RTSEN 0x02
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
-+ * detect irq on rising AND falling
-+ * edges for corresponding GPIO_i
-+ * if enabled (edge insensitive)
-+ */
-+ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
-+ * 0 for negedge sense if
-+ * not configured for edge
-+ * insensitive (see above)
-+ * Lower 4 bits: Mask to enable change
-+ * detection IRQ for corresponding
-+ * GPIO_i
-+ */
-+ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
-+ * have changed (may set IRQ).
-+ * read automatically clears bit
-+ * Lower 4 bits are actual status
-+ */
-+
-+ uint16 intMask; /* Same Bit defs for Mask and status */
-+ uint16 intStatus;
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data; /* Write to TX, Read from RX */
-+ /* bits 11:8 are BRK,PAR,FRM errors */
-+
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+/*
-+** Gpio Controller
-+*/
-+typedef struct GpioControl {
-+ uint16 unused0;
-+ byte unused1;
-+ byte TBusSel;
-+
-+ /* High in bit location enables output */
-+ uint16 unused2;
-+ uint16 GPIODir;
-+ byte unused3;
-+ byte Leds; //Only bits [3:0]
-+ uint16 GPIOio;
-+
-+ /* Defines below show which bit enables which UART signals */
-+ uint32 UartCtl;
-+#define RI1_EN 0x0001
-+#define CTS1_EN 0x0002
-+#define DCD1_EN 0x0004
-+#define DSR1_EN 0x0008
-+#define DTR1_EN 0x0010
-+#define RTS1_EN 0x0020
-+#define DO1_EN 0x0040
-+#define DI1_EN 0x0080
-+#define RI0_EN 0x0100
-+#define CTS0_EN 0x0200
-+#define DCD0_EN 0x0400
-+#define DSR0_EN 0x0800
-+#define DTR0_EN 0x1000
-+#define RTS0_EN 0x2000
-+
-+ /*********************************************************************
-+ * Multiple Use Muxed GPIO
-+ * -----------------------
-+ *
-+ * ------
-+ * GPIO_A
-+ * ------
-+ *
-+ * GPIO[0] -> RI1 I Controlled by UartCtl[0] ELSE 0
-+ * GPIO[0] -> DMATC_i I Always
-+ * GPIO[0] -> DMATC_o O Controlled by dma_enable_n|dma_drive_n
-+ * GPIO[0] -> ebi_bsize[0] I Always
-+ *
-+ * GPIO[1] -> CTS1 I Controlled by UartCtl[1] ELSE 0
-+ * GPIO[1] -> DMAACK1 (18) O Controlled by dma_enable_n
-+ * GPIO[1] -> ebi_bg_b O Controlled by ebi_master_n
-+ *
-+ * GPIO[2] -> DCD1 I Controlled by UartCtl[2] ELSE 0
-+ * GPIO[2] -> ebi_bsize[1] I Always
-+ *
-+ * GPIO[3] -> DSR1 I Controlled by UartCtl[3] ELSE 0
-+ * GPIO[3] -> INT2 I Always
-+ * GPIO[3] -> ebi_bsize[2] I Always
-+ *
-+ * GPIO[4] -> DTR1 O Controlled by UartCtl[4]&GpioDir[4]
-+ * GPIO[4] -> INT3 I Always
-+ * GPIO[4] -> ebi_burst I Always
-+ *
-+ * GPIO[5] -> RTS1 O Controlled by UartCtl[5]&GpioDir[5]
-+ * GPIO[5] -> DMAACK0 (17) O Controlled by dma_enable_n
-+ * GPIO[5] -> ebi_tsize I Always
-+ *
-+ * GPIO[6] -> sDout1 O Controlled by UartCtl[6]&GpioDir[6]
-+ * GPIO[6] -> DMARQ1 (18) I Always
-+ * GPIO[6] -> ebi_bb_i I Always
-+ * GPIO[6] -> ebi_bb_o O Controlled by ebi_master_n|ebi_bb_oen
-+ *
-+ * GPIO[7] -> sDin1 I Controlled by UartCtl[7] ELSE 0
-+ * GPIO[7] -> ebi_br_b I Always
-+ * GPIO[7] -> DMARQ0 (17) I Always
-+ *
-+ * ------
-+ * GPIO_B
-+ * ------
-+ *
-+ * GPIO[8] -> RI0 I Controlled by UartCtl[8] ELSE 0
-+ * GPIO[8] -> ebi_cs_b[6] O Controlled by ebi_cs_en[6]
-+ *
-+ * GPIO[9] -> CTS0 I Controlled by UartCtl[9] ELSE 0
-+ *
-+ * GPIO[a] -> DCD0 I Controlled by UartCtl[a] ELSE 0
-+ * GPIO[a] -> ebi_cs_b[7] O Controlled by ebi_cs_en[7]
-+ *
-+ * GPIO[b] -> DSR0 I Controlled by UartCtl[b] ELSE 0
-+ * GPIO[b] -> ebi_int_cs_b I Always
-+ *
-+ * GPIO[c] -> DTR0 O Controlled by UartCtl[c]&GpioDir[c]
-+ *
-+ * GPIO[d] -> RTS0 O Controlled by UartCtl[d]&&GpioDir[d]
-+ *
-+ * GPIO[e] -> INT0 I Always
-+ *
-+ * GPIO[f] -> INT1 I Always
-+ *
-+ * sDout0 -> (bist_en[15]) ? pll_clk48:sDout0_int
-+ *
-+ *********************************************************************/
-+
-+} GpioControl;
-+
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+#define GPIO_NUM_MAX_BITS_MASK 0x0f
-+#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
-+
-+/*
-+** DMA Channel (1 .. 20)
-+*/
-+typedef struct DmaChannel {
-+ uint32 cfg; /* (00) assorted configuration */
-+#define DMA_FLOWC_EN 0x00000010 /* flow control enable */
-+#define DMA_WRAP_EN 0x00000008 /* use DMA_WRAP bit */
-+#define DMA_CHAINING 0x00000004 /* chaining mode */
-+#define DMA_STALL 0x00000002
-+#define DMA_ENABLE 0x00000001 /* set to enable channel */
-+ uint32 maxBurst; /* (04) max burst length permitted */
-+ /* non-chaining / chaining */
-+ uint32 startAddr; /* (08) source addr / ring start address */
-+ uint32 length; /* (0c) xfer len / ring len */
-+#define DMA_KICKOFF 0x80000000 /* start non-chaining xfer */
-+
-+ uint32 bufStat; /* (10) buffer status for non-chaining */
-+ uint32 intStat; /* (14) interrupts control and status */
-+ uint32 intMask; /* (18) interrupts mask */
-+#define DMA_BUFF_DONE 0x00000001 /* buffer done */
-+#define DMA_DONE 0x00000002 /* packet xfer complete */
-+#define DMA_NO_DESC 0x00000004 /* no valid descriptors */
-+
-+// DMA HW bits are clugy in this version of chip (mask/status shifted)
-+#define DMA_BUFF_DONE_MASK 0x00000004 /* buffer done */
-+#define DMA_DONE_MASK 0x00000001 /* packet xfer complete */
-+#define DMA_NO_DESC_MASK 0x00000002 /* no valid descriptors */
-+
-+ uint32 fcThreshold; /* (1c) flow control threshold */
-+ uint32 numAlloc; /* */
-+ uint32 unused[7]; /* (20-3c) pad to next descriptor */
-+} DmaChannel;
-+/* register offsets, useful for ebi master access */
-+#define DMA_CFG 0
-+#define DMA_MAX_BURST 4
-+#define DMA_START_ADDR 8
-+#define DMA_LENGTH 12
-+#define DMA_BUF_STAT 16
-+#define DMA_INT_STAT 20
-+#define DMA_FC_THRESHOLD 24
-+#define DMA_NUM_ALLOC 28
-+
-+
-+/* paste in your program ...
-+DmaChannel *dmaChannels = (DmaChannel *)DMA_BASE;
-+DmaChannel *dma1 = dmaChannels[1];
-+*/
-+
-+
-+/*
-+** DMA Buffer
-+*/
-+typedef struct DmaDesc {
-+ uint16 length; /* in bytes of data in buffer */
-+ uint16 status; /* buffer status */
-+#define DMA_OWN 0x8000 /* cleared by DMA, set by SW */
-+#define DMA_EOP 0x0800 /* last buffer in packet */
-+#define DMA_SOP 0x0400 /* first buffer in packet */
-+#define DMA_WRAP 0x0200 /* */
-+#define DMA_APPEND_CRC 0x0100 /* .. for emac tx */
-+#define DATA_FLAG 0x0100 /* .. for secmod rx */
-+#define AUTH_FAIL_FLAG 0x0100 /* .. for secmod tx */
-+
-+/* EMAC Descriptor Status definitions */
-+#define EMAC_UNDERRUN 0x4000 /* Tx underrun, dg-mod ???) */
-+#define EMAC_MISS 0x0080 /* framed address recognition failed (promiscuous) */
-+#define EMAC_BRDCAST 0x0040 /* DA is Broadcast */
-+#define EMAC_MULT 0x0020 /* DA is multicast */
-+#define EMAC_LG 0x0010 /* frame length > RX_LENGTH register value */
-+#define EMAC_NO 0x0008 /* Non-Octet aligned */
-+#define EMAC_RXER 0x0004 /* RX_ERR on MII while RX_DV assereted */
-+#define EMAC_CRC_ERROR 0x0002 /* CRC error */
-+#define EMAC_OV 0x0001 /* Overflow */
-+
-+/* HDLC Descriptor Status definitions */
-+#define DMA_HDLC_TX_ABORT 0x0100
-+#define DMA_HDLC_RX_OVERRUN 0x4000
-+#define DMA_HDLC_RX_TOO_LONG 0x2000
-+#define DMA_HDLC_RX_CRC_OK 0x1000
-+#define DMA_HDLC_RX_ABORT 0x0100
-+
-+ uint32 address; /* address of data */
-+} DmaDesc;
-+
-+/*
-+** Sdram Controller
-+*/
-+typedef struct SdramControllerRegs {
-+ uint16 unused1;
-+ uint16 initControl; /* 02 */
-+#define SD_POWER_DOWN 0x200 /* put sdram into power down */
-+#define SD_SELF_REFRESH 0x100 /* enable self refresh mode */
-+#define SD_SOFT_RESET 0x080 /* soft reset all sdram controller regs */
-+#define SD_EDO_SELECT 0x040 /* select EDO mode */
-+#define SD_EDO_WAIT_STATE 0x020 /* add an EDO wait state */
-+#define SD_8MEG 0x010 /* map sdram to 8 megs */
-+#define SD_MASTER_ENABLE 0x008 /* enable accesses to external sdram */
-+#define SD_MRS 0x004 /* generate a mode register select cycle */
-+#define SD_PRECHARGE 0x002 /* generate a precharge cycle */
-+#define SD_CBR 0x001 /* generate a refresh cycle */
-+ uint8 unused2[3];
-+ uint8 config; /* 07 */
-+#define SD_FAST_MEM 0x04 /* 1=CAS latency of 2, 0 = CAS latency of 3 */
-+#define SD_BURST_LEN 0x03 /* set burst length */
-+#define SD_BURST_FULL_PAGE 0x00 /* .. full page */
-+#define SD_BURST_8 0x01 /* .. 8 words */
-+#define SD_BURST_4 0x02 /* .. 4 words */
-+#define SD_BURST_2 0x03 /* .. 2 words */
-+ uint16 unused3;
-+ uint16 refreshControl; /* 0a */
-+#define SD_REFRESH_ENABLE 0x8000 /* refresh enable */
-+#define SD_REFRESH_PERIOD 0x00ff /* refresh period (16 x n x clock_period) */
-+
-+ uint32 memoryBase; /* 0c */
-+#define SD_MEMBASE_MASK 0xffffe000 /* base address mask */
-+#define SD_MEMSIZE_8MEG 0x00000001 /* memory is 8 meg */
-+#define SD_MEMSIZE_2MEG 0x00000001 /* memory is 2 meg */
-+
-+} SdramControllerRegs;
-+
-+/*
-+** External Bus Interface
-+*/
-+typedef struct EbiChipSelect {
-+ uint32 base; /* base address in upper 24 bits */
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+ uint32 config;
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_WREN 0x00000020 /* enable posted writes */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert something,
-+ ** don't know what yet */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. use fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+} EbiChipSelect;
-+
-+typedef struct EbiRegisters {
-+ EbiChipSelect cs[5]; /* size chip select configuration */
-+ uint32 reserved[6];
-+ uint32 ebi_config; /* configuration */
-+#define EBI_MASTER_ENABLE 0x80000000 /* allow external masters */
-+#define EBI_EXT_MAST_PRIO 0x40000000 /* maximize ext master priority */
-+#define EBI_CTRL_ENABLE 0x20000000
-+#define EBI_TA_ENABLE 0x10000000
-+ uint32 dma_control;
-+#define EBI_TX_INV_IRQ_EN 0x00080000
-+#define EBI_RX_INV_IRQ_EN 0x00040000
-+#define EBI_TX_PKT_DN_IRQ_EN 0x00020000
-+#define EBI_RX_PKT_DN_IRQ_EN 0x00010000
-+#define EBI_TX_INV_CLR 0x00001000
-+#define EBI_RX_INV_CLR 0x00000800
-+#define EBI_CHAINING 0x00000400
-+#define EBI_EXT_MODE 0x00000200
-+#define EBI_HALF_WORD 0x00000100
-+#define EBI_TX_PKT_DN_CLR 0x00000080
-+#define EBI_RX_PKT_DN_CLR 0x00000040
-+#define EBI_TX_BUF_DN_CLR 0x00000020
-+#define EBI_RX_BUF_DN_CLR 0x00000010
-+#define EBI_TX_BUF_DN_IRQ_EN 0x00000008
-+#define EBI_RX_BUF_DN_IRQ_EN 0x00000004
-+#define EBI_TX_EN 0x00000002
-+#define EBI_RX_EN 0x00000001
-+ uint32 dma_rx_start_addr;
-+ uint32 dma_rx_buf_size;
-+ uint32 dma_tx_start_addr;
-+ uint32 dma_tx_buf_size;
-+ uint32 dma_status;
-+#define EBI_TX_INV_DESC 0x00000020
-+#define EBI_RX_INV_DESC 0x00000010
-+#define EBI_TX_PKT_DN 0x00000008
-+#define EBI_RX_PKT_DN 0x00000004
-+#define EBI_TX_BUF_DN 0x00000002
-+#define EBI_RX_BUF_DN 0x00000001
-+} EbiRegisters;
-+
-+#define EBIC ((volatile EbiRegisters * const) EBIC_BASE)
-+
-+typedef struct PcmciaRegisters {
-+ /*Each of base has 24 bits of base address followed by size select field*/
-+ uint32 mem_base;
-+ uint32 mem_cntrl;
-+ uint32 attr_base;
-+ uint32 attr_cntrl;
-+ uint32 io_base;
-+ uint32 io_cntrl;
-+#define PCMCIA_CS_ENABLE 0x00000001
-+#define PCMCIA_CS_FIFO_ENABLE 0x00000200
-+#define PCMCIA_DSTSIZE_16 0x00000010 // 0 -8bit, 1- 16bit
-+#define PCMCIA_RENDIAN 0x00000400
-+ /* Skip ECR and EBI-DMA registers */
-+ uint32 other1[7];
-+
-+ byte mem_waitcnt4; // Only bits [5:0]
-+ byte mem_waitcnt3; // Only bits [4:0]
-+ byte mem_waitcnt2; // Only bits [4:0]
-+ byte mem_waitcnt1; // Only bits [4:0]
-+
-+ byte attr_waitcnt4; // Only bits [5:0]
-+ byte attr_waitcnt3; // Only bits [4:0]
-+ byte attr_waitcnt2; // Only bits [4:0]
-+ byte attr_waitcnt1; // Only bits [4:0]
-+
-+ byte io_waitcnt4; // Only bits [5:0]
-+ byte io_waitcnt3; // Only bits [4:0]
-+ byte io_waitcnt2; // Only bits [4:0]
-+ byte io_waitcnt1; // Only bits [4:0]
-+
-+} PcmciaRegisters;
-+
-+#define PCMCIA ((volatile PcmciaRegisters * const) PCMCIA_BASE)
-+
-+/*
-+** EMAC transmit MIB counters
-+*/
-+typedef struct EmacTxMib {
-+ uint32 tx_good_octets; /* (200) good byte count */
-+ uint32 tx_good_pkts; /* (204) good pkt count */
-+ uint32 tx_octets; /* (208) good and bad byte count */
-+ uint32 tx_pkts; /* (20c) good and bad pkt count */
-+ uint32 tx_broadcasts_pkts; /* (210) good broadcast packets */
-+ uint32 tx_multicasts_pkts; /* (214) good mulitcast packets */
-+ uint32 tx_len_64; /* (218) RMON tx pkt size buckets */
-+ uint32 tx_len_65_to_127; /* (21c) */
-+ uint32 tx_len_128_to_255; /* (220) */
-+ uint32 tx_len_256_to_511; /* (224) */
-+ uint32 tx_len_512_to_1023; /* (228) */
-+ uint32 tx_len_1024_to_max; /* (22c) */
-+ uint32 tx_jabber_pkts; /* (230) > 1518 with bad crc */
-+ uint32 tx_oversize_pkts; /* (234) > 1518 with good crc */
-+ uint32 tx_fragment_pkts; /* (238) < 63 with bad crc */
-+ uint32 tx_underruns; /* (23c) fifo underrun */
-+ uint32 tx_total_cols; /* (240) total collisions in all tx pkts */
-+ uint32 tx_single_cols; /* (244) tx pkts with single collisions */
-+ uint32 tx_multiple_cols; /* (248) tx pkts with multiple collisions */
-+ uint32 tx_excessive_cols; /* (24c) tx pkts with excessive cols */
-+ uint32 tx_late_cols; /* (250) tx pkts with late cols */
-+ uint32 tx_defered; /* (254) tx pkts deferred */
-+ uint32 tx_carrier_lost; /* (258) tx pkts with CRS lost */
-+ uint32 tx_pause_pkts; /* (25c) tx pause pkts sent */
-+#define NumEmacTxMibVars 24
-+} EmacTxMib;
-+
-+/*
-+** EMAC receive MIB counters
-+*/
-+typedef struct EmacRxMib {
-+ uint32 rx_good_octets; /* (280) good byte count */
-+ uint32 rx_good_pkts; /* (284) good pkt count */
-+ uint32 rx_octets; /* (288) good and bad byte count */
-+ uint32 rx_pkts; /* (28c) good and bad pkt count */
-+ uint32 rx_broadcasts_pkts; /* (290) good broadcast packets */
-+ uint32 rx_multicasts_pkts; /* (294) good mulitcast packets */
-+ uint32 rx_len_64; /* (298) RMON rx pkt size buckets */
-+ uint32 rx_len_65_to_127; /* (29c) */
-+ uint32 rx_len_128_to_255; /* (2a0) */
-+ uint32 rx_len_256_to_511; /* (2a4) */
-+ uint32 rx_len_512_to_1023; /* (2a8) */
-+ uint32 rx_len_1024_to_max; /* (2ac) */
-+ uint32 rx_jabber_pkts; /* (2b0) > 1518 with bad crc */
-+ uint32 rx_oversize_pkts; /* (2b4) > 1518 with good crc */
-+ uint32 rx_fragment_pkts; /* (2b8) < 63 with bad crc */
-+ uint32 rx_missed_pkts; /* (2bc) missed packets */
-+ uint32 rx_crc_align_errs; /* (2c0) both or either */
-+ uint32 rx_undersize; /* (2c4) < 63 with good crc */
-+ uint32 rx_crc_errs; /* (2c8) crc errors (only) */
-+ uint32 rx_align_errs; /* (2cc) alignment errors (only) */
-+ uint32 rx_symbol_errs; /* (2d0) pkts with RXERR assertions (symbol errs) */
-+ uint32 rx_pause_pkts; /* (2d4) MAC control, PAUSE */
-+ uint32 rx_nonpause_pkts; /* (2d8) MAC control, not PAUSE */
-+#define NumEmacRxMibVars 23
-+} EmacRxMib;
-+
-+typedef struct EmacRegisters {
-+ uint32 rxControl; /* (00) receive control */
-+#define EMAC_PM_REJ 0x80 /* - reject DA match in PMx regs */
-+#define EMAC_UNIFLOW 0x40 /* - accept cam match fc */
-+#define EMAC_FC_EN 0x20 /* - enable flow control */
-+#define EMAC_LOOPBACK 0x10 /* - loopback */
-+#define EMAC_PROM 0x08 /* - promiscuous */
-+#define EMAC_RDT 0x04 /* - ignore transmissions */
-+#define EMAC_ALL_MCAST 0x02 /* - ignore transmissions */
-+#define EMAC_NO_BCAST 0x01 /* - ignore transmissions */
-+
-+
-+ uint32 rxMaxLength; /* (04) receive max length */
-+ uint32 txMaxLength; /* (08) transmit max length */
-+ uint32 unused1[1];
-+ uint32 mdioFreq; /* (10) mdio frequency */
-+#define EMAC_MII_PRE_EN 0x0100 /* prepend preamble sequence */
-+#define EMAC_MDIO_PRE 0x100 /* - enable MDIO preamble */
-+#define EMAC_MDC_FREQ 0x0ff /* - mdio frequency */
-+
-+ uint32 mdioData; /* (14) mdio data */
-+#define MDIO_WR 0x50020000 /* - write framing */
-+#define MDIO_RD 0x60020000 /* - read framing */
-+#define MDIO_PMD_SHIFT 23
-+#define MDIO_REG_SHIFT 18
-+
-+ uint32 intMask; /* (18) int mask */
-+ uint32 intStatus; /* (1c) int status */
-+#define EMAC_FLOW_INT 0x04 /* - flow control event */
-+#define EMAC_MIB_INT 0x02 /* - mib event */
-+#define EMAC_MDIO_INT 0x01 /* - mdio event */
-+
-+ uint32 unused2[3];
-+ uint32 config; /* (2c) config */
-+#define EMAC_ENABLE 0x001 /* - enable emac */
-+#define EMAC_DISABLE 0x002 /* - disable emac */
-+#define EMAC_SOFT_RST 0x004 /* - soft reset */
-+#define EMAC_SOFT_RESET 0x004 /* - emac soft reset */
-+#define EMAC_EXT_PHY 0x008 /* - external PHY select */
-+
-+ uint32 txControl; /* (30) transmit control */
-+#define EMAC_FD 0x001 /* - full duplex */
-+#define EMAC_FLOWMODE 0x002 /* - flow mode */
-+#define EMAC_NOBKOFF 0x004 /* - no backoff in */
-+#define EMAC_SMALLSLT 0x008 /* - small slot time */
-+
-+ uint32 txThreshold; /* (34) transmit threshold */
-+ uint32 mibControl; /* (38) mib control */
-+#define EMAC_NO_CLEAR 0x001 /* don't clear on read */
-+
-+ uint32 unused3[7];
-+
-+ uint32 pm0DataLo; /* (58) perfect match 0 data lo */
-+ uint32 pm0DataHi; /* (5C) perfect match 0 data hi (15:0) */
-+ uint32 pm1DataLo; /* (60) perfect match 1 data lo */
-+ uint32 pm1DataHi; /* (64) perfect match 1 data hi (15:0) */
-+ uint32 pm2DataLo; /* (68) perfect match 2 data lo */
-+ uint32 pm2DataHi; /* (6C) perfect match 2 data hi (15:0) */
-+ uint32 pm3DataLo; /* (70) perfect match 3 data lo */
-+ uint32 pm3DataHi; /* (74) perfect match 3 data hi (15:0) */
-+#define EMAC_CAM_V 0x10000 /* - cam index */
-+#define EMAC_CAM_VALID 0x00010000
-+
-+ uint32 unused4[98]; /* (78-1fc) */
-+
-+ EmacTxMib tx_mib; /* (200) emac tx mib */
-+ uint32 unused5[8]; /* (260-27c) */
-+
-+ EmacRxMib rx_mib; /* (280) rx mib */
-+
-+} EmacRegisters;
-+
-+/* register offsets for subrouting access */
-+#define EMAC_RX_CONTROL 0x00
-+#define EMAC_RX_MAX_LENGTH 0x04
-+#define EMAC_TX_MAC_LENGTH 0x08
-+#define EMAC_MDIO_FREQ 0x10
-+#define EMAC_MDIO_DATA 0x14
-+#define EMAC_INT_MASK 0x18
-+#define EMAC_INT_STATUS 0x1C
-+#define EMAC_CAM_DATA_LO 0x20
-+#define EMAC_CAM_DATA_HI 0x24
-+#define EMAC_CAM_CONTROL 0x28
-+#define EMAC_CONTROL 0x2C
-+#define EMAC_TX_CONTROL 0x30
-+#define EMAC_TX_THRESHOLD 0x34
-+#define EMAC_MIB_CONTROL 0x38
-+
-+
-+#define EMAC ((volatile EmacRegisters * const) EMAC_BASE)
-+
-+/*
-+** USB Registers
-+*/
-+typedef struct UsbRegisters {
-+ byte inttf_setting;
-+ byte current_config;
-+ uint16 status_frameNum;
-+#define USB_BUS_RESET 0x1000
-+#define USB_SUSPENDED 0x0800
-+ byte unused1;
-+ byte endpt_prnt;
-+ byte endpt_dirn;
-+ byte endpt_status;
-+#define USB_ENDPOINT_0 0x01
-+#define USB_ENDPOINT_1 0x02
-+#define USB_ENDPOINT_2 0x04
-+#define USB_ENDPOINT_3 0x08
-+#define USB_ENDPOINT_4 0x10
-+#define USB_ENDPOINT_5 0x20
-+#define USB_ENDPOINT_6 0x40
-+#define USB_ENDPOINT_7 0x80
-+ uint32 unused2;
-+ byte conf_mem_ctl;
-+#define USB_CONF_MEM_RD 0x80
-+#define USB_CONF_MEM_RDY 0x40
-+ byte unused2a;
-+ byte conf_mem_read_address;
-+ byte conf_mem_write_address;
-+
-+ byte unused3;
-+ byte dev_req_bytesel;
-+ uint16 ext_dev_data;
-+
-+ byte unused4;
-+ byte clr_fifo;
-+ byte endpt_stall_reset; // use same endpoint #'s from above
-+ byte usb_cntl;
-+#define USB_FORCE_ERR 0x20
-+#define USB_SOFT_RESET 0x10
-+#define USB_RESUME 0x08
-+#define USB_COMMAND_ERR 0x04
-+#define USB_COMMAND_OVER 0x02
-+ byte irq_addr;
-+ byte iso_out_in_addr;
-+ byte blk_out_in_addr;
-+ byte cntl_addr;
-+ uint32 mux_cntl;
-+#define USB_TX_DMA_OPER 0x00000000
-+#define USB_TX_CNTL_FIFO_OPER 0x00000004
-+#define USB_TX_BULK_FIFO_OPER 0x00000008
-+#define USB_TX_ISO_FIFO_OPER 0x0000000c
-+#define USB_TX_IRQ_OPER 0x00000010
-+#define USB_RX_DMA_OPER 0x00000000
-+#define USB_RX_CNTL_FIFO_OPER 0x00000001
-+#define USB_RX_BULK_FIFO_OPER 0x00000002
-+#define USB_RX_ISO_FIFO_OPER 0x00000003
-+ uint32 rx_ram_read_port;
-+ uint32 tx_ram_write_port;
-+ uint32 fifo_status;
-+#define USB_CTRLI_FIFO_FULL 0x00000001
-+#define USB_CTRLI_FIFO_EMPTY 0x00000002
-+#define USB_CTRLO_FIFO_FULL 0x00000100
-+#define USB_CTRLO_FIFO_EMPTY 0x00000200
-+ uint32 irq_status;
-+ uint32 irq_mask;
-+#define USB_NEW_CONFIG 0x01
-+#define USB_SETUP_COMMAND_RECV 0x02 // non-standard setup command received
-+#define USB_OUT_FIFO_OV 0x04
-+#define USB_RESET_RECV 0x08
-+#define USB_SUSPEND_RECV 0x10
-+#define USB_FIFO_REWIND 0x20
-+#define USB_RX_BULK_FIFO_DATA_AVAIL 0x40
-+#define USB_RX_ISO_FIFO_DATA_AVAIL 0x80
-+ uint32 endpt_cntl;
-+#define USB_R_WK_EN 0x0100
-+#define USB_TX_EOP 0x0200
-+#define USB_TX_CNTL_DMA_EN 0x0400
-+#define USB_TX_BULK_DMA_EN 0x0800
-+#define USB_TX_ISO_DMA_EN 0x1000
-+#define USB_RX_CNTL_DMA_EN 0x2000
-+#define USB_RX_BULK_DMA_EN 0x4800
-+#define USB_RX_ISO_DMA_EN 0x8000
-+ uint32 rx_status_read_port;
-+ uint32 confmem_read_port;
-+ uint32 confmem_write_port;
-+ uint32 fifo_ovf_count;
-+ uint32 fifo_rewind_cnt;
-+} UsbRegisters;
-+
-+#define USB ((volatile UsbRegisters * const) USB_BASE)
-+
-+/*
-+** ADSL core Registers
-+*/
-+
-+#define _PADLINE(line) pad ## line
-+#define _XSTR(line) _PADLINE(line)
-+#define PAD _XSTR(__LINE__)
-+
-+typedef struct AdslRegisters {
-+ uint32 core_control;
-+#define ADSL_RESET 0x01
-+
-+ uint32 core_status;
-+#define ADSL_HOST_MSG 0x01
-+
-+ uint32 PAD;
-+ uint32 bist_status;
-+ uint32 PAD[4];
-+ uint32 int_status_i; /* 0x20 */
-+ uint32 int_mask_i;
-+ uint32 int_status_f;
-+ uint32 int_mask_f;
-+#define ADSL_INT_HOST_MSG 0x00000020
-+#define ADSL_INT_DESC_ERR 0x00000400
-+#define ADSL_INT_DATA_ERR 0x00000800
-+#define ADSL_INT_DESC_PROTO_ERR 0x00001000
-+#define ADSL_INT_RCV_DESC_UF 0x00002000
-+#define ADSL_INT_RCV_FIFO_OF 0x00004000
-+#define ADSL_INT_XMT_FIFO_UF 0x00008000
-+#define ADSL_INT_RCV 0x00010000
-+#define ADSL_INT_XMT 0x01000000
-+
-+ uint32 PAD[116];
-+
-+ uint32 xmtcontrol_intr; /* 0x200 */
-+#define ADSL_DMA_XMT_EN 0x00000001
-+#define ADSL_DMA_XMT_LE 0x00000004
-+ uint32 xmtaddr_intr;
-+#define ADSL_DMA_ADDR_MASK 0xFFFFF000
-+ uint32 xmtptr_intr;
-+#define ADSL_DMA_LAST_DESC_MASK 0x00000FFF
-+ uint32 xmtstatus_intr;
-+#define ADSL_DMA_CURR_DESC_MASK 0x00000FFF
-+#define ADSL_DMA_XMT_STATE_MASK 0x0000F000
-+#define ADSL_DMA_XMT_STATE_DIS 0x00000000
-+#define ADSL_DMA_XMT_STATE_ACT 0x00001000
-+#define ADSL_DMA_XMT_STATE_IDLE 0x00002000
-+#define ADSL_DMA_XMT_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_XMT_ERR_MASK 0x000F0000
-+#define ADSL_DMA_XMT_ERR_NONE 0x00000000
-+#define ADSL_DMA_XMT_ERR_DPE 0x00010000
-+#define ADSL_DMA_XMT_ERR_FIFO 0x00020000
-+#define ADSL_DMA_XMT_ERR_DTE 0x00030000
-+#define ADSL_DMA_XMT_ERR_DRE 0x00040000
-+
-+ uint32 rcvcontrol_intr;
-+#define ADSL_DMA_RCV_EN 0x00000001
-+#define ADSL_DMA_RCV_FO 0x000000FE
-+ uint32 rcvaddr_intr;
-+ uint32 rcvptr_intr;
-+ uint32 rcvstatus_intr;
-+#define ADSL_DMA_RCV_STATE_MASK 0x0000F000
-+#define ADSL_DMA_RCV_STATE_DIS 0x00000000
-+#define ADSL_DMA_RCV_STATE_ACT 0x00001000
-+#define ADSL_DMA_RCV_STATE_IDLE 0x00002000
-+#define ADSL_DMA_RCV_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_RCV_ERR_MASK 0x000F0000
-+#define ADSL_DMA_RCV_ERR_NONE 0x00000000
-+#define ADSL_DMA_RCV_ERR_DPE 0x00010000
-+#define ADSL_DMA_RCV_ERR_FIFO 0x00020000
-+#define ADSL_DMA_RCV_ERR_DTE 0x00030000
-+#define ADSL_DMA_RCV_ERR_DRE 0x00040000
-+
-+ uint32 xmtcontrol_fast;
-+ uint32 xmtaddr_fast;
-+ uint32 xmtptr_fast;
-+ uint32 xmtstatus_fast;
-+ uint32 rcvcontrol_fast;
-+ uint32 rcvaddr_fast;
-+ uint32 rcvptr_fast;
-+ uint32 rcvstatus_fast;
-+ uint32 PAD[48];
-+
-+ uint32 host_message; /* 0x300 */
-+ uint32 PAD[805];
-+ uint32 core_reset;
-+ uint32 core_error;
-+ uint32 core_revision;
-+
-+#define ADSL_CORE_REV 0x0000000F
-+#define ADSL_CORE_TYPE 0x0000FFF0
-+} AdslRegisters;
-+
-+#define ADSL ((volatile AdslRegisters * const) ADSL_BASE)
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6348_common.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6348_common.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6348_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6348_common.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,225 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6348_common.h */
-+/* DATE: 04/12/19 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6348 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6348_MAP_COMMON_H
-+#define __BCM6348_MAP_COMMON_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#define PERF_BASE 0xfffe0000 /* chip control registers */
-+#define BB_BASE 0xfffe0100 /* bus bridge registers */
-+#define TIMR_BASE 0xfffe0200 /* timer registers */
-+#define UART_BASE 0xfffe0300 /* uart registers */
-+#define GPIO_BASE 0xfffe0400 /* gpio registers */
-+#define SPI_BASE 0xfffe0c00 /* SPI master controller registers */
-+
-+#define USB_CTL_BASE 0xfffe1000 /* USB control registers */
-+#define USB_DMA_BASE 0xfffe1400 /* USB DMA control registers */
-+#define USB_HOST_BASE 0xfffe1b00 /* USB host registers */
-+
-+#define MPI_BASE 0xfffe2000 /* MPI control registers */
-+#define SDRAM_BASE 0xfffe2300 /* SDRAM control registers */
-+
-+#define ADSL_BASE 0xfffe3000 /* ADSL core control registers */
-+#define ATM_BASE 0xfffe4000 /* ATM SAR control registers */
-+#define UBUS_BASE 0xfffe5000 /* UBUS status registers */
-+#define EMAC1_BASE 0xfffe6000 /* EMAC1 control registers */
-+#define EMAC2_BASE 0xfffe6800 /* EMAC2 control registers */
-+#define EMAC_DMA_BASE 0xfffe7000 /* EMAC DMA control registers */
-+
-+/*
-+#####################################################################
-+# System PLL Control Register
-+#####################################################################
-+*/
-+#define SYSPLLCFG 0x08
-+
-+#define M_MPI_MASK 0x00000018 // 4:3
-+#define M_MPI_SHFT 3
-+#define M_MPI_50MHZ 0
-+#define M_MPI_40MHZ 1
-+#define M_MPI_33MHZ 2
-+#define M_MPI_25MHZ 3
-+
-+#define M_UTO_MASK 0x00000002 // 1:1
-+#define M_UTO_SHFT 1
-+
-+#define SOFT_RESET 0x00000001
-+
-+#define PLL_STRAP_VALUE 0x34
-+
-+/*
-+#####################################################################
-+# SDRAM Control Registers
-+#####################################################################
-+*/
-+#define SDR_INIT_CTL 0x00
-+ /* Control Bits */
-+#define SDR_PFEN1 (1<<16)
-+#define SDR_PFEN0 (1<<15)
-+#define SDR_EMPRS (1<<14)
-+#define SDR_2_BANKS (1<<13)
-+#define SDR_1_BANK (0<<13)
-+#define SDR_CS1_EN (1<<12)
-+#define SDR_PEND (1<<11)
-+#define SDR_32_BIT (1<<10)
-+#define SDR_POWER_DOWN (1<<9)
-+#define SDR_SELF_REFRESH (1<<8)
-+#define SDR_11_COLS (3<<6)
-+#define SDR_10_COLS (2<<6)
-+#define SDR_9_COLS (1<<6)
-+#define SDR_8_COLS (0<<6)
-+#define SDR_13_ROWS (2<<4)
-+#define SDR_12_ROWS (1<<4)
-+#define SDR_11_ROWS (0<<4)
-+#define SDR_MASTER_EN (1<<3)
-+#define SDR_MRS_CMD (1<<2)
-+#define SDR_PRE_CMD (1<<1)
-+#define SDR_CBR_CMD (1<<0)
-+
-+#define SDR_CFG_REG 0x04
-+ /* Control Bits */
-+#define SDR_FULL_PG 0
-+#define SDR_BURST8 1
-+#define SDR_BURST4 2
-+#define SDR_BURST2 3
-+#define SDR_FAST_MEM (1<<2)
-+#define SDR_SLOW_MEM (0<<2)
-+
-+#define SDR_REF_CTL 0x0C
-+ /* Control Bits */
-+#define SDR_REF_EN (1<<15)
-+
-+#define SDR_PRIOR
-+ /* Control Bits */
-+#define SDR_EN_PRIOR (1<<31)
-+
-+
-+/*
-+#####################################################################
-+# MPI Control Registers
-+#####################################################################
-+*/
-+#define CS0BASE 0x00
-+#define CS0CNTL 0x04
-+
-+/*
-+# CSxBASE settings
-+# Size in low 4 bits
-+# Base Address for match in upper 24 bits
-+*/
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+
-+/* CSxCNTL settings */
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define ZEROWT 0x00000000 /* .. 0 WS */
-+#define ONEWT 0x00000002 /* .. 1 WS */
-+#define TWOWT 0x00000004 /* .. 2 WS */
-+#define THREEWT 0x00000006 /* .. 3 WS */
-+#define FOURWT 0x00000008 /* .. 4 WS */
-+#define FIVEWT 0x0000000a /* .. 5 WS */
-+#define SIXWT 0x0000000c /* .. 6 WS */
-+#define SEVENWT 0x0000000e /* .. 7 WS */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert chip select polarity */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. enable fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+
-+/*
-+#####################################################################
-+# UART Control Registers
-+#####################################################################
-+*/
-+#define UART0CONTROL 0x01
-+#define UART0CONFIG 0x02
-+#define UART0RXTIMEOUT 0x03
-+#define UART0BAUD 0x04
-+#define UART0FIFOCFG 0x0a
-+#define UART0INTMASK 0x10
-+#define UART0INTSTAT 0x12
-+#define UART0DATA 0x17
-+
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+#define XMITBREAK 0x40 /* Config register */
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+
-+#define RSTTXFIFOS 0x80 /* Rx Timeout register */
-+#define RSTRXFIFOS 0x40
-+
-+#define TX4 0x40 /* FIFO config register */
-+#define RX4 0x04
-+
-+#define DELTAIP 0x0001 /* Interrupt Status and Mask registers */
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6348_map.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6348_map.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/6348_map.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/6348_map.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,1095 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: 6348_map.h */
-+/* DATE: 11/06/03 */
-+/* PURPOSE: Define addresses of major hardware components of */
-+/* BCM6348 */
-+/* */
-+/***********************************************************************/
-+#ifndef __BCM6348_MAP_H
-+#define __BCM6348_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+#include "6348_common.h"
-+#include "6348_intr.h"
-+
-+/* macro to convert logical data addresses to physical */
-+/* DMA hardware must see physical address */
-+#define LtoP( x ) ( (uint32)x & 0x1fffffff )
-+#define PtoL( x ) ( LtoP(x) | 0xa0000000 )
-+
-+/*
-+** Interrupt Controller
-+*/
-+typedef struct PerfControl {
-+ uint32 RevID; /* (00) */
-+ uint16 testControl; /* (04) */
-+ uint16 blkEnables; /* (06) */
-+
-+#define ADSL_CLK_EN 0x0001
-+#define MPI_CLK_EN 0x0002
-+#define DRAM_CLK_EN 0x0004
-+#define M2M_CLK_EN 0x0008
-+#define EMAC_CLK_EN 0x0010
-+#define SAR_CLK_EN 0x0020
-+#define USBS_CLK_EN 0x0040
-+#define USBH_CLK_EN 0x0100
-+#define SPI_CLK_EN 0x0200
-+
-+ uint32 pll_control; /* (08) */
-+#define CHIP_SOFT_RESET 0x00000001
-+#define MPI_CLK_50MHZ 0x00000000
-+#define MPI_CLK_40MHZ 0x00000008
-+#define MPI_CLK_33MHZ 0x00000010
-+#define MPI_CLK_25MHZ 0x00000018
-+#define MPI_CLK_MASK 0x00000018
-+
-+ uint32 IrqMask; /* (0c) */
-+ uint32 IrqStatus; /* (10) */
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 5
-+#define EI_CLEAR_SHFT 10
-+#define EI_MASK_SHFT 15
-+#define EI_INSENS_SHFT 20
-+#define EI_LEVEL_SHFT 25
-+
-+ uint32 unused[4]; /* (18) */
-+ uint32 BlockSoftReset; /* (28) */
-+#define BSR_SPI 0x00000001
-+#define BSR_EMAC 0x00000004
-+#define BSR_USBH 0x00000008
-+#define BSR_USBS 0x00000010
-+#define BSR_ADSL 0x00000020
-+#define BSR_DMAMEM 0x00000040
-+#define BSR_SAR 0x00000080
-+#define BSR_ACLC 0x00000100
-+#define BSR_ADSL_MIPS_PLL 0x00000400
-+#define BSR_ALL_BLOCKS \
-+ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
-+ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
-+ uint32 unused2[2]; /* (2c) */
-+ uint32 PllStrap; /* (34) */
-+#define PLL_N1_SHFT 20
-+#define PLL_N1_MASK (7<<PLL_N1_SHFT)
-+#define PLL_N2_SHFT 15
-+#define PLL_N2_MASK (0x1f<<PLL_N2_SHFT)
-+#define PLL_M1_REF_SHFT 12
-+#define PLL_M1_REF_MASK (7<<PLL_M1_REF_SHFT)
-+#define PLL_M2_REF_SHFT 9
-+#define PLL_M2_REF_MASK (7<<PLL_M2_REF_SHFT)
-+#define PLL_M1_CPU_SHFT 6
-+#define PLL_M1_CPU_MASK (7<<PLL_M1_CPU_SHFT)
-+#define PLL_M1_BUS_SHFT 3
-+#define PLL_M1_BUS_MASK (7<<PLL_M1_BUS_SHFT)
-+#define PLL_M2_BUS_SHFT 0
-+#define PLL_M2_BUS_MASK (7<<PLL_M2_BUS_SHFT)
-+} PerfControl;
-+
-+#define PERF ((volatile PerfControl * const) PERF_BASE)
-+
-+/*
-+** Bus Bridge Registers
-+*/
-+typedef struct BusBridge {
-+ uint16 status;
-+#define BB_BUSY 0x8000 /* posted operation in progress */
-+#define BB_RD_PND 0x4000 /* read pending */
-+#define BB_RD_CMPLT 0x2000 /* read complete */
-+#define BB_ERROR 0x1000 /* posted write error */
-+#define BB_TEA 0x0800 /* transfer aborted */
-+ uint16 abortTimeoutCnt; /* abort timeout value */
-+
-+ byte writePostEnable;
-+#define BB_POST_TIMR_EN 0x08 /* post writes to timer regs */
-+#define BB_POST_GPIO_EN 0x04 /* post writes to gpio regs */
-+#define BB_POST_INTC_EN 0x02 /* post writes to interrupt controller regs */
-+#define BB_POST_UART_EN 0x01 /* post writes to uart regs */
-+ byte unused1[5];
-+ uint16 postAddr; /* posted read address (lower half) */
-+ byte unused2[3];
-+ byte postData; /* posted read data */
-+} BusBridge;
-+
-+/* register offsets (needed for EBI master access) */
-+#define BB_STATUS 0
-+#define BB_ABORT_TO_CNT 2
-+#define BB_WR_POST_EN 4
-+#define BB_RD_POST_ADDR 10
-+#define BB_RD_POST_DATA 12
-+
-+#define BRIDGE *bridge ((volatile BusBridge * const) BB_BASE)
-+
-+/*
-+** Timer
-+*/
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+
-+/*
-+** UART
-+*/
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+ byte config;
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+ /* 4-LSBS represent STOP bits/char
-+ * in 1/8 bit-time intervals. Zero
-+ * represents 1/8 stop bit interval.
-+ * Fifteen represents 2 stop bits.
-+ */
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ /* 5-bit TimeoutCnt is in low bits of this register.
-+ * This count represents the number of characters
-+ * idle times before setting receive Irq when below threshold
-+ */
-+ uint32 baudword;
-+ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
-+ */
-+
-+ byte txf_levl; /* Read-only fifo depth */
-+ byte rxf_levl; /* Read-only fifo depth */
-+ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
-+ * RxThreshold. Irq can be asserted
-+ * when rx fifo> thresh, txfifo<thresh
-+ */
-+ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
-+ * if these bits are also enabled to GPIO_o
-+ */
-+#define DTREN 0x01
-+#define RTSEN 0x02
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
-+ * detect irq on rising AND falling
-+ * edges for corresponding GPIO_i
-+ * if enabled (edge insensitive)
-+ */
-+ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
-+ * 0 for negedge sense if
-+ * not configured for edge
-+ * insensitive (see above)
-+ * Lower 4 bits: Mask to enable change
-+ * detection IRQ for corresponding
-+ * GPIO_i
-+ */
-+ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
-+ * have changed (may set IRQ).
-+ * read automatically clears bit
-+ * Lower 4 bits are actual status
-+ */
-+
-+ uint16 intMask; /* Same Bit defs for Mask and status */
-+ uint16 intStatus;
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data; /* Write to TX, Read from RX */
-+ /* bits 11:8 are BRK,PAR,FRM errors */
-+
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+/*
-+** Gpio Controller
-+*/
-+
-+typedef struct GpioControl {
-+ uint32 GPIODir_high; /* bits 36:32 */
-+ uint32 GPIODir; /* bits 31:00 */
-+ uint32 GPIOio_high; /* bits 36:32 */
-+ uint32 GPIOio; /* bits 31:00 */
-+ uint32 LEDCtrl;
-+#define LED3_STROBE 0x08000000
-+#define LED2_STROBE 0x04000000
-+#define LED1_STROBE 0x02000000
-+#define LED0_STROBE 0x01000000
-+#define LED_TEST 0x00010000
-+#define LED3_DISABLE_LINK_ACT 0x00008000
-+#define LED2_DISABLE_LINK_ACT 0x00004000
-+#define LED1_DISABLE_LINK_ACT 0x00002000
-+#define LED0_DISABLE_LINK_ACT 0x00001000
-+#define LED_INTERVAL_SET_MASK 0x00000f00
-+#define LED_INTERVAL_SET_320MS 0x00000500
-+#define LED_INTERVAL_SET_160MS 0x00000400
-+#define LED_INTERVAL_SET_80MS 0x00000300
-+#define LED_INTERVAL_SET_40MS 0x00000200
-+#define LED_INTERVAL_SET_20MS 0x00000100
-+#define LED3_ON 0x00000080
-+#define LED2_ON 0x00000040
-+#define LED1_ON 0x00000020
-+#define LED0_ON 0x00000010
-+#define LED3_ENABLE 0x00000008
-+#define LED2_ENABLE 0x00000004
-+#define LED1_ENABLE 0x00000002
-+#define LED0_ENABLE 0x00000001
-+ uint32 SpiSlaveCfg;
-+#define SPI_SLAVE_RESET 0x00010000
-+#define SPI_RESTRICT 0x00000400
-+#define SPI_DELAY_DISABLE 0x00000200
-+#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
-+#define SPI_SER_ADDR_CFG_MASK 0x0000000c
-+#define SPI_MODE 0x00000001
-+ uint32 GPIOMode;
-+#define GROUP4_DIAG 0x00090000
-+#define GROUP4_UTOPIA 0x00080000
-+#define GROUP4_LEGACY_LED 0x00030000
-+#define GROUP4_MII_SNOOP 0x00020000
-+#define GROUP4_EXT_EPHY 0x00010000
-+#define GROUP3_DIAG 0x00009000
-+#define GROUP3_UTOPIA 0x00008000
-+#define GROUP3_EXT_MII 0x00007000
-+#define GROUP2_DIAG 0x00000900
-+#define GROUP2_PCI 0x00000500
-+#define GROUP1_DIAG 0x00000090
-+#define GROUP1_UTOPIA 0x00000080
-+#define GROUP1_SPI_UART 0x00000060
-+#define GROUP1_SPI_MASTER 0x00000060
-+#define GROUP1_MII_PCCARD 0x00000040
-+#define GROUP1_MII_SNOOP 0x00000020
-+#define GROUP1_EXT_EPHY 0x00000010
-+#define GROUP0_DIAG 0x00000009
-+#define GROUP0_EXT_MII 0x00000007
-+
-+} GpioControl;
-+
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+/* Number to mask conversion macro used for GPIODir and GPIOio */
-+#define GPIO_NUM_TOTAL_BITS_MASK 0x3f
-+#define GPIO_NUM_MAX_BITS_MASK 0x1f
-+#define GPIO_NUM_TO_MASK(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) < 32) ? (1 << ((X) & GPIO_NUM_MAX_BITS_MASK)) : (0) )
-+
-+/* Number to mask conversion macro used for GPIODir_high and GPIOio_high */
-+#define GPIO_NUM_MAX_BITS_MASK_HIGH 0x07
-+#define GPIO_NUM_TO_MASK_HIGH(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) >= 32) ? (1 << ((X-32) & GPIO_NUM_MAX_BITS_MASK_HIGH)) : (0) )
-+
-+
-+/*
-+** Spi Controller
-+*/
-+
-+typedef struct SpiControl {
-+ uint16 spiCmd; /* (0x0): SPI command */
-+#define SPI_CMD_NOOP 0
-+#define SPI_CMD_SOFT_RESET 1
-+#define SPI_CMD_HARD_RESET 2
-+#define SPI_CMD_START_IMMEDIATE 3
-+
-+#define SPI_CMD_COMMAND_SHIFT 0
-+#define SPI_CMD_DEVICE_ID_SHIFT 4
-+#define SPI_CMD_PREPEND_BYTE_CNT_SHIFT 8
-+#define SPI_CMD_ONE_BYTE_SHIFT 11
-+#define SPI_CMD_ONE_WIRE_SHIFT 12
-+#define SPI_DEV_ID_0 0
-+#define SPI_DEV_ID_1 1
-+#define SPI_DEV_ID_2 2
-+#define SPI_DEV_ID_3 3
-+
-+ byte spiIntStatus; /* (0x2): SPI interrupt status */
-+ byte spiMaskIntStatus; /* (0x3): SPI masked interrupt status */
-+
-+ byte spiIntMask; /* (0x4): SPI interrupt mask */
-+#define SPI_INTR_CMD_DONE 0x01
-+#define SPI_INTR_RX_OVERFLOW 0x02
-+#define SPI_INTR_INTR_TX_UNDERFLOW 0x04
-+#define SPI_INTR_TX_OVERFLOW 0x08
-+#define SPI_INTR_RX_UNDERFLOW 0x10
-+#define SPI_INTR_CLEAR_ALL 0x1f
-+
-+ byte spiStatus; /* (0x5): SPI status */
-+#define SPI_RX_EMPTY 0x02
-+#define SPI_CMD_BUSY 0x04
-+#define SPI_SERIAL_BUSY 0x08
-+
-+ byte spiClkCfg; /* (0x6): SPI clock configuration */
-+#define SPI_CLK_0_391MHZ 1
-+#define SPI_CLK_0_781MHZ 2 /* default */
-+#define SPI_CLK_1_563MHZ 3
-+#define SPI_CLK_3_125MHZ 4
-+#define SPI_CLK_6_250MHZ 5
-+#define SPI_CLK_12_50MHZ 6
-+#define SPI_CLK_MASK 0x07
-+#define SPI_SSOFFTIME_MASK 0x38
-+#define SPI_SSOFFTIME_SHIFT 3
-+#define SPI_BYTE_SWAP 0x80
-+
-+ byte spiFillByte; /* (0x7): SPI fill byte */
-+
-+ byte unused0;
-+ byte spiMsgTail; /* (0x9): msgtail */
-+ byte unused1;
-+ byte spiRxTail; /* (0xB): rxtail */
-+
-+ uint32 unused2[13]; /* (0x0c - 0x3c) reserved */
-+
-+ byte spiMsgCtl; /* (0x40) control byte */
-+#define FULL_DUPLEX_RW 0
-+#define HALF_DUPLEX_W 1
-+#define HALF_DUPLEX_R 2
-+#define SPI_MSG_TYPE_SHIFT 6
-+#define SPI_BYTE_CNT_SHIFT 0
-+ byte spiMsgData[63]; /* (0x41 - 0x7f) msg data */
-+ byte spiRxDataFifo[64]; /* (0x80 - 0xbf) rx data */
-+ byte unused3[64]; /* (0xc0 - 0xff) reserved */
-+} SpiControl;
-+
-+#define SPI ((volatile SpiControl * const) SPI_BASE)
-+
-+#define IUDMA_MAX_CHANNELS 16
-+
-+/*
-+** DMA Channel Configuration (1 .. 16)
-+*/
-+typedef struct DmaChannelCfg {
-+ uint32 cfg; /* (00) assorted configuration */
-+#define DMA_BURST_HALT 0x00000004 /* idle after finish current memory burst */
-+#define DMA_PKT_HALT 0x00000002 /* idle after an EOP flag is detected */
-+#define DMA_ENABLE 0x00000001 /* set to enable channel */
-+ uint32 intStat; /* (04) interrupts control and status */
-+ uint32 intMask; /* (08) interrupts mask */
-+#define DMA_BUFF_DONE 0x00000001 /* buffer done */
-+#define DMA_DONE 0x00000002 /* packet xfer complete */
-+#define DMA_NO_DESC 0x00000004 /* no valid descriptors */
-+ uint32 maxBurst; /* (0C) max burst length permitted */
-+} DmaChannelCfg;
-+
-+/*
-+** DMA State RAM (1 .. 16)
-+*/
-+typedef struct DmaStateRam {
-+ uint32 baseDescPtr; /* (00) descriptor ring start address */
-+ uint32 state_data; /* (04) state/bytes done/ring offset */
-+ uint32 desc_len_status; /* (08) buffer descriptor status and len */
-+ uint32 desc_base_bufptr; /* (0C) buffer descrpitor current processing */
-+} DmaStateRam;
-+
-+/*
-+** DMA Registers
-+*/
-+typedef struct DmaRegs {
-+#define DMA_MASTER_EN 0x00000001
-+#define DMA_FLOWC_CH1_EN 0x00000002
-+#define DMA_FLOWC_CH3_EN 0x00000004
-+#define DMA_NUM_CHS_MASK 0x0f000000
-+#define DMA_NUM_CHS_SHIFT 24
-+#define DMA_FLOWCTL_MASK 0x30000000
-+#define DMA_FLOWCTL_CH1 0x10000000
-+#define DMA_FLOWCTL_CH3 0x20000000
-+#define DMA_FLOWCTL_SHIFT 28
-+ uint32 controller_cfg; /* (00) controller configuration */
-+
-+ // Flow control Ch1
-+ uint32 flowctl_ch1_thresh_lo; /* (04) EMAC1 RX DMA channel */
-+ uint32 flowctl_ch1_thresh_hi; /* (08) EMAC1 RX DMA channel */
-+ uint32 flowctl_ch1_alloc; /* (0C) EMAC1 RX DMA channel */
-+#define DMA_BUF_ALLOC_FORCE 0x80000000
-+
-+ // Flow control Ch3
-+ uint32 flowctl_ch3_thresh_lo; /* (10) EMAC2 RX DMA channel */
-+ uint32 flowctl_ch3_thresh_hi; /* (14) EMAC2 RX DMA channel */
-+ uint32 flowctl_ch3_alloc; /* (18) EMAC2 RX DMA channel */
-+
-+ // Unused words
-+ uint32 resv[57];
-+
-+ // Per channel registers/state ram
-+ DmaChannelCfg chcfg[IUDMA_MAX_CHANNELS]; /* (100) Channel configuration */
-+ union {
-+ DmaStateRam s[IUDMA_MAX_CHANNELS];
-+ uint32 u32[4 * IUDMA_MAX_CHANNELS];
-+ } stram; /* (200) state ram */
-+} DmaRegs;
-+
-+/*
-+** DMA Buffer
-+*/
-+typedef struct DmaDesc {
-+ uint16 length; /* in bytes of data in buffer */
-+#define DMA_DESC_USEFPM 0x8000
-+#define DMA_DESC_MULTICAST 0x4000
-+#define DMA_DESC_BUFLENGTH 0x0fff
-+ uint16 status; /* buffer status */
-+#define DMA_OWN 0x8000 /* cleared by DMA, set by SW */
-+#define DMA_EOP 0x4000 /* last buffer in packet */
-+#define DMA_SOP 0x2000 /* first buffer in packet */
-+#define DMA_WRAP 0x1000 /* */
-+#define DMA_APPEND_CRC 0x0100
-+
-+/* EMAC Descriptor Status definitions */
-+#define EMAC_MISS 0x0080 /* framed address recognition failed (promiscuous) */
-+#define EMAC_BRDCAST 0x0040 /* DA is Broadcast */
-+#define EMAC_MULT 0x0020 /* DA is multicast */
-+#define EMAC_LG 0x0010 /* frame length > RX_LENGTH register value */
-+#define EMAC_NO 0x0008 /* Non-Octet aligned */
-+#define EMAC_RXER 0x0004 /* RX_ERR on MII while RX_DV assereted */
-+#define EMAC_CRC_ERROR 0x0002 /* CRC error */
-+#define EMAC_OV 0x0001 /* Overflow */
-+
-+/* HDLC Descriptor Status definitions */
-+#define DMA_HDLC_TX_ABORT 0x0100
-+#define DMA_HDLC_RX_OVERRUN 0x4000
-+#define DMA_HDLC_RX_TOO_LONG 0x2000
-+#define DMA_HDLC_RX_CRC_OK 0x1000
-+#define DMA_HDLC_RX_ABORT 0x0100
-+
-+ uint32 address; /* address of data */
-+} DmaDesc;
-+
-+/*
-+** Sdram Controller
-+*/
-+typedef struct SdramControllerRegs {
-+ uint16 unused1;
-+ uint16 initControl; /* 02 */
-+#define SD_POWER_DOWN 0x200 /* put sdram into power down */
-+#define SD_SELF_REFRESH 0x100 /* enable self refresh mode */
-+#define SD_SOFT_RESET 0x080 /* soft reset all sdram controller regs */
-+#define SD_EDO_SELECT 0x040 /* select EDO mode */
-+#define SD_EDO_WAIT_STATE 0x020 /* add an EDO wait state */
-+#define SD_8MEG 0x010 /* map sdram to 8 megs */
-+#define SD_MASTER_ENABLE 0x008 /* enable accesses to external sdram */
-+#define SD_MRS 0x004 /* generate a mode register select cycle */
-+#define SD_PRECHARGE 0x002 /* generate a precharge cycle */
-+#define SD_CBR 0x001 /* generate a refresh cycle */
-+ uint8 unused2[3];
-+ uint8 config; /* 07 */
-+#define SD_FAST_MEM 0x04 /* 1=CAS latency of 2, 0 = CAS latency of 3 */
-+#define SD_BURST_LEN 0x03 /* set burst length */
-+#define SD_BURST_FULL_PAGE 0x00 /* .. full page */
-+#define SD_BURST_8 0x01 /* .. 8 words */
-+#define SD_BURST_4 0x02 /* .. 4 words */
-+#define SD_BURST_2 0x03 /* .. 2 words */
-+ uint16 unused3;
-+ uint16 refreshControl; /* 0a */
-+#define SD_REFRESH_ENABLE 0x8000 /* refresh enable */
-+#define SD_REFRESH_PERIOD 0x00ff /* refresh period (16 x n x clock_period) */
-+
-+ uint32 memoryBase; /* 0c */
-+#define SD_MEMBASE_MASK 0xffffe000 /* base address mask */
-+#define SD_MEMSIZE_8MEG 0x00000001 /* memory is 8 meg */
-+#define SD_MEMSIZE_2MEG 0x00000001 /* memory is 2 meg */
-+
-+} SdramControllerRegs;
-+
-+/*
-+** External Bus Interface
-+*/
-+typedef struct EbiChipSelect {
-+ uint32 base; /* base address in upper 24 bits */
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+ uint32 config;
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_WREN 0x00000020 /* enable posted writes */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert something,
-+ ** don't know what yet */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. use fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+} EbiChipSelect;
-+
-+typedef struct MpiRegisters {
-+ EbiChipSelect cs[7]; /* size chip select configuration */
-+#define EBI_CS0_BASE 0
-+#define EBI_CS1_BASE 1
-+#define EBI_CS2_BASE 2
-+#define EBI_CS3_BASE 3
-+#define PCMCIA_COMMON_BASE 4
-+#define PCMCIA_ATTRIBUTE_BASE 5
-+#define PCMCIA_IO_BASE 6
-+ uint32 unused0[2]; /* reserved */
-+ uint32 ebi_control; /* ebi control */
-+ uint32 unused1[4]; /* reserved */
-+#define EBI_ACCESS_TIMEOUT 0x000007FF
-+ uint32 pcmcia_cntl1; /* pcmcia control 1 */
-+#define PCCARD_CARD_RESET 0x00040000
-+#define CARDBUS_ENABLE 0x00008000
-+#define PCMCIA_ENABLE 0x00004000
-+#define PCMCIA_GPIO_ENABLE 0x00002000
-+#define CARDBUS_IDSEL 0x00001F00
-+#define VS2_OEN 0x00000080
-+#define VS1_OEN 0x00000040
-+#define VS2_OUT 0x00000020
-+#define VS1_OUT 0x00000010
-+#define VS2_IN 0x00000008
-+#define VS1_IN 0x00000004
-+#define CD2_IN 0x00000002
-+#define CD1_IN 0x00000001
-+#define VS_MASK 0x0000000C
-+#define CD_MASK 0x00000003
-+ uint32 unused2; /* reserved */
-+ uint32 pcmcia_cntl2; /* pcmcia control 2 */
-+#define PCMCIA_BYTESWAP_DIS 0x00000002
-+#define PCMCIA_HALFWORD_EN 0x00000001
-+ uint32 unused3[40]; /* reserved */
-+
-+ uint32 sp0range; /* PCI to internal system bus address space */
-+#define ADDR_SPACE_MASK 0xFFFF0000
-+ uint32 sp0remap;
-+ uint32 sp0cfg;
-+ uint32 sp1range;
-+ uint32 sp1remap;
-+ uint32 sp1cfg;
-+
-+ uint32 EndianCfg;
-+
-+ uint32 l2pcfgctl; /* internal system bus to PCI IO/Cfg control */
-+#define DIR_CFG_SEL 0x80000000 /* change from PCI I/O access to PCI config access */
-+#define DIR_CFG_USEREG 0x40000000 /* use this register info for PCI configuration access */
-+#define DEVICE_NUMBER 0x00007C00 /* device number for the PCI configuration access */
-+#define FUNC_NUMBER 0x00000300 /* function number for the PCI configuration access */
-+#define REG_NUMBER 0x000000FC /* register number for the PCI configuration access */
-+#define CONFIG_TYPE 0x00000003 /* configuration type for the PCI configuration access */
-+
-+ uint32 l2pmrange1; /* internal system bus to PCI memory space */
-+#define PCI_SIZE_64K 0xFFFF0000
-+#define PCI_SIZE_128K 0xFFFE0000
-+#define PCI_SIZE_256K 0xFFFC0000
-+#define PCI_SIZE_512K 0xFFF80000
-+#define PCI_SIZE_1M 0xFFF00000
-+#define PCI_SIZE_2M 0xFFE00000
-+#define PCI_SIZE_4M 0xFFC00000
-+#define PCI_SIZE_8M 0xFF800000
-+#define PCI_SIZE_16M 0xFF000000
-+ uint32 l2pmbase1; /* kseg0 or kseg1 address & 0x1FFFFFFF */
-+ uint32 l2pmremap1;
-+#define CARDBUS_MEM 0x00000004
-+#define MEM_WINDOW_EN 0x00000001
-+ uint32 l2pmrange2;
-+ uint32 l2pmbase2;
-+ uint32 l2pmremap2;
-+ uint32 l2piorange; /* internal system bus to PCI I/O space */
-+ uint32 l2piobase;
-+ uint32 l2pioremap;
-+
-+ uint32 pcimodesel;
-+#define PCI2_INT_BUS_RD_PREFECH 0x000000F0
-+#define PCI_BAR2_NOSWAP 0x00000002 /* BAR at offset 0x20 */
-+#define PCI_BAR1_NOSWAP 0x00000001 /* BAR at affset 0x1c */
-+
-+ uint32 pciintstat; /* PCI interrupt mask/status */
-+#define MAILBOX1_SENT 0x08
-+#define MAILBOX0_SENT 0x04
-+#define MAILBOX1_MSG_RCV 0x02
-+#define MAILBOX0_MSG_RCV 0x01
-+ uint32 locbuscntrl; /* internal system bus control */
-+#define DIR_U2P_NOSWAP 0x00000002
-+#define EN_PCI_GPIO 0x00000001
-+ uint32 locintstat; /* internal system bus interrupt mask/status */
-+#define CSERR 0x0200
-+#define SERR 0x0100
-+#define EXT_PCI_INT 0x0080
-+#define DIR_FAILED 0x0040
-+#define DIR_COMPLETE 0x0020
-+#define PCI_CFG 0x0010
-+ uint32 unused4[7];
-+
-+ uint32 mailbox0;
-+ uint32 mailbox1;
-+
-+ uint32 pcicfgcntrl; /* internal system bus PCI configuration control */
-+#define PCI_CFG_REG_WRITE_EN 0x00000080
-+#define PCI_CFG_ADDR 0x0000003C
-+ uint32 pcicfgdata; /* internal system bus PCI configuration data */
-+
-+ uint32 locch2ctl; /* PCI to interrnal system bus DMA (downstream) local control */
-+#define MPI_DMA_HALT 0x00000008 /* idle after finish current memory burst */
-+#define MPI_DMA_PKT_HALT 0x00000004 /* idle after an EOP flag is detected */
-+#define MPI_DMA_STALL 0x00000002 /* idle after an EOP flag is detected */
-+#define MPI_DMA_ENABLE 0x00000001 /* set to enable channel */
-+ uint32 locch2intStat;
-+#define MPI_DMA_NO_DESC 0x00000004 /* no valid descriptors */
-+#define MPI_DMA_DONE 0x00000002 /* packet xfer complete */
-+#define MPI_DMA_BUFF_DONE 0x00000001 /* buffer done */
-+ uint32 locch2intMask;
-+ uint32 unused5;
-+ uint32 locch2descaddr;
-+ uint32 locch2status1;
-+#define LOCAL_DESC_STATE 0xE0000000
-+#define PCI_DESC_STATE 0x1C000000
-+#define BYTE_DONE 0x03FFC000
-+#define RING_ADDR 0x00003FFF
-+ uint32 locch2status2;
-+#define BUFPTR_OFFSET 0x1FFF0000
-+#define PCI_MASTER_STATE 0x000000C0
-+#define LOC_MASTER_STATE 0x00000038
-+#define CONTROL_STATE 0x00000007
-+ uint32 unused6;
-+
-+ uint32 locch1Ctl; /*internal system bus to PCI DMA (upstream) local control */
-+#define DMA_U2P_LE 0x00000200 /* local bus is little endian */
-+#define DMA_U2P_NOSWAP 0x00000100 /* lccal bus is little endian but no data swapped */
-+ uint32 locch1intstat;
-+ uint32 locch1intmask;
-+ uint32 unused7;
-+ uint32 locch1descaddr;
-+ uint32 locch1status1;
-+ uint32 locch1status2;
-+ uint32 unused8;
-+
-+ uint32 pcich1ctl; /* internal system bus to PCI DMA PCI control */
-+ uint32 pcich1intstat;
-+ uint32 pcich1intmask;
-+ uint32 pcich1descaddr;
-+ uint32 pcich1status1;
-+ uint32 pcich1status2;
-+
-+ uint32 pcich2Ctl; /* PCI to internal system bus DMA PCI control */
-+ uint32 pcich2intstat;
-+ uint32 pcich2intmask;
-+ uint32 pcich2descaddr;
-+ uint32 pcich2status1;
-+ uint32 pcich2status2;
-+
-+ uint32 perm_id; /* permanent device and vendor id */
-+ uint32 perm_rev; /* permanent revision id */
-+} MpiRegisters;
-+
-+#define MPI ((volatile MpiRegisters * const) MPI_BASE)
-+
-+/* PCI configuration address space start offset 0x40 */
-+#define BRCM_PCI_CONFIG_TIMER 0x40
-+#define BRCM_PCI_CONFIG_TIMER_RETRY_MASK 0x0000FF00
-+#define BRCM_PCI_CONFIG_TIMER_TRDY_MASK 0x000000FF
-+
-+/*
-+** EMAC transmit MIB counters
-+*/
-+typedef struct EmacTxMib {
-+ uint32 tx_good_octets; /* (200) good byte count */
-+ uint32 tx_good_pkts; /* (204) good pkt count */
-+ uint32 tx_octets; /* (208) good and bad byte count */
-+ uint32 tx_pkts; /* (20c) good and bad pkt count */
-+ uint32 tx_broadcasts_pkts; /* (210) good broadcast packets */
-+ uint32 tx_multicasts_pkts; /* (214) good mulitcast packets */
-+ uint32 tx_len_64; /* (218) RMON tx pkt size buckets */
-+ uint32 tx_len_65_to_127; /* (21c) */
-+ uint32 tx_len_128_to_255; /* (220) */
-+ uint32 tx_len_256_to_511; /* (224) */
-+ uint32 tx_len_512_to_1023; /* (228) */
-+ uint32 tx_len_1024_to_max; /* (22c) */
-+ uint32 tx_jabber_pkts; /* (230) > 1518 with bad crc */
-+ uint32 tx_oversize_pkts; /* (234) > 1518 with good crc */
-+ uint32 tx_fragment_pkts; /* (238) < 63 with bad crc */
-+ uint32 tx_underruns; /* (23c) fifo underrun */
-+ uint32 tx_total_cols; /* (240) total collisions in all tx pkts */
-+ uint32 tx_single_cols; /* (244) tx pkts with single collisions */
-+ uint32 tx_multiple_cols; /* (248) tx pkts with multiple collisions */
-+ uint32 tx_excessive_cols; /* (24c) tx pkts with excessive cols */
-+ uint32 tx_late_cols; /* (250) tx pkts with late cols */
-+ uint32 tx_defered; /* (254) tx pkts deferred */
-+ uint32 tx_carrier_lost; /* (258) tx pkts with CRS lost */
-+ uint32 tx_pause_pkts; /* (25c) tx pause pkts sent */
-+#define NumEmacTxMibVars 24
-+} EmacTxMib;
-+
-+/*
-+** EMAC receive MIB counters
-+*/
-+typedef struct EmacRxMib {
-+ uint32 rx_good_octets; /* (280) good byte count */
-+ uint32 rx_good_pkts; /* (284) good pkt count */
-+ uint32 rx_octets; /* (288) good and bad byte count */
-+ uint32 rx_pkts; /* (28c) good and bad pkt count */
-+ uint32 rx_broadcasts_pkts; /* (290) good broadcast packets */
-+ uint32 rx_multicasts_pkts; /* (294) good mulitcast packets */
-+ uint32 rx_len_64; /* (298) RMON rx pkt size buckets */
-+ uint32 rx_len_65_to_127; /* (29c) */
-+ uint32 rx_len_128_to_255; /* (2a0) */
-+ uint32 rx_len_256_to_511; /* (2a4) */
-+ uint32 rx_len_512_to_1023; /* (2a8) */
-+ uint32 rx_len_1024_to_max; /* (2ac) */
-+ uint32 rx_jabber_pkts; /* (2b0) > 1518 with bad crc */
-+ uint32 rx_oversize_pkts; /* (2b4) > 1518 with good crc */
-+ uint32 rx_fragment_pkts; /* (2b8) < 63 with bad crc */
-+ uint32 rx_missed_pkts; /* (2bc) missed packets */
-+ uint32 rx_crc_align_errs; /* (2c0) both or either */
-+ uint32 rx_undersize; /* (2c4) < 63 with good crc */
-+ uint32 rx_crc_errs; /* (2c8) crc errors (only) */
-+ uint32 rx_align_errs; /* (2cc) alignment errors (only) */
-+ uint32 rx_symbol_errs; /* (2d0) pkts with RXERR assertions (symbol errs) */
-+ uint32 rx_pause_pkts; /* (2d4) MAC control, PAUSE */
-+ uint32 rx_nonpause_pkts; /* (2d8) MAC control, not PAUSE */
-+#define NumEmacRxMibVars 23
-+} EmacRxMib;
-+
-+typedef struct EmacRegisters {
-+ uint32 rxControl; /* (00) receive control */
-+#define EMAC_PM_REJ 0x80 /* - reject DA match in PMx regs */
-+#define EMAC_UNIFLOW 0x40 /* - accept cam match fc */
-+#define EMAC_FC_EN 0x20 /* - enable flow control */
-+#define EMAC_LOOPBACK 0x10 /* - loopback */
-+#define EMAC_PROM 0x08 /* - promiscuous */
-+#define EMAC_RDT 0x04 /* - ignore transmissions */
-+#define EMAC_ALL_MCAST 0x02 /* - ignore transmissions */
-+#define EMAC_NO_BCAST 0x01 /* - ignore transmissions */
-+
-+
-+ uint32 rxMaxLength; /* (04) receive max length */
-+ uint32 txMaxLength; /* (08) transmit max length */
-+ uint32 unused1[1];
-+ uint32 mdioFreq; /* (10) mdio frequency */
-+#define EMAC_MII_PRE_EN 0x00000080 /* prepend preamble sequence */
-+#define EMAC_MDIO_PRE 0x00000080 /* - enable MDIO preamble */
-+#define EMAC_MDC_FREQ 0x0000007f /* - mdio frequency */
-+
-+ uint32 mdioData; /* (14) mdio data */
-+#define MDIO_WR 0x50020000 /* - write framing */
-+#define MDIO_RD 0x60020000 /* - read framing */
-+#define MDIO_PMD_SHIFT 23
-+#define MDIO_REG_SHIFT 18
-+
-+ uint32 intMask; /* (18) int mask */
-+ uint32 intStatus; /* (1c) int status */
-+#define EMAC_FLOW_INT 0x04 /* - flow control event */
-+#define EMAC_MIB_INT 0x02 /* - mib event */
-+#define EMAC_MDIO_INT 0x01 /* - mdio event */
-+
-+ uint32 unused2[3];
-+ uint32 config; /* (2c) config */
-+#define EMAC_ENABLE 0x001 /* - enable emac */
-+#define EMAC_DISABLE 0x002 /* - disable emac */
-+#define EMAC_SOFT_RST 0x004 /* - soft reset */
-+#define EMAC_SOFT_RESET 0x004 /* - emac soft reset */
-+#define EMAC_EXT_PHY 0x008 /* - external PHY select */
-+
-+ uint32 txControl; /* (30) transmit control */
-+#define EMAC_FD 0x001 /* - full duplex */
-+#define EMAC_FLOWMODE 0x002 /* - flow mode */
-+#define EMAC_NOBKOFF 0x004 /* - no backoff in */
-+#define EMAC_SMALLSLT 0x008 /* - small slot time */
-+
-+ uint32 txThreshold; /* (34) transmit threshold */
-+ uint32 mibControl; /* (38) mib control */
-+#define EMAC_NO_CLEAR 0x001 /* don't clear on read */
-+
-+ uint32 unused3[7];
-+
-+ uint32 pm0DataLo; /* (58) perfect match 0 data lo */
-+ uint32 pm0DataHi; /* (5C) perfect match 0 data hi (15:0) */
-+ uint32 pm1DataLo; /* (60) perfect match 1 data lo */
-+ uint32 pm1DataHi; /* (64) perfect match 1 data hi (15:0) */
-+ uint32 pm2DataLo; /* (68) perfect match 2 data lo */
-+ uint32 pm2DataHi; /* (6C) perfect match 2 data hi (15:0) */
-+ uint32 pm3DataLo; /* (70) perfect match 3 data lo */
-+ uint32 pm3DataHi; /* (74) perfect match 3 data hi (15:0) */
-+#define EMAC_CAM_V 0x10000 /* - cam index */
-+#define EMAC_CAM_VALID 0x00010000
-+
-+ uint32 unused4[98]; /* (78-1fc) */
-+
-+ EmacTxMib tx_mib; /* (200) emac tx mib */
-+ uint32 unused5[8]; /* (260-27c) */
-+
-+ EmacRxMib rx_mib; /* (280) rx mib */
-+
-+} EmacRegisters;
-+
-+/* register offsets for subrouting access */
-+#define EMAC_RX_CONTROL 0x00
-+#define EMAC_RX_MAX_LENGTH 0x04
-+#define EMAC_TX_MAC_LENGTH 0x08
-+#define EMAC_MDIO_FREQ 0x10
-+#define EMAC_MDIO_DATA 0x14
-+#define EMAC_INT_MASK 0x18
-+#define EMAC_INT_STATUS 0x1C
-+#define EMAC_CAM_DATA_LO 0x20
-+#define EMAC_CAM_DATA_HI 0x24
-+#define EMAC_CAM_CONTROL 0x28
-+#define EMAC_CONTROL 0x2C
-+#define EMAC_TX_CONTROL 0x30
-+#define EMAC_TX_THRESHOLD 0x34
-+#define EMAC_MIB_CONTROL 0x38
-+
-+
-+#define EMAC1 ((volatile EmacRegisters * const) EMAC1_BASE)
-+#define EMAC2 ((volatile EmacRegisters * const) EMAC2_BASE)
-+
-+/*
-+** USB Registers
-+*/
-+typedef struct UsbRegisters {
-+ byte inttf_setting;
-+ byte current_config;
-+ uint16 status_frameNum;
-+#define USB_LINK 0x2000
-+#define USB_BUS_RESET 0x1000
-+#define USB_SUSPENDED 0x0800
-+ byte unused1;
-+ byte endpt_prnt;
-+ byte endpt_dirn;
-+ byte endpt_status;
-+#define USB_ENDPOINT_0 0x01
-+#define USB_ENDPOINT_1 0x02
-+#define USB_ENDPOINT_2 0x04
-+#define USB_ENDPOINT_3 0x08
-+#define USB_ENDPOINT_4 0x10
-+#define USB_ENDPOINT_5 0x20
-+#define USB_ENDPOINT_6 0x40
-+#define USB_ENDPOINT_7 0x80
-+ uint32 unused2;
-+ byte conf_mem_ctl;
-+#define USB_CONF_MEM_RD 0x80
-+#define USB_CONF_MEM_RDY 0x40
-+ byte unused2a;
-+ byte conf_mem_read_address;
-+ byte conf_mem_write_address;
-+
-+ byte unused3;
-+ byte dev_req_bytesel;
-+ uint16 ext_dev_data;
-+
-+ byte unused4;
-+ byte clr_fifo;
-+ byte endpt_stall_reset; // use same endpoint #'s from above
-+ byte usb_cntl;
-+#define USB_FORCE_ERR 0x20
-+#define USB_SOFT_RESET 0x10
-+#define USB_RESUME 0x08
-+#define USB_COMMAND_ERR 0x04
-+#define USB_COMMAND_OVER 0x02
-+ byte irq_addr;
-+ byte iso_out_in_addr;
-+ byte blk_out_in_addr;
-+ byte cntl_addr;
-+ uint32 unusedx[2];
-+ uint32 tx_ram_write_port;
-+ uint32 fifo_status; // (see bcm6348 data sheet for definition)
-+
-+ uint32 irq_status;
-+ uint32 irq_mask;
-+#define USB_NEW_CONFIG 0x00000001
-+#define USB_SETUP_COMMAND_RECV 0x00000002 // non-standard setup cmd rcvd
-+#define USB_OUT_FIFO_OV 0x00000004
-+#define USB_RESET_RECV 0x00000008
-+#define USB_SUSPEND_RECV 0x00000010
-+#define USB_FIFO_REWIND 0x00000020
-+#define USB_RX_BULK_FIFO_DATA_AVAIL 0x00000040
-+#define USB_RX_ISO_FIFO_DATA_AVAIL 0x00000080
-+#define USB_LINK_CHANGE 0x00010000
-+ uint32 endpt_cntl;
-+#define USB_R_WK_EN 0x0100
-+#define USB_TX_EOP 0x0200
-+#define USB_TX_CNTL_DMA_EN 0x0400
-+#define USB_TX_BULK_DMA_EN 0x0800
-+#define USB_TX_ISO_DMA_EN 0x1000
-+#define USB_RX_CNTL_DMA_EN 0x2000
-+#define USB_RX_BULK_DMA_EN 0x4800
-+#define USB_RX_ISO_DMA_EN 0x8000
-+ uint32 rx_status_read_port;
-+ uint32 confmem_read_port;
-+ uint32 confmem_write_port;
-+ uint32 fifo_ovf_count;
-+ uint32 fifo_rewind_cnt;
-+ uint32 terminal_count;
-+} UsbRegisters;
-+
-+#define USB ((volatile UsbRegisters * const) USB_CTL_BASE)
-+
-+/*
-+** ADSL core Registers
-+*/
-+
-+#define _PADLINE(line) pad ## line
-+#define _XSTR(line) _PADLINE(line)
-+#define PAD _XSTR(__LINE__)
-+
-+typedef struct AdslRegisters {
-+ uint32 core_control;
-+#define ADSL_RESET 0x01
-+
-+ uint32 core_status;
-+#define ADSL_HOST_MSG 0x01
-+
-+ uint32 PAD;
-+ uint32 bist_status;
-+ uint32 PAD[4];
-+ uint32 int_status_i; /* 0x20 */
-+ uint32 int_mask_i;
-+ uint32 int_status_f;
-+ uint32 int_mask_f;
-+#define ADSL_INT_HOST_MSG 0x00000020
-+#define ADSL_INT_DESC_ERR 0x00000400
-+#define ADSL_INT_DATA_ERR 0x00000800
-+#define ADSL_INT_DESC_PROTO_ERR 0x00001000
-+#define ADSL_INT_RCV_DESC_UF 0x00002000
-+#define ADSL_INT_RCV_FIFO_OF 0x00004000
-+#define ADSL_INT_XMT_FIFO_UF 0x00008000
-+#define ADSL_INT_RCV 0x00010000
-+#define ADSL_INT_XMT 0x01000000
-+
-+ uint32 PAD[116];
-+
-+ uint32 xmtcontrol_intr; /* 0x200 */
-+#define ADSL_DMA_XMT_EN 0x00000001
-+#define ADSL_DMA_XMT_LE 0x00000004
-+ uint32 xmtaddr_intr;
-+#define ADSL_DMA_ADDR_MASK 0xFFFFF000
-+ uint32 xmtptr_intr;
-+#define ADSL_DMA_LAST_DESC_MASK 0x00000FFF
-+ uint32 xmtstatus_intr;
-+#define ADSL_DMA_CURR_DESC_MASK 0x00000FFF
-+#define ADSL_DMA_XMT_STATE_MASK 0x0000F000
-+#define ADSL_DMA_XMT_STATE_DIS 0x00000000
-+#define ADSL_DMA_XMT_STATE_ACT 0x00001000
-+#define ADSL_DMA_XMT_STATE_IDLE 0x00002000
-+#define ADSL_DMA_XMT_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_XMT_ERR_MASK 0x000F0000
-+#define ADSL_DMA_XMT_ERR_NONE 0x00000000
-+#define ADSL_DMA_XMT_ERR_DPE 0x00010000
-+#define ADSL_DMA_XMT_ERR_FIFO 0x00020000
-+#define ADSL_DMA_XMT_ERR_DTE 0x00030000
-+#define ADSL_DMA_XMT_ERR_DRE 0x00040000
-+
-+ uint32 rcvcontrol_intr;
-+#define ADSL_DMA_RCV_EN 0x00000001
-+#define ADSL_DMA_RCV_FO 0x000000FE
-+ uint32 rcvaddr_intr;
-+ uint32 rcvptr_intr;
-+ uint32 rcvstatus_intr;
-+#define ADSL_DMA_RCV_STATE_MASK 0x0000F000
-+#define ADSL_DMA_RCV_STATE_DIS 0x00000000
-+#define ADSL_DMA_RCV_STATE_ACT 0x00001000
-+#define ADSL_DMA_RCV_STATE_IDLE 0x00002000
-+#define ADSL_DMA_RCV_STATE_STOP 0x00003000
-+
-+#define ADSL_DMA_RCV_ERR_MASK 0x000F0000
-+#define ADSL_DMA_RCV_ERR_NONE 0x00000000
-+#define ADSL_DMA_RCV_ERR_DPE 0x00010000
-+#define ADSL_DMA_RCV_ERR_FIFO 0x00020000
-+#define ADSL_DMA_RCV_ERR_DTE 0x00030000
-+#define ADSL_DMA_RCV_ERR_DRE 0x00040000
-+
-+ uint32 xmtcontrol_fast;
-+ uint32 xmtaddr_fast;
-+ uint32 xmtptr_fast;
-+ uint32 xmtstatus_fast;
-+ uint32 rcvcontrol_fast;
-+ uint32 rcvaddr_fast;
-+ uint32 rcvptr_fast;
-+ uint32 rcvstatus_fast;
-+ uint32 PAD[48];
-+
-+ uint32 host_message; /* 0x300 */
-+ uint32 PAD[805];
-+ uint32 core_reset;
-+ uint32 core_error;
-+ uint32 core_revision;
-+
-+#define ADSL_CORE_REV 0x0000000F
-+#define ADSL_CORE_TYPE 0x0000FFF0
-+} AdslRegisters;
-+
-+#define ADSL ((volatile AdslRegisters * const) ADSL_BASE)
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/AdslMibDef.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/AdslMibDef.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/AdslMibDef.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/AdslMibDef.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,712 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/****************************************************************************
-+ *
-+ * AdslMibOid.h
-+ *
-+ * Description:
-+ * SNMP object identifiers for ADSL MIB and other related MIBs
-+ *
-+ * Copyright (c) 1993-1998 AltoCom, Inc. All rights reserved.
-+ * Authors: Ilya Stomakhin
-+ *
-+ * $Revision: 1.17 $
-+ *
-+ * $Id: AdslMibDef.h,v 1.17 2004/07/27 19:24:40 ilyas Exp $
-+ *
-+ * $Log: AdslMibDef.h,v $
-+ * Revision 1.17 2004/07/27 19:24:40 ilyas
-+ * Added AnnexM configuration option
-+ *
-+ * Revision 1.16 2004/06/04 18:56:01 ilyas
-+ * Added counter for ADSL2 framing and performance
-+ *
-+ * Revision 1.15 2004/05/25 16:15:04 ilyas
-+ * Added ADSL2 framing status
-+ *
-+ * Revision 1.14 2004/03/31 19:09:48 ilyas
-+ * Added ADSL2+ modulation control
-+ *
-+ * Revision 1.13 2004/03/03 20:14:05 ilyas
-+ * Merged changes for ADSL2+ from ADSL driver
-+ *
-+ * Revision 1.12 2003/10/17 21:02:12 ilyas
-+ * Added more data for ADSL2
-+ *
-+ * Revision 1.11 2003/10/14 00:55:27 ilyas
-+ * Added UAS, LOSS, SES error seconds counters.
-+ * Support for 512 tones (AnnexI)
-+ *
-+ * Revision 1.10 2003/09/29 18:39:51 ilyas
-+ * Added new definitions for AnnexI
-+ *
-+ * Revision 1.9 2003/07/18 19:14:34 ilyas
-+ * Merged with ADSL driver
-+ *
-+ * Revision 1.8 2003/07/08 18:34:16 ilyas
-+ * Added fields to adsl configuration structure
-+ *
-+ * Revision 1.7 2003/03/25 00:07:00 ilyas
-+ * Added "long" BERT supprt
-+ *
-+ * Revision 1.6 2003/02/27 07:10:52 ilyas
-+ * Added more configuration and status parameters (for EFNT)
-+ *
-+ * Revision 1.5 2003/01/23 20:29:37 ilyas
-+ * Added structure for ADSL PHY configuration command
-+ *
-+ * Revision 1.4 2002/11/13 21:32:49 ilyas
-+ * Added adjustK support for Centillium non-standard framing mode
-+ *
-+ * Revision 1.3 2002/10/31 01:35:50 ilyas
-+ * Fixed size of K for S=1/2
-+ *
-+ * Revision 1.2 2002/10/05 03:28:31 ilyas
-+ * Added extra definitions for Linux and VxWorks drivers.
-+ * Added definitions for SelfTest support
-+ *
-+ * Revision 1.1 2002/07/20 00:51:41 ilyas
-+ * Merged witchanges made for VxWorks/Linux driver.
-+ *
-+ * Revision 1.1 2001/12/21 22:39:30 ilyas
-+ * Added support for ADSL MIB data objects (RFC2662)
-+ *
-+ *
-+ *****************************************************************************/
-+
-+#ifndef AdslMibDefHeader
-+#define AdslMibDefHeader
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+/*
-+**
-+** ADSL configuration parameters
-+**
-+*/
-+
-+#define kAdslCfgModMask (0x00000007 | 0x0000F000)
-+#define kAdslCfgModAny 0x00000000
-+
-+#define kAdslCfgModGdmtOnly 0x00000001
-+#define kAdslCfgModGliteOnly 0x00000002
-+#define kAdslCfgModT1413Only 0x00000004
-+#define kAdslCfgModAnnexIOnly 0x00000004
-+#define kAdslCfgModAdsl2Only 0x00001000
-+#define kAdslCfgModAdsl2pOnly 0x00002000
-+
-+#define kAdslCfgBitmapMask 0x00000018
-+#define kAdslCfgDBM 0x00000000
-+#define kAdslCfgFBM 0x00000008
-+#define kAdslCfgFBMSoL 0x00000010
-+
-+#define kAdslCfgLinePairMask 0x00000020
-+#define kAdslCfgLineInnerPair 0x00000000
-+#define kAdslCfgLineOuterPair 0x00000020
-+
-+#define kAdslCfgCentilliumCRCWorkAroundMask 0x00000040
-+#define kAdslCfgCentilliumCRCWorkAroundDisabled 0x00000000
-+#define kAdslCfgCentilliumCRCWorkAroundEnabled 0x00000040
-+
-+#define kAdslCfgExtraData 0x00000080
-+#define kAdslCfgTrellisMask (0x00000100 | kAdslCfgExtraData)
-+#define kAdslCfgTrellisOn (0x00000100 | kAdslCfgExtraData)
-+#define kAdslCfgTrellisOff (0 | kAdslCfgExtraData)
-+#define kAdslCfgExtraMask 0xFFFFFF80
-+
-+#define kAdslCfgLOSMonitoringMask 0x00000200
-+#define kAdslCfgLOSMonitoringOff 0x00000200
-+#define kAdslCfgLOSMonitoringOn 0x00000000
-+
-+#define kAdslCfgMarginMonitoringMask 0x00000400
-+#define kAdslCfgMarginMonitoringOn 0x00000400
-+#define kAdslCfgMarginMonitoringOff 0x00000000
-+
-+#define kAdslCfgDemodCapMask 0x00000800
-+#define kAdslCfgDemodCapOn 0x00000800
-+#define kAdslCfgDemodCapOff 0x00000000
-+
-+/* Flags 0x00001000 - 0x00008000 are reserved for modulation (see above) */
-+
-+/* Upstream mode flags 0x00010000 - 0x00030000 */
-+
-+#define kAdslCfgUpstreamModeMask 0x00030000
-+#define kAdslCfgUpstreamMax 0x00000000
-+#define kAdslCfgUpstreamSingle 0x00010000
-+#define kAdslCfgUpstreamDouble 0x00020000
-+#define kAdslCfgUpstreamTriple 0x00030000
-+
-+#define kAdslCfgNoSpectrumOverlap 0x00040000
-+
-+/* Pwm sync clock configuration */
-+
-+#define kAdslCfgPwmSyncClockMask 0x00080000
-+#define kAdslCfgPwmSyncClockOn 0x00080000
-+#define kAdslCfgPwmSyncClockOff 0x00000000
-+
-+#define kAdslCfgDefaultTrainingMargin -1
-+#define kAdslCfgDefaultShowtimeMargin -1
-+#define kAdslCfgDefaultLOMTimeThld -1
-+
-+/* ADSL2 parameters */
-+
-+#define kAdsl2CfgReachExOn 0x00000001
-+#define kAdsl2CfgAnnexMEnabled 0x00000002
-+
-+typedef struct _adslCfgProfile {
-+ long adslAnnexCParam;
-+ long adslAnnexAParam;
-+ long adslTrainingMarginQ4;
-+ long adslShowtimeMarginQ4;
-+ long adslLOMTimeThldSec;
-+ long adslDemodCapMask;
-+ long adslDemodCapValue;
-+ long adsl2Param;
-+ long adslPwmSyncClockFreq;
-+} adslCfgProfile;
-+
-+/*
-+**
-+** ADSL PHY configuration
-+**
-+*/
-+
-+typedef struct _adslPhyCfg {
-+ long demodCapMask;
-+ long demodCap;
-+} adslPhyCfg;
-+
-+/*
-+**
-+** ADSL version info parameters
-+**
-+*/
-+
-+#define kAdslVersionStringSize 32
-+
-+#define kAdslTypeUnknown 0
-+#define kAdslTypeAnnexA 1
-+#define kAdslTypeAnnexB 2
-+#define kAdslTypeAnnexC 3
-+#define kAdslTypeSADSL 4
-+
-+typedef struct _adslVersionInfo {
-+ unsigned short phyType;
-+ unsigned short phyMjVerNum;
-+ unsigned short phyMnVerNum;
-+ char phyVerStr[kAdslVersionStringSize];
-+ unsigned short drvMjVerNum;
-+ unsigned short drvMnVerNum;
-+ char drvVerStr[kAdslVersionStringSize];
-+} adslVersionInfo;
-+
-+/*
-+**
-+** ADSL self-test parameters
-+**
-+*/
-+
-+#define kAdslSelfTestLMEM 0x00000001
-+#define kAdslSelfTestSDRAM 0x00000002
-+#define kAdslSelfTestAFE 0x00000004
-+#define kAdslSelfTestQproc 0x00000008
-+#define kAdslSelfTestRS 0x00000010
-+#define kAdslSelfTestHostDma 0x00000020
-+
-+#define kAdslSelfTestAll ((kAdslSelfTestHostDma - 1) | kAdslSelfTestHostDma)
-+
-+#define kAdslSelfTestInProgress 0x40000000
-+#define kAdslSelfTestCompleted 0x80000000
-+
-+/* MIB OID's for ADSL objects */
-+
-+#define kOidMaxObjLen 80
-+
-+#define kOidAdsl 94
-+#define kOidAdslInterleave 124
-+#define kOidAdslFast 125
-+#define kOidAtm 37
-+#define kOidAdslPrivate 255
-+#define kOidAdslPrivatePartial 254
-+
-+#define kAdslMibAnnexAToneNum 256
-+#define kAdslMibToneNum kAdslMibAnnexAToneNum
-+#define kAdslMibMaxToneNum kAdslMibAnnexAToneNum*2*2
-+
-+#define kOidAdslPrivSNR 1
-+#define kOidAdslPrivBitAlloc 2
-+#define kOidAdslPrivGain 3
-+#define kOidAdslPrivShowtimeMargin 4
-+#define kOidAdslPrivChanCharLin 5
-+#define kOidAdslPrivChanCharLog 6
-+#define kOidAdslPrivQuietLineNoise 7
-+#define kOidAdslPrivExtraInfo 255
-+
-+#define kOidAdslLine 1
-+#define kOidAdslMibObjects 1
-+
-+#define kOidAdslLineTable 1
-+#define kOidAdslLineEntry 1
-+#define kOidAdslLineCoding 1
-+#define kOidAdslLineType 2
-+#define kOidAdslLineSpecific 3
-+#define kOidAdslLineConfProfile 4
-+#define kOidAdslLineAlarmConfProfile 5
-+
-+#define kOidAdslAtucPhysTable 2
-+#define kOidAdslAturPhysTable 3
-+#define kOidAdslPhysEntry 1
-+#define kOidAdslPhysInvSerialNumber 1
-+#define kOidAdslPhysInvVendorID 2
-+#define kOidAdslPhysInvVersionNumber 3
-+#define kOidAdslPhysCurrSnrMgn 4
-+#define kOidAdslPhysCurrAtn 5
-+#define kOidAdslPhysCurrStatus 6
-+#define kOidAdslPhysCurrOutputPwr 7
-+#define kOidAdslPhysCurrAttainableRate 8
-+
-+#define kOidAdslAtucChanTable 4
-+#define kOidAdslAturChanTable 5
-+#define kOidAdslChanEntry 1
-+#define kOidAdslChanInterleaveDelay 1
-+#define kOidAdslChanCurrTxRate 2
-+#define kOidAdslChanPrevTxRate 3
-+#define kOidAdslChanCrcBlockLength 4
-+
-+#define kOidAdslAtucPerfDataTable 6
-+#define kOidAdslAturPerfDataTable 7
-+#define kOidAdslPerfDataEntry 1
-+#define kOidAdslPerfLofs 1
-+#define kOidAdslPerfLoss 2
-+#define kOidAdslPerfLprs 3
-+#define kOidAdslPerfESs 4
-+#define kOidAdslPerfValidIntervals 5
-+#define kOidAdslPerfInvalidIntervals 6
-+#define kOidAdslPerfCurr15MinTimeElapsed 7
-+#define kOidAdslPerfCurr15MinLofs 8
-+#define kOidAdslPerfCurr15MinLoss 9
-+#define kOidAdslPerfCurr15MinLprs 10
-+#define kOidAdslPerfCurr15MinESs 11
-+#define kOidAdslPerfCurr1DayTimeElapsed 12
-+#define kOidAdslPerfCurr1DayLofs 13
-+#define kOidAdslPerfCurr1DayLoss 14
-+#define kOidAdslPerfCurr1DayLprs 15
-+#define kOidAdslPerfCurr1DayESs 16
-+#define kOidAdslPerfPrev1DayMoniSecs 17
-+#define kOidAdslPerfPrev1DayLofs 18
-+#define kOidAdslPerfPrev1DayLoss 19
-+#define kOidAdslPerfPrev1DayLprs 20
-+#define kOidAdslPerfPrev1DayESs 21
-+
-+#define kOidAdslAtucPerfIntervalTable 8
-+#define kOidAdslAturPerfIntervalTable 9
-+#define kOidAdslPerfIntervalEntry 1
-+#define kOidAdslIntervalNumber 1
-+#define kOidAdslIntervalLofs 2
-+#define kOidAdslIntervalLoss 3
-+#define kOidAdslIntervalLprs 4
-+#define kOidAdslIntervalESs 5
-+#define kOidAdslIntervalValidData 6
-+
-+#define kOidAdslAtucChanPerfTable 10
-+#define kOidAdslAturChanPerfTable 11
-+#define kOidAdslChanPerfEntry 1
-+#define kOidAdslChanReceivedBlks 1
-+#define kOidAdslChanTransmittedBlks 2
-+#define kOidAdslChanCorrectedBlks 3
-+#define kOidAdslChanUncorrectBlks 4
-+#define kOidAdslChanPerfValidIntervals 5
-+#define kOidAdslChanPerfInvalidIntervals 6
-+#define kOidAdslChanPerfCurr15MinTimeElapsed 7
-+#define kOidAdslChanPerfCurr15MinReceivedBlks 8
-+#define kOidAdslChanPerfCurr15MinTransmittedBlks 9
-+#define kOidAdslChanPerfCurr15MinCorrectedBlks 10
-+#define kOidAdslChanPerfCurr15MinUncorrectBlks 11
-+#define kOidAdslChanPerfCurr1DayTimeElapsed 12
-+#define kOidAdslChanPerfCurr1DayReceivedBlks 13
-+#define kOidAdslChanPerfCurr1DayTransmittedBlks 14
-+#define kOidAdslChanPerfCurr1DayCorrectedBlks 15
-+#define kOidAdslChanPerfCurr1DayUncorrectBlks 16
-+#define kOidAdslChanPerfPrev1DayMoniSecs 17
-+#define kOidAdslChanPerfPrev1DayReceivedBlks 18
-+#define kOidAdslChanPerfPrev1DayTransmittedBlks 19
-+#define kOidAdslChanPerfPrev1DayCorrectedBlks 20
-+#define kOidAdslChanPerfPrev1DayUncorrectBlks 21
-+
-+#define kOidAdslAtucChanIntervalTable 12
-+#define kOidAdslAturChanIntervalTable 13
-+#define kOidAdslChanIntervalEntry 1
-+#define kOidAdslChanIntervalNumber 1
-+#define kOidAdslChanIntervalReceivedBlks 2
-+#define kOidAdslChanIntervalTransmittedBlks 3
-+#define kOidAdslChanIntervalCorrectedBlks 4
-+#define kOidAdslChanIntervalUncorrectBlks 5
-+#define kOidAdslChanIntervalValidData 6
-+
-+#define kOidAtmMibObjects 1
-+#define kOidAtmTcTable 4
-+#define kOidAtmTcEntry 1
-+#define kOidAtmOcdEvents 1
-+#define kOidAtmAlarmState 2
-+
-+/* Adsl Channel coding */
-+
-+#define kAdslRcvDir 0
-+#define kAdslXmtDir 1
-+
-+#define kAdslRcvActive (1 << kAdslRcvDir)
-+#define kAdslXmtActive (1 << kAdslXmtDir)
-+
-+#define kAdslIntlChannel 0
-+#define kAdslFastChannel 1
-+
-+#define kAdslTrellisOff 0
-+#define kAdslTrellisOn 1
-+
-+/* AnnexC modulation and bitmap types for the field (adslConnection.modType) */
-+
-+#define kAdslModMask 0x7
-+
-+#define kAdslModGdmt 0
-+#define kAdslModT1413 1
-+#define kAdslModGlite 2
-+#define kAdslModAnnexI 3
-+#define kAdslModAdsl2 4
-+#define kAdslModAdsl2p 5
-+#define kAdslModReAdsl2 6
-+
-+#define kAdslBitmapShift 3
-+#define kAdslBitmapMask kAdslCfgBitmapMask
-+#define kAdslDBM (0 << kAdslBitmapShift)
-+#define kAdslFBM (1 << kAdslBitmapShift)
-+#define kAdslFBMSoL (2 << kAdslBitmapShift)
-+
-+#define kAdslUpstreamModeShift 5
-+#define kAdslUpstreamModeMask (3 << kAdslUpstreamModeShift)
-+#define kAdslUpstreamModeSingle (0 << kAdslUpstreamModeShift)
-+#define kAdslUpstreamModeDouble (1 << kAdslUpstreamModeShift)
-+#define kAdslUpstreamModeTriple (2 << kAdslUpstreamModeShift)
-+
-+/* AdslLineCodingType definitions */
-+
-+#define kAdslLineCodingOther 1
-+#define kAdslLineCodingDMT 2
-+#define kAdslLineCodingCAP 3
-+#define kAdslLineCodingQAM 4
-+
-+/* AdslLineType definitions */
-+
-+#define kAdslLineTypeNoChannel 1
-+#define kAdslLineTypeFastOnly 2
-+#define kAdslLineTypeIntlOnly 3
-+#define kAdslLineTypeFastOrIntl 4
-+#define kAdslLineTypeFastAndIntl 5
-+
-+typedef struct _adslLineEntry {
-+ unsigned char adslLineCoding;
-+ unsigned char adslLineType;
-+} adslLineEntry;
-+
-+
-+/* AdslPhys status definitions */
-+
-+#define kAdslPhysStatusNoDefect (1 << 0)
-+#define kAdslPhysStatusLOF (1 << 1) /* lossOfFraming (not receiving valid frame) */
-+#define kAdslPhysStatusLOS (1 << 2) /* lossOfSignal (not receiving signal) */
-+#define kAdslPhysStatusLPR (1 << 3) /* lossOfPower */
-+#define kAdslPhysStatusLOSQ (1 << 4) /* lossOfSignalQuality */
-+#define kAdslPhysStatusLOM (1 << 5) /* lossOfMargin */
-+
-+typedef struct _adslPhysEntry {
-+ long adslCurrSnrMgn;
-+ long adslCurrAtn;
-+ long adslCurrStatus;
-+ long adslCurrOutputPwr;
-+ long adslCurrAttainableRate;
-+} adslPhysEntry;
-+
-+#define kAdslPhysVendorIdLen 8
-+#define kAdslPhysSerialNumLen 32
-+#define kAdslPhysVersionNumLen 32
-+
-+typedef struct _adslFullPhysEntry {
-+ char adslSerialNumber[kAdslPhysSerialNumLen];
-+ char adslVendorID[kAdslPhysVendorIdLen];
-+ char adslVersionNumber[kAdslPhysVersionNumLen];
-+ long adslCurrSnrMgn;
-+ long adslCurrAtn;
-+ long adslCurrStatus;
-+ long adslCurrOutputPwr;
-+ long adslCurrAttainableRate;
-+} adslFullPhysEntry;
-+
-+/* Adsl channel entry definitions */
-+
-+typedef struct _adslChanEntry {
-+ unsigned long adslChanIntlDelay;
-+ unsigned long adslChanCurrTxRate;
-+ unsigned long adslChanPrevTxRate;
-+ unsigned long adslChanCrcBlockLength;
-+} adslChanEntry;
-+
-+/* Adsl performance data definitions */
-+
-+typedef struct _adslPerfCounters {
-+ unsigned long adslLofs;
-+ unsigned long adslLoss;
-+ unsigned long adslLols; /* Loss of Link failures (ATUC only) */
-+ unsigned long adslLprs;
-+ unsigned long adslESs; /* Count of Errored Seconds */
-+ unsigned long adslInits; /* Count of Line initialization attempts (ATUC only) */
-+ unsigned long adslUAS; /* Count of Unavailable Seconds */
-+ unsigned long adslSES; /* Count of Severely Errored Seconds */
-+ unsigned long adslLOSS; /* Count of LOS seconds */
-+ unsigned long adslFECs; /* Count of FEC seconds */
-+} adslPerfCounters;
-+
-+typedef struct _adslPerfDataEntry {
-+ adslPerfCounters perfTotal;
-+ unsigned long adslPerfValidIntervals;
-+ unsigned long adslPerfInvalidIntervals;
-+ adslPerfCounters perfCurr15Min;
-+ unsigned long adslPerfCurr15MinTimeElapsed;
-+ adslPerfCounters perfCurr1Day;
-+ unsigned long adslPerfCurr1DayTimeElapsed;
-+ adslPerfCounters perfPrev1Day;
-+ unsigned long adslAturPerfPrev1DayMoniSecs;
-+} adslPerfDataEntry;
-+
-+#define kAdslMibPerfIntervals 4
-+
-+/* Adsl channel performance data definitions */
-+
-+typedef struct _adslChanCounters {
-+ unsigned long adslChanReceivedBlks;
-+ unsigned long adslChanTransmittedBlks;
-+ unsigned long adslChanCorrectedBlks;
-+ unsigned long adslChanUncorrectBlks;
-+} adslChanCounters;
-+
-+typedef struct _adslChanPerfDataEntry {
-+ adslChanCounters perfTotal;
-+ unsigned long adslChanPerfValidIntervals;
-+ unsigned long adslChanPerfInvalidIntervals;
-+ adslChanCounters perfCurr15Min;
-+ unsigned long adslPerfCurr15MinTimeElapsed;
-+ adslChanCounters perfCurr1Day;
-+ unsigned long adslPerfCurr1DayTimeElapsed;
-+ adslChanCounters perfPrev1Day;
-+ unsigned long adslAturPerfPrev1DayMoniSecs;
-+} adslChanPerfDataEntry;
-+
-+#define kAdslMibChanPerfIntervals 4
-+
-+/* Adsl trap threshold definitions */
-+
-+#define kAdslEventLinkChange 0x001
-+#define kAdslEventRateChange 0x002
-+#define kAdslEventLofThresh 0x004
-+#define kAdslEventLosThresh 0x008
-+#define kAdslEventLprThresh 0x010
-+#define kAdslEventESThresh 0x020
-+#define kAdslEventFastUpThresh 0x040
-+#define kAdslEventIntlUpThresh 0x080
-+#define kAdslEventFastDownThresh 0x100
-+#define kAdslEventIntlDwonThresh 0x200
-+
-+typedef struct _adslThreshCounters {
-+ unsigned long adslThreshLofs;
-+ unsigned long adslThreshLoss;
-+ unsigned long adslThreshLols; /* Loss of Link failures (ATUC only) */
-+ unsigned long adslThreshLprs;
-+ unsigned long adslThreshESs;
-+ unsigned long adslThreshFastRateUp;
-+ unsigned long adslThreshIntlRateUp;
-+ unsigned long adslThreshFastRateDown;
-+ unsigned long adslThreshIntlRateDown;
-+} adslThreshCounters;
-+
-+
-+/* Atm PHY performance data definitions */
-+
-+#define kAtmPhyStateNoAlarm 1
-+#define kAtmPhyStateLcdFailure 2
-+
-+typedef struct _atmPhyDataEntrty {
-+ unsigned long atmInterfaceOCDEvents;
-+ unsigned long atmInterfaceTCAlarmState;
-+} atmPhyDataEntrty;
-+
-+typedef struct _adslBertResults {
-+ unsigned long bertTotalBits;
-+ unsigned long bertErrBits;
-+} adslBertResults;
-+
-+typedef struct {
-+ unsigned long cntHi;
-+ unsigned long cntLo;
-+} cnt64;
-+
-+typedef struct _adslBertStatusEx {
-+ unsigned long bertSecTotal;
-+ unsigned long bertSecElapsed;
-+ unsigned long bertSecCur;
-+ cnt64 bertTotalBits;
-+ cnt64 bertErrBits;
-+} adslBertStatusEx;
-+
-+typedef struct _adslDataConnectionInfo {
-+ unsigned short K;
-+ unsigned char S, R, D;
-+} adslDataConnectionInfo;
-+
-+typedef struct _adslConnectionInfo {
-+ unsigned char chType; /* fast or interleaved */
-+ unsigned char modType; /* modulation type: G.DMT or T1.413 */
-+ unsigned char trellisCoding; /* off(0) or on(1) */
-+ adslDataConnectionInfo rcvInfo;
-+ adslDataConnectionInfo xmtInfo;
-+} adslConnectionInfo;
-+
-+typedef struct _adsl2DataConnectionInfo {
-+ unsigned char Nlp;
-+ unsigned char Nbc;
-+ unsigned char MSGlp;
-+ unsigned short MSGc;
-+
-+ unsigned long L;
-+ unsigned short M;
-+ unsigned short T;
-+ unsigned short D;
-+ unsigned short R;
-+ unsigned short B;
-+} adsl2DataConnectionInfo;
-+
-+typedef struct _adsl2ConnectionInfo {
-+ long adsl2Mode;
-+ long rcvRate;
-+ long xmtRate;
-+ unsigned char pwrState; /* Lx state: x = 0..3 */
-+ adsl2DataConnectionInfo rcv2Info;
-+ adsl2DataConnectionInfo xmt2Info;
-+} adsl2ConnectionInfo;
-+
-+typedef struct _adslConnectionDataStat {
-+ unsigned long cntRS;
-+ unsigned long cntRSCor;
-+ unsigned long cntRSUncor;
-+ unsigned long cntSF;
-+ unsigned long cntSFErr;
-+} adslConnectionDataStat;
-+
-+typedef struct _adslConnectionStat {
-+ adslConnectionDataStat rcvStat;
-+ adslConnectionDataStat xmtStat;
-+} adslConnectionStat;
-+
-+typedef struct _atmConnectionDataStat {
-+ unsigned long cntHEC;
-+ unsigned long cntOCD;
-+ unsigned long cntLCD;
-+ unsigned long cntES;
-+ unsigned long cntCellTotal;
-+ unsigned long cntCellData;
-+ unsigned long cntCellDrop;
-+ unsigned long cntBitErrs;
-+} atmConnectionDataStat;
-+
-+typedef struct _atmConnectionStat {
-+ atmConnectionDataStat rcvStat;
-+ atmConnectionDataStat xmtStat;
-+} atmConnectionStat;
-+
-+#define kAdslFramingModeMask 0x0F
-+#define kAtmFramingModeMask 0xF0
-+#define kAtmHeaderCompression 0x80
-+
-+/* ADSL2 data */
-+
-+typedef struct _adslDiagModeData {
-+ long loopAttn;
-+ long signalAttn;
-+ long snrMargin;
-+ long attnDataRate;
-+ long actXmtPower;
-+ long hlinScaleFactor;
-+} adslDiagModeData;
-+
-+/* AdslMibGetObjectValue return codes */
-+
-+#define kAdslMibStatusSuccess 0
-+#define kAdslMibStatusFailure -1
-+#define kAdslMibStatusNoObject -2
-+#define kAdslMibStatusObjectInvalid -3
-+#define kAdslMibStatusBufferTooSmall -4
-+#define kAdslMibStatusLastError -4
-+
-+/* Adsl training codes */
-+
-+#define kAdslTrainingIdle 0
-+#define kAdslTrainingG994 1
-+#define kAdslTrainingG992Started 2
-+#define kAdslTrainingG992ChanAnalysis 3
-+#define kAdslTrainingG992Exchange 4
-+#define kAdslTrainingConnected 5
-+
-+/* Global info structure */
-+
-+typedef struct _adslMibInfo {
-+ adslLineEntry adslLine;
-+ adslPhysEntry adslPhys;
-+ adslChanEntry adslChanIntl;
-+ adslChanEntry adslChanFast;
-+ adslPerfDataEntry adslPerfData;
-+ adslPerfCounters adslPerfIntervals[kAdslMibPerfIntervals];
-+ adslChanPerfDataEntry adslChanIntlPerfData;
-+ adslChanPerfDataEntry adslChanFastPerfData;
-+ adslChanCounters adslChanIntlPerfIntervals[kAdslMibChanPerfIntervals];
-+ adslChanCounters adslChanFastPerfIntervals[kAdslMibChanPerfIntervals];
-+
-+ adslThreshCounters adslAlarm;
-+
-+ atmPhyDataEntrty adslChanIntlAtmPhyData;
-+ atmPhyDataEntrty adslChanFastAtmPhyData;
-+
-+ adslBertResults adslBertRes;
-+
-+ adslConnectionInfo adslConnection;
-+ adslConnectionStat adslStat;
-+ unsigned char adslTrainingState;
-+ atmConnectionStat atmStat;
-+
-+ adslFullPhysEntry adslAtucPhys;
-+ unsigned char adslRxNonStdFramingAdjustK;
-+ unsigned char adslFramingMode;
-+ adslBertStatusEx adslBertStatus;
-+ long afeRxPgaGainQ1;
-+
-+ adslDiagModeData adslDiag;
-+ adsl2ConnectionInfo adsl2Info;
-+ adslPerfCounters adslTxPerfTotal;
-+} adslMibInfo;
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif /* AdslMibDefHeader */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/DiagDef.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/DiagDef.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/DiagDef.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/DiagDef.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,209 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+
-+/*******************************************************************
-+ * DiagDef.h
-+ *
-+ * Description:
-+ * Diag definitions
-+ *
-+ * $Revision: 1.22 $
-+ *
-+ * $Id: DiagDef.h,v 1.22 2004/10/16 23:43:19 ilyas Exp $
-+ *
-+ * $Log: DiagDef.h,v $
-+ * Revision 1.22 2004/10/16 23:43:19 ilyas
-+ * Added playback resume command
-+ *
-+ * Revision 1.21 2004/10/16 23:24:08 ilyas
-+ * Improved FileRead command support for LOG file playback (RecordTest on the board)
-+ *
-+ * Revision 1.20 2004/04/28 16:52:32 ilyas
-+ * Added GDB frame processing
-+ *
-+ * Revision 1.19 2004/03/10 22:26:53 ilyas
-+ * Added command-line parameter for IP port number.
-+ * Added proxy remote termination
-+ *
-+ * Revision 1.18 2004/01/24 23:41:37 ilyas
-+ * Added DIAG_DEBUG_CMD_LOG_SAMPLES debug command
-+ *
-+ * Revision 1.17 2003/11/19 02:25:45 ilyas
-+ * Added definitions for LOG frame retransmission, time, ADSL2 plots
-+ *
-+ * Revision 1.16 2003/11/14 18:46:05 ilyas
-+ * Added G992p3 debug commands
-+ *
-+ * Revision 1.15 2003/10/02 19:50:41 ilyas
-+ * Added support for buffering data for AnnexI and statistical counters
-+ *
-+ * Revision 1.14 2003/09/03 19:45:11 ilyas
-+ * To refuse connection with older protocol versions
-+ *
-+ * Revision 1.13 2003/08/30 00:12:39 ilyas
-+ * Added support for running chip test regressions via DslDiags
-+ *
-+ * Revision 1.12 2003/08/12 00:19:28 ilyas
-+ * Improved image downloading protocol.
-+ * Added DEBUG command support
-+ *
-+ * Revision 1.11 2003/04/11 00:37:24 ilyas
-+ * Added DiagProtoFrame definition
-+ *
-+ * Revision 1.10 2003/03/25 00:10:07 ilyas
-+ * Added command for "long" BERT test
-+ *
-+ * Revision 1.9 2003/01/30 03:29:32 ilyas
-+ * Added PHY_CFG support and fixed printing showtime counters
-+ *
-+ * Revision 1.8 2002/12/16 20:56:38 ilyas
-+ * Added support for binary statuses
-+ *
-+ * Revision 1.7 2002/12/06 20:19:13 ilyas
-+ * Added support for binary statuses and scrambled status strings
-+ *
-+ * Revision 1.6 2002/11/05 00:18:27 ilyas
-+ * Added configuration dialog box for Eye tone selection.
-+ * Added Centillium CRC workaround to AnnexC config dialog
-+ * Bit allocation update on bit swap messages
-+ *
-+ * Revision 1.5 2002/07/30 23:23:43 ilyas
-+ * Implemented DIAG configuration command for AnnexA and AnnexC
-+ *
-+ * Revision 1.4 2002/07/30 22:47:15 ilyas
-+ * Added DIAG command for configuration
-+ *
-+ * Revision 1.3 2002/07/15 23:52:51 ilyas
-+ * iAdded switch RJ11 pair command
-+ *
-+ * Revision 1.2 2002/04/25 17:55:51 ilyas
-+ * Added mibGet command
-+ *
-+ * Revision 1.1 2002/04/02 22:56:39 ilyas
-+ * Support DIAG connection at any time; BERT commands
-+ *
-+ *
-+ ******************************************************************/
-+
-+#define LOG_PROTO_ID "*L"
-+
-+#define DIAG_PARTY_ID_MASK 0x01
-+#define LOG_PARTY_CLIENT 0x01
-+#define LOG_PARTY_SERVER 0x00
-+
-+#define DIAG_DATA_MASK 0x0E
-+#define DIAG_DATA_LOG 0x02
-+#define DIAG_DATA_EYE 0x04
-+#define DIAG_DATA_LOG_TIME 0x08
-+
-+#define DIAG_DATA_EX 0x80
-+#define DIAG_PARTY_ID_MASK_EX (DIAG_DATA_EX | DIAG_PARTY_ID_MASK)
-+#define LOG_PARTY_SERVER_EX (DIAG_DATA_EX | LOG_PARTY_SERVER)
-+
-+#define DIAG_ACK_FRAME_ACK_MASK 0x000000FF
-+#define DIAG_ACK_FRAME_RCV_SHIFT 8
-+#define DIAG_ACK_FRAME_RCV_MASK 0x0000FF00
-+#define DIAG_ACK_FRAME_RCV_PRESENT 0x00010000
-+#define DIAG_ACK_TIMEOUT -1
-+#define DIAG_ACK_LEN_INDICATION -1
-+
-+#define LOG_CMD_GDB 236
-+#define LOG_CMD_PROXY 237
-+#define LOG_CMD_RETR 238
-+#define LOG_CMD_DEBUG 239
-+#define LOG_CMD_BERT_EX 240
-+#define LOG_CMD_CFG_PHY 241
-+#define LOG_CMD_RESET 242
-+#define LOG_CMD_SCRAMBLED_STRING 243
-+#define LOG_CMD_EYE_CFG 244
-+#define LOG_CMD_CONFIG_A 245
-+#define LOG_CMD_CONFIG_C 246
-+#define LOG_CMD_SWITCH_RJ11_PAIR 247
-+#define LOG_CMD_MIB_GET 248
-+#define LOG_CMD_LOG_STOP 249
-+#define LOG_CMD_PING_REQ 250
-+#define LOG_CMD_PING_RSP 251
-+#define LOG_CMD_DISCONNECT 252
-+#define LOG_CMD_STRING_DATA 253
-+#define LOG_CMD_TEST_DATA 254
-+#define LOG_CMD_CONNECT 255
-+
-+typedef struct _LogProtoHeader {
-+ unsigned char logProtoId[2];
-+ unsigned char logPartyId;
-+ unsigned char logCommmand;
-+} LogProtoHeader;
-+
-+#define LOG_FILE_PORT 5100
-+#define LOG_MAX_BUF_SIZE 1400
-+#define LOG_MAX_DATA_SIZE (LOG_MAX_BUF_SIZE - sizeof(LogProtoHeader))
-+
-+typedef struct {
-+ LogProtoHeader diagHdr;
-+ unsigned char diagData[LOG_MAX_DATA_SIZE];
-+} DiagProtoFrame;
-+
-+#define DIAG_PROXY_TERMINATE 1
-+
-+#define DIAG_DEBUG_CMD_READ_MEM 1
-+#define DIAG_DEBUG_CMD_SET_MEM 2
-+#define DIAG_DEBUG_CMD_RESET_CONNECTION 3
-+#define DIAG_DEBUG_CMD_RESET_PHY 4
-+#define DIAG_DEBUG_CMD_RESET_CHIP 5
-+#define DIAG_DEBUG_CMD_EXEC_FUNC 6
-+#define DIAG_DEBUG_CMD_EXEC_ADSL_FUNC 7
-+#define DIAG_DEBUG_CMD_WRITE_FILE 8
-+#define DIAG_DEBUG_CMD_G992P3_DEBUG 9
-+#define DIAG_DEBUG_CMD_G992P3_DIAG_MODE 10
-+#define DIAG_DEBUG_CMD_CLEAR_TIME 11
-+#define DIAG_DEBUG_CMD_PRINT_TIME 12
-+#define DIAG_DEBUG_CMD_LOG_SAMPLES 13
-+
-+#define DIAG_DEBUG_CMD_PLAYBACK_STOP 14
-+#define DIAG_DEBUG_CMD_PLAYBACK_RESUME 15
-+
-+#define DIAG_DEBUG_CMD_PRINT_STAT 21
-+#define DIAG_DEBUG_CMD_CLEAR_STAT 22
-+
-+typedef struct {
-+ unsigned short cmd;
-+ unsigned short cmdId;
-+ unsigned long param1;
-+ unsigned long param2;
-+ unsigned char diagData[1];
-+} DiagDebugData;
-+
-+#define DIAG_TEST_CMD_LOAD 101
-+#define DIAG_TEST_CMD_READ 102
-+#define DIAG_TEST_CMD_WRITE 103
-+#define DIAG_TEST_CMD_APPEND 104
-+#define DIAG_TEST_CMD_TEST_COMPLETE 105
-+
-+#define DIAG_TEST_FILENAME_LEN 64
-+
-+typedef struct {
-+ unsigned short cmd;
-+ unsigned short cmdId;
-+ unsigned long offset;
-+ unsigned long len;
-+ unsigned long bufPtr;
-+ char fileName[DIAG_TEST_FILENAME_LEN];
-+} DiagTestData;
-+
-+typedef struct {
-+ unsigned long frStart;
-+ unsigned long frNum;
-+} DiagLogRetrData;
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/adsldrv.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/adsldrv.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/adsldrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/adsldrv.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,203 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : AdslDrv.h
-+ *
-+ * Description: This file contains the definitions and structures for the
-+ * Linux IOCTL interface that used between the user mode ADSL
-+ * API library and the kernel ADSL API driver.
-+ *
-+ * Updates : 11/02/2001 lkaplan. Created.
-+ ***************************************************************************/
-+
-+#if !defined(_ADSLDRV_H_)
-+#define _ADSLDRV_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+/* Incldes. */
-+#include <bcmadsl.h>
-+
-+/* Defines. */
-+#define DSL_IFNAME "dsl0"
-+#define ADSLDRV_MAJOR 208 /* arbitrary unused value */
-+
-+#define ADSLIOCTL_CHECK \
-+ _IOR(ADSLDRV_MAJOR, 0, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_INITIALIZE \
-+ _IOWR(ADSLDRV_MAJOR, 1, ADSLDRV_INITIALIZE)
-+#define ADSLIOCTL_UNINITIALIZE \
-+ _IOR(ADSLDRV_MAJOR, 2, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_CONNECTION_START \
-+ _IOWR(ADSLDRV_MAJOR, 3, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_CONNECTION_STOP \
-+ _IOR(ADSLDRV_MAJOR, 4, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_GET_PHY_ADDR \
-+ _IOR(ADSLDRV_MAJOR, 5, ADSLDRV_PHY_ADDR)
-+#define ADSLIOCTL_SET_PHY_ADDR \
-+ _IOWR(ADSLDRV_MAJOR, 6, ADSLDRV_PHY_ADDR)
-+#define ADSLIOCTL_MAP_ATM_PORT_IDS \
-+ _IOWR(ADSLDRV_MAJOR, 7, ADSLDRV_MAP_ATM_PORT)
-+#define ADSLIOCTL_GET_CONNECTION_INFO \
-+ _IOR(ADSLDRV_MAJOR, 8, ADSLDRV_CONNECTION_INFO)
-+#define ADSLIOCTL_DIAG_COMMAND \
-+ _IOR(ADSLDRV_MAJOR, 9, ADSLDRV_DIAG)
-+#define ADSLIOCTL_GET_OBJ_VALUE \
-+ _IOR(ADSLDRV_MAJOR, 10, ADSLDRV_GET_OBJ)
-+#define ADSLIOCTL_START_BERT \
-+ _IOR(ADSLDRV_MAJOR, 11, ADSLDRV_BERT)
-+#define ADSLIOCTL_STOP_BERT \
-+ _IOR(ADSLDRV_MAJOR, 12, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_CONFIGURE \
-+ _IOR(ADSLDRV_MAJOR, 13, ADSLDRV_CONFIGURE)
-+#define ADSLIOCTL_TEST \
-+ _IOR(ADSLDRV_MAJOR, 14, ADSLDRV_TEST)
-+#define ADSLIOCTL_GET_CONSTEL_POINTS \
-+ _IOR(ADSLDRV_MAJOR, 15, ADSLDRV_GET_CONSTEL_POINTS)
-+#define ADSLIOCTL_GET_VERSION \
-+ _IOR(ADSLDRV_MAJOR, 16, ADSLDRV_GET_VERSION)
-+#define ADSLIOCTL_SET_SDRAM_BASE \
-+ _IOR(ADSLDRV_MAJOR, 17, ADSLDRV_SET_SDRAM_BASE)
-+#define ADSLIOCTL_RESET_STAT_COUNTERS \
-+ _IOR(ADSLDRV_MAJOR, 18, ADSLDRV_STATUS_ONLY)
-+#define ADSLIOCTL_SET_OEM_PARAM \
-+ _IOR(ADSLDRV_MAJOR, 19, ADSLDRV_SET_OEM_PARAM)
-+#define ADSLIOCTL_START_BERT_EX \
-+ _IOR(ADSLDRV_MAJOR, 20, ADSLDRV_BERT_EX)
-+#define ADSLIOCTL_STOP_BERT_EX \
-+ _IOR(ADSLDRV_MAJOR, 21, ADSLDRV_STATUS_ONLY)
-+
-+#define MAX_ADSLDRV_IOCTL_COMMANDS 22
-+
-+/* Typedefs. */
-+typedef struct
-+{
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_STATUS_ONLY, *PADSLDRV_STATUS_ONLY;
-+
-+typedef struct
-+{
-+ ADSL_FN_NOTIFY_CB pFnNotifyCb;
-+ UINT32 ulParm;
-+ adslCfgProfile *pAdslCfg;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_INITIALIZE, *PADSLDRV_INITIALIZE;
-+
-+typedef struct
-+{
-+ ADSL_CHANNEL_ADDR ChannelAddr;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_PHY_ADDR, *PADSLDRV_PHY_ADDR;
-+
-+typedef struct
-+{
-+ UINT16 usAtmFastPortId;
-+ UINT16 usAtmInterleavedPortId;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_MAP_ATM_PORT, *PADSLDRV_MAP_ATM_PORT;
-+
-+typedef struct
-+{
-+ ADSL_CONNECTION_INFO ConnectionInfo;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_CONNECTION_INFO, *PADSLDRV_CONNECTION_INFO;
-+
-+typedef struct
-+{
-+ int diagCmd;
-+ int diagMap;
-+ int logTime;
-+ int srvIpAddr;
-+ int gwIpAddr;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_DIAG, *PADSLDRV_DIAG;
-+
-+typedef struct
-+{
-+ char *objId;
-+ int objIdLen;
-+ char *dataBuf;
-+ long dataBufLen;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_GET_OBJ, *PADSLDRV_GET_OBJ;
-+
-+typedef struct
-+{
-+ unsigned long totalBits;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_BERT, *PADSLDRV_BERT;
-+
-+typedef struct
-+{
-+ unsigned long totalSec;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_BERT_EX, *PADSLDRV_BERT_EX;
-+
-+typedef struct
-+{
-+ adslCfgProfile *pAdslCfg;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_CONFIGURE, *PADSLDRV_CONFIGURE;
-+
-+typedef struct
-+{
-+ unsigned long testCmd;
-+ unsigned long xmtStartTone;
-+ unsigned long xmtNumTones;
-+ unsigned long rcvStartTone;
-+ unsigned long rcvNumTones;
-+ char *xmtToneMap;
-+ char *rcvToneMap;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_TEST, *PADSLDRV_TEST;
-+
-+typedef struct
-+{
-+ int toneId;
-+ ADSL_CONSTELLATION_POINT *pointBuf;
-+ int numPoints;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_GET_CONSTEL_POINTS, *PADSLDRV_GET_CONSTEL_POINTS;
-+
-+typedef struct
-+{
-+ adslVersionInfo *pAdslVer;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_GET_VERSION, *PADSLDRV_GET_VERSION;
-+
-+typedef struct
-+{
-+ unsigned long sdramBaseAddr;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_SET_SDRAM_BASE, *PADSLDRV_SET_SDRAM_BASE;
-+
-+
-+typedef struct
-+{
-+ int paramId;
-+ void *buf;
-+ int len;
-+ BCMADSL_STATUS bvStatus;
-+} ADSLDRV_SET_OEM_PARAM, *PADSLDRV_SET_OEM_PARAM;
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _ADSLDRV_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmapidrv.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmapidrv.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmapidrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmapidrv.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,212 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : AtmApiDrv.h
-+ *
-+ * Description: This file contains the definitions and structures for the
-+ * Linux IOCTL interface that used between the user mode ATM
-+ * API library and the kernel ATM API driver.
-+ *
-+ * Updates : 09/15/2000 lat. Created.
-+ ***************************************************************************/
-+
-+#if !defined(_ATMAPIDRV_H_)
-+#define _ATMAPIDRV_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+/* Incldes. */
-+#include <bcmatmapi.h>
-+
-+/* Defines. */
-+#define ATMDRV_MAJOR 205 /* arbitrary unused value */
-+
-+#define ATMIOCTL_INITIALIZE \
-+ _IOWR(ATMDRV_MAJOR, 0, ATMDRV_INITIALIZE)
-+#define ATMIOCTL_UNINITIALIZE \
-+ _IOR(ATMDRV_MAJOR, 1, ATMDRV_STATUS_ONLY)
-+#define ATMIOCTL_GET_INTERFACE_ID \
-+ _IOWR(ATMDRV_MAJOR, 2, ATMDRV_INTERFACE_ID)
-+#define ATMIOCTL_GET_TRAFFIC_DESCR_TABLE_SIZE \
-+ _IOR(ATMDRV_MAJOR, 3, ATMDRV_TRAFFIC_DESCR_TABLE_SIZE)
-+#define ATMIOCTL_GET_TRAFFIC_DESCR_TABLE \
-+ _IOWR(ATMDRV_MAJOR, 4, ATMDRV_TRAFFIC_DESCR_TABLE)
-+#define ATMIOCTL_SET_TRAFFIC_DESCR_TABLE \
-+ _IOWR(ATMDRV_MAJOR, 5, ATMDRV_TRAFFIC_DESCR_TABLE)
-+#define ATMIOCTL_GET_INTERFACE_CFG \
-+ _IOWR(ATMDRV_MAJOR, 6, ATMDRV_INTERFACE_CFG)
-+#define ATMIOCTL_SET_INTERFACE_CFG \
-+ _IOWR(ATMDRV_MAJOR, 7, ATMDRV_INTERFACE_CFG)
-+#define ATMIOCTL_GET_VCC_CFG \
-+ _IOWR(ATMDRV_MAJOR, 8, ATMDRV_VCC_CFG)
-+#define ATMIOCTL_SET_VCC_CFG \
-+ _IOWR(ATMDRV_MAJOR, 9, ATMDRV_VCC_CFG)
-+#define ATMIOCTL_GET_VCC_ADDRS \
-+ _IOWR(ATMDRV_MAJOR, 10, ATMDRV_VCC_ADDRS)
-+#define ATMIOCTL_GET_INTERFACE_STATISTICS \
-+ _IOWR(ATMDRV_MAJOR, 11, ATMDRV_INTERFACE_STATISTICS)
-+#define ATMIOCTL_GET_VCC_STATISTICS \
-+ _IOWR(ATMDRV_MAJOR, 12, ATMDRV_VCC_STATISTICS)
-+#define ATMIOCTL_SET_INTERFACE_LINK_INFO \
-+ _IOWR(ATMDRV_MAJOR, 13, ATMDRV_INTERFACE_LINK_INFO)
-+#define ATMIOCTL_TEST \
-+ _IOWR(ATMDRV_MAJOR, 14, ATMDRV_TEST)
-+#define ATMIOCTL_OAM_LOOPBACK_TEST \
-+ _IOWR(ATMDRV_MAJOR, 15, ATMDRV_OAM_LOOPBACK)
-+
-+
-+#define MAX_ATMDRV_IOCTL_COMMANDS 16
-+
-+/* Typedefs. */
-+typedef struct
-+{
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_STATUS_ONLY, *PATMDRV_STATUS_ONLY;
-+
-+typedef struct
-+{ PATM_INITIALIZATION_PARMS pInit;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_INITIALIZE, *PATMDRV_INITIALIZE;
-+
-+typedef struct
-+{
-+ UINT8 ucPhyPort;
-+ UINT8 ucReserved[3];
-+ UINT32 ulInterfaceId;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_INTERFACE_ID, *PATMDRV_INTERFACE_ID;
-+
-+typedef struct
-+{
-+ UINT32 ulTrafficDescrTableSize;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_TRAFFIC_DESCR_TABLE_SIZE, *PATMDRV_TRAFFIC_DESCR_TABLE_SIZE;
-+
-+typedef struct
-+{
-+ PATM_TRAFFIC_DESCR_PARM_ENTRY pTrafficDescrTable;
-+ UINT32 ulTrafficDescrTableSize;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_TRAFFIC_DESCR_TABLE, *PATMDRV_TRAFFIC_DESCR_TABLE;
-+
-+typedef struct
-+{
-+ UINT32 ulInterfaceId;
-+ PATM_INTERFACE_CFG pInterfaceCfg;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_INTERFACE_CFG, *PATMDRV_INTERFACE_CFG;
-+
-+typedef struct
-+{
-+ ATM_VCC_ADDR VccAddr;
-+ PATM_VCC_CFG pVccCfg;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_VCC_CFG, *PATMDRV_VCC_CFG;
-+
-+typedef struct
-+{
-+ UINT32 ulInterfaceId;
-+ PATM_VCC_ADDR pVccAddrs;
-+ UINT32 ulNumVccs;
-+ UINT32 ulNumReturned;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_VCC_ADDRS, *PATMDRV_VCC_ADDRS;
-+
-+typedef struct
-+{
-+ UINT32 ulInterfaceId;
-+ PATM_INTERFACE_STATS pStatistics;
-+ UINT32 ulReset;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_INTERFACE_STATISTICS, *PATMDRV_INTERFACE_STATISTICS;
-+
-+typedef struct
-+{
-+ ATM_VCC_ADDR VccAddr;
-+ PATM_VCC_STATS pVccStatistics;
-+ UINT32 ulReset;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_VCC_STATISTICS, *PATMDRV_VCC_STATISTICS;
-+
-+typedef struct
-+{
-+ UINT32 ulInterfaceId;
-+ ATM_INTERFACE_LINK_INFO InterfaceCfg;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_INTERFACE_LINK_INFO, *PATMDRV_INTERFACE_LINK_INFO;
-+
-+typedef struct
-+{
-+ ATM_VCC_ADDR VccAddr;
-+ UINT32 ulNumToSend;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_TEST, *PATMDRV_TEST;
-+
-+typedef struct
-+{
-+ ATM_VCC_ADDR VccAddr;
-+ UINT32 type;
-+ BCMATM_STATUS baStatus;
-+} ATMDRV_OAM_LOOPBACK, *PATMDRV_OAM_LOOPBACK;
-+
-+#define OAM_TYPE_FUNCTION_BYTE_OFFSET 0
-+#define OAM_LB_INDICATION_BYTE_OFFSET 1
-+#define OAM_LB_CORRELATION_TAG_BYTE_OFFSET 2
-+#define OAM_LB_LOCATION_ID_BYTE_OFFSET 6
-+#define OAM_LB_SRC_ID_BYTE_OFFSET 22
-+#define OAM_LB_UNUSED_BYTE_OFFSET 38
-+#define OAM_RDI_UNUSED_BYTE_OFFSET 1
-+#define OAM_LB_CRC_BYTE_OFFSET 46
-+#define OAM_RDI_CRC_BYTE_OFFSET 46
-+#define OAM_LB_CORRELATION_TAG_LEN 4
-+#define OAM_LB_LOCATION_ID_LEN 16
-+#define OAM_LB_SRC_ID_LEN 16
-+#define OAM_LB_UNUSED_BYTE_LEN 8
-+#define OAM_RDI_UNUSED_BYTE_LEN 45
-+#define OAM_LB_CRC_BYTE_LEN 2
-+#define OAM_RDI_CRC_BYTE_LEN 2
-+#define OAM_FAULT_MANAGEMENT_LB 0x18
-+#define OAM_FAULT_MANAGEMENT_RDI 0x11
-+#define OAM_FAULT_MANAGEMENT_LB_REQUEST 1
-+#define OAM_FAULT_MANAGEMENT_LB_RESPOND 0
-+#define OAM_FAULT_MANAGEMENT_CORRELATION_VAL 0xbcbcbcbc
-+#define OAM_FAULT_MANAGEMENT_SRC_ID_3 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_SRC_ID_2 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_SRC_ID_1 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_SRC_ID_0 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_LOCATION_ID_3 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_LOCATION_ID_2 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_LOCATION_ID_1 0xffffffff
-+#define OAM_FAULT_MANAGEMENT_LOCATION_ID_0 0xffffffff
-+#define OAM_LB_UNUSED_BYTE_DEFAULT 0x6a
-+#define OAM_LB_SEGMENT_TYPE 0
-+#define OAM_LB_END_TO_END_TYPE 1
-+#define OAM_F4_LB_SEGMENT_TYPE 2
-+#define OAM_F4_LB_END_TO_END_TYPE 3
-+#define RM_PROT_ID_OFFSET 0
-+#define RM_MESSAGE_TYPE_OFFSET 1
-+#define RM_PROTOCOL_ID 1
-+#define RM_TYPE_DEFAULT 0x20 /* forward/source_generated/congested */
-+#define RM_UNUSED_BYTES_OFFSET 2
-+#define RM_UNUSED_BYTES_LEN 46
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _ATMAPIDRV_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmdiag.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmdiag.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmdiag.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmdiag.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,764 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+
-+#ifndef __ATMDIAG_H__
-+#define __ATMDIAG_H__
-+
-+//#define BRCM_6348
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+#define ATM_DIAG_FAIL -1
-+#define ATM_DIAG_PASS 0
-+#define ATM_REGADDR 0xFFFE4000
-+#define ATM_REGSIZE 0x800
-+#define ATM_TX_VPI_VCI_CAM_OFFSET 0x500
-+#define ATM_RX_VPI_VCI_CAM_OFFSET 0x600
-+#define ATM_TRAFFIC_SHAPER_OFFSET 0x700
-+#define ATM_TX_STATUS_OFFSET 0x40c
-+#define ATM_RX_STATUS_OFFSET 0x41c
-+#define ATM_RX_AAL_STATUS_OFFSET 0x428
-+#define ATM_MIP_COUNTERS_OFFSET 0x440
-+#define ATM_UTOPIA_SETTING_OFFSET 0x42c
-+#define ATM_ADSL_PHY_PORT_SETTING 0x15c
-+#define UT_MAX_TDT_ENTRIES 2
-+#define UT_MAX_MGMT_ENTRIES 4
-+#define UT_LINE_RATE (146200000) /* 344811 cells/sec, CIT = 29ns */
-+#define UT_CELL_RATE (53 * 8)
-+#define UT_MIN_PCR_SCR 310 /* ~128Kbps */
-+#define UT_MAX_PCR_SCR 344811 /* ~146.2Kpbs */
-+#define UT_MIN_MBS 2
-+#define UT_MAX_MBS 200000
-+ //#ifdef BRCM_6348 currently, the driver only support 8 VCCS
-+ //#define UT_MAX_VCCS 16
-+ //#else
-+#define UT_MAX_VCCS 8
-+ //#endif
-+#define UT_MAX_PHY_PORTS 2
-+#define UT_BASE_PORT_NUMBER 1
-+#define UT_MIN_QUEUE 1
-+#define UT_MAX_QUEUE UT_MAX_VCCS
-+#define UT_MULTI_QUEUE 1
-+#define UT_SINGLE_QUEUE 0
-+#define UT_MIN_PRIORITY 1
-+#define UT_MAX_PRIORITY 4 /* priority ranging from 1-4 */
-+#define UT_BUFFER_SIZE 20
-+#define UT_MGMT_IDX 6
-+#define UT_ENABLED 1
-+#define UT_DISABLED 0
-+#define UT_MAX_TD_INDEX UT_MAX_VCCS
-+#define UT_SSTED_TRAILER_SIZE 8
-+#define UT_DIALED_DIGITS 2
-+#define UT_FREE_CELL_Q_SIZE 800
-+#define UT_FREE_PKT_Q_SIZE 800
-+#define UT_FREE_PKT_Q_BUF_SIZE 1600
-+#define UT_RX_PKT_Q_SIZE 800
-+#define UT_RX_CELL_Q_SIZE 800
-+#define UT_AAL5_MAX_SDU_LENGTH 65535
-+#define UT_TX_FIFO_PRIORITY 4
-+#define UT_MIN_DATA_LEN 48
-+#define UT_MAX_DATA_LEN 1500
-+#define UT_BASE_VPI_NUMBER 0
-+#define UT_MAX_VPI_NUMBER 256
-+#define UT_BASE_VCI_NUMBER 32
-+#define UT_MAX_VCI_NUMBER 65536
-+#define UT_UTOPIA_MODE 1
-+#define UT_ADSL_MODE 0
-+#define UT_UTOPIA_ADSL_MODE 0x11 /* utopia port 0, adsl port 1 */
-+#define UT_TOGGLE_DISPLAY_MODE 1
-+#define UT_TOGGLE_CAPTURE_MODE 0
-+#define UT_TOGGLE_VERIFICATION_MODE 2
-+#define UT_TOGGLE_MODE_ON 1
-+#define UT_TOGGLE_MODE_OFF 0
-+#define UT_DUMP_TX_VPI_VCI_TABLE 1
-+#define UT_DUMP_RX_VPI_VCI_TABLE 2
-+#define UT_DISPLAY_STATS 1
-+#define UT_CLEAR_STATS 2
-+#define UT_TRAFFIC_DESCRIPTOR_DISPLAY 1
-+#define UT_TRAFFIC_DESCRIPTOR_MODIFY 2
-+#define UT_PORT_UTOPIA_SETTING 1
-+#define UT_GLOBAL_UTOPIA_SETTING 2
-+#define UT_DISPLAY_CAPTURED 0
-+#define UT_ERASE_CAPTURED 1
-+#define UT_CAPTURED_ERROR_STATS 2
-+#define UT_PATTERN_INCREMENT 1
-+#define UT_PATTERN_FIX 0
-+#define UT_MODIFY_OPERATION 1
-+#define UT_DISPLAY_OPERATION 0
-+#define DIAG_ATM_MODULE "bcmatmtest"
-+#define DIAG_ATM_PROC "/proc/atmtest"
-+
-+/* command is made up of 2_bytes_command|2_bytes_index */
-+/* index is ranging from 0-7 for 8 VCs */
-+#define UT_PROC_CMD_ADD_VC 1
-+#define UT_PROC_CMD_DELETE_VC 2
-+#define UT_PROC_CMD_START_SEND_VC 3
-+#define UT_PROC_CMD_SEND_MULTI_VC 4
-+#define UT_PROC_CMD_STOP_SEND_VC 5
-+#define UT_PROC_CMD_CAPTURE 6
-+#define UT_PROC_CMD_TOGGLE 7
-+#define UT_PROC_CMD_GET_STATS 8
-+#define UT_PROC_CMD_CLEAR_STATS 9
-+#define UT_PROC_CMD_SEND_MULTI_PRIORITY 10
-+#define UT_PROC_CMD_MODIFY_TRAFFIC_SHAPER 11
-+#define UT_PROC_CMD_START_SEND_ALL_VC 12
-+#define UT_PROC_CMD_ADSL_LOOPBACK 13
-+#define UT_PROC_CMD_SEND_MANAGEMENT 14
-+#define UT_PROC_CMD_ADD_MPVC 15
-+#define UT_PROC_CMD_DELETE_MPVC 16
-+#define UT_PROC_CMD_START_SEND_MPVC 17
-+#define UT_PROC_CMD_UTOPIA_SET 18
-+
-+#define UT_OAM_LB_END_TO_END 10 /* was 1 */
-+#define UT_OAM_LB_SEGMENT 11 /* was 2 */
-+#define UT_OAM_RDI_END_TO_END 3
-+#define UT_OAM_RDI_SEGMENT 4
-+#define UT_VPC_RM_TYPE 5
-+#define UT_VCC_RM_TYPE 6
-+#define UT_OAM_CRC10_SOFTWARE 0
-+#define UT_OAM_CRC10_HARDWARE 1
-+#define UT_TOGGLE_DISPLAY 0
-+#define UT_TOGGLE_CAPTURE 1
-+#define UT_TOGGLE_VERIFY 2
-+
-+#define AP_REG_OFFSET_END 0x7ff
-+#define AP_INDIRECT_RAM_ADDRESS_REG ATM_PROCESSOR_BASE + 0x7c0
-+#define AP_INDIRECT_RAM_REG ATM_PROCESSOR_BASE + 0x7c4
-+#define AP_IRQ_MASK AP_INTR_REGS_BASE+0x4
-+#define AP_IRQ_STATUS AP_INTR_REGS_BASE
-+#define AP_ROUTE_OAM_TO_RCQ 0
-+#define AP_ROUTE_OAM_TO_MCF 1
-+#define AP_IR_ASSERT 1
-+#define AP_IR_DEASSERT 0
-+#define AP_RX_STATUS_ERR_MASK 0x32ecc /* mask out idleCell, vc & unused */
-+#define AP_RX_AAL_STATUS_ERR_MASK 0x3008 /* only look at rx router stats, discard */
-+
-+typedef struct utVccCfg {
-+ UINT8 ulAalType;
-+ UINT8 ulAtmVccCpcsAcceptCorruptedPdus;
-+}UT_VCC_CFG, *pUT_VCC_CFG;
-+
-+typedef struct utTrafficDescrParmEntry {
-+ UINT32 ulTrafficDescrIndex;
-+ UINT32 ulTrafficDescrType;
-+ UINT32 ulTrafficDescrParm1;
-+ UINT32 ulTrafficDescrParm2;
-+ UINT32 ulTrafficDescrParm3;
-+ UINT32 ulTrafficDescrParm4;
-+ UINT32 ulTrafficDescrParm5;
-+ UINT32 ulTrafficDescrRowStatus;
-+ UINT32 ulServiceCategory;
-+}UT_TRAFFIC_DESCR_PARM_ENTRY,*pUT_TRAFFIC_DESCR_PARM_ENTRY;
-+
-+typedef struct utMultiSendInfo {
-+ UINT32 len;
-+ UINT8 pattern;
-+ UINT8 dataByte;
-+ UINT32 numSent;
-+ UINT32 rate;
-+ UINT8 circuitType;
-+ UINT32 cellsPerPdu;
-+ UINT32 delay;
-+ UINT32 txCount;
-+}UT_MULTISEND_INFO, *pUT_MULTISEND_INFO;
-+
-+typedef struct utUserSendInfo {
-+ UINT32 len;
-+ UINT8 incremental;
-+ UINT8 dataByte;
-+ UINT32 rate;
-+ UINT32 aalType;
-+ UINT32 delay;
-+ UINT32 txCount; /* number of cells/pkt user want to send */
-+ UINT8 multiQPriority;
-+ UINT8 basePriority;
-+ UINT8 numOfQueues;
-+}UT_USER_SEND_INFO, *pUT_USER_SEND_INFO;
-+
-+typedef struct utVccAddrInfo {
-+ ATM_VCC_ADDR vccAddr;
-+ UINT8 priority; /* priority of the queue of this VCC */
-+ UINT8 numOfQueues;
-+}UT_VCC_ADDR_INFO, *pUT_VCC_ADDR_INFO;
-+
-+typedef struct utVccListInfo {
-+ UINT32 handle;
-+ UINT32 managementHandle;
-+}UT_VCC_LIST_INFO, *pUT_VCC_LIST_INFO;
-+
-+typedef struct atmCaptureHdr {
-+ UINT8 valid;
-+ UINT8 vpi;
-+ UINT16 vci;
-+ UINT8 circuitType;
-+ UINT8 cid;
-+ UINT8 uuData8;
-+ UINT8 uuData5;
-+ UINT8 ucFlags;
-+ UINT32 dataLen;
-+ UINT8 *dataPtr;
-+ UINT8 interface;
-+} ATM_CAPTURE_HDR, *pATM_CAPTURE_HDR;
-+
-+typedef struct atmTxBufferHdr {
-+ ATM_VCC_DATA_PARMS dataParms;
-+ struct atmTxBufferHdr *next;
-+} ATM_TX_BUFFER_HDR, *pATM_TX_BUFFER_HDR;
-+
-+typedef struct tx_buffer_list{
-+ pATM_TX_BUFFER_HDR headPtr;
-+ pATM_TX_BUFFER_HDR tailPtr;
-+ UINT32 len;
-+ UINT32 seqNumber;
-+ UINT32 lastSent;
-+ UINT32 sentInterval;
-+ UINT32 cellsPerPdu;
-+} ATM_TX_BUFFER_LIST, *pATM_TX_BUFFER_LIST;
-+
-+typedef struct atmTestError {
-+ UINT32 total;
-+ UINT32 data_err;
-+ UINT32 data_length;
-+ UINT32 sequence_err;
-+ UINT32 aalCrcError;
-+ UINT32 aalCpcsLen0;
-+ UINT32 aalLenError;
-+ UINT32 aalSduLenError;
-+ UINT32 gfc;
-+ UINT32 crc;
-+ UINT32 pti;
-+ UINT32 pmi_2sml;
-+ UINT32 pmi_2big;
-+ UINT32 vcam_mme;
-+ UINT32 pne;
-+ UINT32 came_1;
-+ UINT32 came_0;
-+ UINT32 dc_1;
-+ UINT32 dc_0;
-+ UINT32 ec_1;
-+ UINT32 ec_0;
-+ UINT32 aal5_drop_cell;
-+ UINT32 routerDiscard_1;
-+ UINT32 routerDiscard_0;
-+ UINT32 camLkup;
-+ UINT32 idle;
-+ UINT32 hec;
-+} ATM_TEST_ERROR, *pATM_TEST_ERROR;
-+
-+typedef struct atmMibStats {
-+ UINT32 tx_aal5_0;
-+ UINT32 tx_aal5_1;
-+ UINT32 tx_aal0_0;
-+ UINT32 tx_aal0_1;
-+ UINT32 rx_aal5_0;
-+ UINT32 rx_aal5_1;
-+ UINT32 rx_aal0_0;
-+ UINT32 rx_aal0_1;
-+} ATM_MIB_STATS, *pATM_MIB_STATS;
-+
-+/* These are from TX status register; they are collected every 1 second interval */
-+typedef struct atmTxStats {
-+ UINT32 fifoFull; /* fifoFull_port0 */
-+ UINT32 aal2bigErr;
-+ UINT32 aal5LenErr;
-+ UINT32 aal5MaxLenErr;
-+ UINT32 droppedCellErr; /* tx aal or tx atm dropped cell port 0 */
-+ UINT32 aal5PortNotEnableErr; /* pne_err_port0 */
-+ UINT32 fifoFullErr; /* ff_err_port0 */
-+ UINT32 aal5CountErr;
-+} ATM_TX_STATS, *pATM_TX_STATS;
-+
-+/* these are from RX ATM and RX AAL status registers */
-+typedef struct atmRxStats {
-+ UINT32 gfcErr;
-+ UINT32 crcErr;
-+ UINT32 ptiErr;
-+ UINT32 vcamMmErr; /* vcam_mme VCAM multiple match error */
-+ UINT32 camLookupErr; /* came_port0 */
-+ UINT32 portNotEnableErr; /* pne_err */
-+ UINT32 discardErr; /* dc_port0 */
-+ UINT32 errCellErr; /* ec_port0 */
-+ UINT32 routerDrop; /* rxRouterStat_port0 */
-+ UINT32 aalDrop; /* aal5d */
-+#ifdef BRCM_6348
-+ UINT32 overflowErr;
-+ UINT32 uto2small;
-+ UINT32 uto2big;
-+#endif
-+} ATM_RX_STATS, *pATM_RX_STATS;
-+
-+typedef struct atmStats
-+{
-+ ATM_MIB_STATS mibStats;
-+ ATM_TX_STATS txStats;
-+ ATM_RX_STATS rxStats;
-+}ATM_STATS, *pATM_STATS;
-+
-+typedef struct atm_test_tx_info {
-+ UINT32 index;
-+ UINT32 len;
-+ UINT32 lineTxInterval;
-+ UINT32 count;
-+ UINT8 incremental;
-+ UINT8 dataByte;
-+ UINT8 aalType;
-+ UINT8 numOfQueues;
-+ UINT8 basePriority;
-+ UINT32 handle;
-+ UINT32 rate;
-+ UINT32 sending;
-+ UINT8 managementType; /* f4, f5, rm */
-+ UINT8 interleaveManagement;
-+ UINT16 managementVpi;
-+ UINT16 managementVci;
-+ UINT16 managementCrc;
-+ UINT32 managementInterface;
-+} ATM_TEST_TX_INFO, *pATM_TEST_TX_INFO;
-+
-+typedef struct atm_test_info {
-+ ATM_TEST_TX_INFO atmTestTxInfo[UT_MAX_VCCS+1]; /* one extra for f4 since it doesn't
-+ have a vcc created, index is last one */
-+ UT_TRAFFIC_DESCR_PARM_ENTRY ms_Tdt[UT_MAX_TD_INDEX];
-+ UT_VCC_CFG ms_VccCfgs[UT_MAX_VCCS];
-+ UT_VCC_ADDR_INFO ms_VccAddrs[UT_MAX_VCCS];
-+ UINT32 commandStatus; /* command-2 bytes, status 2 bytes */
-+ ATM_TEST_ERROR m_ucTestError[UT_MAX_VCCS+1];
-+ ATM_STATS atmStats;
-+ UINT8 displayData; /* current mode: 0=disable, 1=enable */
-+ UINT8 captureData; /* current mode: 0=disable, 1=enable */
-+ UINT8 verifyData; /* current mode: 0=disable, 1=enable */
-+ UINT32 pduSent[UT_MAX_VCCS+1]; /* one extra for f4 */
-+ UINT32 pduReceived[UT_MAX_VCCS+1];
-+ UINT32 multiPriority;
-+} ATM_TEST_INFO, *pATM_TEST_INFO;
-+
-+typedef struct atm_verfication_info {
-+ int seqNumber;
-+ UINT8 incremental;
-+ UINT8 dataByte;
-+ int len;
-+} ATM_VERIFICATION_INFO, *pATM_VERIFICATION_INFO;
-+
-+typedef struct atm_data_struct {
-+ PATM_VCC_DATA_PARMS data;
-+ ATM_VCC_ADDR vccAddr;
-+} ATM_DATA_STRUCT, *PATM_DATA_STRUCT;
-+
-+typedef struct atmDiagCb {
-+ ATM_TRAFFIC_DESCR_PARM_ENTRY ms_Tdt[UT_MAX_TD_INDEX];
-+ ATM_VCC_CFG ms_VccCfgs[UT_MAX_VCCS];
-+ UT_VCC_ADDR_INFO ms_VccAddrs[UT_MAX_VCCS];
-+ UINT32 ms_multiPriority[UT_MAX_VCCS];
-+ ATM_TX_BUFFER_LIST mTxHdrQ[UT_MAX_VCCS+1]; /* tx Q; an extra one for f4 cells */
-+ UT_VCC_LIST_INFO m_ulVccList[UT_MAX_VCCS+1]; /* tx Q; an extra one for f4 cells */
-+ UINT32 managementHandle_port0;
-+ UINT32 managementHandle_port1;
-+ UINT32 rxTaskId;
-+ UINT32 txTaskId;
-+ UINT32 statsTaskId;
-+ UINT32 rxTaskSem; /* protect Rx Q */
-+ UINT32 txTaskSem; /* protect Tx Q */
-+ UINT32 rxQMuSem; /* rx task semphore */
-+ UINT32 txQMuSem; /* tx task semphore */
-+ UINT32 txTaskExit; /* clean up purpose */
-+ UINT32 rxTaskExit; /* clean up purpose */
-+ ATM_DATA_STRUCT m_pDpHead; /* rx Q */
-+ ATM_DATA_STRUCT m_pDpTail; /* rx Q */
-+ UINT8 displayData; /* 1 to display rx data on screen; default is 0 */
-+ UINT8 captureData;
-+ UINT8 verifyData;
-+ ATM_CAPTURE_HDR m_ulData[UT_BUFFER_SIZE];
-+ int m_ulBufferPosition;
-+ UINT32 m_ulCurSeqNumber;
-+ ATM_TEST_ERROR m_ucTestError[UT_MAX_VCCS+1];
-+ ATM_STATS m_atmStats;
-+ ATM_VERIFICATION_INFO dataVerficationInfo[UT_MAX_VCCS];
-+ UINT8 txStop;
-+} ATM_DIAG_CB, *pATM_DIAG_CB;
-+
-+/* 0xfffe15c */
-+typedef union phyLastDescConfig {
-+ struct {
-+ UINT32 unused:22;
-+ UINT32 rxCfg:2;
-+ UINT32 unused1:2;
-+ UINT32 txCfg:2;
-+ UINT32 numRxDesc:2;
-+ UINT32 numTxDesc:2;
-+ }bit;
-+ UINT32 reg;
-+} PHY_LAST_DESC_CONFIG, *pPHY_LAST_DESC_CONFIG;
-+
-+/* 0xfffe4500-0xfffe45ff */
-+typedef union txAtmVpiVciTable {
-+ struct {
-+ UINT32 unused:6;
-+ UINT32 swFlags:1;
-+ UINT32 crcEnable:1;
-+ UINT32 vpi: 8;
-+ UINT32 vci:16;
-+ }bit;
-+ UINT32 entry;
-+} TX_ATM_VPI_VCI_TABLE, *pTX_ATM_VPI_VCI_TABLE;
-+
-+/* 0xfffe4600-0xfffe46ff */
-+typedef union RxAtmVpiVciTable {
-+ struct {
-+ UINT32 unused:6;
-+ UINT32 valid:1;
-+ UINT32 vpi:8;
-+ UINT32 vci:16;
-+ UINT32 port:1;
-+ } camSide; /* even; */
-+ struct {
-+ UINT32 unused:21;
-+ UINT32 userDataIR:1; /* assert IR for user data immediate response */
-+ UINT32 oamIR:1; /* assert IR for OAM immediate response */
-+ UINT32 rmIR:1; /* assert IR for RM immediate response */
-+ UINT32 vcId:3; /* VCID */
-+ UINT32 userDataCrcEnable:1;
-+ UINT32 oamRouteCode:1; /* 0=route to rx cell q; 1= route to rx mips cell fifo */
-+ UINT32 udrc:1; /* User Data Routing Code */
-+ UINT32 circuitType:2;
-+ } ramSide; /* odd; */
-+ UINT32 entry;
-+} RX_ATM_VPI_VCI_TABLE, *pRX_ATM_VPI_VCI_TABLE;
-+
-+/* 6345; 0xfffe4300- 0xfffe43ff */
-+typedef union atmIntrRegs {
-+ struct {
-+ UINT32 unused:20;
-+ UINT32 vcamMm:1; /* RX VCAM multiple match */
-+ UINT32 rxRtDc:1; /* Rx Router discard cell due to full rx buffer */
-+ UINT32 rpqIr:1; /* Receive Packet Queue got a packet tagged with immediate response */
-+ UINT32 rcqIr:1; /* Receive Cell Queue got a cell tagged with immediate response */
-+ UINT32 rpqWd:1; /* RX Pkt Q watchdog- no pkt rxed for the duration defined in RCQ wd timer */
-+ UINT32 rcqWd:1; /* RX Cell Q watchdog */
-+ UINT32 mibHf:1; /* one or more of the MIB coutners is half full */
-+ UINT32 fpqAe:1; /* Free Packet Queue almost empty- has fewer buffers than FPQ watermark */
-+ UINT32 rpqAf:1; /* Rx Packet Queue has exceeded RPQ watermark */
-+ UINT32 fcqAe:1; /* Free Cell Queue almost Empty */
-+ UINT32 rcqAf:1; /* Rx Cell Q almost full */
-+ UINT32 txs:1; /* Tx SDRAM Interrupt- one of the TX SDRAM sub-channels intr is set */
-+ }statusMaskBit; /* status & interrupt mask */
-+#ifdef BRCM_6348
-+ struct {
-+ UINT32 unused1:8;
-+ UINT32 sdqMask:8; /* TX SDRAM watchdog timer interrupt */
-+ UINT32 unused:4;
-+ UINT32 irqMask:12;
-+ }irqMaskBit;
-+ struct {
-+ UINT32 unused:28;
-+ UINT32 sdWd:4; /* TX SDRAM Watchdog */
-+ }txSdramValue;
-+#else /* 6345 */
-+ struct {
-+ UINT32 unused:16;
-+ UINT32 irqMask:16;
-+ }irqMaskBit;
-+#endif /* BRCM_6348 */
-+ struct {
-+ UINT32 fcqAeWm:16; /* Free Cell Q almost empty watermark */
-+ UINT32 rcqAfWm:16; /* Rx Cell Q almost full watermark */
-+ }rxCellQBit;
-+ struct {
-+ UINT32 fpqAeWm:16; /* Free Packet Q almost empty watermark */
-+ UINT32 rpqAfWm:16; /* Rx Paket Q almost full watermark */
-+ }rxPktQBit;
-+ struct {
-+ UINT32 pktWdTo:16; /* Watchdog timeout value in 50 uSec increments */
-+ UINT32 cellWdTo:16; /* Watchdog timeout value in 50 uSec increments */
-+ }rxWdTimer;
-+} ATM_INTR_REGS, *pATM_INTR_REGS;
-+
-+/* 0xfffe4700-0xfffe47ff */
-+typedef union atmShaperCtrlReg {
-+#ifdef BRCM_6348
-+ struct {
-+ UINT32 unused:7;
-+ UINT32 rst:1; /* reset shaper */
-+ UINT32 pcr:12; /* peak cell rate */
-+ UINT32 mpEn:1; /* Multi-priority enabled */
-+ UINT32 priority:2; /* source scheduling sub-priority */
-+ UINT32 mcrEnable:1;/* Minimum Cell Rate Enabled */
-+ UINT32 alg:2; /* source shaping algorithm */
-+ UINT32 pid:1; /* Source destination Port ID */
-+ UINT32 vcid:4; /* source VC ID */
-+ UINT32 enable:1; /* source shaper enable */
-+ }bit;
-+#else /* 6345 */
-+ struct {
-+ UINT32 unused:9;
-+ UINT32 rst:1; /* reset shaper */
-+ UINT32 pcr:12; /* peak cell rate */
-+ UINT32 mpEn:1; /* Multi-priority enabled */
-+ UINT32 priority:2; /* source scheduling sub-priority */
-+ UINT32 alg:2; /* source shaping algorithm */
-+ UINT32 pid:1; /* Source destination Port ID */
-+ UINT32 vcid:3; /* source VC ID */
-+ UINT32 enable:1; /* source shaper enable */
-+ }bit;
-+#endif /* BRCM_6348 */
-+ UINT32 entry;
-+} ATM_SHAPER_CTRL_REG, *pATM_SHAPER_CTRL_REG;
-+
-+typedef union atmShaperVbrReg {
-+ struct {
-+ UINT32 unused:1;
-+ UINT32 bt:19;
-+ UINT32 scr:12;
-+ }bit;
-+ UINT32 entry;
-+} ATM_SHAPER_VBR_REG, *pATM_SHAPER_VBR_REG;
-+
-+#ifdef BRCM_6348
-+typedef union atmShaperMcrReg {
-+ struct {
-+ UINT32 unused:20;
-+ UINT32 mcr:12;
-+ }bit;
-+ UINT32 entry;
-+} ATM_SHAPER_MCR_REG, *pATM_SHAPER_MCR_REG;
-+#endif /* BRCM_6348 */
-+
-+typedef union atmCellHdr {
-+ struct {
-+ UINT32 gfc:4;
-+ UINT32 msb_vpi:4;
-+ UINT32 vpi:4;
-+ UINT32 msb_vci:4;
-+ UINT32 vci:8;
-+ UINT32 lsb_vci:4;
-+ UINT32 pt:3;
-+ UINT32 clp:1;
-+ }bit;
-+ UINT32 word1;
-+} ATM_CELL_HDR, *pATM_CELL_HDR;
-+#define ATM_RX_AAL_STATUS_ERROR_MASK_PORT0 0x108
-+
-+/* 0xfffe4428 */
-+typedef union atmRxAalStatusReg {
-+ struct {
-+ UINT32 unused:22;
-+ UINT32 rxRouterStat_port1:1; /* RX cells dropped due to full cell buffer; */
-+ UINT32 rxRouterStat_port0:1; /* bit 8=port 0 fifo rx drop cell */
-+ UINT32 aal0ccnt_port1:1; /* aal0 cell count has been incremented; bit 4=port0 */
-+ UINT32 aal0ccnt_port0:1; /* aal0 cell count has been incremented; bit 4=port0 */
-+ UINT32 aal5ccnt_port1:1; /* aal5 cell count has been incremented; bit 4=port0 */
-+ UINT32 aal5ccnt_port0:1; /* aal5 cell count has been incremented; bit 4=port0 */
-+ UINT32 aal5d:1; /* aal5 dropped cells */
-+ UINT32 aal5p:1; /* aal5 pdu received */
-+ UINT32 aalxp:1; /* non aal5 received */
-+ UINT32 aal5c:1; /* aal5 received cells */
-+ }bit;
-+ UINT32 reg;
-+} ATM_RX_AAL_STATUS_REG, *pATM_RX_AAL_STATUS_REG;
-+/* 0xfffe441c */
-+#define ATM_RX_STATUS_ERROR_MASK_PORT0 0x32354
-+typedef union atmRxStatusReg {
-+ struct {
-+ UINT32 unused:14;
-+ UINT32 gfc_err:1; /* non zero gfc detected */
-+ UINT32 crc_err:1; /* CRC-10 error detected on OAM/RM cells */
-+#ifdef BRCM_6348
-+ UINT32 rx_flow_err:1; /* Receive cell dropped by RXATM layer 'cause RX cell FIFO full */
-+#else /* 6345 */
-+ UINT32 unused1:1;
-+#endif
-+ UINT32 idle_err:1; /* Idle cell detected */
-+ UINT32 pti_err:1; /* PTI Error detected (i.e. PT=binary 111) */
-+#ifdef BRCM_6348
-+ UINT32 unused2:1;
-+ UINT32 uto2small:1;/* Too small of a cell from RX Utopia */
-+ UINT32 uto2big:1; /* Too big of a cell from RX Utopia */
-+#else /* BRCM_6345 */
-+ UINT32 unused2:3;
-+#endif
-+ UINT32 vcam_mme:1; /* VCAM multiple match error */
-+ UINT32 pne_err:1; /* port not enable error */
-+ UINT32 came_port1:1; /* PER port cam lookup error; bit6=port 0 */
-+ UINT32 came_port0:1; /* PER port cam lookup error; bit6=port 0 */
-+ UINT32 dc_port1:1; /* per port dropped cell; bit 4= port 0 */
-+ UINT32 dc_port0:1; /* per port dropped cell; bit 4= port 0 */
-+ UINT32 ec_port1:1; /* per port erred cell; bit 2=port 0 */
-+ UINT32 ec_port0:1; /* per port erred cell; bit 2=port 0 */
-+ UINT32 vc_port1:1; /* per port valid cell; bit 0=port 0 */
-+ UINT32 vc_port0:1; /* per port valid cell; bit 0=port 0 */
-+ }bit;
-+ UINT32 reg;
-+} ATM_RX_STATUS_REG, *pATM_RX_STATUS_REG;
-+
-+#define ATM_TX_STATUS_ERROR_MASK_PORT0 0x41e80c54
-+typedef union atmTxStatusReg {
-+ struct {
-+ UINT32 fifoFull_port1:1; /* per port FIFO Full Status (1=full) */
-+ UINT32 fifoFull_port0:1; /* per port FIFO Full Status (1=full) */
-+ UINT32 unused:1;
-+ UINT32 aal0_port1:1; /* aal0_port1 tx */
-+ UINT32 aal0_port0:1; /* aal0_port0 tx */
-+ UINT32 aal5_port1:1; /* aal5_port1 tx */
-+ UINT32 aal5_port0:1; /* aal5_port0 tx */
-+ UINT32 aal2big:1; /* aal too big cell input */
-+ UINT32 aal5liErr:1;/* aal5 length indicator error */
-+ UINT32 aal5mlErr:1;/* aal5 max length error */
-+ UINT32 aal5ctErr:1;/* aal5 count error */
-+ UINT32 unused1:1;
-+ UINT32 aal5d:1; /* aal5 drop cell */
-+ UINT32 aal5p:1; /* aal5 pdu passed */
-+ UINT32 aalxc:1; /* non aal5 cell passed */
-+ UINT32 aal5c:1; /* aal cell passed */
-+ UINT32 dropCell_port1:1; /* tx aal or tx atm dropped cell */
-+ UINT32 dropReq_port1:1; /* one of the port dropped request */
-+ UINT32 scheCell_port1:1; /* per port scheduled cell */
-+ UINT32 sit_port1:1; /* per port schedule interval timer count event */
-+ UINT32 dropCell_port0:1; /* tx aal or tx atm dropped cell */
-+ UINT32 dropReq_port0:1; /* one of the port dropped request */
-+ UINT32 scheCell_port0:1; /* per port scheduled cell */
-+ UINT32 sit_port0:1; /* per port schedule interval timer count event */
-+ UINT32 pne_err_port1:1; /* port not enable error */
-+ UINT32 pne_err_port0:1; /* port not enable error */
-+ UINT32 ff_err_port1:1; /* fifo full error */
-+ UINT32 ff_err_port0:1; /* fifo full error */
-+ UINT32 dc_port1:1; /* per port dropped cell */
-+ UINT32 dc_port0:1; /* per port dropped cell */
-+ UINT32 pc_port1:1; /* per port processed cell */
-+ UINT32 pc_port0:1; /* per port processed cell */
-+ }bit;
-+ UINT32 reg;
-+} ATM_TX_STATUS_REG, *pATM_TX_STATUS_REG;
-+
-+
-+typedef union atmTxHdrReg {
-+ struct {
-+ UINT32 unused1:14;
-+ UINT32 aal5SwTrailer:1; /* software trailer enable */
-+ UINT32 schedCrst_1:1; /* scheuler reset */
-+ UINT32 schedCrst_0:1;
-+ UINT32 unused:1;
-+ UINT32 haltShpt_1:1; /* halt shaper, used for dynamic configuration of shaper */
-+ UINT32 haltShpt_0:1;
-+ UINT32 altGFC:4; /* alternate GFC value */
-+ UINT32 altGFCen_1:1;
-+ UINT32 altGFCen_0:1; /* alternate GFC mode enable */
-+ UINT32 fRst_1:1;
-+ UINT32 fRst_0:1;
-+ UINT32 oamCrcEn_1:1;
-+ UINT32 oamCrcEn_0:1;
-+ UINT32 txEn_1:1;
-+ UINT32 txEn_0:1;
-+ }bit;
-+ UINT32 reg;
-+} ATM_TX_HDR_CFG_REG, *pATM_TX_HDR_CFG_REG;
-+
-+typedef union rxAalError {
-+ struct {
-+ UINT8 crc:1; /* aal5 CRC error */
-+ UINT8 cpcsLen0:1; /* aal5 cpcsLen error */
-+ UINT8 length:1; /* aal5 len error */
-+ UINT8 maxSduExceed:1; /* max sdu exceed error */
-+ UINT8 unused:4;
-+ }bit;
-+ UINT8 entry;
-+} RX_AAL_ERROR;
-+
-+typedef union rxAtmError {
-+ struct {
-+ UINT8 pne:1; /* port not enable error */
-+ UINT8 hec:1; /* HEC error */
-+ UINT8 pti:1; /* pti error */
-+ UINT8 idle:1; /* idle rx */
-+ UINT8 camLkup:1; /* cam look up error */
-+ UINT8 unused:1;
-+ UINT8 oamCrc:1; /* oam crc */
-+ UINT8 gfc:1; /* gfc error */
-+ }bit;
-+ UINT8 entry;
-+} RX_ATM_ERROR;
-+
-+/* 0xfffe442c */
-+typedef union atmUtopiaCfg {
-+ struct {
-+ UINT32 unused:26;
-+ UINT32 rxLevel2:1; /* when set=level 2, when 0=level 1 */
-+ UINT32 rxEn:1; /* enable RX Utopia Operation */
-+ UINT32 unused1:2;
-+ UINT32 txLevel2:1; /* when set=level 2, when 0=level 1 */
-+ UINT32 txEn:1; /* enable TX Utopia Operation */
-+ }bit;
-+ UINT32 entry;
-+} ATM_UTOPIA_CFG, *pATM_UTOPIA_CFG;
-+
-+typedef union portSchedulerCfg {
-+ struct {
-+ UINT32 cit:16;
-+ UINT32 unused:12;
-+ UINT32 mode:2;
-+ UINT32 arb:1;
-+ UINT32 en:1;
-+ }bit;
-+ UINT32 entry;
-+} ATM_PORT_SCHEDULER_CFG, *pATM_PORT_SCHEDULER_CFG;
-+
-+/* memory map operation definition */
-+typedef struct atm_regs {
-+ int kmem_fd;
-+ char *mmap_addr;
-+ unsigned long addr;
-+ unsigned int size;
-+ unsigned int offset;
-+} atm_regs;
-+
-+int getVccNextIndex(void);
-+void removeVccIndex(int index);
-+int isVpiVciExisted(UINT32 interface, UINT16 vpi, UINT16 vci);
-+void atmDiagInit(void);
-+BCMATM_STATUS bcmAtmDiagInit(void);
-+BCMATM_STATUS bcmAtmDiagUnInit(void);
-+BCMATM_STATUS bcmAtmAddVccCommand(pUT_VCC_ADDR_INFO pVccAddrs, pUT_VCC_CFG pVccCfg,
-+ pUT_TRAFFIC_DESCR_PARM_ENTRY pTd);
-+BCMATM_STATUS bcmAtmSendVccCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmCaptureCommand(int mode);
-+BCMATM_STATUS bcmAtmSendManagementCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmDeleteVccCommand(pUT_VCC_ADDR_INFO pVccAddrs);
-+BCMATM_STATUS bcmAtmSendAllVccsCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmSendMultiPriorityCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmSendLoopbackCommand(UINT8 mode);
-+BCMATM_STATUS bcmAtmAddMPVccCommand(pUT_VCC_ADDR_INFO pVccAddrs, pUT_VCC_CFG pVccCfg,
-+ pUT_TRAFFIC_DESCR_PARM_ENTRY pTd);
-+BCMATM_STATUS bcmAtmDeleteMPVccCommand(pUT_VCC_ADDR_INFO pVccAddrs);
-+BCMATM_STATUS bcmAtmSendMPVccCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmSendMultiPriorityCommand(pATM_TEST_TX_INFO pAtmInfo);
-+BCMATM_STATUS bcmAtmModifyTDCommand(pUT_TRAFFIC_DESCR_PARM_ENTRY pTD, UINT32 index);
-+int bcmAtmGetStatsCommand(int reset);
-+int bcmAtmToggleVerifyCommand(void);
-+int bcmAtmToggleCaptureCommand(void);
-+int bcmAtmToggleDisplayCommand(void);
-+int bcmAtmStopTxCommand(void);
-+int isVpiVciExisted(UINT32 interface, UINT16 vpi, UINT16 vci);
-+int bcmDiag_unmapregs(atm_regs *mapregs);
-+atm_regs *bcmDiag_mapregs(unsigned long addr, int size);
-+int bcmDiagGetVerificationStats(int vcc,char *pResult);
-+void bcmDiagClearSARstats(void);
-+void bcmDiagReadSARstats(int parm);
-+int bcmDiagGetSARStats(char *pResult);
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmosservices.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmosservices.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/atmosservices.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/atmosservices.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,98 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+//**************************************************************************
-+// File Name : BcmAtmApi.h
-+//
-+// Description: This file contains the definitions, structures and function
-+// prototypes for the Broadcom Asynchronous Transfer Mode (ATM)
-+// Application Program Interface (API).
-+//
-+// Updates : 09/15/2000 lat. Created.
-+//**************************************************************************
-+
-+#if !defined(_ATMOSSERVICES_H_)
-+#define _ATMOSSERVICES_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+//**************************************************************************
-+// Constant Definitions
-+//**************************************************************************
-+#define RTN_SUCCESS 0
-+#define RTN_ERROR 1
-+#define USE_CURRENT_THREAD_PRIORITY 0
-+
-+//**************************************************************************
-+// Type Definitions
-+//**************************************************************************
-+typedef void (*FN_GENERIC) (void *);
-+typedef struct AtmOsFuncs
-+{
-+ FN_GENERIC pfnAlloc;
-+ FN_GENERIC pfnFree;
-+ FN_GENERIC pfnDelay;
-+ FN_GENERIC pfnCreateSem;
-+ FN_GENERIC pfnRequestSem;
-+ FN_GENERIC pfnReleaseSem;
-+ FN_GENERIC pfnDeleteSem;
-+ FN_GENERIC pfnDisableInts;
-+ FN_GENERIC pfnEnableInts;
-+ FN_GENERIC pfnInvalidateCache;
-+ FN_GENERIC pfnFlushCache;
-+ FN_GENERIC pfnGetTopMemAddr;
-+ FN_GENERIC pfnBlinkLed;
-+ FN_GENERIC pfnGetSystemTick;
-+ FN_GENERIC pfnStartTimer;
-+ FN_GENERIC pfnPrintf;
-+} ATM_OS_FUNCS, *PATM_OS_FUNCS;
-+
-+//**************************************************************************
-+// Function Prototypes
-+//**************************************************************************
-+
-+UINT32 AtmOsInitialize( PATM_OS_FUNCS pFuncs );
-+char *AtmOsAlloc( UINT32 ulSize );
-+void AtmOsFree( char *pBuf );
-+UINT32 AtmOsCreateThread( char *pszName, void *pFnEntry, UINT32 ulFnParm,
-+ UINT32 ulPriority, UINT32 ulStackSize, UINT32 *pulThreadId );
-+UINT32 AtmOsCreateSem( UINT32 ulInitialState );
-+UINT32 AtmOsRequestSem( UINT32 ulSem, UINT32 ulTimeoutMs );
-+void AtmOsReleaseSem( UINT32 ulSem );
-+void AtmOsDeleteSem( UINT32 ulSem );
-+UINT32 AtmOsDisableInts( void );
-+void AtmOsEnableInts( UINT32 ulLevel );
-+void AtmOsDelay( UINT32 ulTimeoutMs );
-+UINT32 AtmOsTickGet( void );
-+UINT32 AtmOsTickCheck( UINT32 ulWaitTime, UINT32 ulMsToWait );
-+void AtmOsInvalidateCache( void *pBuf, UINT32 ulLength );
-+void AtmOsFlushCache( void *pBuf, UINT32 ulLength );
-+char *AtmOsTopMemAddr( void );
-+void AtmOsBlinkLed( void );
-+UINT32 AtmOsInitDeferredHandler( void *pFnEntry, UINT32 ulFnParm,
-+ UINT32 ulTimeout );
-+void AtmOsScheduleDeferred( UINT32 ulHandle );
-+void AtmOsUninitDeferredHandler( UINT32 ulHandle );
-+UINT32 AtmOsStartTimer( void *pFnEntry, UINT32 ulFnParm, UINT32 ulTimeout );
-+void AtmOsPrintf( char *, ... );
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _ATMOSSERVICES_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcm_common.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcm_common.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcm_common.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcm_common.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,48 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2004 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+
-+#ifndef __BCM_COMMON_H
-+#define __BCM_COMMON_H
-+
-+#if defined(CONFIG_BCM96338)
-+#include <6338_common.h>
-+#endif
-+#if defined(CONFIG_BCM96345)
-+#include <6345_common.h>
-+#endif
-+#if defined(CONFIG_BCM96348)
-+#include <6348_common.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,5) /* starting from 2.4.5 */
-+#define skb_dataref(x) (&skb_shinfo(x)->dataref)
-+#else
-+#define skb_dataref(x) skb_datarefp(x)
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,19) /* starting from 2.4.19 */
-+#define VIRT_TO_PHY(a) (((unsigned long)(a)) & 0x1fffffff)
-+#else
-+#define VIRT_TO_PHY virt_to_phys
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#define __save_and_cli save_and_cli
-+#define __restore_flags restore_flags
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcm_map.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcm_map.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcm_map.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcm_map.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,31 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2004 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+
-+#ifndef __BCM_MAP_H
-+#define __BCM_MAP_H
-+
-+#if defined(CONFIG_BCM96338)
-+#include <6338_map.h>
-+#endif
-+#if defined(CONFIG_BCM96345)
-+#include <6345_map.h>
-+#endif
-+#if defined(CONFIG_BCM96348)
-+#include <6348_map.h>
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmadsl.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmadsl.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmadsl.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmadsl.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,199 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+//**************************************************************************
-+// File Name : Adsl.h
-+//
-+// Description: This file contains the definitions, structures and function
-+// prototypes for ADSL PHY interface
-+//
-+//**************************************************************************
-+#if !defined(_BCMADSL_H_)
-+#define _BCMADSL_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+/* Incldes. */
-+#include "AdslMibDef.h"
-+
-+//**************************************************************************
-+// Type Definitions
-+//**************************************************************************
-+
-+// Return status values
-+typedef enum BcmAdslStatus
-+{
-+ BCMADSL_STATUS_SUCCESS = 0,
-+ BCMADSL_STATUS_ERROR
-+} BCMADSL_STATUS;
-+
-+// Return status values
-+typedef enum AdslLinkState
-+{
-+ BCM_ADSL_LINK_UP = 0,
-+ BCM_ADSL_LINK_DOWN,
-+ BCM_ADSL_TRAINING_G992_EXCHANGE,
-+ BCM_ADSL_TRAINING_G992_CHANNEL_ANALYSIS,
-+ BCM_ADSL_TRAINING_G992_STARTED,
-+ BCM_ADSL_TRAINING_G994,
-+ BCM_ADSL_G994_NONSTDINFO_RECEIVED,
-+ BCM_ADSL_BERT_COMPLETE,
-+ BCM_ADSL_ATM_IDLE,
-+ BCM_ADSL_EVENT,
-+ BCM_ADSL_G997_FRAME_RECEIVED,
-+ BCM_ADSL_G997_FRAME_SENT
-+} ADSL_LINK_STATE;
-+
-+#ifndef DISABLE_ADSL_OLD_DEF
-+#define ADSL_LINK_UP BCM_ADSL_LINK_UP
-+#define ADSL_LINK_DOWN BCM_ADSL_LINK_DOWN
-+#endif
-+
-+/* ADSL test modes */
-+typedef enum AdslTestMode
-+{
-+ ADSL_TEST_NORMAL = 0,
-+ ADSL_TEST_REVERB,
-+ ADSL_TEST_MEDLEY,
-+ ADSL_TEST_SELECT_TONES,
-+ ADSL_TEST_NO_AUTO_RETRAIN,
-+ ADSL_TEST_MARGIN_TWEAK,
-+ ADSL_TEST_ESTIMATE_PLL_PHASE,
-+ ADSL_TEST_REPORT_PLL_PHASE_STATUS,
-+ ADSL_TEST_AFELOOPBACK,
-+ ADSL_TEST_L3,
-+ ADSL_TEST_DIAGMODE,
-+ ADSL_TEST_L0
-+} ADSL_TEST_MODE;
-+
-+// ADSL_CHANNEL_ADDR Contains ADSL Utopia PHY addresses
-+typedef struct AdslChannelAddr
-+{
-+ UINT16 usFastChannelAddr;
-+ UINT16 usInterleavedChannelAddr;
-+} ADSL_CHANNEL_ADDR, *PADSL_CHANNEL_ADDR;
-+
-+// ADSL_CONNECTION_INFO Contains ADSL Connection Info
-+typedef struct AdslConnectionInfo
-+{
-+ ADSL_LINK_STATE LinkState;
-+ UINT32 ulFastUpStreamRate;
-+ UINT32 ulFastDnStreamRate;
-+ UINT32 ulInterleavedUpStreamRate;
-+ UINT32 ulInterleavedDnStreamRate;
-+} ADSL_CONNECTION_INFO, *PADSL_CONNECTION_INFO;
-+
-+/* OEM parameter definition */
-+#define ADSL_OEM_G994_VENDOR_ID 1 /* Vendor ID used during G.994 handshake */
-+#define ADSL_OEM_G994_XMT_NS_INFO 2 /* G.994 non-standard info field to send */
-+#define ADSL_OEM_G994_RCV_NS_INFO 3 /* G.994 received non-standard */
-+#define ADSL_OEM_EOC_VENDOR_ID 4 /* EOC reg. 0 */
-+#define ADSL_OEM_EOC_VERSION 5 /* EOC reg. 1 */
-+#define ADSL_OEM_EOC_SERIAL_NUMBER 6 /* EOC reg. 2 */
-+#define ADSL_OEM_T1413_VENDOR_ID 7 /* Vendor ID used during T1.413 handshake */
-+#define ADSL_OEM_T1413_EOC_VENDOR_ID 8 /* EOC reg. 0 (vendor ID) in T1.413 mode */
-+
-+/* XMT gain definitions */
-+#define ADSL_XMT_GAIN_AUTO 0x80000000
-+
-+typedef struct
-+{
-+ int diagCmd;
-+ int diagMap;
-+ int logTime;
-+ int srvIpAddr;
-+ int gwIpAddr;
-+} ADSL_DIAG, *PADSL_DIAG;
-+
-+typedef struct
-+{
-+ short x;
-+ short y;
-+} ADSL_CONSTELLATION_POINT, *PADSL_CONSTELLATION_POINT;
-+
-+#define ADSL_CONSTEL_DATA_ID 0
-+#define ADSL_CONSTEL_PILOT_ID 1
-+
-+#define ADSL_MIB_INFO adslMibInfo
-+typedef ADSL_MIB_INFO *PADSL_MIB_INFO;
-+
-+typedef void (*ADSL_FN_NOTIFY_CB) (ADSL_LINK_STATE AdslLinkState, UINT32 ulParm);
-+
-+//**************************************************************************
-+// Function Prototypes
-+//**************************************************************************
-+
-+BCMADSL_STATUS BcmAdsl_Check(void);
-+BCMADSL_STATUS BcmAdsl_Initialize(ADSL_FN_NOTIFY_CB pFnNotifyCb, UINT32 ulParm, adslCfgProfile *pAdslCfg);
-+#ifdef LINUX
-+BCMADSL_STATUS BcmAdsl_MapAtmPortIDs(UINT16 usAtmFastPortId, UINT16 usAtmInterleavedPortId);
-+#endif
-+BCMADSL_STATUS BcmAdsl_Uninitialize(void);
-+BCMADSL_STATUS BcmAdsl_ConnectionStart(void);
-+BCMADSL_STATUS BcmAdsl_ConnectionStop(void);
-+BCMADSL_STATUS BcmAdsl_GetPhyAddresses(PADSL_CHANNEL_ADDR pChannelAddr);
-+BCMADSL_STATUS BcmAdsl_SetPhyAddresses(PADSL_CHANNEL_ADDR pChannelAddr);
-+BCMADSL_STATUS BcmAdsl_GetConnectionInfo(PADSL_CONNECTION_INFO pConnectionInfo);
-+BCMADSL_STATUS BcmAdsl_DiagCommand(PADSL_DIAG pAdslDiag);
-+int BcmAdsl_GetObjectValue(char *objId, int objIdLen, char *dataBuf, long *dataBufLen);
-+BCMADSL_STATUS BcmAdsl_StartBERT(unsigned long totalBits);
-+BCMADSL_STATUS BcmAdsl_StopBERT(void);
-+BCMADSL_STATUS BcmAdsl_BertStartEx(unsigned long bertSec);
-+BCMADSL_STATUS BcmAdsl_BertStopEx(void);
-+BCMADSL_STATUS BcmAdsl_CheckPowerLoss(void);
-+BCMADSL_STATUS BcmAdsl_SendDyingGasp(int powerCtl);
-+BCMADSL_STATUS BcmAdsl_Configure(adslCfgProfile *pAdslCfg);
-+BCMADSL_STATUS BcmAdsl_GetVersion(adslVersionInfo *pAdslVer);
-+BCMADSL_STATUS BcmAdsl_SetSDRAMBaseAddr(void *pAddr);
-+BCMADSL_STATUS BcmAdsl_SetVcEntry (int gfc, int port, int vpi, int vci);
-+BCMADSL_STATUS BcmAdsl_SetVcEntryEx (int gfc, int port, int vpi, int vci, int pti_clp);
-+
-+BCMADSL_STATUS BcmAdsl_ResetStatCounters(void);
-+BCMADSL_STATUS BcmAdsl_SetAtmLoopbackMode(void);
-+BCMADSL_STATUS BcmAdsl_SetTestMode(ADSL_TEST_MODE testMode);
-+BCMADSL_STATUS BcmAdsl_SelectTones(
-+ int xmtStartTone,
-+ int xmtNumTones,
-+ int rcvStartTone,
-+ int rcvNumTones,
-+ char *xmtToneMap,
-+ char *rcvToneMap
-+ );
-+BCMADSL_STATUS BcmAdsl_SetDiagMode(int diagMode);
-+
-+int BcmAdsl_GetConstellationPoints (int toneId, ADSL_CONSTELLATION_POINT *pointBuf, int numPoints);
-+
-+int BcmAdsl_GetOemParameter (int paramId, void *buf, int len);
-+int BcmAdsl_SetOemParameter (int paramId, void *buf, int len);
-+int BcmAdsl_SetXmtGain(int gain);
-+
-+UINT32 BcmAdsl_GetSelfTestMode(void);
-+void BcmAdsl_SetSelfTestMode(UINT32 stMode);
-+UINT32 BcmAdsl_GetSelfTestResults(void);
-+
-+BCMADSL_STATUS BcmAdsl_G997SendData(void *buf, int len);
-+void *BcmAdsl_G997FrameGet(int *pLen);
-+void *BcmAdsl_G997FrameGetNext(int *pLen);
-+void BcmAdsl_G997FrameFinished(void);
-+void BcmAdsl_DyingGaspHandler(void *context);
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _BCMADSL_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmatmapi.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmatmapi.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmatmapi.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmatmapi.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,699 @@
-+/*
-+<:copyright-broadcom
-+
-+ Copyright (c) 2002 Broadcom Corporation
-+ All Rights Reserved
-+ No portions of this material may be reproduced in any form without the
-+ written permission of:
-+ Broadcom Corporation
-+ 16215 Alton Parkway
-+ Irvine, California 92619
-+ All information contained in this document is Broadcom Corporation
-+ company private, proprietary, and trade secret.
-+
-+:>
-+*/
-+//**************************************************************************
-+// File Name : BcmAtmApi.h
-+//
-+// Description: This file contains the definitions, structures and function
-+// prototypes for the Broadcom Asynchronous Transfer Mode (ATM)
-+// Application Program Interface (API).
-+//
-+// Updates : 09/15/2000 lat. Created.
-+//**************************************************************************
-+
-+#if !defined(_BCMATMAPI_H_)
-+#define _BCMATMAPI_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+//**************************************************************************
-+// Constant Definitions
-+//**************************************************************************
-+
-+// ATM physical port constants.
-+#define PHY_NUM_PORTS 4
-+#define PHY_0 0
-+#define PHY_1 1
-+#define PHY_2 2 // [BCM635x Only]
-+#define PHY_3 3 // [BCM635x Only]
-+
-+// Used for backwards compatibility.
-+#define PHY_UTOPIA0 0
-+#define PHY_UTOPIA1 1
-+#define PHY_UTOPIA2 2
-+#define PHY_UTOPIA3_TC_LOOPBACK 3
-+
-+// Values for ATM_PORT_CFG ucPortType.
-+#define PT_DISABLED 0
-+#define PT_UTOPIA 1
-+#define PT_LOOPBACK 2
-+#define PT_TC 3 // [BCM635x Only]
-+#define PT_ADSL_INTERLEAVED 4 // [BCM6345 Only]
-+#define PT_ADSL_FAST 5 // [BCM6345 Only]
-+
-+// Wildcard definitions.
-+#define ALL_INTERFACES 0xffffffff
-+#define ANY_PRIORITY 0xff
-+
-+// Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulTrafficDescrType.
-+#define TDT_ATM_NO_TRAFFIC_DESCRIPTOR 1
-+#define TDT_ATM_NO_CLP_NO_SCR 2
-+#define TDT_ATM_CLP_NO_TAGGING_NO_SCR 3
-+#define TDT_ATM_CLP_TAGGING_NO_SCR 4
-+#define TDT_ATM_NO_CLP_SCR 5
-+#define TDT_ATM_CLP_NO_TAGGING_SCR 6 // [BCM635x Only]
-+#define TDT_ATM_CLP_TAGGING_SCR 7 // [BCM635x Only]
-+#define TDT_ATM_CLP_NO_TAGGING_MCR 8 // [BCM6348 Only]
-+#define TDT_ATM_CLP_TRANSPARENT_NO_SCR 9
-+#define TDT_ATM_CLP_TRANSPARENT_SCR 10
-+#define TDT_ATM_NO_CLP_TAGGING_NO_SCR 11
-+#define TDT_ATM_NO_CLP_NO_SCR_CDVT 12
-+#define TDT_ATM_NO_CLP_SCR_CDVT 13
-+#define TDT_ATM_CLP_NO_TAGGING_SCR_CDVT 14 // [BCM635x Only]
-+#define TDT_ATM_CLP_TAGGING_SCR_CDVT 15 // [BCM635x Only]
-+
-+// Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulTrafficDescrRowStatus.
-+#define TDRS_ACTIVE 1
-+#define TDRS_NOT_IN_SERVICE 2
-+
-+// Values for ATM_TRAFFIC_DESCR_PARM_ENTRY ulServiceCategory.
-+#define SC_OTHER 1
-+#define SC_CBR 2
-+#define SC_RT_VBR 3
-+#define SC_NRT_VBR 4
-+#define SC_UBR 6
-+
-+// Values for ATM_INTERFACE_CFG ulIfAdminStatus and ATM_VCC_CFG
-+// ulAtmVclAdminStatus.
-+#define ADMSTS_UP 1
-+#define ADMSTS_DOWN 2
-+#define ADMSTS_TESTING 3
-+
-+// Values for ATM_INTERFACE_CFG ulIfOperStatus and ATM_VCC_CFG
-+// ulAtmVclOperStatus.
-+#define OPRSTS_UP 1
-+#define OPRSTS_DOWN 2
-+#define OPRSTS_UNKNOWN 3
-+
-+// Values for ATM_INTERFACE_LINK_INFO ulLinkState.
-+#define LINK_UP 1
-+#define LINK_DOWN 2
-+
-+// Values for ulAalType.
-+#define AAL_2 0 // [BCM635x Only]
-+#define AAL_TRANSPARENT 1
-+#define AAL_0_PACKET 2
-+#define AAL_0_CELL_CRC 3
-+#define AAL_5 7
-+
-+// Values for ATM_VCC_CFG ulAtmVccEncapsType.
-+#define ET_VC_MULTIPLEX_ROUTED_PROTOCOL 1
-+#define ET_VC_MULTIPLEX_BRG_PROTOCOL_8023 2
-+#define ET_VC_MULTIPLEX_BRG_PROTOCOL_8025 3
-+#define ET_VC_MULTIPLEX_BRG_PROTOCOL_8026 4
-+#define ET_VC_MULTIPLEX_LAN_EMULATION_8023 5
-+#define ET_VC_MULTIPLEX_LAN_EMULATION_8025 6
-+#define ET_LLC_ENCAPSULATION 7
-+#define ET_MULTI_PROTOCOL_FRAME_RELAY_SSCS 8
-+#define ET_OTHER 9
-+#define ET_UNKNOWN 10
-+
-+// [BCM635x Only] Values for ATM_AAL2_VCC_CFG ucAal2CpsOptimisation.
-+#define OPT_SNG_PKT_PER_PDU_NO_OVERLAP 1
-+#define OPT_MULT_PKTS_PER_PDU_OVERLAP 2
-+
-+// [BCM635x Only] Values for ATM_INTERFACE_STATS ulTcAlarmState.
-+#define TCALM_NO_ALARM 1
-+#define TCALM_LCD_FAILURE 2
-+
-+// Values for ATM_NOTIFY_PARMS ulNotificationType.
-+#define ATM_NOTIFY_INTERFACE_CHANGE 1
-+
-+// Values for AN_INTF_CHANGE_PARMS ulInterfaceState.
-+#define ATM_INTERFACE_UP 1
-+#define ATM_INTERFACE_DOWN 2
-+
-+// Values for AN_VCC_CHANGE_PARMS ulInterfaceState.
-+#define ATM_VCC_UP 1
-+#define ATM_VCC_DOWN 2
-+
-+// Values for ATM_VCC_ATTACH_PARMS ulFlags.
-+#define AVAP_ALLOW_OAM_F5_SEGMENT_CELLS 0x0001
-+#define AVAP_ALLOW_OAM_F5_END_TO_END_CELLS 0x0002
-+#define AVAP_ALLOW_RM_CELLS 0x0004
-+#define AVAP_ALLOW_OAM_F4_SEGMENT_CELLS 0x0008
-+#define AVAP_ALLOW_OAM_F4_END_TO_END_CELLS 0x0010
-+#define AVAP_ALLOW_CELLS_WITH_ERRORS 0x0020
-+#define AVAP_ADD_AAL0_CRC10 0x0040
-+#define AVAP_DSP 0x8000 // [BCM635x Only]
-+
-+// [BCM635x Only] Values for ATM_VCC_AAL2_CHANNEL_ID_PARMS ucVoiceRouting.
-+#define VOICE_ROUTE_MIPS 0
-+#define VOICE_ROUTE_DSP 2
-+
-+// [BCM635x Only] Values for ATM_VCC_AAL2_CHANNEL_ID_PARMS ucFlags.
-+#define CID_USE_FRAME_MODE 0x01
-+
-+// Values for ATM_VCC_DATA_PARMS ucCircuitType.
-+#define CT_AAL0_PACKET 0x02
-+#define CT_AAL0_CELL_CRC 0x03
-+#define CT_OAM_F5_SEGMENT 0x04
-+#define CT_OAM_F5_END_TO_END 0x05
-+#define CT_RM 0x06
-+#define CT_AAL5 0x07
-+#define CT_HDLC_PACKET 0x08 // [BCM6348 Only]
-+#define CT_ANY_AAL2_MASK 0x08 // [BCM635x Only]
-+#define CT_AAL2_ALARM 0x08 // [BCM635x Only]
-+#define CT_AAL2_TYPE_3 0x09 // [BCM635x Only]
-+#define CT_AAL2_TYPE_1 0x0A // [BCM635x Only]
-+#define CT_AAL2_FRAME 0x0B // [BCM635x Only]
-+#define CT_TRANSPARENT 0x10
-+#define CT_OAM_F4_ANY 0x20
-+
-+// OAM F4 VCI values.
-+#define VCI_OAM_F4_SEGMENT 3
-+#define VCI_OAM_F4_END_TO_END 4
-+#define VCI_RM 6
-+
-+// Values for ATM_VCC_DATA_PARMS ucFlags.
-+#define ATMDATA_CI 0x04
-+#define ATMDATA_CLP 0x08
-+
-+// [BCM635x Only] DSP specific values.
-+#define DSP_VCID 31
-+
-+// ATM cell layer interface name
-+#define ATM_CELL_LAYER_IFNAME "atm0"
-+
-+// AAL5 CPCS layer interface name
-+#define AAL5_CPCS_LAYER_IFNAME "cpcs0"
-+
-+//**************************************************************************
-+// Type Definitions
-+//**************************************************************************
-+
-+// Return status values
-+typedef enum BcmAtmStatus
-+{
-+ STS_SUCCESS = 0,
-+ STS_ERROR,
-+ STS_STATE_ERROR,
-+ STS_PARAMETER_ERROR,
-+ STS_ALLOC_ERROR,
-+ STS_RESOURCE_ERROR,
-+ STS_IN_USE,
-+ STS_VCC_DOWN,
-+ STS_INTERFACE_DOWN,
-+ STS_LINK_DOWN,
-+ STS_NOT_FOUND,
-+ STS_NOT_SUPPORTED,
-+ STS_VCAM_MULT_MATCH_ERROR,
-+ STS_CCAM_MULT_MATCH_ERROR,
-+ STS_PKTERR_INVALID_VPI_VCI,
-+ STS_PKTERR_PORT_NOT_ENABLED,
-+ STS_PKTERR_HEC_ERROR,
-+ STS_PKTERR_PTI_ERROR,
-+ STS_PKTERR_RECEIVED_IDLE_CELL,
-+ STS_PKTERR_CIRCUIT_TYPE_ERROR,
-+ STS_PKTERR_OAM_RM_CRC_ERROR,
-+ STS_PKTERR_GFC_ERROR,
-+ STS_PKTERR_AAL5_AAL0_CRC_ERROR,
-+ STS_PKTERR_AAL5_AAL0_SHORT_PKT_ERROR,
-+ STS_PKTERR_AAL5_AAL0_LENGTH_ERROR,
-+ STS_PKTERR_AAL5_AAL0_BIG_PKT_ERROR,
-+ STS_PKTERR_AAL5_AAL0_SAR_TIMEOUT_ERROR,
-+ STS_PKTERR_AAL2F_HEC_ERROR,
-+ STS_PKTERR_AAL2F_SEQ_NUM_ERROR,
-+ STS_PKTERR_AAL2F_PARITY_ERROR,
-+ STS_PKTERR_AAL2F_CRC_ERROR,
-+ STS_PKTERR_AAL2F_CAM_ERROR,
-+ STS_PKTERR_AAL2F_BIG_PKT_ERROR,
-+ STS_PKTERR_AAL2F_RAS_TIMEOUT_ERROR,
-+ STS_PKTERR_AAL2F_SHORT_PKT_ERROR,
-+ STS_PKTERR_AAL2F_LENGTH_MISMATCH_ERROR,
-+ STS_PKTERR_AAL2V_HEC_ERROR,
-+ STS_PKTERR_AAL2V_SEQ_NUM_ERROR,
-+ STS_PKTERR_AAL2V_PARITY_ERROR,
-+ STS_PKTERR_AAL2V_CRC_ERROR,
-+ STS_PKTERR_AAL2V_CAM_ERROR,
-+ STS_PKTERR_AAL2V_OSF_MISMATCH_ERROR,
-+ STS_PKTERR_AAL2V_OSF_ERROR,
-+ STS_PKTERR_AAL2V_HEC_OVERLAP_ERROR,
-+ STS_PKTERR_AAL2V_BIG_PKT_ERROR,
-+ STS_PKTERR_AAL2V_RAS_ERROR,
-+ STS_PKTERR_AAL2V_UUI_ERROR
-+} BCMATM_STATUS;
-+
-+
-+// ATM_VCC_ADDR identifies a Virtual Channel Connection (VCC).
-+typedef struct AtmVccAddr
-+{
-+ UINT32 ulInterfaceId;
-+ UINT16 usVpi;
-+ UINT16 usVci;
-+} ATM_VCC_ADDR, *PATM_VCC_ADDR;
-+
-+
-+// ATM_PORT_CFG contains ATM physical port configuration parameters.
-+typedef struct AtmPortCfg
-+{
-+ UINT32 ulInterfaceId;
-+ UINT8 ucPortType;
-+ UINT8 ucPortAddr;
-+ UINT8 ucReserved[2];
-+} ATM_PORT_CFG, *PATM_PORT_CFG;
-+
-+
-+// ATM_INITIALIZATION_PARMS contains ATM API module initialization parameters.
-+#define ID_ATM_INITIALIZATION_PARMS 2
-+typedef struct AtmInitialization
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulThreadPriority;
-+ UINT16 usFreeCellQSize;
-+ UINT16 usFreePktQSize;
-+ UINT16 usFreePktQBufferSize;
-+ UINT16 usFreePktQBufferOffset; // offset into buffer to start receiving data
-+ UINT16 usReceiveCellQSize;
-+ UINT16 usReceivePktQSize;
-+ UINT8 ucTransmitFifoPriority; // [BCM635x Only]
-+ UINT8 ucReserved;
-+ UINT16 usAal5CpcsMaxSduLength;
-+ UINT16 usAal2SscsMaxSsarSduLength; // [BCM635x Only]
-+ ATM_PORT_CFG PortCfg[PHY_NUM_PORTS];
-+} ATM_INITIALIZATION_PARMS, *PATM_INITIALIZATION_PARMS;
-+
-+
-+// ATM_TRAFFIC_DESCR_PARM_ENTRY contains the fields needed to create a Traffic
-+// Descriptor Table parameter entry.
-+#define ID_ATM_TRAFFIC_DESCR_PARM_ENTRY 1
-+typedef struct AtmTrafficDescrParmEntry
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulTrafficDescrIndex;
-+ UINT32 ulTrafficDescrType;
-+ UINT32 ulTrafficDescrParm1;
-+ UINT32 ulTrafficDescrParm2;
-+ UINT32 ulTrafficDescrParm3;
-+ UINT32 ulTrafficDescrParm4;
-+ UINT32 ulTrafficDescrParm5;
-+ UINT32 ulTrafficDescrRowStatus;
-+ UINT32 ulServiceCategory;
-+ UINT32 ulTrafficFrameDiscard;
-+} ATM_TRAFFIC_DESCR_PARM_ENTRY, *PATM_TRAFFIC_DESCR_PARM_ENTRY;
-+
-+
-+// ATM_INTERFACE_CFG contains configuration fields for an ATM interface.
-+#define ID_ATM_INTERFACE_CFG 3
-+typedef struct AtmInterfaceCfg
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulAtmInterfaceMaxVccs;
-+ UINT32 ulAtmInterfaceConfVccs;
-+ UINT32 ulAtmInterfaceMaxActiveVpiBits;
-+ UINT32 ulAtmInterfaceMaxActiveVciBits;
-+ UINT32 ulAtmInterfaceCurrentMaxVpiBits;
-+ UINT32 ulAtmInterfaceCurrentMaxVciBits;
-+ UINT32 ulIfAdminStatus;
-+ UINT32 ulIfOperStatus; // read-only
-+ UINT32 ulSendNullCells;
-+ UINT32 ulTcScramble;
-+ UINT32 ulPortType; // read-only
-+ UINT32 ulIfLastChange;
-+} ATM_INTERFACE_CFG, *PATM_INTERFACE_CFG;
-+
-+
-+// ATM_VCC_TRANSMIT_QUEUE_PARMS contains fields for configuring an transmit
-+// queue.
-+#define ID_ATM_VCC_TRANSMIT_QUEUE_PARMS 1
-+typedef struct AtmVccTransmitQueueParms
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulSize;
-+ UINT32 ulPriority;
-+ UINT32 ulReserved;
-+} ATM_VCC_TRANSMIT_QUEUE_PARMS, *PATM_VCC_TRANSMIT_QUEUE_PARMS;
-+
-+
-+// ATM_AAL5_VCC_CFG contains configuration fields for an ATM AAL5 Virtual
-+// Channel Connection (VCC).
-+typedef struct AtmAal5VccCfg
-+{
-+ UINT32 ulAtmVccEncapsType;
-+ UINT32 ulAtmVccCpcsAcceptCorruptedPdus;
-+} ATM_AAL5_VCC_CFG, *PATM_AAL5_VCC_CFG;
-+
-+
-+// [BCM635x Only] ATM_AAL2_VCC_CFG contains configuration fields for an ATM
-+// AAL2 Virtual Channel Connection (VCC).
-+typedef struct AtmAal2VccCfg
-+{
-+ UINT8 ucAal2CpsMaxMultiplexedChannels;
-+ UINT8 ucAal2CpsMaxSduLength;
-+ UINT8 ucAal2CpsCidLowerLimit;
-+ UINT8 ucAal2CpsCidUpperLimit;
-+ UINT8 ucAal2CpsOptimisation;
-+ UINT8 ucReserved[3];
-+} ATM_AAL2_VCC_CFG, *PATM_AAL2_VCC_CFG;
-+
-+
-+// ATM_AAL0_VCC_CFG contains configuration fields for an ATM AAL0 Virtual
-+// Channel Connection (VCC).
-+typedef struct AtmAal0VccCfg
-+{
-+ UINT8 ucReserved;
-+ // Reserved for future use.
-+} ATM_AAL0_VCC_CFG, *PATM_AAL0_VCC_CFG;
-+
-+
-+// ATM_VCC_CFG contains configuration fields for an ATM Virtual Channel
-+// Connection (VCC).
-+#define ID_ATM_VCC_CFG 2
-+#define TX_Q_PARM_SIZE 8
-+typedef struct AtmVccCfg
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulAalType;
-+ UINT32 ulAtmVclAdminStatus;
-+ UINT32 ulAtmVclOperStatus;
-+ UINT32 ulAtmVclLastChange;
-+ UINT32 ulAtmVclReceiveTrafficDescrIndex;
-+ UINT32 ulAtmVclTransmitTrafficDescrIndex;
-+ UINT32 ulTransmitQParmsSize;
-+ ATM_VCC_TRANSMIT_QUEUE_PARMS TransmitQParms[TX_Q_PARM_SIZE];
-+ union
-+ {
-+ ATM_AAL5_VCC_CFG Aal5Cfg;
-+ ATM_AAL2_VCC_CFG Aal2Cfg; // [BCM635x Only]
-+ ATM_AAL0_VCC_CFG Aal0Cfg;
-+ } u;
-+} ATM_VCC_CFG, *PATM_VCC_CFG;
-+
-+
-+// ATM_INTF_ATM_STATS contains statistics for the ATM layer of an interface.
-+typedef struct AtmIntfAtmStats
-+{
-+ UINT32 ulIfInOctets;
-+ UINT32 ulIfOutOctets;
-+ UINT32 ulIfInErrors;
-+ UINT32 ulIfInUnknownProtos;
-+ UINT32 ulIfOutErrors;
-+
-+ // The following fields are added together to calculate ulIfInErrors.
-+ UINT32 ulIfInHecErrors;
-+
-+ // The following fields are added together to calculate ulIfInUnknownProtos.
-+ UINT32 ulIfInInvalidVpiVciErrors;
-+ UINT32 ulIfInPortNotEnabledErrors;
-+ UINT32 ulIfInPtiErrors;
-+ UINT32 ulIfInIdleCells;
-+ UINT32 ulIfInCircuitTypeErrors;
-+ UINT32 ulIfInOamRmCrcErrors;
-+ UINT32 ulIfInGfcErrors;
-+} ATM_INTF_ATM_STATS, *PATM_INTF_ATM_STATS;
-+
-+
-+// [BCM635x Only] ATM_INTF_ATM_STATS contains statistics for the TC layer.
-+typedef struct AtmIntfTcStats
-+{
-+ UINT32 ulTcInDataCells;
-+ UINT32 ulTcInTotalCells;
-+ UINT32 ulTcInHecErrors;
-+ UINT32 ulTcInOcdEvents;
-+ UINT32 ulTcAlarmState;
-+} ATM_INTF_TC_STATS, *PATM_INTF_TC_STATS;
-+
-+
-+// ATM_INTF_AAL5_AAL0_STATS contains statistics for all AAL5/AAL0 VCCs on an
-+// ATM interface.
-+typedef struct AtmIntfAal5Aal0Stats
-+{
-+ UINT32 ulIfInOctets;
-+ UINT32 ulIfOutOctets;
-+ UINT32 ulIfInUcastPkts;
-+ UINT32 ulIfOutUcastPkts;
-+ UINT32 ulIfInErrors;
-+ UINT32 ulIfOutErrors;
-+ UINT32 ulIfInDiscards;
-+ UINT32 ulIfOutDiscards;
-+} ATM_INTF_AAL5_AAL0_STATS, *PATM_INTF_AAL5_AAL0_STATS;
-+
-+
-+// [BCM635x Only] ATM_INTF_AAL2_STATS contains statistics for all AAL2 VCCs
-+// on an ATM interface.
-+typedef struct AtmIntfAal2Stats
-+{
-+ UINT32 ulIfInOctets;
-+ UINT32 ulIfOutOctets;
-+ UINT32 ulIfInUcastPkts;
-+ UINT32 ulIfOutUcastPkts;
-+ UINT32 ulIfInErrors;
-+ UINT32 ulIfOutErrors;
-+ UINT32 ulIfInDiscards;
-+ UINT32 ulIfOutDiscards;
-+} ATM_INTF_AAL2_STATS, *PATM_INTF_AAL2_STATS;
-+
-+
-+// ATM_INTERFACE_STATS contains statistics for an ATM interface.
-+#define ID_ATM_INTERFACE_STATS 1
-+typedef struct AtmInterfaceStats
-+{
-+ UINT32 ulStructureId;
-+ ATM_INTF_ATM_STATS AtmIntfStats;
-+ ATM_INTF_TC_STATS TcIntfStats; // [BCM635x Only]
-+ ATM_INTF_AAL5_AAL0_STATS Aal5IntfStats;
-+ ATM_INTF_AAL2_STATS Aal2IntfStats; // [BCM635x Only]
-+ ATM_INTF_AAL5_AAL0_STATS Aal0IntfStats;
-+} ATM_INTERFACE_STATS, *PATM_INTERFACE_STATS;
-+
-+
-+// ATM_VCC_AAL5_STATS contains statistics for an AAL5 VCC.
-+typedef struct AtmVccAal5Stats
-+{
-+ UINT32 ulAal5VccCrcErrors;
-+ UINT32 ulAal5VccSarTimeOuts;
-+ UINT32 ulAal5VccOverSizedSdus;
-+ UINT32 ulAal5VccShortPacketErrors;
-+ UINT32 ulAal5VccLengthErrors;
-+} ATM_VCC_AAL5_STATS, *PATM_VCC_AAL5_STATS;
-+
-+
-+// [BCM635x Only] ATM_VCC_AAL2_STATS contains statistics for an AAL2 VCC.
-+typedef struct AtmVccAal2Stats
-+{
-+ UINT32 ulAal2CpsInPkts;
-+ UINT32 ulAal2CpsOutPkts;
-+ UINT32 ulAal2CpsParityErrors;
-+ UINT32 ulAal2CpsSeqNumErrors;
-+ UINT32 ulAal2CpsOsfMismatchErrors;
-+ UINT32 ulAal2CpsOsfErrors;
-+ UINT32 ulAal2CpsHecOverlapErrors;
-+ UINT32 ulAal2CpsHecErrors;
-+ UINT32 ulAal2CpsOversizedSduErrors;
-+ UINT32 ulAal2CpsReassemblyErrors;
-+ UINT32 ulAal2CpsUuiErrors;
-+ UINT32 ulAal2CpsCidErrors;
-+ UINT32 ulAal2SscsOversizedSssarSduErrors;
-+ UINT32 ulAal2SscsSssarRasTimerExipiryErrors;
-+ UINT32 ulAal2SscsUndersizedSstedPduErrors;
-+ UINT32 ulAal2SscsSstedPduLengthMismatchErrors;
-+ UINT32 ulAal2SscsSstedCrcMismatchErrors;
-+} ATM_VCC_AAL2_STATS, *PATM_VCC_AAL2_STATS;
-+
-+
-+// ATM_VCC_AAL0PKT_STATS contains statistics for an AAL0 Packet VCC.
-+typedef struct AtmVccAal0PktStats
-+{
-+ UINT32 ulAal0VccSarTimeOuts;
-+ UINT32 ulAal0VccOverSizedSdus;
-+} ATM_VCC_AAL0PKT_STATS, *PATM_VCC_AAL0PKT_STATS;
-+
-+
-+// ATM_VCC_AAL0CELL_STATS contains statistics for an AAL0 Cell with CRC VCC.
-+typedef struct AtmVccAal0CellStats
-+{
-+ UINT32 ulAal0VccCrcErrors;
-+} ATM_VCC_AAL0CELL_STATS, *PATM_VCC_AAL0CELL_STATS;
-+
-+
-+// ATM_VCC_STATS contains statistics for a VCC.
-+#define ID_ATM_VCC_STATS 1
-+typedef struct AtmVccStatistics
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulAalType;
-+ union
-+ {
-+ ATM_VCC_AAL5_STATS AtmVccAal5Stats;
-+ ATM_VCC_AAL2_STATS AtmVccAal2Stats; // [BCM635x Only]
-+ ATM_VCC_AAL0PKT_STATS AtmVccAal0PktStats;
-+ ATM_VCC_AAL0CELL_STATS AtmVccAal0CellStats;
-+ } u;
-+} ATM_VCC_STATS, *PATM_VCC_STATS;
-+
-+
-+// ATM_INTERFACE_LINK_INFO contains fields for the physical link that the
-+// ATM interface is using.
-+#define ID_ATM_INTERFACE_LINK_INFO 1
-+typedef struct AtmInterfaceLinkInfo
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulLinkState;
-+ UINT32 ulLineRate;
-+ UINT32 ulReserved[2];
-+} ATM_INTERFACE_LINK_INFO, *PATM_INTERFACE_LINK_INFO;
-+
-+
-+// AN_INTF_CHANGE_PARMS contains notification fields that passed to an
-+// application callback function when the ATM interface goes up or down.
-+#define ID_AN_INTF_CHANGE_PARMS 1
-+typedef struct AnIntfChangeParms
-+{
-+ UINT32 ulInterfaceId;
-+ UINT32 ulInterfaceState;
-+ UINT32 ulInterfaceLineRate;
-+} AN_INTF_CHANGE_PARMS, *PAN_INTF_CHANGE_PARMS;
-+
-+
-+// ATM_NOTIFY_PARMS contains notification fields that passed to an application
-+// callback function when an ATM notification event occurs.
-+typedef struct AtmNotifyParms
-+{
-+ UINT32 ulNotifyType;
-+ union
-+ {
-+ AN_INTF_CHANGE_PARMS IntfChangeParms;
-+
-+ // Other fields and structures that are specific
-+ // to the type of notification are declared here.
-+ } u;
-+} ATM_NOTIFY_PARMS, *PATM_NOTIFY_PARMS;
-+
-+typedef void (*FN_NOTIFY_CB) (PATM_NOTIFY_PARMS pNotifyParms);
-+
-+
-+// ATM_VCC_ATTACH_PARMS contains fields for attaching to a VCC. It is used
-+// by all BcmAtm_Attach... functions.
-+struct AtmVccDataParms;
-+typedef void (*FN_RECEIVE_CB) (UINT32 ulHandle, PATM_VCC_ADDR pVccAddr,
-+ struct AtmVccDataParms *pDataParms, UINT32 ulParmReceiveData);
-+
-+#define ID_ATM_VCC_ATTACH_PARMS 1
-+typedef struct AtmAttachParms
-+{
-+ UINT32 ulStructureId;
-+ UINT32 ulFlags;
-+ FN_RECEIVE_CB pFnReceiveDataCb;
-+ UINT32 ulParmReceiveData;
-+ ATM_VCC_TRANSMIT_QUEUE_PARMS *pTransmitQParms;
-+ UINT32 ulTransmitQParmsSize;
-+ UINT32 ulHandle;
-+ UINT32 ulReserved;
-+} ATM_VCC_ATTACH_PARMS, *PATM_VCC_ATTACH_PARMS;
-+
-+
-+// [BCM635x Only] ATM_VCC_AAL2_CHANNEL_ID_PARMS contains fields for
-+// configuring an transmit queue.
-+#define ID_ATM_VCC_AAL2_CHANNEL_ID_PARMS 1
-+typedef struct AtmVccAal2ChannelIdParms
-+{
-+ UINT32 ulStructureId;
-+ UINT8 ucChannelId;
-+ UINT8 ucVoiceRouting;
-+ UINT8 ucFlags;
-+ UINT8 ucReserved[5];
-+} ATM_VCC_AAL2_CHANNEL_ID_PARMS, *PATM_VCC_AAL2_CHANNEL_ID_PARMS;
-+
-+
-+// ATM_BUFFER contains fields for passing data to, and receive data from, the
-+// ATM API.
-+typedef struct AtmBuffer
-+{
-+ struct AtmBuffer *pNextAtmBuf;
-+ UINT8 *pDataBuf;
-+ UINT32 ulDataLen;
-+ UINT16 usDataOffset;
-+ UINT16 usReserved;
-+ UINT32 ulReserved;
-+} ATM_BUFFER, *PATM_BUFFER;
-+
-+
-+// ATM_VCC_DATA_PARMS contains fields for sending or receiving data on a VCC.
-+// It is used by all BcmAtm_Send... and receive functions.
-+typedef void (*FN_FREE_DATA_PARMS) (struct AtmVccDataParms *pDataParms);
-+
-+#define ID_ATM_VCC_DATA_PARMS 2
-+typedef struct AtmVccDataParms
-+{
-+ UINT32 ulStructureId;
-+ UINT8 ucCircuitType;
-+ UINT8 ucAal2ChannelId; // [BCM635x Only]
-+ UINT8 ucUuData8;
-+ UINT8 ucUuData5;
-+ UINT8 ucFlags;
-+ UINT8 ucSendPriority;
-+ UINT8 ucReserved[2];
-+ BCMATM_STATUS baReceiveStatus;
-+ PATM_BUFFER pAtmBuffer;
-+ FN_FREE_DATA_PARMS pFnFreeDataParms;
-+ UINT32 ulParmFreeDataParms;
-+ struct AtmVccDataParms *pApplicationLink;
-+ UINT32 ulApplicationDefined[2];
-+} ATM_VCC_DATA_PARMS, *PATM_VCC_DATA_PARMS;
-+
-+
-+//**************************************************************************
-+// Function Prototypes
-+//**************************************************************************
-+
-+BCMATM_STATUS BcmAtm_Initialize( PATM_INITIALIZATION_PARMS pInitValues );
-+BCMATM_STATUS BcmAtm_Uninitialize( void );
-+BCMATM_STATUS BcmAtm_GetInterfaceId( UINT8 ucPhyPort, UINT32 *pulInterfaceId );
-+BCMATM_STATUS BcmAtm_GetTrafficDescrTableSize(UINT32 *pulTrafficDescrTableSize);
-+BCMATM_STATUS BcmAtm_GetTrafficDescrTable( PATM_TRAFFIC_DESCR_PARM_ENTRY
-+ pTrafficDescTable, UINT32 ulTrafficDescrTableSize );
-+BCMATM_STATUS BcmAtm_SetTrafficDescrTable( PATM_TRAFFIC_DESCR_PARM_ENTRY
-+ pTrafficDescTable, UINT32 ulTrafficDescrTableSize );
-+BCMATM_STATUS BcmAtm_GetInterfaceCfg( UINT32 ulInterfaceId, PATM_INTERFACE_CFG
-+ pInterfaceCfg );
-+BCMATM_STATUS BcmAtm_SetInterfaceCfg( UINT32 ulInterfaceId, PATM_INTERFACE_CFG
-+ pInterfaceCfg );
-+BCMATM_STATUS BcmAtm_GetVccCfg( PATM_VCC_ADDR pVccAddr, PATM_VCC_CFG pVccCfg );
-+BCMATM_STATUS BcmAtm_SetVccCfg( PATM_VCC_ADDR pVccAddr, PATM_VCC_CFG pVccCfg );
-+BCMATM_STATUS BcmAtm_GetVccAddrs( UINT32 ulInterfaceId, PATM_VCC_ADDR pVccAddrs,
-+ UINT32 ulNumVccs, UINT32 *pulNumReturned );
-+BCMATM_STATUS BcmAtm_GetInterfaceStatistics( UINT32 ulInterfaceId,
-+ PATM_INTERFACE_STATS pStatistics, UINT32 ulReset );
-+BCMATM_STATUS BcmAtm_GetVccStatistics( PATM_VCC_ADDR pVccAddr, PATM_VCC_STATS
-+ pVccStatistics, UINT32 ulReset );
-+BCMATM_STATUS BcmAtm_SetInterfaceLinkInfo( UINT32 ulInterfaceId,
-+ PATM_INTERFACE_LINK_INFO pInterfaceCfg );
-+BCMATM_STATUS BcmAtm_SetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb );
-+BCMATM_STATUS BcmAtm_ResetNotifyCallback( FN_NOTIFY_CB pFnNotifyCb );
-+BCMATM_STATUS BcmAtm_AttachVcc( PATM_VCC_ADDR pVccAddr, PATM_VCC_ATTACH_PARMS
-+ pAttachParms );
-+BCMATM_STATUS BcmAtm_AttachMgmtCells( UINT32 ulInterfaceId,
-+ PATM_VCC_ATTACH_PARMS pAttachParms );
-+BCMATM_STATUS BcmAtm_AttachTransparent( UINT32 ulInterfaceId,
-+ PATM_VCC_ATTACH_PARMS pAttachParms );
-+BCMATM_STATUS BcmAtm_Detach( UINT32 ulHandle );
-+BCMATM_STATUS BcmAtm_SetAal2ChannelIds( UINT32 ulHandle,
-+ PATM_VCC_AAL2_CHANNEL_ID_PARMS pChannelIdParms, UINT32
-+ ulNumChannelIdParms ); // [BCM635x Only]
-+BCMATM_STATUS BcmAtm_SendVccData( UINT32 ulHandle,
-+ PATM_VCC_DATA_PARMS pDataParms );
-+BCMATM_STATUS BcmAtm_SendMgmtData( UINT32 ulHandle, PATM_VCC_ADDR pVccAddr,
-+ PATM_VCC_DATA_PARMS pDataParms );
-+BCMATM_STATUS BcmAtm_SendTransparentData( UINT32 ulHandle, UINT32 ulInterfaceId,
-+ PATM_VCC_DATA_PARMS pDataParms );
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _BCMATMAPI_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmnet.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmnet.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmnet.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmnet.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,78 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: bcmnet.h */
-+/* DATE: 05/16/02 */
-+/* PURPOSE: network interface ioctl definition */
-+/* */
-+/***********************************************************************/
-+#ifndef _IF_NET_H_
-+#define _IF_NET_H_
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#define LINKSTATE_DOWN 0
-+#define LINKSTATE_UP 1
-+
-+/*---------------------------------------------------------------------*/
-+/* Ethernet Switch Type */
-+/*---------------------------------------------------------------------*/
-+#define ESW_TYPE_UNDEFINED 0
-+#define ESW_TYPE_BCM5325M 1
-+#define ESW_TYPE_BCM5325E 2
-+#define ESW_TYPE_BCM5325F 3
-+
-+/*
-+ * Ioctl definitions.
-+ */
-+/* reserved SIOCDEVPRIVATE */
-+enum {
-+ SIOCGLINKSTATE = SIOCDEVPRIVATE + 1,
-+ SIOCSCLEARMIBCNTR,
-+ SIOCGIFTRANSSTART,
-+ SIOCMIBINFO,
-+ SIOCSDUPLEX, /* 0: auto 1: full 2: half */
-+ SIOCSSPEED, /* 0: auto 1: 100mbps 2: 10mbps */
-+ SIOCCIFSTATS,
-+ SIOCGENABLEVLAN,
-+ SIOCGDISABLEVLAN,
-+ SIOCGQUERYNUMVLANPORTS,
-+ SIOCGSWITCHTYPE,
-+ SIOCGQUERYNUMPORTS,
-+ SIOCLAST
-+};
-+
-+#define SPEED_10MBIT 10000000
-+#define SPEED_100MBIT 100000000
-+
-+typedef struct IoctlMibInfo
-+{
-+ unsigned long ulIfLastChange;
-+ unsigned long ulIfSpeed;
-+} IOCTL_MIB_INFO, *PIOCTL_MIB_INFO;
-+
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif /* _IF_NET_H_ */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmos.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmos.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/bcmos.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/bcmos.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,98 @@
-+/***************************************************************************
-+* Copyright 2000 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16251 Laguna Canyon Road
-+* Irvine, California 92618
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: bcmos.h
-+* Creation Date: 8 June 2000 (v0.00)
-+* VSS Info:
-+* $Revision: 16 $
-+* $Date: 5/03/01 5:03p $
-+*
-+****************************************************************************
-+* Description:
-+*
-+* Broadcom Generic Operating System Functions.
-+*
-+****************************************************************************/
-+
-+#ifndef _BCMOS_H
-+#define _BCMOS_H
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#ifdef __KERNEL__
-+#include <cxcEnv.h>
-+#include <bosSleep.h>
-+#include <bosTask.h>
-+
-+#include <linux/kernel.h>
-+#include <linux/slab.h>
-+#include <linux/interrupt.h>
-+#include <bcmtypes.h>
-+
-+#define malloc(arg) kmalloc(arg, GFP_KERNEL)
-+#define free(arg) kfree(arg)
-+
-+#define BCMOS_ASSERT(expr) \
-+if ((expr)? 0:1) \
-+{ \
-+ printk(" ASSERT !!! File %s, line %u \n", __FILE__, __LINE__); \
-+ bosSleep( 10 ); \
-+ cli(); /* Disable interrupts */ \
-+ while(1){ ; } \
-+}
-+
-+#define CXC_ASSERT BCMOS_ASSERT // For compatibility with CX's endpoint
-+
-+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
-+/* Special BOS definitions */
-+/* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
-+#define DSL_NO_RESETSUPPORT
-+
-+
-+#define bosSocketHtoNL( num ) ((UINT32)( num ))
-+#define bosSocketHtoNS( num ) ((UINT16)( num ))
-+#define bosSocketNtoHL( num ) ((UINT32)( num ))
-+#define bosSocketNtoHS( num ) ((UINT16)( num ))
-+#define bosSocketNtoHS( num ) ((UINT16)( num ))
-+#define bosSocketNtoHU16 bosSocketNtoHS
-+
-+
-+#else /* LINUX */
-+
-+#include <cxcEnv.h>
-+#include <assert.h>
-+#include <string.h>
-+#include <malloc.h>
-+
-+#define BCMOS_TASKNAME( nameVar, nameStr ) char nameVar[] = nameStr
-+
-+#define TEN_MSEC 10
-+#define TWENTY_MSEC 20
-+#define ONE_HUNDRED_MSEC 100
-+#define FIVE_HUNDRED_MSEC 500
-+#define ONE_SECOND 1000
-+#define TWO_SECONDS 2000
-+
-+#define BCMOS_ASSERT( expr) assert( expr )
-+
-+#endif
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+
-+#endif /* _BCMOS_H */
-+
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/cxcEnv.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/cxcEnv.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/cxcEnv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/cxcEnv.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,79 @@
-+/***************************************************************************
-+* Copyright 2000 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16251 Laguna Canyon Road
-+* Irvine, California 92618
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: cxcEnv.h
-+* Creation Date:
-+* VSS Info:
-+* $Revision: 43 $
-+* $Date: 12/03/02 5:50p $
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This file is used in CableX to provide system-wide types and definitions. Howewever.
-+* since iit tries to include various C run-time library dcefintions (eh stdio.h, it is not
-+* appropriate for use "as is" in a Linux kernel environment. So the CableX endpoint source
-+* does not need to change, we use this file to recursively include bcmtypes.h
-+*
-+* NOTE: This file is based upon LDX's hausenv.h, but has been renamed to
-+* avoid project dependencies, and allow for CablexChange customizations.
-+*
-+****************************************************************************/
-+
-+#ifndef CXC_ENV_H
-+#define CXC_ENV_H
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/* --------------------------------------------------------------------------
-+** Just include definitions from bcmtypes.h
-+*/
-+#include <bcmtypes.h>
-+
-+#undef EPT_TEST
-+
-+#if !defined( HAUS_SINT16_DEFINED )
-+#define HAUS_SINT16_DEFINED
-+typedef signed short SINT16; /* SINT16 is platform independant */
-+#endif
-+
-+
-+#if !defined( HAUS_SINT32_DEFINED )
-+#define HAUS_SINT32_DEFINED
-+typedef signed long SINT32;
-+#endif
-+
-+#define SUCCESS 0
-+#define FAILURE 1
-+
-+
-+// GNU definition imported from cxc_compiler.h
-+#define CXC_INLINE __inline__
-+
-+// Endian-ness imported from cxc_cpu.h
-+#define CXC_CPU_BIG_ENDIAN 1
-+#define CXC_CPU_LITTLE_ENDIAN 0
-+
-+#if defined(__KERNEL__)
-+#define CXC_OS_LINUX 1
-+#define PSOS 0
-+#define VXWORKS 0
-+#endif
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* CXC_ENV_H */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/cxcLog.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/cxcLog.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/cxcLog.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/cxcLog.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,34 @@
-+/***************************************************************************
-+* Copyright 2000 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16251 Laguna Canyon Road
-+* Irvine, California 92618
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: log.h
-+* Creation Date: 17 September 2001 (v0.00)
-+* VSS Info:
-+* $Revision: 3 $
-+* $Date: 11/13/02 3:42p $
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This filename is preserved in order to minimize the changes
-+* in the endpoint code, which is shared with the Cablex endpoint.
-+* cxcLog.h simply includes log.h, which contains the log macros.
-+*
-+****************************************************************************/
-+
-+#ifndef CXC_LOG_H
-+#define CXC_LOG_H
-+
-+#include <log.h>
-+
-+#endif /* CXC_LOG_H */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/endpointdrv.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/endpointdrv.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/endpointdrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/endpointdrv.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,243 @@
-+/***************************************************************************
-+ * Broadcom Corp. Confidential
-+ * Copyright 2001 Broadcom Corp. All Rights Reserved.
-+ *
-+ * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
-+ * SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM.
-+ * YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
-+ * SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
-+ *
-+ ***************************************************************************
-+ * File Name : EndpointDrv.h
-+ *
-+ * Description: This file contains the definitions and structures for the
-+ * Linux IOCTL interface that used between the user mode Endpoint
-+ * API library and the kernel Endpoint API driver.
-+ *
-+ * Updates : 04/04/2002 YD. Created.
-+ ***************************************************************************/
-+
-+#if !defined(_ENDPOINTDRV_H_)
-+#define _ENDPOINTDRV_H_
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+/* Includes. */
-+#include <bcmtypes.h>
-+#include <vrgEndpt.h>
-+#include <endptvoicestats.h>
-+
-+/* Maximum size for the event data passed with the event callback */
-+#define MAX_EVENTDATA_SIZE 256
-+
-+typedef enum ENDPOINTIOCTL_INDEX
-+{
-+ ENDPTIO_INIT_INDEX = 0,
-+ ENDPTIO_DEINIT_INDEX,
-+ ENDPTIO_CREATE_INDEX,
-+ ENDPTIO_CAPABILITIES_INDEX,
-+ ENDPTIO_SIGNAL_INDEX,
-+ ENDPTIO_CREATE_CONNECTION_INDEX,
-+ ENDPTIO_MODIFY_CONNECTION_INDEX,
-+ ENDPTIO_DELETE_CONNECTION_INDEX,
-+ ENDPTIO_PACKET_INDEX,
-+ ENDPTIO_GET_PACKET_INDEX,
-+ ENDPTIO_GET_EVENT_INDEX,
-+ ENDPTIO_GET_CODECMAP_INDEX,
-+ ENDPTIO_VOICESTAT_INDEX,
-+ ENDPTIO_ISINITIALIZED_INDEX,
-+ ENDPTIO_CONSOLE_CMD_INDEX,
-+ ENDPTIO_TEST_INDEX,
-+ ENDPTIO_ENDPOINTCOUNT_INDEX,
-+ ENDPTIO_MAX_INDEX
-+} ENDPOINTIOCTL_INDEX;
-+
-+
-+/* Defines. */
-+#define ENDPOINTDRV_MAJOR 209 /* arbitrary unused value */
-+
-+#define ENDPOINTIOCTL_ENDPT_INIT \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_INIT_INDEX, ENDPOINTDRV_INIT_PARAM)
-+
-+#define ENDPOINTIOCTL_ENDPT_DEINIT \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_DEINIT_INDEX, ENDPOINTDRV_INIT_PARAM)
-+
-+#define ENDPOINTIOCTL_ENDPT_CREATE \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_CREATE_INDEX, ENDPOINTDRV_CREATE_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_CAPABILITIES \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_CAPABILITIES_INDEX, ENDPOINTDRV_CAP_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_SIGNAL \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_SIGNAL_INDEX, ENDPOINTDRV_SIGNAL_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_CREATE_CONNECTION \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_CREATE_CONNECTION_INDEX, ENDPOINTDRV_CONNECTION_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_MODIFY_CONNECTION \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_MODIFY_CONNECTION_INDEX, ENDPOINTDRV_CONNECTION_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_DELETE_CONNECTION \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_DELETE_CONNECTION_INDEX, ENDPOINTDRV_DELCONNECTION_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_PACKET \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_PACKET_INDEX, ENDPOINTDRV_PACKET_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_GET_PACKET \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_GET_PACKET_INDEX, ENDPOINTDRV_PACKET_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_GET_EVENT \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_GET_EVENT_INDEX, ENDPOINTDRV_EVENT_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_GET_CODECMAP \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_GET_CODECMAP_INDEX, ENDPOINTDRV_CODECMAP_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_VOICESTAT \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_VOICESTAT_INDEX, ENDPOINTDRV_VOICESTAT_PARM)
-+
-+#define ENDPOINTIOCTL_ISINITIALIZED \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_ISINITIALIZED_INDEX, ENDPOINTDRV_ISINITIALIZED_PARM)
-+
-+#define ENDPOINTIOCTL_ENDPT_CONSOLE_CMD \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_CONSOLE_CMD_INDEX, ENDPOINTDRV_CONSOLE_CMD_PARM)
-+
-+#define ENDPOINTIOCTL_TEST \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_TEST_INDEX, ENDPOINTDRV_TESTPARM)
-+
-+#define ENDPOINTIOCTL_ENDPOINTCOUNT \
-+ _IOWR(ENDPOINTDRV_MAJOR, ENDPTIO_ENDPOINTCOUNT_INDEX, ENDPOINTDRV_ENDPOINTCOUNT_PARM)
-+
-+#define MAX_ENDPOINTDRV_IOCTL_COMMANDS ENDPTIO_MAX_INDEX
-+
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ VRG_COUNTRY country;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_INIT_PARAM, *PENDPOINTDRV_INIT_PARAM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ UINT32 physId;
-+ UINT32 lineId;
-+ VRG_ENDPT_STATE* endptState;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_CREATE_PARM, *PENDPOINTDRV_CREATE_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ EPZCAP* capabilities;
-+ ENDPT_STATE* state;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_CAP_PARM, *PENDPOINTDRV_CAP_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ ENDPT_STATE* state;
-+ UINT32 cnxId;
-+ EPSIG signal;
-+ UINT32 value; // Reserve an array, can be a pointer
-+ EPSTATUS epStatus;
-+ int duration;
-+ int period;
-+ int repetition;
-+} ENDPOINTDRV_SIGNAL_PARM, *PENDPOINTDRV_SIGNAL_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ ENDPT_STATE* state;
-+ int cnxId;
-+ EPZCNXPARAM* cnxParam;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_CONNECTION_PARM, *PENDPOINTDRV_CONNECTION_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ ENDPT_STATE* state;
-+ int cnxId;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_DELCONNECTION_PARM, *PENDPOINTDRV_DELCONNECTION_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ ENDPT_STATE* state;
-+ int cnxId;
-+ EPPACKET* epPacket;
-+ int length;
-+ UINT32 bufDesc;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_PACKET_PARM, *PENDPOINTDRV_PACKET_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ int lineId;
-+ int cnxId;
-+ int length;
-+ EPEVT event;
-+ UINT8 eventData[MAX_EVENTDATA_SIZE];
-+} ENDPOINTDRV_EVENT_PARM, *PENDPOINTDRV_EVENT_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ int isInitialized;
-+} ENDPOINTDRV_ISINITIALIZED_PARM, *PENDPOINTDRV_ISINITIALIZED_PARM;
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ UINT32 testParm1;
-+ UINT32 testParm2;
-+ EPZCNXPARAM* testParm3;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_TESTPARM, *PENDPOINTDRV_TESTPARM;
-+
-+typedef struct ENDPOINTDRV_PACKET
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ int cnxId;
-+ int length;
-+ EPMEDIATYPE mediaType;
-+ UINT8 data[1024];
-+} ENDPOINTDRV_PACKET;
-+
-+typedef struct ENDPOINTDRV_VOICESTAT_PARM
-+{
-+ int lineId;
-+ ENDPT_VOICE_STATS* stats;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_VOICESTAT_PARM, *PENDPOINTDRV_VOICESTAT_PARM;
-+
-+typedef struct ENDPOINTDRV_CONSOLE_CMD_PARM
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ int lineId;
-+ int cnxId;
-+ int cmd;
-+ ENDPT_STATE* state;
-+ EPSTATUS epStatus;
-+} ENDPOINTDRV_CONSOLE_CMD_PARM, *PENDPOINTDRV_CONSOLE_CMD_PARM;
-+
-+
-+typedef struct
-+{
-+ UINT32 size; /* Size of the structure (including the size field) */
-+ int endpointNum;
-+} ENDPOINTDRV_ENDPOINTCOUNT_PARM, *PENDPOINTDRV_ENDPOINTCOUNT_PARM;
-+
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif // _ENDPOINTDRV_H_
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/endptvoicestats.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/endptvoicestats.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/endptvoicestats.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/endptvoicestats.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,106 @@
-+/***************************************************************************
-+ * Broadcom Corp. Confidential
-+ * Copyright 2001 Broadcom Corp. All Rights Reserved.
-+ *
-+ * THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED
-+ * SOFTWARE LICENSE AGREEMENT BETWEEN THE USER AND BROADCOM.
-+ * YOU HAVE NO RIGHT TO USE OR EXPLOIT THIS MATERIAL EXCEPT
-+ * SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
-+ *
-+ ***************************************************************************
-+ * File Name : endptvoicestats.h
-+ *
-+ * Description: This file contains the definitions of the voice statistics
-+ * structures. This file should be used in user space when
-+ * working with the voice statistics structure.
-+ *
-+ * The files hpnet.h and hppve.h
-+ * should not be included in user space because of a conflict
-+ * in the definitions supplied by hausenv.h (in the endpoint/vocm/
-+ * ldxIntf/dspinc directory) and the definitions supplied by bcmtypes.h
-+ * (in the /sgibcm_2_4_17/linux/include/asm-mips/bcm96345 directory).
-+ *
-+ * Updates :
-+ ***************************************************************************/
-+
-+#if !defined(ENDPTSTATS_H)
-+#define ENDPTSTATS_H
-+
-+#if defined(__cplusplus)
-+extern "C" {
-+#endif
-+
-+typedef struct
-+{
-+#ifdef ENDPT_6345
-+ UINT16 peakHoldingTime; /* Peak Holding Time since last statistic */
-+
-+ /* Total number of superpackets arriving on the egress path */
-+ UINT16 packetCount; /* # of packets received */
-+
-+ /* addTail and reorder are successful additions to the JB */
-+ /* addTail is typically 1..N times the packetCount if superpackets are enabled */
-+ UINT16 addTailCount; /* # of frames added to tail of JB - normal case */
-+ UINT16 reorderCount; /* # of frames reordered */
-+
-+ /* overrun, duplicate, outOfRange, tooLate, jitterMax excess are packets that have been discarded */
-+ UINT16 overrunCount; /* Decoder overrun count */
-+ UINT16 duplicateCount; /* # of duplicate frames deleted */
-+ UINT16 outOfRangeCount; /* # of frames with timestamps too far from current TS to be handled */
-+ UINT16 tooLateCount; /* Packet arrived too late (it's redundant mate already played) */
-+
-+ /* cantDecode are packets that can't be played out due to algorithm not available */
-+ UINT16 cantDecodeCount; /* Can't decode packet - decoder not in load or pkt hdr bad */
-+
-+ /* The following are internal to the AJC module - they do not represent physical packets */
-+ UINT16 ajcUnderrunCount; /* Adaptive Jitter Control: jitter buffer underruns */
-+ UINT16 ajcDeleteCount; /* Adaptive Jitter Control: # of packet deletes done to reduce holding time */
-+ UINT16 ajcRepeatCount; /* Adaptive Jitter Control: # of packet repeats done to either increase holding time
-+ or due to late frame or lost frames. */
-+ UINT16 ajcResyncCount; /* Number of times ajb resynced (went through buildout state) */
-+ UINT16 ajcPhaseJitterCount; /* Number of times ajb inserted a phase discontinuity
-+ (possibly in silence or during CNG or due to a repeat/delete). */
-+ /* 14 entries. Make sure this is even (!) */
-+#else
-+ UINT16 peakHoldingTime; /* Peak Holding Time since last statistic */
-+ UINT16 minimumHoldingTime; /* Long-term tracker of min. Hold Time */
-+ UINT16 targetHoldingTime; /* Target holding Time */
-+ UINT16 inactiveFrameCount; /* Inactive Frame Count */
-+ UINT16 activeFrameCount; /* Active Frame Count */
-+ UINT16 hsxDecoderOverrunCount; /* Decoder overrun count */
-+ UINT16 hsxDecoderUnderrunCount; /* Decoder underrun count */
-+ UINT16 lostFrameCount; /* Lost frames resulting in frame repeat */
-+#endif
-+} ENDPT_VOICE_DECODERSTATS;
-+
-+/* Encoder Statistics */
-+typedef struct
-+{
-+#ifdef ENDPT_6345
-+ UINT16 inactiveFrameCount; /* Inactive Frame Count of Suppressed Frames*/
-+ UINT16 activeFrameCount; /* Active Frame Count - actually sent ingress */
-+ UINT16 sidFrameCount; /* SID Frame Count */
-+ UINT16 toneRelayCount; /* # of tone packets from PTE relayed ingress */
-+#else
-+ UINT16 hsxEncoderOverrunCount; /* Encoder overrun count */
-+#endif
-+} ENDPT_VOICE_ENCODERSTATS;
-+
-+
-+typedef struct
-+{
-+ ENDPT_VOICE_DECODERSTATS decoder;
-+ ENDPT_VOICE_ENCODERSTATS encoder;
-+} ENDPT_VOICE_PVE_STATS;
-+
-+typedef struct
-+{
-+ ENDPT_VOICE_PVE_STATS hsxPVEstats; /* statistics for PVE encoder and decoder */
-+
-+} ENDPT_VOICE_STATS;
-+
-+#if defined(__cplusplus)
-+}
-+#endif
-+
-+#endif /* ENDPTSTATS_H */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/log.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/log.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/log.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/log.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,104 @@
-+/***************************************************************************
-+* Copyright 2000 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16251 Laguna Canyon Road
-+* Irvine, California 92618
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: log.h
-+* Creation Date: 4 July 2000 (v0.00)
-+* VSS Info:
-+* $Revision: 23 $
-+* $Date: 9/14/01 4:54p $
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This header file contains the needed macros and function prototypes
-+* for logging on the terminal.
-+*
-+****************************************************************************/
-+
-+#ifndef LOG_H
-+#define LOG_H
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#define LOG_DBG
-+
-+#if (! (defined(__KERNEL__) || defined (LINUX)) )
-+
-+extern void Log( char const *format,...);
-+extern void LogMsg( char *string );
-+extern void LogDirectSerial( char const *format,...);
-+
-+#define PANIC(m) Log(m)
-+#define LOG(fmt) Log fmt
-+#define LOGERROR(fmt) Log fmt
-+#define LOG1(fmt) Log fmt /* Level 1 logging */
-+#define LOG2(fmt) /* Level 2 logging */
-+#define LOGMSG(buf) LogMsg buf
-+
-+/***********************************
-+** Error logging *
-+***********************************/
-+#elif defined(__KERNEL__)
-+
-+#define LOG(fmt) printk fmt ; printk("\n");
-+#define LOG_RAW(fmt) printk fmt ; printk("\n");
-+#define PANIC(fmt) printk("!!! PANIC !!! \n"); printk fmt ; printk("\n");
-+#define LOGERROR(fmt) printk("!!! ERROR !!! \n"); printk fmt ; printk("\n");
-+
-+#elif defined(LINUX)
-+
-+#include <stdio.h>
-+
-+#ifdef LOG_DBG
-+
-+#include <time.h>
-+
-+#define LOG(fmt) \
-+{ \
-+ struct tm *tm_ptr; \
-+ time_t curtime; \
-+ time( &curtime ); \
-+ tm_ptr = gmtime( &curtime ); \
-+ printf("%02d:%02d:%02d ", \
-+ tm_ptr->tm_hour, \
-+ tm_ptr->tm_min, \
-+ tm_ptr->tm_sec); \
-+ printf fmt; \
-+ printf("\n"); \
-+}
-+#else
-+#define LOG(fmt) printf fmt ; printf("\n");
-+#endif /* LOG_DBG */
-+
-+#define PANIC(fmt) printk("!!! PANIC !!! \n"); printk fmt ; printk("\n");
-+#define LOGERROR(fmt) \
-+{ \
-+ printf("ERROR !!! File %s (line %u): ", __FILE__, __LINE__);\
-+ printf fmt; \
-+ printf("\n"); \
-+}
-+
-+#else
-+#error Unknown OS
-+#endif
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif /* LOG_H */
-+
-+
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/mtacfg.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/mtacfg.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/mtacfg.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/mtacfg.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,72 @@
-+/***************************************************************************
-+* Copyright 2000 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16251 Laguna Canyon Road
-+* Irvine, California 92618
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: mtacfg.h
-+* Creation Date: 4 July 2000 (v0.00)
-+* VSS Info:
-+* $Revision: 23 $
-+* $Date: 9/14/01 4:54p $
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This header file contains all the different build options that
-+* are required by CablexChange components.
-+*
-+****************************************************************************/
-+
-+#ifndef _MTACFG_H
-+#define _MTACFG_H
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#include <cfg/endptCfg.h>
-+#include <cfg/vocmCfg.h>
-+#include <cfg/casCfg.h>
-+
-+#define MTA_VERSION_INFO "1.0"
-+
-+#if ( defined(IP_MGCP) || defined(IP_H323) || defined(IP_SIP) || defined(IP_MEGACO) )
-+#define VOIP
-+#endif
-+
-+#ifndef VOIP
-+#define ENDPOINT_NULL_SHIM
-+#endif
-+
-+
-+/***************************************************************
-+** Task Priority options
-+****************************************************************/
-+
-+#define RTP_TASK_PRIORITY BCMOS_TASK_PRTY_8 /* task priority for rtp */
-+#define HGCP_TASK_PRIORITY BCMOS_TASK_PRTY_8 /* task priority for HGCP */
-+#define RTCP_TASK_PRIORITY BCMOS_TASK_PRTY_13 /* task priority for rtcp */
-+
-+
-+/* Additional DSL specific definitions not provided by Cable Cfg files */
-+
-+/* For backward compatibility with older code */
-+#define MAX_ENDPT VOCM_CFG_MAX_ENDPT
-+#define MAX_CNX VOCM_CFG_MAX_CNX
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif /* MTACFG_H */
-+
-+
-+
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/profdrv.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/profdrv.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/profdrv.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/profdrv.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,151 @@
-+/***************************************************************************
-+* Copyright 2004 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16215 Alton Parkway
-+* P.O. Box 57013
-+* Irvine, California 92619-7013
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: profdrv.h
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This file contains the profiler device driver
-+*
-+****************************************************************************/
-+#ifndef PROFDRV_DEVICE_DRIVER__H__INCLUDED
-+#define PROFDRV_DEVICE_DRIVER__H__INCLUDED
-+
-+#include <linux/ioctl.h>
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#define PROFILER_NAME_MAX_LENGTH 32
-+#define PROFILER_MAX_RECSEQ 2048
-+
-+#define PROFILER_CPU_UTIL_VALID_START 0x01
-+#define PROFILER_CPU_UTIL_VALID_STOP 0x02
-+
-+#define PROFILER_SOURCE_USER 0x00
-+#define PROFILER_SOURCE_KERNEL 0x01
-+
-+#ifndef __STR
-+#define __STR(x) #x
-+#endif
-+#ifndef STR
-+#define STR(x) __STR(x)
-+#endif
-+
-+#define profdrv_read_32bit_cp0_register(source) \
-+({ int __res; \
-+ __asm__ __volatile__( \
-+ ".set\tpush\n\t" \
-+ ".set\treorder\n\t" \
-+ "mfc0\t%0,"STR(source)"\n\t" \
-+ ".set\tpop" \
-+ : "=r" (__res)); \
-+ __res;})
-+
-+/*
-+ Structure used to pass profiling information data at the user/kernel interface.
-+*/
-+typedef struct
-+{
-+ char name[PROFILER_NAME_MAX_LENGTH];
-+
-+} PROFILER_IOCTL_DATA;
-+
-+/*
-+ This structure is used to keep track of the CPU utilization during the profiling period.
-+*/
-+typedef struct
-+{
-+ unsigned tick_uptime_start;
-+ unsigned tick_idle_start;
-+ unsigned tick_user_start;
-+ unsigned tick_kernel_start;
-+ unsigned tick_uptime_stop;
-+ unsigned tick_idle_stop;
-+ unsigned tick_user_stop;
-+ unsigned tick_kernel_stop;
-+ unsigned char valid_data;
-+
-+} PROFILER_CPU_UTILIZATION;
-+
-+/*
-+ A generic structure to pass information about the profiler status.
-+*/
-+typedef struct
-+{
-+ unsigned status;
-+ unsigned cpu_jiffies_start;
-+ unsigned cpu_jiffies_stop;
-+ unsigned cpu_jiffies_factor;
-+ unsigned cpu_clock;
-+
-+} PROFILER_STATUS;
-+
-+/*
-+ The ioctl action index.
-+*/
-+typedef enum
-+{
-+ PROFILER_IOCTL_GET_DATA_DUMP_INDEX,
-+ PROFILER_IOCTL_GET_RECSEQ_DATA_DUMP_INDEX,
-+ PROFILER_IOCTL_SET_DATA_CLEAN_INDEX,
-+ PROFILER_IOCTL_SET_PROF_OPS_INDEX,
-+ PROFILER_IOCTL_REGISTER_CALL_INDEX,
-+ PROFILER_IOCTL_DEREGISTER_CALL_INDEX,
-+ PROFILER_IOCTL_START_CALL_INDEX,
-+ PROFILER_IOCTL_STOP_CALL_INDEX,
-+ PROFILER_IOCTL_PROFILER_STATUS_INDEX,
-+ PROFILER_IOCTL_SET_CPU_UTIL_INDEX,
-+ PROFILER_IOCTL_GET_CPU_UTIL_INDEX,
-+ PROFILER_IOCTL_GET_RECSEQ_DI_INDEX
-+
-+} PROFILER_IOCTL_INDEX;
-+
-+/*
-+ Assigning a device driver major number for the sake of making this application work
-+*/
-+#define PROFDRV_DEVICE_DRIVER_MAJOR 224
-+
-+#define PROFILER_IOCTL_GET_DATA_DUMP \
-+ _IOR( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_GET_DATA_DUMP_INDEX, unsigned )
-+#define PROFILER_IOCTL_GET_RECSEQ_DATA_DUMP \
-+ _IOR( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_GET_RECSEQ_DATA_DUMP_INDEX, unsigned )
-+#define PROFILER_IOCTL_SET_DATA_CLEAN \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_SET_DATA_CLEAN_INDEX, unsigned )
-+#define PROFILER_IOCTL_SET_PROF_OPS \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_SET_PROF_OPS_INDEX, unsigned )
-+#define PROFILER_IOCTL_REGISTER_CALL \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_REGISTER_CALL_INDEX, PROFILER_IOCTL_DATA )
-+#define PROFILER_IOCTL_DEREGISTER_CALL \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_DEREGISTER_CALL_INDEX, PROFILER_IOCTL_DATA )
-+#define PROFILER_IOCTL_START_CALL \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_START_CALL_INDEX, PROFILER_IOCTL_DATA )
-+#define PROFILER_IOCTL_STOP_CALL \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_STOP_CALL_INDEX, PROFILER_IOCTL_DATA )
-+#define PROFILER_IOCTL_PROFILER_STATUS_DATA \
-+ _IOR( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_PROFILER_STATUS_INDEX, PROFILER_STATUS )
-+#define PROFILER_IOCTL_SET_CPU_UTIL \
-+ _IOW( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_SET_CPU_UTIL_INDEX, PROFILER_CPU_UTILIZATION )
-+#define PROFILER_IOCTL_GET_CPU_UTIL \
-+ _IOR( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_GET_CPU_UTIL_INDEX, PROFILER_CPU_UTILIZATION )
-+#define PROFILER_IOCTL_GET_RECSEQ_DATA_INDEX \
-+ _IOR( PROFDRV_DEVICE_DRIVER_MAJOR, PROFILER_IOCTL_GET_RECSEQ_DI_INDEX, unsigned )
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* PROFDRV_DEVICE_DRIVER__H__INCLUDED */
-diff -urN linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/profiler.h linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/profiler.h
---- linux-2.6.8.1/bcmdrivers/broadcom/include/bcm963xx/profiler.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/broadcom/include/bcm963xx/profiler.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,114 @@
-+/***************************************************************************
-+* Copyright 2004 Broadcom Corporation
-+* All Rights Reserved
-+* No portions of this material may be reproduced in any form without the
-+* written permission of:
-+* Broadcom Corporation
-+* 16215 Alton Parkway
-+* P.O. Box 57013
-+* Irvine, California 92619-7013
-+* All information contained in this document is Broadcom Corporation
-+* company private, proprietary, and trade secret.
-+*
-+****************************************************************************
-+*
-+* Filename: profiler.h
-+*
-+****************************************************************************
-+* Description:
-+*
-+* This file contains the API definition for usage of the profiler tool
-+*
-+****************************************************************************/
-+#ifndef PROFILER__H__INCLUDED
-+#define PROFILER__H__INCLUDED
-+
-+#include "profdrv.h"
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+#define PROFILER_MAX_MONITORED_PROFILE 32
-+#define PROFILER_CPU_UTILIZATION_MIN 0.000001
-+#define PROFILER_MISC_STRING_LENGTH 256
-+#define PROFILER_CPU_TICK_FACTOR 2.0
-+#define PROFILER_S2MS_FACTOR 1000.0
-+
-+#define PROFILER_FLAG_RESOURCE_FREE 0x00
-+#define PROFILER_FLAG_RESOURCE_ALLOCATED 0x01
-+#define PROFILER_FLAG_RESOURCE_ERROR 0x02
-+#define PROFILER_FLAG_RESOURCE_COLLECT_PENDING 0x04
-+
-+/*
-+ This structure defines the data collected by the profiler.
-+*/
-+typedef struct
-+{
-+ unsigned char source; /* User or Kernel */
-+ unsigned char flag; /* Generic flag */
-+ char name[PROFILER_NAME_MAX_LENGTH]; /* Name of the function monitored */
-+ unsigned int now_cycle; /* The current cycle count saved */
-+ unsigned int min_cycle; /* The minimum number of cycles calculated for this function */
-+ unsigned int max_cycle; /* The maximum number of cycles calculated for this function */
-+ unsigned int avg_cycle; /* The average numnber of cycles calculated for this function */
-+ unsigned int count; /* The number of time this function has been profiled */
-+
-+} PROFILER_COLLECTED_DATA;
-+
-+
-+/*
-+ This structure defines the recorded sequence data collected by the profiler.
-+*/
-+typedef struct PROFILER_RECSEQ_DATA
-+{
-+ unsigned int id;
-+ unsigned long startTime;
-+ unsigned long endTime;
-+} PROFILER_RECSEQ_DATA;
-+
-+
-+void kernel_profiler_register( char *pName, unsigned char src );
-+void kernel_profiler_deregister( char *pName, unsigned char src );
-+void kernel_profiler_start( char *pName, unsigned char src );
-+void kernel_profiler_stop( char *pName, unsigned char src );
-+void kernel_profiler_recseq_start( unsigned int id );
-+void kernel_profiler_recseq_stop( unsigned int id );
-+
-+void kernel_profiler_reinit_collected( void );
-+void kernel_profiler_dump( void );
-+void kernel_profiler_recseq_dump( void );
-+void kernel_profiler_start_collect( void );
-+void kernel_profiler_stop_collect( void );
-+
-+
-+void profiler_init( void );
-+void profiler_get_status( PROFILER_STATUS *pStatus );
-+PROFILER_COLLECTED_DATA *profiler_get_data_dump( void );
-+PROFILER_RECSEQ_DATA* profiler_get_recseq_data_dump( void );
-+void profiler_get_cpu_util( PROFILER_CPU_UTILIZATION *pData );
-+void profiler_set_cpu_util( PROFILER_CPU_UTILIZATION *pData );
-+unsigned int profiler_get_recseq_data_index( void );
-+
-+/*
-+ This is the generic API that should be used by clients to access the profiler
-+*/
-+#define PROFILER_REGISTER( name ) ( kernel_profiler_register( (name), PROFILER_SOURCE_KERNEL ) )
-+#define PROFILER_DEREGISTER( name ) ( kernel_profiler_deregister( (name), PROFILER_SOURCE_KERNEL ) )
-+#define PROFILER_START( name ) ( kernel_profiler_start( (name), PROFILER_SOURCE_KERNEL ) )
-+#define PROFILER_STOP( name ) ( kernel_profiler_stop( (name), PROFILER_SOURCE_KERNEL ) )
-+#define PROFILER_RECSEQ_START( source ) ( kernel_profiler_recseq_start( (source) ) )
-+#define PROFILER_RECSEQ_STOP( source ) ( kernel_profiler_recseq_stop( (source)) )
-+
-+#define PROFILER_REINIT_COLLECTED() ( kernel_profiler_reinit_collected() )
-+#define PROFILER_DUMP() ( kernel_profiler_dump() )
-+#define PROFILER_RECSEQ_DUMP() ( kernel_profiler_recseq_dump() )
-+#define PROFILER_START_COLLECT() ( kernel_profiler_start_collect() )
-+#define PROFILER_STOP_COLLECT() ( kernel_profiler_stop_collect() )
-+
-+
-+#ifdef __cplusplus
-+}
-+#endif
-+
-+#endif /* PROFILER__H__INCLUDED */
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/Makefile
---- linux-2.6.8.1/bcmdrivers/opensource/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,26 @@
-+# File: modules/drivers/Makefile
-+#
-+# Makefile for the GPLed Linux kernel modules.
-+#
-+BRCM_BOARD:=bcm963xx
-+BRCM_CHIP:=6348
-+LN_NAME=bcm9$(BRCM_CHIP)
-+LN_DRIVER_DIRS =
-+
-+-include $(KERNEL_DIR)/.config
-+
-+ifneq ($(CONFIG_BCM_BOARD),)
-+ LN_DRIVER_DIRS +=ln -sn impl$(CONFIG_BCM_BOARD_IMPL) char/board/$(BRCM_BOARD)/$(LN_NAME);
-+endif
-+
-+ifneq ($(CONFIG_BCM_SERIAL),)
-+ LN_DRIVER_DIRS +=ln -sn impl$(CONFIG_BCM_SERIAL_IMPL) char/serial/$(LN_NAME);
-+endif
-+
-+obj-$(CONFIG_BCM_BOARD) += char/board/$(BRCM_BOARD)/$(LN_NAME)/
-+obj-$(CONFIG_BCM_SERIAL) += char/serial/$(LN_NAME)/
-+
-+
-+symlinks:
-+ find . -lname "*" -name "$(LN_NAME)" -print -exec rm -f "{}" ";"
-+ $(CONFIG_SHELL) -c "$(LN_DRIVER_DIRS)"
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/Makefile
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,17 @@
-+# Makefile for the bcm963xx board drivers
-+#
-+
-+
-+obj-y := board.o cfiflash.o bcm63xx_flash.o bcm63xx_led.o
-+
-+EXTRA_CFLAGS += -I. -I$(INC_BRCMBOARDPARMS_PATH)/$(BRCM_BOARD) -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+
-+ifeq ($(strip $(WIRELESS)),1)
-+ EXTRA_CFLAGS += -DWIRELESS
-+endif
-+
-+-include $(TOPDIR)/Rules.make
-+
-+clean:
-+ rm -f core *.o *.a *.s
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_flash.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_flash.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_flash.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,775 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ ***************************************************************************
-+ * File Name : bcm63xx_flash.c
-+ *
-+ * Description: This file contains the flash device driver APIs for bcm63xx board.
-+ *
-+ * Created on : 8/10/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
-+ *
-+ ***************************************************************************/
-+
-+
-+/* Includes. */
-+#include <linux/fs.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+#define BCMTAG_EXE_USE
-+#include <bcmTag.h>
-+#include "cfiflash.h"
-+#include "boardparms.h"
-+
-+//#define DEBUG_FLASH
-+
-+static FLASH_ADDR_INFO fInfo;
-+static int flashInitialized = 0;
-+
-+void *retriedKmalloc(size_t size)
-+{
-+ void *pBuf;
-+ int tryCount = 0;
-+
-+ // try 1000 times before quit
-+ while (((pBuf = kmalloc(size, GFP_KERNEL)) == NULL) && (tryCount++ < 1000))
-+ {
-+ current->state = TASK_INTERRUPTIBLE;
-+ schedule_timeout(HZ/10);
-+ }
-+ if (tryCount >= 1000)
-+ pBuf = NULL;
-+ else
-+ memset(pBuf, 0, size);
-+
-+ return pBuf;
-+}
-+
-+void retriedKfree(void *pBuf)
-+{
-+ kfree(pBuf);
-+}
-+
-+/***************************************************************************
-+// Function Name: getCrc32
-+// Description : caculate the CRC 32 of the given data.
-+// Parameters : pdata - array of data.
-+// size - number of input data bytes.
-+// crc - either CRC32_INIT_VALUE or previous return value.
-+// Returns : crc.
-+****************************************************************************/
-+UINT32 getCrc32(byte *pdata, UINT32 size, UINT32 crc)
-+{
-+ while (size-- > 0)
-+ crc = (crc >> 8) ^ Crc32_table[(crc ^ *pdata++) & 0xff];
-+
-+ return crc;
-+}
-+
-+// get the nvram start addr
-+//
-+unsigned long get_nvram_start_addr(void)
-+{
-+ return ((unsigned long)
-+ (flash_get_memptr(fInfo.flash_nvram_start_blk) + fInfo.flash_nvram_blk_offset));
-+}
-+
-+// get the scratch_pad start addr
-+//
-+unsigned long get_scratch_pad_start_addr(void)
-+{
-+ return ((unsigned long)
-+ (flash_get_memptr(fInfo.flash_scratch_pad_start_blk) + fInfo.flash_scratch_pad_blk_offset));
-+}
-+
-+
-+
-+/* *********************************************************************
-+ * kerSysImageTagGet()
-+ * Get the image tag
-+ * Input parameters:
-+ * none
-+ * Return value:
-+ * point to tag -- Found
-+ * NULL -- failed
-+ ********************************************************************* */
-+PFILE_TAG kerSysImageTagGet(void)
-+{
-+ int i;
-+ int totalBlks = flash_get_numsectors();
-+ UINT32 crc;
-+ unsigned char *sectAddr;
-+ PFILE_TAG pTag;
-+
-+#if defined(DEBUG_FLASH)
-+ printk("totalblks in tagGet=%d\n", totalBlks);
-+#endif
-+
-+ // start from 2nd blk, assume 1st one is always CFE
-+ for (i = 1; i < totalBlks; i++)
-+ {
-+ sectAddr = flash_get_memptr((byte) i);
-+ crc = CRC32_INIT_VALUE;
-+ crc = getCrc32(sectAddr, (UINT32)TAG_LEN-TOKEN_LEN, crc);
-+ pTag = (PFILE_TAG) sectAddr;
-+
-+#if defined(DEBUG_FLASH)
-+ printk("Check Tag crc on blk [%d]\n", i);
-+#endif
-+
-+ if (crc == (UINT32)(*(UINT32*)(pTag->tagValidationToken)))
-+ return pTag;
-+ }
-+
-+ return (PFILE_TAG) NULL;
-+}
-+
-+// Initialize the flash and fill out the fInfo structure
-+void kerSysFlashInit( void )
-+{
-+ int i = 0;
-+ int totalBlks = 0;
-+ int totalSize = 0;
-+ int startAddr = 0;
-+ int usedBlkSize = 0;
-+ NVRAM_DATA nvramData;
-+ UINT32 crc = CRC32_INIT_VALUE, savedCrc;
-+ PFILE_TAG pTag = NULL;
-+ unsigned long kernelEndAddr = 0;
-+ unsigned long spAddr = 0;
-+
-+ if (flashInitialized)
-+ return;
-+
-+ flashInitialized = 1;
-+ flash_init();
-+
-+ totalBlks = flash_get_numsectors();
-+ totalSize = flash_get_total_size();
-+
-+ printk("Total Flash size: %dK with %d sectors\n", totalSize/1024, totalBlks);
-+
-+ /* nvram is always at the end of flash */
-+ fInfo.flash_nvram_length = FLASH45_LENGTH_NVRAM;
-+ fInfo.flash_nvram_start_blk = 0; /* always the first block */
-+ fInfo.flash_nvram_number_blk = 1; /*always fits in the first block */
-+ fInfo.flash_nvram_blk_offset = NVRAM_DATA_OFFSET;
-+
-+ // check nvram CRC
-+ memcpy((char *)&nvramData, (char *)get_nvram_start_addr(), sizeof(NVRAM_DATA));
-+ savedCrc = nvramData.ulCheckSum;
-+ nvramData.ulCheckSum = 0;
-+ crc = getCrc32((char *)&nvramData, (UINT32) sizeof(NVRAM_DATA), crc);
-+
-+ BpSetBoardId( nvramData.szBoardId );
-+
-+ fInfo.flash_persistent_length = NVRAM_PSI_DEFAULT;
-+ if (savedCrc != crc)
-+ {
-+ printk("***Board is not initialized****: Using the default PSI size: %d\n",
-+ fInfo.flash_persistent_length);
-+ }
-+ else
-+ {
-+ unsigned long ulPsiSize;
-+ if( BpGetPsiSize( &ulPsiSize ) == BP_SUCCESS )
-+ fInfo.flash_persistent_length = ulPsiSize;
-+ else
-+ {
-+ printk("***Board id is not set****: Using the default PSI size: %d\n",
-+ fInfo.flash_persistent_length);
-+ }
-+ }
-+
-+ fInfo.flash_persistent_length *= ONEK;
-+ startAddr = totalSize - fInfo.flash_persistent_length;
-+ fInfo.flash_persistent_start_blk = flash_get_blk(startAddr+FLASH_BASE_ADDR_REG);
-+ fInfo.flash_persistent_number_blk = totalBlks - fInfo.flash_persistent_start_blk;
-+ // save abs SP address (Scratch Pad). it is before PSI
-+ spAddr = startAddr - SP_MAX_LEN ;
-+ // find out the offset in the start_blk
-+ usedBlkSize = 0;
-+ for (i = fInfo.flash_persistent_start_blk;
-+ i < (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk); i++)
-+ {
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+ }
-+ fInfo.flash_persistent_blk_offset = usedBlkSize - fInfo.flash_persistent_length;
-+
-+ // get the info for sp
-+ if (!(pTag = kerSysImageTagGet()))
-+ {
-+ printk("Failed to read image tag from flash\n");
-+ return;
-+ }
-+ kernelEndAddr = (unsigned long) simple_strtoul(pTag->kernelAddress, NULL, 10) + \
-+ (unsigned long) simple_strtoul(pTag->kernelLen, NULL, 10);
-+
-+ // make suer sp does not share kernel block
-+ fInfo.flash_scratch_pad_start_blk = flash_get_blk(spAddr+FLASH_BASE_ADDR_REG);
-+ if (fInfo.flash_scratch_pad_start_blk != flash_get_blk(kernelEndAddr))
-+ {
-+ fInfo.flash_scratch_pad_length = SP_MAX_LEN;
-+ if (fInfo.flash_persistent_start_blk == fInfo.flash_scratch_pad_start_blk) // share blk
-+ {
-+#if 1 /* do not used scratch pad unless it's in its own sector */
-+ printk("Scratch pad is not used for this flash part.\n");
-+ fInfo.flash_scratch_pad_length = 0; // no sp
-+#else /* allow scratch pad to share a sector with another section such as PSI */
-+ fInfo.flash_scratch_pad_number_blk = 1;
-+ fInfo.flash_scratch_pad_blk_offset = fInfo.flash_persistent_blk_offset - fInfo.flash_scratch_pad_length;
-+#endif
-+ }
-+ else // on different blk
-+ {
-+ fInfo.flash_scratch_pad_number_blk = fInfo.flash_persistent_start_blk\
-+ - fInfo.flash_scratch_pad_start_blk;
-+ // find out the offset in the start_blk
-+ usedBlkSize = 0;
-+ for (i = fInfo.flash_scratch_pad_start_blk;
-+ i < (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk); i++)
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+ fInfo.flash_scratch_pad_blk_offset = usedBlkSize - fInfo.flash_scratch_pad_length;
-+ }
-+ }
-+ else
-+ {
-+ printk("No flash for scratch pad!\n");
-+ fInfo.flash_scratch_pad_length = 0; // no sp
-+ }
-+
-+#if defined(DEBUG_FLASH)
-+ printk("fInfo.flash_scratch_pad_start_blk = %d\n", fInfo.flash_scratch_pad_start_blk);
-+ printk("fInfo.flash_scratch_pad_number_blk = %d\n", fInfo.flash_scratch_pad_number_blk);
-+ printk("fInfo.flash_scratch_pad_length = 0x%x\n", fInfo.flash_scratch_pad_length);
-+ printk("fInfo.flash_scratch_pad_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_scratch_pad_blk_offset);
-+
-+ printk("fInfo.flash_nvram_start_blk = %d\n", fInfo.flash_nvram_start_blk);
-+ printk("fInfo.flash_nvram_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_nvram_blk_offset);
-+ printk("fInfo.flash_nvram_number_blk = %d\n", fInfo.flash_nvram_number_blk);
-+
-+ printk("psi startAddr = %x\n", startAddr+FLASH_BASE_ADDR_REG);
-+ printk("fInfo.flash_persistent_start_blk = %d\n", fInfo.flash_persistent_start_blk);
-+ printk("fInfo.flash_persistent_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_persistent_blk_offset);
-+ printk("fInfo.flash_persistent_number_blk = %d\n", fInfo.flash_persistent_number_blk);
-+#endif
-+
-+}
-+
-+
-+
-+/***********************************************************************
-+ * Function Name: kerSysFlashAddrInfoGet
-+ * Description : Fills in a structure with information about the NVRAM
-+ * and persistent storage sections of flash memory.
-+ * Fro physmap.c to mount the fs vol.
-+ * Returns : None.
-+ ***********************************************************************/
-+void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info)
-+{
-+ pflash_addr_info->flash_nvram_blk_offset = fInfo.flash_nvram_blk_offset;
-+ pflash_addr_info->flash_nvram_length = fInfo.flash_nvram_length;
-+ pflash_addr_info->flash_nvram_number_blk = fInfo.flash_nvram_number_blk;
-+ pflash_addr_info->flash_nvram_start_blk = fInfo.flash_nvram_start_blk;
-+ pflash_addr_info->flash_persistent_blk_offset = fInfo.flash_persistent_blk_offset;
-+ pflash_addr_info->flash_persistent_length = fInfo.flash_persistent_length;
-+ pflash_addr_info->flash_persistent_number_blk = fInfo.flash_persistent_number_blk;
-+ pflash_addr_info->flash_persistent_start_blk = fInfo.flash_persistent_start_blk;
-+}
-+
-+
-+// get shared blks into *** pTempBuf *** which has to be released bye the caller!
-+// return: if pTempBuf != NULL, poits to the data with the dataSize of the buffer
-+// !NULL -- ok
-+// NULL -- fail
-+static char *getSharedBlks(int start_blk, int end_blk)
-+{
-+ int i = 0;
-+ int usedBlkSize = 0;
-+ int sect_size = 0;
-+ char *pTempBuf = NULL;
-+ char *pBuf = NULL;
-+
-+ for (i = start_blk; i < end_blk; i++)
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+
-+#if defined(DEBUG_FLASH)
-+ printk("usedBlkSize = %d\n", usedBlkSize);
-+#endif
-+
-+ if ((pTempBuf = (char *) retriedKmalloc(usedBlkSize)) == NULL)
-+ {
-+ printk("failed to allocate memory with size: %d\n", usedBlkSize);
-+ return pTempBuf;
-+ }
-+
-+ pBuf = pTempBuf;
-+ for (i = start_blk; i < end_blk; i++)
-+ {
-+ sect_size = flash_get_sector_size((byte) i);
-+
-+#if defined(DEBUG_FLASH)
-+ printk("i = %d, sect_size = %d, end_blk = %d\n", i, sect_size, end_blk);
-+#endif
-+ flash_read_buf((byte)i, 0, pBuf, sect_size);
-+ pBuf += sect_size;
-+ }
-+
-+ return pTempBuf;
-+}
-+
-+
-+
-+// Set the pTempBuf to flash from start_blk to end_blk
-+// return:
-+// 0 -- ok
-+// -1 -- fail
-+static int setSharedBlks(int start_blk, int end_blk, char *pTempBuf)
-+{
-+ int i = 0;
-+ int sect_size = 0;
-+ int sts = 0;
-+ char *pBuf = pTempBuf;
-+
-+ for (i = start_blk; i < end_blk; i++)
-+ {
-+ sect_size = flash_get_sector_size((byte) i);
-+ flash_sector_erase_int(i);
-+ if (flash_write_buf(i, 0, pBuf, sect_size) != sect_size)
-+ {
-+ printk("Error writing flash sector %d.", i);
-+ sts = -1;
-+ break;
-+ }
-+ pBuf += sect_size;
-+ }
-+
-+ return sts;
-+}
-+
-+
-+
-+/*******************************************************************************
-+ * NVRAM functions
-+ *******************************************************************************/
-+
-+// get nvram data
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysNvRamGet(char *string, int strLen, int offset)
-+{
-+ char *pBuf = NULL;
-+
-+ if (!flashInitialized)
-+ kerSysFlashInit();
-+
-+ if (strLen > FLASH45_LENGTH_NVRAM)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
-+ return -1;
-+
-+ // get string off the memory buffer
-+ memcpy(string, (pBuf + fInfo.flash_nvram_blk_offset + offset), strLen);
-+
-+ retriedKfree(pBuf);
-+
-+ return 0;
-+}
-+
-+
-+// set nvram
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysNvRamSet(char *string, int strLen, int offset)
-+{
-+ int sts = 0;
-+ char *pBuf = NULL;
-+
-+ if (strLen > FLASH45_LENGTH_NVRAM)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
-+ return -1;
-+
-+ // set string to the memory buffer
-+ memcpy((pBuf + fInfo.flash_nvram_blk_offset + offset), string, strLen);
-+
-+ if (setSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_number_blk + fInfo.flash_nvram_start_blk), pBuf) != 0)
-+ sts = -1;
-+
-+ retriedKfree(pBuf);
-+
-+ return sts;
-+}
-+
-+
-+/***********************************************************************
-+ * Function Name: kerSysEraseNvRam
-+ * Description : Erase the NVRAM storage section of flash memory.
-+ * Returns : 1 -- ok, 0 -- fail
-+ ***********************************************************************/
-+int kerSysEraseNvRam(void)
-+{
-+ int sts = 1;
-+ char *tempStorage = retriedKmalloc(FLASH45_LENGTH_NVRAM);
-+
-+ // just write the whole buf with '0xff' to the flash
-+ if (!tempStorage)
-+ sts = 0;
-+ else
-+ {
-+ memset(tempStorage, 0xff, FLASH45_LENGTH_NVRAM);
-+ if (kerSysNvRamSet(tempStorage, FLASH45_LENGTH_NVRAM, 0) != 0)
-+ sts = 0;
-+ retriedKfree(tempStorage);
-+ }
-+
-+ return sts;
-+}
-+
-+
-+/*******************************************************************************
-+ * PSI functions
-+ *******************************************************************************/
-+// get psi data
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysPersistentGet(char *string, int strLen, int offset)
-+{
-+ char *pBuf = NULL;
-+
-+ if (strLen > fInfo.flash_persistent_length)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
-+ return -1;
-+
-+ // get string off the memory buffer
-+ memcpy(string, (pBuf + fInfo.flash_persistent_blk_offset + offset), strLen);
-+
-+ retriedKfree(pBuf);
-+
-+ return 0;
-+}
-+
-+
-+// set psi
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysPersistentSet(char *string, int strLen, int offset)
-+{
-+ int sts = 0;
-+ char *pBuf = NULL;
-+
-+ if (strLen > fInfo.flash_persistent_length)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
-+ return -1;
-+
-+ // set string to the memory buffer
-+ memcpy((pBuf + fInfo.flash_persistent_blk_offset + offset), string, strLen);
-+
-+ if (setSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_number_blk + fInfo.flash_persistent_start_blk), pBuf) != 0)
-+ sts = -1;
-+
-+ retriedKfree(pBuf);
-+
-+ return sts;
-+}
-+
-+
-+// flash bcm image
-+// return:
-+// 0 - ok
-+// !0 - the sector number fail to be flashed (should not be 0)
-+int kerSysBcmImageSet( int flash_start_addr, char *string, int size)
-+{
-+ int sts;
-+ int sect_size;
-+ int blk_start;
-+ int i;
-+ char *pTempBuf = NULL;
-+ int whole_image = 0;
-+
-+ blk_start = flash_get_blk(flash_start_addr);
-+ if( blk_start < 0 )
-+ return( -1 );
-+
-+ if (flash_start_addr == FLASH_BASE && size > FLASH45_LENGTH_BOOT_ROM)
-+ whole_image = 1;
-+
-+ /* write image to flash memory */
-+ do
-+ {
-+ sect_size = flash_get_sector_size(blk_start);
-+// NOTE: for memory problem in multiple PVC configuration, temporary get rid of kmalloc this 64K for now.
-+// if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
-+// {
-+// printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
-+// kerSysMipsSoftReset(); // reset the board right away.
-+// }
-+ // for whole image, no check on psi
-+ if (!whole_image && blk_start == fInfo.flash_persistent_start_blk) // share the blk with psi
-+ {
-+ if (size > (sect_size - fInfo.flash_persistent_length))
-+ {
-+ printk("Image is too big\n");
-+ break; // image is too big. Can not overwrite to nvram
-+ }
-+ if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
-+ {
-+ printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
-+ kerSysMipsSoftReset(); // reset the board right away.
-+ }
-+ flash_read_buf((byte)blk_start, 0, pTempBuf, sect_size);
-+ if (copy_from_user((void *)pTempBuf,(void *)string, size) != 0)
-+ break; // failed ?
-+ flash_sector_erase_int(blk_start); // erase blk before flash
-+ if (flash_write_buf(blk_start, 0, pTempBuf, sect_size) == sect_size)
-+ size = 0; // break out and say all is ok
-+ retriedKfree(pTempBuf);
-+ break;
-+ }
-+
-+ flash_sector_erase_int(blk_start); // erase blk before flash
-+
-+ if (sect_size > size)
-+ {
-+ if (size & 1)
-+ size++;
-+ sect_size = size;
-+ }
-+
-+ if ((i = flash_write_buf(blk_start, 0, string, sect_size)) != sect_size) {
-+ break;
-+ }
-+ blk_start++;
-+ string += sect_size;
-+ size -= sect_size;
-+ } while (size > 0);
-+
-+ if (whole_image)
-+ {
-+ // If flashing a whole image, erase to end of flash.
-+ int total_blks = flash_get_numsectors();
-+ while( blk_start < total_blks )
-+ {
-+ flash_sector_erase_int(blk_start);
-+ blk_start++;
-+ }
-+ }
-+ if (pTempBuf)
-+ retriedKfree(pTempBuf);
-+
-+ if( size == 0 )
-+ sts = 0; // ok
-+ else
-+ sts = blk_start; // failed to flash this sector
-+
-+ return sts;
-+}
-+
-+/*******************************************************************************
-+ * SP functions
-+ *******************************************************************************/
-+// get sp data. NOTE: memcpy work here -- not using copy_from/to_user
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysScratchPadGet(char *tokenId, char *tokBuf, int bufLen)
-+{
-+ PSP_HEADER pHead = NULL;
-+ PSP_TOKEN pToken = NULL;
-+ char *pBuf = NULL;
-+ char *pShareBuf = NULL;
-+ char *startPtr = NULL;
-+ char *endPtr = NULL;
-+ char *spEndPtr = NULL;
-+ int sts = -1;
-+
-+ if (fInfo.flash_scratch_pad_length == 0)
-+ return sts;
-+
-+ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
-+ {
-+ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
-+ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
-+ return sts;
-+ }
-+
-+ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
-+ return sts;
-+
-+ // pBuf points to SP buf
-+ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
-+
-+ pHead = (PSP_HEADER) pBuf;
-+ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
-+ {
-+ printk("Scrap pad is not initialized.\n");
-+ return sts;
-+ }
-+
-+ // search up to SPUsedLen for the token
-+ startPtr = pBuf + sizeof(SP_HEADER);
-+ endPtr = pBuf + pHead->SPUsedLen;
-+ spEndPtr = pBuf + SP_MAX_LEN;
-+ while (startPtr < endPtr && startPtr < spEndPtr)
-+ {
-+ pToken = (PSP_TOKEN) startPtr;
-+ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
-+ {
-+ memcpy(tokBuf, startPtr + sizeof(SP_TOKEN), bufLen);
-+ sts = 0;
-+ break;
-+ }
-+ // get next token
-+ startPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
-+ }
-+
-+ retriedKfree(pShareBuf);
-+
-+ return sts;
-+}
-+
-+
-+// set sp. NOTE: memcpy work here -- not using copy_from/to_user
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysScratchPadSet(char *tokenId, char *tokBuf, int bufLen)
-+{
-+ PSP_TOKEN pToken = NULL;
-+ PSP_HEADER pHead = NULL;
-+ char *pShareBuf = NULL;
-+ char *pBuf = NULL;
-+ SP_HEADER SPHead;
-+ SP_TOKEN SPToken;
-+ char *curPtr;
-+ int sts = -1;
-+
-+ if (fInfo.flash_scratch_pad_length == 0)
-+ return sts;
-+
-+ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
-+ {
-+ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
-+ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
-+ return sts;
-+ }
-+
-+ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
-+ return sts;
-+
-+ // pBuf points to SP buf
-+ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
-+ pHead = (PSP_HEADER) pBuf;
-+
-+ // form header info. SPUsedLen later on...
-+ memset((char *)&SPHead, 0, sizeof(SP_HEADER));
-+ memcpy(SPHead.SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN);
-+ SPHead.SPVersion = SP_VERSION;
-+
-+ // form token info.
-+ memset((char*)&SPToken, 0, sizeof(SP_TOKEN));
-+ strncpy(SPToken.tokenName, tokenId, TOKEN_NAME_LEN - 1);
-+ SPToken.tokenLen = bufLen;
-+ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
-+ {
-+ // new sp, so just flash the token
-+ printk("No Scrap pad found. Initialize scratch pad...\n");
-+ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen;
-+ memcpy(pBuf, (char *)&SPHead, sizeof(SP_HEADER));
-+ curPtr = pBuf + sizeof(SP_HEADER);
-+ memcpy(curPtr, (char *)&SPToken, sizeof(SP_TOKEN));
-+ curPtr += sizeof(SP_TOKEN);
-+ memcpy(curPtr, tokBuf, bufLen);
-+ }
-+ else
-+ {
-+ // need search for the token, if exist with same size overwrite it. if sizes differ,
-+ // move over the later token data over and put the new one at the end
-+ char *endPtr = pBuf + pHead->SPUsedLen;
-+ char *spEndPtr = pBuf + SP_MAX_LEN;
-+ curPtr = pBuf + sizeof(SP_HEADER);
-+ while (curPtr < endPtr && curPtr < spEndPtr)
-+ {
-+ pToken = (PSP_TOKEN) curPtr;
-+ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
-+ {
-+ if (pToken->tokenLen == bufLen) // overwirte it
-+ {
-+ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen);
-+ break;
-+ }
-+ else // move later data over and put the new token at the end
-+ {
-+ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen); // ~~~
-+ break;
-+ }
-+ }
-+ else // not same token ~~~
-+ {
-+ }
-+ // get next token
-+ curPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
-+ } // end while
-+ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen; // ~~~
-+ if (SPHead.SPUsedLen > SP_MAX_LEN)
-+ {
-+ printk("No more Scratch pad space left! Over limit by %d bytes\n", SPHead.SPUsedLen - SP_MAX_LEN);
-+ return sts;
-+ }
-+
-+ } // else if not new sp
-+
-+ sts = setSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_number_blk + fInfo.flash_scratch_pad_start_blk), pShareBuf);
-+
-+ retriedKfree(pShareBuf);
-+
-+ return sts;
-+
-+
-+}
-+
-+int kerSysFlashSizeGet(void)
-+{
-+ return flash_get_total_size();
-+}
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_led.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_led.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_led.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/bcm63xx_led.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,582 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : bcm63xx_led.c
-+ *
-+ * Description:
-+ *
-+ * This file contains bcm963xx board led control API functions.
-+ *
-+ * To use it, do the following
-+ *
-+ * 1). define in the board.c the following led mappping (this is for 6345GW board):
-+ * const LED_MAP_PAIR cLedMapping45GW[] =
-+ * { // led name Initial state physical pin (ledMask)
-+ * {kLedUsb, kLedStateOff, GPIO_LED_PIN_7},
-+ * {kLedAdsl, kLedStateOff, GPIO_LED_PIN_8},
-+ * {kLedPPP, kLedStateOff, GPIO_LED_PIN_9}, // PPP and WanData share PIN_9
-+ * {kLedWanData, kLedStateOff, GPIO_LED_PIN_9},
-+ * {kLedWireless, kLedStateOff, GPIO_LED_PIN_10},
-+ * {kLedEnd, kLedStateOff, 0 } // NOTE: kLedEnd has to be at the end.
-+ *
-+ * 2). };To initialize led API and initial state of the leds, call the following function with the mapping
-+ * pointer from the above struct
-+ *
-+ * boardLedInit((PLED_MAP_PAIR) &cLedMapping45R);
-+ *
-+ * 3). Sample call for kernel mode:
-+ *
-+ * kerSysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board.h
-+ *
-+ * 4). Sample call for user mode
-+ *
-+ * sysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board_api.h
-+ *
-+ *
-+ * Created on : 10/28/2002 seanl
-+ *
-+ ***************************************************************************/
-+
-+/* Includes. */
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <linux/netdevice.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+
-+#define k100ms (HZ / 10) // ~100 ms
-+#define kFastBlinkCount 0 // ~100ms
-+#define kSlowBlinkCount 5 // ~600ms
-+
-+#define MAX_VIRT_LEDS 12
-+
-+// uncomment // for debug led
-+//#define DEBUG_LED
-+
-+// global variables:
-+struct timer_list gLedTimer;
-+int gTimerOn = FALSE;
-+int gLedCount = 0;
-+
-+typedef struct ledinfo
-+{
-+ unsigned short ledMask; // mask for led: ie. giop 10 = 0x0400
-+ unsigned short ledActiveLow; // GPIO bit reset to turn on LED
-+ unsigned short ledMaskFail; // mask for led: ie. giop 10 = 0x0400
-+ unsigned short ledActiveLowFail;// GPIO bit reset to turn on LED
-+ BOARD_LED_STATE ledState; // current led state
-+ BOARD_LED_STATE savedLedState; // used in blink once for restore to the orignal ledState
-+ int blinkCountDown; // if == 0, do blink (toggle). Is assgined value and dec by 1 at each timer.
-+} LED_INFO, *PLED_INFO;
-+
-+static PLED_INFO gLed = NULL;
-+static PLED_INFO gpVirtLeds[MAX_VIRT_LEDS];
-+static HANDLE_LED_FUNC gLedHwFunc[MAX_VIRT_LEDS];
-+static HANDLE_LED_FUNC gLedHwFailFunc[MAX_VIRT_LEDS];
-+
-+#if 0 /* BROKEN */
-+#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+static int gLedOffInBridgeMode = 1;
-+#elif defined(CONFIG_BCM96345)
-+static int gLedOffInBridgeMode = 0;
-+#endif
-+#endif
-+
-+void ledTimerExpire(void);
-+int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed );
-+
-+//**************************************************************************************
-+// LED operations
-+//**************************************************************************************
-+
-+// turn led on and set the ledState
-+void ledOn(PLED_INFO pLed)
-+{
-+ if( pLed->ledMask )
-+ {
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLow )
-+ GPIO->GPIOio &= ~pLed->ledMask; // turn on the led
-+ else
-+ GPIO->GPIOio |= pLed->ledMask; // turn on the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOn;
-+ }
-+}
-+
-+
-+// turn led off and set the ledState
-+void ledOff(PLED_INFO pLed)
-+{
-+ if( pLed->ledMask )
-+ {
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLow )
-+ GPIO->GPIOio |= pLed->ledMask; // turn off the led
-+ else
-+ GPIO->GPIOio &= ~pLed->ledMask; // turn off the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOff;
-+ }
-+}
-+
-+// turn led on and set the ledState
-+void ledOnFail(PLED_INFO pLed)
-+{
-+ if( pLed->ledMaskFail )
-+ {
-+ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLowFail )
-+ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn on the led
-+ else
-+ GPIO->GPIOio |= pLed->ledMaskFail; // turn on the led
-+ pLed->ledState = pLed->savedLedState = kLedStateFail;
-+ }
-+}
-+
-+
-+// turn led off and set the ledState
-+void ledOffFail(PLED_INFO pLed)
-+{
-+ if( pLed->ledMaskFail )
-+ {
-+ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLowFail )
-+ GPIO->GPIOio |= pLed->ledMaskFail; // turn off the led
-+ else
-+ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn off the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOff;
-+ }
-+}
-+
-+
-+// toggle the led and return the current ledState
-+BOARD_LED_STATE ledToggle(PLED_INFO pLed)
-+{
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if (GPIO->GPIOio & pLed->ledMask)
-+ {
-+ GPIO->GPIOio &= ~(pLed->ledMask);
-+ return( (pLed->ledActiveLow) ? kLedStateOn : kLedStateOff );
-+ }
-+ else
-+ {
-+ GPIO->GPIOio |= pLed->ledMask;
-+ return( (pLed->ledActiveLow) ? kLedStateOff : kLedStateOn );
-+ }
-+}
-+
-+
-+// led timer. Will return if timer is already on
-+void ledTimerStart(void)
-+{
-+ if (gTimerOn)
-+ return;
-+
-+#if defined(DEBUG_LED)
-+ printk("led: add_timer\n");
-+#endif
-+
-+ init_timer(&gLedTimer);
-+ gLedTimer.function = (void*)ledTimerExpire;
-+ gLedTimer.expires = jiffies + k100ms; // timer expires in ~100ms
-+ add_timer (&gLedTimer);
-+ gTimerOn = TRUE;
-+}
-+
-+
-+// led timer expire kicks in about ~100ms and perform the led operation according to the ledState and
-+// restart the timer according to ledState
-+void ledTimerExpire(void)
-+{
-+ int i;
-+ PLED_INFO pCurLed;
-+
-+ gTimerOn = FALSE;
-+
-+ for (i = 0, pCurLed = gLed; i < gLedCount; i++, pCurLed++)
-+ {
-+#if defined(DEBUG_LED)
-+ printk("led[%d]: Mask=0x%04x, State = %d, blcd=%d\n", i, pCurLed->ledMask, pCurLed->ledState, pCurLed->blinkCountDown);
-+#endif
-+ switch (pCurLed->ledState)
-+ {
-+ case kLedStateOn:
-+ case kLedStateOff:
-+ case kLedStateFail:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ break;
-+
-+ case kLedStateBlinkOnce:
-+ ledToggle(pCurLed);
-+ pCurLed->blinkCountDown = 0; // reset to 0
-+ pCurLed->ledState = pCurLed->savedLedState;
-+ if (pCurLed->ledState == kLedStateSlowBlinkContinues ||
-+ pCurLed->ledState == kLedStateFastBlinkContinues)
-+ ledTimerStart(); // start timer if in blinkContinues stats
-+ break;
-+
-+ case kLedStateSlowBlinkContinues:
-+ if (pCurLed->blinkCountDown-- == 0)
-+ {
-+ pCurLed->blinkCountDown = kSlowBlinkCount;
-+ ledToggle(pCurLed);
-+ }
-+ ledTimerStart();
-+ break;
-+
-+ case kLedStateFastBlinkContinues:
-+ if (pCurLed->blinkCountDown-- == 0)
-+ {
-+ pCurLed->blinkCountDown = kFastBlinkCount;
-+ ledToggle(pCurLed);
-+ }
-+ ledTimerStart();
-+ break;
-+
-+ default:
-+ printk("Invalid state = %d\n", pCurLed->ledState);
-+ }
-+ }
-+}
-+
-+// initialize the gLedCount and allocate and fill gLed struct
-+void __init boardLedInit(PLED_MAP_PAIR cLedMapping)
-+{
-+ PLED_MAP_PAIR p1, p2;
-+ PLED_INFO pCurLed;
-+ int needTimer = FALSE;
-+ int alreadyUsed = 0;
-+
-+#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+ /* Set blink rate for BCM6348/BCM6338 hardware LEDs. */
-+ GPIO->LEDCtrl &= ~LED_INTERVAL_SET_MASK;
-+ GPIO->LEDCtrl |= LED_INTERVAL_SET_80MS;
-+#endif
-+
-+ memset( gpVirtLeds, 0x00, sizeof(gpVirtLeds) );
-+ memset( gLedHwFunc, 0x00, sizeof(gLedHwFunc) );
-+ memset( gLedHwFailFunc, 0x00, sizeof(gLedHwFailFunc) );
-+
-+ gLedCount = 0;
-+
-+ // Check for multiple LED names and multiple LED GPIO pins that share the
-+ // same physical board LED.
-+ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
-+ {
-+ alreadyUsed = 0;
-+ for( p2 = cLedMapping; p2 != p1; p2++ )
-+ {
-+ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
-+ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
-+ {
-+ alreadyUsed = 1;
-+ break;
-+ }
-+ }
-+
-+ if( alreadyUsed == 0 )
-+ gLedCount++;
-+ }
-+
-+ gLed = (PLED_INFO) kmalloc((gLedCount * sizeof(LED_INFO)), GFP_KERNEL);
-+ if( gLed == NULL )
-+ {
-+ printk( "LED memory allocation error.\n" );
-+ return;
-+ }
-+
-+ memset( gLed, 0x00, gLedCount * sizeof(LED_INFO) );
-+
-+ // initial the gLed with unique ledMask and initial state. If more than 1 ledNames share the physical led
-+ // (ledMask) the first defined led's ledInitState will be used.
-+ pCurLed = gLed;
-+ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
-+ {
-+ if( (int) p1->ledName > MAX_VIRT_LEDS )
-+ continue;
-+
-+ alreadyUsed = 0;
-+ for( p2 = cLedMapping; p2 != p1; p2++ )
-+ {
-+ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
-+ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
-+ {
-+ alreadyUsed = 1;
-+ break;
-+ }
-+ }
-+
-+ if( alreadyUsed == 0 )
-+ {
-+ // Initialize the board LED for the first time.
-+ needTimer = initLedInfo( p1, pCurLed );
-+ gpVirtLeds[(int) p1->ledName] = pCurLed;
-+ pCurLed++;
-+ }
-+ else
-+ {
-+ PLED_INFO pLed;
-+ for( pLed = gLed; pLed != pCurLed; pLed++ )
-+ {
-+ // Find the LED_INFO structure that has already been initialized.
-+ if((pLed->ledMask && pLed->ledMask == p1->ledMask) ||
-+ (pLed->ledMaskFail && pLed->ledMaskFail==p1->ledMaskFail))
-+ {
-+ // The board LED has already been initialized but possibly
-+ // not completely initialized.
-+ if( p1->ledMask )
-+ {
-+ pLed->ledMask = p1->ledMask;
-+ pLed->ledActiveLow = p1->ledActiveLow;
-+ }
-+ if( p1->ledMaskFail )
-+ {
-+ pLed->ledMaskFail = p1->ledMaskFail;
-+ pLed->ledActiveLowFail = p1->ledActiveLowFail;
-+ }
-+ gpVirtLeds[(int) p1->ledName] = pLed;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (needTimer)
-+ ledTimerStart();
-+
-+#if defined(DEBUG_LED)
-+ int i;
-+ for (i=0; i < gLedCount; i++)
-+ printk("initLed: led[%d]: mask=0x%04x, state=%d\n", i,(gLed+i)->ledMask, (gLed+i)->ledState);
-+#endif
-+
-+}
-+
-+// Initialize a structure that contains information about a physical board LED
-+// control. The board LED may contain more than one GPIO pin to control a
-+// normal condition (green) or a failure condition (red).
-+int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed )
-+{
-+ int needTimer = FALSE;
-+ pCurLed->ledState = pCurLed->savedLedState = pCurMap->ledInitState;
-+ pCurLed->ledMask = pCurMap->ledMask;
-+ pCurLed->ledActiveLow = pCurMap->ledActiveLow;
-+ pCurLed->ledMaskFail = pCurMap->ledMaskFail;
-+ pCurLed->ledActiveLowFail = pCurMap->ledActiveLowFail;
-+
-+ switch (pCurLed->ledState)
-+ {
-+ case kLedStateOn:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOn(pCurLed);
-+ break;
-+ case kLedStateOff:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOff(pCurLed);
-+ break;
-+ case kLedStateFail:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOnFail(pCurLed);
-+ break;
-+ case kLedStateBlinkOnce:
-+ pCurLed->blinkCountDown = 1;
-+ needTimer = TRUE;
-+ break;
-+ case kLedStateSlowBlinkContinues:
-+ pCurLed->blinkCountDown = kSlowBlinkCount;
-+ needTimer = TRUE;
-+ break;
-+ case kLedStateFastBlinkContinues:
-+ pCurLed->blinkCountDown = kFastBlinkCount;
-+ needTimer = TRUE;
-+ break;
-+ default:
-+ printk("Invalid state = %d\n", pCurLed->ledState);
-+ }
-+
-+ return( needTimer );
-+}
-+
-+#if 0 /* BROKEN */
-+// Determines if there is at least one interface in bridge mode. Bridge mode
-+// is determined by the cfm convention of naming bridge interfaces nas17
-+// through nas24.
-+static int isBridgedProtocol(void)
-+{
-+ extern int dev_get(const char *name);
-+ const int firstBridgeId = 17;
-+ const int lastBridgeId = 24;
-+ int i;
-+ int ret = FALSE;
-+ char name[16];
-+
-+ for( i = firstBridgeId; i <= lastBridgeId; i++ )
-+ {
-+ sprintf( name, "nas%d", i );
-+
-+ if( dev_get(name) )
-+ {
-+ ret = TRUE;
-+ break;
-+ }
-+ }
-+
-+ return(ret);
-+}
-+#endif
-+
-+// led ctrl. Maps the ledName to the corresponding ledInfoPtr and perform the led operation
-+void boardLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-+{
-+ PLED_INFO ledInfoPtr;
-+
-+ // do the mapping from virtual to physical led
-+ if( (int) ledName < MAX_VIRT_LEDS )
-+ ledInfoPtr = gpVirtLeds[(int) ledName];
-+ else
-+ ledInfoPtr = NULL;
-+
-+ if (ledInfoPtr == NULL)
-+ return;
-+
-+ if( ledState != kLedStateFail && gLedHwFunc[(int) ledName] )
-+ {
-+ (*gLedHwFunc[(int) ledName]) (ledName, ledState);
-+ ledOffFail(ledInfoPtr);
-+ return;
-+ }
-+ else
-+ if( ledState == kLedStateFail && gLedHwFailFunc[(int) ledName] )
-+ {
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, ledState);
-+ ledOff(ledInfoPtr);
-+ return;
-+ }
-+
-+#if 0 /* BROKEN */
-+ // Do not blink the WAN Data LED if at least one interface is in bridge mode.
-+ if(gLedOffInBridgeMode == 1 && (ledName == kLedWanData || ledName == kLedPPP))
-+ {
-+ static int BridgedProtocol = -1;
-+
-+ if( BridgedProtocol == -1 )
-+ BridgedProtocol = isBridgedProtocol();
-+
-+ if( BridgedProtocol == TRUE )
-+ return;
-+ }
-+#endif
-+
-+ // If the state is kLedStateFail and there is not a failure LED defined
-+ // in the board parameters, change the state to kLedStateFastBlinkContinues.
-+ if( ledState == kLedStateFail && ledInfoPtr->ledMaskFail == 0 )
-+ ledState = kLedStateFastBlinkContinues;
-+
-+ switch (ledState)
-+ {
-+ case kLedStateOn:
-+ // First, turn off the complimentary (failure) LED GPIO.
-+ if( ledInfoPtr->ledMaskFail )
-+ ledOffFail(ledInfoPtr);
-+ else
-+ if( gLedHwFailFunc[(int) ledName] )
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn on the specified LED GPIO.
-+ ledOn(ledInfoPtr);
-+ break;
-+
-+ case kLedStateOff:
-+ // First, turn off the complimentary (failure) LED GPIO.
-+ if( ledInfoPtr->ledMaskFail )
-+ ledOffFail(ledInfoPtr);
-+ else
-+ if( gLedHwFailFunc[(int) ledName] )
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn off the specified LED GPIO.
-+ ledOff(ledInfoPtr);
-+ break;
-+
-+ case kLedStateFail:
-+ // First, turn off the complimentary (normal) LED GPIO.
-+ if( ledInfoPtr->ledMask )
-+ ledOff(ledInfoPtr);
-+ else
-+ if( gLedHwFunc[(int) ledName] )
-+ (*gLedHwFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn on (red) the specified LED GPIO.
-+ ledOnFail(ledInfoPtr);
-+ break;
-+
-+ case kLedStateBlinkOnce:
-+ // skip blinkOnce if it is already in Slow/Fast blink continues state
-+ if (ledInfoPtr->savedLedState == kLedStateSlowBlinkContinues ||
-+ ledInfoPtr->savedLedState == kLedStateFastBlinkContinues)
-+ ;
-+ else
-+ {
-+ if (ledInfoPtr->blinkCountDown == 0) // skip the call if it is 1
-+ {
-+ ledToggle(ledInfoPtr);
-+ ledInfoPtr->blinkCountDown = 1; // it will be reset to 0 when timer expires
-+ ledInfoPtr->ledState = kLedStateBlinkOnce;
-+ ledTimerStart();
-+ }
-+ }
-+ break;
-+
-+ case kLedStateSlowBlinkContinues:
-+ ledInfoPtr->blinkCountDown = kSlowBlinkCount;
-+ ledInfoPtr->ledState = kLedStateSlowBlinkContinues;
-+ ledInfoPtr->savedLedState = kLedStateSlowBlinkContinues;
-+ ledTimerStart();
-+ break;
-+
-+ case kLedStateFastBlinkContinues:
-+ ledInfoPtr->blinkCountDown = kFastBlinkCount;
-+ ledInfoPtr->ledState = kLedStateFastBlinkContinues;
-+ ledInfoPtr->savedLedState = kLedStateFastBlinkContinues;
-+ ledTimerStart();
-+ break;
-+
-+ default:
-+ printk("Invalid led state\n");
-+ }
-+}
-+
-+// This function is called for an LED that is controlled by hardware.
-+void kerSysLedRegisterHwHandler( BOARD_LED_NAME ledName,
-+ HANDLE_LED_FUNC ledHwFunc, int ledFailType )
-+{
-+ if( (int) ledName < MAX_VIRT_LEDS )
-+ {
-+ if( ledFailType == 1 )
-+ gLedHwFailFunc[(int) ledName] = ledHwFunc;
-+ else
-+ gLedHwFunc[(int) ledName] = ledHwFunc;
-+ }
-+}
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/board.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/board.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/board.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/board.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,1570 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : board.c
-+ *
-+ * Description: This file contains Linux character device driver entry
-+ * for the board related ioctl calls: flash, get free kernel
-+ * page and dump kernel memory, etc.
-+ *
-+ * Created on : 2/20/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
-+ *
-+ ***************************************************************************/
-+
-+
-+/* Includes. */
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <linux/pagemap.h>
-+#include <asm/uaccess.h>
-+#include <linux/wait.h>
-+#include <linux/poll.h>
-+#include <linux/sched.h>
-+#include <linux/list.h>
-+#include <linux/if.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+#include <bcmTag.h>
-+#include "boardparms.h"
-+#include "cfiflash.h"
-+#include "bcm_intr.h"
-+#include "board.h"
-+#include "bcm_map_part.h"
-+
-+/* Typedefs. */
-+#if defined (NON_CONSECUTIVE_MAC)
-+// used to be the last octet. Now changed to the first 5 bits of the the forth octet
-+// to reduced the duplicated MAC addresses.
-+#define CHANGED_OCTET 3
-+#define SHIFT_BITS 3
-+#else
-+#define CHANGED_OCTET 1
-+#define SHIFT_BITS 0
-+#endif
-+
-+#if defined (WIRELESS)
-+#define SES_BTN_PRESSED 0x00000001
-+#define SES_EVENTS SES_BTN_PRESSED /*OR all values if any*/
-+#define SES_LED_OFF 0
-+#define SES_LED_ON 1
-+#define SES_LED_BLINK 2
-+#endif
-+
-+typedef struct
-+{
-+ unsigned long ulId;
-+ char chInUse;
-+ char chReserved[3];
-+} MAC_ADDR_INFO, *PMAC_ADDR_INFO;
-+
-+typedef struct
-+{
-+ unsigned long ulSdramSize;
-+ unsigned long ulPsiSize;
-+ unsigned long ulNumMacAddrs;
-+ unsigned long ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
-+ MAC_ADDR_INFO MacAddrs[1];
-+} NVRAM_INFO, *PNVRAM_INFO;
-+
-+typedef struct
-+{
-+ unsigned long eventmask;
-+} BOARD_IOC, *PBOARD_IOC;
-+
-+
-+/*Dyinggasp callback*/
-+typedef void (*cb_dgasp_t)(void *arg);
-+typedef struct _CB_DGASP__LIST
-+{
-+ struct list_head list;
-+ char name[IFNAMSIZ];
-+ cb_dgasp_t cb_dgasp_fn;
-+ void *context;
-+}CB_DGASP_LIST , *PCB_DGASP_LIST;
-+
-+
-+static LED_MAP_PAIR LedMapping[] =
-+{ // led name Initial state physical pin (ledMask)
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0} // NOTE: kLedEnd has to be at the end.
-+};
-+
-+/* Externs. */
-+extern struct file fastcall *fget_light(unsigned int fd, int *fput_needed);
-+extern unsigned int nr_free_pages (void);
-+extern const char *get_system_type(void);
-+extern void kerSysFlashInit(void);
-+extern unsigned long get_nvram_start_addr(void);
-+extern unsigned long get_scratch_pad_start_addr(void);
-+extern unsigned long getMemorySize(void);
-+extern void __init boardLedInit(PLED_MAP_PAIR);
-+extern void boardLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
-+extern void kerSysLedRegisterHandler( BOARD_LED_NAME ledName,
-+ HANDLE_LED_FUNC ledHwFunc, int ledFailType );
-+
-+/* Prototypes. */
-+void __init InitNvramInfo( void );
-+static int board_open( struct inode *inode, struct file *filp );
-+static int board_ioctl( struct inode *inode, struct file *flip, unsigned int command, unsigned long arg );
-+static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos);
-+static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait);
-+static int board_release(struct inode *inode, struct file *filp);
-+
-+static BOARD_IOC* borad_ioc_alloc(void);
-+static void borad_ioc_free(BOARD_IOC* board_ioc);
-+
-+/* DyingGasp function prototype */
-+static void __init kerSysDyingGaspMapIntr(void);
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs);
-+#else
-+static unsigned int kerSysDyingGaspIsr(void);
-+#endif
-+static void __init kerSysInitDyingGaspHandler( void );
-+static void __exit kerSysDeinitDyingGaspHandler( void );
-+/* -DyingGasp function prototype - */
-+
-+
-+#if defined (WIRELESS)
-+static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs);
-+static void __init sesBtn_mapGpio(void);
-+static void __init sesBtn_mapIntr(int context);
-+static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait);
-+static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos);
-+static void __init sesLed_mapGpio(void);
-+static void sesLed_ctrl(int action);
-+static void __init ses_board_init(void);
-+static void __exit ses_board_deinit(void);
-+#endif
-+
-+static PNVRAM_INFO g_pNvramInfo = NULL;
-+static int g_ledInitialized = 0;
-+static wait_queue_head_t g_board_wait_queue;
-+static CB_DGASP_LIST *g_cb_dgasp_list_head = NULL;
-+
-+static int g_wakeup_monitor = 0;
-+static struct file *g_monitor_file = NULL;
-+static struct task_struct *g_monitor_task = NULL;
-+static unsigned int (*g_orig_fop_poll)
-+ (struct file *, struct poll_table_struct *) = NULL;
-+
-+static struct file_operations board_fops =
-+{
-+ open: board_open,
-+ ioctl: board_ioctl,
-+ poll: board_poll,
-+ read: board_read,
-+ release: board_release,
-+};
-+
-+uint32 board_major = 0;
-+
-+#if defined (WIRELESS)
-+static unsigned short sesBtn_irq = BP_NOT_DEFINED;
-+static unsigned short sesBtn_gpio = BP_NOT_DEFINED;
-+static unsigned short sesLed_gpio = BP_NOT_DEFINED;
-+#endif
-+
-+#if defined(MODULE)
-+int init_module(void)
-+{
-+ return( brcm_board_init() );
-+}
-+
-+void cleanup_module(void)
-+{
-+ if (MOD_IN_USE)
-+ printk("brcm flash: cleanup_module failed because module is in use\n");
-+ else
-+ brcm_board_cleanup();
-+}
-+#endif //MODULE
-+
-+
-+
-+static int __init brcm_board_init( void )
-+{
-+ typedef int (*BP_LED_FUNC) (unsigned short *);
-+ static struct BpLedInformation
-+ {
-+ BOARD_LED_NAME ledName;
-+ BP_LED_FUNC bpFunc;
-+ BP_LED_FUNC bpFuncFail;
-+ } bpLedInfo[] =
-+ {{kLedAdsl, BpGetAdslLedGpio, BpGetAdslFailLedGpio},
-+ {kLedWireless, BpGetWirelessLedGpio, NULL},
-+ {kLedUsb, BpGetUsbLedGpio, NULL},
-+ {kLedHpna, BpGetHpnaLedGpio, NULL},
-+ {kLedWanData, BpGetWanDataLedGpio, NULL},
-+ {kLedPPP, BpGetPppLedGpio, BpGetPppFailLedGpio},
-+ {kLedVoip, BpGetVoipLedGpio, NULL},
-+ {kLedSes, BpGetWirelessSesLedGpio, NULL},
-+ {kLedEnd, NULL, NULL}
-+ };
-+
-+ int ret;
-+
-+ ret = register_chrdev(BOARD_DRV_MAJOR, "bcrmboard", &board_fops );
-+ if (ret < 0)
-+ printk( "brcm_board_init(major %d): fail to register device.\n",BOARD_DRV_MAJOR);
-+ else
-+ {
-+ PLED_MAP_PAIR pLedMap = LedMapping;
-+ unsigned short gpio;
-+ struct BpLedInformation *pInfo;
-+
-+ printk("brcmboard: brcm_board_init entry\n");
-+ board_major = BOARD_DRV_MAJOR;
-+ InitNvramInfo();
-+
-+ for( pInfo = bpLedInfo; pInfo->ledName != kLedEnd; pInfo++ )
-+ {
-+ if( pInfo->bpFunc && (*pInfo->bpFunc) (&gpio) == BP_SUCCESS )
-+ {
-+ pLedMap->ledName = pInfo->ledName;
-+ pLedMap->ledMask = GPIO_NUM_TO_MASK(gpio);
-+ pLedMap->ledActiveLow = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
-+ }
-+ if( pInfo->bpFuncFail && (*pInfo->bpFuncFail) (&gpio) == BP_SUCCESS )
-+ {
-+ pLedMap->ledName = pInfo->ledName;
-+ pLedMap->ledMaskFail = GPIO_NUM_TO_MASK(gpio);
-+ pLedMap->ledActiveLowFail = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
-+ }
-+ if( pLedMap->ledName != kLedEnd )
-+ pLedMap++;
-+ }
-+
-+ init_waitqueue_head(&g_board_wait_queue);
-+#if defined (WIRELESS)
-+ ses_board_init();
-+#endif
-+ kerSysInitDyingGaspHandler();
-+ kerSysDyingGaspMapIntr();
-+
-+ boardLedInit(LedMapping);
-+ g_ledInitialized = 1;
-+ }
-+
-+ return ret;
-+}
-+
-+void __init InitNvramInfo( void )
-+{
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+ unsigned long ulNumMacAddrs = pNvramData->ulNumMacAddrs;
-+
-+ if( ulNumMacAddrs > 0 && ulNumMacAddrs <= NVRAM_MAC_COUNT_MAX )
-+ {
-+ unsigned long ulNvramInfoSize =
-+ sizeof(NVRAM_INFO) + ((sizeof(MAC_ADDR_INFO) - 1) * ulNumMacAddrs);
-+
-+ g_pNvramInfo = (PNVRAM_INFO) kmalloc( ulNvramInfoSize, GFP_KERNEL );
-+
-+ if( g_pNvramInfo )
-+ {
-+ unsigned long ulPsiSize;
-+ if( BpGetPsiSize( &ulPsiSize ) != BP_SUCCESS )
-+ ulPsiSize = NVRAM_PSI_DEFAULT;
-+ memset( g_pNvramInfo, 0x00, ulNvramInfoSize );
-+ g_pNvramInfo->ulPsiSize = ulPsiSize * 1024;
-+ g_pNvramInfo->ulNumMacAddrs = pNvramData->ulNumMacAddrs;
-+ memcpy( g_pNvramInfo->ucaBaseMacAddr, pNvramData->ucaBaseMacAddr,
-+ NVRAM_MAC_ADDRESS_LEN );
-+ g_pNvramInfo->ulSdramSize = getMemorySize();
-+ }
-+ else
-+ printk("ERROR - Could not allocate memory for NVRAM data\n");
-+ }
-+ else
-+ printk("ERROR - Invalid number of MAC addresses (%ld) is configured.\n",
-+ ulNumMacAddrs);
-+}
-+
-+void __exit brcm_board_cleanup( void )
-+{
-+ printk("brcm_board_cleanup()\n");
-+
-+ if (board_major != -1)
-+ {
-+#if defined (WIRELESS)
-+ ses_board_deinit();
-+#endif
-+ kerSysDeinitDyingGaspHandler();
-+ unregister_chrdev(board_major, "board_ioctl");
-+ }
-+}
-+
-+static BOARD_IOC* borad_ioc_alloc(void)
-+{
-+ BOARD_IOC *board_ioc =NULL;
-+ board_ioc = (BOARD_IOC*) kmalloc( sizeof(BOARD_IOC) , GFP_KERNEL );
-+ if(board_ioc)
-+ {
-+ memset(board_ioc, 0, sizeof(BOARD_IOC));
-+ }
-+ return board_ioc;
-+}
-+
-+static void borad_ioc_free(BOARD_IOC* board_ioc)
-+{
-+ if(board_ioc)
-+ {
-+ kfree(board_ioc);
-+ }
-+}
-+
-+
-+static int board_open( struct inode *inode, struct file *filp )
-+{
-+ filp->private_data = borad_ioc_alloc();
-+
-+ if (filp->private_data == NULL)
-+ return -ENOMEM;
-+
-+ return( 0 );
-+}
-+
-+static int board_release(struct inode *inode, struct file *filp)
-+{
-+ BOARD_IOC *board_ioc = filp->private_data;
-+
-+ wait_event_interruptible(g_board_wait_queue, 1);
-+ borad_ioc_free(board_ioc);
-+
-+ return( 0 );
-+}
-+
-+
-+static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait)
-+{
-+ unsigned int mask = 0;
-+#if defined (WIRELESS)
-+ BOARD_IOC *board_ioc = filp->private_data;
-+#endif
-+
-+ poll_wait(filp, &g_board_wait_queue, wait);
-+#if defined (WIRELESS)
-+ if(board_ioc->eventmask & SES_EVENTS){
-+ mask |= sesBtn_poll(filp, wait);
-+ }
-+#endif
-+
-+ return mask;
-+}
-+
-+
-+static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)
-+{
-+#if defined (WIRELESS)
-+ BOARD_IOC *board_ioc = filp->private_data;
-+ if(board_ioc->eventmask & SES_EVENTS){
-+ return sesBtn_read(filp, buffer, count, ppos);
-+ }
-+#endif
-+ return 0;
-+}
-+
-+//**************************************************************************************
-+// Utitlities for dump memory, free kernel pages, mips soft reset, etc.
-+//**************************************************************************************
-+
-+/***********************************************************************
-+ * Function Name: dumpaddr
-+ * Description : Display a hex dump of the specified address.
-+ ***********************************************************************/
-+void dumpaddr( unsigned char *pAddr, int nLen )
-+{
-+ static char szHexChars[] = "0123456789abcdef";
-+ char szLine[80];
-+ char *p = szLine;
-+ unsigned char ch, *q;
-+ int i, j;
-+ unsigned long ul;
-+
-+ while( nLen > 0 )
-+ {
-+ sprintf( szLine, "%8.8lx: ", (unsigned long) pAddr );
-+ p = szLine + strlen(szLine);
-+
-+ for(i = 0; i < 16 && nLen > 0; i += sizeof(long), nLen -= sizeof(long))
-+ {
-+ ul = *(unsigned long *) &pAddr[i];
-+ q = (unsigned char *) &ul;
-+ for( j = 0; j < sizeof(long); j++ )
-+ {
-+ *p++ = szHexChars[q[j] >> 4];
-+ *p++ = szHexChars[q[j] & 0x0f];
-+ *p++ = ' ';
-+ }
-+ }
-+
-+ for( j = 0; j < 16 - i; j++ )
-+ *p++ = ' ', *p++ = ' ', *p++ = ' ';
-+
-+ *p++ = ' ', *p++ = ' ', *p++ = ' ';
-+
-+ for( j = 0; j < i; j++ )
-+ {
-+ ch = pAddr[j];
-+ *p++ = (ch > ' ' && ch < '~') ? ch : '.';
-+ }
-+
-+ *p++ = '\0';
-+ printk( "%s\r\n", szLine );
-+
-+ pAddr += i;
-+ }
-+ printk( "\r\n" );
-+} /* dumpaddr */
-+
-+
-+void kerSysMipsSoftReset(void)
-+{
-+#if defined(CONFIG_BCM96348)
-+ if (PERF->RevID == 0x634800A1) {
-+ typedef void (*FNPTR) (void);
-+ FNPTR bootaddr = (FNPTR) FLASH_BASE;
-+ int i;
-+
-+ /* Disable interrupts. */
-+ cli();
-+
-+ /* Reset all blocks. */
-+ PERF->BlockSoftReset &= ~BSR_ALL_BLOCKS;
-+ for( i = 0; i < 1000000; i++ )
-+ ;
-+ PERF->BlockSoftReset |= BSR_ALL_BLOCKS;
-+ /* Jump to the power on address. */
-+ (*bootaddr) ();
-+ }
-+ else
-+ PERF->pll_control |= SOFT_RESET; // soft reset mips
-+#else
-+ PERF->pll_control |= SOFT_RESET; // soft reset mips
-+#endif
-+}
-+
-+
-+int kerSysGetMacAddress( unsigned char *pucaMacAddr, unsigned long ulId )
-+{
-+ int nRet = 0;
-+ PMAC_ADDR_INFO pMai = NULL;
-+ PMAC_ADDR_INFO pMaiFreeNoId = NULL;
-+ PMAC_ADDR_INFO pMaiFreeId = NULL;
-+ unsigned long i = 0, ulIdxNoId = 0, ulIdxId = 0, shiftedIdx = 0;
-+
-+ for( i = 0, pMai = g_pNvramInfo->MacAddrs; i < g_pNvramInfo->ulNumMacAddrs;
-+ i++, pMai++ )
-+ {
-+ if( ulId == pMai->ulId || ulId == MAC_ADDRESS_ANY )
-+ {
-+ /* This MAC address has been used by the caller in the past. */
-+ memcpy( pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,
-+ NVRAM_MAC_ADDRESS_LEN );
-+ shiftedIdx = i;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMai->chInUse = 1;
-+ pMaiFreeNoId = pMaiFreeId = NULL;
-+ break;
-+ }
-+ else
-+ if( pMai->chInUse == 0 )
-+ {
-+ if( pMai->ulId == 0 && pMaiFreeNoId == NULL )
-+ {
-+ /* This is an available MAC address that has never been
-+ * used.
-+ */
-+ pMaiFreeNoId = pMai;
-+ ulIdxNoId = i;
-+ }
-+ else
-+ if( pMai->ulId != 0 && pMaiFreeId == NULL )
-+ {
-+ /* This is an available MAC address that has been used
-+ * before. Use addresses that have never been used
-+ * first, before using this one.
-+ */
-+ pMaiFreeId = pMai;
-+ ulIdxId = i;
-+ }
-+ }
-+ }
-+
-+ if( pMaiFreeNoId || pMaiFreeId )
-+ {
-+ /* An available MAC address was found. */
-+ memcpy(pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,NVRAM_MAC_ADDRESS_LEN);
-+ if( pMaiFreeNoId )
-+ {
-+ shiftedIdx = ulIdxNoId;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMaiFreeNoId->ulId = ulId;
-+ pMaiFreeNoId->chInUse = 1;
-+ }
-+ else
-+ {
-+ shiftedIdx = ulIdxId;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMaiFreeId->ulId = ulId;
-+ pMaiFreeId->chInUse = 1;
-+ }
-+ }
-+ else
-+ if( i == g_pNvramInfo->ulNumMacAddrs )
-+ nRet = -EADDRNOTAVAIL;
-+
-+ return( nRet );
-+} /* kerSysGetMacAddr */
-+
-+int kerSysReleaseMacAddress( unsigned char *pucaMacAddr )
-+{
-+ int nRet = -EINVAL;
-+ unsigned long ulIdx = 0;
-+ int idx = (pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] -
-+ g_pNvramInfo->ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET]);
-+
-+ // if overflow 255 (negitive), add 256 to have the correct index
-+ if (idx < 0)
-+ idx += 256;
-+ ulIdx = (unsigned long) (idx >> SHIFT_BITS);
-+
-+ if( ulIdx < g_pNvramInfo->ulNumMacAddrs )
-+ {
-+ PMAC_ADDR_INFO pMai = &g_pNvramInfo->MacAddrs[ulIdx];
-+ if( pMai->chInUse == 1 )
-+ {
-+ pMai->chInUse = 0;
-+ nRet = 0;
-+ }
-+ }
-+
-+ return( nRet );
-+} /* kerSysReleaseMacAddr */
-+
-+int kerSysGetSdramSize( void )
-+{
-+ return( (int) g_pNvramInfo->ulSdramSize );
-+} /* kerSysGetSdramSize */
-+
-+
-+void kerSysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-+{
-+ if (g_ledInitialized)
-+ boardLedCtrl(ledName, ledState);
-+}
-+
-+unsigned int kerSysMonitorPollHook( struct file *f, struct poll_table_struct *t)
-+{
-+ int mask = (*g_orig_fop_poll) (f, t);
-+
-+ if( g_wakeup_monitor == 1 && g_monitor_file == f )
-+ {
-+ /* If g_wakeup_monitor is non-0, the user mode application needs to
-+ * return from a blocking select function. Return POLLPRI which will
-+ * cause the select to return with the exception descriptor set.
-+ */
-+ mask |= POLLPRI;
-+ g_wakeup_monitor = 0;
-+ }
-+
-+ return( mask );
-+}
-+
-+/* Put the user mode application that monitors link state on a run queue. */
-+void kerSysWakeupMonitorTask( void )
-+{
-+ g_wakeup_monitor = 1;
-+ if( g_monitor_task )
-+ wake_up_process( g_monitor_task );
-+}
-+
-+//********************************************************************************************
-+// misc. ioctl calls come to here. (flash, led, reset, kernel memory access, etc.)
-+//********************************************************************************************
-+static int board_ioctl( struct inode *inode, struct file *flip,
-+ unsigned int command, unsigned long arg )
-+{
-+ int ret = 0;
-+ BOARD_IOCTL_PARMS ctrlParms;
-+ unsigned char ucaMacAddr[NVRAM_MAC_ADDRESS_LEN];
-+ int allowedSize;
-+
-+ switch (command)
-+ {
-+ case BOARD_IOCTL_FLASH_INIT:
-+ // not used for now. kerSysBcmImageInit();
-+ break;
-+
-+
-+ case BOARD_IOCTL_FLASH_WRITE:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ NVRAM_DATA SaveNvramData;
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+
-+ switch (ctrlParms.action)
-+ {
-+ case SCRATCH_PAD:
-+ ret = kerSysScratchPadSet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
-+ break;
-+
-+ case PERSISTENT:
-+ ret = kerSysPersistentSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case NVRAM:
-+ ret = kerSysNvRamSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case BCM_IMAGE_CFE:
-+ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > FLASH45_LENGTH_BOOT_ROM )
-+ {
-+ printk("Illegal CFE size [%d]. Size allowed: [%d]\n",
-+ ctrlParms.strLen, FLASH45_LENGTH_BOOT_ROM);
-+ ret = -1;
-+ break;
-+ }
-+
-+ // save NVRAM data into a local structure
-+ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
-+
-+ // set memory type field
-+ BpGetSdramSize( (unsigned long *) &ctrlParms.string[SDRAM_TYPE_ADDRESS_OFFSET] );
-+
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+
-+ // if nvram is not valid, restore the current nvram settings
-+ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
-+ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
-+ {
-+ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
-+ }
-+ break;
-+
-+ case BCM_IMAGE_FS:
-+ allowedSize = (int) flash_get_total_size() - \
-+ FLASH_RESERVED_AT_END - TAG_LEN - FLASH45_LENGTH_BOOT_ROM;
-+ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > allowedSize)
-+ {
-+ printk("Illegal root file system size [%d]. Size allowed: [%d]\n",
-+ ctrlParms.strLen, allowedSize);
-+ ret = -1;
-+ break;
-+ }
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ case BCM_IMAGE_KERNEL: // not used for now.
-+ break;
-+ case BCM_IMAGE_WHOLE:
-+ if(ctrlParms.strLen <= 0)
-+ {
-+ printk("Illegal flash image size [%d].\n", ctrlParms.strLen);
-+ ret = -1;
-+ break;
-+ }
-+
-+ // save NVRAM data into a local structure
-+ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
-+
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+
-+ // if nvram is not valid, restore the current nvram settings
-+ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
-+ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
-+ {
-+ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
-+ }
-+
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ printk("flash_ioctl_command: invalid command %d\n", ctrlParms.action);
-+ break;
-+ }
-+ ctrlParms.result = ret;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_FLASH_READ:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ switch (ctrlParms.action)
-+ {
-+ case SCRATCH_PAD:
-+ ret = kerSysScratchPadGet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
-+ break;
-+
-+ case PERSISTENT:
-+ ret = kerSysPersistentGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case NVRAM:
-+ ret = kerSysNvRamGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case FLASH_SIZE:
-+ ret = kerSysFlashSizeGet();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ printk("Not supported. invalid command %d\n", ctrlParms.action);
-+ break;
-+ }
-+ ctrlParms.result = ret;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_NR_PAGES:
-+ ctrlParms.result = nr_free_pages() + get_page_cache_size();
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_DUMP_ADDR:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ dumpaddr( (unsigned char *) ctrlParms.string, ctrlParms.strLen );
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_SET_MEMORY:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ unsigned long *pul = (unsigned long *) ctrlParms.string;
-+ unsigned short *pus = (unsigned short *) ctrlParms.string;
-+ unsigned char *puc = (unsigned char *) ctrlParms.string;
-+ switch( ctrlParms.strLen )
-+ {
-+ case 4:
-+ *pul = (unsigned long) ctrlParms.offset;
-+ break;
-+ case 2:
-+ *pus = (unsigned short) ctrlParms.offset;
-+ break;
-+ case 1:
-+ *puc = (unsigned char) ctrlParms.offset;
-+ break;
-+ }
-+ dumpaddr( (unsigned char *) ctrlParms.string, sizeof(long) );
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_MIPS_SOFT_RESET:
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ case BOARD_IOCTL_LED_CTRL:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ kerSysLedCtrl((BOARD_LED_NAME)ctrlParms.strLen, (BOARD_LED_STATE)ctrlParms.offset);
-+ ret = 0;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_ID:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg,
-+ sizeof(ctrlParms)) == 0)
-+ {
-+ if( ctrlParms.string )
-+ {
-+ char *p = (char *) get_system_type();
-+ if( strlen(p) + 1 < ctrlParms.strLen )
-+ ctrlParms.strLen = strlen(p) + 1;
-+ __copy_to_user(ctrlParms.string, p, ctrlParms.strLen);
-+ }
-+
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ ctrlParms.result = kerSysGetMacAddress( ucaMacAddr,
-+ ctrlParms.offset );
-+
-+ if( ctrlParms.result == 0 )
-+ {
-+ __copy_to_user(ctrlParms.string, ucaMacAddr,
-+ sizeof(ucaMacAddr));
-+ }
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_RELEASE_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ if (copy_from_user((void*)ucaMacAddr, (void*)ctrlParms.string, \
-+ NVRAM_MAC_ADDRESS_LEN) == 0)
-+ {
-+ ctrlParms.result = kerSysReleaseMacAddress( ucaMacAddr );
-+ }
-+ else
-+ {
-+ ctrlParms.result = -EACCES;
-+ }
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_PSI_SIZE:
-+ ctrlParms.result = (int) g_pNvramInfo->ulPsiSize;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_SDRAM_SIZE:
-+ ctrlParms.result = (int) g_pNvramInfo->ulSdramSize;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_BASE_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ __copy_to_user(ctrlParms.string, g_pNvramInfo->ucaBaseMacAddr, NVRAM_MAC_ADDRESS_LEN);
-+ ctrlParms.result = 0;
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_CHIP_ID:
-+ ctrlParms.result = (int) (PERF->RevID & 0xFFFF0000) >> 16;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_NUM_ENET: {
-+ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
-+ int i, numeth = 0;
-+ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
-+ for( i = 0; i < BP_MAX_ENET_MACS; i++) {
-+ if (EnetInfos[i].ucPhyType != BP_ENET_NO_PHY) {
-+ numeth++;
-+ }
-+ }
-+ ctrlParms.result = numeth;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+
-+ case BOARD_IOCTL_GET_CFE_VER:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ char *vertag = (char *)(FLASH_BASE + CFE_VERSION_OFFSET);
-+ if (ctrlParms.strLen < CFE_VERSION_SIZE) {
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = -EFAULT;
-+ }
-+ else if (strncmp(vertag, "cfe-v", 5)) { // no tag info in flash
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else {
-+ ctrlParms.result = 1;
-+ __copy_to_user(ctrlParms.string, vertag+CFE_VERSION_MARK_SIZE, CFE_VERSION_SIZE);
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_ENET_CFG:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
-+ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
-+ if (ctrlParms.strLen == sizeof(EnetInfos)) {
-+ __copy_to_user(ctrlParms.string, EnetInfos, sizeof(EnetInfos));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+#if defined (WIRELESS)
-+ case BOARD_IOCTL_GET_WLAN_ANT_INUSE:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ unsigned short antInUse = 0;
-+ if (BpGetWirelessAntInUse(&antInUse) == BP_SUCCESS) {
-+ if (ctrlParms.strLen == sizeof(antInUse)) {
-+ __copy_to_user(ctrlParms.string, &antInUse, sizeof(antInUse));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#endif
-+ case BOARD_IOCTL_SET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ ctrlParms.result = -EFAULT;
-+ ret = -EFAULT;
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ board_ioc->eventmask |= *((int*)ctrlParms.string);
-+#if defined (WIRELESS)
-+ if((board_ioc->eventmask & SES_EVENTS)) {
-+ if(sesBtn_irq != BP_NOT_DEFINED) {
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ ctrlParms.result = 0;
-+ ret = 0;
-+ }
-+ }
-+#endif
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ __copy_to_user(ctrlParms.string, &board_ioc->eventmask, sizeof(unsigned long));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_UNSET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ board_ioc->eventmask &= (~(*((int*)ctrlParms.string)));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#if defined (WIRELESS)
-+ case BOARD_IOCTL_SET_SES_LED:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ if (ctrlParms.strLen == sizeof(int)) {
-+ sesLed_ctrl(*(int*)ctrlParms.string);
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#endif
-+
-+ case BOARD_IOCTL_SET_MONITOR_FD:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ int fput_needed = 0;
-+
-+ g_monitor_file = fget_light( ctrlParms.offset, &fput_needed );
-+ if( g_monitor_file ) {
-+ /* Hook this file descriptor's poll function in order to set
-+ * the exception descriptor when there is a change in link
-+ * state.
-+ */
-+ g_monitor_task = current;
-+ g_orig_fop_poll = g_monitor_file->f_op->poll;
-+ g_monitor_file->f_op->poll = kerSysMonitorPollHook;
-+ }
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_WAKEUP_MONITOR_TASK:
-+ kerSysWakeupMonitorTask();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ ctrlParms.result = 0;
-+ printk("board_ioctl: invalid command %x, cmd %d .\n",command,_IOC_NR(command));
-+ break;
-+
-+ } /* switch */
-+
-+ return (ret);
-+
-+} /* board_ioctl */
-+
-+/***************************************************************************
-+ * SES Button ISR/GPIO/LED functions.
-+ ***************************************************************************/
-+#if defined (WIRELESS)
-+static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs)
-+{
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if (!(*gpio_reg & gpio_mask)){
-+ wake_up_interruptible(&g_board_wait_queue);
-+ return IRQ_RETVAL(1);
-+ } else {
-+ return IRQ_RETVAL(0);
-+ }
-+}
-+
-+static void __init sesBtn_mapGpio()
-+{
-+ if( BpGetWirelessSesBtnGpio(&sesBtn_gpio) == BP_SUCCESS )
-+ {
-+ printk("SES: Button GPIO 0x%x is enabled\n", sesBtn_gpio);
-+ }
-+}
-+
-+static void __init sesBtn_mapIntr(int context)
-+{
-+ if( BpGetWirelessSesExtIntr(&sesBtn_irq) == BP_SUCCESS )
-+ {
-+ printk("SES: Button Interrupt 0x%x is enabled\n", sesBtn_irq);
-+ }
-+ else
-+ return;
-+
-+ sesBtn_irq += INTERRUPT_ID_EXTERNAL_0;
-+
-+ if (BcmHalMapInterrupt((FN_HANDLER)sesBtn_isr, context, sesBtn_irq)) {
-+ printk("SES: Interrupt mapping failed\n");
-+ }
-+ BcmHalInterruptEnable(sesBtn_irq);
-+}
-+
-+
-+static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait)
-+{
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if (!(*gpio_reg & gpio_mask)){
-+ return POLLIN;
-+ }
-+ return 0;
-+}
-+
-+static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
-+{
-+ volatile unsigned int event=0;
-+ ssize_t ret=0;
-+
-+#if defined(_BCM96338_) || defined (CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined (CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if(*gpio_reg & gpio_mask){
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ return ret;
-+ }
-+ event = SES_EVENTS;
-+ __copy_to_user((char*)buffer, (char*)&event, sizeof(event));
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ count -= sizeof(event);
-+ buffer += sizeof(event);
-+ ret += sizeof(event);
-+ return ret;
-+}
-+
-+static void __init sesLed_mapGpio()
-+{
-+ if( BpGetWirelessSesBtnGpio(&sesLed_gpio) == BP_SUCCESS )
-+ {
-+ printk("SES: LED GPIO 0x%x is enabled\n", sesBtn_gpio);
-+ }
-+}
-+
-+static void sesLed_ctrl(int action)
-+{
-+
-+ //char status = ((action >> 8) & 0xff); /* extract status */
-+ //char event = ((action >> 16) & 0xff); /* extract event */
-+ //char blinktype = ((action >> 24) & 0xff); /* extract blink type for SES_LED_BLINK */
-+
-+ BOARD_LED_STATE led;
-+
-+ if(sesLed_gpio == BP_NOT_DEFINED)
-+ return;
-+
-+ action &= 0xff; /* extract led */
-+
-+ //printk("blinktype=%d, event=%d, status=%d\n",(int)blinktype, (int)event, (int)status);
-+
-+ switch (action)
-+ {
-+ case SES_LED_ON:
-+ //printk("SES: led on\n");
-+ led = kLedStateOn;
-+ break;
-+ case SES_LED_BLINK:
-+ //printk("SES: led blink\n");
-+ led = kLedStateSlowBlinkContinues;
-+ break;
-+ case SES_LED_OFF:
-+ default:
-+ //printk("SES: led off\n");
-+ led = kLedStateOff;
-+ }
-+
-+ kerSysLedCtrl(kLedSes, led);
-+}
-+
-+static void __init ses_board_init()
-+{
-+ sesBtn_mapGpio();
-+ sesBtn_mapIntr(0);
-+ sesLed_mapGpio();
-+}
-+static void __exit ses_board_deinit()
-+{
-+ if(sesBtn_irq)
-+ BcmHalInterruptDisable(sesBtn_irq);
-+}
-+#endif
-+
-+/***************************************************************************
-+ * Dying gasp ISR and functions.
-+ ***************************************************************************/
-+#define KERSYS_DBG printk
-+
-+#if defined(CONFIG_BCM96345)
-+#define CYCLE_PER_US 70
-+#elif defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+/* The BCM6348 cycles per microsecond is really variable since the BCM6348
-+ * MIPS speed can vary depending on the PLL settings. However, an appoximate
-+ * value of 120 will still work OK for the test being done.
-+ */
-+#define CYCLE_PER_US 120
-+#endif
-+#define DG_GLITCH_TO (100*CYCLE_PER_US)
-+
-+static void __init kerSysDyingGaspMapIntr()
-+{
-+ unsigned long ulIntr;
-+
-+#if defined(CONFIG_BCM96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(_BCM96338_)
-+ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
-+ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, INTERRUPT_ID_DG);
-+ BcmHalInterruptEnable( INTERRUPT_ID_DG );
-+ }
-+#elif defined(CONFIG_BCM96345) || defined(_BCM96345_)
-+ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
-+ ulIntr += INTERRUPT_ID_EXTERNAL_0;
-+ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, ulIntr);
-+ BcmHalInterruptEnable( ulIntr );
-+ }
-+#endif
-+
-+}
-+
-+void kerSysSetWdTimer(ulong timeUs)
-+{
-+ TIMER->WatchDogDefCount = timeUs * (FPERIPH/1000000);
-+ TIMER->WatchDogCtl = 0xFF00;
-+ TIMER->WatchDogCtl = 0x00FF;
-+}
-+
-+ulong kerSysGetCycleCount(void)
-+{
-+ ulong cnt;
-+#ifdef _WIN32_WCE
-+ cnt = 0;
-+#else
-+ __asm volatile("mfc0 %0, $9":"=d"(cnt));
-+#endif
-+ return(cnt);
-+}
-+
-+static Bool kerSysDyingGaspCheckPowerLoss(void)
-+{
-+ ulong clk0;
-+ ulong ulIntr;
-+
-+ ulIntr = 0;
-+ clk0 = kerSysGetCycleCount();
-+
-+ UART->Data = 'D';
-+ UART->Data = '%';
-+ UART->Data = 'G';
-+
-+#if defined(CONFIG_BCM96345)
-+ BpGetAdslDyingGaspExtIntr( &ulIntr );
-+
-+ do {
-+ ulong clk1;
-+
-+ clk1 = kerSysGetCycleCount(); /* time cleared */
-+ /* wait a little to get new reading */
-+ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
-+ ;
-+ } while ((0 == (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT)))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
-+
-+ if (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT))) { /* power glitch */
-+ BcmHalInterruptEnable( ulIntr + INTERRUPT_ID_EXTERNAL_0);
-+ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
-+ return 0;
-+ }
-+#elif (defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)) && !defined(VXWORKS)
-+ do {
-+ ulong clk1;
-+
-+ clk1 = kerSysGetCycleCount(); /* time cleared */
-+ /* wait a little to get new reading */
-+ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
-+ ;
-+ } while ((PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
-+
-+ if (!(PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET)))) {
-+ BcmHalInterruptEnable( INTERRUPT_ID_DG );
-+ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
-+ return 0;
-+ }
-+#endif
-+ return 1;
-+}
-+
-+static void kerSysDyingGaspShutdown( void )
-+{
-+ kerSysSetWdTimer(1000000);
-+#if defined(CONFIG_BCM96345)
-+ PERF->blkEnables &= ~(EMAC_CLK_EN | USB_CLK_EN | CPU_CLK_EN);
-+#elif defined(CONFIG_BCM96348)
-+ PERF->blkEnables &= ~(EMAC_CLK_EN | USBS_CLK_EN | USBH_CLK_EN | SAR_CLK_EN);
-+#endif
-+}
-+
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs)
-+#else
-+static unsigned int kerSysDyingGaspIsr(void)
-+#endif
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp, *dsl = NULL;
-+
-+ if (kerSysDyingGaspCheckPowerLoss()) {
-+
-+ /* first to turn off everything other than dsl */
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ if(strncmp(tmp->name, "dsl", 3)) {
-+ (tmp->cb_dgasp_fn)(tmp->context);
-+ }else {
-+ dsl = tmp;
-+ }
-+ }
-+
-+ /* now send dgasp */
-+ if(dsl)
-+ (dsl->cb_dgasp_fn)(dsl->context);
-+
-+ /* reset and shutdown system */
-+ kerSysDyingGaspShutdown();
-+ }
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+return( IRQ_HANDLED );
-+#else
-+ return( 1 );
-+#endif
-+}
-+
-+static void __init kerSysInitDyingGaspHandler( void )
-+{
-+ CB_DGASP_LIST *new_node;
-+
-+ if( g_cb_dgasp_list_head != NULL) {
-+ printk("Error: kerSysInitDyingGaspHandler: list head is not null\n");
-+ return;
-+ }
-+ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
-+ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
-+ INIT_LIST_HEAD(&new_node->list);
-+ g_cb_dgasp_list_head = new_node;
-+
-+} /* kerSysInitDyingGaspHandler */
-+
-+static void __exit kerSysDeinitDyingGaspHandler( void )
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp;
-+
-+ if(g_cb_dgasp_list_head == NULL)
-+ return;
-+
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ list_del(pos);
-+ kfree(tmp);
-+ }
-+
-+ kfree(g_cb_dgasp_list_head);
-+ g_cb_dgasp_list_head = NULL;
-+
-+} /* kerSysDeinitDyingGaspHandler */
-+
-+void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context)
-+{
-+ CB_DGASP_LIST *new_node;
-+
-+ if( g_cb_dgasp_list_head == NULL) {
-+ printk("Error: kerSysRegisterDyingGaspHandler: list head is null\n");
-+ return;
-+ }
-+
-+ if( devname == NULL || cbfn == NULL ) {
-+ printk("Error: kerSysRegisterDyingGaspHandler: register info not enough (%s,%x,%x)\n", devname, (unsigned int)cbfn, (unsigned int)context);
-+ return;
-+ }
-+
-+ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
-+ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
-+ INIT_LIST_HEAD(&new_node->list);
-+ strncpy(new_node->name, devname, IFNAMSIZ);
-+ new_node->cb_dgasp_fn = (cb_dgasp_t)cbfn;
-+ new_node->context = context;
-+ list_add(&new_node->list, &g_cb_dgasp_list_head->list);
-+
-+ printk("dgasp: kerSysRegisterDyingGaspHandler: %s registered \n", devname);
-+
-+} /* kerSysRegisterDyingGaspHandler */
-+
-+void kerSysDeregisterDyingGaspHandler(char *devname)
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp;
-+
-+ if(g_cb_dgasp_list_head == NULL) {
-+ printk("Error: kerSysDeregisterDyingGaspHandler: list head is null\n");
-+ return;
-+ }
-+
-+ if(devname == NULL) {
-+ printk("Error: kerSysDeregisterDyingGaspHandler: devname is null\n");
-+ return;
-+ }
-+
-+ printk("kerSysDeregisterDyingGaspHandler: %s is deregistering\n", devname);
-+
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ if(!strcmp(tmp->name, devname)) {
-+ list_del(pos);
-+ kfree(tmp);
-+ printk("kerSysDeregisterDyingGaspHandler: %s is deregistered\n", devname);
-+ return;
-+ }
-+ }
-+ printk("kerSysDeregisterDyingGaspHandler: %s not (de)registered\n", devname);
-+
-+} /* kerSysDeregisterDyingGaspHandler */
-+
-+/***************************************************************************
-+ * MACRO to call driver initialization and cleanup functions.
-+ ***************************************************************************/
-+module_init( brcm_board_init );
-+module_exit( brcm_board_cleanup );
-+
-+EXPORT_SYMBOL(kerSysNvRamGet);
-+EXPORT_SYMBOL(dumpaddr);
-+EXPORT_SYMBOL(kerSysGetMacAddress);
-+EXPORT_SYMBOL(kerSysReleaseMacAddress);
-+EXPORT_SYMBOL(kerSysGetSdramSize);
-+EXPORT_SYMBOL(kerSysLedCtrl);
-+EXPORT_SYMBOL(kerSysLedRegisterHwHandler);
-+EXPORT_SYMBOL(BpGetBoardIds);
-+EXPORT_SYMBOL(BpGetSdramSize);
-+EXPORT_SYMBOL(BpGetPsiSize);
-+EXPORT_SYMBOL(BpGetEthernetMacInfo);
-+EXPORT_SYMBOL(BpGetRj11InnerOuterPairGpios);
-+EXPORT_SYMBOL(BpGetPressAndHoldResetGpio);
-+EXPORT_SYMBOL(BpGetVoipResetGpio);
-+EXPORT_SYMBOL(BpGetVoipIntrGpio);
-+EXPORT_SYMBOL(BpGetPcmciaResetGpio);
-+EXPORT_SYMBOL(BpGetRtsCtsUartGpios);
-+EXPORT_SYMBOL(BpGetAdslLedGpio);
-+EXPORT_SYMBOL(BpGetAdslFailLedGpio);
-+EXPORT_SYMBOL(BpGetWirelessLedGpio);
-+EXPORT_SYMBOL(BpGetUsbLedGpio);
-+EXPORT_SYMBOL(BpGetHpnaLedGpio);
-+EXPORT_SYMBOL(BpGetWanDataLedGpio);
-+EXPORT_SYMBOL(BpGetPppLedGpio);
-+EXPORT_SYMBOL(BpGetPppFailLedGpio);
-+EXPORT_SYMBOL(BpGetVoipLedGpio);
-+EXPORT_SYMBOL(BpGetWirelessExtIntr);
-+EXPORT_SYMBOL(BpGetAdslDyingGaspExtIntr);
-+EXPORT_SYMBOL(BpGetVoipExtIntr);
-+EXPORT_SYMBOL(BpGetHpnaExtIntr);
-+EXPORT_SYMBOL(BpGetHpnaChipSelect);
-+EXPORT_SYMBOL(BpGetVoipChipSelect);
-+EXPORT_SYMBOL(BpGetWirelessSesBtnGpio);
-+EXPORT_SYMBOL(BpGetWirelessSesExtIntr);
-+EXPORT_SYMBOL(BpGetWirelessSesLedGpio);
-+EXPORT_SYMBOL(kerSysRegisterDyingGaspHandler);
-+EXPORT_SYMBOL(kerSysDeregisterDyingGaspHandler);
-+EXPORT_SYMBOL(kerSysGetCycleCount);
-+EXPORT_SYMBOL(kerSysSetWdTimer);
-+EXPORT_SYMBOL(kerSysWakeupMonitorTask);
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,692 @@
-+/************************************************************************/
-+/* */
-+/* AMD CFI Enabled Flash Memory Drivers */
-+/* File name: CFIFLASH.C */
-+/* Revision: 1.0 5/07/98 */
-+/* */
-+/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
-+/* This software is unpublished and contains the trade secrets and */
-+/* confidential proprietary information of AMD. Unless otherwise */
-+/* provided in the Software Agreement associated herewith, it is */
-+/* licensed in confidence "AS IS" and is not to be reproduced in whole */
-+/* or part by any means except for backup. Use, duplication, or */
-+/* disclosure by the Government is subject to the restrictions in */
-+/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
-+/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
-+/* Software owned by */
-+/* Advanced Micro Devices, Inc., */
-+/* One AMD Place, */
-+/* P.O. Box 3453 */
-+/* Sunnyvale, CA 94088-3453. */
-+/************************************************************************/
-+/* This software constitutes a basic shell of source code for */
-+/* programming all AMD Flash components. AMD */
-+/* will not be responsible for misuse or illegal use of this */
-+/* software for devices not supported herein. AMD is providing */
-+/* this source code "AS IS" and will not be responsible for */
-+/* issues arising from incorrect user implementation of the */
-+/* source code herein. It is the user's responsibility to */
-+/* properly design-in this source code. */
-+/* */
-+/************************************************************************/
-+#ifdef _CFE_
-+#include "lib_types.h"
-+#include "lib_printf.h"
-+#include "lib_string.h"
-+#include "cfe_timer.h"
-+#define printk printf
-+#else // linux
-+#include <linux/param.h>
-+#include <linux/sched.h>
-+#include <linux/timer.h>
-+#endif
-+
-+#include "cfiflash.h"
-+
-+static int flash_wait(WORD sector, int offset, UINT16 data);
-+static UINT16 flash_get_device_id(void);
-+static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily);
-+static int flash_write(WORD sector, int offset, byte *buf, int nbytes);
-+static void flash_command(int command, WORD sector, int offset, UINT16 data);
-+
-+/*********************************************************************/
-+/* 'meminfo' should be a pointer, but most C compilers will not */
-+/* allocate static storage for a pointer without calling */
-+/* non-portable functions such as 'new'. We also want to avoid */
-+/* the overhead of passing this pointer for every driver call. */
-+/* Systems with limited heap space will need to do this. */
-+/*********************************************************************/
-+struct flashinfo meminfo; /* Flash information structure */
-+static int flashFamily = FLASH_UNDEFINED;
-+static int totalSize = 0;
-+static struct cfi_query query;
-+
-+static UINT16 cfi_data_struct_29W160[] = {
-+ 0x0020, 0x0049, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0x0051, 0x0052, 0x0059, 0x0002, 0x0000, 0x0040, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0027, 0x0036, 0x0000, 0x0000, 0x0004,
-+ 0x0000, 0x000a, 0x0000, 0x0004, 0x0000, 0x0003, 0x0000, 0x0015,
-+ 0x0002, 0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0040,
-+ 0x0000, 0x0001, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0080,
-+ 0x0000, 0x001e, 0x0000, 0x0000, 0x0001, 0xffff, 0xffff, 0xffff,
-+ 0x0050, 0x0052, 0x0049, 0x0031, 0x0030, 0x0000, 0x0002, 0x0001,
-+ 0x0001, 0x0004, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0002,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0x0888, 0x252b, 0x8c84, 0x7dbc, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
-+};
-+
-+
-+/*********************************************************************/
-+/* Init_flash is used to build a sector table from the information */
-+/* provided through the CFI query. This information is translated */
-+/* from erase_block information to base:offset information for each */
-+/* individual sector. This information is then stored in the meminfo */
-+/* structure, and used throughout the driver to access sector */
-+/* information. */
-+/* */
-+/* This is more efficient than deriving the sector base:offset */
-+/* information every time the memory map switches (since on the */
-+/* development platform can only map 64k at a time). If the entire */
-+/* flash memory array can be mapped in, then the addition static */
-+/* allocation for the meminfo structure can be eliminated, but the */
-+/* drivers will have to be re-written. */
-+/* */
-+/* The meminfo struct occupies 653 bytes of heap space, depending */
-+/* on the value of the define MAXSECTORS. Adjust to suit */
-+/* application */
-+/*********************************************************************/
-+byte flash_init(void)
-+{
-+ int i=0, j=0, count=0;
-+ int basecount=0L;
-+ UINT16 device_id;
-+ int flipCFIGeometry = FALSE;
-+
-+ /* First, assume
-+ * a single 8k sector for sector 0. This is to allow
-+ * the system to perform memory mapping to the device,
-+ * even though the actual physical layout is unknown.
-+ * Once mapped in, the CFI query will produce all
-+ * relevant information.
-+ */
-+ meminfo.addr = 0L;
-+ meminfo.areg = 0;
-+ meminfo.nsect = 1;
-+ meminfo.bank1start = 0;
-+ meminfo.bank2start = 0;
-+
-+ meminfo.sec[0].size = 8192;
-+ meminfo.sec[0].base = 0x00000;
-+ meminfo.sec[0].bank = 1;
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+
-+ device_id = flash_get_device_id();
-+
-+ switch (device_id) {
-+ case ID_I28F160C3B:
-+ case ID_I28F320C3B:
-+ case ID_I28F160C3T:
-+ case ID_I28F320C3T:
-+ flashFamily = FLASH_INTEL;
-+ break;
-+ case ID_AM29DL800B:
-+ case ID_AM29LV800B:
-+ case ID_AM29LV400B:
-+ case ID_AM29LV160B:
-+ case ID_AM29LV320B:
-+ case ID_MX29LV320AB:
-+ case ID_AM29LV320MB:
-+ case ID_AM29DL800T:
-+ case ID_AM29LV800T:
-+ case ID_AM29LV160T:
-+ case ID_AM29LV320T:
-+ case ID_MX29LV320AT:
-+ case ID_AM29LV320MT:
-+ flashFamily = FLASH_AMD;
-+ break;
-+ case ID_SST39VF1601:
-+ case ID_SST39VF3201:
-+ flashFamily = FLASH_SST;
-+ break;
-+ default:
-+ printk("Flash memory not supported! Device id = %x\n", device_id);
-+ return -1;
-+ }
-+
-+ if (flash_get_cfi(&query, 0, flashFamily) == -1) {
-+ switch(device_id) {
-+ case ID_AM29LV160T:
-+ case ID_AM29LV160B:
-+ flash_get_cfi(&query, cfi_data_struct_29W160, flashFamily);
-+ break;
-+ default:
-+ printk("CFI data structure not found. Device id = %x\n", device_id);
-+ return -1;
-+ }
-+ }
-+
-+ // need to determine if it top or bottom boot here
-+ switch (device_id)
-+ {
-+ case ID_AM29DL800B:
-+ case ID_AM29LV800B:
-+ case ID_AM29LV400B:
-+ case ID_AM29LV160B:
-+ case ID_AM29LV320B:
-+ case ID_MX29LV320AB:
-+ case ID_AM29LV320MB:
-+ case ID_I28F160C3B:
-+ case ID_I28F320C3B:
-+ case ID_I28F160C3T:
-+ case ID_I28F320C3T:
-+ case ID_SST39VF1601:
-+ case ID_SST39VF3201:
-+ flipCFIGeometry = FALSE;
-+ break;
-+ case ID_AM29DL800T:
-+ case ID_AM29LV800T:
-+ case ID_AM29LV160T:
-+ case ID_AM29LV320T:
-+ case ID_MX29LV320AT:
-+ case ID_AM29LV320MT:
-+ flipCFIGeometry = TRUE;
-+ break;
-+ default:
-+ printk("Flash memory not supported! Device id = %x\n", device_id);
-+ return -1;
-+ }
-+
-+ count=0;basecount=0L;
-+
-+ if (!flipCFIGeometry)
-+ {
-+ for (i=0; i<query.num_erase_blocks; i++) {
-+ for(j=0; j<query.erase_block[i].num_sectors; j++) {
-+ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
-+ meminfo.sec[count].base = (int) basecount;
-+ basecount += (int) query.erase_block[i].sector_size;
-+ count++;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ for (i = (query.num_erase_blocks - 1); i >= 0; i--) {
-+ for(j=0; j<query.erase_block[i].num_sectors; j++) {
-+ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
-+ meminfo.sec[count].base = (int) basecount;
-+ basecount += (int) query.erase_block[i].sector_size;
-+ count++;
-+ }
-+ }
-+ }
-+
-+ meminfo.nsect = count;
-+ totalSize = meminfo.sec[count-1].base + meminfo.sec[count-1].size;
-+ return (0);
-+}
-+
-+/*********************************************************************/
-+/* Flash_sector_erase_int() is identical to flash_sector_erase(), */
-+/* except it will wait until the erase is completed before returning */
-+/* control to the calling function. This can be used in cases which */
-+/* require the program to hold until a sector is erased, without */
-+/* adding the wait check external to this function. */
-+/*********************************************************************/
-+byte flash_sector_erase_int(WORD sector)
-+{
-+ int i;
-+
-+ for( i = 0; i < 3; i++ ) {
-+ flash_command(FLASH_SERASE, sector, 0, 0);
-+ if (flash_wait(sector, 0, 0xffff) == STATUS_READY)
-+ break;
-+ }
-+
-+ return(1);
-+}
-+
-+/*********************************************************************/
-+/* flash_read_buf() reads buffer of data from the specified */
-+/* offset from the sector parameter. */
-+/*********************************************************************/
-+int flash_read_buf(WORD sector, int offset,
-+ byte *buffer, int numbytes)
-+{
-+ byte *fwp;
-+
-+ fwp = (byte *)flash_get_memptr(sector);
-+
-+ while (numbytes) {
-+ *buffer++ = *(fwp + offset);
-+ numbytes--;
-+ fwp++;
-+ }
-+
-+ return (1);
-+}
-+
-+/*********************************************************************/
-+/* flash_write_buf() utilizes */
-+/* the unlock bypass mode of the flash device. This can remove */
-+/* significant overhead from the bulk programming operation, and */
-+/* when programming bulk data a sizeable performance increase can be */
-+/* observed. */
-+/*********************************************************************/
-+int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes)
-+{
-+ int ret = -1;
-+ int i;
-+ unsigned char *p = flash_get_memptr(sector) + offset;
-+
-+ /* After writing the flash block, compare the contents to the source
-+ * buffer. Try to write the sector successfully up to three times.
-+ */
-+ for( i = 0; i < 3; i++ ) {
-+ ret = flash_write(sector, offset, buffer, numbytes);
-+ if( !memcmp( p, buffer, numbytes ) )
-+ break;
-+ /* Erase and try again */
-+ flash_sector_erase_int(sector);
-+ ret = -1;
-+ }
-+
-+ if( ret == -1 )
-+ printk( "Flash write error. Verify failed\n" );
-+
-+ return( ret );
-+}
-+
-+/*********************************************************************/
-+/* Usefull funtion to return the number of sectors in the device. */
-+/* Can be used for functions which need to loop among all the */
-+/* sectors, or wish to know the number of the last sector. */
-+/*********************************************************************/
-+int flash_get_numsectors(void)
-+{
-+ return meminfo.nsect;
-+}
-+
-+/*********************************************************************/
-+/* flash_get_sector_size() is provided for cases in which the size */
-+/* of a sector is required by a host application. The sector size */
-+/* (in bytes) is returned in the data location pointed to by the */
-+/* 'size' parameter. */
-+/*********************************************************************/
-+int flash_get_sector_size(WORD sector)
-+{
-+ return meminfo.sec[sector].size;
-+}
-+
-+/*********************************************************************/
-+/* The purpose of flash_get_memptr() is to return a memory pointer */
-+/* which points to the beginning of memory space allocated for the */
-+/* flash. All function pointers are then referenced from this */
-+/* pointer. */
-+/* */
-+/* Different systems will implement this in different ways: */
-+/* possibilities include: */
-+/* - A direct memory pointer */
-+/* - A pointer to a memory map */
-+/* - A pointer to a hardware port from which the linear */
-+/* address is translated */
-+/* - Output of an MMU function / service */
-+/* */
-+/* Also note that this function expects the pointer to a specific */
-+/* sector of the device. This can be provided by dereferencing */
-+/* the pointer from a translated offset of the sector from a */
-+/* global base pointer (e.g. flashptr = base_pointer + sector_offset)*/
-+/* */
-+/* Important: Many AMD flash devices need both bank and or sector */
-+/* address bits to be correctly set (bank address bits are A18-A16, */
-+/* and sector address bits are A18-A12, or A12-A15). Flash parts */
-+/* which do not need these bits will ignore them, so it is safe to */
-+/* assume that every part will require these bits to be set. */
-+/*********************************************************************/
-+unsigned char *flash_get_memptr(WORD sector)
-+{
-+ unsigned char *memptr = (unsigned char*)(FLASH_BASE_ADDR_REG + meminfo.sec[sector].base);
-+
-+ return (memptr);
-+}
-+
-+/*********************************************************************/
-+/* The purpose of flash_get_blk() is to return a the block number */
-+/* for a given memory address. */
-+/*********************************************************************/
-+int flash_get_blk(int addr)
-+{
-+ int blk_start, i;
-+ int last_blk = flash_get_numsectors();
-+ int relative_addr = addr - (int) FLASH_BASE_ADDR_REG;
-+
-+ for(blk_start=0, i=0; i < relative_addr && blk_start < last_blk; blk_start++)
-+ i += flash_get_sector_size(blk_start);
-+
-+ if( i > relative_addr )
-+ {
-+ blk_start--; // last blk, dec by 1
-+ }
-+ else
-+ if( blk_start == last_blk )
-+ {
-+ printk("Address is too big.\n");
-+ blk_start = -1;
-+ }
-+
-+ return( blk_start );
-+}
-+
-+/************************************************************************/
-+/* The purpose of flash_get_total_size() is to return the total size of */
-+/* the flash */
-+/************************************************************************/
-+int flash_get_total_size()
-+{
-+ return totalSize;
-+}
-+
-+/*********************************************************************/
-+/* Flash_command() is the main driver function. It performs */
-+/* every possible command available to AMD B revision */
-+/* flash parts. Note that this command is not used directly, but */
-+/* rather called through the API wrapper functions provided below. */
-+/*********************************************************************/
-+static void flash_command(int command, WORD sector, int offset, UINT16 data)
-+{
-+ volatile UINT16 *flashptr;
-+ volatile UINT16 *flashbase;
-+
-+ flashptr = (UINT16 *) flash_get_memptr(sector);
-+ flashbase = (UINT16 *) flash_get_memptr(0);
-+
-+ switch (flashFamily) {
-+ case FLASH_UNDEFINED:
-+ /* These commands should work for AMD, Intel and SST flashes */
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xF0;
-+ flashptr[0] = 0xFF;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0x5555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AAA] = 0x55; /* unlock 2 */
-+ flashptr[0x5555] = 0x90;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_AMD:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xF0;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashptr[0x55] = 0x98;
-+ break;
-+ case FLASH_UB:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x20;
-+ break;
-+ case FLASH_PROG:
-+ flashptr[0] = 0xA0;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_UBRESET:
-+ flashptr[0] = 0x90;
-+ flashptr[0] = 0x00;
-+ break;
-+ case FLASH_SERASE:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x80;
-+ flashptr[0x555] = 0xAA;
-+ flashptr[0x2AA] = 0x55;
-+ flashptr[0] = 0x30;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_INTEL:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xFF;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashptr[0] = 0x98;
-+ break;
-+ case FLASH_PROG:
-+ flashptr[0] = 0x40;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_SERASE:
-+ flashptr[0] = 0x60;
-+ flashptr[0] = 0xD0;
-+ flashptr[0] = 0x20;
-+ flashptr[0] = 0xD0;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_SST:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0xf0;
-+ break;
-+ case FLASH_READ_ID:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x98;
-+ break;
-+ case FLASH_UB:
-+ break;
-+ case FLASH_PROG:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0xa0;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_UBRESET:
-+ break;
-+ case FLASH_SERASE:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x80;
-+ flashbase[0x5555] = 0xAA;
-+ flashbase[0x2AAA] = 0x55;
-+ flashptr[0] = 0x30;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+/*********************************************************************/
-+/* flash_write extends the functionality of flash_program() by */
-+/* providing an faster way to program multiple data words, without */
-+/* needing the function overhead of looping algorithms which */
-+/* program word by word. This function utilizes fast pointers */
-+/* to quickly loop through bulk data. */
-+/*********************************************************************/
-+static int flash_write(WORD sector, int offset, byte *buf, int nbytes)
-+{
-+ UINT16 *src;
-+ src = (UINT16 *)buf;
-+
-+ if ((nbytes | offset) & 1) {
-+ return -1;
-+ }
-+
-+ flash_command(FLASH_UB, 0, 0, 0);
-+ while (nbytes > 0) {
-+ flash_command(FLASH_PROG, sector, offset, *src);
-+ if (flash_wait(sector, offset, *src) != STATUS_READY)
-+ break;
-+ offset +=2;
-+ nbytes -=2;
-+ src++;
-+ }
-+ flash_command(FLASH_UBRESET, 0, 0, 0);
-+
-+ return (byte*)src - buf;
-+}
-+
-+/*********************************************************************/
-+/* flash_wait utilizes the DQ6, DQ5, and DQ2 polling algorithms */
-+/* described in the flash data book. It can quickly ascertain the */
-+/* operational status of the flash device, and return an */
-+/* appropriate status code (defined in flash.h) */
-+/*********************************************************************/
-+static int flash_wait(WORD sector, int offset, UINT16 data)
-+{
-+ volatile UINT16 *flashptr; /* flash window */
-+ UINT16 d1;
-+
-+ flashptr = (UINT16 *) flash_get_memptr(sector);
-+
-+ if (flashFamily == FLASH_AMD || flashFamily == FLASH_SST) {
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ do {
-+ d1 = flashptr[offset/2];
-+ if (d1 == data)
-+ return STATUS_READY;
-+ } while (!(d1 & 0x20));
-+
-+ d1 = flashptr[offset/2];
-+
-+ if (d1 != data) {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+#else
-+ do {
-+ d1 = *flashptr; /* read data */
-+ d1 ^= *flashptr; /* read it again and see what toggled */
-+ if (d1 == 0) /* no toggles, nothing's happening */
-+ return STATUS_READY;
-+ } while (!(d1 & 0x20));
-+
-+ d1 = *flashptr; /* read data */
-+ d1 ^= *flashptr; /* read it again and see what toggled */
-+
-+ if (d1 != 0) {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+#endif
-+ } else if (flashFamily == FLASH_INTEL) {
-+ flashptr[0] = 0x70;
-+ /* Wait for completion */
-+ while(!(*flashptr & 0x80));
-+ if (*flashptr & 0x30) {
-+ flashptr[0] = 0x50;
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+ flashptr[0] = 0x50;
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ }
-+
-+ return STATUS_READY;
-+}
-+
-+/*********************************************************************/
-+/* flash_get_device_id() will perform an autoselect sequence on the */
-+/* flash device, and return the device id of the component. */
-+/* This function automatically resets to read mode. */
-+/*********************************************************************/
-+static UINT16 flash_get_device_id()
-+{
-+ volatile UINT16 *fwp; /* flash window */
-+ UINT16 answer;
-+
-+ fwp = (UINT16 *)flash_get_memptr(0);
-+
-+ flash_command(FLASH_READ_ID, 0, 0, 0);
-+ answer = *(fwp + 1);
-+ if (answer == ID_AM29LV320M) {
-+ answer = *(fwp + 0xe);
-+ answer = *(fwp + 0xf);
-+ }
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return( (UINT16) answer );
-+}
-+
-+/*********************************************************************/
-+/* flash_get_cfi() is the main CFI workhorse function. Due to it's */
-+/* complexity and size it need only be called once upon */
-+/* initializing the flash system. Once it is called, all operations */
-+/* are performed by looking at the meminfo structure. */
-+/* All possible care was made to make this algorithm as efficient as */
-+/* possible. 90% of all operations are memory reads, and all */
-+/* calculations are done using bit-shifts when possible */
-+/*********************************************************************/
-+static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily)
-+{
-+ volatile UINT16 *fwp; /* flash window */
-+ int i=0;
-+
-+ flash_command(FLASH_CFIQUERY, 0, 0, 0);
-+
-+ if (cfi_struct == 0)
-+ fwp = (UINT16 *)flash_get_memptr(0);
-+ else
-+ fwp = cfi_struct;
-+
-+ /* Initial house-cleaning */
-+ for(i=0; i < 8; i++) {
-+ query->erase_block[i].sector_size = 0;
-+ query->erase_block[i].num_sectors = 0;
-+ }
-+
-+ /* If not 'QRY', then we dont have a CFI enabled device in the socket */
-+ if( fwp[0x10] != 'Q' &&
-+ fwp[0x11] != 'R' &&
-+ fwp[0x12] != 'Y') {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return(-1);
-+ }
-+
-+ query->num_erase_blocks = fwp[0x2C];
-+ if(flashFamily == FLASH_SST)
-+ query->num_erase_blocks = 1;
-+
-+ for(i=0; i < query->num_erase_blocks; i++) {
-+ query->erase_block[i].num_sectors = fwp[(0x2D+(4*i))] + (fwp[0x2E + (4*i)] << 8);
-+ query->erase_block[i].num_sectors++;
-+ query->erase_block[i].sector_size = 256 * (256 * fwp[(0x30+(4*i))] + fwp[(0x2F+(4*i))]);
-+ }
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return(1);
-+}
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.h
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/bcm96348/cfiflash.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,150 @@
-+/************************************************************************/
-+/* */
-+/* AMD CFI Enabled Flash Memory Drivers */
-+/* File name: CFIFLASH.H */
-+/* Revision: 1.0 5/07/98 */
-+/* */
-+/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
-+/* This software is unpublished and contains the trade secrets and */
-+/* confidential proprietary information of AMD. Unless otherwise */
-+/* provided in the Software Agreement associated herewith, it is */
-+/* licensed in confidence "AS IS" and is not to be reproduced in whole */
-+/* or part by any means except for backup. Use, duplication, or */
-+/* disclosure by the Government is subject to the restrictions in */
-+/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
-+/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
-+/* Software owned by */
-+/* Advanced Micro Devices, Inc., */
-+/* One AMD Place, */
-+/* P.O. Box 3453 */
-+/* Sunnyvale, CA 94088-3453. */
-+/************************************************************************/
-+/* This software constitutes a basic shell of source code for */
-+/* programming all AMD Flash components. AMD */
-+/* will not be responsible for misuse or illegal use of this */
-+/* software for devices not supported herein. AMD is providing */
-+/* this source code "AS IS" and will not be responsible for */
-+/* issues arising from incorrect user implementation of the */
-+/* source code herein. It is the user's responsibility to */
-+/* properly design-in this source code. */
-+/* */
-+/************************************************************************/
-+#ifndef _CFIFLASH_H
-+#define _CFIFLASH_H
-+
-+#if defined __cplusplus
-+extern "C" {
-+#endif
-+
-+/* include board/CPU specific definitions */
-+#include "bcmtypes.h"
-+#include "board.h"
-+
-+#define FLASH_BASE_ADDR_REG FLASH_BASE
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#define MAXSECTORS 1024 /* maximum number of sectors supported */
-+
-+/* A structure for identifying a flash part. There is one for each
-+ * of the flash part definitions. We need to keep track of the
-+ * sector organization, the address register used, and the size
-+ * of the sectors.
-+ */
-+struct flashinfo {
-+ char *name; /* "Am29DL800T", etc. */
-+ unsigned long addr; /* physical address, once translated */
-+ int areg; /* Can be set to zero for all parts */
-+ int nsect; /* # of sectors -- 19 in LV, 22 in DL */
-+ int bank1start; /* first sector # in bank 1 */
-+ int bank2start; /* first sector # in bank 2, if DL part */
-+ struct {
-+ long size; /* # of bytes in this sector */
-+ long base; /* offset from beginning of device */
-+ int bank; /* 1 or 2 for DL; 1 for LV */
-+ } sec[MAXSECTORS]; /* per-sector info */
-+};
-+
-+/*
-+ * This structure holds all CFI query information as defined
-+ * in the JEDEC standard. All information up to
-+ * primary_extended_query is standard among all manufactures
-+ * with CFI enabled devices.
-+ */
-+
-+struct cfi_query {
-+ int num_erase_blocks; /* Number of sector defs. */
-+ struct {
-+ unsigned long sector_size; /* byte size of sector */
-+ int num_sectors; /* Num sectors of this size */
-+ } erase_block[8]; /* Max of 256, but 8 is good */
-+};
-+
-+/* Standard Boolean declarations */
-+#define TRUE 1
-+#define FALSE 0
-+
-+/* Define different type of flash */
-+#define FLASH_UNDEFINED 0
-+#define FLASH_AMD 1
-+#define FLASH_INTEL 2
-+#define FLASH_SST 3
-+
-+/* Command codes for the flash_command routine */
-+#define FLASH_RESET 0 /* reset to read mode */
-+#define FLASH_READ_ID 1 /* read device ID */
-+#define FLASH_CFIQUERY 2 /* CFI query */
-+#define FLASH_UB 3 /* go into unlock bypass mode */
-+#define FLASH_PROG 4 /* program a word */
-+#define FLASH_UBRESET 5 /* reset to read mode from unlock bypass mode */
-+#define FLASH_SERASE 6 /* sector erase */
-+
-+/* Return codes from flash_status */
-+#define STATUS_READY 0 /* ready for action */
-+#define STATUS_TIMEOUT 1 /* operation timed out */
-+
-+/* A list of AMD compatible device ID's - add others as needed */
-+#define ID_AM29DL800T 0x224A
-+#define ID_AM29DL800B 0x22CB
-+#define ID_AM29LV800T 0x22DA
-+#define ID_AM29LV800B 0x225B
-+#define ID_AM29LV400B 0x22BA
-+
-+#define ID_AM29LV160B 0x2249
-+#define ID_AM29LV160T 0x22C4
-+
-+#define ID_AM29LV320T 0x22F6
-+#define ID_MX29LV320AT 0x22A7
-+#define ID_AM29LV320B 0x22F9
-+#define ID_MX29LV320AB 0x22A8
-+
-+#define ID_AM29LV320M 0x227E
-+#define ID_AM29LV320MB 0x2200
-+#define ID_AM29LV320MT 0x2201
-+
-+#define ID_SST39VF1601 0x234B
-+#define ID_SST39VF3201 0x235B
-+
-+/* A list of Intel compatible device ID's - add others as needed */
-+#define ID_I28F160C3T 0x88C2
-+#define ID_I28F160C3B 0x88C3
-+#define ID_I28F320C3T 0x88C4
-+#define ID_I28F320C3B 0x88C5
-+
-+extern byte flash_init(void);
-+extern int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes);
-+extern int flash_read_buf(WORD sector, int offset, byte *buffer, int numbytes);
-+extern byte flash_sector_erase_int(WORD sector);
-+extern int flash_get_numsectors(void);
-+extern int flash_get_sector_size(WORD sector);
-+extern int flash_get_total_size(void);
-+extern unsigned char *flash_get_memptr(WORD sector);
-+extern int flash_get_blk(int addr);
-+
-+#if defined __cplusplus
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/Makefile
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,17 @@
-+# Makefile for the bcm963xx board drivers
-+#
-+
-+
-+obj-y := board.o cfiflash.o bcm63xx_flash.o bcm63xx_led.o
-+
-+EXTRA_CFLAGS += -I. -I$(INC_BRCMBOARDPARMS_PATH)/$(BRCM_BOARD) -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+
-+ifeq ($(strip $(WIRELESS)),1)
-+ EXTRA_CFLAGS += -DWIRELESS
-+endif
-+
-+-include $(TOPDIR)/Rules.make
-+
-+clean:
-+ rm -f core *.o *.a *.s
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_flash.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_flash.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_flash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_flash.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,775 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/*
-+ ***************************************************************************
-+ * File Name : bcm63xx_flash.c
-+ *
-+ * Description: This file contains the flash device driver APIs for bcm63xx board.
-+ *
-+ * Created on : 8/10/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
-+ *
-+ ***************************************************************************/
-+
-+
-+/* Includes. */
-+#include <linux/fs.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+#define BCMTAG_EXE_USE
-+#include <bcmTag.h>
-+#include "cfiflash.h"
-+#include "boardparms.h"
-+
-+//#define DEBUG_FLASH
-+
-+static FLASH_ADDR_INFO fInfo;
-+static int flashInitialized = 0;
-+
-+void *retriedKmalloc(size_t size)
-+{
-+ void *pBuf;
-+ int tryCount = 0;
-+
-+ // try 1000 times before quit
-+ while (((pBuf = kmalloc(size, GFP_KERNEL)) == NULL) && (tryCount++ < 1000))
-+ {
-+ current->state = TASK_INTERRUPTIBLE;
-+ schedule_timeout(HZ/10);
-+ }
-+ if (tryCount >= 1000)
-+ pBuf = NULL;
-+ else
-+ memset(pBuf, 0, size);
-+
-+ return pBuf;
-+}
-+
-+void retriedKfree(void *pBuf)
-+{
-+ kfree(pBuf);
-+}
-+
-+/***************************************************************************
-+// Function Name: getCrc32
-+// Description : caculate the CRC 32 of the given data.
-+// Parameters : pdata - array of data.
-+// size - number of input data bytes.
-+// crc - either CRC32_INIT_VALUE or previous return value.
-+// Returns : crc.
-+****************************************************************************/
-+UINT32 getCrc32(byte *pdata, UINT32 size, UINT32 crc)
-+{
-+ while (size-- > 0)
-+ crc = (crc >> 8) ^ Crc32_table[(crc ^ *pdata++) & 0xff];
-+
-+ return crc;
-+}
-+
-+// get the nvram start addr
-+//
-+unsigned long get_nvram_start_addr(void)
-+{
-+ return ((unsigned long)
-+ (flash_get_memptr(fInfo.flash_nvram_start_blk) + fInfo.flash_nvram_blk_offset));
-+}
-+
-+// get the scratch_pad start addr
-+//
-+unsigned long get_scratch_pad_start_addr(void)
-+{
-+ return ((unsigned long)
-+ (flash_get_memptr(fInfo.flash_scratch_pad_start_blk) + fInfo.flash_scratch_pad_blk_offset));
-+}
-+
-+
-+
-+/* *********************************************************************
-+ * kerSysImageTagGet()
-+ * Get the image tag
-+ * Input parameters:
-+ * none
-+ * Return value:
-+ * point to tag -- Found
-+ * NULL -- failed
-+ ********************************************************************* */
-+PFILE_TAG kerSysImageTagGet(void)
-+{
-+ int i;
-+ int totalBlks = flash_get_numsectors();
-+ UINT32 crc;
-+ unsigned char *sectAddr;
-+ PFILE_TAG pTag;
-+
-+#if defined(DEBUG_FLASH)
-+ printk("totalblks in tagGet=%d\n", totalBlks);
-+#endif
-+
-+ // start from 2nd blk, assume 1st one is always CFE
-+ for (i = 1; i < totalBlks; i++)
-+ {
-+ sectAddr = flash_get_memptr((byte) i);
-+ crc = CRC32_INIT_VALUE;
-+ crc = getCrc32(sectAddr, (UINT32)TAG_LEN-TOKEN_LEN, crc);
-+ pTag = (PFILE_TAG) sectAddr;
-+
-+#if defined(DEBUG_FLASH)
-+ printk("Check Tag crc on blk [%d]\n", i);
-+#endif
-+
-+ if (crc == (UINT32)(*(UINT32*)(pTag->tagValidationToken)))
-+ return pTag;
-+ }
-+
-+ return (PFILE_TAG) NULL;
-+}
-+
-+// Initialize the flash and fill out the fInfo structure
-+void kerSysFlashInit( void )
-+{
-+ int i = 0;
-+ int totalBlks = 0;
-+ int totalSize = 0;
-+ int startAddr = 0;
-+ int usedBlkSize = 0;
-+ NVRAM_DATA nvramData;
-+ UINT32 crc = CRC32_INIT_VALUE, savedCrc;
-+ PFILE_TAG pTag = NULL;
-+ unsigned long kernelEndAddr = 0;
-+ unsigned long spAddr = 0;
-+
-+ if (flashInitialized)
-+ return;
-+
-+ flashInitialized = 1;
-+ flash_init();
-+
-+ totalBlks = flash_get_numsectors();
-+ totalSize = flash_get_total_size();
-+
-+ printk("Total Flash size: %dK with %d sectors\n", totalSize/1024, totalBlks);
-+
-+ /* nvram is always at the end of flash */
-+ fInfo.flash_nvram_length = FLASH45_LENGTH_NVRAM;
-+ fInfo.flash_nvram_start_blk = 0; /* always the first block */
-+ fInfo.flash_nvram_number_blk = 1; /*always fits in the first block */
-+ fInfo.flash_nvram_blk_offset = NVRAM_DATA_OFFSET;
-+
-+ // check nvram CRC
-+ memcpy((char *)&nvramData, (char *)get_nvram_start_addr(), sizeof(NVRAM_DATA));
-+ savedCrc = nvramData.ulCheckSum;
-+ nvramData.ulCheckSum = 0;
-+ crc = getCrc32((char *)&nvramData, (UINT32) sizeof(NVRAM_DATA), crc);
-+
-+ BpSetBoardId( nvramData.szBoardId );
-+
-+ fInfo.flash_persistent_length = NVRAM_PSI_DEFAULT;
-+ if (savedCrc != crc)
-+ {
-+ printk("***Board is not initialized****: Using the default PSI size: %d\n",
-+ fInfo.flash_persistent_length);
-+ }
-+ else
-+ {
-+ unsigned long ulPsiSize;
-+ if( BpGetPsiSize( &ulPsiSize ) == BP_SUCCESS )
-+ fInfo.flash_persistent_length = ulPsiSize;
-+ else
-+ {
-+ printk("***Board id is not set****: Using the default PSI size: %d\n",
-+ fInfo.flash_persistent_length);
-+ }
-+ }
-+
-+ fInfo.flash_persistent_length *= ONEK;
-+ startAddr = totalSize - fInfo.flash_persistent_length;
-+ fInfo.flash_persistent_start_blk = flash_get_blk(startAddr+FLASH_BASE_ADDR_REG);
-+ fInfo.flash_persistent_number_blk = totalBlks - fInfo.flash_persistent_start_blk;
-+ // save abs SP address (Scratch Pad). it is before PSI
-+ spAddr = startAddr - SP_MAX_LEN ;
-+ // find out the offset in the start_blk
-+ usedBlkSize = 0;
-+ for (i = fInfo.flash_persistent_start_blk;
-+ i < (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk); i++)
-+ {
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+ }
-+ fInfo.flash_persistent_blk_offset = usedBlkSize - fInfo.flash_persistent_length;
-+
-+ // get the info for sp
-+ if (!(pTag = kerSysImageTagGet()))
-+ {
-+ printk("Failed to read image tag from flash\n");
-+ return;
-+ }
-+ kernelEndAddr = (unsigned long) simple_strtoul(pTag->kernelAddress, NULL, 10) + \
-+ (unsigned long) simple_strtoul(pTag->kernelLen, NULL, 10);
-+
-+ // make suer sp does not share kernel block
-+ fInfo.flash_scratch_pad_start_blk = flash_get_blk(spAddr+FLASH_BASE_ADDR_REG);
-+ if (fInfo.flash_scratch_pad_start_blk != flash_get_blk(kernelEndAddr))
-+ {
-+ fInfo.flash_scratch_pad_length = SP_MAX_LEN;
-+ if (fInfo.flash_persistent_start_blk == fInfo.flash_scratch_pad_start_blk) // share blk
-+ {
-+#if 1 /* do not used scratch pad unless it's in its own sector */
-+ printk("Scratch pad is not used for this flash part.\n");
-+ fInfo.flash_scratch_pad_length = 0; // no sp
-+#else /* allow scratch pad to share a sector with another section such as PSI */
-+ fInfo.flash_scratch_pad_number_blk = 1;
-+ fInfo.flash_scratch_pad_blk_offset = fInfo.flash_persistent_blk_offset - fInfo.flash_scratch_pad_length;
-+#endif
-+ }
-+ else // on different blk
-+ {
-+ fInfo.flash_scratch_pad_number_blk = fInfo.flash_persistent_start_blk\
-+ - fInfo.flash_scratch_pad_start_blk;
-+ // find out the offset in the start_blk
-+ usedBlkSize = 0;
-+ for (i = fInfo.flash_scratch_pad_start_blk;
-+ i < (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk); i++)
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+ fInfo.flash_scratch_pad_blk_offset = usedBlkSize - fInfo.flash_scratch_pad_length;
-+ }
-+ }
-+ else
-+ {
-+ printk("No flash for scratch pad!\n");
-+ fInfo.flash_scratch_pad_length = 0; // no sp
-+ }
-+
-+#if defined(DEBUG_FLASH)
-+ printk("fInfo.flash_scratch_pad_start_blk = %d\n", fInfo.flash_scratch_pad_start_blk);
-+ printk("fInfo.flash_scratch_pad_number_blk = %d\n", fInfo.flash_scratch_pad_number_blk);
-+ printk("fInfo.flash_scratch_pad_length = 0x%x\n", fInfo.flash_scratch_pad_length);
-+ printk("fInfo.flash_scratch_pad_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_scratch_pad_blk_offset);
-+
-+ printk("fInfo.flash_nvram_start_blk = %d\n", fInfo.flash_nvram_start_blk);
-+ printk("fInfo.flash_nvram_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_nvram_blk_offset);
-+ printk("fInfo.flash_nvram_number_blk = %d\n", fInfo.flash_nvram_number_blk);
-+
-+ printk("psi startAddr = %x\n", startAddr+FLASH_BASE_ADDR_REG);
-+ printk("fInfo.flash_persistent_start_blk = %d\n", fInfo.flash_persistent_start_blk);
-+ printk("fInfo.flash_persistent_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_persistent_blk_offset);
-+ printk("fInfo.flash_persistent_number_blk = %d\n", fInfo.flash_persistent_number_blk);
-+#endif
-+
-+}
-+
-+
-+
-+/***********************************************************************
-+ * Function Name: kerSysFlashAddrInfoGet
-+ * Description : Fills in a structure with information about the NVRAM
-+ * and persistent storage sections of flash memory.
-+ * Fro physmap.c to mount the fs vol.
-+ * Returns : None.
-+ ***********************************************************************/
-+void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info)
-+{
-+ pflash_addr_info->flash_nvram_blk_offset = fInfo.flash_nvram_blk_offset;
-+ pflash_addr_info->flash_nvram_length = fInfo.flash_nvram_length;
-+ pflash_addr_info->flash_nvram_number_blk = fInfo.flash_nvram_number_blk;
-+ pflash_addr_info->flash_nvram_start_blk = fInfo.flash_nvram_start_blk;
-+ pflash_addr_info->flash_persistent_blk_offset = fInfo.flash_persistent_blk_offset;
-+ pflash_addr_info->flash_persistent_length = fInfo.flash_persistent_length;
-+ pflash_addr_info->flash_persistent_number_blk = fInfo.flash_persistent_number_blk;
-+ pflash_addr_info->flash_persistent_start_blk = fInfo.flash_persistent_start_blk;
-+}
-+
-+
-+// get shared blks into *** pTempBuf *** which has to be released bye the caller!
-+// return: if pTempBuf != NULL, poits to the data with the dataSize of the buffer
-+// !NULL -- ok
-+// NULL -- fail
-+static char *getSharedBlks(int start_blk, int end_blk)
-+{
-+ int i = 0;
-+ int usedBlkSize = 0;
-+ int sect_size = 0;
-+ char *pTempBuf = NULL;
-+ char *pBuf = NULL;
-+
-+ for (i = start_blk; i < end_blk; i++)
-+ usedBlkSize += flash_get_sector_size((byte) i);
-+
-+#if defined(DEBUG_FLASH)
-+ printk("usedBlkSize = %d\n", usedBlkSize);
-+#endif
-+
-+ if ((pTempBuf = (char *) retriedKmalloc(usedBlkSize)) == NULL)
-+ {
-+ printk("failed to allocate memory with size: %d\n", usedBlkSize);
-+ return pTempBuf;
-+ }
-+
-+ pBuf = pTempBuf;
-+ for (i = start_blk; i < end_blk; i++)
-+ {
-+ sect_size = flash_get_sector_size((byte) i);
-+
-+#if defined(DEBUG_FLASH)
-+ printk("i = %d, sect_size = %d, end_blk = %d\n", i, sect_size, end_blk);
-+#endif
-+ flash_read_buf((byte)i, 0, pBuf, sect_size);
-+ pBuf += sect_size;
-+ }
-+
-+ return pTempBuf;
-+}
-+
-+
-+
-+// Set the pTempBuf to flash from start_blk to end_blk
-+// return:
-+// 0 -- ok
-+// -1 -- fail
-+static int setSharedBlks(int start_blk, int end_blk, char *pTempBuf)
-+{
-+ int i = 0;
-+ int sect_size = 0;
-+ int sts = 0;
-+ char *pBuf = pTempBuf;
-+
-+ for (i = start_blk; i < end_blk; i++)
-+ {
-+ sect_size = flash_get_sector_size((byte) i);
-+ flash_sector_erase_int(i);
-+ if (flash_write_buf(i, 0, pBuf, sect_size) != sect_size)
-+ {
-+ printk("Error writing flash sector %d.", i);
-+ sts = -1;
-+ break;
-+ }
-+ pBuf += sect_size;
-+ }
-+
-+ return sts;
-+}
-+
-+
-+
-+/*******************************************************************************
-+ * NVRAM functions
-+ *******************************************************************************/
-+
-+// get nvram data
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysNvRamGet(char *string, int strLen, int offset)
-+{
-+ char *pBuf = NULL;
-+
-+ if (!flashInitialized)
-+ kerSysFlashInit();
-+
-+ if (strLen > FLASH45_LENGTH_NVRAM)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
-+ return -1;
-+
-+ // get string off the memory buffer
-+ memcpy(string, (pBuf + fInfo.flash_nvram_blk_offset + offset), strLen);
-+
-+ retriedKfree(pBuf);
-+
-+ return 0;
-+}
-+
-+
-+// set nvram
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysNvRamSet(char *string, int strLen, int offset)
-+{
-+ int sts = 0;
-+ char *pBuf = NULL;
-+
-+ if (strLen > FLASH45_LENGTH_NVRAM)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
-+ return -1;
-+
-+ // set string to the memory buffer
-+ memcpy((pBuf + fInfo.flash_nvram_blk_offset + offset), string, strLen);
-+
-+ if (setSharedBlks(fInfo.flash_nvram_start_blk,
-+ (fInfo.flash_nvram_number_blk + fInfo.flash_nvram_start_blk), pBuf) != 0)
-+ sts = -1;
-+
-+ retriedKfree(pBuf);
-+
-+ return sts;
-+}
-+
-+
-+/***********************************************************************
-+ * Function Name: kerSysEraseNvRam
-+ * Description : Erase the NVRAM storage section of flash memory.
-+ * Returns : 1 -- ok, 0 -- fail
-+ ***********************************************************************/
-+int kerSysEraseNvRam(void)
-+{
-+ int sts = 1;
-+ char *tempStorage = retriedKmalloc(FLASH45_LENGTH_NVRAM);
-+
-+ // just write the whole buf with '0xff' to the flash
-+ if (!tempStorage)
-+ sts = 0;
-+ else
-+ {
-+ memset(tempStorage, 0xff, FLASH45_LENGTH_NVRAM);
-+ if (kerSysNvRamSet(tempStorage, FLASH45_LENGTH_NVRAM, 0) != 0)
-+ sts = 0;
-+ retriedKfree(tempStorage);
-+ }
-+
-+ return sts;
-+}
-+
-+
-+/*******************************************************************************
-+ * PSI functions
-+ *******************************************************************************/
-+// get psi data
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysPersistentGet(char *string, int strLen, int offset)
-+{
-+ char *pBuf = NULL;
-+
-+ if (strLen > fInfo.flash_persistent_length)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
-+ return -1;
-+
-+ // get string off the memory buffer
-+ memcpy(string, (pBuf + fInfo.flash_persistent_blk_offset + offset), strLen);
-+
-+ retriedKfree(pBuf);
-+
-+ return 0;
-+}
-+
-+
-+// set psi
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysPersistentSet(char *string, int strLen, int offset)
-+{
-+ int sts = 0;
-+ char *pBuf = NULL;
-+
-+ if (strLen > fInfo.flash_persistent_length)
-+ return -1;
-+
-+ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
-+ return -1;
-+
-+ // set string to the memory buffer
-+ memcpy((pBuf + fInfo.flash_persistent_blk_offset + offset), string, strLen);
-+
-+ if (setSharedBlks(fInfo.flash_persistent_start_blk,
-+ (fInfo.flash_persistent_number_blk + fInfo.flash_persistent_start_blk), pBuf) != 0)
-+ sts = -1;
-+
-+ retriedKfree(pBuf);
-+
-+ return sts;
-+}
-+
-+
-+// flash bcm image
-+// return:
-+// 0 - ok
-+// !0 - the sector number fail to be flashed (should not be 0)
-+int kerSysBcmImageSet( int flash_start_addr, char *string, int size)
-+{
-+ int sts;
-+ int sect_size;
-+ int blk_start;
-+ int i;
-+ char *pTempBuf = NULL;
-+ int whole_image = 0;
-+
-+ blk_start = flash_get_blk(flash_start_addr);
-+ if( blk_start < 0 )
-+ return( -1 );
-+
-+ if (flash_start_addr == FLASH_BASE && size > FLASH45_LENGTH_BOOT_ROM)
-+ whole_image = 1;
-+
-+ /* write image to flash memory */
-+ do
-+ {
-+ sect_size = flash_get_sector_size(blk_start);
-+// NOTE: for memory problem in multiple PVC configuration, temporary get rid of kmalloc this 64K for now.
-+// if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
-+// {
-+// printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
-+// kerSysMipsSoftReset(); // reset the board right away.
-+// }
-+ // for whole image, no check on psi
-+ if (!whole_image && blk_start == fInfo.flash_persistent_start_blk) // share the blk with psi
-+ {
-+ if (size > (sect_size - fInfo.flash_persistent_length))
-+ {
-+ printk("Image is too big\n");
-+ break; // image is too big. Can not overwrite to nvram
-+ }
-+ if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
-+ {
-+ printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
-+ kerSysMipsSoftReset(); // reset the board right away.
-+ }
-+ flash_read_buf((byte)blk_start, 0, pTempBuf, sect_size);
-+ if (copy_from_user((void *)pTempBuf,(void *)string, size) != 0)
-+ break; // failed ?
-+ flash_sector_erase_int(blk_start); // erase blk before flash
-+ if (flash_write_buf(blk_start, 0, pTempBuf, sect_size) == sect_size)
-+ size = 0; // break out and say all is ok
-+ retriedKfree(pTempBuf);
-+ break;
-+ }
-+
-+ flash_sector_erase_int(blk_start); // erase blk before flash
-+
-+ if (sect_size > size)
-+ {
-+ if (size & 1)
-+ size++;
-+ sect_size = size;
-+ }
-+
-+ if ((i = flash_write_buf(blk_start, 0, string, sect_size)) != sect_size) {
-+ break;
-+ }
-+ blk_start++;
-+ string += sect_size;
-+ size -= sect_size;
-+ } while (size > 0);
-+
-+ if (whole_image)
-+ {
-+ // If flashing a whole image, erase to end of flash.
-+ int total_blks = flash_get_numsectors();
-+ while( blk_start < total_blks )
-+ {
-+ flash_sector_erase_int(blk_start);
-+ blk_start++;
-+ }
-+ }
-+ if (pTempBuf)
-+ retriedKfree(pTempBuf);
-+
-+ if( size == 0 )
-+ sts = 0; // ok
-+ else
-+ sts = blk_start; // failed to flash this sector
-+
-+ return sts;
-+}
-+
-+/*******************************************************************************
-+ * SP functions
-+ *******************************************************************************/
-+// get sp data. NOTE: memcpy work here -- not using copy_from/to_user
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysScratchPadGet(char *tokenId, char *tokBuf, int bufLen)
-+{
-+ PSP_HEADER pHead = NULL;
-+ PSP_TOKEN pToken = NULL;
-+ char *pBuf = NULL;
-+ char *pShareBuf = NULL;
-+ char *startPtr = NULL;
-+ char *endPtr = NULL;
-+ char *spEndPtr = NULL;
-+ int sts = -1;
-+
-+ if (fInfo.flash_scratch_pad_length == 0)
-+ return sts;
-+
-+ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
-+ {
-+ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
-+ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
-+ return sts;
-+ }
-+
-+ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
-+ return sts;
-+
-+ // pBuf points to SP buf
-+ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
-+
-+ pHead = (PSP_HEADER) pBuf;
-+ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
-+ {
-+ printk("Scrap pad is not initialized.\n");
-+ return sts;
-+ }
-+
-+ // search up to SPUsedLen for the token
-+ startPtr = pBuf + sizeof(SP_HEADER);
-+ endPtr = pBuf + pHead->SPUsedLen;
-+ spEndPtr = pBuf + SP_MAX_LEN;
-+ while (startPtr < endPtr && startPtr < spEndPtr)
-+ {
-+ pToken = (PSP_TOKEN) startPtr;
-+ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
-+ {
-+ memcpy(tokBuf, startPtr + sizeof(SP_TOKEN), bufLen);
-+ sts = 0;
-+ break;
-+ }
-+ // get next token
-+ startPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
-+ }
-+
-+ retriedKfree(pShareBuf);
-+
-+ return sts;
-+}
-+
-+
-+// set sp. NOTE: memcpy work here -- not using copy_from/to_user
-+// return:
-+// 0 - ok
-+// -1 - fail
-+int kerSysScratchPadSet(char *tokenId, char *tokBuf, int bufLen)
-+{
-+ PSP_TOKEN pToken = NULL;
-+ PSP_HEADER pHead = NULL;
-+ char *pShareBuf = NULL;
-+ char *pBuf = NULL;
-+ SP_HEADER SPHead;
-+ SP_TOKEN SPToken;
-+ char *curPtr;
-+ int sts = -1;
-+
-+ if (fInfo.flash_scratch_pad_length == 0)
-+ return sts;
-+
-+ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
-+ {
-+ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
-+ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
-+ return sts;
-+ }
-+
-+ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
-+ return sts;
-+
-+ // pBuf points to SP buf
-+ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
-+ pHead = (PSP_HEADER) pBuf;
-+
-+ // form header info. SPUsedLen later on...
-+ memset((char *)&SPHead, 0, sizeof(SP_HEADER));
-+ memcpy(SPHead.SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN);
-+ SPHead.SPVersion = SP_VERSION;
-+
-+ // form token info.
-+ memset((char*)&SPToken, 0, sizeof(SP_TOKEN));
-+ strncpy(SPToken.tokenName, tokenId, TOKEN_NAME_LEN - 1);
-+ SPToken.tokenLen = bufLen;
-+ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
-+ {
-+ // new sp, so just flash the token
-+ printk("No Scrap pad found. Initialize scratch pad...\n");
-+ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen;
-+ memcpy(pBuf, (char *)&SPHead, sizeof(SP_HEADER));
-+ curPtr = pBuf + sizeof(SP_HEADER);
-+ memcpy(curPtr, (char *)&SPToken, sizeof(SP_TOKEN));
-+ curPtr += sizeof(SP_TOKEN);
-+ memcpy(curPtr, tokBuf, bufLen);
-+ }
-+ else
-+ {
-+ // need search for the token, if exist with same size overwrite it. if sizes differ,
-+ // move over the later token data over and put the new one at the end
-+ char *endPtr = pBuf + pHead->SPUsedLen;
-+ char *spEndPtr = pBuf + SP_MAX_LEN;
-+ curPtr = pBuf + sizeof(SP_HEADER);
-+ while (curPtr < endPtr && curPtr < spEndPtr)
-+ {
-+ pToken = (PSP_TOKEN) curPtr;
-+ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
-+ {
-+ if (pToken->tokenLen == bufLen) // overwirte it
-+ {
-+ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen);
-+ break;
-+ }
-+ else // move later data over and put the new token at the end
-+ {
-+ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen); // ~~~
-+ break;
-+ }
-+ }
-+ else // not same token ~~~
-+ {
-+ }
-+ // get next token
-+ curPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
-+ } // end while
-+ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen; // ~~~
-+ if (SPHead.SPUsedLen > SP_MAX_LEN)
-+ {
-+ printk("No more Scratch pad space left! Over limit by %d bytes\n", SPHead.SPUsedLen - SP_MAX_LEN);
-+ return sts;
-+ }
-+
-+ } // else if not new sp
-+
-+ sts = setSharedBlks(fInfo.flash_scratch_pad_start_blk,
-+ (fInfo.flash_scratch_pad_number_blk + fInfo.flash_scratch_pad_start_blk), pShareBuf);
-+
-+ retriedKfree(pShareBuf);
-+
-+ return sts;
-+
-+
-+}
-+
-+int kerSysFlashSizeGet(void)
-+{
-+ return flash_get_total_size();
-+}
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_led.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_led.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_led.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/bcm63xx_led.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,582 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : bcm63xx_led.c
-+ *
-+ * Description:
-+ *
-+ * This file contains bcm963xx board led control API functions.
-+ *
-+ * To use it, do the following
-+ *
-+ * 1). define in the board.c the following led mappping (this is for 6345GW board):
-+ * const LED_MAP_PAIR cLedMapping45GW[] =
-+ * { // led name Initial state physical pin (ledMask)
-+ * {kLedUsb, kLedStateOff, GPIO_LED_PIN_7},
-+ * {kLedAdsl, kLedStateOff, GPIO_LED_PIN_8},
-+ * {kLedPPP, kLedStateOff, GPIO_LED_PIN_9}, // PPP and WanData share PIN_9
-+ * {kLedWanData, kLedStateOff, GPIO_LED_PIN_9},
-+ * {kLedWireless, kLedStateOff, GPIO_LED_PIN_10},
-+ * {kLedEnd, kLedStateOff, 0 } // NOTE: kLedEnd has to be at the end.
-+ *
-+ * 2). };To initialize led API and initial state of the leds, call the following function with the mapping
-+ * pointer from the above struct
-+ *
-+ * boardLedInit((PLED_MAP_PAIR) &cLedMapping45R);
-+ *
-+ * 3). Sample call for kernel mode:
-+ *
-+ * kerSysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board.h
-+ *
-+ * 4). Sample call for user mode
-+ *
-+ * sysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board_api.h
-+ *
-+ *
-+ * Created on : 10/28/2002 seanl
-+ *
-+ ***************************************************************************/
-+
-+/* Includes. */
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <linux/netdevice.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+
-+#define k100ms (HZ / 10) // ~100 ms
-+#define kFastBlinkCount 0 // ~100ms
-+#define kSlowBlinkCount 5 // ~600ms
-+
-+#define MAX_VIRT_LEDS 12
-+
-+// uncomment // for debug led
-+//#define DEBUG_LED
-+
-+// global variables:
-+struct timer_list gLedTimer;
-+int gTimerOn = FALSE;
-+int gLedCount = 0;
-+
-+typedef struct ledinfo
-+{
-+ unsigned short ledMask; // mask for led: ie. giop 10 = 0x0400
-+ unsigned short ledActiveLow; // GPIO bit reset to turn on LED
-+ unsigned short ledMaskFail; // mask for led: ie. giop 10 = 0x0400
-+ unsigned short ledActiveLowFail;// GPIO bit reset to turn on LED
-+ BOARD_LED_STATE ledState; // current led state
-+ BOARD_LED_STATE savedLedState; // used in blink once for restore to the orignal ledState
-+ int blinkCountDown; // if == 0, do blink (toggle). Is assgined value and dec by 1 at each timer.
-+} LED_INFO, *PLED_INFO;
-+
-+static PLED_INFO gLed = NULL;
-+static PLED_INFO gpVirtLeds[MAX_VIRT_LEDS];
-+static HANDLE_LED_FUNC gLedHwFunc[MAX_VIRT_LEDS];
-+static HANDLE_LED_FUNC gLedHwFailFunc[MAX_VIRT_LEDS];
-+
-+#if 0 /* BROKEN */
-+#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+static int gLedOffInBridgeMode = 1;
-+#elif defined(CONFIG_BCM96345)
-+static int gLedOffInBridgeMode = 0;
-+#endif
-+#endif
-+
-+void ledTimerExpire(void);
-+int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed );
-+
-+//**************************************************************************************
-+// LED operations
-+//**************************************************************************************
-+
-+// turn led on and set the ledState
-+void ledOn(PLED_INFO pLed)
-+{
-+ if( pLed->ledMask )
-+ {
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLow )
-+ GPIO->GPIOio &= ~pLed->ledMask; // turn on the led
-+ else
-+ GPIO->GPIOio |= pLed->ledMask; // turn on the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOn;
-+ }
-+}
-+
-+
-+// turn led off and set the ledState
-+void ledOff(PLED_INFO pLed)
-+{
-+ if( pLed->ledMask )
-+ {
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLow )
-+ GPIO->GPIOio |= pLed->ledMask; // turn off the led
-+ else
-+ GPIO->GPIOio &= ~pLed->ledMask; // turn off the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOff;
-+ }
-+}
-+
-+// turn led on and set the ledState
-+void ledOnFail(PLED_INFO pLed)
-+{
-+ if( pLed->ledMaskFail )
-+ {
-+ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLowFail )
-+ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn on the led
-+ else
-+ GPIO->GPIOio |= pLed->ledMaskFail; // turn on the led
-+ pLed->ledState = pLed->savedLedState = kLedStateFail;
-+ }
-+}
-+
-+
-+// turn led off and set the ledState
-+void ledOffFail(PLED_INFO pLed)
-+{
-+ if( pLed->ledMaskFail )
-+ {
-+ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
-+ if( pLed->ledActiveLowFail )
-+ GPIO->GPIOio |= pLed->ledMaskFail; // turn off the led
-+ else
-+ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn off the led
-+ pLed->ledState = pLed->savedLedState = kLedStateOff;
-+ }
-+}
-+
-+
-+// toggle the led and return the current ledState
-+BOARD_LED_STATE ledToggle(PLED_INFO pLed)
-+{
-+ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
-+ if (GPIO->GPIOio & pLed->ledMask)
-+ {
-+ GPIO->GPIOio &= ~(pLed->ledMask);
-+ return( (pLed->ledActiveLow) ? kLedStateOn : kLedStateOff );
-+ }
-+ else
-+ {
-+ GPIO->GPIOio |= pLed->ledMask;
-+ return( (pLed->ledActiveLow) ? kLedStateOff : kLedStateOn );
-+ }
-+}
-+
-+
-+// led timer. Will return if timer is already on
-+void ledTimerStart(void)
-+{
-+ if (gTimerOn)
-+ return;
-+
-+#if defined(DEBUG_LED)
-+ printk("led: add_timer\n");
-+#endif
-+
-+ init_timer(&gLedTimer);
-+ gLedTimer.function = (void*)ledTimerExpire;
-+ gLedTimer.expires = jiffies + k100ms; // timer expires in ~100ms
-+ add_timer (&gLedTimer);
-+ gTimerOn = TRUE;
-+}
-+
-+
-+// led timer expire kicks in about ~100ms and perform the led operation according to the ledState and
-+// restart the timer according to ledState
-+void ledTimerExpire(void)
-+{
-+ int i;
-+ PLED_INFO pCurLed;
-+
-+ gTimerOn = FALSE;
-+
-+ for (i = 0, pCurLed = gLed; i < gLedCount; i++, pCurLed++)
-+ {
-+#if defined(DEBUG_LED)
-+ printk("led[%d]: Mask=0x%04x, State = %d, blcd=%d\n", i, pCurLed->ledMask, pCurLed->ledState, pCurLed->blinkCountDown);
-+#endif
-+ switch (pCurLed->ledState)
-+ {
-+ case kLedStateOn:
-+ case kLedStateOff:
-+ case kLedStateFail:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ break;
-+
-+ case kLedStateBlinkOnce:
-+ ledToggle(pCurLed);
-+ pCurLed->blinkCountDown = 0; // reset to 0
-+ pCurLed->ledState = pCurLed->savedLedState;
-+ if (pCurLed->ledState == kLedStateSlowBlinkContinues ||
-+ pCurLed->ledState == kLedStateFastBlinkContinues)
-+ ledTimerStart(); // start timer if in blinkContinues stats
-+ break;
-+
-+ case kLedStateSlowBlinkContinues:
-+ if (pCurLed->blinkCountDown-- == 0)
-+ {
-+ pCurLed->blinkCountDown = kSlowBlinkCount;
-+ ledToggle(pCurLed);
-+ }
-+ ledTimerStart();
-+ break;
-+
-+ case kLedStateFastBlinkContinues:
-+ if (pCurLed->blinkCountDown-- == 0)
-+ {
-+ pCurLed->blinkCountDown = kFastBlinkCount;
-+ ledToggle(pCurLed);
-+ }
-+ ledTimerStart();
-+ break;
-+
-+ default:
-+ printk("Invalid state = %d\n", pCurLed->ledState);
-+ }
-+ }
-+}
-+
-+// initialize the gLedCount and allocate and fill gLed struct
-+void __init boardLedInit(PLED_MAP_PAIR cLedMapping)
-+{
-+ PLED_MAP_PAIR p1, p2;
-+ PLED_INFO pCurLed;
-+ int needTimer = FALSE;
-+ int alreadyUsed = 0;
-+
-+#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+ /* Set blink rate for BCM6348/BCM6338 hardware LEDs. */
-+ GPIO->LEDCtrl &= ~LED_INTERVAL_SET_MASK;
-+ GPIO->LEDCtrl |= LED_INTERVAL_SET_80MS;
-+#endif
-+
-+ memset( gpVirtLeds, 0x00, sizeof(gpVirtLeds) );
-+ memset( gLedHwFunc, 0x00, sizeof(gLedHwFunc) );
-+ memset( gLedHwFailFunc, 0x00, sizeof(gLedHwFailFunc) );
-+
-+ gLedCount = 0;
-+
-+ // Check for multiple LED names and multiple LED GPIO pins that share the
-+ // same physical board LED.
-+ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
-+ {
-+ alreadyUsed = 0;
-+ for( p2 = cLedMapping; p2 != p1; p2++ )
-+ {
-+ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
-+ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
-+ {
-+ alreadyUsed = 1;
-+ break;
-+ }
-+ }
-+
-+ if( alreadyUsed == 0 )
-+ gLedCount++;
-+ }
-+
-+ gLed = (PLED_INFO) kmalloc((gLedCount * sizeof(LED_INFO)), GFP_KERNEL);
-+ if( gLed == NULL )
-+ {
-+ printk( "LED memory allocation error.\n" );
-+ return;
-+ }
-+
-+ memset( gLed, 0x00, gLedCount * sizeof(LED_INFO) );
-+
-+ // initial the gLed with unique ledMask and initial state. If more than 1 ledNames share the physical led
-+ // (ledMask) the first defined led's ledInitState will be used.
-+ pCurLed = gLed;
-+ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
-+ {
-+ if( (int) p1->ledName > MAX_VIRT_LEDS )
-+ continue;
-+
-+ alreadyUsed = 0;
-+ for( p2 = cLedMapping; p2 != p1; p2++ )
-+ {
-+ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
-+ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
-+ {
-+ alreadyUsed = 1;
-+ break;
-+ }
-+ }
-+
-+ if( alreadyUsed == 0 )
-+ {
-+ // Initialize the board LED for the first time.
-+ needTimer = initLedInfo( p1, pCurLed );
-+ gpVirtLeds[(int) p1->ledName] = pCurLed;
-+ pCurLed++;
-+ }
-+ else
-+ {
-+ PLED_INFO pLed;
-+ for( pLed = gLed; pLed != pCurLed; pLed++ )
-+ {
-+ // Find the LED_INFO structure that has already been initialized.
-+ if((pLed->ledMask && pLed->ledMask == p1->ledMask) ||
-+ (pLed->ledMaskFail && pLed->ledMaskFail==p1->ledMaskFail))
-+ {
-+ // The board LED has already been initialized but possibly
-+ // not completely initialized.
-+ if( p1->ledMask )
-+ {
-+ pLed->ledMask = p1->ledMask;
-+ pLed->ledActiveLow = p1->ledActiveLow;
-+ }
-+ if( p1->ledMaskFail )
-+ {
-+ pLed->ledMaskFail = p1->ledMaskFail;
-+ pLed->ledActiveLowFail = p1->ledActiveLowFail;
-+ }
-+ gpVirtLeds[(int) p1->ledName] = pLed;
-+ break;
-+ }
-+ }
-+ }
-+ }
-+
-+ if (needTimer)
-+ ledTimerStart();
-+
-+#if defined(DEBUG_LED)
-+ int i;
-+ for (i=0; i < gLedCount; i++)
-+ printk("initLed: led[%d]: mask=0x%04x, state=%d\n", i,(gLed+i)->ledMask, (gLed+i)->ledState);
-+#endif
-+
-+}
-+
-+// Initialize a structure that contains information about a physical board LED
-+// control. The board LED may contain more than one GPIO pin to control a
-+// normal condition (green) or a failure condition (red).
-+int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed )
-+{
-+ int needTimer = FALSE;
-+ pCurLed->ledState = pCurLed->savedLedState = pCurMap->ledInitState;
-+ pCurLed->ledMask = pCurMap->ledMask;
-+ pCurLed->ledActiveLow = pCurMap->ledActiveLow;
-+ pCurLed->ledMaskFail = pCurMap->ledMaskFail;
-+ pCurLed->ledActiveLowFail = pCurMap->ledActiveLowFail;
-+
-+ switch (pCurLed->ledState)
-+ {
-+ case kLedStateOn:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOn(pCurLed);
-+ break;
-+ case kLedStateOff:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOff(pCurLed);
-+ break;
-+ case kLedStateFail:
-+ pCurLed->blinkCountDown = 0; // reset the blink count down
-+ ledOnFail(pCurLed);
-+ break;
-+ case kLedStateBlinkOnce:
-+ pCurLed->blinkCountDown = 1;
-+ needTimer = TRUE;
-+ break;
-+ case kLedStateSlowBlinkContinues:
-+ pCurLed->blinkCountDown = kSlowBlinkCount;
-+ needTimer = TRUE;
-+ break;
-+ case kLedStateFastBlinkContinues:
-+ pCurLed->blinkCountDown = kFastBlinkCount;
-+ needTimer = TRUE;
-+ break;
-+ default:
-+ printk("Invalid state = %d\n", pCurLed->ledState);
-+ }
-+
-+ return( needTimer );
-+}
-+
-+#if 0 /* BROKEN */
-+// Determines if there is at least one interface in bridge mode. Bridge mode
-+// is determined by the cfm convention of naming bridge interfaces nas17
-+// through nas24.
-+static int isBridgedProtocol(void)
-+{
-+ extern int dev_get(const char *name);
-+ const int firstBridgeId = 17;
-+ const int lastBridgeId = 24;
-+ int i;
-+ int ret = FALSE;
-+ char name[16];
-+
-+ for( i = firstBridgeId; i <= lastBridgeId; i++ )
-+ {
-+ sprintf( name, "nas%d", i );
-+
-+ if( dev_get(name) )
-+ {
-+ ret = TRUE;
-+ break;
-+ }
-+ }
-+
-+ return(ret);
-+}
-+#endif
-+
-+// led ctrl. Maps the ledName to the corresponding ledInfoPtr and perform the led operation
-+void boardLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-+{
-+ PLED_INFO ledInfoPtr;
-+
-+ // do the mapping from virtual to physical led
-+ if( (int) ledName < MAX_VIRT_LEDS )
-+ ledInfoPtr = gpVirtLeds[(int) ledName];
-+ else
-+ ledInfoPtr = NULL;
-+
-+ if (ledInfoPtr == NULL)
-+ return;
-+
-+ if( ledState != kLedStateFail && gLedHwFunc[(int) ledName] )
-+ {
-+ (*gLedHwFunc[(int) ledName]) (ledName, ledState);
-+ ledOffFail(ledInfoPtr);
-+ return;
-+ }
-+ else
-+ if( ledState == kLedStateFail && gLedHwFailFunc[(int) ledName] )
-+ {
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, ledState);
-+ ledOff(ledInfoPtr);
-+ return;
-+ }
-+
-+#if 0 /* BROKEN */
-+ // Do not blink the WAN Data LED if at least one interface is in bridge mode.
-+ if(gLedOffInBridgeMode == 1 && (ledName == kLedWanData || ledName == kLedPPP))
-+ {
-+ static int BridgedProtocol = -1;
-+
-+ if( BridgedProtocol == -1 )
-+ BridgedProtocol = isBridgedProtocol();
-+
-+ if( BridgedProtocol == TRUE )
-+ return;
-+ }
-+#endif
-+
-+ // If the state is kLedStateFail and there is not a failure LED defined
-+ // in the board parameters, change the state to kLedStateFastBlinkContinues.
-+ if( ledState == kLedStateFail && ledInfoPtr->ledMaskFail == 0 )
-+ ledState = kLedStateFastBlinkContinues;
-+
-+ switch (ledState)
-+ {
-+ case kLedStateOn:
-+ // First, turn off the complimentary (failure) LED GPIO.
-+ if( ledInfoPtr->ledMaskFail )
-+ ledOffFail(ledInfoPtr);
-+ else
-+ if( gLedHwFailFunc[(int) ledName] )
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn on the specified LED GPIO.
-+ ledOn(ledInfoPtr);
-+ break;
-+
-+ case kLedStateOff:
-+ // First, turn off the complimentary (failure) LED GPIO.
-+ if( ledInfoPtr->ledMaskFail )
-+ ledOffFail(ledInfoPtr);
-+ else
-+ if( gLedHwFailFunc[(int) ledName] )
-+ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn off the specified LED GPIO.
-+ ledOff(ledInfoPtr);
-+ break;
-+
-+ case kLedStateFail:
-+ // First, turn off the complimentary (normal) LED GPIO.
-+ if( ledInfoPtr->ledMask )
-+ ledOff(ledInfoPtr);
-+ else
-+ if( gLedHwFunc[(int) ledName] )
-+ (*gLedHwFunc[(int) ledName]) (ledName, kLedStateOff);
-+
-+ // Next, turn on (red) the specified LED GPIO.
-+ ledOnFail(ledInfoPtr);
-+ break;
-+
-+ case kLedStateBlinkOnce:
-+ // skip blinkOnce if it is already in Slow/Fast blink continues state
-+ if (ledInfoPtr->savedLedState == kLedStateSlowBlinkContinues ||
-+ ledInfoPtr->savedLedState == kLedStateFastBlinkContinues)
-+ ;
-+ else
-+ {
-+ if (ledInfoPtr->blinkCountDown == 0) // skip the call if it is 1
-+ {
-+ ledToggle(ledInfoPtr);
-+ ledInfoPtr->blinkCountDown = 1; // it will be reset to 0 when timer expires
-+ ledInfoPtr->ledState = kLedStateBlinkOnce;
-+ ledTimerStart();
-+ }
-+ }
-+ break;
-+
-+ case kLedStateSlowBlinkContinues:
-+ ledInfoPtr->blinkCountDown = kSlowBlinkCount;
-+ ledInfoPtr->ledState = kLedStateSlowBlinkContinues;
-+ ledInfoPtr->savedLedState = kLedStateSlowBlinkContinues;
-+ ledTimerStart();
-+ break;
-+
-+ case kLedStateFastBlinkContinues:
-+ ledInfoPtr->blinkCountDown = kFastBlinkCount;
-+ ledInfoPtr->ledState = kLedStateFastBlinkContinues;
-+ ledInfoPtr->savedLedState = kLedStateFastBlinkContinues;
-+ ledTimerStart();
-+ break;
-+
-+ default:
-+ printk("Invalid led state\n");
-+ }
-+}
-+
-+// This function is called for an LED that is controlled by hardware.
-+void kerSysLedRegisterHwHandler( BOARD_LED_NAME ledName,
-+ HANDLE_LED_FUNC ledHwFunc, int ledFailType )
-+{
-+ if( (int) ledName < MAX_VIRT_LEDS )
-+ {
-+ if( ledFailType == 1 )
-+ gLedHwFailFunc[(int) ledName] = ledHwFunc;
-+ else
-+ gLedHwFunc[(int) ledName] = ledHwFunc;
-+ }
-+}
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/board.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/board.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/board.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/board.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,1570 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***************************************************************************
-+ * File Name : board.c
-+ *
-+ * Description: This file contains Linux character device driver entry
-+ * for the board related ioctl calls: flash, get free kernel
-+ * page and dump kernel memory, etc.
-+ *
-+ * Created on : 2/20/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
-+ *
-+ ***************************************************************************/
-+
-+
-+/* Includes. */
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/fs.h>
-+#include <linux/interrupt.h>
-+#include <linux/capability.h>
-+#include <linux/slab.h>
-+#include <linux/errno.h>
-+#include <linux/module.h>
-+#include <linux/pagemap.h>
-+#include <asm/uaccess.h>
-+#include <linux/wait.h>
-+#include <linux/poll.h>
-+#include <linux/sched.h>
-+#include <linux/list.h>
-+#include <linux/if.h>
-+
-+#include <bcm_map_part.h>
-+#include <board.h>
-+#include <bcmTag.h>
-+#include "boardparms.h"
-+#include "cfiflash.h"
-+#include "bcm_intr.h"
-+#include "board.h"
-+#include "bcm_map_part.h"
-+
-+/* Typedefs. */
-+#if defined (NON_CONSECUTIVE_MAC)
-+// used to be the last octet. Now changed to the first 5 bits of the the forth octet
-+// to reduced the duplicated MAC addresses.
-+#define CHANGED_OCTET 3
-+#define SHIFT_BITS 3
-+#else
-+#define CHANGED_OCTET 1
-+#define SHIFT_BITS 0
-+#endif
-+
-+#if defined (WIRELESS)
-+#define SES_BTN_PRESSED 0x00000001
-+#define SES_EVENTS SES_BTN_PRESSED /*OR all values if any*/
-+#define SES_LED_OFF 0
-+#define SES_LED_ON 1
-+#define SES_LED_BLINK 2
-+#endif
-+
-+typedef struct
-+{
-+ unsigned long ulId;
-+ char chInUse;
-+ char chReserved[3];
-+} MAC_ADDR_INFO, *PMAC_ADDR_INFO;
-+
-+typedef struct
-+{
-+ unsigned long ulSdramSize;
-+ unsigned long ulPsiSize;
-+ unsigned long ulNumMacAddrs;
-+ unsigned long ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
-+ MAC_ADDR_INFO MacAddrs[1];
-+} NVRAM_INFO, *PNVRAM_INFO;
-+
-+typedef struct
-+{
-+ unsigned long eventmask;
-+} BOARD_IOC, *PBOARD_IOC;
-+
-+
-+/*Dyinggasp callback*/
-+typedef void (*cb_dgasp_t)(void *arg);
-+typedef struct _CB_DGASP__LIST
-+{
-+ struct list_head list;
-+ char name[IFNAMSIZ];
-+ cb_dgasp_t cb_dgasp_fn;
-+ void *context;
-+}CB_DGASP_LIST , *PCB_DGASP_LIST;
-+
-+
-+static LED_MAP_PAIR LedMapping[] =
-+{ // led name Initial state physical pin (ledMask)
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
-+ {kLedEnd, kLedStateOff, 0, 0, 0, 0} // NOTE: kLedEnd has to be at the end.
-+};
-+
-+/* Externs. */
-+extern struct file fastcall *fget_light(unsigned int fd, int *fput_needed);
-+extern unsigned int nr_free_pages (void);
-+extern const char *get_system_type(void);
-+extern void kerSysFlashInit(void);
-+extern unsigned long get_nvram_start_addr(void);
-+extern unsigned long get_scratch_pad_start_addr(void);
-+extern unsigned long getMemorySize(void);
-+extern void __init boardLedInit(PLED_MAP_PAIR);
-+extern void boardLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
-+extern void kerSysLedRegisterHandler( BOARD_LED_NAME ledName,
-+ HANDLE_LED_FUNC ledHwFunc, int ledFailType );
-+
-+/* Prototypes. */
-+void __init InitNvramInfo( void );
-+static int board_open( struct inode *inode, struct file *filp );
-+static int board_ioctl( struct inode *inode, struct file *flip, unsigned int command, unsigned long arg );
-+static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos);
-+static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait);
-+static int board_release(struct inode *inode, struct file *filp);
-+
-+static BOARD_IOC* borad_ioc_alloc(void);
-+static void borad_ioc_free(BOARD_IOC* board_ioc);
-+
-+/* DyingGasp function prototype */
-+static void __init kerSysDyingGaspMapIntr(void);
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs);
-+#else
-+static unsigned int kerSysDyingGaspIsr(void);
-+#endif
-+static void __init kerSysInitDyingGaspHandler( void );
-+static void __exit kerSysDeinitDyingGaspHandler( void );
-+/* -DyingGasp function prototype - */
-+
-+
-+#if defined (WIRELESS)
-+static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs);
-+static void __init sesBtn_mapGpio(void);
-+static void __init sesBtn_mapIntr(int context);
-+static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait);
-+static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos);
-+static void __init sesLed_mapGpio(void);
-+static void sesLed_ctrl(int action);
-+static void __init ses_board_init(void);
-+static void __exit ses_board_deinit(void);
-+#endif
-+
-+static PNVRAM_INFO g_pNvramInfo = NULL;
-+static int g_ledInitialized = 0;
-+static wait_queue_head_t g_board_wait_queue;
-+static CB_DGASP_LIST *g_cb_dgasp_list_head = NULL;
-+
-+static int g_wakeup_monitor = 0;
-+static struct file *g_monitor_file = NULL;
-+static struct task_struct *g_monitor_task = NULL;
-+static unsigned int (*g_orig_fop_poll)
-+ (struct file *, struct poll_table_struct *) = NULL;
-+
-+static struct file_operations board_fops =
-+{
-+ open: board_open,
-+ ioctl: board_ioctl,
-+ poll: board_poll,
-+ read: board_read,
-+ release: board_release,
-+};
-+
-+uint32 board_major = 0;
-+
-+#if defined (WIRELESS)
-+static unsigned short sesBtn_irq = BP_NOT_DEFINED;
-+static unsigned short sesBtn_gpio = BP_NOT_DEFINED;
-+static unsigned short sesLed_gpio = BP_NOT_DEFINED;
-+#endif
-+
-+#if defined(MODULE)
-+int init_module(void)
-+{
-+ return( brcm_board_init() );
-+}
-+
-+void cleanup_module(void)
-+{
-+ if (MOD_IN_USE)
-+ printk("brcm flash: cleanup_module failed because module is in use\n");
-+ else
-+ brcm_board_cleanup();
-+}
-+#endif //MODULE
-+
-+
-+
-+static int __init brcm_board_init( void )
-+{
-+ typedef int (*BP_LED_FUNC) (unsigned short *);
-+ static struct BpLedInformation
-+ {
-+ BOARD_LED_NAME ledName;
-+ BP_LED_FUNC bpFunc;
-+ BP_LED_FUNC bpFuncFail;
-+ } bpLedInfo[] =
-+ {{kLedAdsl, BpGetAdslLedGpio, BpGetAdslFailLedGpio},
-+ {kLedWireless, BpGetWirelessLedGpio, NULL},
-+ {kLedUsb, BpGetUsbLedGpio, NULL},
-+ {kLedHpna, BpGetHpnaLedGpio, NULL},
-+ {kLedWanData, BpGetWanDataLedGpio, NULL},
-+ {kLedPPP, BpGetPppLedGpio, BpGetPppFailLedGpio},
-+ {kLedVoip, BpGetVoipLedGpio, NULL},
-+ {kLedSes, BpGetWirelessSesLedGpio, NULL},
-+ {kLedEnd, NULL, NULL}
-+ };
-+
-+ int ret;
-+
-+ ret = register_chrdev(BOARD_DRV_MAJOR, "bcrmboard", &board_fops );
-+ if (ret < 0)
-+ printk( "brcm_board_init(major %d): fail to register device.\n",BOARD_DRV_MAJOR);
-+ else
-+ {
-+ PLED_MAP_PAIR pLedMap = LedMapping;
-+ unsigned short gpio;
-+ struct BpLedInformation *pInfo;
-+
-+ printk("brcmboard: brcm_board_init entry\n");
-+ board_major = BOARD_DRV_MAJOR;
-+ InitNvramInfo();
-+
-+ for( pInfo = bpLedInfo; pInfo->ledName != kLedEnd; pInfo++ )
-+ {
-+ if( pInfo->bpFunc && (*pInfo->bpFunc) (&gpio) == BP_SUCCESS )
-+ {
-+ pLedMap->ledName = pInfo->ledName;
-+ pLedMap->ledMask = GPIO_NUM_TO_MASK(gpio);
-+ pLedMap->ledActiveLow = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
-+ }
-+ if( pInfo->bpFuncFail && (*pInfo->bpFuncFail) (&gpio) == BP_SUCCESS )
-+ {
-+ pLedMap->ledName = pInfo->ledName;
-+ pLedMap->ledMaskFail = GPIO_NUM_TO_MASK(gpio);
-+ pLedMap->ledActiveLowFail = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
-+ }
-+ if( pLedMap->ledName != kLedEnd )
-+ pLedMap++;
-+ }
-+
-+ init_waitqueue_head(&g_board_wait_queue);
-+#if defined (WIRELESS)
-+ ses_board_init();
-+#endif
-+ kerSysInitDyingGaspHandler();
-+ kerSysDyingGaspMapIntr();
-+
-+ boardLedInit(LedMapping);
-+ g_ledInitialized = 1;
-+ }
-+
-+ return ret;
-+}
-+
-+void __init InitNvramInfo( void )
-+{
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+ unsigned long ulNumMacAddrs = pNvramData->ulNumMacAddrs;
-+
-+ if( ulNumMacAddrs > 0 && ulNumMacAddrs <= NVRAM_MAC_COUNT_MAX )
-+ {
-+ unsigned long ulNvramInfoSize =
-+ sizeof(NVRAM_INFO) + ((sizeof(MAC_ADDR_INFO) - 1) * ulNumMacAddrs);
-+
-+ g_pNvramInfo = (PNVRAM_INFO) kmalloc( ulNvramInfoSize, GFP_KERNEL );
-+
-+ if( g_pNvramInfo )
-+ {
-+ unsigned long ulPsiSize;
-+ if( BpGetPsiSize( &ulPsiSize ) != BP_SUCCESS )
-+ ulPsiSize = NVRAM_PSI_DEFAULT;
-+ memset( g_pNvramInfo, 0x00, ulNvramInfoSize );
-+ g_pNvramInfo->ulPsiSize = ulPsiSize * 1024;
-+ g_pNvramInfo->ulNumMacAddrs = pNvramData->ulNumMacAddrs;
-+ memcpy( g_pNvramInfo->ucaBaseMacAddr, pNvramData->ucaBaseMacAddr,
-+ NVRAM_MAC_ADDRESS_LEN );
-+ g_pNvramInfo->ulSdramSize = getMemorySize();
-+ }
-+ else
-+ printk("ERROR - Could not allocate memory for NVRAM data\n");
-+ }
-+ else
-+ printk("ERROR - Invalid number of MAC addresses (%ld) is configured.\n",
-+ ulNumMacAddrs);
-+}
-+
-+void __exit brcm_board_cleanup( void )
-+{
-+ printk("brcm_board_cleanup()\n");
-+
-+ if (board_major != -1)
-+ {
-+#if defined (WIRELESS)
-+ ses_board_deinit();
-+#endif
-+ kerSysDeinitDyingGaspHandler();
-+ unregister_chrdev(board_major, "board_ioctl");
-+ }
-+}
-+
-+static BOARD_IOC* borad_ioc_alloc(void)
-+{
-+ BOARD_IOC *board_ioc =NULL;
-+ board_ioc = (BOARD_IOC*) kmalloc( sizeof(BOARD_IOC) , GFP_KERNEL );
-+ if(board_ioc)
-+ {
-+ memset(board_ioc, 0, sizeof(BOARD_IOC));
-+ }
-+ return board_ioc;
-+}
-+
-+static void borad_ioc_free(BOARD_IOC* board_ioc)
-+{
-+ if(board_ioc)
-+ {
-+ kfree(board_ioc);
-+ }
-+}
-+
-+
-+static int board_open( struct inode *inode, struct file *filp )
-+{
-+ filp->private_data = borad_ioc_alloc();
-+
-+ if (filp->private_data == NULL)
-+ return -ENOMEM;
-+
-+ return( 0 );
-+}
-+
-+static int board_release(struct inode *inode, struct file *filp)
-+{
-+ BOARD_IOC *board_ioc = filp->private_data;
-+
-+ wait_event_interruptible(g_board_wait_queue, 1);
-+ borad_ioc_free(board_ioc);
-+
-+ return( 0 );
-+}
-+
-+
-+static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait)
-+{
-+ unsigned int mask = 0;
-+#if defined (WIRELESS)
-+ BOARD_IOC *board_ioc = filp->private_data;
-+#endif
-+
-+ poll_wait(filp, &g_board_wait_queue, wait);
-+#if defined (WIRELESS)
-+ if(board_ioc->eventmask & SES_EVENTS){
-+ mask |= sesBtn_poll(filp, wait);
-+ }
-+#endif
-+
-+ return mask;
-+}
-+
-+
-+static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)
-+{
-+#if defined (WIRELESS)
-+ BOARD_IOC *board_ioc = filp->private_data;
-+ if(board_ioc->eventmask & SES_EVENTS){
-+ return sesBtn_read(filp, buffer, count, ppos);
-+ }
-+#endif
-+ return 0;
-+}
-+
-+//**************************************************************************************
-+// Utitlities for dump memory, free kernel pages, mips soft reset, etc.
-+//**************************************************************************************
-+
-+/***********************************************************************
-+ * Function Name: dumpaddr
-+ * Description : Display a hex dump of the specified address.
-+ ***********************************************************************/
-+void dumpaddr( unsigned char *pAddr, int nLen )
-+{
-+ static char szHexChars[] = "0123456789abcdef";
-+ char szLine[80];
-+ char *p = szLine;
-+ unsigned char ch, *q;
-+ int i, j;
-+ unsigned long ul;
-+
-+ while( nLen > 0 )
-+ {
-+ sprintf( szLine, "%8.8lx: ", (unsigned long) pAddr );
-+ p = szLine + strlen(szLine);
-+
-+ for(i = 0; i < 16 && nLen > 0; i += sizeof(long), nLen -= sizeof(long))
-+ {
-+ ul = *(unsigned long *) &pAddr[i];
-+ q = (unsigned char *) &ul;
-+ for( j = 0; j < sizeof(long); j++ )
-+ {
-+ *p++ = szHexChars[q[j] >> 4];
-+ *p++ = szHexChars[q[j] & 0x0f];
-+ *p++ = ' ';
-+ }
-+ }
-+
-+ for( j = 0; j < 16 - i; j++ )
-+ *p++ = ' ', *p++ = ' ', *p++ = ' ';
-+
-+ *p++ = ' ', *p++ = ' ', *p++ = ' ';
-+
-+ for( j = 0; j < i; j++ )
-+ {
-+ ch = pAddr[j];
-+ *p++ = (ch > ' ' && ch < '~') ? ch : '.';
-+ }
-+
-+ *p++ = '\0';
-+ printk( "%s\r\n", szLine );
-+
-+ pAddr += i;
-+ }
-+ printk( "\r\n" );
-+} /* dumpaddr */
-+
-+
-+void kerSysMipsSoftReset(void)
-+{
-+#if defined(CONFIG_BCM96348)
-+ if (PERF->RevID == 0x634800A1) {
-+ typedef void (*FNPTR) (void);
-+ FNPTR bootaddr = (FNPTR) FLASH_BASE;
-+ int i;
-+
-+ /* Disable interrupts. */
-+ cli();
-+
-+ /* Reset all blocks. */
-+ PERF->BlockSoftReset &= ~BSR_ALL_BLOCKS;
-+ for( i = 0; i < 1000000; i++ )
-+ ;
-+ PERF->BlockSoftReset |= BSR_ALL_BLOCKS;
-+ /* Jump to the power on address. */
-+ (*bootaddr) ();
-+ }
-+ else
-+ PERF->pll_control |= SOFT_RESET; // soft reset mips
-+#else
-+ PERF->pll_control |= SOFT_RESET; // soft reset mips
-+#endif
-+}
-+
-+
-+int kerSysGetMacAddress( unsigned char *pucaMacAddr, unsigned long ulId )
-+{
-+ int nRet = 0;
-+ PMAC_ADDR_INFO pMai = NULL;
-+ PMAC_ADDR_INFO pMaiFreeNoId = NULL;
-+ PMAC_ADDR_INFO pMaiFreeId = NULL;
-+ unsigned long i = 0, ulIdxNoId = 0, ulIdxId = 0, shiftedIdx = 0;
-+
-+ for( i = 0, pMai = g_pNvramInfo->MacAddrs; i < g_pNvramInfo->ulNumMacAddrs;
-+ i++, pMai++ )
-+ {
-+ if( ulId == pMai->ulId || ulId == MAC_ADDRESS_ANY )
-+ {
-+ /* This MAC address has been used by the caller in the past. */
-+ memcpy( pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,
-+ NVRAM_MAC_ADDRESS_LEN );
-+ shiftedIdx = i;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMai->chInUse = 1;
-+ pMaiFreeNoId = pMaiFreeId = NULL;
-+ break;
-+ }
-+ else
-+ if( pMai->chInUse == 0 )
-+ {
-+ if( pMai->ulId == 0 && pMaiFreeNoId == NULL )
-+ {
-+ /* This is an available MAC address that has never been
-+ * used.
-+ */
-+ pMaiFreeNoId = pMai;
-+ ulIdxNoId = i;
-+ }
-+ else
-+ if( pMai->ulId != 0 && pMaiFreeId == NULL )
-+ {
-+ /* This is an available MAC address that has been used
-+ * before. Use addresses that have never been used
-+ * first, before using this one.
-+ */
-+ pMaiFreeId = pMai;
-+ ulIdxId = i;
-+ }
-+ }
-+ }
-+
-+ if( pMaiFreeNoId || pMaiFreeId )
-+ {
-+ /* An available MAC address was found. */
-+ memcpy(pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,NVRAM_MAC_ADDRESS_LEN);
-+ if( pMaiFreeNoId )
-+ {
-+ shiftedIdx = ulIdxNoId;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMaiFreeNoId->ulId = ulId;
-+ pMaiFreeNoId->chInUse = 1;
-+ }
-+ else
-+ {
-+ shiftedIdx = ulIdxId;
-+ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
-+ pMaiFreeId->ulId = ulId;
-+ pMaiFreeId->chInUse = 1;
-+ }
-+ }
-+ else
-+ if( i == g_pNvramInfo->ulNumMacAddrs )
-+ nRet = -EADDRNOTAVAIL;
-+
-+ return( nRet );
-+} /* kerSysGetMacAddr */
-+
-+int kerSysReleaseMacAddress( unsigned char *pucaMacAddr )
-+{
-+ int nRet = -EINVAL;
-+ unsigned long ulIdx = 0;
-+ int idx = (pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] -
-+ g_pNvramInfo->ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET]);
-+
-+ // if overflow 255 (negitive), add 256 to have the correct index
-+ if (idx < 0)
-+ idx += 256;
-+ ulIdx = (unsigned long) (idx >> SHIFT_BITS);
-+
-+ if( ulIdx < g_pNvramInfo->ulNumMacAddrs )
-+ {
-+ PMAC_ADDR_INFO pMai = &g_pNvramInfo->MacAddrs[ulIdx];
-+ if( pMai->chInUse == 1 )
-+ {
-+ pMai->chInUse = 0;
-+ nRet = 0;
-+ }
-+ }
-+
-+ return( nRet );
-+} /* kerSysReleaseMacAddr */
-+
-+int kerSysGetSdramSize( void )
-+{
-+ return( (int) g_pNvramInfo->ulSdramSize );
-+} /* kerSysGetSdramSize */
-+
-+
-+void kerSysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
-+{
-+ if (g_ledInitialized)
-+ boardLedCtrl(ledName, ledState);
-+}
-+
-+unsigned int kerSysMonitorPollHook( struct file *f, struct poll_table_struct *t)
-+{
-+ int mask = (*g_orig_fop_poll) (f, t);
-+
-+ if( g_wakeup_monitor == 1 && g_monitor_file == f )
-+ {
-+ /* If g_wakeup_monitor is non-0, the user mode application needs to
-+ * return from a blocking select function. Return POLLPRI which will
-+ * cause the select to return with the exception descriptor set.
-+ */
-+ mask |= POLLPRI;
-+ g_wakeup_monitor = 0;
-+ }
-+
-+ return( mask );
-+}
-+
-+/* Put the user mode application that monitors link state on a run queue. */
-+void kerSysWakeupMonitorTask( void )
-+{
-+ g_wakeup_monitor = 1;
-+ if( g_monitor_task )
-+ wake_up_process( g_monitor_task );
-+}
-+
-+//********************************************************************************************
-+// misc. ioctl calls come to here. (flash, led, reset, kernel memory access, etc.)
-+//********************************************************************************************
-+static int board_ioctl( struct inode *inode, struct file *flip,
-+ unsigned int command, unsigned long arg )
-+{
-+ int ret = 0;
-+ BOARD_IOCTL_PARMS ctrlParms;
-+ unsigned char ucaMacAddr[NVRAM_MAC_ADDRESS_LEN];
-+ int allowedSize;
-+
-+ switch (command)
-+ {
-+ case BOARD_IOCTL_FLASH_INIT:
-+ // not used for now. kerSysBcmImageInit();
-+ break;
-+
-+
-+ case BOARD_IOCTL_FLASH_WRITE:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ NVRAM_DATA SaveNvramData;
-+ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
-+
-+ switch (ctrlParms.action)
-+ {
-+ case SCRATCH_PAD:
-+ ret = kerSysScratchPadSet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
-+ break;
-+
-+ case PERSISTENT:
-+ ret = kerSysPersistentSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case NVRAM:
-+ ret = kerSysNvRamSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case BCM_IMAGE_CFE:
-+ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > FLASH45_LENGTH_BOOT_ROM )
-+ {
-+ printk("Illegal CFE size [%d]. Size allowed: [%d]\n",
-+ ctrlParms.strLen, FLASH45_LENGTH_BOOT_ROM);
-+ ret = -1;
-+ break;
-+ }
-+
-+ // save NVRAM data into a local structure
-+ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
-+
-+ // set memory type field
-+ BpGetSdramSize( (unsigned long *) &ctrlParms.string[SDRAM_TYPE_ADDRESS_OFFSET] );
-+
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+
-+ // if nvram is not valid, restore the current nvram settings
-+ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
-+ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
-+ {
-+ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
-+ }
-+ break;
-+
-+ case BCM_IMAGE_FS:
-+ allowedSize = (int) flash_get_total_size() - \
-+ FLASH_RESERVED_AT_END - TAG_LEN - FLASH45_LENGTH_BOOT_ROM;
-+ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > allowedSize)
-+ {
-+ printk("Illegal root file system size [%d]. Size allowed: [%d]\n",
-+ ctrlParms.strLen, allowedSize);
-+ ret = -1;
-+ break;
-+ }
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ case BCM_IMAGE_KERNEL: // not used for now.
-+ break;
-+ case BCM_IMAGE_WHOLE:
-+ if(ctrlParms.strLen <= 0)
-+ {
-+ printk("Illegal flash image size [%d].\n", ctrlParms.strLen);
-+ ret = -1;
-+ break;
-+ }
-+
-+ // save NVRAM data into a local structure
-+ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
-+
-+ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
-+
-+ // if nvram is not valid, restore the current nvram settings
-+ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
-+ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
-+ {
-+ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
-+ }
-+
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ printk("flash_ioctl_command: invalid command %d\n", ctrlParms.action);
-+ break;
-+ }
-+ ctrlParms.result = ret;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_FLASH_READ:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ switch (ctrlParms.action)
-+ {
-+ case SCRATCH_PAD:
-+ ret = kerSysScratchPadGet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
-+ break;
-+
-+ case PERSISTENT:
-+ ret = kerSysPersistentGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case NVRAM:
-+ ret = kerSysNvRamGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
-+ break;
-+
-+ case FLASH_SIZE:
-+ ret = kerSysFlashSizeGet();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ printk("Not supported. invalid command %d\n", ctrlParms.action);
-+ break;
-+ }
-+ ctrlParms.result = ret;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_NR_PAGES:
-+ ctrlParms.result = nr_free_pages() + get_page_cache_size();
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_DUMP_ADDR:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ dumpaddr( (unsigned char *) ctrlParms.string, ctrlParms.strLen );
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_SET_MEMORY:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ unsigned long *pul = (unsigned long *) ctrlParms.string;
-+ unsigned short *pus = (unsigned short *) ctrlParms.string;
-+ unsigned char *puc = (unsigned char *) ctrlParms.string;
-+ switch( ctrlParms.strLen )
-+ {
-+ case 4:
-+ *pul = (unsigned long) ctrlParms.offset;
-+ break;
-+ case 2:
-+ *pus = (unsigned short) ctrlParms.offset;
-+ break;
-+ case 1:
-+ *puc = (unsigned char) ctrlParms.offset;
-+ break;
-+ }
-+ dumpaddr( (unsigned char *) ctrlParms.string, sizeof(long) );
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_MIPS_SOFT_RESET:
-+ kerSysMipsSoftReset();
-+ break;
-+
-+ case BOARD_IOCTL_LED_CTRL:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ kerSysLedCtrl((BOARD_LED_NAME)ctrlParms.strLen, (BOARD_LED_STATE)ctrlParms.offset);
-+ ret = 0;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_ID:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg,
-+ sizeof(ctrlParms)) == 0)
-+ {
-+ if( ctrlParms.string )
-+ {
-+ char *p = (char *) get_system_type();
-+ if( strlen(p) + 1 < ctrlParms.strLen )
-+ ctrlParms.strLen = strlen(p) + 1;
-+ __copy_to_user(ctrlParms.string, p, ctrlParms.strLen);
-+ }
-+
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ ctrlParms.result = kerSysGetMacAddress( ucaMacAddr,
-+ ctrlParms.offset );
-+
-+ if( ctrlParms.result == 0 )
-+ {
-+ __copy_to_user(ctrlParms.string, ucaMacAddr,
-+ sizeof(ucaMacAddr));
-+ }
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_RELEASE_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ if (copy_from_user((void*)ucaMacAddr, (void*)ctrlParms.string, \
-+ NVRAM_MAC_ADDRESS_LEN) == 0)
-+ {
-+ ctrlParms.result = kerSysReleaseMacAddress( ucaMacAddr );
-+ }
-+ else
-+ {
-+ ctrlParms.result = -EACCES;
-+ }
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_PSI_SIZE:
-+ ctrlParms.result = (int) g_pNvramInfo->ulPsiSize;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_SDRAM_SIZE:
-+ ctrlParms.result = (int) g_pNvramInfo->ulSdramSize;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_BASE_MAC_ADDRESS:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
-+ {
-+ __copy_to_user(ctrlParms.string, g_pNvramInfo->ucaBaseMacAddr, NVRAM_MAC_ADDRESS_LEN);
-+ ctrlParms.result = 0;
-+
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
-+ sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else
-+ ret = -EFAULT;
-+ break;
-+
-+ case BOARD_IOCTL_GET_CHIP_ID:
-+ ctrlParms.result = (int) (PERF->RevID & 0xFFFF0000) >> 16;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ break;
-+
-+ case BOARD_IOCTL_GET_NUM_ENET: {
-+ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
-+ int i, numeth = 0;
-+ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
-+ for( i = 0; i < BP_MAX_ENET_MACS; i++) {
-+ if (EnetInfos[i].ucPhyType != BP_ENET_NO_PHY) {
-+ numeth++;
-+ }
-+ }
-+ ctrlParms.result = numeth;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+
-+ case BOARD_IOCTL_GET_CFE_VER:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ char *vertag = (char *)(FLASH_BASE + CFE_VERSION_OFFSET);
-+ if (ctrlParms.strLen < CFE_VERSION_SIZE) {
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = -EFAULT;
-+ }
-+ else if (strncmp(vertag, "cfe-v", 5)) { // no tag info in flash
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ else {
-+ ctrlParms.result = 1;
-+ __copy_to_user(ctrlParms.string, vertag+CFE_VERSION_MARK_SIZE, CFE_VERSION_SIZE);
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ }
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_ENET_CFG:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
-+ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
-+ if (ctrlParms.strLen == sizeof(EnetInfos)) {
-+ __copy_to_user(ctrlParms.string, EnetInfos, sizeof(EnetInfos));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+#if defined (WIRELESS)
-+ case BOARD_IOCTL_GET_WLAN_ANT_INUSE:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ unsigned short antInUse = 0;
-+ if (BpGetWirelessAntInUse(&antInUse) == BP_SUCCESS) {
-+ if (ctrlParms.strLen == sizeof(antInUse)) {
-+ __copy_to_user(ctrlParms.string, &antInUse, sizeof(antInUse));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#endif
-+ case BOARD_IOCTL_SET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ ctrlParms.result = -EFAULT;
-+ ret = -EFAULT;
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ board_ioc->eventmask |= *((int*)ctrlParms.string);
-+#if defined (WIRELESS)
-+ if((board_ioc->eventmask & SES_EVENTS)) {
-+ if(sesBtn_irq != BP_NOT_DEFINED) {
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ ctrlParms.result = 0;
-+ ret = 0;
-+ }
-+ }
-+#endif
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ }
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_GET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ __copy_to_user(ctrlParms.string, &board_ioc->eventmask, sizeof(unsigned long));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_UNSET_TRIGGER_EVENT:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ if (ctrlParms.strLen == sizeof(unsigned long)) {
-+ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
-+ board_ioc->eventmask &= (~(*((int*)ctrlParms.string)));
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#if defined (WIRELESS)
-+ case BOARD_IOCTL_SET_SES_LED:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ if (ctrlParms.strLen == sizeof(int)) {
-+ sesLed_ctrl(*(int*)ctrlParms.string);
-+ ctrlParms.result = 0;
-+ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
-+ ret = 0;
-+ } else
-+ ret = -EFAULT;
-+
-+ break;
-+ }
-+ else {
-+ ret = -EFAULT;
-+ }
-+ break;
-+#endif
-+
-+ case BOARD_IOCTL_SET_MONITOR_FD:
-+ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
-+ int fput_needed = 0;
-+
-+ g_monitor_file = fget_light( ctrlParms.offset, &fput_needed );
-+ if( g_monitor_file ) {
-+ /* Hook this file descriptor's poll function in order to set
-+ * the exception descriptor when there is a change in link
-+ * state.
-+ */
-+ g_monitor_task = current;
-+ g_orig_fop_poll = g_monitor_file->f_op->poll;
-+ g_monitor_file->f_op->poll = kerSysMonitorPollHook;
-+ }
-+ }
-+ break;
-+
-+ case BOARD_IOCTL_WAKEUP_MONITOR_TASK:
-+ kerSysWakeupMonitorTask();
-+ break;
-+
-+ default:
-+ ret = -EINVAL;
-+ ctrlParms.result = 0;
-+ printk("board_ioctl: invalid command %x, cmd %d .\n",command,_IOC_NR(command));
-+ break;
-+
-+ } /* switch */
-+
-+ return (ret);
-+
-+} /* board_ioctl */
-+
-+/***************************************************************************
-+ * SES Button ISR/GPIO/LED functions.
-+ ***************************************************************************/
-+#if defined (WIRELESS)
-+static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs)
-+{
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if (!(*gpio_reg & gpio_mask)){
-+ wake_up_interruptible(&g_board_wait_queue);
-+ return IRQ_RETVAL(1);
-+ } else {
-+ return IRQ_RETVAL(0);
-+ }
-+}
-+
-+static void __init sesBtn_mapGpio()
-+{
-+ if( BpGetWirelessSesBtnGpio(&sesBtn_gpio) == BP_SUCCESS )
-+ {
-+ printk("SES: Button GPIO 0x%x is enabled\n", sesBtn_gpio);
-+ }
-+}
-+
-+static void __init sesBtn_mapIntr(int context)
-+{
-+ if( BpGetWirelessSesExtIntr(&sesBtn_irq) == BP_SUCCESS )
-+ {
-+ printk("SES: Button Interrupt 0x%x is enabled\n", sesBtn_irq);
-+ }
-+ else
-+ return;
-+
-+ sesBtn_irq += INTERRUPT_ID_EXTERNAL_0;
-+
-+ if (BcmHalMapInterrupt((FN_HANDLER)sesBtn_isr, context, sesBtn_irq)) {
-+ printk("SES: Interrupt mapping failed\n");
-+ }
-+ BcmHalInterruptEnable(sesBtn_irq);
-+}
-+
-+
-+static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait)
-+{
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if (!(*gpio_reg & gpio_mask)){
-+ return POLLIN;
-+ }
-+ return 0;
-+}
-+
-+static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
-+{
-+ volatile unsigned int event=0;
-+ ssize_t ret=0;
-+
-+#if defined(_BCM96338_) || defined (CONFIG_BCM96338)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96345_) || defined (CONFIG_BCM96345)
-+ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
-+#endif
-+#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
-+ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
-+ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
-+
-+ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
-+ {
-+ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
-+ gpio_reg = &GPIO->GPIOio_high;
-+ }
-+#endif
-+
-+ if(*gpio_reg & gpio_mask){
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ return ret;
-+ }
-+ event = SES_EVENTS;
-+ __copy_to_user((char*)buffer, (char*)&event, sizeof(event));
-+ BcmHalInterruptEnable(sesBtn_irq);
-+ count -= sizeof(event);
-+ buffer += sizeof(event);
-+ ret += sizeof(event);
-+ return ret;
-+}
-+
-+static void __init sesLed_mapGpio()
-+{
-+ if( BpGetWirelessSesBtnGpio(&sesLed_gpio) == BP_SUCCESS )
-+ {
-+ printk("SES: LED GPIO 0x%x is enabled\n", sesBtn_gpio);
-+ }
-+}
-+
-+static void sesLed_ctrl(int action)
-+{
-+
-+ //char status = ((action >> 8) & 0xff); /* extract status */
-+ //char event = ((action >> 16) & 0xff); /* extract event */
-+ //char blinktype = ((action >> 24) & 0xff); /* extract blink type for SES_LED_BLINK */
-+
-+ BOARD_LED_STATE led;
-+
-+ if(sesLed_gpio == BP_NOT_DEFINED)
-+ return;
-+
-+ action &= 0xff; /* extract led */
-+
-+ //printk("blinktype=%d, event=%d, status=%d\n",(int)blinktype, (int)event, (int)status);
-+
-+ switch (action)
-+ {
-+ case SES_LED_ON:
-+ //printk("SES: led on\n");
-+ led = kLedStateOn;
-+ break;
-+ case SES_LED_BLINK:
-+ //printk("SES: led blink\n");
-+ led = kLedStateSlowBlinkContinues;
-+ break;
-+ case SES_LED_OFF:
-+ default:
-+ //printk("SES: led off\n");
-+ led = kLedStateOff;
-+ }
-+
-+ kerSysLedCtrl(kLedSes, led);
-+}
-+
-+static void __init ses_board_init()
-+{
-+ sesBtn_mapGpio();
-+ sesBtn_mapIntr(0);
-+ sesLed_mapGpio();
-+}
-+static void __exit ses_board_deinit()
-+{
-+ if(sesBtn_irq)
-+ BcmHalInterruptDisable(sesBtn_irq);
-+}
-+#endif
-+
-+/***************************************************************************
-+ * Dying gasp ISR and functions.
-+ ***************************************************************************/
-+#define KERSYS_DBG printk
-+
-+#if defined(CONFIG_BCM96345)
-+#define CYCLE_PER_US 70
-+#elif defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
-+/* The BCM6348 cycles per microsecond is really variable since the BCM6348
-+ * MIPS speed can vary depending on the PLL settings. However, an appoximate
-+ * value of 120 will still work OK for the test being done.
-+ */
-+#define CYCLE_PER_US 120
-+#endif
-+#define DG_GLITCH_TO (100*CYCLE_PER_US)
-+
-+static void __init kerSysDyingGaspMapIntr()
-+{
-+ unsigned long ulIntr;
-+
-+#if defined(CONFIG_BCM96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(_BCM96338_)
-+ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
-+ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, INTERRUPT_ID_DG);
-+ BcmHalInterruptEnable( INTERRUPT_ID_DG );
-+ }
-+#elif defined(CONFIG_BCM96345) || defined(_BCM96345_)
-+ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
-+ ulIntr += INTERRUPT_ID_EXTERNAL_0;
-+ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, ulIntr);
-+ BcmHalInterruptEnable( ulIntr );
-+ }
-+#endif
-+
-+}
-+
-+void kerSysSetWdTimer(ulong timeUs)
-+{
-+ TIMER->WatchDogDefCount = timeUs * (FPERIPH/1000000);
-+ TIMER->WatchDogCtl = 0xFF00;
-+ TIMER->WatchDogCtl = 0x00FF;
-+}
-+
-+ulong kerSysGetCycleCount(void)
-+{
-+ ulong cnt;
-+#ifdef _WIN32_WCE
-+ cnt = 0;
-+#else
-+ __asm volatile("mfc0 %0, $9":"=d"(cnt));
-+#endif
-+ return(cnt);
-+}
-+
-+static Bool kerSysDyingGaspCheckPowerLoss(void)
-+{
-+ ulong clk0;
-+ ulong ulIntr;
-+
-+ ulIntr = 0;
-+ clk0 = kerSysGetCycleCount();
-+
-+ UART->Data = 'D';
-+ UART->Data = '%';
-+ UART->Data = 'G';
-+
-+#if defined(CONFIG_BCM96345)
-+ BpGetAdslDyingGaspExtIntr( &ulIntr );
-+
-+ do {
-+ ulong clk1;
-+
-+ clk1 = kerSysGetCycleCount(); /* time cleared */
-+ /* wait a little to get new reading */
-+ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
-+ ;
-+ } while ((0 == (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT)))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
-+
-+ if (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT))) { /* power glitch */
-+ BcmHalInterruptEnable( ulIntr + INTERRUPT_ID_EXTERNAL_0);
-+ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
-+ return 0;
-+ }
-+#elif (defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)) && !defined(VXWORKS)
-+ do {
-+ ulong clk1;
-+
-+ clk1 = kerSysGetCycleCount(); /* time cleared */
-+ /* wait a little to get new reading */
-+ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
-+ ;
-+ } while ((PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
-+
-+ if (!(PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET)))) {
-+ BcmHalInterruptEnable( INTERRUPT_ID_DG );
-+ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
-+ return 0;
-+ }
-+#endif
-+ return 1;
-+}
-+
-+static void kerSysDyingGaspShutdown( void )
-+{
-+ kerSysSetWdTimer(1000000);
-+#if defined(CONFIG_BCM96345)
-+ PERF->blkEnables &= ~(EMAC_CLK_EN | USB_CLK_EN | CPU_CLK_EN);
-+#elif defined(CONFIG_BCM96348)
-+ PERF->blkEnables &= ~(EMAC_CLK_EN | USBS_CLK_EN | USBH_CLK_EN | SAR_CLK_EN);
-+#endif
-+}
-+
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs)
-+#else
-+static unsigned int kerSysDyingGaspIsr(void)
-+#endif
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp, *dsl = NULL;
-+
-+ if (kerSysDyingGaspCheckPowerLoss()) {
-+
-+ /* first to turn off everything other than dsl */
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ if(strncmp(tmp->name, "dsl", 3)) {
-+ (tmp->cb_dgasp_fn)(tmp->context);
-+ }else {
-+ dsl = tmp;
-+ }
-+ }
-+
-+ /* now send dgasp */
-+ if(dsl)
-+ (dsl->cb_dgasp_fn)(dsl->context);
-+
-+ /* reset and shutdown system */
-+ kerSysDyingGaspShutdown();
-+ }
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+return( IRQ_HANDLED );
-+#else
-+ return( 1 );
-+#endif
-+}
-+
-+static void __init kerSysInitDyingGaspHandler( void )
-+{
-+ CB_DGASP_LIST *new_node;
-+
-+ if( g_cb_dgasp_list_head != NULL) {
-+ printk("Error: kerSysInitDyingGaspHandler: list head is not null\n");
-+ return;
-+ }
-+ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
-+ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
-+ INIT_LIST_HEAD(&new_node->list);
-+ g_cb_dgasp_list_head = new_node;
-+
-+} /* kerSysInitDyingGaspHandler */
-+
-+static void __exit kerSysDeinitDyingGaspHandler( void )
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp;
-+
-+ if(g_cb_dgasp_list_head == NULL)
-+ return;
-+
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ list_del(pos);
-+ kfree(tmp);
-+ }
-+
-+ kfree(g_cb_dgasp_list_head);
-+ g_cb_dgasp_list_head = NULL;
-+
-+} /* kerSysDeinitDyingGaspHandler */
-+
-+void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context)
-+{
-+ CB_DGASP_LIST *new_node;
-+
-+ if( g_cb_dgasp_list_head == NULL) {
-+ printk("Error: kerSysRegisterDyingGaspHandler: list head is null\n");
-+ return;
-+ }
-+
-+ if( devname == NULL || cbfn == NULL ) {
-+ printk("Error: kerSysRegisterDyingGaspHandler: register info not enough (%s,%x,%x)\n", devname, (unsigned int)cbfn, (unsigned int)context);
-+ return;
-+ }
-+
-+ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
-+ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
-+ INIT_LIST_HEAD(&new_node->list);
-+ strncpy(new_node->name, devname, IFNAMSIZ);
-+ new_node->cb_dgasp_fn = (cb_dgasp_t)cbfn;
-+ new_node->context = context;
-+ list_add(&new_node->list, &g_cb_dgasp_list_head->list);
-+
-+ printk("dgasp: kerSysRegisterDyingGaspHandler: %s registered \n", devname);
-+
-+} /* kerSysRegisterDyingGaspHandler */
-+
-+void kerSysDeregisterDyingGaspHandler(char *devname)
-+{
-+ struct list_head *pos;
-+ CB_DGASP_LIST *tmp;
-+
-+ if(g_cb_dgasp_list_head == NULL) {
-+ printk("Error: kerSysDeregisterDyingGaspHandler: list head is null\n");
-+ return;
-+ }
-+
-+ if(devname == NULL) {
-+ printk("Error: kerSysDeregisterDyingGaspHandler: devname is null\n");
-+ return;
-+ }
-+
-+ printk("kerSysDeregisterDyingGaspHandler: %s is deregistering\n", devname);
-+
-+ list_for_each(pos, &g_cb_dgasp_list_head->list) {
-+ tmp = list_entry(pos, CB_DGASP_LIST, list);
-+ if(!strcmp(tmp->name, devname)) {
-+ list_del(pos);
-+ kfree(tmp);
-+ printk("kerSysDeregisterDyingGaspHandler: %s is deregistered\n", devname);
-+ return;
-+ }
-+ }
-+ printk("kerSysDeregisterDyingGaspHandler: %s not (de)registered\n", devname);
-+
-+} /* kerSysDeregisterDyingGaspHandler */
-+
-+/***************************************************************************
-+ * MACRO to call driver initialization and cleanup functions.
-+ ***************************************************************************/
-+module_init( brcm_board_init );
-+module_exit( brcm_board_cleanup );
-+
-+EXPORT_SYMBOL(kerSysNvRamGet);
-+EXPORT_SYMBOL(dumpaddr);
-+EXPORT_SYMBOL(kerSysGetMacAddress);
-+EXPORT_SYMBOL(kerSysReleaseMacAddress);
-+EXPORT_SYMBOL(kerSysGetSdramSize);
-+EXPORT_SYMBOL(kerSysLedCtrl);
-+EXPORT_SYMBOL(kerSysLedRegisterHwHandler);
-+EXPORT_SYMBOL(BpGetBoardIds);
-+EXPORT_SYMBOL(BpGetSdramSize);
-+EXPORT_SYMBOL(BpGetPsiSize);
-+EXPORT_SYMBOL(BpGetEthernetMacInfo);
-+EXPORT_SYMBOL(BpGetRj11InnerOuterPairGpios);
-+EXPORT_SYMBOL(BpGetPressAndHoldResetGpio);
-+EXPORT_SYMBOL(BpGetVoipResetGpio);
-+EXPORT_SYMBOL(BpGetVoipIntrGpio);
-+EXPORT_SYMBOL(BpGetPcmciaResetGpio);
-+EXPORT_SYMBOL(BpGetRtsCtsUartGpios);
-+EXPORT_SYMBOL(BpGetAdslLedGpio);
-+EXPORT_SYMBOL(BpGetAdslFailLedGpio);
-+EXPORT_SYMBOL(BpGetWirelessLedGpio);
-+EXPORT_SYMBOL(BpGetUsbLedGpio);
-+EXPORT_SYMBOL(BpGetHpnaLedGpio);
-+EXPORT_SYMBOL(BpGetWanDataLedGpio);
-+EXPORT_SYMBOL(BpGetPppLedGpio);
-+EXPORT_SYMBOL(BpGetPppFailLedGpio);
-+EXPORT_SYMBOL(BpGetVoipLedGpio);
-+EXPORT_SYMBOL(BpGetWirelessExtIntr);
-+EXPORT_SYMBOL(BpGetAdslDyingGaspExtIntr);
-+EXPORT_SYMBOL(BpGetVoipExtIntr);
-+EXPORT_SYMBOL(BpGetHpnaExtIntr);
-+EXPORT_SYMBOL(BpGetHpnaChipSelect);
-+EXPORT_SYMBOL(BpGetVoipChipSelect);
-+EXPORT_SYMBOL(BpGetWirelessSesBtnGpio);
-+EXPORT_SYMBOL(BpGetWirelessSesExtIntr);
-+EXPORT_SYMBOL(BpGetWirelessSesLedGpio);
-+EXPORT_SYMBOL(kerSysRegisterDyingGaspHandler);
-+EXPORT_SYMBOL(kerSysDeregisterDyingGaspHandler);
-+EXPORT_SYMBOL(kerSysGetCycleCount);
-+EXPORT_SYMBOL(kerSysSetWdTimer);
-+EXPORT_SYMBOL(kerSysWakeupMonitorTask);
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,692 @@
-+/************************************************************************/
-+/* */
-+/* AMD CFI Enabled Flash Memory Drivers */
-+/* File name: CFIFLASH.C */
-+/* Revision: 1.0 5/07/98 */
-+/* */
-+/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
-+/* This software is unpublished and contains the trade secrets and */
-+/* confidential proprietary information of AMD. Unless otherwise */
-+/* provided in the Software Agreement associated herewith, it is */
-+/* licensed in confidence "AS IS" and is not to be reproduced in whole */
-+/* or part by any means except for backup. Use, duplication, or */
-+/* disclosure by the Government is subject to the restrictions in */
-+/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
-+/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
-+/* Software owned by */
-+/* Advanced Micro Devices, Inc., */
-+/* One AMD Place, */
-+/* P.O. Box 3453 */
-+/* Sunnyvale, CA 94088-3453. */
-+/************************************************************************/
-+/* This software constitutes a basic shell of source code for */
-+/* programming all AMD Flash components. AMD */
-+/* will not be responsible for misuse or illegal use of this */
-+/* software for devices not supported herein. AMD is providing */
-+/* this source code "AS IS" and will not be responsible for */
-+/* issues arising from incorrect user implementation of the */
-+/* source code herein. It is the user's responsibility to */
-+/* properly design-in this source code. */
-+/* */
-+/************************************************************************/
-+#ifdef _CFE_
-+#include "lib_types.h"
-+#include "lib_printf.h"
-+#include "lib_string.h"
-+#include "cfe_timer.h"
-+#define printk printf
-+#else // linux
-+#include <linux/param.h>
-+#include <linux/sched.h>
-+#include <linux/timer.h>
-+#endif
-+
-+#include "cfiflash.h"
-+
-+static int flash_wait(WORD sector, int offset, UINT16 data);
-+static UINT16 flash_get_device_id(void);
-+static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily);
-+static int flash_write(WORD sector, int offset, byte *buf, int nbytes);
-+static void flash_command(int command, WORD sector, int offset, UINT16 data);
-+
-+/*********************************************************************/
-+/* 'meminfo' should be a pointer, but most C compilers will not */
-+/* allocate static storage for a pointer without calling */
-+/* non-portable functions such as 'new'. We also want to avoid */
-+/* the overhead of passing this pointer for every driver call. */
-+/* Systems with limited heap space will need to do this. */
-+/*********************************************************************/
-+struct flashinfo meminfo; /* Flash information structure */
-+static int flashFamily = FLASH_UNDEFINED;
-+static int totalSize = 0;
-+static struct cfi_query query;
-+
-+static UINT16 cfi_data_struct_29W160[] = {
-+ 0x0020, 0x0049, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0x0051, 0x0052, 0x0059, 0x0002, 0x0000, 0x0040, 0x0000, 0x0000,
-+ 0x0000, 0x0000, 0x0000, 0x0027, 0x0036, 0x0000, 0x0000, 0x0004,
-+ 0x0000, 0x000a, 0x0000, 0x0004, 0x0000, 0x0003, 0x0000, 0x0015,
-+ 0x0002, 0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0040,
-+ 0x0000, 0x0001, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0080,
-+ 0x0000, 0x001e, 0x0000, 0x0000, 0x0001, 0xffff, 0xffff, 0xffff,
-+ 0x0050, 0x0052, 0x0049, 0x0031, 0x0030, 0x0000, 0x0002, 0x0001,
-+ 0x0001, 0x0004, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0002,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0x0888, 0x252b, 0x8c84, 0x7dbc, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
-+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
-+};
-+
-+
-+/*********************************************************************/
-+/* Init_flash is used to build a sector table from the information */
-+/* provided through the CFI query. This information is translated */
-+/* from erase_block information to base:offset information for each */
-+/* individual sector. This information is then stored in the meminfo */
-+/* structure, and used throughout the driver to access sector */
-+/* information. */
-+/* */
-+/* This is more efficient than deriving the sector base:offset */
-+/* information every time the memory map switches (since on the */
-+/* development platform can only map 64k at a time). If the entire */
-+/* flash memory array can be mapped in, then the addition static */
-+/* allocation for the meminfo structure can be eliminated, but the */
-+/* drivers will have to be re-written. */
-+/* */
-+/* The meminfo struct occupies 653 bytes of heap space, depending */
-+/* on the value of the define MAXSECTORS. Adjust to suit */
-+/* application */
-+/*********************************************************************/
-+byte flash_init(void)
-+{
-+ int i=0, j=0, count=0;
-+ int basecount=0L;
-+ UINT16 device_id;
-+ int flipCFIGeometry = FALSE;
-+
-+ /* First, assume
-+ * a single 8k sector for sector 0. This is to allow
-+ * the system to perform memory mapping to the device,
-+ * even though the actual physical layout is unknown.
-+ * Once mapped in, the CFI query will produce all
-+ * relevant information.
-+ */
-+ meminfo.addr = 0L;
-+ meminfo.areg = 0;
-+ meminfo.nsect = 1;
-+ meminfo.bank1start = 0;
-+ meminfo.bank2start = 0;
-+
-+ meminfo.sec[0].size = 8192;
-+ meminfo.sec[0].base = 0x00000;
-+ meminfo.sec[0].bank = 1;
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+
-+ device_id = flash_get_device_id();
-+
-+ switch (device_id) {
-+ case ID_I28F160C3B:
-+ case ID_I28F320C3B:
-+ case ID_I28F160C3T:
-+ case ID_I28F320C3T:
-+ flashFamily = FLASH_INTEL;
-+ break;
-+ case ID_AM29DL800B:
-+ case ID_AM29LV800B:
-+ case ID_AM29LV400B:
-+ case ID_AM29LV160B:
-+ case ID_AM29LV320B:
-+ case ID_MX29LV320AB:
-+ case ID_AM29LV320MB:
-+ case ID_AM29DL800T:
-+ case ID_AM29LV800T:
-+ case ID_AM29LV160T:
-+ case ID_AM29LV320T:
-+ case ID_MX29LV320AT:
-+ case ID_AM29LV320MT:
-+ flashFamily = FLASH_AMD;
-+ break;
-+ case ID_SST39VF1601:
-+ case ID_SST39VF3201:
-+ flashFamily = FLASH_SST;
-+ break;
-+ default:
-+ printk("Flash memory not supported! Device id = %x\n", device_id);
-+ return -1;
-+ }
-+
-+ if (flash_get_cfi(&query, 0, flashFamily) == -1) {
-+ switch(device_id) {
-+ case ID_AM29LV160T:
-+ case ID_AM29LV160B:
-+ flash_get_cfi(&query, cfi_data_struct_29W160, flashFamily);
-+ break;
-+ default:
-+ printk("CFI data structure not found. Device id = %x\n", device_id);
-+ return -1;
-+ }
-+ }
-+
-+ // need to determine if it top or bottom boot here
-+ switch (device_id)
-+ {
-+ case ID_AM29DL800B:
-+ case ID_AM29LV800B:
-+ case ID_AM29LV400B:
-+ case ID_AM29LV160B:
-+ case ID_AM29LV320B:
-+ case ID_MX29LV320AB:
-+ case ID_AM29LV320MB:
-+ case ID_I28F160C3B:
-+ case ID_I28F320C3B:
-+ case ID_I28F160C3T:
-+ case ID_I28F320C3T:
-+ case ID_SST39VF1601:
-+ case ID_SST39VF3201:
-+ flipCFIGeometry = FALSE;
-+ break;
-+ case ID_AM29DL800T:
-+ case ID_AM29LV800T:
-+ case ID_AM29LV160T:
-+ case ID_AM29LV320T:
-+ case ID_MX29LV320AT:
-+ case ID_AM29LV320MT:
-+ flipCFIGeometry = TRUE;
-+ break;
-+ default:
-+ printk("Flash memory not supported! Device id = %x\n", device_id);
-+ return -1;
-+ }
-+
-+ count=0;basecount=0L;
-+
-+ if (!flipCFIGeometry)
-+ {
-+ for (i=0; i<query.num_erase_blocks; i++) {
-+ for(j=0; j<query.erase_block[i].num_sectors; j++) {
-+ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
-+ meminfo.sec[count].base = (int) basecount;
-+ basecount += (int) query.erase_block[i].sector_size;
-+ count++;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ for (i = (query.num_erase_blocks - 1); i >= 0; i--) {
-+ for(j=0; j<query.erase_block[i].num_sectors; j++) {
-+ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
-+ meminfo.sec[count].base = (int) basecount;
-+ basecount += (int) query.erase_block[i].sector_size;
-+ count++;
-+ }
-+ }
-+ }
-+
-+ meminfo.nsect = count;
-+ totalSize = meminfo.sec[count-1].base + meminfo.sec[count-1].size;
-+ return (0);
-+}
-+
-+/*********************************************************************/
-+/* Flash_sector_erase_int() is identical to flash_sector_erase(), */
-+/* except it will wait until the erase is completed before returning */
-+/* control to the calling function. This can be used in cases which */
-+/* require the program to hold until a sector is erased, without */
-+/* adding the wait check external to this function. */
-+/*********************************************************************/
-+byte flash_sector_erase_int(WORD sector)
-+{
-+ int i;
-+
-+ for( i = 0; i < 3; i++ ) {
-+ flash_command(FLASH_SERASE, sector, 0, 0);
-+ if (flash_wait(sector, 0, 0xffff) == STATUS_READY)
-+ break;
-+ }
-+
-+ return(1);
-+}
-+
-+/*********************************************************************/
-+/* flash_read_buf() reads buffer of data from the specified */
-+/* offset from the sector parameter. */
-+/*********************************************************************/
-+int flash_read_buf(WORD sector, int offset,
-+ byte *buffer, int numbytes)
-+{
-+ byte *fwp;
-+
-+ fwp = (byte *)flash_get_memptr(sector);
-+
-+ while (numbytes) {
-+ *buffer++ = *(fwp + offset);
-+ numbytes--;
-+ fwp++;
-+ }
-+
-+ return (1);
-+}
-+
-+/*********************************************************************/
-+/* flash_write_buf() utilizes */
-+/* the unlock bypass mode of the flash device. This can remove */
-+/* significant overhead from the bulk programming operation, and */
-+/* when programming bulk data a sizeable performance increase can be */
-+/* observed. */
-+/*********************************************************************/
-+int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes)
-+{
-+ int ret = -1;
-+ int i;
-+ unsigned char *p = flash_get_memptr(sector) + offset;
-+
-+ /* After writing the flash block, compare the contents to the source
-+ * buffer. Try to write the sector successfully up to three times.
-+ */
-+ for( i = 0; i < 3; i++ ) {
-+ ret = flash_write(sector, offset, buffer, numbytes);
-+ if( !memcmp( p, buffer, numbytes ) )
-+ break;
-+ /* Erase and try again */
-+ flash_sector_erase_int(sector);
-+ ret = -1;
-+ }
-+
-+ if( ret == -1 )
-+ printk( "Flash write error. Verify failed\n" );
-+
-+ return( ret );
-+}
-+
-+/*********************************************************************/
-+/* Usefull funtion to return the number of sectors in the device. */
-+/* Can be used for functions which need to loop among all the */
-+/* sectors, or wish to know the number of the last sector. */
-+/*********************************************************************/
-+int flash_get_numsectors(void)
-+{
-+ return meminfo.nsect;
-+}
-+
-+/*********************************************************************/
-+/* flash_get_sector_size() is provided for cases in which the size */
-+/* of a sector is required by a host application. The sector size */
-+/* (in bytes) is returned in the data location pointed to by the */
-+/* 'size' parameter. */
-+/*********************************************************************/
-+int flash_get_sector_size(WORD sector)
-+{
-+ return meminfo.sec[sector].size;
-+}
-+
-+/*********************************************************************/
-+/* The purpose of flash_get_memptr() is to return a memory pointer */
-+/* which points to the beginning of memory space allocated for the */
-+/* flash. All function pointers are then referenced from this */
-+/* pointer. */
-+/* */
-+/* Different systems will implement this in different ways: */
-+/* possibilities include: */
-+/* - A direct memory pointer */
-+/* - A pointer to a memory map */
-+/* - A pointer to a hardware port from which the linear */
-+/* address is translated */
-+/* - Output of an MMU function / service */
-+/* */
-+/* Also note that this function expects the pointer to a specific */
-+/* sector of the device. This can be provided by dereferencing */
-+/* the pointer from a translated offset of the sector from a */
-+/* global base pointer (e.g. flashptr = base_pointer + sector_offset)*/
-+/* */
-+/* Important: Many AMD flash devices need both bank and or sector */
-+/* address bits to be correctly set (bank address bits are A18-A16, */
-+/* and sector address bits are A18-A12, or A12-A15). Flash parts */
-+/* which do not need these bits will ignore them, so it is safe to */
-+/* assume that every part will require these bits to be set. */
-+/*********************************************************************/
-+unsigned char *flash_get_memptr(WORD sector)
-+{
-+ unsigned char *memptr = (unsigned char*)(FLASH_BASE_ADDR_REG + meminfo.sec[sector].base);
-+
-+ return (memptr);
-+}
-+
-+/*********************************************************************/
-+/* The purpose of flash_get_blk() is to return a the block number */
-+/* for a given memory address. */
-+/*********************************************************************/
-+int flash_get_blk(int addr)
-+{
-+ int blk_start, i;
-+ int last_blk = flash_get_numsectors();
-+ int relative_addr = addr - (int) FLASH_BASE_ADDR_REG;
-+
-+ for(blk_start=0, i=0; i < relative_addr && blk_start < last_blk; blk_start++)
-+ i += flash_get_sector_size(blk_start);
-+
-+ if( i > relative_addr )
-+ {
-+ blk_start--; // last blk, dec by 1
-+ }
-+ else
-+ if( blk_start == last_blk )
-+ {
-+ printk("Address is too big.\n");
-+ blk_start = -1;
-+ }
-+
-+ return( blk_start );
-+}
-+
-+/************************************************************************/
-+/* The purpose of flash_get_total_size() is to return the total size of */
-+/* the flash */
-+/************************************************************************/
-+int flash_get_total_size()
-+{
-+ return totalSize;
-+}
-+
-+/*********************************************************************/
-+/* Flash_command() is the main driver function. It performs */
-+/* every possible command available to AMD B revision */
-+/* flash parts. Note that this command is not used directly, but */
-+/* rather called through the API wrapper functions provided below. */
-+/*********************************************************************/
-+static void flash_command(int command, WORD sector, int offset, UINT16 data)
-+{
-+ volatile UINT16 *flashptr;
-+ volatile UINT16 *flashbase;
-+
-+ flashptr = (UINT16 *) flash_get_memptr(sector);
-+ flashbase = (UINT16 *) flash_get_memptr(0);
-+
-+ switch (flashFamily) {
-+ case FLASH_UNDEFINED:
-+ /* These commands should work for AMD, Intel and SST flashes */
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xF0;
-+ flashptr[0] = 0xFF;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0x5555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AAA] = 0x55; /* unlock 2 */
-+ flashptr[0x5555] = 0x90;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_AMD:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xF0;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashptr[0x55] = 0x98;
-+ break;
-+ case FLASH_UB:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x20;
-+ break;
-+ case FLASH_PROG:
-+ flashptr[0] = 0xA0;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_UBRESET:
-+ flashptr[0] = 0x90;
-+ flashptr[0] = 0x00;
-+ break;
-+ case FLASH_SERASE:
-+ flashptr[0x555] = 0xAA; /* unlock 1 */
-+ flashptr[0x2AA] = 0x55; /* unlock 2 */
-+ flashptr[0x555] = 0x80;
-+ flashptr[0x555] = 0xAA;
-+ flashptr[0x2AA] = 0x55;
-+ flashptr[0] = 0x30;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_INTEL:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashptr[0] = 0xFF;
-+ break;
-+ case FLASH_READ_ID:
-+ flashptr[0] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashptr[0] = 0x98;
-+ break;
-+ case FLASH_PROG:
-+ flashptr[0] = 0x40;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_SERASE:
-+ flashptr[0] = 0x60;
-+ flashptr[0] = 0xD0;
-+ flashptr[0] = 0x20;
-+ flashptr[0] = 0xD0;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ case FLASH_SST:
-+ switch (command) {
-+ case FLASH_RESET:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0xf0;
-+ break;
-+ case FLASH_READ_ID:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x90;
-+ break;
-+ case FLASH_CFIQUERY:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x98;
-+ break;
-+ case FLASH_UB:
-+ break;
-+ case FLASH_PROG:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0xa0;
-+ flashptr[offset/2] = data;
-+ break;
-+ case FLASH_UBRESET:
-+ break;
-+ case FLASH_SERASE:
-+ flashbase[0x5555] = 0xAA; /* unlock 1 */
-+ flashbase[0x2AAA] = 0x55; /* unlock 2 */
-+ flashbase[0x5555] = 0x80;
-+ flashbase[0x5555] = 0xAA;
-+ flashbase[0x2AAA] = 0x55;
-+ flashptr[0] = 0x30;
-+ break;
-+ default:
-+ break;
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+/*********************************************************************/
-+/* flash_write extends the functionality of flash_program() by */
-+/* providing an faster way to program multiple data words, without */
-+/* needing the function overhead of looping algorithms which */
-+/* program word by word. This function utilizes fast pointers */
-+/* to quickly loop through bulk data. */
-+/*********************************************************************/
-+static int flash_write(WORD sector, int offset, byte *buf, int nbytes)
-+{
-+ UINT16 *src;
-+ src = (UINT16 *)buf;
-+
-+ if ((nbytes | offset) & 1) {
-+ return -1;
-+ }
-+
-+ flash_command(FLASH_UB, 0, 0, 0);
-+ while (nbytes > 0) {
-+ flash_command(FLASH_PROG, sector, offset, *src);
-+ if (flash_wait(sector, offset, *src) != STATUS_READY)
-+ break;
-+ offset +=2;
-+ nbytes -=2;
-+ src++;
-+ }
-+ flash_command(FLASH_UBRESET, 0, 0, 0);
-+
-+ return (byte*)src - buf;
-+}
-+
-+/*********************************************************************/
-+/* flash_wait utilizes the DQ6, DQ5, and DQ2 polling algorithms */
-+/* described in the flash data book. It can quickly ascertain the */
-+/* operational status of the flash device, and return an */
-+/* appropriate status code (defined in flash.h) */
-+/*********************************************************************/
-+static int flash_wait(WORD sector, int offset, UINT16 data)
-+{
-+ volatile UINT16 *flashptr; /* flash window */
-+ UINT16 d1;
-+
-+ flashptr = (UINT16 *) flash_get_memptr(sector);
-+
-+ if (flashFamily == FLASH_AMD || flashFamily == FLASH_SST) {
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+ do {
-+ d1 = flashptr[offset/2];
-+ if (d1 == data)
-+ return STATUS_READY;
-+ } while (!(d1 & 0x20));
-+
-+ d1 = flashptr[offset/2];
-+
-+ if (d1 != data) {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+#else
-+ do {
-+ d1 = *flashptr; /* read data */
-+ d1 ^= *flashptr; /* read it again and see what toggled */
-+ if (d1 == 0) /* no toggles, nothing's happening */
-+ return STATUS_READY;
-+ } while (!(d1 & 0x20));
-+
-+ d1 = *flashptr; /* read data */
-+ d1 ^= *flashptr; /* read it again and see what toggled */
-+
-+ if (d1 != 0) {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+#endif
-+ } else if (flashFamily == FLASH_INTEL) {
-+ flashptr[0] = 0x70;
-+ /* Wait for completion */
-+ while(!(*flashptr & 0x80));
-+ if (*flashptr & 0x30) {
-+ flashptr[0] = 0x50;
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return STATUS_TIMEOUT;
-+ }
-+ flashptr[0] = 0x50;
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ }
-+
-+ return STATUS_READY;
-+}
-+
-+/*********************************************************************/
-+/* flash_get_device_id() will perform an autoselect sequence on the */
-+/* flash device, and return the device id of the component. */
-+/* This function automatically resets to read mode. */
-+/*********************************************************************/
-+static UINT16 flash_get_device_id()
-+{
-+ volatile UINT16 *fwp; /* flash window */
-+ UINT16 answer;
-+
-+ fwp = (UINT16 *)flash_get_memptr(0);
-+
-+ flash_command(FLASH_READ_ID, 0, 0, 0);
-+ answer = *(fwp + 1);
-+ if (answer == ID_AM29LV320M) {
-+ answer = *(fwp + 0xe);
-+ answer = *(fwp + 0xf);
-+ }
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return( (UINT16) answer );
-+}
-+
-+/*********************************************************************/
-+/* flash_get_cfi() is the main CFI workhorse function. Due to it's */
-+/* complexity and size it need only be called once upon */
-+/* initializing the flash system. Once it is called, all operations */
-+/* are performed by looking at the meminfo structure. */
-+/* All possible care was made to make this algorithm as efficient as */
-+/* possible. 90% of all operations are memory reads, and all */
-+/* calculations are done using bit-shifts when possible */
-+/*********************************************************************/
-+static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily)
-+{
-+ volatile UINT16 *fwp; /* flash window */
-+ int i=0;
-+
-+ flash_command(FLASH_CFIQUERY, 0, 0, 0);
-+
-+ if (cfi_struct == 0)
-+ fwp = (UINT16 *)flash_get_memptr(0);
-+ else
-+ fwp = cfi_struct;
-+
-+ /* Initial house-cleaning */
-+ for(i=0; i < 8; i++) {
-+ query->erase_block[i].sector_size = 0;
-+ query->erase_block[i].num_sectors = 0;
-+ }
-+
-+ /* If not 'QRY', then we dont have a CFI enabled device in the socket */
-+ if( fwp[0x10] != 'Q' &&
-+ fwp[0x11] != 'R' &&
-+ fwp[0x12] != 'Y') {
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return(-1);
-+ }
-+
-+ query->num_erase_blocks = fwp[0x2C];
-+ if(flashFamily == FLASH_SST)
-+ query->num_erase_blocks = 1;
-+
-+ for(i=0; i < query->num_erase_blocks; i++) {
-+ query->erase_block[i].num_sectors = fwp[(0x2D+(4*i))] + (fwp[0x2E + (4*i)] << 8);
-+ query->erase_block[i].num_sectors++;
-+ query->erase_block[i].sector_size = 256 * (256 * fwp[(0x30+(4*i))] + fwp[(0x2F+(4*i))]);
-+ }
-+
-+ flash_command(FLASH_RESET, 0, 0, 0);
-+ return(1);
-+}
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.h
---- linux-2.6.8.1/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/board/bcm963xx/impl1/cfiflash.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,150 @@
-+/************************************************************************/
-+/* */
-+/* AMD CFI Enabled Flash Memory Drivers */
-+/* File name: CFIFLASH.H */
-+/* Revision: 1.0 5/07/98 */
-+/* */
-+/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
-+/* This software is unpublished and contains the trade secrets and */
-+/* confidential proprietary information of AMD. Unless otherwise */
-+/* provided in the Software Agreement associated herewith, it is */
-+/* licensed in confidence "AS IS" and is not to be reproduced in whole */
-+/* or part by any means except for backup. Use, duplication, or */
-+/* disclosure by the Government is subject to the restrictions in */
-+/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
-+/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
-+/* Software owned by */
-+/* Advanced Micro Devices, Inc., */
-+/* One AMD Place, */
-+/* P.O. Box 3453 */
-+/* Sunnyvale, CA 94088-3453. */
-+/************************************************************************/
-+/* This software constitutes a basic shell of source code for */
-+/* programming all AMD Flash components. AMD */
-+/* will not be responsible for misuse or illegal use of this */
-+/* software for devices not supported herein. AMD is providing */
-+/* this source code "AS IS" and will not be responsible for */
-+/* issues arising from incorrect user implementation of the */
-+/* source code herein. It is the user's responsibility to */
-+/* properly design-in this source code. */
-+/* */
-+/************************************************************************/
-+#ifndef _CFIFLASH_H
-+#define _CFIFLASH_H
-+
-+#if defined __cplusplus
-+extern "C" {
-+#endif
-+
-+/* include board/CPU specific definitions */
-+#include "bcmtypes.h"
-+#include "board.h"
-+
-+#define FLASH_BASE_ADDR_REG FLASH_BASE
-+
-+#ifndef NULL
-+#define NULL 0
-+#endif
-+
-+#define MAXSECTORS 1024 /* maximum number of sectors supported */
-+
-+/* A structure for identifying a flash part. There is one for each
-+ * of the flash part definitions. We need to keep track of the
-+ * sector organization, the address register used, and the size
-+ * of the sectors.
-+ */
-+struct flashinfo {
-+ char *name; /* "Am29DL800T", etc. */
-+ unsigned long addr; /* physical address, once translated */
-+ int areg; /* Can be set to zero for all parts */
-+ int nsect; /* # of sectors -- 19 in LV, 22 in DL */
-+ int bank1start; /* first sector # in bank 1 */
-+ int bank2start; /* first sector # in bank 2, if DL part */
-+ struct {
-+ long size; /* # of bytes in this sector */
-+ long base; /* offset from beginning of device */
-+ int bank; /* 1 or 2 for DL; 1 for LV */
-+ } sec[MAXSECTORS]; /* per-sector info */
-+};
-+
-+/*
-+ * This structure holds all CFI query information as defined
-+ * in the JEDEC standard. All information up to
-+ * primary_extended_query is standard among all manufactures
-+ * with CFI enabled devices.
-+ */
-+
-+struct cfi_query {
-+ int num_erase_blocks; /* Number of sector defs. */
-+ struct {
-+ unsigned long sector_size; /* byte size of sector */
-+ int num_sectors; /* Num sectors of this size */
-+ } erase_block[8]; /* Max of 256, but 8 is good */
-+};
-+
-+/* Standard Boolean declarations */
-+#define TRUE 1
-+#define FALSE 0
-+
-+/* Define different type of flash */
-+#define FLASH_UNDEFINED 0
-+#define FLASH_AMD 1
-+#define FLASH_INTEL 2
-+#define FLASH_SST 3
-+
-+/* Command codes for the flash_command routine */
-+#define FLASH_RESET 0 /* reset to read mode */
-+#define FLASH_READ_ID 1 /* read device ID */
-+#define FLASH_CFIQUERY 2 /* CFI query */
-+#define FLASH_UB 3 /* go into unlock bypass mode */
-+#define FLASH_PROG 4 /* program a word */
-+#define FLASH_UBRESET 5 /* reset to read mode from unlock bypass mode */
-+#define FLASH_SERASE 6 /* sector erase */
-+
-+/* Return codes from flash_status */
-+#define STATUS_READY 0 /* ready for action */
-+#define STATUS_TIMEOUT 1 /* operation timed out */
-+
-+/* A list of AMD compatible device ID's - add others as needed */
-+#define ID_AM29DL800T 0x224A
-+#define ID_AM29DL800B 0x22CB
-+#define ID_AM29LV800T 0x22DA
-+#define ID_AM29LV800B 0x225B
-+#define ID_AM29LV400B 0x22BA
-+
-+#define ID_AM29LV160B 0x2249
-+#define ID_AM29LV160T 0x22C4
-+
-+#define ID_AM29LV320T 0x22F6
-+#define ID_MX29LV320AT 0x22A7
-+#define ID_AM29LV320B 0x22F9
-+#define ID_MX29LV320AB 0x22A8
-+
-+#define ID_AM29LV320M 0x227E
-+#define ID_AM29LV320MB 0x2200
-+#define ID_AM29LV320MT 0x2201
-+
-+#define ID_SST39VF1601 0x234B
-+#define ID_SST39VF3201 0x235B
-+
-+/* A list of Intel compatible device ID's - add others as needed */
-+#define ID_I28F160C3T 0x88C2
-+#define ID_I28F160C3B 0x88C3
-+#define ID_I28F320C3T 0x88C4
-+#define ID_I28F320C3B 0x88C5
-+
-+extern byte flash_init(void);
-+extern int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes);
-+extern int flash_read_buf(WORD sector, int offset, byte *buffer, int numbytes);
-+extern byte flash_sector_erase_int(WORD sector);
-+extern int flash_get_numsectors(void);
-+extern int flash_get_sector_size(WORD sector);
-+extern int flash_get_total_size(void);
-+extern unsigned char *flash_get_memptr(WORD sector);
-+extern int flash_get_blk(int addr);
-+
-+#if defined __cplusplus
-+}
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/serial/bcm96348/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/bcm96348/Makefile
---- linux-2.6.8.1/bcmdrivers/opensource/char/serial/bcm96348/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/bcm96348/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,13 @@
-+# File: bcmdrivers/opensource/char/serial
-+#
-+# Makefile for the BCM63xx serial/console driver
-+
-+obj-$(CONFIG_BCM_SERIAL) += bcm63xx_cons.o
-+
-+EXTRA_CFLAGS += -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+
-+-include $(TOPDIR)/Rules.make
-+
-+clean:
-+ rm -f core *.o *.a *.s
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/serial/bcm96348/bcm63xx_cons.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/bcm96348/bcm63xx_cons.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/serial/bcm96348/bcm63xx_cons.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/bcm96348/bcm63xx_cons.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,1035 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+/* Description: Serial port driver for the BCM963XX. */
-+
-+#define CARDNAME "bcm963xx_serial driver"
-+#define VERSION "2.0"
-+#define VER_STR CARDNAME " v" VERSION "\n"
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/interrupt.h>
-+
-+/* for definition of struct console */
-+#include <linux/console.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcmtypes.h>
-+#include <board.h>
-+#include <bcm_map_part.h>
-+#include <bcm_intr.h>
-+
-+extern void _putc(char);
-+extern void _puts(const char *);
-+
-+typedef struct bcm_serial {
-+ volatile Uart * port;
-+ int type;
-+ int flags;
-+ int irq;
-+ int baud_base;
-+ int blocked_open;
-+ unsigned short close_delay;
-+ unsigned short closing_wait;
-+ unsigned short line; /* port/line number */
-+ unsigned short cflags; /* line configuration flag */
-+ unsigned short x_char; /* xon/xoff character */
-+ unsigned short read_status_mask; /* mask for read condition */
-+ unsigned short ignore_status_mask; /* mask for ignore condition */
-+ unsigned long event; /* mask used in BH */
-+ int xmit_head; /* Position of the head */
-+ int xmit_tail; /* Position of the tail */
-+ int xmit_cnt; /* Count of the chars in the buffer */
-+ int count; /* indicates how many times it has been opened */
-+ int magic;
-+
-+ struct async_icount icount; /* keep track of things ... */
-+ struct tty_struct *tty; /* tty associated */
-+ struct termios normal_termios;
-+
-+ wait_queue_head_t open_wait;
-+ wait_queue_head_t close_wait;
-+
-+ long session; /* Session of opening process */
-+ long pgrp; /* pgrp of opening process */
-+
-+ unsigned char is_initialized;
-+} Context;
-+
-+
-+/*---------------------------------------------------------------------*/
-+/* Define bits in the Interrupt Enable register */
-+/*---------------------------------------------------------------------*/
-+/* Enable receive interrupt */
-+#define RXINT (RXFIFONE|RXOVFERR)
-+
-+/* Enable transmit interrupt */
-+#define TXINT (TXFIFOEMT|TXUNDERR|TXOVFERR)
-+
-+/* Enable receiver line status interrupt */
-+#define LSINT (RXBRK|RXPARERR|RXFRAMERR)
-+
-+#define BCM_NUM_UARTS 1
-+
-+#define BD_BCM63XX_TIMER_CLOCK_INPUT (FPERIPH)
-+
-+
-+static struct bcm_serial multi[BCM_NUM_UARTS];
-+static struct bcm_serial *lines[BCM_NUM_UARTS];
-+static struct tty_driver serial_driver;
-+static struct tty_struct *serial_table[BCM_NUM_UARTS];
-+static struct termios *serial_termios[BCM_NUM_UARTS];
-+static struct termios *serial_termios_locked[BCM_NUM_UARTS];
-+static int serial_refcount;
-+
-+
-+static void bcm_stop (struct tty_struct *tty);
-+static void bcm_start (struct tty_struct *tty);
-+static inline void receive_chars (struct bcm_serial * info);
-+static int startup (struct bcm_serial *info);
-+static void shutdown (struct bcm_serial * info);
-+static void change_speed( volatile Uart *pUart, tcflag_t cFlag );
-+static void bcm63xx_cons_flush_chars (struct tty_struct *tty);
-+static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
-+ const unsigned char *buf, int count);
-+static int bcm63xx_cons_write_room (struct tty_struct *tty);
-+static int bcm_chars_in_buffer (struct tty_struct *tty);
-+static void bcm_flush_buffer (struct tty_struct *tty);
-+static void bcm_throttle (struct tty_struct *tty);
-+static void bcm_unthrottle (struct tty_struct *tty);
-+static void bcm_send_xchar (struct tty_struct *tty, char ch);
-+static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo);
-+static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info);
-+static int get_lsr_info (struct bcm_serial *info, unsigned int *value);
-+static void send_break (struct bcm_serial *info, int duration);
-+static int bcm_ioctl (struct tty_struct * tty, struct file * file,
-+ unsigned int cmd, unsigned long arg);
-+static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios);
-+static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp);
-+static void bcm_hangup (struct tty_struct *tty);
-+static int block_til_ready (struct tty_struct *tty, struct file *filp, struct bcm_serial *info);
-+static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp);
-+static int __init bcm63xx_serialinit(void);
-+
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_stop () and rs_start ()
-+ *
-+ * These routines are called before setting or resetting
-+ * tty->stopped. They enable or disable transmitter interrupts,
-+ * as necessary.
-+ * ------------------------------------------------------------
-+ */
-+static void bcm_stop (struct tty_struct *tty)
-+{
-+}
-+
-+static void bcm_start (struct tty_struct *tty)
-+{
-+ _puts(CARDNAME " Start\n");
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * receive_char ()
-+ *
-+ * This routine deals with inputs from any lines.
-+ * ------------------------------------------------------------
-+ */
-+static inline void receive_chars (struct bcm_serial * info)
-+{
-+ struct tty_struct *tty = 0;
-+ struct async_icount * icount;
-+ int ignore = 0;
-+ unsigned short status, tmp;
-+ UCHAR ch = 0;
-+ while ((status = info->port->intStatus) & RXINT)
-+ {
-+ if (status & RXFIFONE)
-+ ch = info->port->Data; // Read the character
-+ tty = info->tty; /* now tty points to the proper dev */
-+ icount = &info->icount;
-+ if (! tty)
-+ break;
-+ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
-+ break;
-+ *tty->flip.char_buf_ptr = ch;
-+ *tty->flip.flag_buf_ptr = 0;
-+ icount->rx++;
-+ if (status & RXBRK)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_BREAK;
-+ icount->brk++;
-+ }
-+ // keep track of the statistics
-+ if (status & (RXFRAMERR | RXPARERR | RXOVFERR))
-+ {
-+ if (status & RXPARERR) /* parity error */
-+ icount->parity++;
-+ else
-+ if (status & RXFRAMERR) /* frame error */
-+ icount->frame++;
-+ if (status & RXOVFERR)
-+ {
-+ // Overflow. Reset the RX FIFO
-+ info->port->fifoctl |= RSTRXFIFOS;
-+ icount->overrun++;
-+ }
-+ // check to see if we should ignore the character
-+ // and mask off conditions that should be ignored
-+ if (status & info->ignore_status_mask)
-+ {
-+ if (++ignore > 100 )
-+ break;
-+ goto ignore_char;
-+ }
-+ // Mask off the error conditions we want to ignore
-+ tmp = status & info->read_status_mask;
-+ if (tmp & RXPARERR)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_PARITY;
-+ }
-+ else
-+ if (tmp & RXFRAMERR)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_FRAME;
-+ }
-+ if (tmp & RXOVFERR)
-+ {
-+ if (tty->flip.count < TTY_FLIPBUF_SIZE)
-+ {
-+ tty->flip.count++;
-+ tty->flip.flag_buf_ptr++;
-+ tty->flip.char_buf_ptr++;
-+ *tty->flip.flag_buf_ptr = TTY_OVERRUN;
-+ }
-+ }
-+ }
-+ tty->flip.flag_buf_ptr++;
-+ tty->flip.char_buf_ptr++;
-+ tty->flip.count++;
-+ }
-+ignore_char:
-+ if (tty)
-+ tty_flip_buffer_push(tty);
-+}
-+
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm_interrupt ()
-+ *
-+ * this is the main interrupt routine for the chip.
-+ * It deals with the multiple ports.
-+ * ------------------------------------------------------------
-+ */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static irqreturn_t bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
-+#else
-+static void bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
-+#endif
-+{
-+ struct bcm_serial * info = lines[0];
-+ UINT16 intStat;
-+
-+ /* get pending interrupt flags from UART */
-+
-+ /* Mask with only the serial interrupts that are enabled */
-+ intStat = info->port->intStatus & info->port->intMask;
-+ while (intStat)
-+ {
-+ if (intStat & RXINT)
-+ receive_chars (info);
-+ else
-+ if (intStat & TXINT)
-+ info->port->intStatus = TXINT;
-+ else /* don't know what it was, so let's mask it */
-+ info->port->intMask &= ~intStat;
-+
-+ intStat = info->port->intStatus & info->port->intMask;
-+ }
-+
-+ // Clear the interrupt
-+ BcmHalInterruptEnable (INTERRUPT_ID_UART);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ return IRQ_HANDLED;
-+#endif
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * startup ()
-+ *
-+ * various initialization tasks
-+ * -------------------------------------------------------------------
-+ */
-+static int startup (struct bcm_serial *info)
-+{
-+ // Port is already started...
-+ return 0;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * shutdown ()
-+ *
-+ * This routine will shutdown a serial port; interrupts are disabled, and
-+ * DTR is dropped if the hangup on close termio flag is on.
-+ * -------------------------------------------------------------------
-+ */
-+static void shutdown (struct bcm_serial * info)
-+{
-+ unsigned long flags;
-+ if (!info->is_initialized)
-+ return;
-+
-+ save_flags (flags);
-+ cli ();
-+
-+ info->port->control &= ~(BRGEN|TXEN|RXEN);
-+ if (info->tty)
-+ set_bit (TTY_IO_ERROR, &info->tty->flags);
-+ info->is_initialized = 0;
-+
-+ restore_flags (flags);
-+}
-+/*
-+ * -------------------------------------------------------------------
-+ * change_speed ()
-+ *
-+ * Set the baud rate, character size, parity and stop bits.
-+ * -------------------------------------------------------------------
-+ */
-+static void change_speed( volatile Uart *pUart, tcflag_t cFlag )
-+{
-+ unsigned long ulFlags, ulBaud, ulClockFreqHz, ulTmp;
-+ save_flags(ulFlags);
-+ cli();
-+ switch( cFlag & (CBAUD | CBAUDEX) )
-+ {
-+ case B115200:
-+ ulBaud = 115200;
-+ break;
-+ case B57600:
-+ ulBaud = 57600;
-+ break;
-+ case B38400:
-+ ulBaud = 38400;
-+ break;
-+ case B19200:
-+ ulBaud = 19200;
-+ break;
-+ case B9600:
-+ ulBaud = 9600;
-+ break;
-+ case B4800:
-+ ulBaud = 4800;
-+ break;
-+ case B2400:
-+ ulBaud = 2400;
-+ break;
-+ case B1800:
-+ ulBaud = 1800;
-+ break;
-+ case B1200:
-+ ulBaud = 1200;
-+ break;
-+ case B600:
-+ ulBaud = 600;
-+ break;
-+ case B300:
-+ ulBaud = 300;
-+ break;
-+ case B200:
-+ ulBaud = 200;
-+ break;
-+ case B150:
-+ ulBaud = 150;
-+ break;
-+ case B134:
-+ ulBaud = 134;
-+ break;
-+ case B110:
-+ ulBaud = 110;
-+ break;
-+ case B75:
-+ ulBaud = 75;
-+ break;
-+ case B50:
-+ ulBaud = 50;
-+ break;
-+ default:
-+ ulBaud = 115200;
-+ break;
-+ }
-+
-+ /* Calculate buad rate. */
-+ ulClockFreqHz = BD_BCM63XX_TIMER_CLOCK_INPUT;
-+ ulTmp = (ulClockFreqHz / ulBaud) / 16;
-+ if( ulTmp & 0x01 )
-+ ulTmp /= 2; /* Rounding up, so sub is already accounted for */
-+ else
-+ ulTmp = (ulTmp / 2) - 1; /* Rounding down so we must sub 1 */
-+ pUart->baudword = ulTmp;
-+
-+ /* Set character size, stop bits and parity. */
-+ switch( cFlag & CSIZE )
-+ {
-+ case CS5:
-+ ulTmp = BITS5SYM; /* select transmit 5 bit data size */
-+ break;
-+ case CS6:
-+ ulTmp = BITS6SYM; /* select transmit 6 bit data size */
-+ break;
-+ case CS7:
-+ ulTmp = BITS7SYM; /* select transmit 7 bit data size */
-+ break;
-+ /*case CS8:*/
-+ default:
-+ ulTmp = BITS8SYM; /* select transmit 8 bit data size */
-+ break;
-+ }
-+ if( cFlag & CSTOPB )
-+ ulTmp |= TWOSTOP; /* select 2 stop bits */
-+ else
-+ ulTmp |= ONESTOP; /* select one stop bit */
-+
-+ /* Write these values into the config reg. */
-+ pUart->config = ulTmp;
-+ pUart->control &= ~(RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN);
-+ switch( cFlag & (PARENB | PARODD) )
-+ {
-+ case PARENB|PARODD:
-+ pUart->control |= RXPARITYEN | TXPARITYEN;
-+ break;
-+ case PARENB:
-+ pUart->control |= RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN;
-+ break;
-+ default:
-+ pUart->control |= 0;
-+ break;
-+ }
-+
-+ /* Reset and flush uart */
-+ pUart->fifoctl = RSTTXFIFOS | RSTRXFIFOS;
-+ restore_flags( ulFlags );
-+}
-+
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_flush_char ()
-+ *
-+ * Nothing to flush. Polled I/O is used.
-+ * -------------------------------------------------------------------
-+ */
-+static void bcm63xx_cons_flush_chars (struct tty_struct *tty)
-+{
-+}
-+
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm63xx_cons_write ()
-+ *
-+ * Main output routine using polled I/O.
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
-+ const unsigned char *buf, int count)
-+{
-+ int c;
-+
-+ for (c = 0; c < count; c++)
-+ _putc(buf[c]);
-+ return count;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm63xx_cons_write_room ()
-+ *
-+ * Compute the amount of space available for writing.
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm63xx_cons_write_room (struct tty_struct *tty)
-+{
-+ /* Pick a number. Any number. Polled I/O is used. */
-+ return 1024;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_chars_in_buffer ()
-+ *
-+ * compute the amount of char left to be transmitted
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm_chars_in_buffer (struct tty_struct *tty)
-+{
-+ return 0;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_flush_buffer ()
-+ *
-+ * Empty the output buffer
-+ * -------------------------------------------------------------------
-+ */
-+static void bcm_flush_buffer (struct tty_struct *tty)
-+{
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm_throttle () and bcm_unthrottle ()
-+ *
-+ * This routine is called by the upper-layer tty layer to signal that
-+ * incoming characters should be throttled (or not).
-+ * ------------------------------------------------------------
-+ */
-+static void bcm_throttle (struct tty_struct *tty)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ if (I_IXOFF(tty))
-+ info->x_char = STOP_CHAR(tty);
-+}
-+
-+static void bcm_unthrottle (struct tty_struct *tty)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ if (I_IXOFF(tty))
-+ {
-+ if (info->x_char)
-+ info->x_char = 0;
-+ else
-+ info->x_char = START_CHAR(tty);
-+ }
-+}
-+
-+static void bcm_send_xchar (struct tty_struct *tty, char ch)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ info->x_char = ch;
-+ if (ch)
-+ bcm_start (info->tty);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_ioctl () and friends
-+ * ------------------------------------------------------------
-+ */
-+static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo)
-+{
-+ struct serial_struct tmp;
-+
-+ if (!retinfo)
-+ return -EFAULT;
-+
-+ memset (&tmp, 0, sizeof(tmp));
-+ tmp.type = info->type;
-+ tmp.line = info->line;
-+ tmp.port = (int) info->port;
-+ tmp.irq = info->irq;
-+ tmp.flags = 0;
-+ tmp.baud_base = info->baud_base;
-+ tmp.close_delay = info->close_delay;
-+ tmp.closing_wait = info->closing_wait;
-+
-+ return copy_to_user (retinfo, &tmp, sizeof(*retinfo));
-+}
-+
-+static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info)
-+{
-+ struct serial_struct new_serial;
-+ struct bcm_serial old_info;
-+ int retval = 0;
-+
-+ if (!new_info)
-+ return -EFAULT;
-+
-+ copy_from_user (&new_serial, new_info, sizeof(new_serial));
-+ old_info = *info;
-+
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+
-+
-+ if (info->count > 1)
-+ return -EBUSY;
-+
-+ /* OK, past this point, all the error checking has been done.
-+ * At this point, we start making changes.....
-+ */
-+ info->baud_base = new_serial.baud_base;
-+ info->type = new_serial.type;
-+ info->close_delay = new_serial.close_delay;
-+ info->closing_wait = new_serial.closing_wait;
-+ retval = startup (info);
-+ return retval;
-+}
-+
-+/*
-+ * get_lsr_info - get line status register info
-+ *
-+ * Purpose: Let user call ioctl() to get info when the UART physically
-+ * is emptied. On bus types like RS485, the transmitter must
-+ * release the bus after transmitting. This must be done when
-+ * the transmit shift register is empty, not be done when the
-+ * transmit holding register is empty. This functionality
-+ * allows an RS485 driver to be written in user space.
-+ */
-+static int get_lsr_info (struct bcm_serial *info, unsigned int *value)
-+{
-+ return( 0 );
-+}
-+
-+/*
-+ * This routine sends a break character out the serial port.
-+ */
-+static void send_break (struct bcm_serial *info, int duration)
-+{
-+ unsigned long flags;
-+
-+ if (!info->port)
-+ return;
-+
-+ current->state = TASK_INTERRUPTIBLE;
-+
-+ save_flags (flags);
-+ cli();
-+
-+ info->port->control |= XMITBREAK;
-+ schedule_timeout(duration);
-+ info->port->control &= ~XMITBREAK;
-+
-+ restore_flags (flags);
-+}
-+
-+static int bcm_ioctl (struct tty_struct * tty, struct file * file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ int error;
-+ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
-+ int retval;
-+
-+ if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
-+ (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) &&
-+ (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT))
-+ {
-+ if (tty->flags & (1 << TTY_IO_ERROR))
-+ return -EIO;
-+ }
-+ switch (cmd)
-+ {
-+
-+ case TCSBRK: /* SVID version: non-zero arg --> no break */
-+ retval = tty_check_change (tty);
-+ if (retval)
-+ return retval;
-+ tty_wait_until_sent (tty, 0);
-+ if (!arg)
-+ send_break (info, HZ/4); /* 1/4 second */
-+ return 0;
-+
-+ case TCSBRKP: /* support for POSIX tcsendbreak() */
-+ retval = tty_check_change (tty);
-+ if (retval)
-+ return retval;
-+ tty_wait_until_sent (tty, 0);
-+ send_break (info, arg ? arg*(HZ/10) : HZ/4);
-+ return 0;
-+
-+ case TIOCGSOFTCAR:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(long));
-+ if (error)
-+ return error;
-+ put_user (C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg);
-+ return 0;
-+
-+ case TIOCSSOFTCAR:
-+ error = get_user (arg, (unsigned long *)arg);
-+ if (error)
-+ return error;
-+ tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0));
-+ return 0;
-+
-+ case TIOCGSERIAL:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(struct serial_struct));
-+ if (error)
-+ return error;
-+ return get_serial_info (info, (struct serial_struct *)arg);
-+
-+ case TIOCSSERIAL:
-+ return set_serial_info (info, (struct serial_struct *) arg);
-+
-+ case TIOCSERGETLSR: /* Get line status register */
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(unsigned int));
-+ if (error)
-+ return error;
-+ else
-+ return get_lsr_info (info, (unsigned int *)arg);
-+
-+ case TIOCSERGSTRUCT:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(struct bcm_serial));
-+ if (error)
-+ return error;
-+ copy_to_user((struct bcm_serial *)arg, info, sizeof(struct bcm_serial));
-+ return 0;
-+
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+ return 0;
-+}
-+
-+static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+
-+ if( tty->termios->c_cflag != old_termios->c_cflag )
-+ change_speed (info->port, tty->termios->c_cflag);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm63xx_cons_close()
-+ *
-+ * This routine is called when the serial port gets closed. First, we
-+ * wait for the last remaining data to be sent. Then, we turn off
-+ * the transmit enable and receive enable flags.
-+ * ------------------------------------------------------------
-+ */
-+static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp)
-+{
-+ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
-+ unsigned long flags;
-+
-+ if (!info)
-+ return;
-+
-+ save_flags (flags);
-+ cli();
-+
-+ if (tty_hung_up_p (filp))
-+ {
-+ restore_flags (flags);
-+ return;
-+ }
-+
-+ if ((tty->count == 1) && (info->count != 1))
-+ {
-+
-+ /* Uh, oh. tty->count is 1, which means that the tty
-+ * structure will be freed. Info->count should always
-+ * be one in these conditions. If it's greater than
-+ * one, we've got real problems, since it means the
-+ * serial port won't be shutdown.
-+ */
-+ printk("bcm63xx_cons_close: bad serial port count; tty->count is 1, "
-+ "info->count is %d\n", info->count);
-+ info->count = 1;
-+ }
-+
-+ if (--info->count < 0)
-+ {
-+ printk("ds_close: bad serial port count for ttys%d: %d\n",
-+ info->line, info->count);
-+ info->count = 0;
-+ }
-+
-+ if (info->count)
-+ {
-+ restore_flags (flags);
-+ return;
-+ }
-+
-+ /* Now we wait for the transmit buffer to clear; and we notify
-+ * the line discipline to only process XON/XOFF characters.
-+ */
-+ tty->closing = 1;
-+
-+ /* At this point we stop accepting input. To do this, we
-+ * disable the receive line status interrupts.
-+ */
-+ shutdown (info);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ if (tty->driver->flush_buffer)
-+ tty->driver->flush_buffer (tty);
-+#else
-+ if (tty->driver.flush_buffer)
-+ tty->driver.flush_buffer (tty);
-+#endif
-+ if (tty->ldisc.flush_buffer)
-+ tty->ldisc.flush_buffer (tty);
-+
-+ tty->closing = 0;
-+ info->event = 0;
-+ info->tty = 0;
-+ if (tty->ldisc.num != ldiscs[N_TTY].num)
-+ {
-+ if (tty->ldisc.close)
-+ (tty->ldisc.close)(tty);
-+ tty->ldisc = ldiscs[N_TTY];
-+ tty->termios->c_line = N_TTY;
-+ if (tty->ldisc.open)
-+ (tty->ldisc.open)(tty);
-+ }
-+ if (info->blocked_open)
-+ {
-+ if (info->close_delay)
-+ {
-+ current->state = TASK_INTERRUPTIBLE;
-+ schedule_timeout(info->close_delay);
-+ }
-+ wake_up_interruptible (&info->open_wait);
-+ }
-+ wake_up_interruptible (&info->close_wait);
-+
-+ restore_flags (flags);
-+}
-+
-+/*
-+ * bcm_hangup () --- called by tty_hangup() when a hangup is signaled.
-+ */
-+static void bcm_hangup (struct tty_struct *tty)
-+{
-+
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+
-+ shutdown (info);
-+ info->event = 0;
-+ info->count = 0;
-+ info->tty = 0;
-+ wake_up_interruptible (&info->open_wait);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_open() and friends
-+ * ------------------------------------------------------------
-+ */
-+static int block_til_ready (struct tty_struct *tty, struct file *filp,
-+ struct bcm_serial *info)
-+{
-+ return 0;
-+}
-+
-+/*
-+ * This routine is called whenever a serial port is opened. It
-+ * enables interrupts for a serial port. It also performs the
-+ * serial-specific initialization for the tty structure.
-+ */
-+static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp)
-+{
-+ struct bcm_serial *info;
-+ int retval, line;
-+
-+ // Make sure we're only opening on of the ports we support
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ line = MINOR(tty->driver->cdev.dev) - tty->driver->minor_start;
-+#else
-+ line = MINOR(tty->device) - tty->driver.minor_start;
-+#endif
-+
-+ if ((line < 0) || (line >= BCM_NUM_UARTS))
-+ return -ENODEV;
-+
-+ info = lines[line];
-+
-+ info->port->intMask = 0; /* Clear any pending interrupts */
-+ info->port->intMask = RXINT; /* Enable RX */
-+
-+ info->count++;
-+ tty->driver_data = info;
-+ info->tty = tty;
-+ BcmHalInterruptEnable (INTERRUPT_ID_UART);
-+
-+ // Start up serial port
-+ retval = startup (info);
-+ if (retval)
-+ return retval;
-+
-+ retval = block_til_ready (tty, filp, info);
-+ if (retval)
-+ return retval;
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ info->pgrp = process_group(current);
-+ info->session = current->signal->session;
-+#else
-+ info->session = current->session;
-+ info->pgrp = current->pgrp;
-+#endif
-+
-+ return 0;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ Name: bcm63xx_serialinit
-+ Purpose: Initialize our BCM63xx serial driver
-+-------------------------------------------------------------------------- */
-+static int __init bcm63xx_serialinit(void)
-+{
-+ int i, flags;
-+ struct bcm_serial * info;
-+
-+ // Print the driver version information
-+ printk(VER_STR);
-+
-+ memset(&serial_driver, 0, sizeof(struct tty_driver));
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ serial_driver.owner = THIS_MODULE;
-+ serial_driver.devfs_name = "tts/";
-+#endif
-+ serial_driver.magic = TTY_DRIVER_MAGIC;
-+ serial_driver.name = "ttyS";
-+ serial_driver.major = TTY_MAJOR;
-+ serial_driver.minor_start = 64;
-+ serial_driver.num = BCM_NUM_UARTS;
-+ serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
-+ serial_driver.subtype = SERIAL_TYPE_NORMAL;
-+ serial_driver.init_termios = tty_std_termios;
-+ serial_driver.init_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL;
-+ serial_driver.flags = TTY_DRIVER_REAL_RAW;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ serial_driver.refcount = serial_refcount;
-+ serial_driver.ttys = serial_table;
-+#else
-+ serial_driver.refcount = &serial_refcount;
-+ serial_driver.table = serial_table;
-+#endif
-+
-+ serial_driver.termios = serial_termios;
-+ serial_driver.termios_locked = serial_termios_locked;
-+ serial_driver.open = bcm63xx_cons_open;
-+ serial_driver.close = bcm63xx_cons_close;
-+ serial_driver.write = bcm63xx_cons_write;
-+ serial_driver.flush_chars = bcm63xx_cons_flush_chars;
-+ serial_driver.write_room = bcm63xx_cons_write_room;
-+ serial_driver.chars_in_buffer = bcm_chars_in_buffer;
-+ serial_driver.flush_buffer = bcm_flush_buffer;
-+ serial_driver.ioctl = bcm_ioctl;
-+ serial_driver.throttle = bcm_throttle;
-+ serial_driver.unthrottle = bcm_unthrottle;
-+ serial_driver.send_xchar = bcm_send_xchar;
-+ serial_driver.set_termios = bcm_set_termios;
-+ serial_driver.stop = bcm_stop;
-+ serial_driver.start = bcm_start;
-+ serial_driver.hangup = bcm_hangup;
-+
-+ if (tty_register_driver (&serial_driver))
-+ panic("Couldn't register serial driver\n");
-+
-+ save_flags(flags); cli();
-+ for (i = 0; i < BCM_NUM_UARTS; i++)
-+ {
-+ info = &multi[i];
-+ lines[i] = info;
-+ info->port = (Uart *) ((char *)UART_BASE + (i * 0x20));
-+ info->irq = (2 - i) + 8;
-+ info->line = i;
-+ info->tty = 0;
-+ info->close_delay = 50;
-+ info->closing_wait = 3000;
-+ info->x_char = 0;
-+ info->event = 0;
-+ info->count = 0;
-+ info->blocked_open = 0;
-+ info->normal_termios = serial_driver.init_termios;
-+ init_waitqueue_head(&info->open_wait);
-+ init_waitqueue_head(&info->close_wait);
-+
-+ /* If we are pointing to address zero then punt - not correctly
-+ * set up in setup.c to handle this.
-+ */
-+ if (! info->port)
-+ return 0;
-+ BcmHalMapInterrupt(bcm_interrupt, 0, INTERRUPT_ID_UART);
-+ }
-+
-+ /* order matters here... the trick is that flags
-+ * is updated... in request_irq - to immediatedly obliterate
-+ * it is unwise.
-+ */
-+ restore_flags(flags);
-+ return 0;
-+}
-+
-+module_init(bcm63xx_serialinit);
-+
-+/* --------------------------------------------------------------------------
-+ Name: bcm_console_print
-+ Purpose: bcm_console_print is registered for printk.
-+ The console_lock must be held when we get here.
-+-------------------------------------------------------------------------- */
-+static void bcm_console_print (struct console * cons, const char * str,
-+ unsigned int count)
-+{
-+ unsigned int i;
-+ //_puts(str);
-+ for(i=0; i<count; i++, str++)
-+ {
-+ _putc(*str);
-+ if (*str == 10)
-+ {
-+ _putc(13);
-+ }
-+ }
-+}
-+
-+static struct tty_driver * bcm_console_device(struct console * c, int *index)
-+{
-+ *index = c->index;
-+ return &serial_driver;
-+}
-+
-+static int __init bcm_console_setup(struct console * co, char * options)
-+{
-+ return 0;
-+}
-+
-+static struct console bcm_sercons = {
-+ .name = "ttyS",
-+ .write = bcm_console_print,
-+ .device = bcm_console_device,
-+ .setup = bcm_console_setup,
-+ .flags = CON_PRINTBUFFER, // CON_CONSDEV, CONSOLE_LINE,
-+ .index = -1,
-+};
-+
-+static int __init bcm63xx_console_init(void)
-+{
-+ register_console(&bcm_sercons);
-+ return 0;
-+}
-+
-+console_initcall(bcm63xx_console_init);
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/serial/impl1/Makefile linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/impl1/Makefile
---- linux-2.6.8.1/bcmdrivers/opensource/char/serial/impl1/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/impl1/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,13 @@
-+# File: bcmdrivers/opensource/char/serial
-+#
-+# Makefile for the BCM63xx serial/console driver
-+
-+obj-$(CONFIG_BCM_SERIAL) += bcm63xx_cons.o
-+
-+EXTRA_CFLAGS += -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
-+
-+-include $(TOPDIR)/Rules.make
-+
-+clean:
-+ rm -f core *.o *.a *.s
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c
---- linux-2.6.8.1/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,1035 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+/* Description: Serial port driver for the BCM963XX. */
-+
-+#define CARDNAME "bcm963xx_serial driver"
-+#define VERSION "2.0"
-+#define VER_STR CARDNAME " v" VERSION "\n"
-+
-+
-+#include <linux/kernel.h>
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/init.h>
-+#include <linux/slab.h>
-+#include <linux/interrupt.h>
-+
-+/* for definition of struct console */
-+#include <linux/console.h>
-+#include <linux/tty.h>
-+#include <linux/tty_flip.h>
-+#include <linux/serial.h>
-+#include <asm/uaccess.h>
-+
-+#include <bcmtypes.h>
-+#include <board.h>
-+#include <bcm_map_part.h>
-+#include <bcm_intr.h>
-+
-+extern void _putc(char);
-+extern void _puts(const char *);
-+
-+typedef struct bcm_serial {
-+ volatile Uart * port;
-+ int type;
-+ int flags;
-+ int irq;
-+ int baud_base;
-+ int blocked_open;
-+ unsigned short close_delay;
-+ unsigned short closing_wait;
-+ unsigned short line; /* port/line number */
-+ unsigned short cflags; /* line configuration flag */
-+ unsigned short x_char; /* xon/xoff character */
-+ unsigned short read_status_mask; /* mask for read condition */
-+ unsigned short ignore_status_mask; /* mask for ignore condition */
-+ unsigned long event; /* mask used in BH */
-+ int xmit_head; /* Position of the head */
-+ int xmit_tail; /* Position of the tail */
-+ int xmit_cnt; /* Count of the chars in the buffer */
-+ int count; /* indicates how many times it has been opened */
-+ int magic;
-+
-+ struct async_icount icount; /* keep track of things ... */
-+ struct tty_struct *tty; /* tty associated */
-+ struct termios normal_termios;
-+
-+ wait_queue_head_t open_wait;
-+ wait_queue_head_t close_wait;
-+
-+ long session; /* Session of opening process */
-+ long pgrp; /* pgrp of opening process */
-+
-+ unsigned char is_initialized;
-+} Context;
-+
-+
-+/*---------------------------------------------------------------------*/
-+/* Define bits in the Interrupt Enable register */
-+/*---------------------------------------------------------------------*/
-+/* Enable receive interrupt */
-+#define RXINT (RXFIFONE|RXOVFERR)
-+
-+/* Enable transmit interrupt */
-+#define TXINT (TXFIFOEMT|TXUNDERR|TXOVFERR)
-+
-+/* Enable receiver line status interrupt */
-+#define LSINT (RXBRK|RXPARERR|RXFRAMERR)
-+
-+#define BCM_NUM_UARTS 1
-+
-+#define BD_BCM63XX_TIMER_CLOCK_INPUT (FPERIPH)
-+
-+
-+static struct bcm_serial multi[BCM_NUM_UARTS];
-+static struct bcm_serial *lines[BCM_NUM_UARTS];
-+static struct tty_driver serial_driver;
-+static struct tty_struct *serial_table[BCM_NUM_UARTS];
-+static struct termios *serial_termios[BCM_NUM_UARTS];
-+static struct termios *serial_termios_locked[BCM_NUM_UARTS];
-+static int serial_refcount;
-+
-+
-+static void bcm_stop (struct tty_struct *tty);
-+static void bcm_start (struct tty_struct *tty);
-+static inline void receive_chars (struct bcm_serial * info);
-+static int startup (struct bcm_serial *info);
-+static void shutdown (struct bcm_serial * info);
-+static void change_speed( volatile Uart *pUart, tcflag_t cFlag );
-+static void bcm63xx_cons_flush_chars (struct tty_struct *tty);
-+static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
-+ const unsigned char *buf, int count);
-+static int bcm63xx_cons_write_room (struct tty_struct *tty);
-+static int bcm_chars_in_buffer (struct tty_struct *tty);
-+static void bcm_flush_buffer (struct tty_struct *tty);
-+static void bcm_throttle (struct tty_struct *tty);
-+static void bcm_unthrottle (struct tty_struct *tty);
-+static void bcm_send_xchar (struct tty_struct *tty, char ch);
-+static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo);
-+static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info);
-+static int get_lsr_info (struct bcm_serial *info, unsigned int *value);
-+static void send_break (struct bcm_serial *info, int duration);
-+static int bcm_ioctl (struct tty_struct * tty, struct file * file,
-+ unsigned int cmd, unsigned long arg);
-+static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios);
-+static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp);
-+static void bcm_hangup (struct tty_struct *tty);
-+static int block_til_ready (struct tty_struct *tty, struct file *filp, struct bcm_serial *info);
-+static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp);
-+static int __init bcm63xx_serialinit(void);
-+
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_stop () and rs_start ()
-+ *
-+ * These routines are called before setting or resetting
-+ * tty->stopped. They enable or disable transmitter interrupts,
-+ * as necessary.
-+ * ------------------------------------------------------------
-+ */
-+static void bcm_stop (struct tty_struct *tty)
-+{
-+}
-+
-+static void bcm_start (struct tty_struct *tty)
-+{
-+ _puts(CARDNAME " Start\n");
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * receive_char ()
-+ *
-+ * This routine deals with inputs from any lines.
-+ * ------------------------------------------------------------
-+ */
-+static inline void receive_chars (struct bcm_serial * info)
-+{
-+ struct tty_struct *tty = 0;
-+ struct async_icount * icount;
-+ int ignore = 0;
-+ unsigned short status, tmp;
-+ UCHAR ch = 0;
-+ while ((status = info->port->intStatus) & RXINT)
-+ {
-+ if (status & RXFIFONE)
-+ ch = info->port->Data; // Read the character
-+ tty = info->tty; /* now tty points to the proper dev */
-+ icount = &info->icount;
-+ if (! tty)
-+ break;
-+ if (tty->flip.count >= TTY_FLIPBUF_SIZE)
-+ break;
-+ *tty->flip.char_buf_ptr = ch;
-+ *tty->flip.flag_buf_ptr = 0;
-+ icount->rx++;
-+ if (status & RXBRK)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_BREAK;
-+ icount->brk++;
-+ }
-+ // keep track of the statistics
-+ if (status & (RXFRAMERR | RXPARERR | RXOVFERR))
-+ {
-+ if (status & RXPARERR) /* parity error */
-+ icount->parity++;
-+ else
-+ if (status & RXFRAMERR) /* frame error */
-+ icount->frame++;
-+ if (status & RXOVFERR)
-+ {
-+ // Overflow. Reset the RX FIFO
-+ info->port->fifoctl |= RSTRXFIFOS;
-+ icount->overrun++;
-+ }
-+ // check to see if we should ignore the character
-+ // and mask off conditions that should be ignored
-+ if (status & info->ignore_status_mask)
-+ {
-+ if (++ignore > 100 )
-+ break;
-+ goto ignore_char;
-+ }
-+ // Mask off the error conditions we want to ignore
-+ tmp = status & info->read_status_mask;
-+ if (tmp & RXPARERR)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_PARITY;
-+ }
-+ else
-+ if (tmp & RXFRAMERR)
-+ {
-+ *tty->flip.flag_buf_ptr = TTY_FRAME;
-+ }
-+ if (tmp & RXOVFERR)
-+ {
-+ if (tty->flip.count < TTY_FLIPBUF_SIZE)
-+ {
-+ tty->flip.count++;
-+ tty->flip.flag_buf_ptr++;
-+ tty->flip.char_buf_ptr++;
-+ *tty->flip.flag_buf_ptr = TTY_OVERRUN;
-+ }
-+ }
-+ }
-+ tty->flip.flag_buf_ptr++;
-+ tty->flip.char_buf_ptr++;
-+ tty->flip.count++;
-+ }
-+ignore_char:
-+ if (tty)
-+ tty_flip_buffer_push(tty);
-+}
-+
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm_interrupt ()
-+ *
-+ * this is the main interrupt routine for the chip.
-+ * It deals with the multiple ports.
-+ * ------------------------------------------------------------
-+ */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static irqreturn_t bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
-+#else
-+static void bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
-+#endif
-+{
-+ struct bcm_serial * info = lines[0];
-+ UINT16 intStat;
-+
-+ /* get pending interrupt flags from UART */
-+
-+ /* Mask with only the serial interrupts that are enabled */
-+ intStat = info->port->intStatus & info->port->intMask;
-+ while (intStat)
-+ {
-+ if (intStat & RXINT)
-+ receive_chars (info);
-+ else
-+ if (intStat & TXINT)
-+ info->port->intStatus = TXINT;
-+ else /* don't know what it was, so let's mask it */
-+ info->port->intMask &= ~intStat;
-+
-+ intStat = info->port->intStatus & info->port->intMask;
-+ }
-+
-+ // Clear the interrupt
-+ BcmHalInterruptEnable (INTERRUPT_ID_UART);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ return IRQ_HANDLED;
-+#endif
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * startup ()
-+ *
-+ * various initialization tasks
-+ * -------------------------------------------------------------------
-+ */
-+static int startup (struct bcm_serial *info)
-+{
-+ // Port is already started...
-+ return 0;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * shutdown ()
-+ *
-+ * This routine will shutdown a serial port; interrupts are disabled, and
-+ * DTR is dropped if the hangup on close termio flag is on.
-+ * -------------------------------------------------------------------
-+ */
-+static void shutdown (struct bcm_serial * info)
-+{
-+ unsigned long flags;
-+ if (!info->is_initialized)
-+ return;
-+
-+ save_flags (flags);
-+ cli ();
-+
-+ info->port->control &= ~(BRGEN|TXEN|RXEN);
-+ if (info->tty)
-+ set_bit (TTY_IO_ERROR, &info->tty->flags);
-+ info->is_initialized = 0;
-+
-+ restore_flags (flags);
-+}
-+/*
-+ * -------------------------------------------------------------------
-+ * change_speed ()
-+ *
-+ * Set the baud rate, character size, parity and stop bits.
-+ * -------------------------------------------------------------------
-+ */
-+static void change_speed( volatile Uart *pUart, tcflag_t cFlag )
-+{
-+ unsigned long ulFlags, ulBaud, ulClockFreqHz, ulTmp;
-+ save_flags(ulFlags);
-+ cli();
-+ switch( cFlag & (CBAUD | CBAUDEX) )
-+ {
-+ case B115200:
-+ ulBaud = 115200;
-+ break;
-+ case B57600:
-+ ulBaud = 57600;
-+ break;
-+ case B38400:
-+ ulBaud = 38400;
-+ break;
-+ case B19200:
-+ ulBaud = 19200;
-+ break;
-+ case B9600:
-+ ulBaud = 9600;
-+ break;
-+ case B4800:
-+ ulBaud = 4800;
-+ break;
-+ case B2400:
-+ ulBaud = 2400;
-+ break;
-+ case B1800:
-+ ulBaud = 1800;
-+ break;
-+ case B1200:
-+ ulBaud = 1200;
-+ break;
-+ case B600:
-+ ulBaud = 600;
-+ break;
-+ case B300:
-+ ulBaud = 300;
-+ break;
-+ case B200:
-+ ulBaud = 200;
-+ break;
-+ case B150:
-+ ulBaud = 150;
-+ break;
-+ case B134:
-+ ulBaud = 134;
-+ break;
-+ case B110:
-+ ulBaud = 110;
-+ break;
-+ case B75:
-+ ulBaud = 75;
-+ break;
-+ case B50:
-+ ulBaud = 50;
-+ break;
-+ default:
-+ ulBaud = 115200;
-+ break;
-+ }
-+
-+ /* Calculate buad rate. */
-+ ulClockFreqHz = BD_BCM63XX_TIMER_CLOCK_INPUT;
-+ ulTmp = (ulClockFreqHz / ulBaud) / 16;
-+ if( ulTmp & 0x01 )
-+ ulTmp /= 2; /* Rounding up, so sub is already accounted for */
-+ else
-+ ulTmp = (ulTmp / 2) - 1; /* Rounding down so we must sub 1 */
-+ pUart->baudword = ulTmp;
-+
-+ /* Set character size, stop bits and parity. */
-+ switch( cFlag & CSIZE )
-+ {
-+ case CS5:
-+ ulTmp = BITS5SYM; /* select transmit 5 bit data size */
-+ break;
-+ case CS6:
-+ ulTmp = BITS6SYM; /* select transmit 6 bit data size */
-+ break;
-+ case CS7:
-+ ulTmp = BITS7SYM; /* select transmit 7 bit data size */
-+ break;
-+ /*case CS8:*/
-+ default:
-+ ulTmp = BITS8SYM; /* select transmit 8 bit data size */
-+ break;
-+ }
-+ if( cFlag & CSTOPB )
-+ ulTmp |= TWOSTOP; /* select 2 stop bits */
-+ else
-+ ulTmp |= ONESTOP; /* select one stop bit */
-+
-+ /* Write these values into the config reg. */
-+ pUart->config = ulTmp;
-+ pUart->control &= ~(RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN);
-+ switch( cFlag & (PARENB | PARODD) )
-+ {
-+ case PARENB|PARODD:
-+ pUart->control |= RXPARITYEN | TXPARITYEN;
-+ break;
-+ case PARENB:
-+ pUart->control |= RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN;
-+ break;
-+ default:
-+ pUart->control |= 0;
-+ break;
-+ }
-+
-+ /* Reset and flush uart */
-+ pUart->fifoctl = RSTTXFIFOS | RSTRXFIFOS;
-+ restore_flags( ulFlags );
-+}
-+
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_flush_char ()
-+ *
-+ * Nothing to flush. Polled I/O is used.
-+ * -------------------------------------------------------------------
-+ */
-+static void bcm63xx_cons_flush_chars (struct tty_struct *tty)
-+{
-+}
-+
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm63xx_cons_write ()
-+ *
-+ * Main output routine using polled I/O.
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
-+ const unsigned char *buf, int count)
-+{
-+ int c;
-+
-+ for (c = 0; c < count; c++)
-+ _putc(buf[c]);
-+ return count;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm63xx_cons_write_room ()
-+ *
-+ * Compute the amount of space available for writing.
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm63xx_cons_write_room (struct tty_struct *tty)
-+{
-+ /* Pick a number. Any number. Polled I/O is used. */
-+ return 1024;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_chars_in_buffer ()
-+ *
-+ * compute the amount of char left to be transmitted
-+ * -------------------------------------------------------------------
-+ */
-+static int bcm_chars_in_buffer (struct tty_struct *tty)
-+{
-+ return 0;
-+}
-+
-+/*
-+ * -------------------------------------------------------------------
-+ * bcm_flush_buffer ()
-+ *
-+ * Empty the output buffer
-+ * -------------------------------------------------------------------
-+ */
-+static void bcm_flush_buffer (struct tty_struct *tty)
-+{
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm_throttle () and bcm_unthrottle ()
-+ *
-+ * This routine is called by the upper-layer tty layer to signal that
-+ * incoming characters should be throttled (or not).
-+ * ------------------------------------------------------------
-+ */
-+static void bcm_throttle (struct tty_struct *tty)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ if (I_IXOFF(tty))
-+ info->x_char = STOP_CHAR(tty);
-+}
-+
-+static void bcm_unthrottle (struct tty_struct *tty)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ if (I_IXOFF(tty))
-+ {
-+ if (info->x_char)
-+ info->x_char = 0;
-+ else
-+ info->x_char = START_CHAR(tty);
-+ }
-+}
-+
-+static void bcm_send_xchar (struct tty_struct *tty, char ch)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+ info->x_char = ch;
-+ if (ch)
-+ bcm_start (info->tty);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_ioctl () and friends
-+ * ------------------------------------------------------------
-+ */
-+static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo)
-+{
-+ struct serial_struct tmp;
-+
-+ if (!retinfo)
-+ return -EFAULT;
-+
-+ memset (&tmp, 0, sizeof(tmp));
-+ tmp.type = info->type;
-+ tmp.line = info->line;
-+ tmp.port = (int) info->port;
-+ tmp.irq = info->irq;
-+ tmp.flags = 0;
-+ tmp.baud_base = info->baud_base;
-+ tmp.close_delay = info->close_delay;
-+ tmp.closing_wait = info->closing_wait;
-+
-+ return copy_to_user (retinfo, &tmp, sizeof(*retinfo));
-+}
-+
-+static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info)
-+{
-+ struct serial_struct new_serial;
-+ struct bcm_serial old_info;
-+ int retval = 0;
-+
-+ if (!new_info)
-+ return -EFAULT;
-+
-+ copy_from_user (&new_serial, new_info, sizeof(new_serial));
-+ old_info = *info;
-+
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+
-+
-+ if (info->count > 1)
-+ return -EBUSY;
-+
-+ /* OK, past this point, all the error checking has been done.
-+ * At this point, we start making changes.....
-+ */
-+ info->baud_base = new_serial.baud_base;
-+ info->type = new_serial.type;
-+ info->close_delay = new_serial.close_delay;
-+ info->closing_wait = new_serial.closing_wait;
-+ retval = startup (info);
-+ return retval;
-+}
-+
-+/*
-+ * get_lsr_info - get line status register info
-+ *
-+ * Purpose: Let user call ioctl() to get info when the UART physically
-+ * is emptied. On bus types like RS485, the transmitter must
-+ * release the bus after transmitting. This must be done when
-+ * the transmit shift register is empty, not be done when the
-+ * transmit holding register is empty. This functionality
-+ * allows an RS485 driver to be written in user space.
-+ */
-+static int get_lsr_info (struct bcm_serial *info, unsigned int *value)
-+{
-+ return( 0 );
-+}
-+
-+/*
-+ * This routine sends a break character out the serial port.
-+ */
-+static void send_break (struct bcm_serial *info, int duration)
-+{
-+ unsigned long flags;
-+
-+ if (!info->port)
-+ return;
-+
-+ current->state = TASK_INTERRUPTIBLE;
-+
-+ save_flags (flags);
-+ cli();
-+
-+ info->port->control |= XMITBREAK;
-+ schedule_timeout(duration);
-+ info->port->control &= ~XMITBREAK;
-+
-+ restore_flags (flags);
-+}
-+
-+static int bcm_ioctl (struct tty_struct * tty, struct file * file,
-+ unsigned int cmd, unsigned long arg)
-+{
-+ int error;
-+ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
-+ int retval;
-+
-+ if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
-+ (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) &&
-+ (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT))
-+ {
-+ if (tty->flags & (1 << TTY_IO_ERROR))
-+ return -EIO;
-+ }
-+ switch (cmd)
-+ {
-+
-+ case TCSBRK: /* SVID version: non-zero arg --> no break */
-+ retval = tty_check_change (tty);
-+ if (retval)
-+ return retval;
-+ tty_wait_until_sent (tty, 0);
-+ if (!arg)
-+ send_break (info, HZ/4); /* 1/4 second */
-+ return 0;
-+
-+ case TCSBRKP: /* support for POSIX tcsendbreak() */
-+ retval = tty_check_change (tty);
-+ if (retval)
-+ return retval;
-+ tty_wait_until_sent (tty, 0);
-+ send_break (info, arg ? arg*(HZ/10) : HZ/4);
-+ return 0;
-+
-+ case TIOCGSOFTCAR:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(long));
-+ if (error)
-+ return error;
-+ put_user (C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg);
-+ return 0;
-+
-+ case TIOCSSOFTCAR:
-+ error = get_user (arg, (unsigned long *)arg);
-+ if (error)
-+ return error;
-+ tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0));
-+ return 0;
-+
-+ case TIOCGSERIAL:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(struct serial_struct));
-+ if (error)
-+ return error;
-+ return get_serial_info (info, (struct serial_struct *)arg);
-+
-+ case TIOCSSERIAL:
-+ return set_serial_info (info, (struct serial_struct *) arg);
-+
-+ case TIOCSERGETLSR: /* Get line status register */
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(unsigned int));
-+ if (error)
-+ return error;
-+ else
-+ return get_lsr_info (info, (unsigned int *)arg);
-+
-+ case TIOCSERGSTRUCT:
-+ error = verify_area (VERIFY_WRITE, (void *)arg, sizeof(struct bcm_serial));
-+ if (error)
-+ return error;
-+ copy_to_user((struct bcm_serial *)arg, info, sizeof(struct bcm_serial));
-+ return 0;
-+
-+ default:
-+ return -ENOIOCTLCMD;
-+ }
-+ return 0;
-+}
-+
-+static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios)
-+{
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+
-+ if( tty->termios->c_cflag != old_termios->c_cflag )
-+ change_speed (info->port, tty->termios->c_cflag);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * bcm63xx_cons_close()
-+ *
-+ * This routine is called when the serial port gets closed. First, we
-+ * wait for the last remaining data to be sent. Then, we turn off
-+ * the transmit enable and receive enable flags.
-+ * ------------------------------------------------------------
-+ */
-+static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp)
-+{
-+ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
-+ unsigned long flags;
-+
-+ if (!info)
-+ return;
-+
-+ save_flags (flags);
-+ cli();
-+
-+ if (tty_hung_up_p (filp))
-+ {
-+ restore_flags (flags);
-+ return;
-+ }
-+
-+ if ((tty->count == 1) && (info->count != 1))
-+ {
-+
-+ /* Uh, oh. tty->count is 1, which means that the tty
-+ * structure will be freed. Info->count should always
-+ * be one in these conditions. If it's greater than
-+ * one, we've got real problems, since it means the
-+ * serial port won't be shutdown.
-+ */
-+ printk("bcm63xx_cons_close: bad serial port count; tty->count is 1, "
-+ "info->count is %d\n", info->count);
-+ info->count = 1;
-+ }
-+
-+ if (--info->count < 0)
-+ {
-+ printk("ds_close: bad serial port count for ttys%d: %d\n",
-+ info->line, info->count);
-+ info->count = 0;
-+ }
-+
-+ if (info->count)
-+ {
-+ restore_flags (flags);
-+ return;
-+ }
-+
-+ /* Now we wait for the transmit buffer to clear; and we notify
-+ * the line discipline to only process XON/XOFF characters.
-+ */
-+ tty->closing = 1;
-+
-+ /* At this point we stop accepting input. To do this, we
-+ * disable the receive line status interrupts.
-+ */
-+ shutdown (info);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ if (tty->driver->flush_buffer)
-+ tty->driver->flush_buffer (tty);
-+#else
-+ if (tty->driver.flush_buffer)
-+ tty->driver.flush_buffer (tty);
-+#endif
-+ if (tty->ldisc.flush_buffer)
-+ tty->ldisc.flush_buffer (tty);
-+
-+ tty->closing = 0;
-+ info->event = 0;
-+ info->tty = 0;
-+ if (tty->ldisc.num != ldiscs[N_TTY].num)
-+ {
-+ if (tty->ldisc.close)
-+ (tty->ldisc.close)(tty);
-+ tty->ldisc = ldiscs[N_TTY];
-+ tty->termios->c_line = N_TTY;
-+ if (tty->ldisc.open)
-+ (tty->ldisc.open)(tty);
-+ }
-+ if (info->blocked_open)
-+ {
-+ if (info->close_delay)
-+ {
-+ current->state = TASK_INTERRUPTIBLE;
-+ schedule_timeout(info->close_delay);
-+ }
-+ wake_up_interruptible (&info->open_wait);
-+ }
-+ wake_up_interruptible (&info->close_wait);
-+
-+ restore_flags (flags);
-+}
-+
-+/*
-+ * bcm_hangup () --- called by tty_hangup() when a hangup is signaled.
-+ */
-+static void bcm_hangup (struct tty_struct *tty)
-+{
-+
-+ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
-+
-+ shutdown (info);
-+ info->event = 0;
-+ info->count = 0;
-+ info->tty = 0;
-+ wake_up_interruptible (&info->open_wait);
-+}
-+
-+/*
-+ * ------------------------------------------------------------
-+ * rs_open() and friends
-+ * ------------------------------------------------------------
-+ */
-+static int block_til_ready (struct tty_struct *tty, struct file *filp,
-+ struct bcm_serial *info)
-+{
-+ return 0;
-+}
-+
-+/*
-+ * This routine is called whenever a serial port is opened. It
-+ * enables interrupts for a serial port. It also performs the
-+ * serial-specific initialization for the tty structure.
-+ */
-+static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp)
-+{
-+ struct bcm_serial *info;
-+ int retval, line;
-+
-+ // Make sure we're only opening on of the ports we support
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ line = MINOR(tty->driver->cdev.dev) - tty->driver->minor_start;
-+#else
-+ line = MINOR(tty->device) - tty->driver.minor_start;
-+#endif
-+
-+ if ((line < 0) || (line >= BCM_NUM_UARTS))
-+ return -ENODEV;
-+
-+ info = lines[line];
-+
-+ info->port->intMask = 0; /* Clear any pending interrupts */
-+ info->port->intMask = RXINT; /* Enable RX */
-+
-+ info->count++;
-+ tty->driver_data = info;
-+ info->tty = tty;
-+ BcmHalInterruptEnable (INTERRUPT_ID_UART);
-+
-+ // Start up serial port
-+ retval = startup (info);
-+ if (retval)
-+ return retval;
-+
-+ retval = block_til_ready (tty, filp, info);
-+ if (retval)
-+ return retval;
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ info->pgrp = process_group(current);
-+ info->session = current->signal->session;
-+#else
-+ info->session = current->session;
-+ info->pgrp = current->pgrp;
-+#endif
-+
-+ return 0;
-+}
-+
-+/* --------------------------------------------------------------------------
-+ Name: bcm63xx_serialinit
-+ Purpose: Initialize our BCM63xx serial driver
-+-------------------------------------------------------------------------- */
-+static int __init bcm63xx_serialinit(void)
-+{
-+ int i, flags;
-+ struct bcm_serial * info;
-+
-+ // Print the driver version information
-+ printk(VER_STR);
-+
-+ memset(&serial_driver, 0, sizeof(struct tty_driver));
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ serial_driver.owner = THIS_MODULE;
-+ serial_driver.devfs_name = "tts/";
-+#endif
-+ serial_driver.magic = TTY_DRIVER_MAGIC;
-+ serial_driver.name = "ttyS";
-+ serial_driver.major = TTY_MAJOR;
-+ serial_driver.minor_start = 64;
-+ serial_driver.num = BCM_NUM_UARTS;
-+ serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
-+ serial_driver.subtype = SERIAL_TYPE_NORMAL;
-+ serial_driver.init_termios = tty_std_termios;
-+ serial_driver.init_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL;
-+ serial_driver.flags = TTY_DRIVER_REAL_RAW;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+ serial_driver.refcount = serial_refcount;
-+ serial_driver.ttys = serial_table;
-+#else
-+ serial_driver.refcount = &serial_refcount;
-+ serial_driver.table = serial_table;
-+#endif
-+
-+ serial_driver.termios = serial_termios;
-+ serial_driver.termios_locked = serial_termios_locked;
-+ serial_driver.open = bcm63xx_cons_open;
-+ serial_driver.close = bcm63xx_cons_close;
-+ serial_driver.write = bcm63xx_cons_write;
-+ serial_driver.flush_chars = bcm63xx_cons_flush_chars;
-+ serial_driver.write_room = bcm63xx_cons_write_room;
-+ serial_driver.chars_in_buffer = bcm_chars_in_buffer;
-+ serial_driver.flush_buffer = bcm_flush_buffer;
-+ serial_driver.ioctl = bcm_ioctl;
-+ serial_driver.throttle = bcm_throttle;
-+ serial_driver.unthrottle = bcm_unthrottle;
-+ serial_driver.send_xchar = bcm_send_xchar;
-+ serial_driver.set_termios = bcm_set_termios;
-+ serial_driver.stop = bcm_stop;
-+ serial_driver.start = bcm_start;
-+ serial_driver.hangup = bcm_hangup;
-+
-+ if (tty_register_driver (&serial_driver))
-+ panic("Couldn't register serial driver\n");
-+
-+ save_flags(flags); cli();
-+ for (i = 0; i < BCM_NUM_UARTS; i++)
-+ {
-+ info = &multi[i];
-+ lines[i] = info;
-+ info->port = (Uart *) ((char *)UART_BASE + (i * 0x20));
-+ info->irq = (2 - i) + 8;
-+ info->line = i;
-+ info->tty = 0;
-+ info->close_delay = 50;
-+ info->closing_wait = 3000;
-+ info->x_char = 0;
-+ info->event = 0;
-+ info->count = 0;
-+ info->blocked_open = 0;
-+ info->normal_termios = serial_driver.init_termios;
-+ init_waitqueue_head(&info->open_wait);
-+ init_waitqueue_head(&info->close_wait);
-+
-+ /* If we are pointing to address zero then punt - not correctly
-+ * set up in setup.c to handle this.
-+ */
-+ if (! info->port)
-+ return 0;
-+ BcmHalMapInterrupt(bcm_interrupt, 0, INTERRUPT_ID_UART);
-+ }
-+
-+ /* order matters here... the trick is that flags
-+ * is updated... in request_irq - to immediatedly obliterate
-+ * it is unwise.
-+ */
-+ restore_flags(flags);
-+ return 0;
-+}
-+
-+module_init(bcm63xx_serialinit);
-+
-+/* --------------------------------------------------------------------------
-+ Name: bcm_console_print
-+ Purpose: bcm_console_print is registered for printk.
-+ The console_lock must be held when we get here.
-+-------------------------------------------------------------------------- */
-+static void bcm_console_print (struct console * cons, const char * str,
-+ unsigned int count)
-+{
-+ unsigned int i;
-+ //_puts(str);
-+ for(i=0; i<count; i++, str++)
-+ {
-+ _putc(*str);
-+ if (*str == 10)
-+ {
-+ _putc(13);
-+ }
-+ }
-+}
-+
-+static struct tty_driver * bcm_console_device(struct console * c, int *index)
-+{
-+ *index = c->index;
-+ return &serial_driver;
-+}
-+
-+static int __init bcm_console_setup(struct console * co, char * options)
-+{
-+ return 0;
-+}
-+
-+static struct console bcm_sercons = {
-+ .name = "ttyS",
-+ .write = bcm_console_print,
-+ .device = bcm_console_device,
-+ .setup = bcm_console_setup,
-+ .flags = CON_PRINTBUFFER, // CON_CONSDEV, CONSOLE_LINE,
-+ .index = -1,
-+};
-+
-+static int __init bcm63xx_console_init(void)
-+{
-+ register_console(&bcm_sercons);
-+ return 0;
-+}
-+
-+console_initcall(bcm63xx_console_init);
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6338_intr.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6338_intr.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6338_intr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6338_intr.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,72 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __6338_INTR_H
-+#define __6338_INTR_H
-+
-+#ifdef __cplusplus
-+ extern "C" {
-+#endif
-+
-+/*=====================================================================*/
-+/* BCM6338 External Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define INTERRUPT_ID_EXTERNAL_0 3
-+#define INTERRUPT_ID_EXTERNAL_1 4
-+#define INTERRUPT_ID_EXTERNAL_2 5
-+#define INTERRUPT_ID_EXTERNAL_3 6
-+
-+/*=====================================================================*/
-+/* BCM6338 Timer Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define MIPS_TIMER_INT 7
-+
-+/*=====================================================================*/
-+/* Peripheral ISR Table Offset */
-+/*=====================================================================*/
-+#define INTERNAL_ISR_TABLE_OFFSET 8
-+
-+/*=====================================================================*/
-+/* Logical Peripheral Interrupt IDs */
-+/*=====================================================================*/
-+
-+#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
-+#define INTERRUPT_ID_SPI (INTERNAL_ISR_TABLE_OFFSET + 1)
-+#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
-+#define INTERRUPT_ID_DG (INTERNAL_ISR_TABLE_OFFSET + 4)
-+#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 5)
-+#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 6)
-+#define INTERRUPT_ID_USBS (INTERNAL_ISR_TABLE_OFFSET + 7)
-+#define INTERRUPT_ID_EMAC1 (INTERNAL_ISR_TABLE_OFFSET + 8)
-+#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 9)
-+#define INTERRUPT_ID_SDRAM (INTERNAL_ISR_TABLE_OFFSET + 10)
-+#define INTERRUPT_ID_USB_CNTL_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 11)
-+#define INTERRUPT_ID_USB_CNTL_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 12)
-+#define INTERRUPT_ID_USB_BULK_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 13)
-+#define INTERRUPT_ID_USB_BULK_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 14)
-+#define INTERRUPT_ID_EMAC1_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 15)
-+#define INTERRUPT_ID_EMAC1_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 16)
-+#define INTERRUPT_ID_SDIO (INTERNAL_ISR_TABLE_OFFSET + 17)
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif /* __BCM6338_H */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,341 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __BCM6338_MAP_H
-+#define __BCM6338_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+
-+#define PERF_BASE 0xfffe0000
-+#define TIMR_BASE 0xfffe0200
-+#define UART_BASE 0xfffe0300
-+#define GPIO_BASE 0xfffe0400
-+#define SPI_BASE 0xfffe0c00
-+
-+typedef struct PerfControl {
-+ uint32 RevID;
-+ uint16 testControl;
-+ uint16 blkEnables;
-+#define EMAC_CLK_EN 0x0010
-+#define USBS_CLK_EN 0x0010
-+#define SAR_CLK_EN 0x0020
-+
-+#define SPI_CLK_EN 0x0200
-+
-+ uint32 pll_control;
-+#define SOFT_RESET 0x00000001
-+
-+ uint32 IrqMask;
-+ uint32 IrqStatus;
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 5
-+#define EI_CLEAR_SHFT 10
-+#define EI_MASK_SHFT 15
-+#define EI_INSENS_SHFT 20
-+#define EI_LEVEL_SHFT 25
-+
-+ uint32 unused[4]; /* (18) */
-+ uint32 BlockSoftReset; /* (28) */
-+#define BSR_SPI 0x00000001
-+#define BSR_EMAC 0x00000004
-+#define BSR_USBH 0x00000008
-+#define BSR_USBS 0x00000010
-+#define BSR_ADSL 0x00000020
-+#define BSR_DMAMEM 0x00000040
-+#define BSR_SAR 0x00000080
-+#define BSR_ACLC 0x00000100
-+#define BSR_ADSL_MIPS_PLL 0x00000400
-+#define BSR_ALL_BLOCKS \
-+ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
-+ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
-+} PerfControl;
-+
-+#define PERF ((volatile PerfControl * const) PERF_BASE)
-+
-+
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+ byte config;
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+ /* 4-LSBS represent STOP bits/char
-+ * in 1/8 bit-time intervals. Zero
-+ * represents 1/8 stop bit interval.
-+ * Fifteen represents 2 stop bits.
-+ */
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ /* 5-bit TimeoutCnt is in low bits of this register.
-+ * This count represents the number of characters
-+ * idle times before setting receive Irq when below threshold
-+ */
-+ uint32 baudword;
-+ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
-+ */
-+
-+ byte txf_levl; /* Read-only fifo depth */
-+ byte rxf_levl; /* Read-only fifo depth */
-+ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
-+ * RxThreshold. Irq can be asserted
-+ * when rx fifo> thresh, txfifo<thresh
-+ */
-+ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
-+ * if these bits are also enabled to GPIO_o
-+ */
-+#define DTREN 0x01
-+#define RTSEN 0x02
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
-+ * detect irq on rising AND falling
-+ * edges for corresponding GPIO_i
-+ * if enabled (edge insensitive)
-+ */
-+ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
-+ * 0 for negedge sense if
-+ * not configured for edge
-+ * insensitive (see above)
-+ * Lower 4 bits: Mask to enable change
-+ * detection IRQ for corresponding
-+ * GPIO_i
-+ */
-+ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
-+ * have changed (may set IRQ).
-+ * read automatically clears bit
-+ * Lower 4 bits are actual status
-+ */
-+
-+ uint16 intMask; /* Same Bit defs for Mask and status */
-+ uint16 intStatus;
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data; /* Write to TX, Read from RX */
-+ /* bits 11:8 are BRK,PAR,FRM errors */
-+
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+typedef struct GpioControl {
-+ uint32 unused0;
-+ uint32 GPIODir; /* bits 7:0 */
-+ uint32 unused1;
-+ uint32 GPIOio; /* bits 7:0 */
-+ uint32 LEDCtrl;
-+#define LED3_STROBE 0x08000000
-+#define LED2_STROBE 0x04000000
-+#define LED1_STROBE 0x02000000
-+#define LED0_STROBE 0x01000000
-+#define LED_TEST 0x00010000
-+#define LED3_DISABLE_LINK_ACT 0x00008000
-+#define LED2_DISABLE_LINK_ACT 0x00004000
-+#define LED1_DISABLE_LINK_ACT 0x00002000
-+#define LED0_DISABLE_LINK_ACT 0x00001000
-+#define LED_INTERVAL_SET_MASK 0x00000f00
-+#define LED_INTERVAL_SET_320MS 0x00000500
-+#define LED_INTERVAL_SET_160MS 0x00000400
-+#define LED_INTERVAL_SET_80MS 0x00000300
-+#define LED_INTERVAL_SET_40MS 0x00000200
-+#define LED_INTERVAL_SET_20MS 0x00000100
-+#define LED3_ON 0x00000080
-+#define LED2_ON 0x00000040
-+#define LED1_ON 0x00000020
-+#define LED0_ON 0x00000010
-+#define LED3_ENABLE 0x00000008
-+#define LED2_ENABLE 0x00000004
-+#define LED1_ENABLE 0x00000002
-+#define LED0_ENABLE 0x00000001
-+ uint32 SpiSlaveCfg;
-+#define SPI_SLAVE_RESET 0x00010000
-+#define SPI_RESTRICT 0x00000400
-+#define SPI_DELAY_DISABLE 0x00000200
-+#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
-+#define SPI_SER_ADDR_CFG_MASK 0x0000000c
-+#define SPI_MODE 0x00000001
-+ uint32 vRegConfig;
-+} GpioControl;
-+
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+/* Number to mask conversion macro used for GPIODir and GPIOio */
-+#define GPIO_NUM_MAX_BITS_MASK 0x0f
-+#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
-+
-+/*
-+** Spi Controller
-+*/
-+
-+typedef struct SpiControl {
-+ uint16 spiCmd; /* (0x0): SPI command */
-+#define SPI_CMD_START_IMMEDIATE 3
-+
-+#define SPI_CMD_COMMAND_SHIFT 0
-+#define SPI_CMD_DEVICE_ID_SHIFT 4
-+#define SPI_CMD_PREPEND_BYTE_CNT_SHIFT 8
-+
-+ byte spiIntStatus; /* (0x2): SPI interrupt status */
-+ byte spiMaskIntStatus; /* (0x3): SPI masked interrupt status */
-+
-+ byte spiIntMask; /* (0x4): SPI interrupt mask */
-+#define SPI_INTR_CMD_DONE 0x01
-+#define SPI_INTR_CLEAR_ALL 0x1f
-+
-+ byte spiStatus; /* (0x5): SPI status */
-+
-+ byte spiClkCfg; /* (0x6): SPI clock configuration */
-+
-+ byte spiFillByte; /* (0x7): SPI fill byte */
-+
-+ byte unused0;
-+ byte spiMsgTail; /* (0x9): msgtail */
-+ byte unused1;
-+ byte spiRxTail; /* (0xB): rxtail */
-+
-+ uint32 unused2[13]; /* (0x0c - 0x3c) reserved */
-+
-+ byte spiMsgCtl; /* (0x40) control byte */
-+#define HALF_DUPLEX_W 1
-+#define HALF_DUPLEX_R 2
-+#define SPI_MSG_TYPE_SHIFT 6
-+#define SPI_BYTE_CNT_SHIFT 0
-+ byte spiMsgData[63]; /* (0x41 - 0x7f) msg data */
-+ byte spiRxDataFifo[64]; /* (0x80 - 0xbf) rx data */
-+ byte unused3[64]; /* (0xc0 - 0xff) reserved */
-+} SpiControl;
-+
-+#define SPI ((volatile SpiControl * const) SPI_BASE)
-+
-+/*
-+** External Bus Interface
-+*/
-+typedef struct EbiChipSelect {
-+ uint32 base; /* base address in upper 24 bits */
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+ uint32 config;
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_WREN 0x00000020 /* enable posted writes */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert something,
-+ ** don't know what yet */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. use fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+} EbiChipSelect;
-+
-+typedef struct MpiRegisters {
-+ EbiChipSelect cs[1]; /* size chip select configuration */
-+} MpiRegisters;
-+
-+#define MPI ((volatile MpiRegisters * const) MPI_BASE)
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6345_intr.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6345_intr.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6345_intr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6345_intr.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,78 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __6345_INTR_H
-+#define __6345_INTR_H
-+
-+#ifdef __cplusplus
-+ extern "C" {
-+#endif
-+
-+/*=====================================================================*/
-+/* BCM6345 External Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define INTERRUPT_ID_EXTERNAL_0 3
-+#define INTERRUPT_ID_EXTERNAL_1 4
-+#define INTERRUPT_ID_EXTERNAL_2 5
-+#define INTERRUPT_ID_EXTERNAL_3 6
-+
-+/*=====================================================================*/
-+/* BCM6345 Timer Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define MIPS_TIMER_INT 7
-+
-+/*=====================================================================*/
-+/* Peripheral ISR Table Offset */
-+/*=====================================================================*/
-+#define INTERNAL_ISR_TABLE_OFFSET 8
-+#define DMA_ISR_TABLE_OFFSET (INTERNAL_ISR_TABLE_OFFSET + 13)
-+
-+/*=====================================================================*/
-+/* Logical Peripheral Interrupt IDs */
-+/*=====================================================================*/
-+
-+/* Internal peripheral interrupt IDs */
-+#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
-+#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
-+#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 3)
-+#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 4)
-+#define INTERRUPT_ID_USB (INTERNAL_ISR_TABLE_OFFSET + 5)
-+#define INTERRUPT_ID_EMAC (INTERNAL_ISR_TABLE_OFFSET + 8)
-+#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 12)
-+
-+/* DMA channel interrupt IDs */
-+#define INTERRUPT_ID_EMAC_RX_CHAN (DMA_ISR_TABLE_OFFSET + EMAC_RX_CHAN)
-+#define INTERRUPT_ID_EMAC_TX_CHAN (DMA_ISR_TABLE_OFFSET + EMAC_TX_CHAN)
-+#define INTERRUPT_ID_EBI_RX_CHAN (DMA_ISR_TABLE_OFFSET + EBI_RX_CHAN)
-+#define INTERRUPT_ID_EBI_TX_CHAN (DMA_ISR_TABLE_OFFSET + EBI_TX_CHAN)
-+#define INTERRUPT_ID_RESERVED_RX_CHAN (DMA_ISR_TABLE_OFFSET + RESERVED_RX_CHAN)
-+#define INTERRUPT_ID_RESERVED_TX_CHAN (DMA_ISR_TABLE_OFFSET + RESERVED_TX_CHAN)
-+#define INTERRUPT_ID_USB_BULK_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_BULK_RX_CHAN)
-+#define INTERRUPT_ID_USB_BULK_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_BULK_TX_CHAN)
-+#define INTERRUPT_ID_USB_CNTL_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_CNTL_RX_CHAN)
-+#define INTERRUPT_ID_USB_CNTL_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_CNTL_TX_CHAN)
-+#define INTERRUPT_ID_USB_ISO_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_ISO_RX_CHAN)
-+#define INTERRUPT_ID_USB_ISO_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_ISO_TX_CHAN)
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif /* __BCM6345_H */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,169 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __BCM6345_MAP_H
-+#define __BCM6345_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+#include "6345_intr.h"
-+
-+typedef struct IntControl {
-+ uint32 RevID;
-+ uint16 testControl;
-+ uint16 blkEnables;
-+#define USB_CLK_EN 0x0100
-+#define EMAC_CLK_EN 0x0080
-+#define UART_CLK_EN 0x0008
-+#define CPU_CLK_EN 0x0001
-+
-+ uint32 pll_control;
-+#define SOFT_RESET 0x00000001
-+
-+ uint32 IrqMask;
-+ uint32 IrqStatus;
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 4
-+#define EI_CLEAR_SHFT 8
-+#define EI_MASK_SHFT 12
-+#define EI_INSENS_SHFT 16
-+#define EI_LEVEL_SHFT 20
-+} IntControl;
-+
-+#define INTC_BASE 0xfffe0000
-+#define PERF ((volatile IntControl * const) INTC_BASE)
-+
-+#define TIMR_BASE 0xfffe0200
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+ byte config;
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define XMITBREAK 0x40
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ uint32 baudword;
-+
-+ byte txf_levl;
-+ byte rxf_levl;
-+ byte fifocfg;
-+ byte prog_out;
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense;
-+ byte DeltaIPConfig_Mask;
-+ byte DeltaIP_SyncIP;
-+ uint16 intMask;
-+ uint16 intStatus;
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOEMT 0x0020
-+#define RXOVFERR 0x0080
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data;
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART_BASE 0xfffe0300
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+typedef struct GpioControl {
-+ uint16 unused0;
-+ byte unused1;
-+ byte TBusSel;
-+
-+ uint16 unused2;
-+ uint16 GPIODir;
-+ byte unused3;
-+ byte Leds;
-+ uint16 GPIOio;
-+
-+ uint32 UartCtl;
-+} GpioControl;
-+
-+#define GPIO_BASE 0xfffe0400
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+#define GPIO_NUM_MAX_BITS_MASK 0x0f
-+#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6348_intr.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6348_intr.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6348_intr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6348_intr.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,80 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __6348_INTR_H
-+#define __6348_INTR_H
-+
-+#ifdef __cplusplus
-+ extern "C" {
-+#endif
-+
-+/*=====================================================================*/
-+/* BCM6348 External Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define INTERRUPT_ID_EXTERNAL_0 3
-+#define INTERRUPT_ID_EXTERNAL_1 4
-+#define INTERRUPT_ID_EXTERNAL_2 5
-+#define INTERRUPT_ID_EXTERNAL_3 6
-+
-+/*=====================================================================*/
-+/* BCM6348 Timer Interrupt Level Assignments */
-+/*=====================================================================*/
-+#define MIPS_TIMER_INT 7
-+
-+/*=====================================================================*/
-+/* Peripheral ISR Table Offset */
-+/*=====================================================================*/
-+#define INTERNAL_ISR_TABLE_OFFSET 8
-+
-+/*=====================================================================*/
-+/* Logical Peripheral Interrupt IDs */
-+/*=====================================================================*/
-+
-+#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
-+#define INTERRUPT_ID_SPI (INTERNAL_ISR_TABLE_OFFSET + 1)
-+#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
-+#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 4)
-+#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 5)
-+#define INTERRUPT_ID_USBS (INTERNAL_ISR_TABLE_OFFSET + 6)
-+#define INTERRUPT_ID_EMAC2 (INTERNAL_ISR_TABLE_OFFSET + 7)
-+#define INTERRUPT_ID_EMAC1 (INTERNAL_ISR_TABLE_OFFSET + 8)
-+#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 9)
-+#define INTERRUPT_ID_M2M (INTERNAL_ISR_TABLE_OFFSET + 10)
-+#define INTERRUPT_ID_ACLC (INTERNAL_ISR_TABLE_OFFSET + 11)
-+#define INTERRUPT_ID_USBH (INTERNAL_ISR_TABLE_OFFSET + 12)
-+#define INTERRUPT_ID_SDRAM (INTERNAL_ISR_TABLE_OFFSET + 13)
-+#define INTERRUPT_ID_USB_CNTL_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 14)
-+#define INTERRUPT_ID_USB_CNTL_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 15)
-+#define INTERRUPT_ID_USB_BULK_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 16)
-+#define INTERRUPT_ID_USB_BULK_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 17)
-+#define INTERRUPT_ID_USB_ISO_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 18)
-+#define INTERRUPT_ID_USB_ISO_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 19)
-+#define INTERRUPT_ID_EMAC1_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 20)
-+#define INTERRUPT_ID_EMAC1_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 21)
-+#define INTERRUPT_ID_EMAC2_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 22)
-+#define INTERRUPT_ID_EMAC2_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 23)
-+#define INTERRUPT_ID_MPI (INTERNAL_ISR_TABLE_OFFSET + 24)
-+#define INTERRUPT_ID_DG (INTERNAL_ISR_TABLE_OFFSET + 25)
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif /* __BCM6348_H */
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,508 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __BCM6348_MAP_H
-+#define __BCM6348_MAP_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+#include "bcmtypes.h"
-+
-+#define PERF_BASE 0xfffe0000
-+#define TIMR_BASE 0xfffe0200
-+#define UART_BASE 0xfffe0300
-+#define GPIO_BASE 0xfffe0400
-+#define MPI_BASE 0xfffe2000 /* MPI control registers */
-+#define USB_HOST_BASE 0xfffe1b00 /* USB host registers */
-+#define USB_HOST_NON_OHCI 0xfffe1c00 /* USB host non-OHCI registers */
-+
-+typedef struct PerfControl {
-+ uint32 RevID;
-+ uint16 testControl;
-+ uint16 blkEnables;
-+#define EMAC_CLK_EN 0x0010
-+#define SAR_CLK_EN 0x0020
-+#define USBS_CLK_EN 0x0040
-+#define USBH_CLK_EN 0x0100
-+
-+ uint32 pll_control;
-+#define SOFT_RESET 0x00000001
-+
-+ uint32 IrqMask;
-+ uint32 IrqStatus;
-+
-+ uint32 ExtIrqCfg;
-+#define EI_SENSE_SHFT 0
-+#define EI_STATUS_SHFT 5
-+#define EI_CLEAR_SHFT 10
-+#define EI_MASK_SHFT 15
-+#define EI_INSENS_SHFT 20
-+#define EI_LEVEL_SHFT 25
-+
-+ uint32 unused[4]; /* (18) */
-+ uint32 BlockSoftReset; /* (28) */
-+#define BSR_SPI 0x00000001
-+#define BSR_EMAC 0x00000004
-+#define BSR_USBH 0x00000008
-+#define BSR_USBS 0x00000010
-+#define BSR_ADSL 0x00000020
-+#define BSR_DMAMEM 0x00000040
-+#define BSR_SAR 0x00000080
-+#define BSR_ACLC 0x00000100
-+#define BSR_ADSL_MIPS_PLL 0x00000400
-+#define BSR_ALL_BLOCKS \
-+ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
-+ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
-+ uint32 unused2[2]; /* (2c) */
-+ uint32 PllStrap; /* (34) */
-+#define PLL_N1_SHFT 20
-+#define PLL_N1_MASK (7<<PLL_N1_SHFT)
-+#define PLL_N2_SHFT 15
-+#define PLL_N2_MASK (0x1f<<PLL_N2_SHFT)
-+#define PLL_M1_REF_SHFT 12
-+#define PLL_M1_REF_MASK (7<<PLL_M1_REF_SHFT)
-+#define PLL_M2_REF_SHFT 9
-+#define PLL_M2_REF_MASK (7<<PLL_M2_REF_SHFT)
-+#define PLL_M1_CPU_SHFT 6
-+#define PLL_M1_CPU_MASK (7<<PLL_M1_CPU_SHFT)
-+#define PLL_M1_BUS_SHFT 3
-+#define PLL_M1_BUS_MASK (7<<PLL_M1_BUS_SHFT)
-+#define PLL_M2_BUS_SHFT 0
-+#define PLL_M2_BUS_MASK (7<<PLL_M2_BUS_SHFT)
-+} PerfControl;
-+
-+#define PERF ((volatile PerfControl * const) PERF_BASE)
-+
-+typedef struct Timer {
-+ uint16 unused0;
-+ byte TimerMask;
-+#define TIMER0EN 0x01
-+#define TIMER1EN 0x02
-+#define TIMER2EN 0x04
-+ byte TimerInts;
-+#define TIMER0 0x01
-+#define TIMER1 0x02
-+#define TIMER2 0x04
-+#define WATCHDOG 0x08
-+ uint32 TimerCtl0;
-+ uint32 TimerCtl1;
-+ uint32 TimerCtl2;
-+#define TIMERENABLE 0x80000000
-+#define RSTCNTCLR 0x40000000
-+ uint32 TimerCnt0;
-+ uint32 TimerCnt1;
-+ uint32 TimerCnt2;
-+ uint32 WatchDogDefCount;
-+
-+ /* Write 0xff00 0x00ff to Start timer
-+ * Write 0xee00 0x00ee to Stop and re-load default count
-+ * Read from this register returns current watch dog count
-+ */
-+ uint32 WatchDogCtl;
-+
-+ /* Number of 40-MHz ticks for WD Reset pulse to last */
-+ uint32 WDResetCount;
-+} Timer;
-+
-+#define TIMER ((volatile Timer * const) TIMR_BASE)
-+
-+typedef struct UartChannel {
-+ byte unused0;
-+ byte control;
-+#define BRGEN 0x80 /* Control register bit defs */
-+#define TXEN 0x40
-+#define RXEN 0x20
-+#define LOOPBK 0x10
-+#define TXPARITYEN 0x08
-+#define TXPARITYEVEN 0x04
-+#define RXPARITYEN 0x02
-+#define RXPARITYEVEN 0x01
-+
-+ byte config;
-+#define XMITBREAK 0x40
-+#define BITS5SYM 0x00
-+#define BITS6SYM 0x10
-+#define BITS7SYM 0x20
-+#define BITS8SYM 0x30
-+#define ONESTOP 0x07
-+#define TWOSTOP 0x0f
-+ /* 4-LSBS represent STOP bits/char
-+ * in 1/8 bit-time intervals. Zero
-+ * represents 1/8 stop bit interval.
-+ * Fifteen represents 2 stop bits.
-+ */
-+ byte fifoctl;
-+#define RSTTXFIFOS 0x80
-+#define RSTRXFIFOS 0x40
-+ /* 5-bit TimeoutCnt is in low bits of this register.
-+ * This count represents the number of characters
-+ * idle times before setting receive Irq when below threshold
-+ */
-+ uint32 baudword;
-+ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
-+ */
-+
-+ byte txf_levl; /* Read-only fifo depth */
-+ byte rxf_levl; /* Read-only fifo depth */
-+ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
-+ * RxThreshold. Irq can be asserted
-+ * when rx fifo> thresh, txfifo<thresh
-+ */
-+ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
-+ * if these bits are also enabled to GPIO_o
-+ */
-+#define DTREN 0x01
-+#define RTSEN 0x02
-+
-+ byte unused1;
-+ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
-+ * detect irq on rising AND falling
-+ * edges for corresponding GPIO_i
-+ * if enabled (edge insensitive)
-+ */
-+ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
-+ * 0 for negedge sense if
-+ * not configured for edge
-+ * insensitive (see above)
-+ * Lower 4 bits: Mask to enable change
-+ * detection IRQ for corresponding
-+ * GPIO_i
-+ */
-+ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
-+ * have changed (may set IRQ).
-+ * read automatically clears bit
-+ * Lower 4 bits are actual status
-+ */
-+
-+ uint16 intMask; /* Same Bit defs for Mask and status */
-+ uint16 intStatus;
-+#define DELTAIP 0x0001
-+#define TXUNDERR 0x0002
-+#define TXOVFERR 0x0004
-+#define TXFIFOTHOLD 0x0008
-+#define TXREADLATCH 0x0010
-+#define TXFIFOEMT 0x0020
-+#define RXUNDERR 0x0040
-+#define RXOVFERR 0x0080
-+#define RXTIMEOUT 0x0100
-+#define RXFIFOFULL 0x0200
-+#define RXFIFOTHOLD 0x0400
-+#define RXFIFONE 0x0800
-+#define RXFRAMERR 0x1000
-+#define RXPARERR 0x2000
-+#define RXBRK 0x4000
-+
-+ uint16 unused2;
-+ uint16 Data; /* Write to TX, Read from RX */
-+ /* bits 11:8 are BRK,PAR,FRM errors */
-+
-+ uint32 unused3;
-+ uint32 unused4;
-+} Uart;
-+
-+#define UART ((volatile Uart * const) UART_BASE)
-+
-+typedef struct GpioControl {
-+ uint32 GPIODir_high; /* bits 36:32 */
-+ uint32 GPIODir; /* bits 31:00 */
-+ uint32 GPIOio_high; /* bits 36:32 */
-+ uint32 GPIOio; /* bits 31:00 */
-+ uint32 LEDCtrl;
-+#define LED3_STROBE 0x08000000
-+#define LED2_STROBE 0x04000000
-+#define LED1_STROBE 0x02000000
-+#define LED0_STROBE 0x01000000
-+#define LED_TEST 0x00010000
-+#define LED3_DISABLE_LINK_ACT 0x00008000
-+#define LED2_DISABLE_LINK_ACT 0x00004000
-+#define LED1_DISABLE_LINK_ACT 0x00002000
-+#define LED0_DISABLE_LINK_ACT 0x00001000
-+#define LED_INTERVAL_SET_MASK 0x00000f00
-+#define LED_INTERVAL_SET_320MS 0x00000500
-+#define LED_INTERVAL_SET_160MS 0x00000400
-+#define LED_INTERVAL_SET_80MS 0x00000300
-+#define LED_INTERVAL_SET_40MS 0x00000200
-+#define LED_INTERVAL_SET_20MS 0x00000100
-+#define LED3_ON 0x00000080
-+#define LED2_ON 0x00000040
-+#define LED1_ON 0x00000020
-+#define LED0_ON 0x00000010
-+#define LED3_ENABLE 0x00000008
-+#define LED2_ENABLE 0x00000004
-+#define LED1_ENABLE 0x00000002
-+#define LED0_ENABLE 0x00000001
-+ uint32 SpiSlaveCfg;
-+#define SPI_SLAVE_RESET 0x00010000
-+#define SPI_RESTRICT 0x00000400
-+#define SPI_DELAY_DISABLE 0x00000200
-+#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
-+#define SPI_SER_ADDR_CFG_MASK 0x0000000c
-+#define SPI_MODE 0x00000001
-+ uint32 GPIOMode;
-+#define GROUP4_DIAG 0x00090000
-+#define GROUP4_UTOPIA 0x00080000
-+#define GROUP4_LEGACY_LED 0x00030000
-+#define GROUP4_MII_SNOOP 0x00020000
-+#define GROUP4_EXT_EPHY 0x00010000
-+#define GROUP3_DIAG 0x00009000
-+#define GROUP3_UTOPIA 0x00008000
-+#define GROUP3_EXT_MII 0x00007000
-+#define GROUP2_DIAG 0x00000900
-+#define GROUP2_PCI 0x00000500
-+#define GROUP1_DIAG 0x00000090
-+#define GROUP1_UTOPIA 0x00000080
-+#define GROUP1_SPI_UART 0x00000060
-+#define GROUP1_SPI_MASTER 0x00000060
-+#define GROUP1_MII_PCCARD 0x00000040
-+#define GROUP1_MII_SNOOP 0x00000020
-+#define GROUP1_EXT_EPHY 0x00000010
-+#define GROUP0_DIAG 0x00000009
-+#define GROUP0_EXT_MII 0x00000007
-+
-+} GpioControl;
-+
-+#define GPIO ((volatile GpioControl * const) GPIO_BASE)
-+
-+/* Number to mask conversion macro used for GPIODir and GPIOio */
-+#define GPIO_NUM_TOTAL_BITS_MASK 0x3f
-+#define GPIO_NUM_MAX_BITS_MASK 0x1f
-+#define GPIO_NUM_TO_MASK(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) < 32) ? (1 << ((X) & GPIO_NUM_MAX_BITS_MASK)) : (0) )
-+
-+/* Number to mask conversion macro used for GPIODir_high and GPIOio_high */
-+#define GPIO_NUM_MAX_BITS_MASK_HIGH 0x07
-+#define GPIO_NUM_TO_MASK_HIGH(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) >= 32) ? (1 << ((X-32) & GPIO_NUM_MAX_BITS_MASK_HIGH)) : (0) )
-+
-+
-+/*
-+** External Bus Interface
-+*/
-+typedef struct EbiChipSelect {
-+ uint32 base; /* base address in upper 24 bits */
-+#define EBI_SIZE_8K 0
-+#define EBI_SIZE_16K 1
-+#define EBI_SIZE_32K 2
-+#define EBI_SIZE_64K 3
-+#define EBI_SIZE_128K 4
-+#define EBI_SIZE_256K 5
-+#define EBI_SIZE_512K 6
-+#define EBI_SIZE_1M 7
-+#define EBI_SIZE_2M 8
-+#define EBI_SIZE_4M 9
-+#define EBI_SIZE_8M 10
-+#define EBI_SIZE_16M 11
-+#define EBI_SIZE_32M 12
-+#define EBI_SIZE_64M 13
-+#define EBI_SIZE_128M 14
-+#define EBI_SIZE_256M 15
-+ uint32 config;
-+#define EBI_ENABLE 0x00000001 /* .. enable this range */
-+#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
-+#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
-+#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
-+#define EBI_WREN 0x00000020 /* enable posted writes */
-+#define EBI_POLARITY 0x00000040 /* .. set to invert something,
-+ ** don't know what yet */
-+#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
-+#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
-+#define EBI_FIFO 0x00000200 /* .. use fifo */
-+#define EBI_RE 0x00000400 /* .. Reverse Endian */
-+} EbiChipSelect;
-+
-+typedef struct MpiRegisters {
-+ EbiChipSelect cs[7]; /* size chip select configuration */
-+#define EBI_CS0_BASE 0
-+#define EBI_CS1_BASE 1
-+#define EBI_CS2_BASE 2
-+#define EBI_CS3_BASE 3
-+#define PCMCIA_COMMON_BASE 4
-+#define PCMCIA_ATTRIBUTE_BASE 5
-+#define PCMCIA_IO_BASE 6
-+ uint32 unused0[2]; /* reserved */
-+ uint32 ebi_control; /* ebi control */
-+ uint32 unused1[4]; /* reserved */
-+#define EBI_ACCESS_TIMEOUT 0x000007FF
-+ uint32 pcmcia_cntl1; /* pcmcia control 1 */
-+#define PCCARD_CARD_RESET 0x00040000
-+#define CARDBUS_ENABLE 0x00008000
-+#define PCMCIA_ENABLE 0x00004000
-+#define PCMCIA_GPIO_ENABLE 0x00002000
-+#define CARDBUS_IDSEL 0x00001F00
-+#define VS2_OEN 0x00000080
-+#define VS1_OEN 0x00000040
-+#define VS2_OUT 0x00000020
-+#define VS1_OUT 0x00000010
-+#define VS2_IN 0x00000008
-+#define VS1_IN 0x00000004
-+#define CD2_IN 0x00000002
-+#define CD1_IN 0x00000001
-+#define VS_MASK 0x0000000C
-+#define CD_MASK 0x00000003
-+ uint32 unused2; /* reserved */
-+ uint32 pcmcia_cntl2; /* pcmcia control 2 */
-+#define PCMCIA_BYTESWAP_DIS 0x00000002
-+#define PCMCIA_HALFWORD_EN 0x00000001
-+#define RW_ACTIVE_CNT_BIT 2
-+#define INACTIVE_CNT_BIT 8
-+#define CE_SETUP_CNT_BIT 16
-+#define CE_HOLD_CNT_BIT 24
-+ uint32 unused3[40]; /* reserved */
-+
-+ uint32 sp0range; /* PCI to internal system bus address space */
-+ uint32 sp0remap;
-+ uint32 sp0cfg;
-+ uint32 sp1range;
-+ uint32 sp1remap;
-+ uint32 sp1cfg;
-+
-+ uint32 EndianCfg;
-+
-+ uint32 l2pcfgctl; /* internal system bus to PCI IO/Cfg control */
-+#define DIR_CFG_SEL 0x80000000 /* change from PCI I/O access to PCI config access */
-+#define DIR_CFG_USEREG 0x40000000 /* use this register info for PCI configuration access */
-+#define DEVICE_NUMBER 0x00007C00 /* device number for the PCI configuration access */
-+#define FUNC_NUMBER 0x00000300 /* function number for the PCI configuration access */
-+#define REG_NUMBER 0x000000FC /* register number for the PCI configuration access */
-+#define CONFIG_TYPE 0x00000003 /* configuration type for the PCI configuration access */
-+
-+ uint32 l2pmrange1; /* internal system bus to PCI memory space */
-+#define PCI_SIZE_64K 0xFFFF0000
-+#define PCI_SIZE_128K 0xFFFE0000
-+#define PCI_SIZE_256K 0xFFFC0000
-+#define PCI_SIZE_512K 0xFFF80000
-+#define PCI_SIZE_1M 0xFFF00000
-+#define PCI_SIZE_2M 0xFFE00000
-+#define PCI_SIZE_4M 0xFFC00000
-+#define PCI_SIZE_8M 0xFF800000
-+#define PCI_SIZE_16M 0xFF000000
-+#define PCI_SIZE_32M 0xFE000000
-+ uint32 l2pmbase1; /* kseg0 or kseg1 address & 0x1FFFFFFF */
-+ uint32 l2pmremap1;
-+#define CARDBUS_MEM 0x00000004
-+#define MEM_WINDOW_EN 0x00000001
-+ uint32 l2pmrange2;
-+ uint32 l2pmbase2;
-+ uint32 l2pmremap2;
-+ uint32 l2piorange; /* internal system bus to PCI I/O space */
-+ uint32 l2piobase;
-+ uint32 l2pioremap;
-+
-+ uint32 pcimodesel;
-+#define PCI2_INT_BUS_RD_PREFECH 0x000000F0
-+#define PCI_BAR2_NOSWAP 0x00000002 /* BAR at offset 0x20 */
-+#define PCI_BAR1_NOSWAP 0x00000001 /* BAR at affset 0x1c */
-+
-+ uint32 pciintstat; /* PCI interrupt mask/status */
-+#define MAILBOX1_SENT 0x08
-+#define MAILBOX0_SENT 0x04
-+#define MAILBOX1_MSG_RCV 0x02
-+#define MAILBOX0_MSG_RCV 0x01
-+ uint32 locbuscntrl; /* internal system bus control */
-+#define DIR_U2P_NOSWAP 0x00000002
-+#define EN_PCI_GPIO 0x00000001
-+ uint32 locintstat; /* internal system bus interrupt mask/status */
-+#define CSERR 0x0200
-+#define SERR 0x0100
-+#define EXT_PCI_INT 0x0080
-+#define DIR_FAILED 0x0040
-+#define DIR_COMPLETE 0x0020
-+#define PCI_CFG 0x0010
-+ uint32 unused5[7];
-+
-+ uint32 mailbox0;
-+ uint32 mailbox1;
-+
-+ uint32 pcicfgcntrl; /* internal system bus PCI configuration control */
-+#define PCI_CFG_REG_WRITE_EN 0x00000080
-+#define PCI_CFG_ADDR 0x0000003C
-+ uint32 pcicfgdata; /* internal system bus PCI configuration data */
-+
-+ uint32 locch2ctl; /* PCI to interrnal system bus DMA (downstream) local control */
-+#define MPI_DMA_HALT 0x00000008 /* idle after finish current memory burst */
-+#define MPI_DMA_PKT_HALT 0x00000004 /* idle after an EOP flag is detected */
-+#define MPI_DMA_STALL 0x00000002 /* idle after an EOP flag is detected */
-+#define MPI_DMA_ENABLE 0x00000001 /* set to enable channel */
-+ uint32 locch2intStat;
-+#define MPI_DMA_NO_DESC 0x00000004 /* no valid descriptors */
-+#define MPI_DMA_DONE 0x00000002 /* packet xfer complete */
-+#define MPI_DMA_BUFF_DONE 0x00000001 /* buffer done */
-+ uint32 locch2intMask;
-+ uint32 unused6;
-+ uint32 locch2descaddr;
-+ uint32 locch2status1;
-+#define LOCAL_DESC_STATE 0xE0000000
-+#define PCI_DESC_STATE 0x1C000000
-+#define BYTE_DONE 0x03FFC000
-+#define RING_ADDR 0x00003FFF
-+ uint32 locch2status2;
-+#define BUFPTR_OFFSET 0x1FFF0000
-+#define PCI_MASTER_STATE 0x000000C0
-+#define LOC_MASTER_STATE 0x00000038
-+#define CONTROL_STATE 0x00000007
-+ uint32 unused7;
-+
-+ uint32 locch1Ctl; /*internal system bus to PCI DMA (upstream) local control */
-+#define DMA_U2P_LE 0x00000200 /* local bus is little endian */
-+#define DMA_U2P_NOSWAP 0x00000100 /* lccal bus is little endian but no data swapped */
-+ uint32 locch1intstat;
-+ uint32 locch1intmask;
-+ uint32 unused8;
-+ uint32 locch1descaddr;
-+ uint32 locch1status1;
-+ uint32 locch1status2;
-+ uint32 unused9;
-+
-+ uint32 pcich1ctl; /* internal system bus to PCI DMA PCI control */
-+ uint32 pcich1intstat;
-+ uint32 pcich1intmask;
-+ uint32 pcich1descaddr;
-+ uint32 pcich1status1;
-+ uint32 pcich1status2;
-+
-+ uint32 pcich2Ctl; /* PCI to internal system bus DMA PCI control */
-+ uint32 pcich2intstat;
-+ uint32 pcich2intmask;
-+ uint32 pcich2descaddr;
-+ uint32 pcich2status1;
-+ uint32 pcich2status2;
-+
-+ uint32 perm_id; /* permanent device and vendor id */
-+ uint32 perm_rev; /* permanent revision id */
-+} MpiRegisters;
-+
-+#define MPI ((volatile MpiRegisters * const) MPI_BASE)
-+
-+/* PCI configuration address space start offset 0x40 */
-+#define BRCM_PCI_CONFIG_TIMER 0x40
-+#define BRCM_PCI_CONFIG_TIMER_RETRY_MASK 0x0000FF00
-+#define BRCM_PCI_CONFIG_TIMER_TRDY_MASK 0x000000FF
-+
-+/* USB host non-Open HCI register, USB_HOST_NON_OHCI, bit definitions. */
-+#define NON_OHCI_ENABLE_PORT1 0x00000001 /* Use USB port 1 for host, not dev */
-+#define NON_OHCI_BYTE_SWAP 0x00000008 /* Swap USB host registers */
-+
-+#define USBH_NON_OHCI ((volatile unsigned long * const) USB_HOST_NON_OHCI)
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmTag.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmTag.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmTag.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmTag.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,153 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+//**************************************************************************************
-+// File Name : bcmTag.h
-+//
-+// Description: add tag with validation system to the firmware image file to be uploaded
-+// via http
-+//
-+// Created : 02/28/2002 seanl
-+//**************************************************************************************
-+
-+#ifndef _BCMTAG_H_
-+#define _BCMTAG_H_
-+
-+
-+#define BCM_SIG_1 "Broadcom Corporation"
-+#define BCM_SIG_2 "ver. 2.0" // was "firmware version 2.0" now it is split 6 char out for chip id.
-+
-+#define BCM_TAG_VER "6"
-+#define BCM_TAG_VER_LAST "26"
-+
-+// file tag (head) structure all is in clear text except validationTokens (crc, md5, sha1, etc). Total: 128 unsigned chars
-+#define TAG_LEN 256
-+#define TAG_VER_LEN 4
-+#define SIG_LEN 20
-+#define SIG_LEN_2 14 // Original second SIG = 20 is now devided into 14 for SIG_LEN_2 and 6 for CHIP_ID
-+#define CHIP_ID_LEN 6
-+#define IMAGE_LEN 10
-+#define ADDRESS_LEN 12
-+#define FLAG_LEN 2
-+#define TOKEN_LEN 20
-+#define BOARD_ID_LEN 16
-+#define RESERVED_LEN (TAG_LEN - TAG_VER_LEN - SIG_LEN - SIG_LEN_2 - CHIP_ID_LEN - BOARD_ID_LEN - \
-+ (4*IMAGE_LEN) - (3*ADDRESS_LEN) - (3*FLAG_LEN) - (2*TOKEN_LEN))
-+
-+
-+// TAG for downloadable image (kernel plus file system)
-+typedef struct _FILE_TAG
-+{
-+ unsigned char tagVersion[TAG_VER_LEN]; // tag version. Will be 2 here.
-+ unsigned char signiture_1[SIG_LEN]; // text line for company info
-+ unsigned char signiture_2[SIG_LEN_2]; // additional info (can be version number)
-+ unsigned char chipId[CHIP_ID_LEN]; // chip id
-+ unsigned char boardId[BOARD_ID_LEN]; // board id
-+ unsigned char bigEndian[FLAG_LEN]; // if = 1 - big, = 0 - little endia of the host
-+ unsigned char totalImageLen[IMAGE_LEN]; // the sum of all the following length
-+ unsigned char cfeAddress[ADDRESS_LEN]; // if non zero, cfe starting address
-+ unsigned char cfeLen[IMAGE_LEN]; // if non zero, cfe size in clear ASCII text.
-+ unsigned char rootfsAddress[ADDRESS_LEN]; // if non zero, filesystem starting address
-+ unsigned char rootfsLen[IMAGE_LEN]; // if non zero, filesystem size in clear ASCII text.
-+ unsigned char kernelAddress[ADDRESS_LEN]; // if non zero, kernel starting address
-+ unsigned char kernelLen[IMAGE_LEN]; // if non zero, kernel size in clear ASCII text.
-+ unsigned char dualImage[FLAG_LEN]; // if 1, dual image
-+ unsigned char inactiveLen[FLAG_LEN]; // if 1, the image is INACTIVE; if 0, active
-+ unsigned char reserved[RESERVED_LEN]; // reserved for later use
-+ unsigned char imageValidationToken[TOKEN_LEN];// image validation token - can be crc, md5, sha; for
-+ // now will be 4 unsigned char crc
-+ unsigned char tagValidationToken[TOKEN_LEN]; // validation token for tag(from signiture_1 to end of // mageValidationToken)
-+} FILE_TAG, *PFILE_TAG;
-+
-+#define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
-+#define CRC_LEN 4
-+
-+// only included if for bcmTag.exe program
-+#ifdef BCMTAG_EXE_USE
-+
-+static unsigned long 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
-+};
-+#endif // BCMTAG_USE
-+
-+
-+#endif // _BCMTAG_H_
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,59 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __BCM_INTR_H
-+#define __BCM_INTR_H
-+
-+#ifdef __cplusplus
-+ extern "C" {
-+#endif
-+
-+#if defined(CONFIG_BCM96338)
-+#include <6338_intr.h>
-+#endif
-+#if defined(CONFIG_BCM96345)
-+#include <6345_intr.h>
-+#endif
-+#if defined(CONFIG_BCM96348)
-+#include <6348_intr.h>
-+#endif
-+
-+/* defines */
-+struct pt_regs;
-+typedef int (*FN_HANDLER) (int, void *, struct pt_regs *);
-+
-+/* prototypes */
-+extern void enable_brcm_irq(unsigned int irq);
-+extern void disable_brcm_irq(unsigned int irq);
-+extern int request_external_irq(unsigned int irq,
-+ FN_HANDLER handler, unsigned long irqflags,
-+ const char * devname, void *dev_id);
-+extern unsigned int BcmHalMapInterrupt(FN_HANDLER isr, unsigned int param,
-+ unsigned int interruptId);
-+extern void dump_intr_regs(void);
-+
-+/* compatibility definitions */
-+#define BcmHalInterruptEnable(irq) enable_brcm_irq( irq )
-+#define BcmHalInterruptDisable(irq) disable_brcm_irq( irq )
-+
-+#ifdef __cplusplus
-+ }
-+#endif
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,34 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+#ifndef __BCM_MAP_PART_H
-+#define __BCM_MAP_PART_H
-+
-+#if defined(CONFIG_BCM96338)
-+#include <6338_map_part.h>
-+#endif
-+#if defined(CONFIG_BCM96345)
-+#include <6345_map_part.h>
-+#endif
-+#if defined(CONFIG_BCM96348)
-+#include <6348_map_part.h>
-+#endif
-+
-+#endif
-+
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmpci.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmpci.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmpci.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmpci.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,87 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2004 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+//
-+// bcmpci.h - bcm96348 PCI, Cardbus, and PCMCIA definition
-+//
-+#ifndef BCMPCI_H
-+#define BCMPCI_H
-+
-+/* Memory window in internal system bus address space */
-+#define BCM_PCI_MEM_BASE 0x08000000
-+/* IO window in internal system bus address space */
-+#define BCM_PCI_IO_BASE 0x0C000000
-+
-+#define BCM_PCI_ADDR_MASK 0x1fffffff
-+
-+/* Memory window size (range) */
-+#define BCM_PCI_MEM_SIZE_16MB 0x01000000
-+/* IO window size (range) */
-+#define BCM_PCI_IO_SIZE_64KB 0x00010000
-+
-+/* PCI Configuration and I/O space acesss */
-+#define BCM_PCI_CFG(d, f, o) ( (d << 11) | (f << 8) | (o/4 << 2) )
-+
-+/* fake USB PCI slot */
-+#define USB_HOST_SLOT 9
-+#define USB_BAR0_MEM_SIZE 0x0800
-+
-+#define BCM_HOST_MEM_SPACE1 0x10000000
-+#define BCM_HOST_MEM_SPACE2 0x00000000
-+
-+/*
-+ * EBI bus clock is 33MHz and share with PCI bus
-+ * each clock cycle is 30ns.
-+ */
-+/* attribute memory access wait cnt for 4306 */
-+#define PCMCIA_ATTR_CE_HOLD 3 // data hold time 70ns
-+#define PCMCIA_ATTR_CE_SETUP 3 // data setup time 50ns
-+#define PCMCIA_ATTR_INACTIVE 6 // time between read/write cycles 180ns. For the total cycle time 600ns (cnt1+cnt2+cnt3+cnt4)
-+#define PCMCIA_ATTR_ACTIVE 10 // OE/WE pulse width 300ns
-+
-+/* common memory access wait cnt for 4306 */
-+#define PCMCIA_MEM_CE_HOLD 1 // data hold time 30ns
-+#define PCMCIA_MEM_CE_SETUP 1 // data setup time 30ns
-+#define PCMCIA_MEM_INACTIVE 2 // time between read/write cycles 40ns. For the total cycle time 250ns (cnt1+cnt2+cnt3+cnt4)
-+#define PCMCIA_MEM_ACTIVE 5 // OE/WE pulse width 150ns
-+
-+#define PCCARD_VCC_MASK 0x00070000 // Mask Reset also
-+#define PCCARD_VCC_33V 0x00010000
-+#define PCCARD_VCC_50V 0x00020000
-+
-+typedef enum {
-+ MPI_CARDTYPE_NONE, // No Card in slot
-+ MPI_CARDTYPE_PCMCIA, // 16-bit PCMCIA card in slot
-+ MPI_CARDTYPE_CARDBUS, // 32-bit CardBus card in slot
-+} CardType;
-+
-+#define CARDBUS_SLOT 0 // Slot 0 is default for CardBus
-+
-+#define pcmciaAttrOffset 0x00200000
-+#define pcmciaMemOffset 0x00000000
-+// Needs to be right above PCI I/O space. Give 0x8000 (32K) to PCMCIA.
-+#define pcmciaIoOffset (BCM_PCI_IO_BASE + 0x80000)
-+// Base Address is that mapped into the MPI ChipSelect registers.
-+// UBUS bridge MemoryWindow 0 outputs a 0x00 for the base.
-+#define pcmciaBase 0xbf000000
-+#define pcmciaAttr (pcmciaAttrOffset | pcmciaBase)
-+#define pcmciaMem (pcmciaMemOffset | pcmciaBase)
-+#define pcmciaIo (pcmciaIoOffset | pcmciaBase)
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,163 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+
-+//
-+// bcmtypes.h - misc useful typedefs
-+//
-+#ifndef BCMTYPES_H
-+#define BCMTYPES_H
-+
-+// These are also defined in typedefs.h in the application area, so I need to
-+// protect against re-definition.
-+
-+#ifndef _TYPEDEFS_H_
-+typedef unsigned char uint8;
-+typedef unsigned short uint16;
-+typedef unsigned long uint32;
-+typedef signed char int8;
-+typedef signed short int16;
-+typedef signed long int32;
-+#if !defined(__cplusplus)
-+typedef int bool;
-+#endif
-+#endif
-+
-+typedef unsigned char byte;
-+// typedef unsigned long sem_t;
-+
-+typedef unsigned long HANDLE,*PULONG,DWORD,*PDWORD;
-+typedef signed long LONG,*PLONG;
-+
-+typedef unsigned int *PUINT;
-+typedef signed int INT;
-+
-+typedef unsigned short *PUSHORT;
-+typedef signed short SHORT,*PSHORT;
-+typedef unsigned short WORD,*PWORD;
-+
-+typedef unsigned char *PUCHAR;
-+typedef signed char *PCHAR;
-+
-+typedef void *PVOID;
-+
-+typedef unsigned char BOOLEAN, *PBOOL, *PBOOLEAN;
-+
-+typedef unsigned char BYTE,*PBYTE;
-+
-+//#ifndef __GNUC__
-+//The following has been defined in Vxworks internally: vxTypesOld.h
-+//redefine under vxworks will cause error
-+typedef signed int *PINT;
-+
-+typedef signed char INT8;
-+typedef signed short INT16;
-+typedef signed long INT32;
-+
-+typedef unsigned char UINT8;
-+typedef unsigned short UINT16;
-+typedef unsigned long UINT32;
-+
-+typedef unsigned char UCHAR;
-+typedef unsigned short USHORT;
-+typedef unsigned int UINT;
-+typedef unsigned long ULONG;
-+
-+typedef void VOID;
-+typedef unsigned char BOOL;
-+
-+//#endif /* __GNUC__ */
-+
-+
-+// These are also defined in typedefs.h in the application area, so I need to
-+// protect against re-definition.
-+#ifndef TYPEDEFS_H
-+
-+// Maximum and minimum values for a signed 16 bit integer.
-+#define MAX_INT16 32767
-+#define MIN_INT16 -32768
-+
-+// Useful for true/false return values. This uses the
-+// Taligent notation (k for constant).
-+typedef enum
-+{
-+ kFalse = 0,
-+ kTrue = 1
-+} Bool;
-+
-+#endif
-+
-+/* macros to protect against unaligned accesses */
-+
-+#if 0
-+/* first arg is an address, second is a value */
-+#define PUT16( a, d ) { \
-+ *((byte *)a) = (byte)((d)>>8); \
-+ *(((byte *)a)+1) = (byte)(d); \
-+}
-+
-+#define PUT32( a, d ) { \
-+ *((byte *)a) = (byte)((d)>>24); \
-+ *(((byte *)a)+1) = (byte)((d)>>16); \
-+ *(((byte *)a)+2) = (byte)((d)>>8); \
-+ *(((byte *)a)+3) = (byte)(d); \
-+}
-+
-+/* first arg is an address, returns a value */
-+#define GET16( a ) ( \
-+ (*((byte *)a) << 8) | \
-+ (*(((byte *)a)+1)) \
-+)
-+
-+#define GET32( a ) ( \
-+ (*((byte *)a) << 24) | \
-+ (*(((byte *)a)+1) << 16) | \
-+ (*(((byte *)a)+2) << 8) | \
-+ (*(((byte *)a)+3)) \
-+)
-+#endif
-+
-+#ifndef YES
-+#define YES 1
-+#endif
-+
-+#ifndef NO
-+#define NO 0
-+#endif
-+
-+#ifndef IN
-+#define IN
-+#endif
-+
-+#ifndef OUT
-+#define OUT
-+#endif
-+
-+#ifndef TRUE
-+#define TRUE 1
-+#endif
-+
-+#ifndef FALSE
-+#define FALSE 0
-+#endif
-+
-+#define READ32(addr) (*(volatile UINT32 *)((ULONG)&addr))
-+#define READ16(addr) (*(volatile UINT16 *)((ULONG)&addr))
-+#define READ8(addr) (*(volatile UINT8 *)((ULONG)&addr))
-+
-+#endif
-diff -urN linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/board.h linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/board.h
---- linux-2.6.8.1/bcmdrivers/opensource/include/bcm963xx/board.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/bcmdrivers/opensource/include/bcm963xx/board.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,368 @@
-+/*
-+<:copyright-gpl
-+ Copyright 2002 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+:>
-+*/
-+/***********************************************************************/
-+/* */
-+/* MODULE: board.h */
-+/* DATE: 97/02/18 */
-+/* PURPOSE: Board specific information. This module should include */
-+/* all base device addresses and board specific macros. */
-+/* */
-+/***********************************************************************/
-+#ifndef _BOARD_H
-+#define _BOARD_H
-+
-+#if __cplusplus
-+extern "C" {
-+#endif
-+/*****************************************************************************/
-+/* Misc board definitions */
-+/*****************************************************************************/
-+
-+#define DYING_GASP_API
-+
-+/*****************************************************************************/
-+/* Physical Memory Map */
-+/*****************************************************************************/
-+
-+#define PHYS_DRAM_BASE 0x00000000 /* Dynamic RAM Base */
-+#define PHYS_FLASH_BASE 0x1FC00000 /* Flash Memory */
-+
-+/*****************************************************************************/
-+/* Note that the addresses above are physical addresses and that programs */
-+/* have to use converted addresses defined below: */
-+/*****************************************************************************/
-+#define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
-+#define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
-+#define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
-+
-+/*****************************************************************************/
-+/* Select the PLL value to get the desired CPU clock frequency. */
-+/* */
-+/* */
-+/*****************************************************************************/
-+#define FPERIPH 50000000
-+
-+#define ONEK 1024
-+#define BLK64K (64*ONEK)
-+#define FLASH45_BLKS_BOOT_ROM 1
-+#define FLASH45_LENGTH_BOOT_ROM (FLASH45_BLKS_BOOT_ROM * BLK64K)
-+#define FLASH_RESERVED_AT_END (64*ONEK) /*reserved for PSI, scratch pad*/
-+
-+/*****************************************************************************/
-+/* Note that the addresses above are physical addresses and that programs */
-+/* have to use converted addresses defined below: */
-+/*****************************************************************************/
-+#define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
-+#define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
-+#define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
-+
-+/*****************************************************************************/
-+/* Select the PLL value to get the desired CPU clock frequency. */
-+/* */
-+/* */
-+/*****************************************************************************/
-+#define FPERIPH 50000000
-+
-+#define SDRAM_TYPE_ADDRESS_OFFSET 16
-+#define NVRAM_DATA_OFFSET 0x0580
-+#define NVRAM_DATA_ID 0x0f1e2d3c
-+#define BOARD_SDRAM_TYPE *(unsigned long *) \
-+ (FLASH_BASE + SDRAM_TYPE_ADDRESS_OFFSET)
-+
-+#define ONEK 1024
-+#define BLK64K (64*ONEK)
-+
-+// nvram and psi flash definitions for 45
-+#define FLASH45_LENGTH_NVRAM ONEK // 1k nvram
-+#define NVRAM_PSI_DEFAULT 24 // default psi in K byes
-+
-+/*****************************************************************************/
-+/* NVRAM Offset and definition */
-+/*****************************************************************************/
-+
-+#define NVRAM_VERSION_NUMBER 2
-+#define NVRAM_VERSION_NUMBER_ADDRESS 0
-+
-+#define NVRAM_BOOTLINE_LEN 256
-+#define NVRAM_BOARD_ID_STRING_LEN 16
-+#define NVRAM_MAC_ADDRESS_LEN 6
-+#define NVRAM_MAC_COUNT_MAX 32
-+
-+/*****************************************************************************/
-+/* Misc Offsets */
-+/*****************************************************************************/
-+
-+#define CFE_VERSION_OFFSET 0x0570
-+#define CFE_VERSION_MARK_SIZE 5
-+#define CFE_VERSION_SIZE 5
-+
-+typedef struct
-+{
-+ unsigned long ulVersion;
-+ char szBootline[NVRAM_BOOTLINE_LEN];
-+ char szBoardId[NVRAM_BOARD_ID_STRING_LEN];
-+ unsigned long ulReserved1[2];
-+ unsigned long ulNumMacAddrs;
-+ unsigned char ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
-+ char chReserved[2];
-+ unsigned long ulCheckSum;
-+} NVRAM_DATA, *PNVRAM_DATA;
-+
-+
-+/*****************************************************************************/
-+/* board ioctl calls for flash, led and some other utilities */
-+/*****************************************************************************/
-+
-+
-+/* Defines. for board driver */
-+#define BOARD_IOCTL_MAGIC 'B'
-+#define BOARD_DRV_MAJOR 206
-+
-+#define MAC_ADDRESS_ANY (unsigned long) -1
-+
-+#define BOARD_IOCTL_FLASH_INIT \
-+ _IOWR(BOARD_IOCTL_MAGIC, 0, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_FLASH_WRITE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 1, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_FLASH_READ \
-+ _IOWR(BOARD_IOCTL_MAGIC, 2, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_NR_PAGES \
-+ _IOWR(BOARD_IOCTL_MAGIC, 3, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_DUMP_ADDR \
-+ _IOWR(BOARD_IOCTL_MAGIC, 4, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_SET_MEMORY \
-+ _IOWR(BOARD_IOCTL_MAGIC, 5, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_MIPS_SOFT_RESET \
-+ _IOWR(BOARD_IOCTL_MAGIC, 6, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_LED_CTRL \
-+ _IOWR(BOARD_IOCTL_MAGIC, 7, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_ID \
-+ _IOWR(BOARD_IOCTL_MAGIC, 8, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_MAC_ADDRESS \
-+ _IOWR(BOARD_IOCTL_MAGIC, 9, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_RELEASE_MAC_ADDRESS \
-+ _IOWR(BOARD_IOCTL_MAGIC, 10, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_PSI_SIZE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 11, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_SDRAM_SIZE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 12, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_SET_MONITOR_FD \
-+ _IOWR(BOARD_IOCTL_MAGIC, 13, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_WAKEUP_MONITOR_TASK \
-+ _IOWR(BOARD_IOCTL_MAGIC, 14, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_BOOTLINE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 15, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_SET_BOOTLINE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 16, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_BASE_MAC_ADDRESS \
-+ _IOWR(BOARD_IOCTL_MAGIC, 17, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_CHIP_ID \
-+ _IOWR(BOARD_IOCTL_MAGIC, 18, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_NUM_ENET \
-+ _IOWR(BOARD_IOCTL_MAGIC, 19, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_CFE_VER \
-+ _IOWR(BOARD_IOCTL_MAGIC, 20, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_ENET_CFG \
-+ _IOWR(BOARD_IOCTL_MAGIC, 21, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_WLAN_ANT_INUSE \
-+ _IOWR(BOARD_IOCTL_MAGIC, 22, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_SET_TRIGGER_EVENT \
-+ _IOWR(BOARD_IOCTL_MAGIC, 23, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_GET_TRIGGER_EVENT \
-+ _IOWR(BOARD_IOCTL_MAGIC, 24, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_UNSET_TRIGGER_EVENT \
-+ _IOWR(BOARD_IOCTL_MAGIC, 25, BOARD_IOCTL_PARMS)
-+
-+#define BOARD_IOCTL_SET_SES_LED \
-+ _IOWR(BOARD_IOCTL_MAGIC, 26, BOARD_IOCTL_PARMS)
-+
-+
-+// for the action in BOARD_IOCTL_PARMS for flash operation
-+typedef enum
-+{
-+ PERSISTENT,
-+ NVRAM,
-+ BCM_IMAGE_CFE,
-+ BCM_IMAGE_FS,
-+ BCM_IMAGE_KERNEL,
-+ BCM_IMAGE_WHOLE,
-+ SCRATCH_PAD,
-+ FLASH_SIZE,
-+} BOARD_IOCTL_ACTION;
-+
-+
-+typedef struct boardIoctParms
-+{
-+ char *string;
-+ char *buf;
-+ int strLen;
-+ int offset;
-+ BOARD_IOCTL_ACTION action; /* flash read/write: nvram, persistent, bcm image */
-+ int result;
-+} BOARD_IOCTL_PARMS;
-+
-+
-+// LED defines
-+typedef enum
-+{
-+ kLedAdsl,
-+ kLedWireless,
-+ kLedUsb,
-+ kLedHpna,
-+ kLedWanData,
-+ kLedPPP,
-+ kLedVoip,
-+ kLedSes,
-+ kLedEnd, // NOTE: Insert the new led name before this one. Alway stay at the end.
-+} BOARD_LED_NAME;
-+
-+typedef enum
-+{
-+ kLedStateOff, /* turn led off */
-+ kLedStateOn, /* turn led on */
-+ kLedStateFail, /* turn led on red */
-+ kLedStateBlinkOnce, /* blink once, ~100ms and ignore the same call during the 100ms period */
-+ kLedStateSlowBlinkContinues, /* slow blink continues at ~600ms interval */
-+ kLedStateFastBlinkContinues, /* fast blink continues at ~200ms interval */
-+} BOARD_LED_STATE;
-+
-+
-+// virtual and physical map pair defined in board.c
-+typedef struct ledmappair
-+{
-+ BOARD_LED_NAME ledName; // virtual led name
-+ BOARD_LED_STATE ledInitState; // initial led state when the board boots.
-+ unsigned short ledMask; // physical GPIO pin mask
-+ unsigned short ledActiveLow; // reset bit to turn on LED
-+ unsigned short ledMaskFail; // physical GPIO pin mask for state failure
-+ unsigned short ledActiveLowFail;// reset bit to turn on LED
-+} LED_MAP_PAIR, *PLED_MAP_PAIR;
-+
-+typedef void (*HANDLE_LED_FUNC)(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState);
-+
-+/* Flash storage address information that is determined by the flash driver. */
-+typedef struct flashaddrinfo
-+{
-+ int flash_persistent_start_blk;
-+ int flash_persistent_number_blk;
-+ int flash_persistent_length;
-+ unsigned long flash_persistent_blk_offset;
-+ int flash_scratch_pad_start_blk; // start before psi (SP_BUF_LEN)
-+ int flash_scratch_pad_number_blk;
-+ int flash_scratch_pad_length;
-+ unsigned long flash_scratch_pad_blk_offset;
-+ int flash_nvram_start_blk;
-+ int flash_nvram_number_blk;
-+ int flash_nvram_length;
-+ unsigned long flash_nvram_blk_offset;
-+} FLASH_ADDR_INFO, *PFLASH_ADDR_INFO;
-+
-+// scratch pad defines
-+/* SP - Persisten Scratch Pad format:
-+ sp header : 32 bytes
-+ tokenId-1 : 8 bytes
-+ tokenId-1 len : 4 bytes
-+ tokenId-1 data
-+ ....
-+ tokenId-n : 8 bytes
-+ tokenId-n len : 4 bytes
-+ tokenId-n data
-+*/
-+
-+#define MAGIC_NUM_LEN 8
-+#define MAGIC_NUMBER "gOGoBrCm"
-+#define TOKEN_NAME_LEN 16
-+#define SP_VERSION 1
-+#define SP_MAX_LEN 8 * 1024 // 8k buf before psi
-+#define SP_RESERVERD 16
-+
-+typedef struct _SP_HEADER
-+{
-+ char SPMagicNum[MAGIC_NUM_LEN]; // 8 bytes of magic number
-+ int SPVersion; // version number
-+ int SPUsedLen; // used sp len
-+ char SPReserved[SP_RESERVERD]; // reservied, total 32 bytes
-+} SP_HEADER, *PSP_HEADER;
-+
-+typedef struct _TOKEN_DEF
-+{
-+ char tokenName[TOKEN_NAME_LEN];
-+ int tokenLen;
-+} SP_TOKEN, *PSP_TOKEN;
-+
-+
-+/*****************************************************************************/
-+/* Function Prototypes */
-+/*****************************************************************************/
-+#if !defined(__ASM_ASM_H)
-+void dumpaddr( unsigned char *pAddr, int nLen );
-+
-+void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info);
-+int kerSysNvRamGet(char *string, int strLen, int offset);
-+int kerSysNvRamSet(char *string, int strLen, int offset);
-+int kerSysPersistentGet(char *string, int strLen, int offset);
-+int kerSysPersistentSet(char *string, int strLen, int offset);
-+int kerSysScratchPadGet(char *tokName, char *tokBuf, int tokLen);
-+int kerSysScratchPadSet(char *tokName, char *tokBuf, int tokLen);
-+int kerSysBcmImageSet( int flash_start_addr, char *string, int size);
-+int kerSysGetMacAddress( unsigned char *pucaAddr, unsigned long ulId );
-+int kerSysReleaseMacAddress( unsigned char *pucaAddr );
-+int kerSysGetSdramSize( void );
-+void kerSysGetBootline(char *string, int strLen);
-+void kerSysSetBootline(char *string, int strLen);
-+void kerSysMipsSoftReset(void);
-+void kerSysLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
-+void kerSysLedRegisterHwHandler( BOARD_LED_NAME, HANDLE_LED_FUNC, int );
-+int kerSysFlashSizeGet(void);
-+void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context);
-+void kerSysDeregisterDyingGaspHandler(char *devname);
-+void kerSysWakeupMonitorTask( void );
-+#endif
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif /* _BOARD_H */
-+
-diff -urN linux-2.6.8.1/boardparams/bcm963xx/Makefile linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/Makefile
---- linux-2.6.8.1/boardparams/bcm963xx/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/Makefile 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,16 @@
-+
-+ifeq ($(CONFIG_MIPS_BRCM),y)
-+
-+# Linux
-+obj-y += boardparms.o
-+EXTRA_CFLAGS += -DCONFIG_BCM9$(BRCM_CHIP)
-+-include $(TOPDIR)/Rules.make
-+
-+else
-+
-+# CFE
-+BSPOBJS += boardparms.o
-+
-+endif
-+
-+
-diff -urN linux-2.6.8.1/boardparams/bcm963xx/boardparms.c linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/boardparms.c
---- linux-2.6.8.1/boardparams/bcm963xx/boardparms.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/boardparms.c 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,2382 @@
-+/*
-+<:copyright-gpl
-+
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+
-+:>
-+*/
-+/**************************************************************************
-+ * File Name : boardparms.c
-+ *
-+ * Description: This file contains the implementation for the BCM63xx board
-+ * parameter access functions.
-+ *
-+ * Updates : 07/14/2003 Created.
-+ ***************************************************************************/
-+
-+/* Includes. */
-+#include "boardparms.h"
-+
-+/* Defines. */
-+
-+/* Default psi size in K bytes */
-+#define BP_PSI_DEFAULT_SIZE 24
-+
-+/* Typedefs */
-+typedef struct boardparameters
-+{
-+ char szBoardId[BP_BOARD_ID_LEN]; /* board id string */
-+ ETHERNET_MAC_INFO EnetMacInfos[BP_MAX_ENET_MACS];
-+ VOIP_DSP_INFO VoIPDspInfo[BP_MAX_VOIP_DSP];
-+ unsigned short usSdramSize; /* SDRAM size and type */
-+ unsigned short usPsiSize; /* persistent storage in K bytes */
-+ unsigned short usGpioRj11InnerPair; /* GPIO pin or not defined */
-+ unsigned short usGpioRj11OuterPair; /* GPIO pin or not defined */
-+ unsigned short usGpioPressAndHoldReset; /* GPIO pin or not defined */
-+ unsigned short usGpioPcmciaReset; /* GPIO pin or not defined */
-+ unsigned short usGpioUartRts; /* GPIO pin or not defined */
-+ unsigned short usGpioUartCts; /* GPIO pin or not defined */
-+ unsigned short usGpioLedAdsl; /* GPIO pin or not defined */
-+ unsigned short usGpioLedAdslFail; /* GPIO pin or not defined */
-+ unsigned short usGpioLedWireless; /* GPIO pin or not defined */
-+ unsigned short usGpioLedUsb; /* GPIO pin or not defined */
-+ unsigned short usGpioLedHpna; /* GPIO pin or not defined */
-+ unsigned short usGpioLedWanData; /* GPIO pin or not defined */
-+ unsigned short usGpioLedPpp; /* GPIO pin or not defined */
-+ unsigned short usGpioLedPppFail; /* GPIO pin or not defined */
-+ unsigned short usGpioLedBlPowerOn; /* GPIO pin or not defined */
-+ unsigned short usGpioLedBlAlarm; /* GPIO pin or not defined */
-+ unsigned short usGpioLedBlResetCfg; /* GPIO pin or not defined */
-+ unsigned short usGpioLedBlStop; /* GPIO pin or not defined */
-+ unsigned short usExtIntrWireless; /* ext intr or not defined */
-+ unsigned short usExtIntrAdslDyingGasp; /* ext intr or not defined */
-+ unsigned short usExtIntrHpna; /* ext intr or not defined */
-+ unsigned short usCsHpna; /* chip select not defined */
-+ unsigned short usAntInUseWireless; /* antenna in use or not defined */
-+ unsigned short usGpioSesBtnWireless; /* GPIO pin or not defined */
-+ unsigned short usExtIntrSesBtnWireless; /* ext intr or not defined */
-+ unsigned short usGpioLedSesWireless; /* GPIO pin or not defined */
-+} BOARD_PARAMETERS, *PBOARD_PARAMETERS;
-+
-+/* Variables */
-+#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
-+static BOARD_PARAMETERS g_bcm96338sv =
-+{
-+ "96338SV", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_NOT_DEFINED, /* usGpioLedWanData */
-+ BP_NOT_DEFINED, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
-+ BP_NOT_DEFINED, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+static BOARD_PARAMETERS g_bcm96338l2m8m =
-+{
-+ "96338L-2M-8M", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+static PBOARD_PARAMETERS g_BoardParms[] =
-+ {&g_bcm96338sv, &g_bcm96338l2m8m, 0};
-+#endif
-+
-+#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
-+static BOARD_PARAMETERS g_bcm96345r =
-+{
-+ "96345R", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
-+ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
-+ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_GPIO_8_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_8_AH, /* usGpioLedWanData */
-+ BP_GPIO_9_AH, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_8_AH, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96345gw2 =
-+{
-+ /* A hardware jumper determines whether GPIO 13 is used for Press and Hold
-+ * Reset or RTS.
-+ */
-+ "96345GW2", /* szBoardId */
-+ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_GPIO_0_AH, /* usGpioPhySpiSck */
-+ BP_GPIO_4_AH, /* usGpioPhySpiSs */
-+ BP_GPIO_12_AH, /* usGpioPhySpiMosi */
-+ BP_GPIO_11_AH, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x04, /* numSwitchPorts */
-+ BP_ENET_CONFIG_GPIO, /* usConfigType */
-+ BP_ENET_REVERSE_MII}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_1, /* usExtIntrVoip */
-+ BP_GPIO_6_AH, /* usGpioVoipReset */
-+ BP_GPIO_15_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
-+ BP_GPIO_2_AH, /* usGpioPcmciaReset */
-+ BP_GPIO_13_AH, /* usGpioUartRts */
-+ BP_GPIO_9_AH, /* usGpioUartCts */
-+ BP_GPIO_8_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_GPIO_7_AH, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_8_AH, /* usGpioLedWanData */
-+ BP_NOT_DEFINED, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_7_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_8_AH, /* usGpioLedBlStop */
-+ BP_EXT_INTR_2, /* usExtIntrWireless */
-+ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96345gw =
-+{
-+ "96345GW", /* szBoardId */
-+ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x04, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_1, /* usExtIntrVoip */
-+ BP_GPIO_6_AH, /* usGpioVoipReset */
-+ BP_GPIO_15_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
-+ BP_GPIO_1_AH, /* usGpioRj11OuterPair */
-+ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
-+ BP_GPIO_2_AH, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_GPIO_8_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_GPIO_10_AH, /* usGpioLedWireless */
-+ BP_GPIO_7_AH, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_8_AH, /* usGpioLedWanData */
-+ BP_NOT_DEFINED, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_10_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_8_AH, /* usGpioLedBlStop */
-+ BP_EXT_INTR_2, /* usExtIntrWireless */
-+ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
-+ BP_EXT_INTR_3, /* usExtIntrHpna */
-+ BP_CS_1, /* usCsHpna */
-+ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96335r =
-+{
-+ "96335R", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_14_AH, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_GPIO_9_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_9_AH, /* usGpioLedWanData */
-+ BP_GPIO_8_AH, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_9_AH, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96345r0 =
-+{
-+ "96345R0", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_GPIO_8_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_9_AH, /* usGpioLedWanData */
-+ BP_GPIO_9_AH, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_8_AH, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96345rs =
-+{
-+ "96345RS", /* szBoardId */
-+ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
-+ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
-+ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_GPIO_8_AH, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_8_AH, /* usGpioLedWanData */
-+ BP_GPIO_9_AH, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
-+ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
-+ BP_GPIO_8_AH, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static PBOARD_PARAMETERS g_BoardParms[] =
-+ {&g_bcm96345r, &g_bcm96345gw2, &g_bcm96345gw, &g_bcm96335r, &g_bcm96345r0,
-+ &g_bcm96345rs, 0};
-+#endif
-+
-+#if defined(_BCM96348_) || defined(CONFIG_BCM96348)
-+
-+static BOARD_PARAMETERS g_bcm96348r =
-+{
-+ "96348R", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY}}, /* ucPhyType */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96348lv =
-+{
-+ "96348LV", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
-+ 0x02, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_GPIO_5_AL, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}}, /* usReverseMii */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96348gw =
-+{
-+ "96348GW", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x03, /* numSwitchPorts */
-+ BP_ENET_CONFIG_SPI_SSB_0, /* usConfigType */
-+ BP_ENET_REVERSE_MII}}, /* usReverseMii */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_2, /* usExtIntrVoip */
-+ BP_GPIO_6_AH, /* usGpioVoipReset */
-+ BP_GPIO_34_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* BP_GPIO_35_AH, */ /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* BP_EXT_INTR_3, */ /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* BP_GPIO_0_AL */ /* usGpioLedSesWireless */
-+};
-+
-+
-+static BOARD_PARAMETERS g_bcm96348gw_10 =
-+{
-+ "96348GW-10", /* szBoardId */
-+ {{BP_ENET_NO_PHY}, /* ucPhyType */
-+ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x04, /* numSwitchPorts */
-+ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
-+ BP_ENET_REVERSE_MII}}, /* usReverseMii */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_2, /* usExtIntrVoip */
-+ BP_GPIO_6_AH, /* usGpioVoipReset */
-+ BP_GPIO_34_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96348gw_11 =
-+{
-+ "96348GW-11", /* szBoardId */
-+ {{BP_ENET_NO_PHY}, /* ucPhyType */
-+ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x04, /* numSwitchPorts */
-+ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
-+ BP_ENET_REVERSE_MII}}, /* usReverseMii */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static BOARD_PARAMETERS g_bcm96348sv =
-+{
-+ "96348SV", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
-+ 0x1f, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}}, /* usReverseMii */
-+ {{BP_VOIP_NO_DSP}, /* ucDspType */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_32MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_NOT_DEFINED, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_NOT_DEFINED, /* usGpioLedWanData */
-+ BP_NOT_DEFINED, /* usGpioLedPpp */
-+ BP_NOT_DEFINED, /* usGpioLedPppFail */
-+ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
-+ BP_NOT_DEFINED, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+
-+static BOARD_PARAMETERS g_bcm96348gw_dualDsp =
-+{
-+ "96348GW-DualDSP", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x03, /* numSwitchPorts */
-+ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
-+ BP_ENET_REVERSE_MII}}, /* usReverseMii */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_2, /* usExtIntrVoip */
-+ BP_UNEQUIPPED, /* usGpioVoipReset */
-+ BP_GPIO_34_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_DSP, /* ucDspType */
-+ 0x01, /* ucDspAddress */
-+ BP_EXT_INTR_3, /* usExtIntrVoip */
-+ BP_UNEQUIPPED , /* usGpioVoipReset */
-+ BP_GPIO_35_AH, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_3}}, /* usCsVoip */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+
-+static BOARD_PARAMETERS g_bcmCustom_01 =
-+{
-+ "BCMCUST_01", /* szBoardId */
-+ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
-+ 0x01, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_MDIO, /* usConfigType */
-+ BP_NOT_DEFINED}, /* usReverseMii */
-+ {BP_ENET_NO_PHY, /* ucPhyType */
-+ 0x00, /* ucPhyAddress */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSck */
-+ BP_NOT_DEFINED, /* usGpioPhySpiSs */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
-+ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
-+ BP_NOT_DEFINED, /* usGpioPhyReset */
-+ 0x01, /* numSwitchPorts */
-+ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
-+ BP_ENET_REVERSE_MII}}, /* usReverseMii */
-+ {{BP_VOIP_DSP, /* ucDspType */
-+ 0x00, /* ucDspAddress */
-+ BP_EXT_INTR_2, /* usExtIntrVoip */
-+ BP_GPIO_36_AH, /* usGpioVoipReset */
-+ BP_GPIO_34_AL, /* usGpioVoipIntr */
-+ BP_NOT_DEFINED, /* usGpioLedVoip */
-+ BP_CS_2}, /* usCsVoip */
-+ {BP_VOIP_NO_DSP}}, /* ucDspType */
-+ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
-+ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
-+ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
-+ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
-+ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
-+ BP_NOT_DEFINED, /* usGpioPcmciaReset */
-+ BP_NOT_DEFINED, /* usGpioUartRts */
-+ BP_NOT_DEFINED, /* usGpioUartCts */
-+ BP_NOT_DEFINED, /* usGpioLedAdsl */
-+ BP_GPIO_2_AL, /* usGpioLedAdslFail */
-+ BP_NOT_DEFINED, /* usGpioLedWireless */
-+ BP_NOT_DEFINED, /* usGpioLedUsb */
-+ BP_NOT_DEFINED, /* usGpioLedHpna */
-+ BP_GPIO_3_AL, /* usGpioLedWanData */
-+ BP_GPIO_3_AL, /* usGpioLedPpp */
-+ BP_GPIO_4_AL, /* usGpioLedPppFail */
-+ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
-+ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
-+ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
-+ BP_GPIO_1_AL, /* usGpioLedBlStop */
-+ BP_NOT_DEFINED, /* usExtIntrWireless */
-+ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
-+ BP_NOT_DEFINED, /* usExtIntrHpna */
-+ BP_NOT_DEFINED, /* usCsHpna */
-+ BP_NOT_DEFINED, /* usAntInUseWireless */
-+ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
-+ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
-+ BP_NOT_DEFINED /* usGpioLedSesWireless */
-+};
-+
-+static PBOARD_PARAMETERS g_BoardParms[] =
-+ {&g_bcm96348r, &g_bcm96348lv, &g_bcm96348gw, &g_bcm96348gw_10,
-+ &g_bcm96348gw_11, &g_bcm96348sv, &g_bcm96348gw_dualDsp,
-+ &g_bcmCustom_01, 0};
-+#endif
-+
-+static PBOARD_PARAMETERS g_pCurrentBp = 0;
-+
-+/**************************************************************************
-+ * Name : bpstrcmp
-+ *
-+ * Description: String compare for this file so it does not depend on an OS.
-+ * (Linux kernel and CFE share this source file.)
-+ *
-+ * Parameters : [IN] dest - destination string
-+ * [IN] src - source string
-+ *
-+ * Returns : -1 - dest < src, 1 - dest > src, 0 dest == src
-+ ***************************************************************************/
-+static int bpstrcmp(const char *dest,const char *src);
-+static int bpstrcmp(const char *dest,const char *src)
-+{
-+ while (*src && *dest)
-+ {
-+ if (*dest < *src) return -1;
-+ if (*dest > *src) return 1;
-+ dest++;
-+ src++;
-+ }
-+
-+ if (*dest && !*src) return 1;
-+ if (!*dest && *src) return -1;
-+ return 0;
-+} /* bpstrcmp */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipDspConfig
-+ *
-+ * Description: Gets the DSP configuration from the board parameter
-+ * structure for a given DSP index.
-+ *
-+ * Parameters : [IN] dspNum - DSP index (number)
-+ *
-+ * Returns : Pointer to DSP configuration block if found/valid, NULL
-+ * otherwise.
-+ ***************************************************************************/
-+VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum );
-+VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum )
-+{
-+ VOIP_DSP_INFO *pDspConfig = 0;
-+ int i;
-+
-+ if( g_pCurrentBp )
-+ {
-+ for( i = 0 ; i < BP_MAX_VOIP_DSP ; i++ )
-+ {
-+ if( g_pCurrentBp->VoIPDspInfo[i].ucDspType != BP_VOIP_NO_DSP &&
-+ g_pCurrentBp->VoIPDspInfo[i].ucDspAddress == dspNum )
-+ {
-+ pDspConfig = &g_pCurrentBp->VoIPDspInfo[i];
-+ break;
-+ }
-+ }
-+ }
-+
-+ return pDspConfig;
-+}
-+
-+
-+/**************************************************************************
-+ * Name : BpSetBoardId
-+ *
-+ * Description: This function find the BOARD_PARAMETERS structure for the
-+ * specified board id string and assigns it to a global, static
-+ * variable.
-+ *
-+ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
-+ * have a board parameters configuration record.
-+ ***************************************************************************/
-+int BpSetBoardId( char *pszBoardId )
-+{
-+ int nRet = BP_BOARD_ID_NOT_FOUND;
-+ PBOARD_PARAMETERS *ppBp;
-+
-+ for( ppBp = g_BoardParms; *ppBp; ppBp++ )
-+ {
-+ if( !bpstrcmp((*ppBp)->szBoardId, pszBoardId) )
-+ {
-+ g_pCurrentBp = *ppBp;
-+ nRet = BP_SUCCESS;
-+ break;
-+ }
-+ }
-+
-+ return( nRet );
-+} /* BpSetBoardId */
-+
-+/**************************************************************************
-+ * Name : BpGetBoardIds
-+ *
-+ * Description: This function returns all of the supported board id strings.
-+ *
-+ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
-+ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
-+ * boundary.
-+ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
-+ * were allocated in pszBoardIds.
-+ *
-+ * Returns : Number of board id strings returned.
-+ ***************************************************************************/
-+int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize )
-+{
-+ PBOARD_PARAMETERS *ppBp;
-+ int i;
-+ char *src;
-+ char *dest;
-+
-+ for( i = 0, ppBp = g_BoardParms; *ppBp && nBoardIdsSize;
-+ i++, ppBp++, nBoardIdsSize--, pszBoardIds += BP_BOARD_ID_LEN )
-+ {
-+ dest = pszBoardIds;
-+ src = (*ppBp)->szBoardId;
-+ while( *src )
-+ *dest++ = *src++;
-+ *dest = '\0';
-+ }
-+
-+ return( i );
-+} /* BpGetBoardIds */
-+
-+/**************************************************************************
-+ * Name : BpGetEthernetMacInfo
-+ *
-+ * Description: This function returns all of the supported board id strings.
-+ *
-+ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
-+ * buffers.
-+ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
-+ * are pointed to by pEnetInfos.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos )
-+{
-+ int i, nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
-+ {
-+ if( i < BP_MAX_ENET_MACS )
-+ {
-+ unsigned char *src = (unsigned char *)
-+ &g_pCurrentBp->EnetMacInfos[i];
-+ unsigned char *dest = (unsigned char *) pEnetInfos;
-+ int len = sizeof(ETHERNET_MAC_INFO);
-+ while( len-- )
-+ *dest++ = *src++;
-+ }
-+ else
-+ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
-+ }
-+
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
-+ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
-+
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetEthernetMacInfo */
-+
-+/**************************************************************************
-+ * Name : BpGetSdramSize
-+ *
-+ * Description: This function returns a constant that describees the board's
-+ * SDRAM type and size.
-+ *
-+ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
-+ * is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetSdramSize( unsigned long *pulSdramSize )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulSdramSize = g_pCurrentBp->usSdramSize;
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ *pulSdramSize = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetSdramSize */
-+
-+/**************************************************************************
-+ * Name : BpGetPsiSize
-+ *
-+ * Description: This function returns the persistent storage size in K bytes.
-+ *
-+ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
-+ * storage size is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetPsiSize( unsigned long *pulPsiSize )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulPsiSize = g_pCurrentBp->usPsiSize;
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ *pulPsiSize = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetPsiSize */
-+
-+/**************************************************************************
-+ * Name : BpGetRj11InnerOuterPairGpios
-+ *
-+ * Description: This function returns the GPIO pin assignments for changing
-+ * between the RJ11 inner pair and RJ11 outer pair.
-+ *
-+ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
-+ * GPIO pin is returned in.
-+ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, values are returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
-+ unsigned short *pusOuter )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusInner = g_pCurrentBp->usGpioRj11InnerPair;
-+ *pusOuter = g_pCurrentBp->usGpioRj11OuterPair;
-+
-+ if( g_pCurrentBp->usGpioRj11InnerPair != BP_NOT_DEFINED &&
-+ g_pCurrentBp->usGpioRj11OuterPair != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusInner = *pusOuter = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetRj11InnerOuterPairGpios */
-+
-+/**************************************************************************
-+ * Name : BpGetPressAndHoldResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the press
-+ * and hold reset button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the press and hold
-+ * reset button GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPressAndHoldResetGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioPressAndHoldReset;
-+
-+ if( g_pCurrentBp->usGpioPressAndHoldReset != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetPressAndHoldResetGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the VOIP
-+ * Reset operation.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
-+ * GPIO pin is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
-+
-+ if( pDspInfo )
-+ {
-+ *pusValue = pDspInfo->usGpioVoipReset;
-+
-+ if( *pusValue != BP_NOT_DEFINED ||
-+ *pusValue == BP_UNEQUIPPED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_FOUND;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetVoipResetGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipIntrGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
-+ * GPIO pin is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
-+
-+ if( pDspInfo )
-+ {
-+ *pusValue = pDspInfo->usGpioVoipIntr;
-+
-+ if( *pusValue != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_FOUND;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetVoipIntrGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetPcmciaResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PCMCIA
-+ * Reset operation.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPcmciaResetGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioPcmciaReset;
-+
-+ if( g_pCurrentBp->usGpioPcmciaReset != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetPcmciaResetGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetUartRtsCtsGpios
-+ *
-+ * Description: This function returns the GPIO pin assignments for RTS and CTS
-+ * UART signals.
-+ *
-+ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
-+ * pin is returned in.
-+ * [OUT] pusCts - Address of short word that the UART CTS GPIO
-+ * pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, values are returned.
-+ * BP_BOARD_ID_NOT_SET - Error, board id input string does not
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusRts = g_pCurrentBp->usGpioUartRts;
-+ *pusCts = g_pCurrentBp->usGpioUartCts;
-+
-+ if( g_pCurrentBp->usGpioUartRts != BP_NOT_DEFINED &&
-+ g_pCurrentBp->usGpioUartCts != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusRts = *pusCts = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetUartRtsCtsGpios */
-+
-+/**************************************************************************
-+ * Name : BpGetAdslLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the ADSL
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedAdsl;
-+
-+ if( g_pCurrentBp->usGpioLedAdsl != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetAdslLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetAdslFailLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the ADSL
-+ * LED that is used when there is a DSL connection failure.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslFailLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedAdslFail;
-+
-+ if( g_pCurrentBp->usGpioLedAdslFail != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetAdslFailLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedWireless;
-+
-+ if( g_pCurrentBp->usGpioLedWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetWirelessLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessAntInUse
-+ *
-+ * Description: This function returns the antennas in use for wireless
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
-+ * is in use.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessAntInUse( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usAntInUseWireless;
-+
-+ if( g_pCurrentBp->usAntInUseWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetWirelessAntInUse */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesBtnGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * Ses Button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesBtnGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioSesBtnWireless;
-+
-+ if( g_pCurrentBp->usGpioSesBtnWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetWirelessSesBtnGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesExtIntr
-+ *
-+ * Description: This function returns the external interrupt number for the
-+ * Wireless Ses Button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
-+ * external interrup is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesExtIntr( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usExtIntrSesBtnWireless;
-+
-+ if( g_pCurrentBp->usExtIntrSesBtnWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+
-+} /* BpGetWirelessSesExtIntr */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * Ses Led.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
-+ * Led GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedSesWireless;
-+
-+ if( g_pCurrentBp->usGpioLedSesWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+
-+} /* BpGetWirelessSesLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetUsbLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the USB
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the USB LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetUsbLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedUsb;
-+
-+ if( g_pCurrentBp->usGpioLedUsb != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetUsbLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the HPNA
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedHpna;
-+
-+ if( g_pCurrentBp->usGpioLedHpna != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetHpnaLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetWanDataLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the WAN Data
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWanDataLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedWanData;
-+
-+ if( g_pCurrentBp->usGpioLedWanData != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetWanDataLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetPppLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PPP
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPppLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedPpp;
-+
-+ if( g_pCurrentBp->usGpioLedPpp != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetPppLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetPppFailLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PPP
-+ * LED that is used when there is a PPP connection failure.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPppFailLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedPppFail;
-+
-+ if( g_pCurrentBp->usGpioLedPppFail != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetPppFailLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderPowerOnLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the power
-+ * on LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedBlPowerOn;
-+
-+ if( g_pCurrentBp->usGpioLedBlPowerOn != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetBootloaderPowerOn */
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderAlarmLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the alarm
-+ * LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedBlAlarm;
-+
-+ if( g_pCurrentBp->usGpioLedBlAlarm != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetBootloaderAlarmLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderResetCfgLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the reset
-+ * configuration LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the reset
-+ * configuration LED GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedBlResetCfg;
-+
-+ if( g_pCurrentBp->usGpioLedBlResetCfg != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetBootloaderResetCfgLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderStopLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the break
-+ * into bootloader LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the break into
-+ * bootloader LED GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderStopLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pusValue = g_pCurrentBp->usGpioLedBlStop;
-+
-+ if( g_pCurrentBp->usGpioLedBlStop != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetBootloaderStopLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the VOIP
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ *
-+ * Note : The VoIP structure would allow for having one LED per DSP
-+ * however, the board initialization function assumes only one
-+ * LED per functionality (ie one LED for VoIP). Therefore in
-+ * order to keep this tidy and simple we do not make usage of the
-+ * one-LED-per-DSP function. Instead, we assume that the LED for
-+ * VoIP is unique and associated with DSP 0 (always present on
-+ * any VoIP platform). If changing this to a LED-per-DSP function
-+ * then one need to update the board initialization driver in
-+ * bcmdrivers\opensource\char\board\bcm963xx\impl1
-+ ***************************************************************************/
-+int BpGetVoipLedGpio( unsigned short *pusValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( 0 );
-+
-+ if( pDspInfo )
-+ {
-+ *pusValue = pDspInfo->usGpioLedVoip;
-+
-+ if( *pusValue != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_FOUND;
-+ }
-+ }
-+ else
-+ {
-+ *pusValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetVoipLedGpio */
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessExtIntr
-+ *
-+ * Description: This function returns the Wireless external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the wireless
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessExtIntr( unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulValue = g_pCurrentBp->usExtIntrWireless;
-+
-+ if( g_pCurrentBp->usExtIntrWireless != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetWirelessExtIntr */
-+
-+/**************************************************************************
-+ * Name : BpGetAdslDyingGaspExtIntr
-+ *
-+ * Description: This function returns the ADSL Dying Gasp external interrupt
-+ * number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulValue = g_pCurrentBp->usExtIntrAdslDyingGasp;
-+
-+ if( g_pCurrentBp->usExtIntrAdslDyingGasp != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetAdslDyingGaspExtIntr */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipExtIntr
-+ *
-+ * Description: This function returns the VOIP external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the VOIP
-+ * external interrupt number is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
-+
-+ if( pDspInfo )
-+ {
-+ *pulValue = pDspInfo->usExtIntrVoip;
-+
-+ if( *pulValue != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_FOUND;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetVoipExtIntr */
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaExtIntr
-+ *
-+ * Description: This function returns the HPNA external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the HPNA
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaExtIntr( unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulValue = g_pCurrentBp->usExtIntrHpna;
-+
-+ if( g_pCurrentBp->usExtIntrHpna != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetHpnaExtIntr */
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaChipSelect
-+ *
-+ * Description: This function returns the HPNA chip select number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the HPNA
-+ * chip select number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaChipSelect( unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ *pulValue = g_pCurrentBp->usCsHpna;
-+
-+ if( g_pCurrentBp->usCsHpna != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetHpnaChipSelect */
-+
-+/**************************************************************************
-+ * Name : BpGetVoipChipSelect
-+ *
-+ * Description: This function returns the VOIP chip select number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the VOIP
-+ * chip select number is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue )
-+{
-+ int nRet;
-+
-+ if( g_pCurrentBp )
-+ {
-+ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
-+
-+ if( pDspInfo )
-+ {
-+ *pulValue = pDspInfo->usCsVoip;
-+
-+ if( *pulValue != BP_NOT_DEFINED )
-+ {
-+ nRet = BP_SUCCESS;
-+ }
-+ else
-+ {
-+ nRet = BP_VALUE_NOT_DEFINED;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_FOUND;
-+ }
-+ }
-+ else
-+ {
-+ *pulValue = BP_NOT_DEFINED;
-+ nRet = BP_BOARD_ID_NOT_SET;
-+ }
-+
-+ return( nRet );
-+} /* BpGetVoipChipSelect */
-+
-diff -urN linux-2.6.8.1/boardparams/bcm963xx/boardparms.h linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/boardparms.h
---- linux-2.6.8.1/boardparams/bcm963xx/boardparms.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.8.1-brcm63xx/boardparms/bcm963xx/boardparms.h 2006-06-26 09:07:10.000000000 +0200
-@@ -0,0 +1,766 @@
-+/*
-+<:copyright-gpl
-+
-+ Copyright 2003 Broadcom Corp. All Rights Reserved.
-+
-+ This program is free software; you can distribute it and/or modify it
-+ under the terms of the GNU General Public License (Version 2) as
-+ published by the Free Software Foundation.
-+
-+ This program is distributed in the hope it will be useful, but WITHOUT
-+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-+ for more details.
-+
-+ You should have received a copy of the GNU General Public License along
-+ with this program; if not, write to the Free Software Foundation, Inc.,
-+ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
-+
-+:>
-+*/
-+/**************************************************************************
-+ * File Name : boardparms.h
-+ *
-+ * Description: This file contains definitions and function prototypes for
-+ * the BCM63xx board parameter access functions.
-+ *
-+ * Updates : 07/14/2003 Created.
-+ ***************************************************************************/
-+
-+#if !defined(_BOARDPARMS_H)
-+#define _BOARDPARMS_H
-+#define CONFIG_BCM96348
-+#if __cplusplus
-+extern "C" {
-+#endif
-+
-+/* Return codes. */
-+#define BP_SUCCESS 0
-+#define BP_BOARD_ID_NOT_FOUND 1
-+#define BP_VALUE_NOT_DEFINED 2
-+#define BP_BOARD_ID_NOT_SET 3
-+
-+/* Values for BpGetSdramSize. */
-+#define BP_MEMORY_8MB_1_CHIP 0
-+#define BP_MEMORY_16MB_1_CHIP 1
-+#define BP_MEMORY_32MB_1_CHIP 2
-+#define BP_MEMORY_64MB_2_CHIP 3
-+#define BP_MEMORY_32MB_2_CHIP 4
-+#define BP_MEMORY_16MB_2_CHIP 5
-+
-+/* Values for EthernetMacInfo PhyType. */
-+#define BP_ENET_NO_PHY 0
-+#define BP_ENET_INTERNAL_PHY 1
-+#define BP_ENET_EXTERNAL_PHY 2
-+#define BP_ENET_EXTERNAL_SWITCH 3
-+
-+/* Values for EthernetMacInfo Configuration type. */
-+#define BP_ENET_CONFIG_MDIO 0 /* Internal PHY, External PHY, Switch+(no GPIO, no SPI, no MDIO Pseudo phy */
-+#define BP_ENET_CONFIG_GPIO 1 /* Bcm96345GW board + Bcm5325M/E */
-+#define BP_ENET_CONFIG_MDIO_PSEUDO_PHY 2 /* Bcm96348GW board + Bcm5325E */
-+#define BP_ENET_CONFIG_SPI_SSB_0 3 /* Bcm96348GW board + Bcm5325M/E */
-+#define BP_ENET_CONFIG_SPI_SSB_1 4 /* Bcm96348GW board + Bcm5325M/E */
-+#define BP_ENET_CONFIG_SPI_SSB_2 5 /* Bcm96348GW board + Bcm5325M/E */
-+#define BP_ENET_CONFIG_SPI_SSB_3 6 /* Bcm96348GW board + Bcm5325M/E */
-+
-+/* Values for EthernetMacInfo Reverse MII. */
-+#define BP_ENET_NO_REVERSE_MII 0
-+#define BP_ENET_REVERSE_MII 1
-+
-+/* Values for VoIPDSPInfo DSPType. */
-+#define BP_VOIP_NO_DSP 0
-+#define BP_VOIP_DSP 1
-+
-+
-+/* Values for GPIO pin assignments (AH = Active High, AL = Active Low). */
-+#define BP_ACTIVE_MASK 0x8000
-+#define BP_ACTIVE_HIGH 0x0000
-+#define BP_ACTIVE_LOW 0x8000
-+#define BP_GPIO_0_AH (0 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_0_AL (0 | BP_ACTIVE_LOW)
-+#define BP_GPIO_1_AH (1 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_1_AL (1 | BP_ACTIVE_LOW)
-+#define BP_GPIO_2_AH (2 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_2_AL (2 | BP_ACTIVE_LOW)
-+#define BP_GPIO_3_AH (3 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_3_AL (3 | BP_ACTIVE_LOW)
-+#define BP_GPIO_4_AH (4 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_4_AL (4 | BP_ACTIVE_LOW)
-+#define BP_GPIO_5_AH (5 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_5_AL (5 | BP_ACTIVE_LOW)
-+#define BP_GPIO_6_AH (6 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_6_AL (6 | BP_ACTIVE_LOW)
-+#define BP_GPIO_7_AH (7 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_7_AL (7 | BP_ACTIVE_LOW)
-+#define BP_GPIO_8_AH (8 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_8_AL (8 | BP_ACTIVE_LOW)
-+#define BP_GPIO_9_AH (9 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_9_AL (9 | BP_ACTIVE_LOW)
-+#define BP_GPIO_10_AH (10 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_10_AL (10 | BP_ACTIVE_LOW)
-+#define BP_GPIO_11_AH (11 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_11_AL (11 | BP_ACTIVE_LOW)
-+#define BP_GPIO_12_AH (12 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_12_AL (12 | BP_ACTIVE_LOW)
-+#define BP_GPIO_13_AH (13 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_13_AL (13 | BP_ACTIVE_LOW)
-+#define BP_GPIO_14_AH (14 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_14_AL (14 | BP_ACTIVE_LOW)
-+#define BP_GPIO_15_AH (15 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_15_AL (15 | BP_ACTIVE_LOW)
-+#define BP_GPIO_16_AH (16 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_16_AL (16 | BP_ACTIVE_LOW)
-+#define BP_GPIO_17_AH (17 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_17_AL (17 | BP_ACTIVE_LOW)
-+#define BP_GPIO_18_AH (18 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_18_AL (18 | BP_ACTIVE_LOW)
-+#define BP_GPIO_19_AH (19 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_19_AL (19 | BP_ACTIVE_LOW)
-+#define BP_GPIO_20_AH (20 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_20_AL (20 | BP_ACTIVE_LOW)
-+#define BP_GPIO_21_AH (21 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_21_AL (21 | BP_ACTIVE_LOW)
-+#define BP_GPIO_22_AH (22 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_22_AL (22 | BP_ACTIVE_LOW)
-+#define BP_GPIO_23_AH (23 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_23_AL (23 | BP_ACTIVE_LOW)
-+#define BP_GPIO_24_AH (24 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_24_AL (24 | BP_ACTIVE_LOW)
-+#define BP_GPIO_25_AH (25 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_25_AL (25 | BP_ACTIVE_LOW)
-+#define BP_GPIO_26_AH (26 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_26_AL (26 | BP_ACTIVE_LOW)
-+#define BP_GPIO_27_AH (27 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_27_AL (27 | BP_ACTIVE_LOW)
-+#define BP_GPIO_28_AH (28 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_28_AL (28 | BP_ACTIVE_LOW)
-+#define BP_GPIO_29_AH (29 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_29_AL (29 | BP_ACTIVE_LOW)
-+#define BP_GPIO_30_AH (30 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_30_AL (30 | BP_ACTIVE_LOW)
-+#define BP_GPIO_31_AH (31 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_31_AL (31 | BP_ACTIVE_LOW)
-+#define BP_GPIO_32_AH (32 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_32_AL (32 | BP_ACTIVE_LOW)
-+#define BP_GPIO_33_AH (33 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_33_AL (33 | BP_ACTIVE_LOW)
-+#define BP_GPIO_34_AH (34 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_34_AL (34 | BP_ACTIVE_LOW)
-+#define BP_GPIO_35_AH (35 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_35_AL (35 | BP_ACTIVE_LOW)
-+#define BP_GPIO_36_AH (36 | BP_ACTIVE_HIGH)
-+#define BP_GPIO_36_AL (36 | BP_ACTIVE_LOW)
-+
-+/* Values for external interrupt assignments. */
-+#define BP_EXT_INTR_0 0
-+#define BP_EXT_INTR_1 1
-+#define BP_EXT_INTR_2 2
-+#define BP_EXT_INTR_3 3
-+
-+/* Values for chip select assignments. */
-+#define BP_CS_0 0
-+#define BP_CS_1 1
-+#define BP_CS_2 2
-+#define BP_CS_3 3
-+
-+/* Value for GPIO and external interrupt fields that are not used. */
-+#define BP_NOT_DEFINED 0xffff
-+#define BP_HW_DEFINED 0xfff0
-+#define BP_UNEQUIPPED 0xfff1
-+
-+/* Maximum size of the board id string. */
-+#define BP_BOARD_ID_LEN 16
-+
-+/* Maximum number of Ethernet MACs. */
-+#define BP_MAX_ENET_MACS 2
-+
-+/* Maximum number of VoIP DSPs. */
-+#define BP_MAX_VOIP_DSP 2
-+
-+/* Wireless Antenna Settings. */
-+#define BP_WLAN_ANT_MAIN 0
-+#define BP_WLAN_ANT_AUX 1
-+#define BP_WLAN_ANT_BOTH 3
-+
-+#if !defined(__ASSEMBLER__)
-+
-+/* Information about an Ethernet MAC. If ucPhyType is BP_ENET_NO_PHY,
-+ * then the other fields are not valid.
-+ */
-+typedef struct EthernetMacInfo
-+{
-+ unsigned char ucPhyType; /* BP_ENET_xxx */
-+ unsigned char ucPhyAddress; /* 0 to 31 */
-+ unsigned short usGpioPhySpiSck; /* GPIO pin or not defined */
-+ unsigned short usGpioPhySpiSs; /* GPIO pin or not defined */
-+ unsigned short usGpioPhySpiMosi; /* GPIO pin or not defined */
-+ unsigned short usGpioPhySpiMiso; /* GPIO pin or not defined */
-+ unsigned short usGpioPhyReset; /* GPIO pin or not defined (96348LV) */
-+ unsigned short numSwitchPorts; /* Number of PHY ports */
-+ unsigned short usConfigType; /* Configuration type */
-+ unsigned short usReverseMii; /* Reverse MII */
-+} ETHERNET_MAC_INFO, *PETHERNET_MAC_INFO;
-+
-+
-+/* Information about VoIP DSPs. If ucDspType is BP_VOIP_NO_DSP,
-+ * then the other fields are not valid.
-+ */
-+typedef struct VoIPDspInfo
-+{
-+ unsigned char ucDspType;
-+ unsigned char ucDspAddress;
-+ unsigned short usExtIntrVoip;
-+ unsigned short usGpioVoipReset;
-+ unsigned short usGpioVoipIntr;
-+ unsigned short usGpioLedVoip;
-+ unsigned short usCsVoip;
-+
-+} VOIP_DSP_INFO;
-+
-+
-+/**************************************************************************
-+ * Name : BpSetBoardId
-+ *
-+ * Description: This function find the BOARD_PARAMETERS structure for the
-+ * specified board id string and assigns it to a global, static
-+ * variable.
-+ *
-+ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
-+ * have a board parameters configuration record.
-+ ***************************************************************************/
-+int BpSetBoardId( char *pszBoardId );
-+
-+/**************************************************************************
-+ * Name : BpGetBoardIds
-+ *
-+ * Description: This function returns all of the supported board id strings.
-+ *
-+ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
-+ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
-+ * boundary.
-+ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
-+ * were allocated in pszBoardIds.
-+ *
-+ * Returns : Number of board id strings returned.
-+ ***************************************************************************/
-+int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize );
-+
-+/**************************************************************************
-+ * Name : BpGetEthernetMacInfo
-+ *
-+ * Description: This function returns all of the supported board id strings.
-+ *
-+ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
-+ * buffers.
-+ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
-+ * are pointed to by pEnetInfos.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos );
-+
-+/**************************************************************************
-+ * Name : BpGetSdramSize
-+ *
-+ * Description: This function returns a constant that describees the board's
-+ * SDRAM type and size.
-+ *
-+ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
-+ * is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetSdramSize( unsigned long *pulSdramSize );
-+
-+/**************************************************************************
-+ * Name : BpGetPsiSize
-+ *
-+ * Description: This function returns the persistent storage size in K bytes.
-+ *
-+ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
-+ * storage size is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ ***************************************************************************/
-+int BpGetPsiSize( unsigned long *pulPsiSize );
-+
-+/**************************************************************************
-+ * Name : BpGetRj11InnerOuterPairGpios
-+ *
-+ * Description: This function returns the GPIO pin assignments for changing
-+ * between the RJ11 inner pair and RJ11 outer pair.
-+ *
-+ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
-+ * GPIO pin is returned in.
-+ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, values are returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
-+ unsigned short *pusOuter );
-+
-+/**************************************************************************
-+ * Name : BpGetPressAndHoldResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the press
-+ * and hold reset button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the press and hold
-+ * reset button GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPressAndHoldResetGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetVoipResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the VOIP
-+ * Reset operation.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
-+ * GPIO pin is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetVoipIntrGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
-+ * GPIO pin is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetPcmciaResetGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PCMCIA
-+ * Reset operation.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPcmciaResetGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetUartRtsCtsGpios
-+ *
-+ * Description: This function returns the GPIO pin assignments for RTS and CTS
-+ * UART signals.
-+ *
-+ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
-+ * pin is returned in.
-+ * [OUT] pusCts - Address of short word that the UART CTS GPIO
-+ * pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, values are returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts );
-+
-+/**************************************************************************
-+ * Name : BpGetAdslLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the ADSL
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetAdslFailLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the ADSL
-+ * LED that is used when there is a DSL connection failure.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslFailLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessAntInUse
-+ *
-+ * Description: This function returns the antennas in use for wireless
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
-+ * is in use.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessAntInUse( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesBtnGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * Ses Button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
-+ * Button GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesBtnGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesExtIntr
-+ *
-+ * Description: This function returns the external interrupt number for the
-+ * Wireless Ses Button.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
-+ * external interrup is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesExtIntr( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessSesLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the Wireless
-+ * Ses Led.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
-+ * Led GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessSesLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetUsbLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the USB
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the USB LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetUsbLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the HPNA
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWanDataLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the WAN Data
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWanDataLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetPppLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PPP
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPppLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetPppFailLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the PPP
-+ * LED that is used when there is a PPP connection failure.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetPppFailLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetVoipLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the VOIP
-+ * LED.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderPowerOnLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the power
-+ * on LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderAlarmLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the alarm
-+ * LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
-+ * GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderResetCfgLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the reset
-+ * configuration LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the reset
-+ * configuration LED GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetBootloaderStopLedGpio
-+ *
-+ * Description: This function returns the GPIO pin assignment for the break
-+ * into bootloader LED that is set by the bootloader.
-+ *
-+ * Parameters : [OUT] pusValue - Address of short word that the break into
-+ * bootloader LED GPIO pin is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetBootloaderStopLedGpio( unsigned short *pusValue );
-+
-+/**************************************************************************
-+ * Name : BpGetWirelessExtIntr
-+ *
-+ * Description: This function returns the Wireless external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the wireless
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetWirelessExtIntr( unsigned long *pulValue );
-+
-+/**************************************************************************
-+ * Name : BpGetAdslDyingGaspExtIntr
-+ *
-+ * Description: This function returns the ADSL Dying Gasp external interrupt
-+ * number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue );
-+
-+/**************************************************************************
-+ * Name : BpGetVoipExtIntr
-+ *
-+ * Description: This function returns the VOIP external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the VOIP
-+ * external interrupt number is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue );
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaExtIntr
-+ *
-+ * Description: This function returns the HPNA external interrupt number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the HPNA
-+ * external interrupt number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaExtIntr( unsigned long *pulValue );
-+
-+/**************************************************************************
-+ * Name : BpGetHpnaChipSelect
-+ *
-+ * Description: This function returns the HPNA chip select number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the HPNA
-+ * chip select number is returned in.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetHpnaChipSelect( unsigned long *pulValue );
-+
-+/**************************************************************************
-+ * Name : BpGetVoipChipSelect
-+ *
-+ * Description: This function returns the VOIP chip select number.
-+ *
-+ * Parameters : [OUT] pulValue - Address of short word that the VOIP
-+ * chip select number is returned in.
-+ * [IN] dspNum - Address of the DSP to query.
-+ *
-+ * Returns : BP_SUCCESS - Success, value is returned.
-+ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
-+ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
-+ * for the board.
-+ ***************************************************************************/
-+int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue );
-+
-+#endif /* __ASSEMBLER__ */
-+
-+#if __cplusplus
-+}
-+#endif
-+
-+#endif /* _BOARDPARMS_H */
-+
---- linux-2.6.8.1/scripts/kconfig/mconf.c 2004-08-14 12:54:51.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/scripts/kconfig/mconf.c 2006-06-26 10:07:52.000000000 +0200
-@@ -88,7 +88,7 @@
- static int indent;
- static struct termios ios_org;
- static int rows = 0, cols = 0;
--static struct menu *current_menu;
-+struct menu *current_menu; /* Fails while cross-compiling if keeping static */
- static int child_count;
- static int do_resize;
- static int single_menu_mode;
---- linux-2.6.8.1/Makefile 2004-08-14 12:55:35.000000000 +0200
-+++ linux-2.6.8.1-brcm63xx/Makefile 2006-06-26 10:43:09.000000000 +0200
-@@ -149,9 +149,7 @@
- # then ARCH is assigned, getting whatever value it gets normally, and
- # SUBARCH is subsequently ignored.
-
--SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-- -e s/arm.*/arm/ -e s/sa110/arm/ \
-- -e s/s390x/s390/ -e s/parisc64/parisc/ )
-+SUBARCH := mips
-
- # Cross compiling and selecting different set of gcc/bin-utils
- # ---------------------------------------------------------------------------
-@@ -294,7 +292,7 @@
-
- NOSTDINC_FLAGS = -nostdinc -iwithprefix include
-
--CPPFLAGS := -D__KERNEL__ -Iinclude \
-+CPPFLAGS := -D__KERNEL__ -Iinclude -Ibcmdrivers/opensource/include/bcm963xx/ -Iboardparms/bcm963xx/ -Ibcmdrivers/broadcom/include/bcm963xx/ -Ibcmdrivers/broadcom/char/adsl/bcm96348\
- $(if $(KBUILD_SRC),-Iinclude2 -I$(srctree)/include)
-
- CFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs \
-@@ -405,6 +403,13 @@
- core-y := usr/
- endif # KBUILD_EXTMOD
-
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+BRCMDRIVERS_DIR := $(TOPDIR)/bcmdrivers
-+export HPATH := $(TOPDIR)/include
-+brcmdrivers-y := $(TOPDIR)/boardparms/bcm963xx/ $(BRCMDRIVERS_DIR)/
-+BRCMDRIVERS := $(brcmdrivers-y)
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-+
- ifeq ($(dot-config),1)
- # In this section, we need .config
-
-@@ -473,6 +478,10 @@
- # makefile but the arguement can be passed to make if needed.
- #
-
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+INSTALL_MOD_PATH := $(PROFILE_DIR)/modules
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-+
- MODLIB := $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
- export MODLIB
-
-@@ -480,18 +489,25 @@
- ifeq ($(KBUILD_EXTMOD),)
- core-y += kernel/ mm/ fs/ ipc/ security/ crypto/
-
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
- vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \
- $(core-y) $(core-m) $(drivers-y) $(drivers-m) \
-+ $(brcmdrivers-y) $(brcmdrivers-m) \
- $(net-y) $(net-m) $(libs-y) $(libs-m)))
-
- vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \
- $(init-n) $(init-) \
- $(core-n) $(core-) $(drivers-n) $(drivers-) \
-+ $(brcmdrivers-n) $(brcmdrivers-) \
- $(net-n) $(net-) $(libs-n) $(libs-))))
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-
- init-y := $(patsubst %/, %/built-in.o, $(init-y))
- core-y := $(patsubst %/, %/built-in.o, $(core-y))
- drivers-y := $(patsubst %/, %/built-in.o, $(drivers-y))
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+brcmdrivers-y := $(patsubst %/, %/built-in.o, $(brcmdrivers-y))
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
- net-y := $(patsubst %/, %/built-in.o, $(net-y))
- libs-y1 := $(patsubst %/, %/lib.a, $(libs-y))
- libs-y2 := $(patsubst %/, %/built-in.o, $(libs-y))
-@@ -507,7 +523,8 @@
- # we cannot yet know if we will need to relink vmlinux.
- # So we descend into init/ inside the rule for vmlinux again.
- head-y += $(HEAD)
--vmlinux-objs := $(head-y) $(init-y) $(core-y) $(libs-y) $(drivers-y) $(net-y)
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+vmlinux-objs := $(head-y) $(init-y) $(core-y) $(libs-y) $(drivers-y) $(brcmdrivers-y) $(net-y)
-
- quiet_cmd_vmlinux__ = LD $@
- define cmd_vmlinux__
-@@ -516,11 +533,13 @@
- $(core-y) \
- $(libs-y) \
- $(drivers-y) \
-+ $(brcmdrivers-y) \
- $(net-y) \
- --end-group \
- $(filter .tmp_kallsyms%,$^) \
- -o $@
- endef
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-
- # set -e makes the rule exit immediately on error
-
-@@ -603,9 +622,12 @@
- $(rule_verify_kallsyms)
- endef
-
--vmlinux: $(vmlinux-objs) $(kallsyms.o) arch/$(ARCH)/kernel/vmlinux.lds.s FORCE
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+vmlinux: preparebrcmdriver $(vmlinux-objs) $(kallsyms.o) arch/$(ARCH)/kernel/vmlinux.lds.s FORCE
- $(call if_changed_rule,vmlinux)
-
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-+
- # The actual objects are generated when descending,
- # make sure no implicit rule kicks in
-
-@@ -626,7 +648,13 @@
- # A multi level approach is used. prepare1 is updated first, then prepare0.
- # prepare-all is the collection point for the prepare targets.
-
--.PHONY: prepare-all prepare prepare0 prepare1 prepare2
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+.PHONY: prepare-all prepare prepare0 prepare1 prepare2 preparebrcmdriver
-+
-+preparebrcmdriver:
-+# $(Q)$(MAKE) -C $(BRCMDRIVERS_DIR)/opensource symlinks
-+ $(Q)$(MAKE) -C $(BRCMDRIVERS_DIR)/broadcom symlinks
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-
- # prepare 2 generate Makefile to be placed in output directory, if
- # using a seperate output directory. This allows convinient use
-@@ -743,7 +771,10 @@
- # Build modules
-
- .PHONY: modules
--modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+modules: preparebrcmdriver $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
-+#modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux)
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
- @echo ' Building modules, stage 2.';
- $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modpost
-
-@@ -754,23 +785,31 @@
-
- # Target to install modules
- .PHONY: modules_install
--modules_install: _modinst_ _modinst_post
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+#modules_install: _modinst_ _modinst_post
-+#We have no need for it "_modinst_post"
-+modules_install: _modinst_
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-
- .PHONY: _modinst_
- _modinst_:
-- @if [ -z "`$(DEPMOD) -V | grep module-init-tools`" ]; then \
-- echo "Warning: you may need to install module-init-tools"; \
-- echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
-- sleep 1; \
-- fi
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
-+# @if [ -z "`$(DEPMOD) -V | grep module-init-tools`" ]; then \
-+# echo "Warning: you may need to install module-init-tools"; \
-+# echo "See http://www.codemonkey.org.uk/docs/post-halloween-2.6.txt";\
-+# sleep 1; \
-+# fi
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
- @rm -rf $(MODLIB)/kernel
- @rm -f $(MODLIB)/source
- @mkdir -p $(MODLIB)/kernel
-- @ln -s $(srctree) $(MODLIB)/source
-- @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
-- rm -f $(MODLIB)/build ; \
-- ln -s $(objtree) $(MODLIB)/build ; \
-- fi
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code
-+# @ln -s $(srctree) $(MODLIB)/source
-+# @if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
-+# rm -f $(MODLIB)/build ; \
-+# ln -s $(objtree) $(MODLIB)/build ; \
-+# fi
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
- $(Q)$(MAKE) -rR -f $(srctree)/scripts/Makefile.modinst
-
- # If System.map exists, run depmod. This deliberately does not have a
-@@ -853,10 +892,12 @@
- clean: archclean $(clean-dirs)
- $(call cmd,rmdirs)
- $(call cmd,rmfiles)
-+# CONFIG_MIPS_BRCM Begin Broadcom changed code.
- @find . $(RCS_FIND_IGNORE) \
- \( -name '*.[oas]' -o -name '*.ko' -o -name '.*.cmd' \
- -o -name '.*.d' -o -name '.*.tmp' -o -name '*.mod.c' \) \
- -type f -print | xargs rm -f
-+# CONFIG_MIPS_BRCM End Broadcom changed code.
-
- # mrproper - Delete all generated files, including .config
- #
-@@ -883,7 +924,7 @@
- -o -name '.*.rej' -o -size 0 \
- -o -name '*%' -o -name '.*.cmd' -o -name 'core' \) \
- -type f -print | xargs rm -f
--
-+ rm vmlinux.bin vmlinux.lz
-
- # Packaging of the kernel to various formats
- # ---------------------------------------------------------------------------
diff --git a/target/linux/brcm63xx-2.6/patches/001-brcm_boards.patch b/target/linux/brcm63xx-2.6/patches/001-brcm_boards.patch
new file mode 100644
index 0000000000..b91cb25d66
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/001-brcm_boards.patch
@@ -0,0 +1,9059 @@
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/bcm63xx_flash.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/bcm63xx_flash.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/bcm63xx_flash.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/bcm63xx_flash.c 2006-07-07 22:16:32.000000000 +0200
+@@ -0,0 +1,775 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ ***************************************************************************
++ * File Name : bcm63xx_flash.c
++ *
++ * Description: This file contains the flash device driver APIs for bcm63xx board.
++ *
++ * Created on : 8/10/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
++ *
++ ***************************************************************************/
++
++
++/* Includes. */
++#include <linux/fs.h>
++#include <linux/capability.h>
++#include <linux/slab.h>
++#include <linux/errno.h>
++#include <linux/module.h>
++#include <asm/uaccess.h>
++
++#include <bcm_map_part.h>
++#include <board.h>
++#define BCMTAG_EXE_USE
++#include <bcmTag.h>
++#include "cfiflash.h"
++#include "boardparms.h"
++
++//#define DEBUG_FLASH
++
++static FLASH_ADDR_INFO fInfo;
++static int flashInitialized = 0;
++
++void *retriedKmalloc(size_t size)
++{
++ void *pBuf;
++ int tryCount = 0;
++
++ // try 1000 times before quit
++ while (((pBuf = kmalloc(size, GFP_KERNEL)) == NULL) && (tryCount++ < 1000))
++ {
++ current->state = TASK_INTERRUPTIBLE;
++ schedule_timeout(HZ/10);
++ }
++ if (tryCount >= 1000)
++ pBuf = NULL;
++ else
++ memset(pBuf, 0, size);
++
++ return pBuf;
++}
++
++void retriedKfree(void *pBuf)
++{
++ kfree(pBuf);
++}
++
++/***************************************************************************
++// Function Name: getCrc32
++// Description : caculate the CRC 32 of the given data.
++// Parameters : pdata - array of data.
++// size - number of input data bytes.
++// crc - either CRC32_INIT_VALUE or previous return value.
++// Returns : crc.
++****************************************************************************/
++UINT32 getCrc32(byte *pdata, UINT32 size, UINT32 crc)
++{
++ while (size-- > 0)
++ crc = (crc >> 8) ^ Crc32_table[(crc ^ *pdata++) & 0xff];
++
++ return crc;
++}
++
++// get the nvram start addr
++//
++unsigned long get_nvram_start_addr(void)
++{
++ return ((unsigned long)
++ (flash_get_memptr(fInfo.flash_nvram_start_blk) + fInfo.flash_nvram_blk_offset));
++}
++
++// get the scratch_pad start addr
++//
++unsigned long get_scratch_pad_start_addr(void)
++{
++ return ((unsigned long)
++ (flash_get_memptr(fInfo.flash_scratch_pad_start_blk) + fInfo.flash_scratch_pad_blk_offset));
++}
++
++
++
++/* *********************************************************************
++ * kerSysImageTagGet()
++ * Get the image tag
++ * Input parameters:
++ * none
++ * Return value:
++ * point to tag -- Found
++ * NULL -- failed
++ ********************************************************************* */
++PFILE_TAG kerSysImageTagGet(void)
++{
++ int i;
++ int totalBlks = flash_get_numsectors();
++ UINT32 crc;
++ unsigned char *sectAddr;
++ PFILE_TAG pTag;
++
++#if defined(DEBUG_FLASH)
++ printk("totalblks in tagGet=%d\n", totalBlks);
++#endif
++
++ // start from 2nd blk, assume 1st one is always CFE
++ for (i = 1; i < totalBlks; i++)
++ {
++ sectAddr = flash_get_memptr((byte) i);
++ crc = CRC32_INIT_VALUE;
++ crc = getCrc32(sectAddr, (UINT32)TAG_LEN-TOKEN_LEN, crc);
++ pTag = (PFILE_TAG) sectAddr;
++
++#if defined(DEBUG_FLASH)
++ printk("Check Tag crc on blk [%d]\n", i);
++#endif
++
++ if (crc == (UINT32)(*(UINT32*)(pTag->tagValidationToken)))
++ return pTag;
++ }
++
++ return (PFILE_TAG) NULL;
++}
++
++// Initialize the flash and fill out the fInfo structure
++void kerSysFlashInit( void )
++{
++ int i = 0;
++ int totalBlks = 0;
++ int totalSize = 0;
++ int startAddr = 0;
++ int usedBlkSize = 0;
++ NVRAM_DATA nvramData;
++ UINT32 crc = CRC32_INIT_VALUE, savedCrc;
++ PFILE_TAG pTag = NULL;
++ unsigned long kernelEndAddr = 0;
++ unsigned long spAddr = 0;
++
++ if (flashInitialized)
++ return;
++
++ flashInitialized = 1;
++ flash_init();
++
++ totalBlks = flash_get_numsectors();
++ totalSize = flash_get_total_size();
++
++ printk("Total Flash size: %dK with %d sectors\n", totalSize/1024, totalBlks);
++
++ /* nvram is always at the end of flash */
++ fInfo.flash_nvram_length = FLASH45_LENGTH_NVRAM;
++ fInfo.flash_nvram_start_blk = 0; /* always the first block */
++ fInfo.flash_nvram_number_blk = 1; /*always fits in the first block */
++ fInfo.flash_nvram_blk_offset = NVRAM_DATA_OFFSET;
++
++ // check nvram CRC
++ memcpy((char *)&nvramData, (char *)get_nvram_start_addr(), sizeof(NVRAM_DATA));
++ savedCrc = nvramData.ulCheckSum;
++ nvramData.ulCheckSum = 0;
++ crc = getCrc32((char *)&nvramData, (UINT32) sizeof(NVRAM_DATA), crc);
++
++ BpSetBoardId( nvramData.szBoardId );
++
++ fInfo.flash_persistent_length = NVRAM_PSI_DEFAULT;
++ if (savedCrc != crc)
++ {
++ printk("***Board is not initialized****: Using the default PSI size: %d\n",
++ fInfo.flash_persistent_length);
++ }
++ else
++ {
++ unsigned long ulPsiSize;
++ if( BpGetPsiSize( &ulPsiSize ) == BP_SUCCESS )
++ fInfo.flash_persistent_length = ulPsiSize;
++ else
++ {
++ printk("***Board id is not set****: Using the default PSI size: %d\n",
++ fInfo.flash_persistent_length);
++ }
++ }
++
++ fInfo.flash_persistent_length *= ONEK;
++ startAddr = totalSize - fInfo.flash_persistent_length;
++ fInfo.flash_persistent_start_blk = flash_get_blk(startAddr+FLASH_BASE_ADDR_REG);
++ fInfo.flash_persistent_number_blk = totalBlks - fInfo.flash_persistent_start_blk;
++ // save abs SP address (Scratch Pad). it is before PSI
++ spAddr = startAddr - SP_MAX_LEN ;
++ // find out the offset in the start_blk
++ usedBlkSize = 0;
++ for (i = fInfo.flash_persistent_start_blk;
++ i < (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk); i++)
++ {
++ usedBlkSize += flash_get_sector_size((byte) i);
++ }
++ fInfo.flash_persistent_blk_offset = usedBlkSize - fInfo.flash_persistent_length;
++
++ // get the info for sp
++ if (!(pTag = kerSysImageTagGet()))
++ {
++ printk("Failed to read image tag from flash\n");
++ return;
++ }
++ kernelEndAddr = (unsigned long) simple_strtoul(pTag->kernelAddress, NULL, 10) + \
++ (unsigned long) simple_strtoul(pTag->kernelLen, NULL, 10);
++
++ // make suer sp does not share kernel block
++ fInfo.flash_scratch_pad_start_blk = flash_get_blk(spAddr+FLASH_BASE_ADDR_REG);
++ if (fInfo.flash_scratch_pad_start_blk != flash_get_blk(kernelEndAddr))
++ {
++ fInfo.flash_scratch_pad_length = SP_MAX_LEN;
++ if (fInfo.flash_persistent_start_blk == fInfo.flash_scratch_pad_start_blk) // share blk
++ {
++#if 1 /* do not used scratch pad unless it's in its own sector */
++ printk("Scratch pad is not used for this flash part.\n");
++ fInfo.flash_scratch_pad_length = 0; // no sp
++#else /* allow scratch pad to share a sector with another section such as PSI */
++ fInfo.flash_scratch_pad_number_blk = 1;
++ fInfo.flash_scratch_pad_blk_offset = fInfo.flash_persistent_blk_offset - fInfo.flash_scratch_pad_length;
++#endif
++ }
++ else // on different blk
++ {
++ fInfo.flash_scratch_pad_number_blk = fInfo.flash_persistent_start_blk\
++ - fInfo.flash_scratch_pad_start_blk;
++ // find out the offset in the start_blk
++ usedBlkSize = 0;
++ for (i = fInfo.flash_scratch_pad_start_blk;
++ i < (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk); i++)
++ usedBlkSize += flash_get_sector_size((byte) i);
++ fInfo.flash_scratch_pad_blk_offset = usedBlkSize - fInfo.flash_scratch_pad_length;
++ }
++ }
++ else
++ {
++ printk("No flash for scratch pad!\n");
++ fInfo.flash_scratch_pad_length = 0; // no sp
++ }
++
++#if defined(DEBUG_FLASH)
++ printk("fInfo.flash_scratch_pad_start_blk = %d\n", fInfo.flash_scratch_pad_start_blk);
++ printk("fInfo.flash_scratch_pad_number_blk = %d\n", fInfo.flash_scratch_pad_number_blk);
++ printk("fInfo.flash_scratch_pad_length = 0x%x\n", fInfo.flash_scratch_pad_length);
++ printk("fInfo.flash_scratch_pad_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_scratch_pad_blk_offset);
++
++ printk("fInfo.flash_nvram_start_blk = %d\n", fInfo.flash_nvram_start_blk);
++ printk("fInfo.flash_nvram_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_nvram_blk_offset);
++ printk("fInfo.flash_nvram_number_blk = %d\n", fInfo.flash_nvram_number_blk);
++
++ printk("psi startAddr = %x\n", startAddr+FLASH_BASE_ADDR_REG);
++ printk("fInfo.flash_persistent_start_blk = %d\n", fInfo.flash_persistent_start_blk);
++ printk("fInfo.flash_persistent_blk_offset = 0x%x\n", (unsigned int)fInfo.flash_persistent_blk_offset);
++ printk("fInfo.flash_persistent_number_blk = %d\n", fInfo.flash_persistent_number_blk);
++#endif
++
++}
++
++
++
++/***********************************************************************
++ * Function Name: kerSysFlashAddrInfoGet
++ * Description : Fills in a structure with information about the NVRAM
++ * and persistent storage sections of flash memory.
++ * Fro physmap.c to mount the fs vol.
++ * Returns : None.
++ ***********************************************************************/
++void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info)
++{
++ pflash_addr_info->flash_nvram_blk_offset = fInfo.flash_nvram_blk_offset;
++ pflash_addr_info->flash_nvram_length = fInfo.flash_nvram_length;
++ pflash_addr_info->flash_nvram_number_blk = fInfo.flash_nvram_number_blk;
++ pflash_addr_info->flash_nvram_start_blk = fInfo.flash_nvram_start_blk;
++ pflash_addr_info->flash_persistent_blk_offset = fInfo.flash_persistent_blk_offset;
++ pflash_addr_info->flash_persistent_length = fInfo.flash_persistent_length;
++ pflash_addr_info->flash_persistent_number_blk = fInfo.flash_persistent_number_blk;
++ pflash_addr_info->flash_persistent_start_blk = fInfo.flash_persistent_start_blk;
++}
++
++
++// get shared blks into *** pTempBuf *** which has to be released bye the caller!
++// return: if pTempBuf != NULL, poits to the data with the dataSize of the buffer
++// !NULL -- ok
++// NULL -- fail
++static char *getSharedBlks(int start_blk, int end_blk)
++{
++ int i = 0;
++ int usedBlkSize = 0;
++ int sect_size = 0;
++ char *pTempBuf = NULL;
++ char *pBuf = NULL;
++
++ for (i = start_blk; i < end_blk; i++)
++ usedBlkSize += flash_get_sector_size((byte) i);
++
++#if defined(DEBUG_FLASH)
++ printk("usedBlkSize = %d\n", usedBlkSize);
++#endif
++
++ if ((pTempBuf = (char *) retriedKmalloc(usedBlkSize)) == NULL)
++ {
++ printk("failed to allocate memory with size: %d\n", usedBlkSize);
++ return pTempBuf;
++ }
++
++ pBuf = pTempBuf;
++ for (i = start_blk; i < end_blk; i++)
++ {
++ sect_size = flash_get_sector_size((byte) i);
++
++#if defined(DEBUG_FLASH)
++ printk("i = %d, sect_size = %d, end_blk = %d\n", i, sect_size, end_blk);
++#endif
++ flash_read_buf((byte)i, 0, pBuf, sect_size);
++ pBuf += sect_size;
++ }
++
++ return pTempBuf;
++}
++
++
++
++// Set the pTempBuf to flash from start_blk to end_blk
++// return:
++// 0 -- ok
++// -1 -- fail
++static int setSharedBlks(int start_blk, int end_blk, char *pTempBuf)
++{
++ int i = 0;
++ int sect_size = 0;
++ int sts = 0;
++ char *pBuf = pTempBuf;
++
++ for (i = start_blk; i < end_blk; i++)
++ {
++ sect_size = flash_get_sector_size((byte) i);
++ flash_sector_erase_int(i);
++ if (flash_write_buf(i, 0, pBuf, sect_size) != sect_size)
++ {
++ printk("Error writing flash sector %d.", i);
++ sts = -1;
++ break;
++ }
++ pBuf += sect_size;
++ }
++
++ return sts;
++}
++
++
++
++/*******************************************************************************
++ * NVRAM functions
++ *******************************************************************************/
++
++// get nvram data
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysNvRamGet(char *string, int strLen, int offset)
++{
++ char *pBuf = NULL;
++
++ if (!flashInitialized)
++ kerSysFlashInit();
++
++ if (strLen > FLASH45_LENGTH_NVRAM)
++ return -1;
++
++ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
++ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
++ return -1;
++
++ // get string off the memory buffer
++ memcpy(string, (pBuf + fInfo.flash_nvram_blk_offset + offset), strLen);
++
++ retriedKfree(pBuf);
++
++ return 0;
++}
++
++
++// set nvram
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysNvRamSet(char *string, int strLen, int offset)
++{
++ int sts = 0;
++ char *pBuf = NULL;
++
++ if (strLen > FLASH45_LENGTH_NVRAM)
++ return -1;
++
++ if ((pBuf = getSharedBlks(fInfo.flash_nvram_start_blk,
++ (fInfo.flash_nvram_start_blk + fInfo.flash_nvram_number_blk))) == NULL)
++ return -1;
++
++ // set string to the memory buffer
++ memcpy((pBuf + fInfo.flash_nvram_blk_offset + offset), string, strLen);
++
++ if (setSharedBlks(fInfo.flash_nvram_start_blk,
++ (fInfo.flash_nvram_number_blk + fInfo.flash_nvram_start_blk), pBuf) != 0)
++ sts = -1;
++
++ retriedKfree(pBuf);
++
++ return sts;
++}
++
++
++/***********************************************************************
++ * Function Name: kerSysEraseNvRam
++ * Description : Erase the NVRAM storage section of flash memory.
++ * Returns : 1 -- ok, 0 -- fail
++ ***********************************************************************/
++int kerSysEraseNvRam(void)
++{
++ int sts = 1;
++ char *tempStorage = retriedKmalloc(FLASH45_LENGTH_NVRAM);
++
++ // just write the whole buf with '0xff' to the flash
++ if (!tempStorage)
++ sts = 0;
++ else
++ {
++ memset(tempStorage, 0xff, FLASH45_LENGTH_NVRAM);
++ if (kerSysNvRamSet(tempStorage, FLASH45_LENGTH_NVRAM, 0) != 0)
++ sts = 0;
++ retriedKfree(tempStorage);
++ }
++
++ return sts;
++}
++
++
++/*******************************************************************************
++ * PSI functions
++ *******************************************************************************/
++// get psi data
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysPersistentGet(char *string, int strLen, int offset)
++{
++ char *pBuf = NULL;
++
++ if (strLen > fInfo.flash_persistent_length)
++ return -1;
++
++ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
++ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
++ return -1;
++
++ // get string off the memory buffer
++ memcpy(string, (pBuf + fInfo.flash_persistent_blk_offset + offset), strLen);
++
++ retriedKfree(pBuf);
++
++ return 0;
++}
++
++
++// set psi
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysPersistentSet(char *string, int strLen, int offset)
++{
++ int sts = 0;
++ char *pBuf = NULL;
++
++ if (strLen > fInfo.flash_persistent_length)
++ return -1;
++
++ if ((pBuf = getSharedBlks(fInfo.flash_persistent_start_blk,
++ (fInfo.flash_persistent_start_blk + fInfo.flash_persistent_number_blk))) == NULL)
++ return -1;
++
++ // set string to the memory buffer
++ memcpy((pBuf + fInfo.flash_persistent_blk_offset + offset), string, strLen);
++
++ if (setSharedBlks(fInfo.flash_persistent_start_blk,
++ (fInfo.flash_persistent_number_blk + fInfo.flash_persistent_start_blk), pBuf) != 0)
++ sts = -1;
++
++ retriedKfree(pBuf);
++
++ return sts;
++}
++
++
++// flash bcm image
++// return:
++// 0 - ok
++// !0 - the sector number fail to be flashed (should not be 0)
++int kerSysBcmImageSet( int flash_start_addr, char *string, int size)
++{
++ int sts;
++ int sect_size;
++ int blk_start;
++ int i;
++ char *pTempBuf = NULL;
++ int whole_image = 0;
++
++ blk_start = flash_get_blk(flash_start_addr);
++ if( blk_start < 0 )
++ return( -1 );
++
++ if (flash_start_addr == FLASH_BASE && size > FLASH45_LENGTH_BOOT_ROM)
++ whole_image = 1;
++
++ /* write image to flash memory */
++ do
++ {
++ sect_size = flash_get_sector_size(blk_start);
++// NOTE: for memory problem in multiple PVC configuration, temporary get rid of kmalloc this 64K for now.
++// if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
++// {
++// printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
++// kerSysMipsSoftReset(); // reset the board right away.
++// }
++ // for whole image, no check on psi
++ if (!whole_image && blk_start == fInfo.flash_persistent_start_blk) // share the blk with psi
++ {
++ if (size > (sect_size - fInfo.flash_persistent_length))
++ {
++ printk("Image is too big\n");
++ break; // image is too big. Can not overwrite to nvram
++ }
++ if ((pTempBuf = (char *)retriedKmalloc(sect_size)) == NULL)
++ {
++ printk("Failed to allocate memory with size: %d. Reset the router...\n", sect_size);
++ kerSysMipsSoftReset(); // reset the board right away.
++ }
++ flash_read_buf((byte)blk_start, 0, pTempBuf, sect_size);
++ if (copy_from_user((void *)pTempBuf,(void *)string, size) != 0)
++ break; // failed ?
++ flash_sector_erase_int(blk_start); // erase blk before flash
++ if (flash_write_buf(blk_start, 0, pTempBuf, sect_size) == sect_size)
++ size = 0; // break out and say all is ok
++ retriedKfree(pTempBuf);
++ break;
++ }
++
++ flash_sector_erase_int(blk_start); // erase blk before flash
++
++ if (sect_size > size)
++ {
++ if (size & 1)
++ size++;
++ sect_size = size;
++ }
++
++ if ((i = flash_write_buf(blk_start, 0, string, sect_size)) != sect_size) {
++ break;
++ }
++ blk_start++;
++ string += sect_size;
++ size -= sect_size;
++ } while (size > 0);
++
++ if (whole_image)
++ {
++ // If flashing a whole image, erase to end of flash.
++ int total_blks = flash_get_numsectors();
++ while( blk_start < total_blks )
++ {
++ flash_sector_erase_int(blk_start);
++ blk_start++;
++ }
++ }
++ if (pTempBuf)
++ retriedKfree(pTempBuf);
++
++ if( size == 0 )
++ sts = 0; // ok
++ else
++ sts = blk_start; // failed to flash this sector
++
++ return sts;
++}
++
++/*******************************************************************************
++ * SP functions
++ *******************************************************************************/
++// get sp data. NOTE: memcpy work here -- not using copy_from/to_user
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysScratchPadGet(char *tokenId, char *tokBuf, int bufLen)
++{
++ PSP_HEADER pHead = NULL;
++ PSP_TOKEN pToken = NULL;
++ char *pBuf = NULL;
++ char *pShareBuf = NULL;
++ char *startPtr = NULL;
++ char *endPtr = NULL;
++ char *spEndPtr = NULL;
++ int sts = -1;
++
++ if (fInfo.flash_scratch_pad_length == 0)
++ return sts;
++
++ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
++ {
++ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
++ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
++ return sts;
++ }
++
++ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
++ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
++ return sts;
++
++ // pBuf points to SP buf
++ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
++
++ pHead = (PSP_HEADER) pBuf;
++ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
++ {
++ printk("Scrap pad is not initialized.\n");
++ return sts;
++ }
++
++ // search up to SPUsedLen for the token
++ startPtr = pBuf + sizeof(SP_HEADER);
++ endPtr = pBuf + pHead->SPUsedLen;
++ spEndPtr = pBuf + SP_MAX_LEN;
++ while (startPtr < endPtr && startPtr < spEndPtr)
++ {
++ pToken = (PSP_TOKEN) startPtr;
++ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
++ {
++ memcpy(tokBuf, startPtr + sizeof(SP_TOKEN), bufLen);
++ sts = 0;
++ break;
++ }
++ // get next token
++ startPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
++ }
++
++ retriedKfree(pShareBuf);
++
++ return sts;
++}
++
++
++// set sp. NOTE: memcpy work here -- not using copy_from/to_user
++// return:
++// 0 - ok
++// -1 - fail
++int kerSysScratchPadSet(char *tokenId, char *tokBuf, int bufLen)
++{
++ PSP_TOKEN pToken = NULL;
++ PSP_HEADER pHead = NULL;
++ char *pShareBuf = NULL;
++ char *pBuf = NULL;
++ SP_HEADER SPHead;
++ SP_TOKEN SPToken;
++ char *curPtr;
++ int sts = -1;
++
++ if (fInfo.flash_scratch_pad_length == 0)
++ return sts;
++
++ if (bufLen >= (fInfo.flash_scratch_pad_length - sizeof(SP_HEADER) - sizeof(SP_TOKEN)))
++ {
++ printk("Exceed scratch pad space by %d\n", bufLen - fInfo.flash_scratch_pad_length \
++ - sizeof(SP_HEADER) - sizeof(SP_TOKEN));
++ return sts;
++ }
++
++ if ((pShareBuf = getSharedBlks(fInfo.flash_scratch_pad_start_blk,
++ (fInfo.flash_scratch_pad_start_blk + fInfo.flash_scratch_pad_number_blk))) == NULL)
++ return sts;
++
++ // pBuf points to SP buf
++ pBuf = pShareBuf + fInfo.flash_scratch_pad_blk_offset;
++ pHead = (PSP_HEADER) pBuf;
++
++ // form header info. SPUsedLen later on...
++ memset((char *)&SPHead, 0, sizeof(SP_HEADER));
++ memcpy(SPHead.SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN);
++ SPHead.SPVersion = SP_VERSION;
++
++ // form token info.
++ memset((char*)&SPToken, 0, sizeof(SP_TOKEN));
++ strncpy(SPToken.tokenName, tokenId, TOKEN_NAME_LEN - 1);
++ SPToken.tokenLen = bufLen;
++ if (memcmp(pHead->SPMagicNum, MAGIC_NUMBER, MAGIC_NUM_LEN) != 0)
++ {
++ // new sp, so just flash the token
++ printk("No Scrap pad found. Initialize scratch pad...\n");
++ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen;
++ memcpy(pBuf, (char *)&SPHead, sizeof(SP_HEADER));
++ curPtr = pBuf + sizeof(SP_HEADER);
++ memcpy(curPtr, (char *)&SPToken, sizeof(SP_TOKEN));
++ curPtr += sizeof(SP_TOKEN);
++ memcpy(curPtr, tokBuf, bufLen);
++ }
++ else
++ {
++ // need search for the token, if exist with same size overwrite it. if sizes differ,
++ // move over the later token data over and put the new one at the end
++ char *endPtr = pBuf + pHead->SPUsedLen;
++ char *spEndPtr = pBuf + SP_MAX_LEN;
++ curPtr = pBuf + sizeof(SP_HEADER);
++ while (curPtr < endPtr && curPtr < spEndPtr)
++ {
++ pToken = (PSP_TOKEN) curPtr;
++ if (strncmp(pToken->tokenName, tokenId, TOKEN_NAME_LEN) == 0)
++ {
++ if (pToken->tokenLen == bufLen) // overwirte it
++ {
++ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen);
++ break;
++ }
++ else // move later data over and put the new token at the end
++ {
++ memcpy((curPtr+sizeof(SP_TOKEN)), tokBuf, bufLen); // ~~~
++ break;
++ }
++ }
++ else // not same token ~~~
++ {
++ }
++ // get next token
++ curPtr += sizeof(SP_TOKEN) + pToken->tokenLen;
++ } // end while
++ SPHead.SPUsedLen = sizeof(SP_HEADER) + sizeof(SP_TOKEN) + bufLen; // ~~~
++ if (SPHead.SPUsedLen > SP_MAX_LEN)
++ {
++ printk("No more Scratch pad space left! Over limit by %d bytes\n", SPHead.SPUsedLen - SP_MAX_LEN);
++ return sts;
++ }
++
++ } // else if not new sp
++
++ sts = setSharedBlks(fInfo.flash_scratch_pad_start_blk,
++ (fInfo.flash_scratch_pad_number_blk + fInfo.flash_scratch_pad_start_blk), pShareBuf);
++
++ retriedKfree(pShareBuf);
++
++ return sts;
++
++
++}
++
++int kerSysFlashSizeGet(void)
++{
++ return flash_get_total_size();
++}
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/bcm63xx_led.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/bcm63xx_led.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/bcm63xx_led.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/bcm63xx_led.c 2006-07-07 22:16:32.000000000 +0200
+@@ -0,0 +1,582 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/***************************************************************************
++ * File Name : bcm63xx_led.c
++ *
++ * Description:
++ *
++ * This file contains bcm963xx board led control API functions.
++ *
++ * To use it, do the following
++ *
++ * 1). define in the board.c the following led mappping (this is for 6345GW board):
++ * const LED_MAP_PAIR cLedMapping45GW[] =
++ * { // led name Initial state physical pin (ledMask)
++ * {kLedUsb, kLedStateOff, GPIO_LED_PIN_7},
++ * {kLedAdsl, kLedStateOff, GPIO_LED_PIN_8},
++ * {kLedPPP, kLedStateOff, GPIO_LED_PIN_9}, // PPP and WanData share PIN_9
++ * {kLedWanData, kLedStateOff, GPIO_LED_PIN_9},
++ * {kLedWireless, kLedStateOff, GPIO_LED_PIN_10},
++ * {kLedEnd, kLedStateOff, 0 } // NOTE: kLedEnd has to be at the end.
++ *
++ * 2). };To initialize led API and initial state of the leds, call the following function with the mapping
++ * pointer from the above struct
++ *
++ * boardLedInit((PLED_MAP_PAIR) &cLedMapping45R);
++ *
++ * 3). Sample call for kernel mode:
++ *
++ * kerSysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board.h
++ *
++ * 4). Sample call for user mode
++ *
++ * sysLedCtrl(kLedAdsl, kLedStateBlinkOnce); // kLedxxx defines in board_api.h
++ *
++ *
++ * Created on : 10/28/2002 seanl
++ *
++ ***************************************************************************/
++
++/* Includes. */
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/capability.h>
++#include <linux/slab.h>
++#include <linux/errno.h>
++#include <linux/module.h>
++#include <linux/netdevice.h>
++#include <asm/uaccess.h>
++
++#include <bcm_map_part.h>
++#include <board.h>
++
++#define k100ms (HZ / 10) // ~100 ms
++#define kFastBlinkCount 0 // ~100ms
++#define kSlowBlinkCount 5 // ~600ms
++
++#define MAX_VIRT_LEDS 12
++
++// uncomment // for debug led
++//#define DEBUG_LED
++
++// global variables:
++struct timer_list gLedTimer;
++int gTimerOn = FALSE;
++int gLedCount = 0;
++
++typedef struct ledinfo
++{
++ unsigned short ledMask; // mask for led: ie. giop 10 = 0x0400
++ unsigned short ledActiveLow; // GPIO bit reset to turn on LED
++ unsigned short ledMaskFail; // mask for led: ie. giop 10 = 0x0400
++ unsigned short ledActiveLowFail;// GPIO bit reset to turn on LED
++ BOARD_LED_STATE ledState; // current led state
++ BOARD_LED_STATE savedLedState; // used in blink once for restore to the orignal ledState
++ int blinkCountDown; // if == 0, do blink (toggle). Is assgined value and dec by 1 at each timer.
++} LED_INFO, *PLED_INFO;
++
++static PLED_INFO gLed = NULL;
++static PLED_INFO gpVirtLeds[MAX_VIRT_LEDS];
++static HANDLE_LED_FUNC gLedHwFunc[MAX_VIRT_LEDS];
++static HANDLE_LED_FUNC gLedHwFailFunc[MAX_VIRT_LEDS];
++
++#if 0 /* BROKEN */
++#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
++static int gLedOffInBridgeMode = 1;
++#elif defined(CONFIG_BCM96345)
++static int gLedOffInBridgeMode = 0;
++#endif
++#endif
++
++void ledTimerExpire(void);
++int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed );
++
++//**************************************************************************************
++// LED operations
++//**************************************************************************************
++
++// turn led on and set the ledState
++void ledOn(PLED_INFO pLed)
++{
++ if( pLed->ledMask )
++ {
++ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
++ if( pLed->ledActiveLow )
++ GPIO->GPIOio &= ~pLed->ledMask; // turn on the led
++ else
++ GPIO->GPIOio |= pLed->ledMask; // turn on the led
++ pLed->ledState = pLed->savedLedState = kLedStateOn;
++ }
++}
++
++
++// turn led off and set the ledState
++void ledOff(PLED_INFO pLed)
++{
++ if( pLed->ledMask )
++ {
++ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
++ if( pLed->ledActiveLow )
++ GPIO->GPIOio |= pLed->ledMask; // turn off the led
++ else
++ GPIO->GPIOio &= ~pLed->ledMask; // turn off the led
++ pLed->ledState = pLed->savedLedState = kLedStateOff;
++ }
++}
++
++// turn led on and set the ledState
++void ledOnFail(PLED_INFO pLed)
++{
++ if( pLed->ledMaskFail )
++ {
++ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
++ if( pLed->ledActiveLowFail )
++ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn on the led
++ else
++ GPIO->GPIOio |= pLed->ledMaskFail; // turn on the led
++ pLed->ledState = pLed->savedLedState = kLedStateFail;
++ }
++}
++
++
++// turn led off and set the ledState
++void ledOffFail(PLED_INFO pLed)
++{
++ if( pLed->ledMaskFail )
++ {
++ GPIO->GPIODir |= pLed->ledMaskFail; // turn on the direction bit in case was turned off by some one
++ if( pLed->ledActiveLowFail )
++ GPIO->GPIOio |= pLed->ledMaskFail; // turn off the led
++ else
++ GPIO->GPIOio &= ~pLed->ledMaskFail;// turn off the led
++ pLed->ledState = pLed->savedLedState = kLedStateOff;
++ }
++}
++
++
++// toggle the led and return the current ledState
++BOARD_LED_STATE ledToggle(PLED_INFO pLed)
++{
++ GPIO->GPIODir |= pLed->ledMask; // turn on the direction bit in case was turned off by some one
++ if (GPIO->GPIOio & pLed->ledMask)
++ {
++ GPIO->GPIOio &= ~(pLed->ledMask);
++ return( (pLed->ledActiveLow) ? kLedStateOn : kLedStateOff );
++ }
++ else
++ {
++ GPIO->GPIOio |= pLed->ledMask;
++ return( (pLed->ledActiveLow) ? kLedStateOff : kLedStateOn );
++ }
++}
++
++
++// led timer. Will return if timer is already on
++void ledTimerStart(void)
++{
++ if (gTimerOn)
++ return;
++
++#if defined(DEBUG_LED)
++ printk("led: add_timer\n");
++#endif
++
++ init_timer(&gLedTimer);
++ gLedTimer.function = (void*)ledTimerExpire;
++ gLedTimer.expires = jiffies + k100ms; // timer expires in ~100ms
++ add_timer (&gLedTimer);
++ gTimerOn = TRUE;
++}
++
++
++// led timer expire kicks in about ~100ms and perform the led operation according to the ledState and
++// restart the timer according to ledState
++void ledTimerExpire(void)
++{
++ int i;
++ PLED_INFO pCurLed;
++
++ gTimerOn = FALSE;
++
++ for (i = 0, pCurLed = gLed; i < gLedCount; i++, pCurLed++)
++ {
++#if defined(DEBUG_LED)
++ printk("led[%d]: Mask=0x%04x, State = %d, blcd=%d\n", i, pCurLed->ledMask, pCurLed->ledState, pCurLed->blinkCountDown);
++#endif
++ switch (pCurLed->ledState)
++ {
++ case kLedStateOn:
++ case kLedStateOff:
++ case kLedStateFail:
++ pCurLed->blinkCountDown = 0; // reset the blink count down
++ break;
++
++ case kLedStateBlinkOnce:
++ ledToggle(pCurLed);
++ pCurLed->blinkCountDown = 0; // reset to 0
++ pCurLed->ledState = pCurLed->savedLedState;
++ if (pCurLed->ledState == kLedStateSlowBlinkContinues ||
++ pCurLed->ledState == kLedStateFastBlinkContinues)
++ ledTimerStart(); // start timer if in blinkContinues stats
++ break;
++
++ case kLedStateSlowBlinkContinues:
++ if (pCurLed->blinkCountDown-- == 0)
++ {
++ pCurLed->blinkCountDown = kSlowBlinkCount;
++ ledToggle(pCurLed);
++ }
++ ledTimerStart();
++ break;
++
++ case kLedStateFastBlinkContinues:
++ if (pCurLed->blinkCountDown-- == 0)
++ {
++ pCurLed->blinkCountDown = kFastBlinkCount;
++ ledToggle(pCurLed);
++ }
++ ledTimerStart();
++ break;
++
++ default:
++ printk("Invalid state = %d\n", pCurLed->ledState);
++ }
++ }
++}
++
++// initialize the gLedCount and allocate and fill gLed struct
++void __init boardLedInit(PLED_MAP_PAIR cLedMapping)
++{
++ PLED_MAP_PAIR p1, p2;
++ PLED_INFO pCurLed;
++ int needTimer = FALSE;
++ int alreadyUsed = 0;
++
++#if defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
++ /* Set blink rate for BCM6348/BCM6338 hardware LEDs. */
++ GPIO->LEDCtrl &= ~LED_INTERVAL_SET_MASK;
++ GPIO->LEDCtrl |= LED_INTERVAL_SET_80MS;
++#endif
++
++ memset( gpVirtLeds, 0x00, sizeof(gpVirtLeds) );
++ memset( gLedHwFunc, 0x00, sizeof(gLedHwFunc) );
++ memset( gLedHwFailFunc, 0x00, sizeof(gLedHwFailFunc) );
++
++ gLedCount = 0;
++
++ // Check for multiple LED names and multiple LED GPIO pins that share the
++ // same physical board LED.
++ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
++ {
++ alreadyUsed = 0;
++ for( p2 = cLedMapping; p2 != p1; p2++ )
++ {
++ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
++ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
++ {
++ alreadyUsed = 1;
++ break;
++ }
++ }
++
++ if( alreadyUsed == 0 )
++ gLedCount++;
++ }
++
++ gLed = (PLED_INFO) kmalloc((gLedCount * sizeof(LED_INFO)), GFP_KERNEL);
++ if( gLed == NULL )
++ {
++ printk( "LED memory allocation error.\n" );
++ return;
++ }
++
++ memset( gLed, 0x00, gLedCount * sizeof(LED_INFO) );
++
++ // initial the gLed with unique ledMask and initial state. If more than 1 ledNames share the physical led
++ // (ledMask) the first defined led's ledInitState will be used.
++ pCurLed = gLed;
++ for( p1 = cLedMapping; p1->ledName != kLedEnd; p1++ )
++ {
++ if( (int) p1->ledName > MAX_VIRT_LEDS )
++ continue;
++
++ alreadyUsed = 0;
++ for( p2 = cLedMapping; p2 != p1; p2++ )
++ {
++ if( (p1->ledMask && p1->ledMask == p2->ledMask) ||
++ (p1->ledMaskFail && p1->ledMaskFail == p2->ledMaskFail) )
++ {
++ alreadyUsed = 1;
++ break;
++ }
++ }
++
++ if( alreadyUsed == 0 )
++ {
++ // Initialize the board LED for the first time.
++ needTimer = initLedInfo( p1, pCurLed );
++ gpVirtLeds[(int) p1->ledName] = pCurLed;
++ pCurLed++;
++ }
++ else
++ {
++ PLED_INFO pLed;
++ for( pLed = gLed; pLed != pCurLed; pLed++ )
++ {
++ // Find the LED_INFO structure that has already been initialized.
++ if((pLed->ledMask && pLed->ledMask == p1->ledMask) ||
++ (pLed->ledMaskFail && pLed->ledMaskFail==p1->ledMaskFail))
++ {
++ // The board LED has already been initialized but possibly
++ // not completely initialized.
++ if( p1->ledMask )
++ {
++ pLed->ledMask = p1->ledMask;
++ pLed->ledActiveLow = p1->ledActiveLow;
++ }
++ if( p1->ledMaskFail )
++ {
++ pLed->ledMaskFail = p1->ledMaskFail;
++ pLed->ledActiveLowFail = p1->ledActiveLowFail;
++ }
++ gpVirtLeds[(int) p1->ledName] = pLed;
++ break;
++ }
++ }
++ }
++ }
++
++ if (needTimer)
++ ledTimerStart();
++
++#if defined(DEBUG_LED)
++ int i;
++ for (i=0; i < gLedCount; i++)
++ printk("initLed: led[%d]: mask=0x%04x, state=%d\n", i,(gLed+i)->ledMask, (gLed+i)->ledState);
++#endif
++
++}
++
++// Initialize a structure that contains information about a physical board LED
++// control. The board LED may contain more than one GPIO pin to control a
++// normal condition (green) or a failure condition (red).
++int initLedInfo( PLED_MAP_PAIR pCurMap, PLED_INFO pCurLed )
++{
++ int needTimer = FALSE;
++ pCurLed->ledState = pCurLed->savedLedState = pCurMap->ledInitState;
++ pCurLed->ledMask = pCurMap->ledMask;
++ pCurLed->ledActiveLow = pCurMap->ledActiveLow;
++ pCurLed->ledMaskFail = pCurMap->ledMaskFail;
++ pCurLed->ledActiveLowFail = pCurMap->ledActiveLowFail;
++
++ switch (pCurLed->ledState)
++ {
++ case kLedStateOn:
++ pCurLed->blinkCountDown = 0; // reset the blink count down
++ ledOn(pCurLed);
++ break;
++ case kLedStateOff:
++ pCurLed->blinkCountDown = 0; // reset the blink count down
++ ledOff(pCurLed);
++ break;
++ case kLedStateFail:
++ pCurLed->blinkCountDown = 0; // reset the blink count down
++ ledOnFail(pCurLed);
++ break;
++ case kLedStateBlinkOnce:
++ pCurLed->blinkCountDown = 1;
++ needTimer = TRUE;
++ break;
++ case kLedStateSlowBlinkContinues:
++ pCurLed->blinkCountDown = kSlowBlinkCount;
++ needTimer = TRUE;
++ break;
++ case kLedStateFastBlinkContinues:
++ pCurLed->blinkCountDown = kFastBlinkCount;
++ needTimer = TRUE;
++ break;
++ default:
++ printk("Invalid state = %d\n", pCurLed->ledState);
++ }
++
++ return( needTimer );
++}
++
++#if 0 /* BROKEN */
++// Determines if there is at least one interface in bridge mode. Bridge mode
++// is determined by the cfm convention of naming bridge interfaces nas17
++// through nas24.
++static int isBridgedProtocol(void)
++{
++ extern int dev_get(const char *name);
++ const int firstBridgeId = 17;
++ const int lastBridgeId = 24;
++ int i;
++ int ret = FALSE;
++ char name[16];
++
++ for( i = firstBridgeId; i <= lastBridgeId; i++ )
++ {
++ sprintf( name, "nas%d", i );
++
++ if( dev_get(name) )
++ {
++ ret = TRUE;
++ break;
++ }
++ }
++
++ return(ret);
++}
++#endif
++
++// led ctrl. Maps the ledName to the corresponding ledInfoPtr and perform the led operation
++void boardLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
++{
++ PLED_INFO ledInfoPtr;
++
++ // do the mapping from virtual to physical led
++ if( (int) ledName < MAX_VIRT_LEDS )
++ ledInfoPtr = gpVirtLeds[(int) ledName];
++ else
++ ledInfoPtr = NULL;
++
++ if (ledInfoPtr == NULL)
++ return;
++
++ if( ledState != kLedStateFail && gLedHwFunc[(int) ledName] )
++ {
++ (*gLedHwFunc[(int) ledName]) (ledName, ledState);
++ ledOffFail(ledInfoPtr);
++ return;
++ }
++ else
++ if( ledState == kLedStateFail && gLedHwFailFunc[(int) ledName] )
++ {
++ (*gLedHwFailFunc[(int) ledName]) (ledName, ledState);
++ ledOff(ledInfoPtr);
++ return;
++ }
++
++#if 0 /* BROKEN */
++ // Do not blink the WAN Data LED if at least one interface is in bridge mode.
++ if(gLedOffInBridgeMode == 1 && (ledName == kLedWanData || ledName == kLedPPP))
++ {
++ static int BridgedProtocol = -1;
++
++ if( BridgedProtocol == -1 )
++ BridgedProtocol = isBridgedProtocol();
++
++ if( BridgedProtocol == TRUE )
++ return;
++ }
++#endif
++
++ // If the state is kLedStateFail and there is not a failure LED defined
++ // in the board parameters, change the state to kLedStateFastBlinkContinues.
++ if( ledState == kLedStateFail && ledInfoPtr->ledMaskFail == 0 )
++ ledState = kLedStateFastBlinkContinues;
++
++ switch (ledState)
++ {
++ case kLedStateOn:
++ // First, turn off the complimentary (failure) LED GPIO.
++ if( ledInfoPtr->ledMaskFail )
++ ledOffFail(ledInfoPtr);
++ else
++ if( gLedHwFailFunc[(int) ledName] )
++ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
++
++ // Next, turn on the specified LED GPIO.
++ ledOn(ledInfoPtr);
++ break;
++
++ case kLedStateOff:
++ // First, turn off the complimentary (failure) LED GPIO.
++ if( ledInfoPtr->ledMaskFail )
++ ledOffFail(ledInfoPtr);
++ else
++ if( gLedHwFailFunc[(int) ledName] )
++ (*gLedHwFailFunc[(int) ledName]) (ledName, kLedStateOff);
++
++ // Next, turn off the specified LED GPIO.
++ ledOff(ledInfoPtr);
++ break;
++
++ case kLedStateFail:
++ // First, turn off the complimentary (normal) LED GPIO.
++ if( ledInfoPtr->ledMask )
++ ledOff(ledInfoPtr);
++ else
++ if( gLedHwFunc[(int) ledName] )
++ (*gLedHwFunc[(int) ledName]) (ledName, kLedStateOff);
++
++ // Next, turn on (red) the specified LED GPIO.
++ ledOnFail(ledInfoPtr);
++ break;
++
++ case kLedStateBlinkOnce:
++ // skip blinkOnce if it is already in Slow/Fast blink continues state
++ if (ledInfoPtr->savedLedState == kLedStateSlowBlinkContinues ||
++ ledInfoPtr->savedLedState == kLedStateFastBlinkContinues)
++ ;
++ else
++ {
++ if (ledInfoPtr->blinkCountDown == 0) // skip the call if it is 1
++ {
++ ledToggle(ledInfoPtr);
++ ledInfoPtr->blinkCountDown = 1; // it will be reset to 0 when timer expires
++ ledInfoPtr->ledState = kLedStateBlinkOnce;
++ ledTimerStart();
++ }
++ }
++ break;
++
++ case kLedStateSlowBlinkContinues:
++ ledInfoPtr->blinkCountDown = kSlowBlinkCount;
++ ledInfoPtr->ledState = kLedStateSlowBlinkContinues;
++ ledInfoPtr->savedLedState = kLedStateSlowBlinkContinues;
++ ledTimerStart();
++ break;
++
++ case kLedStateFastBlinkContinues:
++ ledInfoPtr->blinkCountDown = kFastBlinkCount;
++ ledInfoPtr->ledState = kLedStateFastBlinkContinues;
++ ledInfoPtr->savedLedState = kLedStateFastBlinkContinues;
++ ledTimerStart();
++ break;
++
++ default:
++ printk("Invalid led state\n");
++ }
++}
++
++// This function is called for an LED that is controlled by hardware.
++void kerSysLedRegisterHwHandler( BOARD_LED_NAME ledName,
++ HANDLE_LED_FUNC ledHwFunc, int ledFailType )
++{
++ if( (int) ledName < MAX_VIRT_LEDS )
++ {
++ if( ledFailType == 1 )
++ gLedHwFailFunc[(int) ledName] = ledHwFunc;
++ else
++ gLedHwFunc[(int) ledName] = ledHwFunc;
++ }
++}
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/board.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/board.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/board.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/board.c 2006-07-07 22:16:43.000000000 +0200
+@@ -0,0 +1,1614 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/***************************************************************************
++ * File Name : board.c
++ *
++ * Description: This file contains Linux character device driver entry
++ * for the board related ioctl calls: flash, get free kernel
++ * page and dump kernel memory, etc.
++ *
++ * Created on : 2/20/2002 seanl: use cfiflash.c, cfliflash.h (AMD specific)
++ *
++ ***************************************************************************/
++
++
++/* Includes. */
++#include <linux/version.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/capability.h>
++#include <linux/slab.h>
++#include <linux/errno.h>
++#include <linux/module.h>
++#include <linux/pagemap.h>
++#include <asm/uaccess.h>
++#include <linux/wait.h>
++#include <linux/poll.h>
++#include <linux/sched.h>
++#include <linux/list.h>
++#include <linux/if.h>
++
++#include <bcm_map_part.h>
++#include <board.h>
++#include <bcmTag.h>
++#include "boardparms.h"
++#include "cfiflash.h"
++#include "bcm_intr.h"
++#include "board.h"
++#include "bcm_map_part.h"
++
++/* Typedefs. */
++#if defined (NON_CONSECUTIVE_MAC)
++// used to be the last octet. Now changed to the first 5 bits of the the forth octet
++// to reduced the duplicated MAC addresses.
++#define CHANGED_OCTET 3
++#define SHIFT_BITS 3
++#else
++#define CHANGED_OCTET 1
++#define SHIFT_BITS 0
++#endif
++
++#if defined (WIRELESS)
++#define SES_BTN_PRESSED 0x00000001
++#define SES_EVENTS SES_BTN_PRESSED /*OR all values if any*/
++#define SES_LED_OFF 0
++#define SES_LED_ON 1
++#define SES_LED_BLINK 2
++#endif
++
++typedef struct
++{
++ unsigned long ulId;
++ char chInUse;
++ char chReserved[3];
++} MAC_ADDR_INFO, *PMAC_ADDR_INFO;
++
++typedef struct
++{
++ unsigned long ulSdramSize;
++ unsigned long ulPsiSize;
++ unsigned long ulNumMacAddrs;
++ unsigned long ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
++ MAC_ADDR_INFO MacAddrs[1];
++} NVRAM_INFO, *PNVRAM_INFO;
++
++typedef struct
++{
++ unsigned long eventmask;
++} BOARD_IOC, *PBOARD_IOC;
++
++
++/*Dyinggasp callback*/
++typedef void (*cb_dgasp_t)(void *arg);
++typedef struct _CB_DGASP__LIST
++{
++ struct list_head list;
++ char name[IFNAMSIZ];
++ cb_dgasp_t cb_dgasp_fn;
++ void *context;
++}CB_DGASP_LIST , *PCB_DGASP_LIST;
++
++
++static LED_MAP_PAIR LedMapping[] =
++{ // led name Initial state physical pin (ledMask)
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0},
++ {kLedEnd, kLedStateOff, 0, 0, 0, 0} // NOTE: kLedEnd has to be at the end.
++};
++
++/* Externs. */
++extern struct file fastcall *fget_light(unsigned int fd, int *fput_needed);
++extern unsigned int nr_free_pages (void);
++extern const char *get_system_type(void);
++extern void kerSysFlashInit(void);
++extern unsigned long get_nvram_start_addr(void);
++extern unsigned long get_scratch_pad_start_addr(void);
++extern unsigned long getMemorySize(void);
++extern void __init boardLedInit(PLED_MAP_PAIR);
++extern void boardLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
++extern void kerSysLedRegisterHandler( BOARD_LED_NAME ledName,
++ HANDLE_LED_FUNC ledHwFunc, int ledFailType );
++
++/* Prototypes. */
++void __init InitNvramInfo( void );
++static int board_open( struct inode *inode, struct file *filp );
++static int board_ioctl( struct inode *inode, struct file *flip, unsigned int command, unsigned long arg );
++static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos);
++static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait);
++static int board_release(struct inode *inode, struct file *filp);
++
++static BOARD_IOC* borad_ioc_alloc(void);
++static void borad_ioc_free(BOARD_IOC* board_ioc);
++
++/* DyingGasp function prototype */
++static void __init kerSysDyingGaspMapIntr(void);
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
++static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs);
++#else
++static unsigned int kerSysDyingGaspIsr(void);
++#endif
++static void __init kerSysInitDyingGaspHandler( void );
++static void __exit kerSysDeinitDyingGaspHandler( void );
++/* -DyingGasp function prototype - */
++
++
++#if defined (WIRELESS)
++static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs);
++static void __init sesBtn_mapGpio(void);
++static void __init sesBtn_mapIntr(int context);
++static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait);
++static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos);
++static void __init sesLed_mapGpio(void);
++static void sesLed_ctrl(int action);
++static void __init ses_board_init(void);
++static void __exit ses_board_deinit(void);
++#endif
++
++static PNVRAM_INFO g_pNvramInfo = NULL;
++static int g_ledInitialized = 0;
++static wait_queue_head_t g_board_wait_queue;
++static CB_DGASP_LIST *g_cb_dgasp_list_head = NULL;
++
++static int g_wakeup_monitor = 0;
++static struct file *g_monitor_file = NULL;
++static struct task_struct *g_monitor_task = NULL;
++static unsigned int (*g_orig_fop_poll)
++ (struct file *, struct poll_table_struct *) = NULL;
++
++static struct file_operations board_fops =
++{
++ open: board_open,
++ ioctl: board_ioctl,
++ poll: board_poll,
++ read: board_read,
++ release: board_release,
++};
++
++uint32 board_major = 0;
++
++#if defined (WIRELESS)
++static unsigned short sesBtn_irq = BP_NOT_DEFINED;
++static unsigned short sesBtn_gpio = BP_NOT_DEFINED;
++static unsigned short sesLed_gpio = BP_NOT_DEFINED;
++#endif
++
++#if defined(MODULE)
++int init_module(void)
++{
++ return( brcm_board_init() );
++}
++
++void cleanup_module(void)
++{
++ if (MOD_IN_USE)
++ printk("brcm flash: cleanup_module failed because module is in use\n");
++ else
++ brcm_board_cleanup();
++}
++#endif //MODULE
++
++
++
++static int __init brcm_board_init( void )
++{
++ typedef int (*BP_LED_FUNC) (unsigned short *);
++ static struct BpLedInformation
++ {
++ BOARD_LED_NAME ledName;
++ BP_LED_FUNC bpFunc;
++ BP_LED_FUNC bpFuncFail;
++ } bpLedInfo[] =
++ {{kLedAdsl, BpGetAdslLedGpio, BpGetAdslFailLedGpio},
++ {kLedWireless, BpGetWirelessLedGpio, NULL},
++ {kLedUsb, BpGetUsbLedGpio, NULL},
++ {kLedHpna, BpGetHpnaLedGpio, NULL},
++ {kLedWanData, BpGetWanDataLedGpio, NULL},
++ {kLedPPP, BpGetPppLedGpio, BpGetPppFailLedGpio},
++ {kLedVoip, BpGetVoipLedGpio, NULL},
++ {kLedSes, BpGetWirelessSesLedGpio, NULL},
++ {kLedEnd, NULL, NULL}
++ };
++
++ int ret;
++
++ ret = register_chrdev(BOARD_DRV_MAJOR, "bcrmboard", &board_fops );
++ if (ret < 0)
++ printk( "brcm_board_init(major %d): fail to register device.\n",BOARD_DRV_MAJOR);
++ else
++ {
++ PLED_MAP_PAIR pLedMap = LedMapping;
++ unsigned short gpio;
++ struct BpLedInformation *pInfo;
++
++ printk("brcmboard: brcm_board_init entry\n");
++ board_major = BOARD_DRV_MAJOR;
++ InitNvramInfo();
++
++ for( pInfo = bpLedInfo; pInfo->ledName != kLedEnd; pInfo++ )
++ {
++ if( pInfo->bpFunc && (*pInfo->bpFunc) (&gpio) == BP_SUCCESS )
++ {
++ pLedMap->ledName = pInfo->ledName;
++ pLedMap->ledMask = GPIO_NUM_TO_MASK(gpio);
++ pLedMap->ledActiveLow = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
++ }
++ if( pInfo->bpFuncFail && (*pInfo->bpFuncFail) (&gpio) == BP_SUCCESS )
++ {
++ pLedMap->ledName = pInfo->ledName;
++ pLedMap->ledMaskFail = GPIO_NUM_TO_MASK(gpio);
++ pLedMap->ledActiveLowFail = (gpio & BP_ACTIVE_LOW) ? 1 : 0;
++ }
++ if( pLedMap->ledName != kLedEnd )
++ pLedMap++;
++ }
++
++ init_waitqueue_head(&g_board_wait_queue);
++#if defined (WIRELESS)
++ ses_board_init();
++#endif
++ kerSysInitDyingGaspHandler();
++ kerSysDyingGaspMapIntr();
++
++ boardLedInit(LedMapping);
++ g_ledInitialized = 1;
++ }
++
++ return ret;
++}
++
++void __init InitNvramInfo( void )
++{
++ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
++ unsigned long ulNumMacAddrs = pNvramData->ulNumMacAddrs;
++
++ if( ulNumMacAddrs > 0 && ulNumMacAddrs <= NVRAM_MAC_COUNT_MAX )
++ {
++ unsigned long ulNvramInfoSize =
++ sizeof(NVRAM_INFO) + ((sizeof(MAC_ADDR_INFO) - 1) * ulNumMacAddrs);
++
++ g_pNvramInfo = (PNVRAM_INFO) kmalloc( ulNvramInfoSize, GFP_KERNEL );
++
++ if( g_pNvramInfo )
++ {
++ unsigned long ulPsiSize;
++ if( BpGetPsiSize( &ulPsiSize ) != BP_SUCCESS )
++ ulPsiSize = NVRAM_PSI_DEFAULT;
++ memset( g_pNvramInfo, 0x00, ulNvramInfoSize );
++ g_pNvramInfo->ulPsiSize = ulPsiSize * 1024;
++ g_pNvramInfo->ulNumMacAddrs = pNvramData->ulNumMacAddrs;
++ memcpy( g_pNvramInfo->ucaBaseMacAddr, pNvramData->ucaBaseMacAddr,
++ NVRAM_MAC_ADDRESS_LEN );
++ g_pNvramInfo->ulSdramSize = getMemorySize();
++ }
++ else
++ printk("ERROR - Could not allocate memory for NVRAM data\n");
++ }
++ else
++ printk("ERROR - Invalid number of MAC addresses (%ld) is configured.\n",
++ ulNumMacAddrs);
++}
++
++void __exit brcm_board_cleanup( void )
++{
++ printk("brcm_board_cleanup()\n");
++
++ if (board_major != -1)
++ {
++#if defined (WIRELESS)
++ ses_board_deinit();
++#endif
++ kerSysDeinitDyingGaspHandler();
++ unregister_chrdev(board_major, "board_ioctl");
++ }
++}
++
++static BOARD_IOC* borad_ioc_alloc(void)
++{
++ BOARD_IOC *board_ioc =NULL;
++ board_ioc = (BOARD_IOC*) kmalloc( sizeof(BOARD_IOC) , GFP_KERNEL );
++ if(board_ioc)
++ {
++ memset(board_ioc, 0, sizeof(BOARD_IOC));
++ }
++ return board_ioc;
++}
++
++static void borad_ioc_free(BOARD_IOC* board_ioc)
++{
++ if(board_ioc)
++ {
++ kfree(board_ioc);
++ }
++}
++
++
++static int board_open( struct inode *inode, struct file *filp )
++{
++ filp->private_data = borad_ioc_alloc();
++
++ if (filp->private_data == NULL)
++ return -ENOMEM;
++
++ return( 0 );
++}
++
++static int board_release(struct inode *inode, struct file *filp)
++{
++ BOARD_IOC *board_ioc = filp->private_data;
++
++ wait_event_interruptible(g_board_wait_queue, 1);
++ borad_ioc_free(board_ioc);
++
++ return( 0 );
++}
++
++
++static unsigned int board_poll(struct file *filp, struct poll_table_struct *wait)
++{
++ unsigned int mask = 0;
++#if defined (WIRELESS)
++ BOARD_IOC *board_ioc = filp->private_data;
++#endif
++
++ poll_wait(filp, &g_board_wait_queue, wait);
++#if defined (WIRELESS)
++ if(board_ioc->eventmask & SES_EVENTS){
++ mask |= sesBtn_poll(filp, wait);
++ }
++#endif
++
++ return mask;
++}
++
++
++static ssize_t board_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos)
++{
++#if defined (WIRELESS)
++ BOARD_IOC *board_ioc = filp->private_data;
++ if(board_ioc->eventmask & SES_EVENTS){
++ return sesBtn_read(filp, buffer, count, ppos);
++ }
++#endif
++ return 0;
++}
++
++//**************************************************************************************
++// Utitlities for dump memory, free kernel pages, mips soft reset, etc.
++//**************************************************************************************
++
++/***********************************************************************
++ * Function Name: dumpaddr
++ * Description : Display a hex dump of the specified address.
++ ***********************************************************************/
++void dumpaddr( unsigned char *pAddr, int nLen )
++{
++ static char szHexChars[] = "0123456789abcdef";
++ char szLine[80];
++ char *p = szLine;
++ unsigned char ch, *q;
++ int i, j;
++ unsigned long ul;
++
++ while( nLen > 0 )
++ {
++ sprintf( szLine, "%8.8lx: ", (unsigned long) pAddr );
++ p = szLine + strlen(szLine);
++
++ for(i = 0; i < 16 && nLen > 0; i += sizeof(long), nLen -= sizeof(long))
++ {
++ ul = *(unsigned long *) &pAddr[i];
++ q = (unsigned char *) &ul;
++ for( j = 0; j < sizeof(long); j++ )
++ {
++ *p++ = szHexChars[q[j] >> 4];
++ *p++ = szHexChars[q[j] & 0x0f];
++ *p++ = ' ';
++ }
++ }
++
++ for( j = 0; j < 16 - i; j++ )
++ *p++ = ' ', *p++ = ' ', *p++ = ' ';
++
++ *p++ = ' ', *p++ = ' ', *p++ = ' ';
++
++ for( j = 0; j < i; j++ )
++ {
++ ch = pAddr[j];
++ *p++ = (ch > ' ' && ch < '~') ? ch : '.';
++ }
++
++ *p++ = '\0';
++ printk( "%s\r\n", szLine );
++
++ pAddr += i;
++ }
++ printk( "\r\n" );
++} /* dumpaddr */
++
++
++void kerSysMipsSoftReset(void)
++{
++#if defined(CONFIG_BCM96348)
++ if (PERF->RevID == 0x634800A1) {
++ typedef void (*FNPTR) (void);
++ FNPTR bootaddr = (FNPTR) FLASH_BASE;
++ int i;
++
++ /* Disable interrupts. */
++ cli();
++
++ /* Reset all blocks. */
++ PERF->BlockSoftReset &= ~BSR_ALL_BLOCKS;
++ for( i = 0; i < 1000000; i++ )
++ ;
++ PERF->BlockSoftReset |= BSR_ALL_BLOCKS;
++ /* Jump to the power on address. */
++ (*bootaddr) ();
++ }
++ else
++ PERF->pll_control |= SOFT_RESET; // soft reset mips
++#else
++ PERF->pll_control |= SOFT_RESET; // soft reset mips
++#endif
++}
++
++
++int kerSysGetMacAddress( unsigned char *pucaMacAddr, unsigned long ulId )
++{
++ int nRet = 0;
++ PMAC_ADDR_INFO pMai = NULL;
++ PMAC_ADDR_INFO pMaiFreeNoId = NULL;
++ PMAC_ADDR_INFO pMaiFreeId = NULL;
++ unsigned long i = 0, ulIdxNoId = 0, ulIdxId = 0, shiftedIdx = 0;
++
++ for( i = 0, pMai = g_pNvramInfo->MacAddrs; i < g_pNvramInfo->ulNumMacAddrs;
++ i++, pMai++ )
++ {
++ if( ulId == pMai->ulId || ulId == MAC_ADDRESS_ANY )
++ {
++ /* This MAC address has been used by the caller in the past. */
++ memcpy( pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,
++ NVRAM_MAC_ADDRESS_LEN );
++ shiftedIdx = i;
++ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
++ pMai->chInUse = 1;
++ pMaiFreeNoId = pMaiFreeId = NULL;
++ break;
++ }
++ else
++ if( pMai->chInUse == 0 )
++ {
++ if( pMai->ulId == 0 && pMaiFreeNoId == NULL )
++ {
++ /* This is an available MAC address that has never been
++ * used.
++ */
++ pMaiFreeNoId = pMai;
++ ulIdxNoId = i;
++ }
++ else
++ if( pMai->ulId != 0 && pMaiFreeId == NULL )
++ {
++ /* This is an available MAC address that has been used
++ * before. Use addresses that have never been used
++ * first, before using this one.
++ */
++ pMaiFreeId = pMai;
++ ulIdxId = i;
++ }
++ }
++ }
++
++ if( pMaiFreeNoId || pMaiFreeId )
++ {
++ /* An available MAC address was found. */
++ memcpy(pucaMacAddr, g_pNvramInfo->ucaBaseMacAddr,NVRAM_MAC_ADDRESS_LEN);
++ if( pMaiFreeNoId )
++ {
++ shiftedIdx = ulIdxNoId;
++ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
++ pMaiFreeNoId->ulId = ulId;
++ pMaiFreeNoId->chInUse = 1;
++ }
++ else
++ {
++ shiftedIdx = ulIdxId;
++ pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] += (shiftedIdx << SHIFT_BITS);
++ pMaiFreeId->ulId = ulId;
++ pMaiFreeId->chInUse = 1;
++ }
++ }
++ else
++ if( i == g_pNvramInfo->ulNumMacAddrs )
++ nRet = -EADDRNOTAVAIL;
++
++ return( nRet );
++} /* kerSysGetMacAddr */
++
++int kerSysReleaseMacAddress( unsigned char *pucaMacAddr )
++{
++ int nRet = -EINVAL;
++ unsigned long ulIdx = 0;
++ int idx = (pucaMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET] -
++ g_pNvramInfo->ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN - CHANGED_OCTET]);
++
++ // if overflow 255 (negitive), add 256 to have the correct index
++ if (idx < 0)
++ idx += 256;
++ ulIdx = (unsigned long) (idx >> SHIFT_BITS);
++
++ if( ulIdx < g_pNvramInfo->ulNumMacAddrs )
++ {
++ PMAC_ADDR_INFO pMai = &g_pNvramInfo->MacAddrs[ulIdx];
++ if( pMai->chInUse == 1 )
++ {
++ pMai->chInUse = 0;
++ nRet = 0;
++ }
++ }
++
++ return( nRet );
++} /* kerSysReleaseMacAddr */
++
++int kerSysGetSdramSize( void )
++{
++ return( (int) g_pNvramInfo->ulSdramSize );
++} /* kerSysGetSdramSize */
++
++
++void kerSysLedCtrl(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState)
++{
++ if (g_ledInitialized)
++ boardLedCtrl(ledName, ledState);
++}
++
++unsigned int kerSysMonitorPollHook( struct file *f, struct poll_table_struct *t)
++{
++ int mask = (*g_orig_fop_poll) (f, t);
++
++ if( g_wakeup_monitor == 1 && g_monitor_file == f )
++ {
++ /* If g_wakeup_monitor is non-0, the user mode application needs to
++ * return from a blocking select function. Return POLLPRI which will
++ * cause the select to return with the exception descriptor set.
++ */
++ mask |= POLLPRI;
++ g_wakeup_monitor = 0;
++ }
++
++ return( mask );
++}
++
++/* Put the user mode application that monitors link state on a run queue. */
++void kerSysWakeupMonitorTask( void )
++{
++ g_wakeup_monitor = 1;
++ if( g_monitor_task )
++ wake_up_process( g_monitor_task );
++}
++
++//<<JUNHON, 2004/09/15, get reset button status , tim hou , 05/04/12
++int kerSysGetResetHold(void)
++{
++ unsigned short gpio;
++
++ if( BpGetPressAndHoldResetGpio( &gpio ) == BP_SUCCESS )
++ {
++#if defined(CONFIG_BCM96338)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(CONFIG_BCM96345)
++ unsigned short gpio_mask = GPIO_NUM_TO_MASK(gpio);
++ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(CONFIG_BCM96348)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++
++ if( (gpio & ~BP_ACTIVE_MASK) >= 32 )
++ {
++ gpio_mask = GPIO_NUM_TO_MASK_HIGH(gpio);
++ gpio_reg = &GPIO->GPIOio_high;
++ }
++#endif
++ //printk("gpio=%04x,gpio_mask=%04x,gpio_reg=%04x\n",gpio,gpio_mask,*gpio_reg);
++ if(*gpio_reg & gpio_mask) //press down
++ return RESET_BUTTON_UP;
++ }
++ return RESET_BUTTON_PRESSDOWN;
++}
++//<<JUNHON, 2004/09/15
++
++//********************************************************************************************
++// misc. ioctl calls come to here. (flash, led, reset, kernel memory access, etc.)
++//********************************************************************************************
++static int board_ioctl( struct inode *inode, struct file *flip,
++ unsigned int command, unsigned long arg )
++{
++ int ret = 0;
++ BOARD_IOCTL_PARMS ctrlParms;
++ unsigned char ucaMacAddr[NVRAM_MAC_ADDRESS_LEN];
++ int allowedSize;
++
++ switch (command)
++ {
++ case BOARD_IOCTL_FLASH_INIT:
++ // not used for now. kerSysBcmImageInit();
++ break;
++
++
++ case BOARD_IOCTL_FLASH_WRITE:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ NVRAM_DATA SaveNvramData;
++ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
++
++ switch (ctrlParms.action)
++ {
++ case SCRATCH_PAD:
++ ret = kerSysScratchPadSet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
++ break;
++
++ case PERSISTENT:
++ ret = kerSysPersistentSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
++ break;
++
++ case NVRAM:
++ ret = kerSysNvRamSet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
++ break;
++
++ case BCM_IMAGE_CFE:
++ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > FLASH45_LENGTH_BOOT_ROM )
++ {
++ printk("Illegal CFE size [%d]. Size allowed: [%d]\n",
++ ctrlParms.strLen, FLASH45_LENGTH_BOOT_ROM);
++ ret = -1;
++ break;
++ }
++
++ // save NVRAM data into a local structure
++ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
++
++ // set memory type field
++ BpGetSdramSize( (unsigned long *) &ctrlParms.string[SDRAM_TYPE_ADDRESS_OFFSET] );
++
++ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
++
++ // if nvram is not valid, restore the current nvram settings
++ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
++ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
++ {
++ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
++ }
++ break;
++
++ case BCM_IMAGE_FS:
++ allowedSize = (int) flash_get_total_size() - \
++ FLASH_RESERVED_AT_END - TAG_LEN - FLASH45_LENGTH_BOOT_ROM;
++ if( ctrlParms.strLen <= 0 || ctrlParms.strLen > allowedSize)
++ {
++ printk("Illegal root file system size [%d]. Size allowed: [%d]\n",
++ ctrlParms.strLen, allowedSize);
++ ret = -1;
++ break;
++ }
++ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
++ kerSysMipsSoftReset();
++ break;
++
++ case BCM_IMAGE_KERNEL: // not used for now.
++ break;
++ case BCM_IMAGE_WHOLE:
++ if(ctrlParms.strLen <= 0)
++ {
++ printk("Illegal flash image size [%d].\n", ctrlParms.strLen);
++ ret = -1;
++ break;
++ }
++
++ // save NVRAM data into a local structure
++ memcpy( &SaveNvramData, pNvramData, sizeof(NVRAM_DATA) );
++
++ ret = kerSysBcmImageSet(ctrlParms.offset, ctrlParms.string, ctrlParms.strLen);
++
++ // if nvram is not valid, restore the current nvram settings
++ if( BpSetBoardId( pNvramData->szBoardId ) != BP_SUCCESS &&
++ *(unsigned long *) pNvramData == NVRAM_DATA_ID )
++ {
++ kerSysNvRamSet((char *) &SaveNvramData, sizeof(SaveNvramData), 0);
++ }
++
++ kerSysMipsSoftReset();
++ break;
++
++ default:
++ ret = -EINVAL;
++ printk("flash_ioctl_command: invalid command %d\n", ctrlParms.action);
++ break;
++ }
++ ctrlParms.result = ret;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_FLASH_READ:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ switch (ctrlParms.action)
++ {
++ case SCRATCH_PAD:
++ ret = kerSysScratchPadGet(ctrlParms.string, ctrlParms.buf, ctrlParms.offset);
++ break;
++
++ case PERSISTENT:
++ ret = kerSysPersistentGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
++ break;
++
++ case NVRAM:
++ ret = kerSysNvRamGet(ctrlParms.string, ctrlParms.strLen, ctrlParms.offset);
++ break;
++
++ case FLASH_SIZE:
++ ret = kerSysFlashSizeGet();
++ break;
++
++ default:
++ ret = -EINVAL;
++ printk("Not supported. invalid command %d\n", ctrlParms.action);
++ break;
++ }
++ ctrlParms.result = ret;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_GET_NR_PAGES:
++ ctrlParms.result = nr_free_pages() + get_page_cache_size();
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ break;
++
++ case BOARD_IOCTL_DUMP_ADDR:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ dumpaddr( (unsigned char *) ctrlParms.string, ctrlParms.strLen );
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_SET_MEMORY:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ unsigned long *pul = (unsigned long *) ctrlParms.string;
++ unsigned short *pus = (unsigned short *) ctrlParms.string;
++ unsigned char *puc = (unsigned char *) ctrlParms.string;
++ switch( ctrlParms.strLen )
++ {
++ case 4:
++ *pul = (unsigned long) ctrlParms.offset;
++ break;
++ case 2:
++ *pus = (unsigned short) ctrlParms.offset;
++ break;
++ case 1:
++ *puc = (unsigned char) ctrlParms.offset;
++ break;
++ }
++ dumpaddr( (unsigned char *) ctrlParms.string, sizeof(long) );
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_MIPS_SOFT_RESET:
++ kerSysMipsSoftReset();
++ break;
++
++ case BOARD_IOCTL_LED_CTRL:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ kerSysLedCtrl((BOARD_LED_NAME)ctrlParms.strLen, (BOARD_LED_STATE)ctrlParms.offset);
++ ret = 0;
++ }
++ break;
++
++ case BOARD_IOCTL_GET_ID:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg,
++ sizeof(ctrlParms)) == 0)
++ {
++ if( ctrlParms.string )
++ {
++ char *p = (char *) get_system_type();
++ if( strlen(p) + 1 < ctrlParms.strLen )
++ ctrlParms.strLen = strlen(p) + 1;
++ __copy_to_user(ctrlParms.string, p, ctrlParms.strLen);
++ }
++
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
++ sizeof(BOARD_IOCTL_PARMS));
++ }
++ break;
++
++ case BOARD_IOCTL_GET_MAC_ADDRESS:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ ctrlParms.result = kerSysGetMacAddress( ucaMacAddr,
++ ctrlParms.offset );
++
++ if( ctrlParms.result == 0 )
++ {
++ __copy_to_user(ctrlParms.string, ucaMacAddr,
++ sizeof(ucaMacAddr));
++ }
++
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
++ sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_RELEASE_MAC_ADDRESS:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ if (copy_from_user((void*)ucaMacAddr, (void*)ctrlParms.string, \
++ NVRAM_MAC_ADDRESS_LEN) == 0)
++ {
++ ctrlParms.result = kerSysReleaseMacAddress( ucaMacAddr );
++ }
++ else
++ {
++ ctrlParms.result = -EACCES;
++ }
++
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
++ sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_GET_PSI_SIZE:
++ ctrlParms.result = (int) g_pNvramInfo->ulPsiSize;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ break;
++
++ case BOARD_IOCTL_GET_SDRAM_SIZE:
++ ctrlParms.result = (int) g_pNvramInfo->ulSdramSize;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ break;
++
++ case BOARD_IOCTL_GET_BASE_MAC_ADDRESS:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0)
++ {
++ __copy_to_user(ctrlParms.string, g_pNvramInfo->ucaBaseMacAddr, NVRAM_MAC_ADDRESS_LEN);
++ ctrlParms.result = 0;
++
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms,
++ sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else
++ ret = -EFAULT;
++ break;
++
++ case BOARD_IOCTL_GET_CHIP_ID:
++ ctrlParms.result = (int) (PERF->RevID & 0xFFFF0000) >> 16;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ break;
++
++ case BOARD_IOCTL_GET_NUM_ENET: {
++ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
++ int i, numeth = 0;
++ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
++ for( i = 0; i < BP_MAX_ENET_MACS; i++) {
++ if (EnetInfos[i].ucPhyType != BP_ENET_NO_PHY) {
++ numeth++;
++ }
++ }
++ ctrlParms.result = numeth;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++ }
++
++ case BOARD_IOCTL_GET_CFE_VER:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ char *vertag = (char *)(FLASH_BASE + CFE_VERSION_OFFSET);
++ if (ctrlParms.strLen < CFE_VERSION_SIZE) {
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = -EFAULT;
++ }
++ else if (strncmp(vertag, "cfe-v", 5)) { // no tag info in flash
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ else {
++ ctrlParms.result = 1;
++ __copy_to_user(ctrlParms.string, vertag+CFE_VERSION_MARK_SIZE, CFE_VERSION_SIZE);
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ }
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++
++ case BOARD_IOCTL_GET_ENET_CFG:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ ETHERNET_MAC_INFO EnetInfos[BP_MAX_ENET_MACS];
++ if (BpGetEthernetMacInfo(EnetInfos, BP_MAX_ENET_MACS) == BP_SUCCESS) {
++ if (ctrlParms.strLen == sizeof(EnetInfos)) {
++ __copy_to_user(ctrlParms.string, EnetInfos, sizeof(EnetInfos));
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ } else
++ ret = -EFAULT;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++//<<JUNHON, 2004/09/15, get reset button status , tim hou , 05/04/12
++ case BOARD_IOCTL_GET_RESETHOLD:
++ ctrlParms.result = kerSysGetResetHold();
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ break;
++//>>JUNHON, 2004/09/15
++
++
++#if defined (WIRELESS)
++ case BOARD_IOCTL_GET_WLAN_ANT_INUSE:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ unsigned short antInUse = 0;
++ if (BpGetWirelessAntInUse(&antInUse) == BP_SUCCESS) {
++ if (ctrlParms.strLen == sizeof(antInUse)) {
++ __copy_to_user(ctrlParms.string, &antInUse, sizeof(antInUse));
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ } else
++ ret = -EFAULT;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++#endif
++ case BOARD_IOCTL_SET_TRIGGER_EVENT:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
++ ctrlParms.result = -EFAULT;
++ ret = -EFAULT;
++ if (ctrlParms.strLen == sizeof(unsigned long)) {
++ board_ioc->eventmask |= *((int*)ctrlParms.string);
++#if defined (WIRELESS)
++ if((board_ioc->eventmask & SES_EVENTS)) {
++ if(sesBtn_irq != BP_NOT_DEFINED) {
++ BcmHalInterruptEnable(sesBtn_irq);
++ ctrlParms.result = 0;
++ ret = 0;
++ }
++ }
++#endif
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ }
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++
++ case BOARD_IOCTL_GET_TRIGGER_EVENT:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
++ if (ctrlParms.strLen == sizeof(unsigned long)) {
++ __copy_to_user(ctrlParms.string, &board_ioc->eventmask, sizeof(unsigned long));
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ } else
++ ret = -EFAULT;
++
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++
++ case BOARD_IOCTL_UNSET_TRIGGER_EVENT:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ if (ctrlParms.strLen == sizeof(unsigned long)) {
++ BOARD_IOC *board_ioc = (BOARD_IOC *)flip->private_data;
++ board_ioc->eventmask &= (~(*((int*)ctrlParms.string)));
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ } else
++ ret = -EFAULT;
++
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++#if defined (WIRELESS)
++ case BOARD_IOCTL_SET_SES_LED:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ if (ctrlParms.strLen == sizeof(int)) {
++ sesLed_ctrl(*(int*)ctrlParms.string);
++ ctrlParms.result = 0;
++ __copy_to_user((BOARD_IOCTL_PARMS*)arg, &ctrlParms, sizeof(BOARD_IOCTL_PARMS));
++ ret = 0;
++ } else
++ ret = -EFAULT;
++
++ break;
++ }
++ else {
++ ret = -EFAULT;
++ }
++ break;
++#endif
++
++ case BOARD_IOCTL_SET_MONITOR_FD:
++ if (copy_from_user((void*)&ctrlParms, (void*)arg, sizeof(ctrlParms)) == 0) {
++ int fput_needed = 0;
++
++ g_monitor_file = fget_light( ctrlParms.offset, &fput_needed );
++ if( g_monitor_file ) {
++ /* Hook this file descriptor's poll function in order to set
++ * the exception descriptor when there is a change in link
++ * state.
++ */
++ g_monitor_task = current;
++ g_orig_fop_poll = g_monitor_file->f_op->poll;
++ g_monitor_file->f_op->poll = kerSysMonitorPollHook;
++ }
++ }
++ break;
++
++ case BOARD_IOCTL_WAKEUP_MONITOR_TASK:
++ kerSysWakeupMonitorTask();
++ break;
++
++ default:
++ ret = -EINVAL;
++ ctrlParms.result = 0;
++ printk("board_ioctl: invalid command %x, cmd %d .\n",command,_IOC_NR(command));
++ break;
++
++ } /* switch */
++
++ return (ret);
++
++} /* board_ioctl */
++
++/***************************************************************************
++ * SES Button ISR/GPIO/LED functions.
++ ***************************************************************************/
++#if defined (WIRELESS)
++static irqreturn_t sesBtn_isr(int irq, void *dev_id, struct pt_regs *ptregs)
++{
++#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
++ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++
++ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
++ {
++ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
++ gpio_reg = &GPIO->GPIOio_high;
++ }
++#endif
++
++ if (!(*gpio_reg & gpio_mask)){
++ wake_up_interruptible(&g_board_wait_queue);
++ return IRQ_RETVAL(1);
++ } else {
++ return IRQ_RETVAL(0);
++ }
++}
++
++static void __init sesBtn_mapGpio()
++{
++ if( BpGetWirelessSesBtnGpio(&sesBtn_gpio) == BP_SUCCESS )
++ {
++ printk("SES: Button GPIO 0x%x is enabled\n", sesBtn_gpio);
++ }
++}
++
++static void __init sesBtn_mapIntr(int context)
++{
++ if( BpGetWirelessSesExtIntr(&sesBtn_irq) == BP_SUCCESS )
++ {
++ printk("SES: Button Interrupt 0x%x is enabled\n", sesBtn_irq);
++ }
++ else
++ return;
++
++ sesBtn_irq += INTERRUPT_ID_EXTERNAL_0;
++
++ if (BcmHalMapInterrupt((FN_HANDLER)sesBtn_isr, context, sesBtn_irq)) {
++ printk("SES: Interrupt mapping failed\n");
++ }
++ BcmHalInterruptEnable(sesBtn_irq);
++}
++
++
++static unsigned int sesBtn_poll(struct file *file, struct poll_table_struct *wait)
++{
++#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
++ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++
++ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
++ {
++ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
++ gpio_reg = &GPIO->GPIOio_high;
++ }
++#endif
++
++ if (!(*gpio_reg & gpio_mask)){
++ return POLLIN;
++ }
++ return 0;
++}
++
++static ssize_t sesBtn_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos)
++{
++ volatile unsigned int event=0;
++ ssize_t ret=0;
++
++#if defined(_BCM96338_) || defined (CONFIG_BCM96338)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96345_) || defined (CONFIG_BCM96345)
++ unsigned short gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned short *gpio_reg = &GPIO->GPIOio;
++#endif
++#if defined(_BCM96348_) || defined (CONFIG_BCM96348)
++ unsigned long gpio_mask = GPIO_NUM_TO_MASK(sesBtn_gpio);
++ volatile unsigned long *gpio_reg = &GPIO->GPIOio;
++
++ if( (sesBtn_gpio & ~BP_ACTIVE_MASK) >= 32 )
++ {
++ gpio_mask = GPIO_NUM_TO_MASK_HIGH(sesBtn_gpio);
++ gpio_reg = &GPIO->GPIOio_high;
++ }
++#endif
++
++ if(*gpio_reg & gpio_mask){
++ BcmHalInterruptEnable(sesBtn_irq);
++ return ret;
++ }
++ event = SES_EVENTS;
++ __copy_to_user((char*)buffer, (char*)&event, sizeof(event));
++ BcmHalInterruptEnable(sesBtn_irq);
++ count -= sizeof(event);
++ buffer += sizeof(event);
++ ret += sizeof(event);
++ return ret;
++}
++
++static void __init sesLed_mapGpio()
++{
++ if( BpGetWirelessSesBtnGpio(&sesLed_gpio) == BP_SUCCESS )
++ {
++ printk("SES: LED GPIO 0x%x is enabled\n", sesBtn_gpio);
++ }
++}
++
++static void sesLed_ctrl(int action)
++{
++
++ //char status = ((action >> 8) & 0xff); /* extract status */
++ //char event = ((action >> 16) & 0xff); /* extract event */
++ //char blinktype = ((action >> 24) & 0xff); /* extract blink type for SES_LED_BLINK */
++
++ BOARD_LED_STATE led;
++
++ if(sesLed_gpio == BP_NOT_DEFINED)
++ return;
++
++ action &= 0xff; /* extract led */
++
++ //printk("blinktype=%d, event=%d, status=%d\n",(int)blinktype, (int)event, (int)status);
++
++ switch (action)
++ {
++ case SES_LED_ON:
++ //printk("SES: led on\n");
++ led = kLedStateOn;
++ break;
++ case SES_LED_BLINK:
++ //printk("SES: led blink\n");
++ led = kLedStateSlowBlinkContinues;
++ break;
++ case SES_LED_OFF:
++ default:
++ //printk("SES: led off\n");
++ led = kLedStateOff;
++ }
++
++ kerSysLedCtrl(kLedSes, led);
++}
++
++static void __init ses_board_init()
++{
++ sesBtn_mapGpio();
++ sesBtn_mapIntr(0);
++ sesLed_mapGpio();
++}
++static void __exit ses_board_deinit()
++{
++ if(sesBtn_irq)
++ BcmHalInterruptDisable(sesBtn_irq);
++}
++#endif
++
++/***************************************************************************
++ * Dying gasp ISR and functions.
++ ***************************************************************************/
++#define KERSYS_DBG printk
++
++#if defined(CONFIG_BCM96345)
++#define CYCLE_PER_US 70
++#elif defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)
++/* The BCM6348 cycles per microsecond is really variable since the BCM6348
++ * MIPS speed can vary depending on the PLL settings. However, an appoximate
++ * value of 120 will still work OK for the test being done.
++ */
++#define CYCLE_PER_US 120
++#endif
++#define DG_GLITCH_TO (100*CYCLE_PER_US)
++
++static void __init kerSysDyingGaspMapIntr()
++{
++ unsigned long ulIntr;
++
++#if defined(CONFIG_BCM96348) || defined(_BCM96348_) || defined(CONFIG_BCM96338) || defined(_BCM96338_)
++ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
++ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, INTERRUPT_ID_DG);
++ BcmHalInterruptEnable( INTERRUPT_ID_DG );
++ }
++#elif defined(CONFIG_BCM96345) || defined(_BCM96345_)
++ if( BpGetAdslDyingGaspExtIntr( &ulIntr ) == BP_SUCCESS ) {
++ ulIntr += INTERRUPT_ID_EXTERNAL_0;
++ BcmHalMapInterrupt((FN_HANDLER)kerSysDyingGaspIsr, 0, ulIntr);
++ BcmHalInterruptEnable( ulIntr );
++ }
++#endif
++
++}
++
++void kerSysSetWdTimer(ulong timeUs)
++{
++ TIMER->WatchDogDefCount = timeUs * (FPERIPH/1000000);
++ TIMER->WatchDogCtl = 0xFF00;
++ TIMER->WatchDogCtl = 0x00FF;
++}
++
++ulong kerSysGetCycleCount(void)
++{
++ ulong cnt;
++#ifdef _WIN32_WCE
++ cnt = 0;
++#else
++ __asm volatile("mfc0 %0, $9":"=d"(cnt));
++#endif
++ return(cnt);
++}
++
++static Bool kerSysDyingGaspCheckPowerLoss(void)
++{
++ ulong clk0;
++ ulong ulIntr;
++
++ ulIntr = 0;
++ clk0 = kerSysGetCycleCount();
++
++ UART->Data = 'D';
++ UART->Data = '%';
++ UART->Data = 'G';
++
++#if defined(CONFIG_BCM96345)
++ BpGetAdslDyingGaspExtIntr( &ulIntr );
++
++ do {
++ ulong clk1;
++
++ clk1 = kerSysGetCycleCount(); /* time cleared */
++ /* wait a little to get new reading */
++ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
++ ;
++ } while ((0 == (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT)))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
++
++ if (PERF->ExtIrqCfg & (1 << (ulIntr + EI_STATUS_SHFT))) { /* power glitch */
++ BcmHalInterruptEnable( ulIntr + INTERRUPT_ID_EXTERNAL_0);
++ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
++ return 0;
++ }
++#elif (defined(CONFIG_BCM96348) || defined(CONFIG_BCM96338)) && !defined(VXWORKS)
++ do {
++ ulong clk1;
++
++ clk1 = kerSysGetCycleCount(); /* time cleared */
++ /* wait a little to get new reading */
++ while ((kerSysGetCycleCount()-clk1) < CYCLE_PER_US*2)
++ ;
++ } while ((PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET))) && ((kerSysGetCycleCount() - clk0) < DG_GLITCH_TO));
++
++ if (!(PERF->IrqStatus & (1 << (INTERRUPT_ID_DG - INTERNAL_ISR_TABLE_OFFSET)))) {
++ BcmHalInterruptEnable( INTERRUPT_ID_DG );
++ KERSYS_DBG(" - Power glitch detected. Duration: %ld us\n", (kerSysGetCycleCount() - clk0)/CYCLE_PER_US);
++ return 0;
++ }
++#endif
++ return 1;
++}
++
++static void kerSysDyingGaspShutdown( void )
++{
++ kerSysSetWdTimer(1000000);
++#if defined(CONFIG_BCM96345)
++ PERF->blkEnables &= ~(EMAC_CLK_EN | USB_CLK_EN | CPU_CLK_EN);
++#elif defined(CONFIG_BCM96348)
++ PERF->blkEnables &= ~(EMAC_CLK_EN | USBS_CLK_EN | USBH_CLK_EN | SAR_CLK_EN);
++#endif
++}
++
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
++static irqreturn_t kerSysDyingGaspIsr(int irq, void * dev_id, struct pt_regs * regs)
++#else
++static unsigned int kerSysDyingGaspIsr(void)
++#endif
++{
++ struct list_head *pos;
++ CB_DGASP_LIST *tmp, *dsl = NULL;
++
++ if (kerSysDyingGaspCheckPowerLoss()) {
++
++ /* first to turn off everything other than dsl */
++ list_for_each(pos, &g_cb_dgasp_list_head->list) {
++ tmp = list_entry(pos, CB_DGASP_LIST, list);
++ if(strncmp(tmp->name, "dsl", 3)) {
++ (tmp->cb_dgasp_fn)(tmp->context);
++ }else {
++ dsl = tmp;
++ }
++ }
++
++ /* now send dgasp */
++ if(dsl)
++ (dsl->cb_dgasp_fn)(dsl->context);
++
++ /* reset and shutdown system */
++ kerSysDyingGaspShutdown();
++ }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
++return( IRQ_HANDLED );
++#else
++ return( 1 );
++#endif
++}
++
++static void __init kerSysInitDyingGaspHandler( void )
++{
++ CB_DGASP_LIST *new_node;
++
++ if( g_cb_dgasp_list_head != NULL) {
++ printk("Error: kerSysInitDyingGaspHandler: list head is not null\n");
++ return;
++ }
++ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
++ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
++ INIT_LIST_HEAD(&new_node->list);
++ g_cb_dgasp_list_head = new_node;
++
++} /* kerSysInitDyingGaspHandler */
++
++static void __exit kerSysDeinitDyingGaspHandler( void )
++{
++ struct list_head *pos;
++ CB_DGASP_LIST *tmp;
++
++ if(g_cb_dgasp_list_head == NULL)
++ return;
++
++ list_for_each(pos, &g_cb_dgasp_list_head->list) {
++ tmp = list_entry(pos, CB_DGASP_LIST, list);
++ list_del(pos);
++ kfree(tmp);
++ }
++
++ kfree(g_cb_dgasp_list_head);
++ g_cb_dgasp_list_head = NULL;
++
++} /* kerSysDeinitDyingGaspHandler */
++
++void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context)
++{
++ CB_DGASP_LIST *new_node;
++
++ if( g_cb_dgasp_list_head == NULL) {
++ printk("Error: kerSysRegisterDyingGaspHandler: list head is null\n");
++ return;
++ }
++
++ if( devname == NULL || cbfn == NULL ) {
++ printk("Error: kerSysRegisterDyingGaspHandler: register info not enough (%s,%x,%x)\n", devname, (unsigned int)cbfn, (unsigned int)context);
++ return;
++ }
++
++ new_node= (CB_DGASP_LIST *)kmalloc(sizeof(CB_DGASP_LIST), GFP_KERNEL);
++ memset(new_node, 0x00, sizeof(CB_DGASP_LIST));
++ INIT_LIST_HEAD(&new_node->list);
++ strncpy(new_node->name, devname, IFNAMSIZ);
++ new_node->cb_dgasp_fn = (cb_dgasp_t)cbfn;
++ new_node->context = context;
++ list_add(&new_node->list, &g_cb_dgasp_list_head->list);
++
++ printk("dgasp: kerSysRegisterDyingGaspHandler: %s registered \n", devname);
++
++} /* kerSysRegisterDyingGaspHandler */
++
++void kerSysDeregisterDyingGaspHandler(char *devname)
++{
++ struct list_head *pos;
++ CB_DGASP_LIST *tmp;
++
++ if(g_cb_dgasp_list_head == NULL) {
++ printk("Error: kerSysDeregisterDyingGaspHandler: list head is null\n");
++ return;
++ }
++
++ if(devname == NULL) {
++ printk("Error: kerSysDeregisterDyingGaspHandler: devname is null\n");
++ return;
++ }
++
++ printk("kerSysDeregisterDyingGaspHandler: %s is deregistering\n", devname);
++
++ list_for_each(pos, &g_cb_dgasp_list_head->list) {
++ tmp = list_entry(pos, CB_DGASP_LIST, list);
++ if(!strcmp(tmp->name, devname)) {
++ list_del(pos);
++ kfree(tmp);
++ printk("kerSysDeregisterDyingGaspHandler: %s is deregistered\n", devname);
++ return;
++ }
++ }
++ printk("kerSysDeregisterDyingGaspHandler: %s not (de)registered\n", devname);
++
++} /* kerSysDeregisterDyingGaspHandler */
++
++/***************************************************************************
++ * MACRO to call driver initialization and cleanup functions.
++ ***************************************************************************/
++module_init( brcm_board_init );
++module_exit( brcm_board_cleanup );
++
++EXPORT_SYMBOL(kerSysNvRamGet);
++EXPORT_SYMBOL(dumpaddr);
++EXPORT_SYMBOL(kerSysGetMacAddress);
++EXPORT_SYMBOL(kerSysReleaseMacAddress);
++EXPORT_SYMBOL(kerSysGetSdramSize);
++EXPORT_SYMBOL(kerSysLedCtrl);
++//<<JUNHON, 2004/09/15, get reset button status , tim hou , 05/04/12
++EXPORT_SYMBOL(kerSysGetResetHold);
++//>>JUNHON, 2004/09/15
++EXPORT_SYMBOL(kerSysLedRegisterHwHandler);
++EXPORT_SYMBOL(BpGetBoardIds);
++EXPORT_SYMBOL(BpGetSdramSize);
++EXPORT_SYMBOL(BpGetPsiSize);
++EXPORT_SYMBOL(BpGetEthernetMacInfo);
++EXPORT_SYMBOL(BpGetRj11InnerOuterPairGpios);
++EXPORT_SYMBOL(BpGetPressAndHoldResetGpio);
++EXPORT_SYMBOL(BpGetVoipResetGpio);
++EXPORT_SYMBOL(BpGetVoipIntrGpio);
++EXPORT_SYMBOL(BpGetPcmciaResetGpio);
++EXPORT_SYMBOL(BpGetRtsCtsUartGpios);
++EXPORT_SYMBOL(BpGetAdslLedGpio);
++EXPORT_SYMBOL(BpGetAdslFailLedGpio);
++EXPORT_SYMBOL(BpGetWirelessLedGpio);
++EXPORT_SYMBOL(BpGetUsbLedGpio);
++EXPORT_SYMBOL(BpGetHpnaLedGpio);
++EXPORT_SYMBOL(BpGetWanDataLedGpio);
++EXPORT_SYMBOL(BpGetPppLedGpio);
++EXPORT_SYMBOL(BpGetPppFailLedGpio);
++EXPORT_SYMBOL(BpGetVoipLedGpio);
++EXPORT_SYMBOL(BpGetWirelessExtIntr);
++EXPORT_SYMBOL(BpGetAdslDyingGaspExtIntr);
++EXPORT_SYMBOL(BpGetVoipExtIntr);
++EXPORT_SYMBOL(BpGetHpnaExtIntr);
++EXPORT_SYMBOL(BpGetHpnaChipSelect);
++EXPORT_SYMBOL(BpGetVoipChipSelect);
++EXPORT_SYMBOL(BpGetWirelessSesBtnGpio);
++EXPORT_SYMBOL(BpGetWirelessSesExtIntr);
++EXPORT_SYMBOL(BpGetWirelessSesLedGpio);
++EXPORT_SYMBOL(kerSysRegisterDyingGaspHandler);
++EXPORT_SYMBOL(kerSysDeregisterDyingGaspHandler);
++EXPORT_SYMBOL(kerSysGetCycleCount);
++EXPORT_SYMBOL(kerSysSetWdTimer);
++EXPORT_SYMBOL(kerSysWakeupMonitorTask);
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/boardparms.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/boardparms.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/boardparms.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/boardparms.c 2006-07-07 22:16:11.000000000 +0200
+@@ -0,0 +1,2391 @@
++/*
++<:copyright-gpl
++
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++:>
++*/
++/**************************************************************************
++ * File Name : boardparms.c
++ *
++ * Description: This file contains the implementation for the BCM63xx board
++ * parameter access functions.
++ *
++ * Updates : 07/14/2003 Created.
++ ***************************************************************************/
++
++/* Includes. */
++#include "boardparms.h"
++
++/* Defines. */
++
++/* Default psi size in K bytes */
++#define BP_PSI_DEFAULT_SIZE 24
++
++/* Typedefs */
++typedef struct boardparameters
++{
++ char szBoardId[BP_BOARD_ID_LEN]; /* board id string */
++ ETHERNET_MAC_INFO EnetMacInfos[BP_MAX_ENET_MACS];
++ VOIP_DSP_INFO VoIPDspInfo[BP_MAX_VOIP_DSP];
++ unsigned short usSdramSize; /* SDRAM size and type */
++ unsigned short usPsiSize; /* persistent storage in K bytes */
++ unsigned short usGpioRj11InnerPair; /* GPIO pin or not defined */
++ unsigned short usGpioRj11OuterPair; /* GPIO pin or not defined */
++ unsigned short usGpioPressAndHoldReset; /* GPIO pin or not defined */
++ unsigned short usGpioPcmciaReset; /* GPIO pin or not defined */
++ unsigned short usGpioUartRts; /* GPIO pin or not defined */
++ unsigned short usGpioUartCts; /* GPIO pin or not defined */
++ unsigned short usGpioLedAdsl; /* GPIO pin or not defined */
++ unsigned short usGpioLedAdslFail; /* GPIO pin or not defined */
++ unsigned short usGpioLedWireless; /* GPIO pin or not defined */
++ unsigned short usGpioLedUsb; /* GPIO pin or not defined */
++ unsigned short usGpioLedHpna; /* GPIO pin or not defined */
++ unsigned short usGpioLedWanData; /* GPIO pin or not defined */
++ unsigned short usGpioLedPpp; /* GPIO pin or not defined */
++ unsigned short usGpioLedPppFail; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlPowerOn; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlAlarm; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlResetCfg; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlStop; /* GPIO pin or not defined */
++ unsigned short usExtIntrWireless; /* ext intr or not defined */
++ unsigned short usExtIntrAdslDyingGasp; /* ext intr or not defined */
++ unsigned short usExtIntrHpna; /* ext intr or not defined */
++ unsigned short usCsHpna; /* chip select not defined */
++ unsigned short usAntInUseWireless; /* antenna in use or not defined */
++ unsigned short usGpioSesBtnWireless; /* GPIO pin or not defined */
++ unsigned short usExtIntrSesBtnWireless; /* ext intr or not defined */
++ unsigned short usGpioLedSesWireless; /* GPIO pin or not defined */
++} BOARD_PARAMETERS, *PBOARD_PARAMETERS;
++
++/* Variables */
++#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
++static BOARD_PARAMETERS g_bcm96338sv =
++{
++ "96338SV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_NOT_DEFINED, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
++ BP_NOT_DEFINED, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++static BOARD_PARAMETERS g_bcm96338l2m8m =
++{
++ "96338L-2M-8M", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96338sv, &g_bcm96338l2m8m, 0};
++#endif
++
++#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
++static BOARD_PARAMETERS g_bcm96345r =
++{
++ "96345R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345gw2 =
++{
++ /* A hardware jumper determines whether GPIO 13 is used for Press and Hold
++ * Reset or RTS.
++ */
++ "96345GW2", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_GPIO_0_AH, /* usGpioPhySpiSck */
++ BP_GPIO_4_AH, /* usGpioPhySpiSs */
++ BP_GPIO_12_AH, /* usGpioPhySpiMosi */
++ BP_GPIO_11_AH, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_GPIO, /* usConfigType */
++ BP_ENET_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_1, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_15_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_GPIO_2_AH, /* usGpioPcmciaReset */
++ BP_GPIO_13_AH, /* usGpioUartRts */
++ BP_GPIO_9_AH, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_GPIO_7_AH, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_7_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_EXT_INTR_2, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345gw =
++{
++ "96345GW", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_1, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_15_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_1_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_GPIO_2_AH, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_GPIO_10_AH, /* usGpioLedWireless */
++ BP_GPIO_7_AH, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_10_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_EXT_INTR_2, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_EXT_INTR_3, /* usExtIntrHpna */
++ BP_CS_1, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96335r =
++{
++ "96335R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_14_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_9_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_9_AH, /* usGpioLedWanData */
++ BP_GPIO_8_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_9_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345r0 =
++{
++ "96345R0", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_9_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345rs =
++{
++ "96345RS", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96345r, &g_bcm96345gw2, &g_bcm96345gw, &g_bcm96335r, &g_bcm96345r0,
++ &g_bcm96345rs, 0};
++#endif
++
++#if defined(_BCM96348_) || defined(CONFIG_BCM96348)
++
++static BOARD_PARAMETERS g_bcm96348r =
++{
++ "96348R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348lv =
++{
++ "96348LV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
++ 0x02, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_GPIO_5_AL, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348gw =
++{
++ "96348GW", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_0, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* BP_GPIO_35_AH, */ /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* BP_EXT_INTR_3, */ /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* BP_GPIO_0_AL */ /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcm96348gw_10 =
++{
++ "96348GW-10", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348gw_11 =
++{
++ "96348GW-11", /* szBoardId */
++ {{BP_ENET_NO_PHY}, /* ucPhyType */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348sv =
++{
++ "96348SV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
++ 0x1f, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_32MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_NOT_DEFINED, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
++ BP_NOT_DEFINED, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcm96348gw_dualDsp =
++{
++ "96348GW-DualDSP", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_UNEQUIPPED, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_DSP, /* ucDspType */
++ 0x01, /* ucDspAddress */
++ BP_EXT_INTR_3, /* usExtIntrVoip */
++ BP_UNEQUIPPED , /* usGpioVoipReset */
++ BP_GPIO_35_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_3}}, /* usCsVoip */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcmCustom_01 =
++{
++ "BCMCUST_01", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_36_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AL, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96348r, &g_bcm96348lv, &g_bcm96348gw, &g_bcm96348gw_10,
++ &g_bcm96348gw_11, &g_bcm96348sv, &g_bcm96348gw_dualDsp,
++ &g_bcmCustom_01, 0};
++#endif
++
++static PBOARD_PARAMETERS g_pCurrentBp = 0;
++
++/**************************************************************************
++ * Name : bpstrcmp
++ *
++ * Description: String compare for this file so it does not depend on an OS.
++ * (Linux kernel and CFE share this source file.)
++ *
++ * Parameters : [IN] dest - destination string
++ * [IN] src - source string
++ *
++ * Returns : -1 - dest < src, 1 - dest > src, 0 dest == src
++ ***************************************************************************/
++static int bpstrcmp(const char *dest,const char *src);
++static int bpstrcmp(const char *dest,const char *src)
++{
++ while (*src && *dest)
++ {
++ if (*dest < *src) return -1;
++ if (*dest > *src) return 1;
++ dest++;
++ src++;
++ }
++
++ if (*dest && !*src) return 1;
++ if (!*dest && *src) return -1;
++ return 0;
++} /* bpstrcmp */
++
++/**************************************************************************
++ * Name : BpGetVoipDspConfig
++ *
++ * Description: Gets the DSP configuration from the board parameter
++ * structure for a given DSP index.
++ *
++ * Parameters : [IN] dspNum - DSP index (number)
++ *
++ * Returns : Pointer to DSP configuration block if found/valid, NULL
++ * otherwise.
++ ***************************************************************************/
++VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum );
++VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum )
++{
++ VOIP_DSP_INFO *pDspConfig = 0;
++ int i;
++
++ if( g_pCurrentBp )
++ {
++ for( i = 0 ; i < BP_MAX_VOIP_DSP ; i++ )
++ {
++ if( g_pCurrentBp->VoIPDspInfo[i].ucDspType != BP_VOIP_NO_DSP &&
++ g_pCurrentBp->VoIPDspInfo[i].ucDspAddress == dspNum )
++ {
++ pDspConfig = &g_pCurrentBp->VoIPDspInfo[i];
++ break;
++ }
++ }
++ }
++
++ return pDspConfig;
++}
++
++
++/**************************************************************************
++ * Name : BpSetBoardId
++ *
++ * Description: This function find the BOARD_PARAMETERS structure for the
++ * specified board id string and assigns it to a global, static
++ * variable.
++ *
++ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
++ * have a board parameters configuration record.
++ ***************************************************************************/
++int BpSetBoardId( char *pszBoardId )
++{
++ int nRet = BP_BOARD_ID_NOT_FOUND;
++ PBOARD_PARAMETERS *ppBp;
++
++ for( ppBp = g_BoardParms; *ppBp; ppBp++ )
++ {
++ if( !bpstrcmp((*ppBp)->szBoardId, pszBoardId) )
++ {
++ g_pCurrentBp = *ppBp;
++ nRet = BP_SUCCESS;
++ break;
++ }
++ }
++
++ return( nRet );
++} /* BpSetBoardId */
++
++/**************************************************************************
++ * Name : BpGetBoardIds
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
++ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
++ * boundary.
++ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
++ * were allocated in pszBoardIds.
++ *
++ * Returns : Number of board id strings returned.
++ ***************************************************************************/
++int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize )
++{
++ PBOARD_PARAMETERS *ppBp;
++ int i;
++ char *src;
++ char *dest;
++
++ for( i = 0, ppBp = g_BoardParms; *ppBp && nBoardIdsSize;
++ i++, ppBp++, nBoardIdsSize--, pszBoardIds += BP_BOARD_ID_LEN )
++ {
++ dest = pszBoardIds;
++ src = (*ppBp)->szBoardId;
++ while( *src )
++ *dest++ = *src++;
++ *dest = '\0';
++ }
++
++ return( i );
++} /* BpGetBoardIds */
++
++/**************************************************************************
++ * Name : BpGetEthernetMacInfo
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
++ * buffers.
++ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
++ * are pointed to by pEnetInfos.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos )
++{
++ int i, nRet;
++
++ if( g_pCurrentBp )
++ {
++ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
++ {
++ if( i < BP_MAX_ENET_MACS )
++ {
++ unsigned char *src = (unsigned char *)
++ &g_pCurrentBp->EnetMacInfos[i];
++ unsigned char *dest = (unsigned char *) pEnetInfos;
++ int len = sizeof(ETHERNET_MAC_INFO);
++ while( len-- )
++ *dest++ = *src++;
++ }
++ else
++ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
++ }
++
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
++ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
++
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetEthernetMacInfo */
++
++/**************************************************************************
++ * Name : BpGetSdramSize
++ *
++ * Description: This function returns a constant that describees the board's
++ * SDRAM type and size.
++ *
++ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
++ * is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetSdramSize( unsigned long *pulSdramSize )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulSdramSize = g_pCurrentBp->usSdramSize;
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ *pulSdramSize = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetSdramSize */
++
++/**************************************************************************
++ * Name : BpGetPsiSize
++ *
++ * Description: This function returns the persistent storage size in K bytes.
++ *
++ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
++ * storage size is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetPsiSize( unsigned long *pulPsiSize )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulPsiSize = g_pCurrentBp->usPsiSize;
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ *pulPsiSize = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPsiSize */
++
++/**************************************************************************
++ * Name : BpGetRj11InnerOuterPairGpios
++ *
++ * Description: This function returns the GPIO pin assignments for changing
++ * between the RJ11 inner pair and RJ11 outer pair.
++ *
++ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
++ * GPIO pin is returned in.
++ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
++ unsigned short *pusOuter )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusInner = g_pCurrentBp->usGpioRj11InnerPair;
++ *pusOuter = g_pCurrentBp->usGpioRj11OuterPair;
++
++ if( g_pCurrentBp->usGpioRj11InnerPair != BP_NOT_DEFINED &&
++ g_pCurrentBp->usGpioRj11OuterPair != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusInner = *pusOuter = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetRj11InnerOuterPairGpios */
++
++/**************************************************************************
++ * Name : BpGetPressAndHoldResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the press
++ * and hold reset button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the press and hold
++ * reset button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPressAndHoldResetGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioPressAndHoldReset;
++
++ if( g_pCurrentBp->usGpioPressAndHoldReset != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPressAndHoldResetGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioVoipReset;
++
++ if( *pusValue != BP_NOT_DEFINED ||
++ *pusValue == BP_UNEQUIPPED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipResetGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipIntrGpio
++ *
++ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioVoipIntr;
++
++ if( *pusValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipIntrGpio */
++
++/**************************************************************************
++ * Name : BpGetPcmciaResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PCMCIA
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPcmciaResetGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioPcmciaReset;
++
++ if( g_pCurrentBp->usGpioPcmciaReset != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPcmciaResetGpio */
++
++/**************************************************************************
++ * Name : BpGetUartRtsCtsGpios
++ *
++ * Description: This function returns the GPIO pin assignments for RTS and CTS
++ * UART signals.
++ *
++ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
++ * pin is returned in.
++ * [OUT] pusCts - Address of short word that the UART CTS GPIO
++ * pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, board id input string does not
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusRts = g_pCurrentBp->usGpioUartRts;
++ *pusCts = g_pCurrentBp->usGpioUartCts;
++
++ if( g_pCurrentBp->usGpioUartRts != BP_NOT_DEFINED &&
++ g_pCurrentBp->usGpioUartCts != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusRts = *pusCts = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetUartRtsCtsGpios */
++
++/**************************************************************************
++ * Name : BpGetAdslLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedAdsl;
++
++ if( g_pCurrentBp->usGpioLedAdsl != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslLedGpio */
++
++/**************************************************************************
++ * Name : BpGetAdslFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED that is used when there is a DSL connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslFailLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedAdslFail;
++
++ if( g_pCurrentBp->usGpioLedAdslFail != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslFailLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedWireless;
++
++ if( g_pCurrentBp->usGpioLedWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessAntInUse
++ *
++ * Description: This function returns the antennas in use for wireless
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
++ * is in use.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessAntInUse( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usAntInUseWireless;
++
++ if( g_pCurrentBp->usAntInUseWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessAntInUse */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesBtnGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesBtnGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioSesBtnWireless;
++
++ if( g_pCurrentBp->usGpioSesBtnWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessSesBtnGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesExtIntr
++ *
++ * Description: This function returns the external interrupt number for the
++ * Wireless Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * external interrup is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesExtIntr( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usExtIntrSesBtnWireless;
++
++ if( g_pCurrentBp->usExtIntrSesBtnWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++
++} /* BpGetWirelessSesExtIntr */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Led.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Led GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedSesWireless;
++
++ if( g_pCurrentBp->usGpioLedSesWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++
++} /* BpGetWirelessSesLedGpio */
++
++/**************************************************************************
++ * Name : BpGetUsbLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the USB
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the USB LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetUsbLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedUsb;
++
++ if( g_pCurrentBp->usGpioLedUsb != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetUsbLedGpio */
++
++/**************************************************************************
++ * Name : BpGetHpnaLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the HPNA
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedHpna;
++
++ if( g_pCurrentBp->usGpioLedHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWanDataLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the WAN Data
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWanDataLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedWanData;
++
++ if( g_pCurrentBp->usGpioLedWanData != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWanDataLedGpio */
++
++/**************************************************************************
++ * Name : BpGetPppLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedPpp;
++
++ if( g_pCurrentBp->usGpioLedPpp != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPppLedGpio */
++
++/**************************************************************************
++ * Name : BpGetPppFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED that is used when there is a PPP connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppFailLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedPppFail;
++
++ if( g_pCurrentBp->usGpioLedPppFail != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPppFailLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderPowerOnLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the power
++ * on LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlPowerOn;
++
++ if( g_pCurrentBp->usGpioLedBlPowerOn != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderPowerOn */
++
++/**************************************************************************
++ * Name : BpGetBootloaderAlarmLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the alarm
++ * LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlAlarm;
++
++ if( g_pCurrentBp->usGpioLedBlAlarm != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderAlarmLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderResetCfgLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the reset
++ * configuration LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the reset
++ * configuration LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlResetCfg;
++
++ if( g_pCurrentBp->usGpioLedBlResetCfg != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderResetCfgLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderStopLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the break
++ * into bootloader LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the break into
++ * bootloader LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderStopLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlStop;
++
++ if( g_pCurrentBp->usGpioLedBlStop != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderStopLedGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ *
++ * Note : The VoIP structure would allow for having one LED per DSP
++ * however, the board initialization function assumes only one
++ * LED per functionality (ie one LED for VoIP). Therefore in
++ * order to keep this tidy and simple we do not make usage of the
++ * one-LED-per-DSP function. Instead, we assume that the LED for
++ * VoIP is unique and associated with DSP 0 (always present on
++ * any VoIP platform). If changing this to a LED-per-DSP function
++ * then one need to update the board initialization driver in
++ * bcmdrivers\opensource\char\board\bcm963xx\impl1
++ ***************************************************************************/
++int BpGetVoipLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( 0 );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioLedVoip;
++
++ if( *pusValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessExtIntr
++ *
++ * Description: This function returns the Wireless external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the wireless
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrWireless;
++
++ if( g_pCurrentBp->usExtIntrWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessExtIntr */
++
++/**************************************************************************
++ * Name : BpGetAdslDyingGaspExtIntr
++ *
++ * Description: This function returns the ADSL Dying Gasp external interrupt
++ * number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrAdslDyingGasp;
++
++ if( g_pCurrentBp->usExtIntrAdslDyingGasp != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslDyingGaspExtIntr */
++
++/**************************************************************************
++ * Name : BpGetVoipExtIntr
++ *
++ * Description: This function returns the VOIP external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * external interrupt number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pulValue = pDspInfo->usExtIntrVoip;
++
++ if( *pulValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipExtIntr */
++
++/**************************************************************************
++ * Name : BpGetHpnaExtIntr
++ *
++ * Description: This function returns the HPNA external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrHpna;
++
++ if( g_pCurrentBp->usExtIntrHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaExtIntr */
++
++/**************************************************************************
++ * Name : BpGetHpnaChipSelect
++ *
++ * Description: This function returns the HPNA chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * chip select number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaChipSelect( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usCsHpna;
++
++ if( g_pCurrentBp->usCsHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaChipSelect */
++
++/**************************************************************************
++ * Name : BpGetVoipChipSelect
++ *
++ * Description: This function returns the VOIP chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * chip select number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pulValue = pDspInfo->usCsVoip;
++
++ if( *pulValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipChipSelect */
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/boardparms.h linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/boardparms.h
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/boardparms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/boardparms.h 2006-07-07 22:16:11.000000000 +0200
+@@ -0,0 +1,766 @@
++/*
++<:copyright-gpl
++
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++:>
++*/
++/**************************************************************************
++ * File Name : boardparms.h
++ *
++ * Description: This file contains definitions and function prototypes for
++ * the BCM63xx board parameter access functions.
++ *
++ * Updates : 07/14/2003 Created.
++ ***************************************************************************/
++
++#if !defined(_BOARDPARMS_H)
++#define _BOARDPARMS_H
++
++#if __cplusplus
++extern "C" {
++#endif
++
++/* Return codes. */
++#define BP_SUCCESS 0
++#define BP_BOARD_ID_NOT_FOUND 1
++#define BP_VALUE_NOT_DEFINED 2
++#define BP_BOARD_ID_NOT_SET 3
++
++/* Values for BpGetSdramSize. */
++#define BP_MEMORY_8MB_1_CHIP 0
++#define BP_MEMORY_16MB_1_CHIP 1
++#define BP_MEMORY_32MB_1_CHIP 2
++#define BP_MEMORY_64MB_2_CHIP 3
++#define BP_MEMORY_32MB_2_CHIP 4
++#define BP_MEMORY_16MB_2_CHIP 5
++
++/* Values for EthernetMacInfo PhyType. */
++#define BP_ENET_NO_PHY 0
++#define BP_ENET_INTERNAL_PHY 1
++#define BP_ENET_EXTERNAL_PHY 2
++#define BP_ENET_EXTERNAL_SWITCH 3
++
++/* Values for EthernetMacInfo Configuration type. */
++#define BP_ENET_CONFIG_MDIO 0 /* Internal PHY, External PHY, Switch+(no GPIO, no SPI, no MDIO Pseudo phy */
++#define BP_ENET_CONFIG_GPIO 1 /* Bcm96345GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_MDIO_PSEUDO_PHY 2 /* Bcm96348GW board + Bcm5325E */
++#define BP_ENET_CONFIG_SPI_SSB_0 3 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_1 4 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_2 5 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_3 6 /* Bcm96348GW board + Bcm5325M/E */
++
++/* Values for EthernetMacInfo Reverse MII. */
++#define BP_ENET_NO_REVERSE_MII 0
++#define BP_ENET_REVERSE_MII 1
++
++/* Values for VoIPDSPInfo DSPType. */
++#define BP_VOIP_NO_DSP 0
++#define BP_VOIP_DSP 1
++
++
++/* Values for GPIO pin assignments (AH = Active High, AL = Active Low). */
++#define BP_ACTIVE_MASK 0x8000
++#define BP_ACTIVE_HIGH 0x0000
++#define BP_ACTIVE_LOW 0x8000
++#define BP_GPIO_0_AH (0 | BP_ACTIVE_HIGH)
++#define BP_GPIO_0_AL (0 | BP_ACTIVE_LOW)
++#define BP_GPIO_1_AH (1 | BP_ACTIVE_HIGH)
++#define BP_GPIO_1_AL (1 | BP_ACTIVE_LOW)
++#define BP_GPIO_2_AH (2 | BP_ACTIVE_HIGH)
++#define BP_GPIO_2_AL (2 | BP_ACTIVE_LOW)
++#define BP_GPIO_3_AH (3 | BP_ACTIVE_HIGH)
++#define BP_GPIO_3_AL (3 | BP_ACTIVE_LOW)
++#define BP_GPIO_4_AH (4 | BP_ACTIVE_HIGH)
++#define BP_GPIO_4_AL (4 | BP_ACTIVE_LOW)
++#define BP_GPIO_5_AH (5 | BP_ACTIVE_HIGH)
++#define BP_GPIO_5_AL (5 | BP_ACTIVE_LOW)
++#define BP_GPIO_6_AH (6 | BP_ACTIVE_HIGH)
++#define BP_GPIO_6_AL (6 | BP_ACTIVE_LOW)
++#define BP_GPIO_7_AH (7 | BP_ACTIVE_HIGH)
++#define BP_GPIO_7_AL (7 | BP_ACTIVE_LOW)
++#define BP_GPIO_8_AH (8 | BP_ACTIVE_HIGH)
++#define BP_GPIO_8_AL (8 | BP_ACTIVE_LOW)
++#define BP_GPIO_9_AH (9 | BP_ACTIVE_HIGH)
++#define BP_GPIO_9_AL (9 | BP_ACTIVE_LOW)
++#define BP_GPIO_10_AH (10 | BP_ACTIVE_HIGH)
++#define BP_GPIO_10_AL (10 | BP_ACTIVE_LOW)
++#define BP_GPIO_11_AH (11 | BP_ACTIVE_HIGH)
++#define BP_GPIO_11_AL (11 | BP_ACTIVE_LOW)
++#define BP_GPIO_12_AH (12 | BP_ACTIVE_HIGH)
++#define BP_GPIO_12_AL (12 | BP_ACTIVE_LOW)
++#define BP_GPIO_13_AH (13 | BP_ACTIVE_HIGH)
++#define BP_GPIO_13_AL (13 | BP_ACTIVE_LOW)
++#define BP_GPIO_14_AH (14 | BP_ACTIVE_HIGH)
++#define BP_GPIO_14_AL (14 | BP_ACTIVE_LOW)
++#define BP_GPIO_15_AH (15 | BP_ACTIVE_HIGH)
++#define BP_GPIO_15_AL (15 | BP_ACTIVE_LOW)
++#define BP_GPIO_16_AH (16 | BP_ACTIVE_HIGH)
++#define BP_GPIO_16_AL (16 | BP_ACTIVE_LOW)
++#define BP_GPIO_17_AH (17 | BP_ACTIVE_HIGH)
++#define BP_GPIO_17_AL (17 | BP_ACTIVE_LOW)
++#define BP_GPIO_18_AH (18 | BP_ACTIVE_HIGH)
++#define BP_GPIO_18_AL (18 | BP_ACTIVE_LOW)
++#define BP_GPIO_19_AH (19 | BP_ACTIVE_HIGH)
++#define BP_GPIO_19_AL (19 | BP_ACTIVE_LOW)
++#define BP_GPIO_20_AH (20 | BP_ACTIVE_HIGH)
++#define BP_GPIO_20_AL (20 | BP_ACTIVE_LOW)
++#define BP_GPIO_21_AH (21 | BP_ACTIVE_HIGH)
++#define BP_GPIO_21_AL (21 | BP_ACTIVE_LOW)
++#define BP_GPIO_22_AH (22 | BP_ACTIVE_HIGH)
++#define BP_GPIO_22_AL (22 | BP_ACTIVE_LOW)
++#define BP_GPIO_23_AH (23 | BP_ACTIVE_HIGH)
++#define BP_GPIO_23_AL (23 | BP_ACTIVE_LOW)
++#define BP_GPIO_24_AH (24 | BP_ACTIVE_HIGH)
++#define BP_GPIO_24_AL (24 | BP_ACTIVE_LOW)
++#define BP_GPIO_25_AH (25 | BP_ACTIVE_HIGH)
++#define BP_GPIO_25_AL (25 | BP_ACTIVE_LOW)
++#define BP_GPIO_26_AH (26 | BP_ACTIVE_HIGH)
++#define BP_GPIO_26_AL (26 | BP_ACTIVE_LOW)
++#define BP_GPIO_27_AH (27 | BP_ACTIVE_HIGH)
++#define BP_GPIO_27_AL (27 | BP_ACTIVE_LOW)
++#define BP_GPIO_28_AH (28 | BP_ACTIVE_HIGH)
++#define BP_GPIO_28_AL (28 | BP_ACTIVE_LOW)
++#define BP_GPIO_29_AH (29 | BP_ACTIVE_HIGH)
++#define BP_GPIO_29_AL (29 | BP_ACTIVE_LOW)
++#define BP_GPIO_30_AH (30 | BP_ACTIVE_HIGH)
++#define BP_GPIO_30_AL (30 | BP_ACTIVE_LOW)
++#define BP_GPIO_31_AH (31 | BP_ACTIVE_HIGH)
++#define BP_GPIO_31_AL (31 | BP_ACTIVE_LOW)
++#define BP_GPIO_32_AH (32 | BP_ACTIVE_HIGH)
++#define BP_GPIO_32_AL (32 | BP_ACTIVE_LOW)
++#define BP_GPIO_33_AH (33 | BP_ACTIVE_HIGH)
++#define BP_GPIO_33_AL (33 | BP_ACTIVE_LOW)
++#define BP_GPIO_34_AH (34 | BP_ACTIVE_HIGH)
++#define BP_GPIO_34_AL (34 | BP_ACTIVE_LOW)
++#define BP_GPIO_35_AH (35 | BP_ACTIVE_HIGH)
++#define BP_GPIO_35_AL (35 | BP_ACTIVE_LOW)
++#define BP_GPIO_36_AH (36 | BP_ACTIVE_HIGH)
++#define BP_GPIO_36_AL (36 | BP_ACTIVE_LOW)
++
++/* Values for external interrupt assignments. */
++#define BP_EXT_INTR_0 0
++#define BP_EXT_INTR_1 1
++#define BP_EXT_INTR_2 2
++#define BP_EXT_INTR_3 3
++
++/* Values for chip select assignments. */
++#define BP_CS_0 0
++#define BP_CS_1 1
++#define BP_CS_2 2
++#define BP_CS_3 3
++
++/* Value for GPIO and external interrupt fields that are not used. */
++#define BP_NOT_DEFINED 0xffff
++#define BP_HW_DEFINED 0xfff0
++#define BP_UNEQUIPPED 0xfff1
++
++/* Maximum size of the board id string. */
++#define BP_BOARD_ID_LEN 16
++
++/* Maximum number of Ethernet MACs. */
++#define BP_MAX_ENET_MACS 2
++
++/* Maximum number of VoIP DSPs. */
++#define BP_MAX_VOIP_DSP 2
++
++/* Wireless Antenna Settings. */
++#define BP_WLAN_ANT_MAIN 0
++#define BP_WLAN_ANT_AUX 1
++#define BP_WLAN_ANT_BOTH 3
++
++#if !defined(__ASSEMBLER__)
++
++/* Information about an Ethernet MAC. If ucPhyType is BP_ENET_NO_PHY,
++ * then the other fields are not valid.
++ */
++typedef struct EthernetMacInfo
++{
++ unsigned char ucPhyType; /* BP_ENET_xxx */
++ unsigned char ucPhyAddress; /* 0 to 31 */
++ unsigned short usGpioPhySpiSck; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiSs; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiMosi; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiMiso; /* GPIO pin or not defined */
++ unsigned short usGpioPhyReset; /* GPIO pin or not defined (96348LV) */
++ unsigned short numSwitchPorts; /* Number of PHY ports */
++ unsigned short usConfigType; /* Configuration type */
++ unsigned short usReverseMii; /* Reverse MII */
++} ETHERNET_MAC_INFO, *PETHERNET_MAC_INFO;
++
++
++/* Information about VoIP DSPs. If ucDspType is BP_VOIP_NO_DSP,
++ * then the other fields are not valid.
++ */
++typedef struct VoIPDspInfo
++{
++ unsigned char ucDspType;
++ unsigned char ucDspAddress;
++ unsigned short usExtIntrVoip;
++ unsigned short usGpioVoipReset;
++ unsigned short usGpioVoipIntr;
++ unsigned short usGpioLedVoip;
++ unsigned short usCsVoip;
++
++} VOIP_DSP_INFO;
++
++
++/**************************************************************************
++ * Name : BpSetBoardId
++ *
++ * Description: This function find the BOARD_PARAMETERS structure for the
++ * specified board id string and assigns it to a global, static
++ * variable.
++ *
++ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
++ * have a board parameters configuration record.
++ ***************************************************************************/
++int BpSetBoardId( char *pszBoardId );
++
++/**************************************************************************
++ * Name : BpGetBoardIds
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
++ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
++ * boundary.
++ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
++ * were allocated in pszBoardIds.
++ *
++ * Returns : Number of board id strings returned.
++ ***************************************************************************/
++int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize );
++
++/**************************************************************************
++ * Name : BpGetEthernetMacInfo
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
++ * buffers.
++ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
++ * are pointed to by pEnetInfos.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos );
++
++/**************************************************************************
++ * Name : BpGetSdramSize
++ *
++ * Description: This function returns a constant that describees the board's
++ * SDRAM type and size.
++ *
++ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
++ * is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetSdramSize( unsigned long *pulSdramSize );
++
++/**************************************************************************
++ * Name : BpGetPsiSize
++ *
++ * Description: This function returns the persistent storage size in K bytes.
++ *
++ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
++ * storage size is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetPsiSize( unsigned long *pulPsiSize );
++
++/**************************************************************************
++ * Name : BpGetRj11InnerOuterPairGpios
++ *
++ * Description: This function returns the GPIO pin assignments for changing
++ * between the RJ11 inner pair and RJ11 outer pair.
++ *
++ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
++ * GPIO pin is returned in.
++ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
++ unsigned short *pusOuter );
++
++/**************************************************************************
++ * Name : BpGetPressAndHoldResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the press
++ * and hold reset button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the press and hold
++ * reset button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPressAndHoldResetGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipIntrGpio
++ *
++ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPcmciaResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PCMCIA
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPcmciaResetGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetUartRtsCtsGpios
++ *
++ * Description: This function returns the GPIO pin assignments for RTS and CTS
++ * UART signals.
++ *
++ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
++ * pin is returned in.
++ * [OUT] pusCts - Address of short word that the UART CTS GPIO
++ * pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts );
++
++/**************************************************************************
++ * Name : BpGetAdslLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetAdslFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED that is used when there is a DSL connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslFailLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessAntInUse
++ *
++ * Description: This function returns the antennas in use for wireless
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
++ * is in use.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessAntInUse( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesBtnGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesBtnGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesExtIntr
++ *
++ * Description: This function returns the external interrupt number for the
++ * Wireless Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * external interrup is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesExtIntr( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Led.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Led GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetUsbLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the USB
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the USB LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetUsbLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the HPNA
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWanDataLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the WAN Data
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWanDataLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPppLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPppFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED that is used when there is a PPP connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppFailLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderPowerOnLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the power
++ * on LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderAlarmLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the alarm
++ * LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderResetCfgLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the reset
++ * configuration LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the reset
++ * configuration LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderStopLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the break
++ * into bootloader LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the break into
++ * bootloader LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderStopLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessExtIntr
++ *
++ * Description: This function returns the Wireless external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the wireless
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetAdslDyingGaspExtIntr
++ *
++ * Description: This function returns the ADSL Dying Gasp external interrupt
++ * number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetVoipExtIntr
++ *
++ * Description: This function returns the VOIP external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * external interrupt number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaExtIntr
++ *
++ * Description: This function returns the HPNA external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaChipSelect
++ *
++ * Description: This function returns the HPNA chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * chip select number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaChipSelect( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetVoipChipSelect
++ *
++ * Description: This function returns the VOIP chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * chip select number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue );
++
++#endif /* __ASSEMBLER__ */
++
++#if __cplusplus
++}
++#endif
++
++#endif /* _BOARDPARMS_H */
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/cfiflash.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/cfiflash.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/cfiflash.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/cfiflash.c 2006-07-07 22:17:24.000000000 +0200
+@@ -0,0 +1,692 @@
++/************************************************************************/
++/* */
++/* AMD CFI Enabled Flash Memory Drivers */
++/* File name: CFIFLASH.C */
++/* Revision: 1.0 5/07/98 */
++/* */
++/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
++/* This software is unpublished and contains the trade secrets and */
++/* confidential proprietary information of AMD. Unless otherwise */
++/* provided in the Software Agreement associated herewith, it is */
++/* licensed in confidence "AS IS" and is not to be reproduced in whole */
++/* or part by any means except for backup. Use, duplication, or */
++/* disclosure by the Government is subject to the restrictions in */
++/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
++/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
++/* Software owned by */
++/* Advanced Micro Devices, Inc., */
++/* One AMD Place, */
++/* P.O. Box 3453 */
++/* Sunnyvale, CA 94088-3453. */
++/************************************************************************/
++/* This software constitutes a basic shell of source code for */
++/* programming all AMD Flash components. AMD */
++/* will not be responsible for misuse or illegal use of this */
++/* software for devices not supported herein. AMD is providing */
++/* this source code "AS IS" and will not be responsible for */
++/* issues arising from incorrect user implementation of the */
++/* source code herein. It is the user's responsibility to */
++/* properly design-in this source code. */
++/* */
++/************************************************************************/
++#ifdef _CFE_
++#include "lib_types.h"
++#include "lib_printf.h"
++#include "lib_string.h"
++#include "cfe_timer.h"
++#define printk printf
++#else // linux
++#include <linux/param.h>
++#include <linux/sched.h>
++#include <linux/timer.h>
++#endif
++
++#include "cfiflash.h"
++
++static int flash_wait(WORD sector, int offset, UINT16 data);
++static UINT16 flash_get_device_id(void);
++static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily);
++static int flash_write(WORD sector, int offset, byte *buf, int nbytes);
++static void flash_command(int command, WORD sector, int offset, UINT16 data);
++
++/*********************************************************************/
++/* 'meminfo' should be a pointer, but most C compilers will not */
++/* allocate static storage for a pointer without calling */
++/* non-portable functions such as 'new'. We also want to avoid */
++/* the overhead of passing this pointer for every driver call. */
++/* Systems with limited heap space will need to do this. */
++/*********************************************************************/
++struct flashinfo meminfo; /* Flash information structure */
++static int flashFamily = FLASH_UNDEFINED;
++static int totalSize = 0;
++static struct cfi_query query;
++
++static UINT16 cfi_data_struct_29W160[] = {
++ 0x0020, 0x0049, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0x0051, 0x0052, 0x0059, 0x0002, 0x0000, 0x0040, 0x0000, 0x0000,
++ 0x0000, 0x0000, 0x0000, 0x0027, 0x0036, 0x0000, 0x0000, 0x0004,
++ 0x0000, 0x000a, 0x0000, 0x0004, 0x0000, 0x0003, 0x0000, 0x0015,
++ 0x0002, 0x0000, 0x0000, 0x0000, 0x0004, 0x0000, 0x0000, 0x0040,
++ 0x0000, 0x0001, 0x0000, 0x0020, 0x0000, 0x0000, 0x0000, 0x0080,
++ 0x0000, 0x001e, 0x0000, 0x0000, 0x0001, 0xffff, 0xffff, 0xffff,
++ 0x0050, 0x0052, 0x0049, 0x0031, 0x0030, 0x0000, 0x0002, 0x0001,
++ 0x0001, 0x0004, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0002,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0x0888, 0x252b, 0x8c84, 0x7dbc, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff,
++ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
++};
++
++
++/*********************************************************************/
++/* Init_flash is used to build a sector table from the information */
++/* provided through the CFI query. This information is translated */
++/* from erase_block information to base:offset information for each */
++/* individual sector. This information is then stored in the meminfo */
++/* structure, and used throughout the driver to access sector */
++/* information. */
++/* */
++/* This is more efficient than deriving the sector base:offset */
++/* information every time the memory map switches (since on the */
++/* development platform can only map 64k at a time). If the entire */
++/* flash memory array can be mapped in, then the addition static */
++/* allocation for the meminfo structure can be eliminated, but the */
++/* drivers will have to be re-written. */
++/* */
++/* The meminfo struct occupies 653 bytes of heap space, depending */
++/* on the value of the define MAXSECTORS. Adjust to suit */
++/* application */
++/*********************************************************************/
++byte flash_init(void)
++{
++ int i=0, j=0, count=0;
++ int basecount=0L;
++ UINT16 device_id;
++ int flipCFIGeometry = FALSE;
++
++ /* First, assume
++ * a single 8k sector for sector 0. This is to allow
++ * the system to perform memory mapping to the device,
++ * even though the actual physical layout is unknown.
++ * Once mapped in, the CFI query will produce all
++ * relevant information.
++ */
++ meminfo.addr = 0L;
++ meminfo.areg = 0;
++ meminfo.nsect = 1;
++ meminfo.bank1start = 0;
++ meminfo.bank2start = 0;
++
++ meminfo.sec[0].size = 8192;
++ meminfo.sec[0].base = 0x00000;
++ meminfo.sec[0].bank = 1;
++
++ flash_command(FLASH_RESET, 0, 0, 0);
++
++ device_id = flash_get_device_id();
++
++ switch (device_id) {
++ case ID_I28F160C3B:
++ case ID_I28F320C3B:
++ case ID_I28F160C3T:
++ case ID_I28F320C3T:
++ flashFamily = FLASH_INTEL;
++ break;
++ case ID_AM29DL800B:
++ case ID_AM29LV800B:
++ case ID_AM29LV400B:
++ case ID_AM29LV160B:
++ case ID_AM29LV320B:
++ case ID_MX29LV320AB:
++ case ID_AM29LV320MB:
++ case ID_AM29DL800T:
++ case ID_AM29LV800T:
++ case ID_AM29LV160T:
++ case ID_AM29LV320T:
++ case ID_MX29LV320AT:
++ case ID_AM29LV320MT:
++ flashFamily = FLASH_AMD;
++ break;
++ case ID_SST39VF1601:
++ case ID_SST39VF3201:
++ flashFamily = FLASH_SST;
++ break;
++ default:
++ printk("Flash memory not supported! Device id = %x\n", device_id);
++ return -1;
++ }
++
++ if (flash_get_cfi(&query, 0, flashFamily) == -1) {
++ switch(device_id) {
++ case ID_AM29LV160T:
++ case ID_AM29LV160B:
++ flash_get_cfi(&query, cfi_data_struct_29W160, flashFamily);
++ break;
++ default:
++ printk("CFI data structure not found. Device id = %x\n", device_id);
++ return -1;
++ }
++ }
++
++ // need to determine if it top or bottom boot here
++ switch (device_id)
++ {
++ case ID_AM29DL800B:
++ case ID_AM29LV800B:
++ case ID_AM29LV400B:
++ case ID_AM29LV160B:
++ case ID_AM29LV320B:
++ case ID_MX29LV320AB:
++ case ID_AM29LV320MB:
++ case ID_I28F160C3B:
++ case ID_I28F320C3B:
++ case ID_I28F160C3T:
++ case ID_I28F320C3T:
++ case ID_SST39VF1601:
++ case ID_SST39VF3201:
++ flipCFIGeometry = FALSE;
++ break;
++ case ID_AM29DL800T:
++ case ID_AM29LV800T:
++ case ID_AM29LV160T:
++ case ID_AM29LV320T:
++ case ID_MX29LV320AT:
++ case ID_AM29LV320MT:
++ flipCFIGeometry = TRUE;
++ break;
++ default:
++ printk("Flash memory not supported! Device id = %x\n", device_id);
++ return -1;
++ }
++
++ count=0;basecount=0L;
++
++ if (!flipCFIGeometry)
++ {
++ for (i=0; i<query.num_erase_blocks; i++) {
++ for(j=0; j<query.erase_block[i].num_sectors; j++) {
++ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
++ meminfo.sec[count].base = (int) basecount;
++ basecount += (int) query.erase_block[i].sector_size;
++ count++;
++ }
++ }
++ }
++ else
++ {
++ for (i = (query.num_erase_blocks - 1); i >= 0; i--) {
++ for(j=0; j<query.erase_block[i].num_sectors; j++) {
++ meminfo.sec[count].size = (int) query.erase_block[i].sector_size;
++ meminfo.sec[count].base = (int) basecount;
++ basecount += (int) query.erase_block[i].sector_size;
++ count++;
++ }
++ }
++ }
++
++ meminfo.nsect = count;
++ totalSize = meminfo.sec[count-1].base + meminfo.sec[count-1].size;
++ return (0);
++}
++
++/*********************************************************************/
++/* Flash_sector_erase_int() is identical to flash_sector_erase(), */
++/* except it will wait until the erase is completed before returning */
++/* control to the calling function. This can be used in cases which */
++/* require the program to hold until a sector is erased, without */
++/* adding the wait check external to this function. */
++/*********************************************************************/
++byte flash_sector_erase_int(WORD sector)
++{
++ int i;
++
++ for( i = 0; i < 3; i++ ) {
++ flash_command(FLASH_SERASE, sector, 0, 0);
++ if (flash_wait(sector, 0, 0xffff) == STATUS_READY)
++ break;
++ }
++
++ return(1);
++}
++
++/*********************************************************************/
++/* flash_read_buf() reads buffer of data from the specified */
++/* offset from the sector parameter. */
++/*********************************************************************/
++int flash_read_buf(WORD sector, int offset,
++ byte *buffer, int numbytes)
++{
++ byte *fwp;
++
++ fwp = (byte *)flash_get_memptr(sector);
++
++ while (numbytes) {
++ *buffer++ = *(fwp + offset);
++ numbytes--;
++ fwp++;
++ }
++
++ return (1);
++}
++
++/*********************************************************************/
++/* flash_write_buf() utilizes */
++/* the unlock bypass mode of the flash device. This can remove */
++/* significant overhead from the bulk programming operation, and */
++/* when programming bulk data a sizeable performance increase can be */
++/* observed. */
++/*********************************************************************/
++int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes)
++{
++ int ret = -1;
++ int i;
++ unsigned char *p = flash_get_memptr(sector) + offset;
++
++ /* After writing the flash block, compare the contents to the source
++ * buffer. Try to write the sector successfully up to three times.
++ */
++ for( i = 0; i < 3; i++ ) {
++ ret = flash_write(sector, offset, buffer, numbytes);
++ if( !memcmp( p, buffer, numbytes ) )
++ break;
++ /* Erase and try again */
++ flash_sector_erase_int(sector);
++ ret = -1;
++ }
++
++ if( ret == -1 )
++ printk( "Flash write error. Verify failed\n" );
++
++ return( ret );
++}
++
++/*********************************************************************/
++/* Usefull funtion to return the number of sectors in the device. */
++/* Can be used for functions which need to loop among all the */
++/* sectors, or wish to know the number of the last sector. */
++/*********************************************************************/
++int flash_get_numsectors(void)
++{
++ return meminfo.nsect;
++}
++
++/*********************************************************************/
++/* flash_get_sector_size() is provided for cases in which the size */
++/* of a sector is required by a host application. The sector size */
++/* (in bytes) is returned in the data location pointed to by the */
++/* 'size' parameter. */
++/*********************************************************************/
++int flash_get_sector_size(WORD sector)
++{
++ return meminfo.sec[sector].size;
++}
++
++/*********************************************************************/
++/* The purpose of flash_get_memptr() is to return a memory pointer */
++/* which points to the beginning of memory space allocated for the */
++/* flash. All function pointers are then referenced from this */
++/* pointer. */
++/* */
++/* Different systems will implement this in different ways: */
++/* possibilities include: */
++/* - A direct memory pointer */
++/* - A pointer to a memory map */
++/* - A pointer to a hardware port from which the linear */
++/* address is translated */
++/* - Output of an MMU function / service */
++/* */
++/* Also note that this function expects the pointer to a specific */
++/* sector of the device. This can be provided by dereferencing */
++/* the pointer from a translated offset of the sector from a */
++/* global base pointer (e.g. flashptr = base_pointer + sector_offset)*/
++/* */
++/* Important: Many AMD flash devices need both bank and or sector */
++/* address bits to be correctly set (bank address bits are A18-A16, */
++/* and sector address bits are A18-A12, or A12-A15). Flash parts */
++/* which do not need these bits will ignore them, so it is safe to */
++/* assume that every part will require these bits to be set. */
++/*********************************************************************/
++unsigned char *flash_get_memptr(WORD sector)
++{
++ unsigned char *memptr = (unsigned char*)(FLASH_BASE_ADDR_REG + meminfo.sec[sector].base);
++
++ return (memptr);
++}
++
++/*********************************************************************/
++/* The purpose of flash_get_blk() is to return a the block number */
++/* for a given memory address. */
++/*********************************************************************/
++int flash_get_blk(int addr)
++{
++ int blk_start, i;
++ int last_blk = flash_get_numsectors();
++ int relative_addr = addr - (int) FLASH_BASE_ADDR_REG;
++
++ for(blk_start=0, i=0; i < relative_addr && blk_start < last_blk; blk_start++)
++ i += flash_get_sector_size(blk_start);
++
++ if( i > relative_addr )
++ {
++ blk_start--; // last blk, dec by 1
++ }
++ else
++ if( blk_start == last_blk )
++ {
++ printk("Address is too big.\n");
++ blk_start = -1;
++ }
++
++ return( blk_start );
++}
++
++/************************************************************************/
++/* The purpose of flash_get_total_size() is to return the total size of */
++/* the flash */
++/************************************************************************/
++int flash_get_total_size()
++{
++ return totalSize;
++}
++
++/*********************************************************************/
++/* Flash_command() is the main driver function. It performs */
++/* every possible command available to AMD B revision */
++/* flash parts. Note that this command is not used directly, but */
++/* rather called through the API wrapper functions provided below. */
++/*********************************************************************/
++static void flash_command(int command, WORD sector, int offset, UINT16 data)
++{
++ volatile UINT16 *flashptr;
++ volatile UINT16 *flashbase;
++
++ flashptr = (UINT16 *) flash_get_memptr(sector);
++ flashbase = (UINT16 *) flash_get_memptr(0);
++
++ switch (flashFamily) {
++ case FLASH_UNDEFINED:
++ /* These commands should work for AMD, Intel and SST flashes */
++ switch (command) {
++ case FLASH_RESET:
++ flashptr[0] = 0xF0;
++ flashptr[0] = 0xFF;
++ break;
++ case FLASH_READ_ID:
++ flashptr[0x5555] = 0xAA; /* unlock 1 */
++ flashptr[0x2AAA] = 0x55; /* unlock 2 */
++ flashptr[0x5555] = 0x90;
++ break;
++ default:
++ break;
++ }
++ break;
++ case FLASH_AMD:
++ switch (command) {
++ case FLASH_RESET:
++ flashptr[0] = 0xF0;
++ break;
++ case FLASH_READ_ID:
++ flashptr[0x555] = 0xAA; /* unlock 1 */
++ flashptr[0x2AA] = 0x55; /* unlock 2 */
++ flashptr[0x555] = 0x90;
++ break;
++ case FLASH_CFIQUERY:
++ flashptr[0x55] = 0x98;
++ break;
++ case FLASH_UB:
++ flashptr[0x555] = 0xAA; /* unlock 1 */
++ flashptr[0x2AA] = 0x55; /* unlock 2 */
++ flashptr[0x555] = 0x20;
++ break;
++ case FLASH_PROG:
++ flashptr[0] = 0xA0;
++ flashptr[offset/2] = data;
++ break;
++ case FLASH_UBRESET:
++ flashptr[0] = 0x90;
++ flashptr[0] = 0x00;
++ break;
++ case FLASH_SERASE:
++ flashptr[0x555] = 0xAA; /* unlock 1 */
++ flashptr[0x2AA] = 0x55; /* unlock 2 */
++ flashptr[0x555] = 0x80;
++ flashptr[0x555] = 0xAA;
++ flashptr[0x2AA] = 0x55;
++ flashptr[0] = 0x30;
++ break;
++ default:
++ break;
++ }
++ break;
++ case FLASH_INTEL:
++ switch (command) {
++ case FLASH_RESET:
++ flashptr[0] = 0xFF;
++ break;
++ case FLASH_READ_ID:
++ flashptr[0] = 0x90;
++ break;
++ case FLASH_CFIQUERY:
++ flashptr[0] = 0x98;
++ break;
++ case FLASH_PROG:
++ flashptr[0] = 0x40;
++ flashptr[offset/2] = data;
++ break;
++ case FLASH_SERASE:
++ flashptr[0] = 0x60;
++ flashptr[0] = 0xD0;
++ flashptr[0] = 0x20;
++ flashptr[0] = 0xD0;
++ break;
++ default:
++ break;
++ }
++ break;
++ case FLASH_SST:
++ switch (command) {
++ case FLASH_RESET:
++ flashbase[0x5555] = 0xAA; /* unlock 1 */
++ flashbase[0x2AAA] = 0x55; /* unlock 2 */
++ flashbase[0x5555] = 0xf0;
++ break;
++ case FLASH_READ_ID:
++ flashbase[0x5555] = 0xAA; /* unlock 1 */
++ flashbase[0x2AAA] = 0x55; /* unlock 2 */
++ flashbase[0x5555] = 0x90;
++ break;
++ case FLASH_CFIQUERY:
++ flashbase[0x5555] = 0xAA; /* unlock 1 */
++ flashbase[0x2AAA] = 0x55; /* unlock 2 */
++ flashbase[0x5555] = 0x98;
++ break;
++ case FLASH_UB:
++ break;
++ case FLASH_PROG:
++ flashbase[0x5555] = 0xAA; /* unlock 1 */
++ flashbase[0x2AAA] = 0x55; /* unlock 2 */
++ flashbase[0x5555] = 0xa0;
++ flashptr[offset/2] = data;
++ break;
++ case FLASH_UBRESET:
++ break;
++ case FLASH_SERASE:
++ flashbase[0x5555] = 0xAA; /* unlock 1 */
++ flashbase[0x2AAA] = 0x55; /* unlock 2 */
++ flashbase[0x5555] = 0x80;
++ flashbase[0x5555] = 0xAA;
++ flashbase[0x2AAA] = 0x55;
++ flashptr[0] = 0x30;
++ break;
++ default:
++ break;
++ }
++ break;
++ default:
++ break;
++ }
++}
++
++/*********************************************************************/
++/* flash_write extends the functionality of flash_program() by */
++/* providing an faster way to program multiple data words, without */
++/* needing the function overhead of looping algorithms which */
++/* program word by word. This function utilizes fast pointers */
++/* to quickly loop through bulk data. */
++/*********************************************************************/
++static int flash_write(WORD sector, int offset, byte *buf, int nbytes)
++{
++ UINT16 *src;
++ src = (UINT16 *)buf;
++
++ if ((nbytes | offset) & 1) {
++ return -1;
++ }
++
++ flash_command(FLASH_UB, 0, 0, 0);
++ while (nbytes > 0) {
++ flash_command(FLASH_PROG, sector, offset, *src);
++ if (flash_wait(sector, offset, *src) != STATUS_READY)
++ break;
++ offset +=2;
++ nbytes -=2;
++ src++;
++ }
++ flash_command(FLASH_UBRESET, 0, 0, 0);
++
++ return (byte*)src - buf;
++}
++
++/*********************************************************************/
++/* flash_wait utilizes the DQ6, DQ5, and DQ2 polling algorithms */
++/* described in the flash data book. It can quickly ascertain the */
++/* operational status of the flash device, and return an */
++/* appropriate status code (defined in flash.h) */
++/*********************************************************************/
++static int flash_wait(WORD sector, int offset, UINT16 data)
++{
++ volatile UINT16 *flashptr; /* flash window */
++ UINT16 d1;
++
++ flashptr = (UINT16 *) flash_get_memptr(sector);
++
++ if (flashFamily == FLASH_AMD || flashFamily == FLASH_SST) {
++#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
++ do {
++ d1 = flashptr[offset/2];
++ if (d1 == data)
++ return STATUS_READY;
++ } while (!(d1 & 0x20));
++
++ d1 = flashptr[offset/2];
++
++ if (d1 != data) {
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return STATUS_TIMEOUT;
++ }
++#else
++ do {
++ d1 = *flashptr; /* read data */
++ d1 ^= *flashptr; /* read it again and see what toggled */
++ if (d1 == 0) /* no toggles, nothing's happening */
++ return STATUS_READY;
++ } while (!(d1 & 0x20));
++
++ d1 = *flashptr; /* read data */
++ d1 ^= *flashptr; /* read it again and see what toggled */
++
++ if (d1 != 0) {
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return STATUS_TIMEOUT;
++ }
++#endif
++ } else if (flashFamily == FLASH_INTEL) {
++ flashptr[0] = 0x70;
++ /* Wait for completion */
++ while(!(*flashptr & 0x80));
++ if (*flashptr & 0x30) {
++ flashptr[0] = 0x50;
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return STATUS_TIMEOUT;
++ }
++ flashptr[0] = 0x50;
++ flash_command(FLASH_RESET, 0, 0, 0);
++ }
++
++ return STATUS_READY;
++}
++
++/*********************************************************************/
++/* flash_get_device_id() will perform an autoselect sequence on the */
++/* flash device, and return the device id of the component. */
++/* This function automatically resets to read mode. */
++/*********************************************************************/
++static UINT16 flash_get_device_id()
++{
++ volatile UINT16 *fwp; /* flash window */
++ UINT16 answer;
++
++ fwp = (UINT16 *)flash_get_memptr(0);
++
++ flash_command(FLASH_READ_ID, 0, 0, 0);
++ answer = *(fwp + 1);
++ if (answer == ID_AM29LV320M) {
++ answer = *(fwp + 0xe);
++ answer = *(fwp + 0xf);
++ }
++
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return( (UINT16) answer );
++}
++
++/*********************************************************************/
++/* flash_get_cfi() is the main CFI workhorse function. Due to it's */
++/* complexity and size it need only be called once upon */
++/* initializing the flash system. Once it is called, all operations */
++/* are performed by looking at the meminfo structure. */
++/* All possible care was made to make this algorithm as efficient as */
++/* possible. 90% of all operations are memory reads, and all */
++/* calculations are done using bit-shifts when possible */
++/*********************************************************************/
++static int flash_get_cfi(struct cfi_query *query, UINT16 *cfi_struct, int flashFamily)
++{
++ volatile UINT16 *fwp; /* flash window */
++ int i=0;
++
++ flash_command(FLASH_CFIQUERY, 0, 0, 0);
++
++ if (cfi_struct == 0)
++ fwp = (UINT16 *)flash_get_memptr(0);
++ else
++ fwp = cfi_struct;
++
++ /* Initial house-cleaning */
++ for(i=0; i < 8; i++) {
++ query->erase_block[i].sector_size = 0;
++ query->erase_block[i].num_sectors = 0;
++ }
++
++ /* If not 'QRY', then we dont have a CFI enabled device in the socket */
++ if( fwp[0x10] != 'Q' &&
++ fwp[0x11] != 'R' &&
++ fwp[0x12] != 'Y') {
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return(-1);
++ }
++
++ query->num_erase_blocks = fwp[0x2C];
++ if(flashFamily == FLASH_SST)
++ query->num_erase_blocks = 1;
++
++ for(i=0; i < query->num_erase_blocks; i++) {
++ query->erase_block[i].num_sectors = fwp[(0x2D+(4*i))] + (fwp[0x2E + (4*i)] << 8);
++ query->erase_block[i].num_sectors++;
++ query->erase_block[i].sector_size = 256 * (256 * fwp[(0x30+(4*i))] + fwp[(0x2F+(4*i))]);
++ }
++
++ flash_command(FLASH_RESET, 0, 0, 0);
++ return(1);
++}
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/cfiflash.h linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/cfiflash.h
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/cfiflash.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/cfiflash.h 2006-07-07 22:17:24.000000000 +0200
+@@ -0,0 +1,150 @@
++/************************************************************************/
++/* */
++/* AMD CFI Enabled Flash Memory Drivers */
++/* File name: CFIFLASH.H */
++/* Revision: 1.0 5/07/98 */
++/* */
++/* Copyright (c) 1998 ADVANCED MICRO DEVICES, INC. All Rights Reserved. */
++/* This software is unpublished and contains the trade secrets and */
++/* confidential proprietary information of AMD. Unless otherwise */
++/* provided in the Software Agreement associated herewith, it is */
++/* licensed in confidence "AS IS" and is not to be reproduced in whole */
++/* or part by any means except for backup. Use, duplication, or */
++/* disclosure by the Government is subject to the restrictions in */
++/* paragraph (b) (3) (B) of the Rights in Technical Data and Computer */
++/* Software clause in DFAR 52.227-7013 (a) (Oct 1988). */
++/* Software owned by */
++/* Advanced Micro Devices, Inc., */
++/* One AMD Place, */
++/* P.O. Box 3453 */
++/* Sunnyvale, CA 94088-3453. */
++/************************************************************************/
++/* This software constitutes a basic shell of source code for */
++/* programming all AMD Flash components. AMD */
++/* will not be responsible for misuse or illegal use of this */
++/* software for devices not supported herein. AMD is providing */
++/* this source code "AS IS" and will not be responsible for */
++/* issues arising from incorrect user implementation of the */
++/* source code herein. It is the user's responsibility to */
++/* properly design-in this source code. */
++/* */
++/************************************************************************/
++#ifndef _CFIFLASH_H
++#define _CFIFLASH_H
++
++#if defined __cplusplus
++extern "C" {
++#endif
++
++/* include board/CPU specific definitions */
++#include "bcmtypes.h"
++#include "board.h"
++
++#define FLASH_BASE_ADDR_REG FLASH_BASE
++
++#ifndef NULL
++#define NULL 0
++#endif
++
++#define MAXSECTORS 1024 /* maximum number of sectors supported */
++
++/* A structure for identifying a flash part. There is one for each
++ * of the flash part definitions. We need to keep track of the
++ * sector organization, the address register used, and the size
++ * of the sectors.
++ */
++struct flashinfo {
++ char *name; /* "Am29DL800T", etc. */
++ unsigned long addr; /* physical address, once translated */
++ int areg; /* Can be set to zero for all parts */
++ int nsect; /* # of sectors -- 19 in LV, 22 in DL */
++ int bank1start; /* first sector # in bank 1 */
++ int bank2start; /* first sector # in bank 2, if DL part */
++ struct {
++ long size; /* # of bytes in this sector */
++ long base; /* offset from beginning of device */
++ int bank; /* 1 or 2 for DL; 1 for LV */
++ } sec[MAXSECTORS]; /* per-sector info */
++};
++
++/*
++ * This structure holds all CFI query information as defined
++ * in the JEDEC standard. All information up to
++ * primary_extended_query is standard among all manufactures
++ * with CFI enabled devices.
++ */
++
++struct cfi_query {
++ int num_erase_blocks; /* Number of sector defs. */
++ struct {
++ unsigned long sector_size; /* byte size of sector */
++ int num_sectors; /* Num sectors of this size */
++ } erase_block[8]; /* Max of 256, but 8 is good */
++};
++
++/* Standard Boolean declarations */
++#define TRUE 1
++#define FALSE 0
++
++/* Define different type of flash */
++#define FLASH_UNDEFINED 0
++#define FLASH_AMD 1
++#define FLASH_INTEL 2
++#define FLASH_SST 3
++
++/* Command codes for the flash_command routine */
++#define FLASH_RESET 0 /* reset to read mode */
++#define FLASH_READ_ID 1 /* read device ID */
++#define FLASH_CFIQUERY 2 /* CFI query */
++#define FLASH_UB 3 /* go into unlock bypass mode */
++#define FLASH_PROG 4 /* program a word */
++#define FLASH_UBRESET 5 /* reset to read mode from unlock bypass mode */
++#define FLASH_SERASE 6 /* sector erase */
++
++/* Return codes from flash_status */
++#define STATUS_READY 0 /* ready for action */
++#define STATUS_TIMEOUT 1 /* operation timed out */
++
++/* A list of AMD compatible device ID's - add others as needed */
++#define ID_AM29DL800T 0x224A
++#define ID_AM29DL800B 0x22CB
++#define ID_AM29LV800T 0x22DA
++#define ID_AM29LV800B 0x225B
++#define ID_AM29LV400B 0x22BA
++
++#define ID_AM29LV160B 0x2249
++#define ID_AM29LV160T 0x22C4
++
++#define ID_AM29LV320T 0x22F6
++#define ID_MX29LV320AT 0x22A7
++#define ID_AM29LV320B 0x22F9
++#define ID_MX29LV320AB 0x22A8
++
++#define ID_AM29LV320M 0x227E
++#define ID_AM29LV320MB 0x2200
++#define ID_AM29LV320MT 0x2201
++
++#define ID_SST39VF1601 0x234B
++#define ID_SST39VF3201 0x235B
++
++/* A list of Intel compatible device ID's - add others as needed */
++#define ID_I28F160C3T 0x88C2
++#define ID_I28F160C3B 0x88C3
++#define ID_I28F320C3T 0x88C4
++#define ID_I28F320C3B 0x88C5
++
++extern byte flash_init(void);
++extern int flash_write_buf(WORD sector, int offset, byte *buffer, int numbytes);
++extern int flash_read_buf(WORD sector, int offset, byte *buffer, int numbytes);
++extern byte flash_sector_erase_int(WORD sector);
++extern int flash_get_numsectors(void);
++extern int flash_get_sector_size(WORD sector);
++extern int flash_get_total_size(void);
++extern unsigned char *flash_get_memptr(WORD sector);
++extern int flash_get_blk(int addr);
++
++#if defined __cplusplus
++}
++#endif
++
++#endif
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/irq.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/irq.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/irq.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/irq.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,274 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * Interrupt control functions for Broadcom 963xx MIPS boards
++ */
++
++#include <asm/atomic.h>
++
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/irq.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++
++#include <asm/irq.h>
++#include <asm/mipsregs.h>
++#include <asm/addrspace.h>
++#include <asm/signal.h>
++#include <bcm_map_part.h>
++#include <bcm_intr.h>
++
++static void irq_dispatch_int(struct pt_regs *regs)
++{
++ unsigned int pendingIrqs;
++ static unsigned int irqBit;
++ static unsigned int isrNumber = 31;
++
++ pendingIrqs = PERF->IrqStatus & PERF->IrqMask;
++ if (!pendingIrqs) {
++ return;
++ }
++
++ while (1) {
++ irqBit <<= 1;
++ isrNumber++;
++ if (isrNumber == 32) {
++ isrNumber = 0;
++ irqBit = 0x1;
++ }
++ if (pendingIrqs & irqBit) {
++ PERF->IrqMask &= ~irqBit; // mask
++ do_IRQ(isrNumber + INTERNAL_ISR_TABLE_OFFSET, regs);
++ break;
++ }
++ }
++}
++
++static void irq_dispatch_ext(uint32 irq, struct pt_regs *regs)
++{
++ if (!(PERF->ExtIrqCfg & (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT)))) {
++ printk("**** Ext IRQ mask. Should not dispatch ****\n");
++ }
++ /* disable and clear interrupt in the controller */
++ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT));
++ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
++ do_IRQ(irq, regs);
++}
++
++void brcm_irq_dispatch(struct pt_regs *regs)
++{
++ u32 cause;
++ while((cause = (read_c0_cause()& CAUSEF_IP))) {
++ if (cause & CAUSEF_IP7)
++ do_IRQ(MIPS_TIMER_INT, regs);
++ else if (cause & CAUSEF_IP2)
++ irq_dispatch_int(regs);
++ else if (cause & CAUSEF_IP3)
++ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_0, regs);
++ else if (cause & CAUSEF_IP4)
++ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_1, regs);
++ else if (cause & CAUSEF_IP5)
++ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_2, regs);
++ else if (cause & CAUSEF_IP6)
++ irq_dispatch_ext(INTERRUPT_ID_EXTERNAL_3, regs);
++ cli();
++ }
++}
++
++
++void enable_brcm_irq(unsigned int irq)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ if( irq >= INTERNAL_ISR_TABLE_OFFSET ) {
++ PERF->IrqMask |= (1 << (irq - INTERNAL_ISR_TABLE_OFFSET));
++ }
++ else if (irq >= INTERRUPT_ID_EXTERNAL_0 && irq <= INTERRUPT_ID_EXTERNAL_3) {
++ /* enable and clear interrupt in the controller */
++ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT));
++ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
++ }
++ local_irq_restore(flags);
++}
++
++void disable_brcm_irq(unsigned int irq)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++ if( irq >= INTERNAL_ISR_TABLE_OFFSET ) {
++ PERF->IrqMask &= ~(1 << (irq - INTERNAL_ISR_TABLE_OFFSET));
++ }
++ else if (irq >= INTERRUPT_ID_EXTERNAL_0 && irq <= INTERRUPT_ID_EXTERNAL_3) {
++ /* disable interrupt in the controller */
++ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT));
++ }
++ local_irq_restore(flags);
++}
++
++void ack_brcm_irq(unsigned int irq)
++{
++ /* Already done in brcm_irq_dispatch */
++}
++
++unsigned int startup_brcm_irq(unsigned int irq)
++{
++ enable_brcm_irq(irq);
++
++ return 0; /* never anything pending */
++}
++
++unsigned int startup_brcm_none(unsigned int irq)
++{
++ return 0;
++}
++
++void end_brcm_irq(unsigned int irq)
++{
++ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
++ enable_brcm_irq(irq);
++}
++
++void end_brcm_none(unsigned int irq)
++{
++}
++
++#define ALLINTS_NOTIMER (IE_IRQ0 | IE_IRQ1 | IE_IRQ2 | IE_IRQ3 | IE_IRQ4)
++
++static void __init brcm_irq_setup(void)
++{
++ extern asmlinkage void brcmIRQ(void);
++
++ clear_c0_status(ST0_BEV);
++ set_except_vector(0, brcmIRQ);
++ change_c0_status(ST0_IM, ALLINTS_NOTIMER);
++
++#ifdef CONFIG_REMOTE_DEBUG
++ rs_kgdb_hook(0);
++#endif
++}
++
++static struct hw_interrupt_type brcm_irq_type = {
++ .typename = "MIPS",
++ .startup = startup_brcm_irq,
++ .shutdown = disable_brcm_irq,
++ .enable = enable_brcm_irq,
++ .disable = disable_brcm_irq,
++ .ack = ack_brcm_irq,
++ .end = end_brcm_irq,
++ .set_affinity = NULL
++};
++
++static struct hw_interrupt_type brcm_irq_no_end_type = {
++ .typename = "MIPS",
++ .startup = startup_brcm_none,
++ .shutdown = disable_brcm_irq,
++ .enable = enable_brcm_irq,
++ .disable = disable_brcm_irq,
++ .ack = ack_brcm_irq,
++ .end = end_brcm_none,
++ .set_affinity = NULL
++};
++
++void __init arch_init_irq(void)
++{
++ int i;
++
++ for (i = 0; i < NR_IRQS; i++) {
++ irq_desc[i].status = IRQ_DISABLED;
++ irq_desc[i].action = 0;
++ irq_desc[i].depth = 1;
++ irq_desc[i].handler = &brcm_irq_type;
++ }
++
++ brcm_irq_setup();
++}
++
++int request_external_irq(unsigned int irq,
++ FN_HANDLER handler,
++ unsigned long irqflags,
++ const char * devname,
++ void *dev_id)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++
++ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_CLEAR_SHFT)); // Clear
++ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_MASK_SHFT)); // Mask
++ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_INSENS_SHFT)); // Edge insesnsitive
++ PERF->ExtIrqCfg |= (1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_LEVEL_SHFT)); // Level triggered
++ PERF->ExtIrqCfg &= ~(1 << (irq - INTERRUPT_ID_EXTERNAL_0 + EI_SENSE_SHFT)); // Low level
++
++ local_irq_restore(flags);
++
++ return( request_irq(irq, handler, irqflags, devname, dev_id) );
++}
++
++/* VxWorks compatibility function(s). */
++
++unsigned int BcmHalMapInterrupt(FN_HANDLER pfunc, unsigned int param,
++ unsigned int interruptId)
++{
++ int nRet = -1;
++ char *devname;
++
++ devname = kmalloc(16, GFP_KERNEL);
++ if (devname)
++ sprintf( devname, "brcm_%d", interruptId );
++
++ /* Set the IRQ description to not automatically enable the interrupt at
++ * the end of an ISR. The driver that handles the interrupt must
++ * explicitly call BcmHalInterruptEnable or enable_brcm_irq. This behavior
++ * is consistent with interrupt handling on VxWorks.
++ */
++ irq_desc[interruptId].handler = &brcm_irq_no_end_type;
++
++ if( interruptId >= INTERNAL_ISR_TABLE_OFFSET )
++ {
++ nRet = request_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT,
++ devname, (void *) param );
++ }
++ else if (interruptId >= INTERRUPT_ID_EXTERNAL_0 && interruptId <= INTERRUPT_ID_EXTERNAL_3)
++ {
++ nRet = request_external_irq( interruptId, pfunc, SA_SAMPLE_RANDOM | SA_INTERRUPT,
++ devname, (void *) param );
++ }
++
++ return( nRet );
++}
++
++
++/* Debug function. */
++
++void dump_intr_regs(void)
++{
++ printk("PERF->ExtIrqCfg [%08x]\n", *(&(PERF->ExtIrqCfg)));
++}
++
++EXPORT_SYMBOL(enable_brcm_irq);
++EXPORT_SYMBOL(disable_brcm_irq);
++EXPORT_SYMBOL(request_external_irq);
++EXPORT_SYMBOL(BcmHalMapInterrupt);
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/Kconfig linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/Kconfig
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/Kconfig 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,172 @@
++# Kernel and Driver configuration for Broadcom Commengine ADSL board
++choice
++ prompt "Broadcom Commengine ADSL board"
++ depends on MIPS_BRCM
++ default BCM96345
++ help
++ Select different Broadcom ADSL board
++
++config BCM96338
++ bool "96338 ADSL board"
++ select DMA_NONCOHERENT
++ select HW_HAS_PCI
++
++config BCM96345
++ bool "96345 ADSL board"
++ select DMA_NONCOHERENT
++ select HW_HAS_PCI
++
++config BCM96348
++ bool "96348 ADSL board"
++ select DMA_NONCOHERENT
++ select HW_HAS_PCI
++
++endchoice
++
++config BCM_BOARD
++ bool "Support for Broadcom Board"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_SERIAL
++ bool "Support for Serial Port"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ENET
++ tristate "Support for Ethernet"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_USB
++ tristate "Support for USB"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_WLAN
++ tristate "Support for Wireless"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_PCI
++ bool "Support for PCI"
++ depends on BCM96338 || BCM96345 || BCM96348
++ select PCI
++
++config BCM_ATMAPI
++ tristate "Support for ATM"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ATMTEST
++ tristate "Support for ATM Diagnostic"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ADSL
++ tristate "Support for ADSL"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ENDPOINT
++ tristate "Support for VOICE"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_PROCFS
++ tristate "Support for PROCFS"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_VDSL
++ tristate "Support for VDSL"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_SECURITY
++ tristate "Support for SECURITY"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_HPNA
++ tristate "Support for HPNA"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_BOARD_IMPL
++ int "Implementation index for ADSL Board"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_SERIAL_IMPL
++ int "Implementation index for Serial"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ENET_IMPL
++ int "Implementation index for Ethernet"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_USB_IMPL
++ int "Implementation index for USB"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_WLAN_IMPL
++ int "Implementation index for WIRELESS"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ATMAPI_IMPL
++ int "Implementation index for ATM"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ATMTEST_IMPL
++ int "Implementation index for ATM Diagnostic"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_BLAA_IMPL
++ int "Implementation index for BLAA"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ADSL_IMPL
++ int "Implementation index for ADSL"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_ENDPOINT_IMPL
++ int "Implementation index for VOICE"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_PROCFS_IMPL
++ int "Implementation index for PROCFS"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_VDSL_IMPL
++ int "Implementation index for VDSL"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_SECURITY_IMPL
++ int "Implementation index for SECURITY"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++config BCM_HPNA_IMPL
++ int "Implementation index for HPNA"
++ depends on BCM96338 || BCM96345 || BCM96348
++
++choice
++ prompt "Root File System"
++ depends on MIPS_BRCM
++ default ROOTFS_SQUASHFS
++ help
++ Select root file system on the board flash.
++
++config ROOTFS_SQUASHFS
++ bool "SQUASHFS"
++config ROOTFS_CRAMFS
++ bool "CRAMFS"
++config ROOTFS_JFFS2
++ bool "JFFS2"
++config ROOTFS_NFS
++ bool "NFS"
++
++endchoice
++
++config ROOT_FLASHFS
++ string "flash partition"
++ depends on ROOTFS_SQUASHFS || ROOTFS_CRAMFS || ROOTFS_JFFS2
++ default "root=31:0 ro noinitrd" if ROOTFS_SQUASHFS = y || ROOTFS_CRAMFS = y
++ default "root=31:2 ro noinitrd" if ROOTFS_JFFS2 = y
++ help
++ This is the root file system partition on flash memory
++
++config ROOT_NFS_DIR
++ string "NFS server path"
++ depends on ROOTFS_NFS
++ default "/opt/bcm96338/targets/96338R/fs" if BCM96338 = y
++ default "/opt/bcm96345/targets/96345R/fs" if BCM96345 = y
++ default "/opt/bcm96348/targets/96348R/fs" if BCM96348 = y
++ help
++ This is the path of NFS server (host system)
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/Makefile linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/Makefile
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/Makefile 2006-07-07 22:18:20.000000000 +0200
+@@ -0,0 +1,23 @@
++#
++# Makefile for generic Broadcom MIPS boards
++#
++# Copyright (C) 2004 Broadcom Corporation
++#
++obj-y := irq.o prom.o setup.o time.o ser_init.o bcm63xx_flash.o bcm63xx_led.o board.o boardparms.o cfiflash.o
++
++SRCBASE := $(TOPDIR)
++EXTRA_CFLAGS += -I$(SRCBASE)/include
++#EXTRA_CFLAGS += -I$(INC_ADSLDRV_PATH) -DDBG
++EXTRA_CFLAGS += -I$(INC_ADSLDRV_PATH)
++
++
++ifeq "$(ADSL)" "ANNEX_B"
++EXTRA_CFLAGS += -DADSL_ANNEXB
++endif
++ifeq "$(ADSL)" "SADSL"
++EXTRA_CFLAGS += -DADSL_SADSL
++endif
++ifeq "$(ADSL)" "ANNEX_C"
++EXTRA_CFLAGS += -DADSL_ANNEXC
++endif
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/prom.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/prom.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/prom.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/prom.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,236 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * prom.c: PROM library initialization code.
++ *
++ */
++#include <linux/init.h>
++#include <linux/mm.h>
++#include <linux/sched.h>
++#include <linux/bootmem.h>
++#include <linux/blkdev.h>
++#include <asm/addrspace.h>
++#include <asm/bootinfo.h>
++#include <asm/cpu.h>
++#include <asm/time.h>
++
++#include <bcm_map_part.h>
++#include <board.h>
++#include "boardparms.h"
++#include "softdsl/AdslCoreDefs.h"
++
++
++extern int do_syslog(int, char *, int);
++extern void serial_init(void);
++extern void __init InitNvramInfo( void );
++/*extern void kerSysFlashInit( void );*/
++/*extern unsigned long get_nvram_start_addr(void);*/
++void __init create_root_nfs_cmdline( char *cmdline );
++
++#if defined(CONFIG_BCM96338)
++#define CPU_CLOCK 240000000
++#define MACH_BCM MACH_BCM96338
++#endif
++#if defined(CONFIG_BCM96345)
++#define CPU_CLOCK 140000000
++#define MACH_BCM MACH_BCM96345
++#endif
++#if defined(CONFIG_BCM96348)
++void __init calculateCpuSpeed(void);
++static unsigned long cpu_speed;
++#define CPU_CLOCK cpu_speed
++#define MACH_BCM MACH_BCM96348
++#endif
++
++const char *get_system_type(void)
++{/*
++ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
++
++ return( pNvramData->szBoardId );*/
++ return "brcm63xx";
++}
++
++unsigned long getMemorySize(void)
++{
++ unsigned long ulSdramType = BOARD_SDRAM_TYPE;
++
++ unsigned long ulSdramSize;
++
++ switch( ulSdramType )
++ {
++ case BP_MEMORY_16MB_1_CHIP:
++ case BP_MEMORY_16MB_2_CHIP:
++ ulSdramSize = 16 * 1024 * 1024;
++ break;
++ case BP_MEMORY_32MB_1_CHIP:
++ case BP_MEMORY_32MB_2_CHIP:
++ ulSdramSize = 32 * 1024 * 1024;
++ break;
++ case BP_MEMORY_64MB_2_CHIP:
++ ulSdramSize = 64 * 1024 * 1024;
++ break;
++ default:
++ ulSdramSize = 8 * 1024 * 1024;
++ break;
++ }
++
++ return ulSdramSize;
++}
++
++/* --------------------------------------------------------------------------
++ Name: prom_init
++ -------------------------------------------------------------------------- */
++void __init prom_init(void)
++{
++ extern ulong r4k_interval;
++
++ serial_init();
++
++ /*kerSysFlashInit();*/
++
++ do_syslog(8, NULL, 8);
++
++ printk( "%s prom init\n", get_system_type() );
++
++ PERF->IrqMask = 0;
++
++ arcs_cmdline[0] = '\0';
++#if 0
++#if defined(CONFIG_ROOT_NFS)
++ create_root_nfs_cmdline( arcs_cmdline );
++#endif
++#elif defined(CONFIG_ROOT_FLASHFS)
++ strcpy(arcs_cmdline, CONFIG_ROOT_FLASHFS);
++#endif
++
++ add_memory_region(0, (getMemorySize() - ADSL_SDRAM_IMAGE_SIZE), BOOT_MEM_RAM);
++
++#if defined(CONFIG_BCM96348)
++ calculateCpuSpeed();
++#endif
++ /* Count register increments every other clock */
++ r4k_interval = CPU_CLOCK / HZ / 2;
++ mips_hpt_frequency = CPU_CLOCK / 2;
++
++ mips_machgroup = MACH_GROUP_BRCM;
++ mips_machtype = MACH_BCM;
++}
++
++/* --------------------------------------------------------------------------
++ Name: prom_free_prom_memory
++Abstract:
++ -------------------------------------------------------------------------- */
++void __init prom_free_prom_memory(void)
++{
++
++}
++
++#if 0
++#if defined(CONFIG_ROOT_NFS)
++/* This function reads in a line that looks something like this:
++ *
++ *
++ * CFE bootline=bcmEnet(0,0)host:vmlinux e=192.169.0.100:ffffff00 h=192.169.0.1
++ *
++ *
++ * and retuns in the cmdline parameter some that looks like this:
++ *
++ * CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.0.1:/opt/targets/96345R/fs
++ * ip=192.168.0.100:192.168.0.1::255.255.255.0::eth0:off rw"
++ */
++#define BOOT_LINE_ADDR 0x0
++#define HEXDIGIT(d) ((d >= '0' && d <= '9') ? (d - '0') : ((d | 0x20) - 'W'))
++#define HEXBYTE(b) (HEXDIGIT((b)[0]) << 4) + HEXDIGIT((b)[1])
++extern unsigned long get_nvram_start_addr(void);
++
++void __init create_root_nfs_cmdline( char *cmdline )
++{
++ char root_nfs_cl[] = "root=/dev/nfs nfsroot=%s:" CONFIG_ROOT_NFS_DIR
++ " ip=%s:%s::%s::eth0:off rw";
++
++ char *localip = NULL;
++ char *hostip = NULL;
++ char mask[16] = "";
++ PNVRAM_DATA pNvramData = (PNVRAM_DATA) get_nvram_start_addr();
++ char bootline[128] = "";
++ char *p = bootline;
++
++ memcpy(bootline, pNvramData->szBootline, sizeof(bootline));
++ while( *p )
++ {
++ if( p[0] == 'e' && p[1] == '=' )
++ {
++ /* Found local ip address */
++ p += 2;
++ localip = p;
++ while( *p && *p != ' ' && *p != ':' )
++ p++;
++ if( *p == ':' )
++ {
++ /* Found network mask (eg FFFFFF00 */
++ *p++ = '\0';
++ sprintf( mask, "%u.%u.%u.%u", HEXBYTE(p), HEXBYTE(p + 2),
++ HEXBYTE(p + 4), HEXBYTE(p + 6) );
++ p += 4;
++ }
++ else if( *p == ' ' )
++ *p++ = '\0';
++ }
++ else if( p[0] == 'h' && p[1] == '=' )
++ {
++ /* Found host ip address */
++ p += 2;
++ hostip = p;
++ while( *p && *p != ' ' )
++ p++;
++ if( *p == ' ' )
++ *p++ = '\0';
++ }
++ else
++ p++;
++ }
++
++ if( localip && hostip )
++ sprintf( cmdline, root_nfs_cl, hostip, localip, hostip, mask );
++}
++#endif
++#endif
++
++#if defined(CONFIG_BCM96348)
++/* *********************************************************************
++ * calculateCpuSpeed()
++ * Calculate the BCM6348 CPU speed by reading the PLL strap register
++ * and applying the following formula:
++ * cpu_clk = (.25 * 64MHz freq) * (N1 + 1) * (N2 + 2) / (M1_CPU + 1)
++ * Input parameters:
++ * none
++ * Return value:
++ * none
++ ********************************************************************* */
++void __init calculateCpuSpeed(void)
++{
++ UINT32 pllStrap = PERF->PllStrap;
++ int n1 = (pllStrap & PLL_N1_MASK) >> PLL_N1_SHFT;
++ int n2 = (pllStrap & PLL_N2_MASK) >> PLL_N2_SHFT;
++ int m1cpu = (pllStrap & PLL_M1_CPU_MASK) >> PLL_M1_CPU_SHFT;
++
++ cpu_speed = (16 * (n1 + 1) * (n2 + 2) / (m1cpu + 1)) * 1000000;
++}
++#endif
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/ser_init.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/ser_init.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/ser_init.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/ser_init.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,180 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * Broadcom bcm63xx serial port initialization, also prepare for printk
++ * by registering with console_init
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/console.h>
++#include <linux/sched.h>
++
++#include <asm/addrspace.h>
++#include <asm/irq.h>
++#include <asm/reboot.h>
++#include <asm/gdb-stub.h>
++#include <asm/mc146818rtc.h>
++
++#include <bcm_map_part.h>
++#include <board.h>
++
++#define SER63XX_DEFAULT_BAUD 115200
++#define BD_BCM63XX_TIMER_CLOCK_INPUT (FPERIPH)
++#define stUart ((volatile Uart * const) UART_BASE)
++
++// Transmit interrupts
++#define TXINT (TXFIFOEMT | TXUNDERR | TXOVFERR)
++// Receive interrupts
++#define RXINT (RXFIFONE | RXOVFERR)
++
++/* --------------------------------------------------------------------------
++ Name: serial_init
++ Purpose: Initalize the UART
++-------------------------------------------------------------------------- */
++void __init serial_init(void)
++{
++ UINT32 tmpVal = SER63XX_DEFAULT_BAUD;
++ ULONG clockFreqHz;
++
++#if defined(CONFIG_BCM96345)
++ // Make sure clock is ticking
++ PERF->blkEnables |= UART_CLK_EN;
++#endif
++
++ /* Dissable channel's receiver and transmitter. */
++ stUart->control &= ~(BRGEN|TXEN|RXEN);
++
++ /*--------------------------------------------------------------------*/
++ /* Write the table value to the clock select register. */
++ /* DPullen - this is the equation to use: */
++ /* value = clockFreqHz / baud / 32-1; */
++ /* (snmod) Actually you should also take into account any necessary */
++ /* rounding. Divide by 16, look at lsb, if 0, divide by 2 */
++ /* and subtract 1. If 1, just divide by 2 */
++ /*--------------------------------------------------------------------*/
++ clockFreqHz = BD_BCM63XX_TIMER_CLOCK_INPUT;
++ tmpVal = (clockFreqHz / tmpVal) / 16;
++ if( tmpVal & 0x01 )
++ tmpVal /= 2; //Rounding up, so sub is already accounted for
++ else
++ tmpVal = (tmpVal / 2) - 1; // Rounding down so we must sub 1
++ stUart->baudword = tmpVal;
++
++ /* Finally, re-enable the transmitter and receiver. */
++ stUart->control |= (BRGEN|TXEN|RXEN);
++
++ stUart->config = (BITS8SYM | ONESTOP);
++ // Set the FIFO interrupt depth ... stUart->fifocfg = 0xAA;
++ stUart->fifoctl = RSTTXFIFOS | RSTRXFIFOS;
++ stUart->intMask = 0;
++ stUart->intMask = RXINT | TXINT;
++}
++
++
++/* prom_putc()
++ * Output a character to the UART
++ */
++void prom_putc(char c)
++{
++ /* Wait for Tx uffer to empty */
++ while (! (READ16(stUart->intStatus) & TXFIFOEMT));
++ /* Send character */
++ stUart->Data = c;
++}
++
++/* prom_puts()
++ * Write a string to the UART
++ */
++void prom_puts(const char *s)
++{
++ while (*s) {
++ if (*s == '\n') {
++ prom_putc('\r');
++ }
++ prom_putc(*s++);
++ }
++}
++
++
++/* prom_getc_nowait()
++ * Returns a character from the UART
++ * Returns -1 if no characters available or corrupted
++ */
++int prom_getc_nowait(void)
++{
++ uint16 uStatus;
++ int cData = -1;
++
++ uStatus = READ16(stUart->intStatus);
++
++ if (uStatus & RXFIFONE) { /* Do we have a character? */
++ cData = READ16(stUart->Data) & 0xff; /* Read character */
++ if (uStatus & (RXFRAMERR | RXPARERR)) { /* If we got an error, throw it away */
++ cData = -1;
++ }
++ }
++
++ return cData;
++}
++
++/* prom_getc()
++ * Returns a charcter from the serial port
++ * Will block until it receives a valid character
++*/
++char prom_getc(void)
++{
++ int cData = -1;
++
++ /* Loop until we get a valid character */
++ while(cData == -1) {
++ cData = prom_getc_nowait();
++ }
++ return (char) cData;
++}
++
++/* prom_testc()
++ * Returns 0 if no characters available
++ */
++int prom_testc(void)
++{
++ uint16 uStatus;
++
++ uStatus = READ16(stUart->intStatus);
++
++ return (uStatus & RXFIFONE);
++}
++
++#if CONFIG_REMOTE_DEBUG
++/* Prevent other code from writing to the serial port */
++void _putc(char c) { }
++void _puts(const char *ptr) { }
++#else
++/* Low level outputs call prom routines */
++void _putc(char c) {
++ prom_putc(c);
++}
++void _puts(const char *ptr) {
++ prom_puts(ptr);
++}
++#endif
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/setup.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/setup.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/setup.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/setup.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,523 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * Generic setup routines for Broadcom 963xx MIPS boards
++ */
++
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/kdev_t.h>
++#include <linux/types.h>
++#include <linux/console.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/module.h>
++#include <linux/pm.h>
++
++#include <asm/addrspace.h>
++#include <asm/bcache.h>
++#include <asm/irq.h>
++#include <asm/time.h>
++#include <asm/reboot.h>
++#include <asm/gdb-stub.h>
++
++extern void brcm_timer_setup(struct irqaction *irq);
++extern unsigned long getMemorySize(void);
++
++#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
++#include <linux/pci.h>
++#include <linux/delay.h>
++#include <bcm_map_part.h>
++#include <bcmpci.h>
++
++static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
++#endif
++
++/* This function should be in a board specific directory. For now,
++ * assume that all boards that include this file use a Broadcom chip
++ * with a soft reset bit in the PLL control register.
++ */
++static void brcm_machine_restart(char *command)
++{
++ const unsigned long ulSoftReset = 0x00000001;
++ unsigned long *pulPllCtrl = (unsigned long *) 0xfffe0008;
++ *pulPllCtrl |= ulSoftReset;
++}
++
++static void brcm_machine_halt(void)
++{
++ printk("System halted\n");
++ while (1);
++}
++
++#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
++
++static void mpi_SetLocalPciConfigReg(uint32 reg, uint32 value)
++{
++ /* write index then value */
++ mpi->pcicfgcntrl = PCI_CFG_REG_WRITE_EN + reg;;
++ mpi->pcicfgdata = value;
++}
++
++static uint32 mpi_GetLocalPciConfigReg(uint32 reg)
++{
++ /* write index then get value */
++ mpi->pcicfgcntrl = PCI_CFG_REG_WRITE_EN + reg;;
++ return mpi->pcicfgdata;
++}
++
++/*
++ * mpi_ResetPcCard: Set/Reset the PcCard
++ */
++static void mpi_ResetPcCard(int cardtype, BOOL bReset)
++{
++ if (cardtype == MPI_CARDTYPE_NONE) {
++ return;
++ }
++
++ if (cardtype == MPI_CARDTYPE_CARDBUS) {
++ bReset = ! bReset;
++ }
++
++ if (bReset) {
++ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & ~PCCARD_CARD_RESET);
++ } else {
++ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 | PCCARD_CARD_RESET);
++ }
++}
++
++/*
++ * mpi_ConfigCs: Configure an MPI/EBI chip select
++ */
++static void mpi_ConfigCs(uint32 cs, uint32 base, uint32 size, uint32 flags)
++{
++ mpi->cs[cs].base = ((base & 0x1FFFFFFF) | size);
++ mpi->cs[cs].config = flags;
++}
++
++/*
++ * mpi_InitPcmciaSpace
++ */
++static void mpi_InitPcmciaSpace(void)
++{
++ // ChipSelect 4 controls PCMCIA Memory accesses
++ mpi_ConfigCs(PCMCIA_COMMON_BASE, pcmciaMem, EBI_SIZE_1M, (EBI_WORD_WIDE|EBI_ENABLE));
++ // ChipSelect 5 controls PCMCIA Attribute accesses
++ mpi_ConfigCs(PCMCIA_ATTRIBUTE_BASE, pcmciaAttr, EBI_SIZE_1M, (EBI_WORD_WIDE|EBI_ENABLE));
++ // ChipSelect 6 controls PCMCIA I/O accesses
++ mpi_ConfigCs(PCMCIA_IO_BASE, pcmciaIo, EBI_SIZE_64K, (EBI_WORD_WIDE|EBI_ENABLE));
++
++ mpi->pcmcia_cntl2 = ((PCMCIA_ATTR_ACTIVE << RW_ACTIVE_CNT_BIT) |
++ (PCMCIA_ATTR_INACTIVE << INACTIVE_CNT_BIT) |
++ (PCMCIA_ATTR_CE_SETUP << CE_SETUP_CNT_BIT) |
++ (PCMCIA_ATTR_CE_HOLD << CE_HOLD_CNT_BIT));
++
++ mpi->pcmcia_cntl2 |= (PCMCIA_HALFWORD_EN | PCMCIA_BYTESWAP_DIS);
++}
++
++/*
++ * cardtype_vcc_detect: PC Card's card detect and voltage sense connection
++ *
++ * CD1#/ CD2#/ VS1#/ VS2#/ Card Initial Vcc
++ * CCD1# CCD2# CVS1 CVS2 Type
++ *
++ * GND GND open open 16-bit 5 vdc
++ *
++ * GND GND GND open 16-bit 3.3 vdc
++ *
++ * GND GND open GND 16-bit x.x vdc
++ *
++ * GND GND GND GND 16-bit 3.3 & x.x vdc
++ *
++ *====================================================================
++ *
++ * CVS1 GND CCD1# open CardBus 3.3 vdc
++ *
++ * GND CVS2 open CCD2# CardBus x.x vdc
++ *
++ * GND CVS1 CCD2# open CardBus y.y vdc
++ *
++ * GND CVS2 GND CCD2# CardBus 3.3 & x.x vdc
++ *
++ * CVS2 GND open CCD1# CardBus x.x & y.y vdc
++ *
++ * GND CVS1 CCD2# open CardBus 3.3, x.x & y.y vdc
++ *
++ */
++static int cardtype_vcc_detect(void)
++{
++ uint32 data32;
++ int cardtype;
++
++ cardtype = MPI_CARDTYPE_NONE;
++ mpi->pcmcia_cntl1 = 0x0000A000; // Turn on the output enables and drive
++ // the CVS pins to 0.
++ data32 = mpi->pcmcia_cntl1;
++ switch (data32 & 0x00000003) // Test CD1# and CD2#, see if card is plugged in.
++ {
++ case 0x00000003: // No Card is in the slot.
++ printk("mpi: No Card is in the PCMCIA slot\n");
++ break;
++
++ case 0x00000002: // Partial insertion, No CD2#.
++ printk("mpi: Card in the PCMCIA slot partial insertion, no CD2 signal\n");
++ break;
++
++ case 0x00000001: // Partial insertion, No CD1#.
++ printk("mpi: Card in the PCMCIA slot partial insertion, no CD1 signal\n");
++ break;
++
++ case 0x00000000:
++ mpi->pcmcia_cntl1 = 0x0000A0C0; // Turn off the CVS output enables and
++ // float the CVS pins.
++ mdelay(1);
++ data32 = mpi->pcmcia_cntl1;
++ // Read the Register.
++ switch (data32 & 0x0000000C) // See what is on the CVS pins.
++ {
++ case 0x00000000: // CVS1 and CVS2 are tied to ground, only 1 option.
++ printk("mpi: Detected 3.3 & x.x 16-bit PCMCIA card\n");
++ cardtype = MPI_CARDTYPE_PCMCIA;
++ break;
++
++ case 0x00000004: // CVS1 is open or tied to CCD1/CCD2 and CVS2 is tied to ground.
++ // 2 valid voltage options.
++ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
++ {
++ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
++ // This is not a valid combination.
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
++ mpi->pcmcia_cntl1 = 0x0000A080; // Drive CVS1 to a 0.
++ mdelay(1);
++ data32 = mpi->pcmcia_cntl1;
++ if (data32 & 0x00000002) { // CCD2 is tied to CVS2, not valid.
++ printk("mpi: Unknown card plugged into slot\n");
++ } else { // CCD2 is tied to CVS1.
++ printk("mpi: Detected 3.3, x.x and y.y Cardbus card\n");
++ cardtype = MPI_CARDTYPE_CARDBUS;
++ }
++ break;
++
++ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
++ // This is not a valid combination.
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ case 0x00000000: // CCD1 and CCD2 are tied to ground.
++ printk("mpi: Detected x.x vdc 16-bit PCMCIA card\n");
++ cardtype = MPI_CARDTYPE_PCMCIA;
++ break;
++ }
++ break;
++
++ case 0x00000008: // CVS2 is open or tied to CCD1/CCD2 and CVS1 is tied to ground.
++ // 2 valid voltage options.
++ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
++ {
++ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
++ // This is not a valid combination.
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
++ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
++ mdelay(1);
++ data32 = mpi->pcmcia_cntl1;
++ if (data32 & 0x00000002) { // CCD2 is tied to CVS1, not valid.
++ printk("mpi: Unknown card plugged into slot\n");
++ } else {// CCD2 is tied to CVS2.
++ printk("mpi: Detected 3.3 and x.x Cardbus card\n");
++ cardtype = MPI_CARDTYPE_CARDBUS;
++ }
++ break;
++
++ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
++ // This is not a valid combination.
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ case 0x00000000: // CCD1 and CCD2 are tied to ground.
++ cardtype = MPI_CARDTYPE_PCMCIA;
++ printk("mpi: Detected 3.3 vdc 16-bit PCMCIA card\n");
++ break;
++ }
++ break;
++
++ case 0x0000000C: // CVS1 and CVS2 are open or tied to CCD1/CCD2.
++ // 5 valid voltage options.
++
++ switch (data32 & 0x00000003) // Test the values of CCD1 and CCD2.
++ {
++ case 0x00000003: // CCD1 and CCD2 are tied to 1 of the CVS pins.
++ // This is not a valid combination.
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ case 0x00000002: // CCD2 is tied to either CVS1 or CVS2.
++ // CCD1 is tied to ground.
++ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
++ mdelay(1);
++ data32 = mpi->pcmcia_cntl1;
++ if (data32 & 0x00000002) { // CCD2 is tied to CVS1.
++ printk("mpi: Detected y.y vdc Cardbus card\n");
++ } else { // CCD2 is tied to CVS2.
++ printk("mpi: Detected x.x vdc Cardbus card\n");
++ }
++ cardtype = MPI_CARDTYPE_CARDBUS;
++ break;
++
++ case 0x00000001: // CCD1 is tied to either CVS1 or CVS2.
++ // CCD2 is tied to ground.
++
++ mpi->pcmcia_cntl1 = 0x0000A040; // Drive CVS2 to a 0.
++ mdelay(1);
++ data32 = mpi->pcmcia_cntl1;
++ if (data32 & 0x00000001) {// CCD1 is tied to CVS1.
++ printk("mpi: Detected 3.3 vdc Cardbus card\n");
++ } else { // CCD1 is tied to CVS2.
++ printk("mpi: Detected x.x and y.y Cardbus card\n");
++ }
++ cardtype = MPI_CARDTYPE_CARDBUS;
++ break;
++
++ case 0x00000000: // CCD1 and CCD2 are tied to ground.
++ cardtype = MPI_CARDTYPE_PCMCIA;
++ printk("mpi: Detected 5 vdc 16-bit PCMCIA card\n");
++ break;
++ }
++ break;
++
++ default:
++ printk("mpi: Unknown card plugged into slot\n");
++ break;
++
++ }
++ }
++ return cardtype;
++}
++
++/*
++ * mpi_DetectPcCard: Detect the plugged in PC-Card
++ * Return: < 0 => Unknown card detected
++ * 0 => No card detected
++ * 1 => 16-bit card detected
++ * 2 => 32-bit CardBus card detected
++ */
++static int mpi_DetectPcCard(void)
++{
++ int cardtype;
++
++ cardtype = cardtype_vcc_detect();
++ switch(cardtype) {
++ case MPI_CARDTYPE_PCMCIA:
++ mpi->pcmcia_cntl1 &= ~0x0000e000; // disable enable bits
++ //mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & ~PCCARD_CARD_RESET);
++ mpi->pcmcia_cntl1 |= (PCMCIA_ENABLE | PCMCIA_GPIO_ENABLE);
++ mpi_InitPcmciaSpace();
++ mpi_ResetPcCard(cardtype, FALSE);
++ // Hold card in reset for 10ms
++ mdelay(10);
++ mpi_ResetPcCard(cardtype, TRUE);
++ // Let card come out of reset
++ mdelay(100);
++ break;
++ case MPI_CARDTYPE_CARDBUS:
++ // 8 => CardBus Enable
++ // 1 => PCI Slot Number
++ // C => Float VS1 & VS2
++ mpi->pcmcia_cntl1 = (mpi->pcmcia_cntl1 & 0xFFFF0000) |
++ CARDBUS_ENABLE |
++ (CARDBUS_SLOT << 8)|
++ VS2_OEN |
++ VS1_OEN;
++ /* access to this memory window will be to/from CardBus */
++ mpi->l2pmremap1 |= CARDBUS_MEM;
++
++ // Need to reset the Cardbus Card. There's no CardManager to do this,
++ // and we need to be ready for PCI configuration.
++ mpi_ResetPcCard(cardtype, FALSE);
++ // Hold card in reset for 10ms
++ mdelay(10);
++ mpi_ResetPcCard(cardtype, TRUE);
++ // Let card come out of reset
++ mdelay(100);
++ break;
++ default:
++ break;
++ }
++ return cardtype;
++}
++
++static int mpi_init(void)
++{
++ unsigned long data;
++ unsigned int chipid;
++ unsigned int chiprev;
++ unsigned int sdramsize;
++
++ chipid = (PERF->RevID & 0xFFFF0000) >> 16;
++ chiprev = (PERF->RevID & 0xFF);
++ sdramsize = getMemorySize();
++ /*
++ * Init the pci interface
++ */
++ data = GPIO->GPIOMode; // GPIO mode register
++ data |= GROUP2_PCI | GROUP1_MII_PCCARD; // PCI internal arbiter + Cardbus
++ GPIO->GPIOMode = data; // PCI internal arbiter
++
++ /*
++ * In the BCM6348 CardBus support is defaulted to Slot 0
++ * because there is no external IDSEL for CardBus. To disable
++ * the CardBus and allow a standard PCI card in Slot 0
++ * set the cbus_idsel field to 0x1f.
++ */
++ /*
++ uData = mpi->pcmcia_cntl1;
++ uData |= CARDBUS_IDSEL;
++ mpi->pcmcia_cntl1 = uData;
++ */
++ // Setup PCI I/O Window range. Give 64K to PCI I/O
++ mpi->l2piorange = ~(BCM_PCI_IO_SIZE_64KB-1);
++ // UBUS to PCI I/O base address
++ mpi->l2piobase = BCM_PCI_IO_BASE & BCM_PCI_ADDR_MASK;
++ // UBUS to PCI I/O Window remap
++ mpi->l2pioremap = (BCM_PCI_IO_BASE | MEM_WINDOW_EN);
++
++ // enable PCI related GPIO pins and data swap between system and PCI bus
++ mpi->locbuscntrl = (EN_PCI_GPIO | DIR_U2P_NOSWAP);
++
++ /* Enable 6348 BusMaster and Memory access mode */
++ data = mpi_GetLocalPciConfigReg(PCI_COMMAND);
++ data |= (PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
++ mpi_SetLocalPciConfigReg(PCI_COMMAND, data);
++
++ /* Configure two 16 MByte PCI to System memory regions. */
++ /* These memory regions are used when PCI device is a bus master */
++ /* Accesses to the SDRAM from PCI bus will be "byte swapped" for this region */
++ mpi_SetLocalPciConfigReg(PCI_BASE_ADDRESS_3, BCM_HOST_MEM_SPACE1);
++ mpi->sp0remap = 0x0;
++
++ /* Accesses to the SDRAM from PCI bus will not be "byte swapped" for this region */
++ mpi_SetLocalPciConfigReg(PCI_BASE_ADDRESS_4, BCM_HOST_MEM_SPACE2);
++ mpi->sp1remap = 0x0;
++ mpi->pcimodesel |= (PCI_BAR2_NOSWAP | 0x40);
++
++ if ((chipid == 0x6348) && (chiprev == 0xb0)) {
++ mpi->sp0range = ~(sdramsize-1);
++ mpi->sp1range = ~(sdramsize-1);
++ }
++ /*
++ * Change 6348 PCI Cfg Reg. offset 0x40 to PCI memory read retry count infinity
++ * by set 0 in bit 8~15. This resolve read Bcm4306 srom return 0xffff in
++ * first read.
++ */
++ data = mpi_GetLocalPciConfigReg(BRCM_PCI_CONFIG_TIMER);
++ data &= ~BRCM_PCI_CONFIG_TIMER_RETRY_MASK;
++ data |= 0x00000080;
++ mpi_SetLocalPciConfigReg(BRCM_PCI_CONFIG_TIMER, data);
++
++ /* enable pci interrupt */
++ mpi->locintstat |= (EXT_PCI_INT << 16);
++
++ mpi_DetectPcCard();
++
++ ioport_resource.start = BCM_PCI_IO_BASE;
++ ioport_resource.end = BCM_PCI_IO_BASE + BCM_PCI_IO_SIZE_64KB;
++
++#if defined(CONFIG_USB)
++ PERF->blkEnables |= USBH_CLK_EN;
++ mdelay(100);
++ *USBH_NON_OHCI = NON_OHCI_BYTE_SWAP;
++#endif
++
++ return 0;
++}
++#endif
++
++static int __init brcm63xx_setup(void)
++{
++ extern int panic_timeout;
++
++ _machine_restart = brcm_machine_restart;
++ _machine_halt = brcm_machine_halt;
++ pm_power_off = brcm_machine_halt;
++
++ board_timer_setup = brcm_timer_setup;
++
++ panic_timeout = 5;
++
++#if defined(CONFIG_BCM96348) && defined(CONFIG_PCI)
++ /* mpi initialization */
++ mpi_init();
++#endif
++ return 0;
++}
++
++void plat_setup(void)
++{
++ brcm63xx_setup();
++}
++
++/***************************************************************************
++ * C++ New and delete operator functions
++ ***************************************************************************/
++
++/* void *operator new(unsigned int sz) */
++void *_Znwj(unsigned int sz)
++{
++ return( kmalloc(sz, GFP_KERNEL) );
++}
++
++/* void *operator new[](unsigned int sz)*/
++void *_Znaj(unsigned int sz)
++{
++ return( kmalloc(sz, GFP_KERNEL) );
++}
++
++/* placement new operator */
++/* void *operator new (unsigned int size, void *ptr) */
++void *ZnwjPv(unsigned int size, void *ptr)
++{
++ return ptr;
++}
++
++/* void operator delete(void *m) */
++void _ZdlPv(void *m)
++{
++ kfree(m);
++}
++
++/* void operator delete[](void *m) */
++void _ZdaPv(void *m)
++{
++ kfree(m);
++}
++
++EXPORT_SYMBOL(_Znwj);
++EXPORT_SYMBOL(_Znaj);
++EXPORT_SYMBOL(ZnwjPv);
++EXPORT_SYMBOL(_ZdlPv);
++EXPORT_SYMBOL(_ZdaPv);
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/softdsl/AdslCoreDefs.h linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/softdsl/AdslCoreDefs.h
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/softdsl/AdslCoreDefs.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/softdsl/AdslCoreDefs.h 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,2 @@
++#define ADSL_SDRAM_IMAGE_SIZE (384*1024)
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/time.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/time.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/bcm963xx/time.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/bcm963xx/time.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,277 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * Setup time for Broadcom 963xx MIPS boards
++ */
++
++#include <linux/config.h>
++#include <linux/init.h>
++#include <linux/kernel_stat.h>
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/interrupt.h>
++#include <linux/module.h>
++#include <linux/time.h>
++#include <linux/timex.h>
++
++#include <asm/mipsregs.h>
++#include <asm/ptrace.h>
++#include <asm/div64.h>
++#include <asm/time.h>
++
++#include <bcm_map_part.h>
++#include <bcm_intr.h>
++
++unsigned long r4k_interval; /* Amount to increment compare reg each time */
++static unsigned long r4k_cur; /* What counter should be at next timer irq */
++
++/* Cycle counter value at the previous timer interrupt.. */
++static unsigned int timerhi = 0, timerlo = 0;
++
++extern volatile unsigned long wall_jiffies;
++
++/* Optional board-specific timer routine */
++void (*board_timer_interrupt)(int irq, void *dev_id, struct pt_regs * regs);
++
++static inline void ack_r4ktimer(unsigned long newval)
++{
++ write_c0_compare(newval);
++}
++
++/*
++ * There are a lot of conceptually broken versions of the MIPS timer interrupt
++ * handler floating around. This one is rather different, but the algorithm
++ * is provably more robust.
++ */
++static irqreturn_t brcm_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned int count;
++
++ if (r4k_interval == 0)
++ goto null;
++
++ do {
++ do_timer(regs);
++
++ if (board_timer_interrupt)
++ board_timer_interrupt(irq, dev_id, regs);
++
++ r4k_cur += r4k_interval;
++ ack_r4ktimer(r4k_cur);
++
++ } while (((count = (unsigned long)read_c0_count())
++ - r4k_cur) < 0x7fffffff);
++
++ if (!jiffies) {
++ /*
++ * If jiffies has overflowed in this timer_interrupt we must
++ * update the timer[hi]/[lo] to make do_fast_gettimeoffset()
++ * quotient calc still valid. -arca
++ */
++ timerhi = timerlo = 0;
++ } else {
++ /*
++ * The cycle counter is only 32 bit which is good for about
++ * a minute at current count rates of upto 150MHz or so.
++ */
++ timerhi += (count < timerlo); /* Wrap around */
++ timerlo = count;
++ }
++
++ return IRQ_HANDLED;
++
++null:
++ ack_r4ktimer(0);
++ return IRQ_NONE;
++}
++
++static struct irqaction brcm_timer_action = {
++ .handler = brcm_timer_interrupt,
++ .flags = SA_INTERRUPT,
++ .mask = CPU_MASK_NONE,
++ .name = "timer",
++ .next = NULL,
++ .dev_id = brcm_timer_interrupt,
++};
++
++
++void __init brcm_timer_setup(struct irqaction *irq)
++{
++ r4k_cur = (read_c0_count() + r4k_interval);
++ write_c0_compare(r4k_cur);
++
++ /* we are using the cpu counter for timer interrupts */
++ irq->handler = no_action; /* we use our own handler */
++ setup_irq(MIPS_TIMER_INT, &brcm_timer_action);
++ set_c0_status(IE_IRQ5);
++}
++
++#if 0
++/* This is for machines which generate the exact clock. */
++#define USECS_PER_JIFFY (1000000/HZ)
++#define USECS_PER_JIFFY_FRAC (0x100000000*1000000/HZ&0xffffffff)
++
++static void call_do_div64_32( unsigned long *res, unsigned int high,
++ unsigned int low, unsigned long base )
++{
++ do_div64_32(*res, high, low, base);
++}
++
++/*
++ * FIXME: Does playing with the RP bit in c0_status interfere with this code?
++ */
++static unsigned long do_fast_gettimeoffset(void)
++{
++ u32 count;
++ unsigned long res, tmp;
++
++ /* Last jiffy when do_fast_gettimeoffset() was called. */
++ static unsigned long last_jiffies=0;
++ unsigned long quotient;
++
++ /*
++ * Cached "1/(clocks per usec)*2^32" value.
++ * It has to be recalculated once each jiffy.
++ */
++ static unsigned long cached_quotient=0;
++
++ tmp = jiffies;
++
++ quotient = cached_quotient;
++
++ if (tmp && last_jiffies != tmp) {
++ last_jiffies = tmp;
++#ifdef CONFIG_CPU_MIPS32
++ if (last_jiffies != 0) {
++
++ unsigned long r0;
++ /* gcc 3.0.1 gets an internal compiler error if there are two
++ * do_div64_32 inline macros. To work around this problem,
++ * do_div64_32 is called as a function.
++ */
++ call_do_div64_32(&r0, timerhi, timerlo, tmp);
++ call_do_div64_32(&quotient, USECS_PER_JIFFY,
++ USECS_PER_JIFFY_FRAC, r0);
++
++ cached_quotient = quotient;
++
++ }
++#else
++ __asm__(".set\tnoreorder\n\t"
++ ".set\tnoat\n\t"
++ ".set\tmips3\n\t"
++ "lwu\t%0,%2\n\t"
++ "dsll32\t$1,%1,0\n\t"
++ "or\t$1,$1,%0\n\t"
++ "ddivu\t$0,$1,%3\n\t"
++ "mflo\t$1\n\t"
++ "dsll32\t%0,%4,0\n\t"
++ "nop\n\t"
++ "ddivu\t$0,%0,$1\n\t"
++ "mflo\t%0\n\t"
++ ".set\tmips0\n\t"
++ ".set\tat\n\t"
++ ".set\treorder"
++ :"=&r" (quotient)
++ :"r" (timerhi),
++ "m" (timerlo),
++ "r" (tmp),
++ "r" (USECS_PER_JIFFY)
++ :"$1");
++ cached_quotient = quotient;
++#endif
++ }
++
++ /* Get last timer tick in absolute kernel time */
++ count = read_c0_count();
++
++ /* .. relative to previous jiffy (32 bits is enough) */
++ count -= timerlo;
++
++ __asm__("multu\t%1,%2\n\t"
++ "mfhi\t%0"
++ :"=r" (res)
++ :"r" (count),
++ "r" (quotient));
++
++ /*
++ * Due to possible jiffies inconsistencies, we need to check
++ * the result so that we'll get a timer that is monotonic.
++ */
++ if (res >= USECS_PER_JIFFY)
++ res = USECS_PER_JIFFY-1;
++
++ return res;
++}
++
++void do_gettimeofday(struct timeval *tv)
++{
++ unsigned int flags;
++
++ read_lock_irqsave (&xtime_lock, flags);
++ tv->tv_sec = xtime.tv_sec;
++ tv->tv_usec = xtime.tv_nsec/1000;
++ tv->tv_usec += do_fast_gettimeoffset();
++
++ /*
++ * xtime is atomically updated in timer_bh. jiffies - wall_jiffies
++ * is nonzero if the timer bottom half hasnt executed yet.
++ */
++ if (jiffies - wall_jiffies)
++ tv->tv_usec += USECS_PER_JIFFY;
++
++ read_unlock_irqrestore (&xtime_lock, flags);
++
++ if (tv->tv_usec >= 1000000) {
++ tv->tv_usec -= 1000000;
++ tv->tv_sec++;
++ }
++}
++
++EXPORT_SYMBOL(do_gettimeofday);
++
++int do_settimeofday(struct timespec *tv)
++{
++ write_lock_irq (&xtime_lock);
++
++ /* This is revolting. We need to set the xtime.tv_usec correctly.
++ * However, the value in this location is is value at the last tick.
++ * Discover what correction gettimeofday would have done, and then
++ * undo it!
++ */
++ tv->tv_nsec -= do_fast_gettimeoffset()*NSEC_PER_USEC;
++
++ if (tv->tv_nsec < 0) {
++ tv->tv_nsec += 1000000*NSEC_PER_USEC;
++ tv->tv_sec--;
++ }
++
++ xtime.tv_sec = tv->tv_sec;
++ xtime.tv_nsec = tv->tv_nsec;
++ time_adjust = 0; /* stop active adjtime() */
++ time_status |= STA_UNSYNC;
++ time_maxerror = NTP_PHASE_LIMIT;
++ time_esterror = NTP_PHASE_LIMIT;
++
++ write_unlock_irq (&xtime_lock);
++}
++
++EXPORT_SYMBOL(do_settimeofday);
++
++#endif
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/generic/dbg_io.c linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/dbg_io.c
+--- linux-2.6.16.7/arch/mips/brcm-boards/generic/dbg_io.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/dbg_io.c 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,260 @@
++/*
++<:copyright-gpl
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#include <linux/config.h>
++#include <linux/tty.h>
++#include <linux/major.h>
++#include <linux/init.h>
++#include <linux/console.h>
++#include <linux/fs.h>
++#include <linux/interrupt.h>
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/sched.h>
++
++#include <bcm_map_part.h>
++
++#undef PRNT /* define for debug printing */
++
++#define UART16550_BAUD_2400 2400
++#define UART16550_BAUD_4800 4800
++#define UART16550_BAUD_9600 9600
++#define UART16550_BAUD_19200 19200
++#define UART16550_BAUD_38400 38400
++#define UART16550_BAUD_57600 57600
++#define UART16550_BAUD_115200 115200
++
++#define UART16550_PARITY_NONE 0
++#define UART16550_PARITY_ODD 0x08
++#define UART16550_PARITY_EVEN 0x18
++#define UART16550_PARITY_MARK 0x28
++#define UART16550_PARITY_SPACE 0x38
++
++#define UART16550_DATA_5BIT 0x0
++#define UART16550_DATA_6BIT 0x1
++#define UART16550_DATA_7BIT 0x2
++#define UART16550_DATA_8BIT 0x3
++
++#define UART16550_STOP_1BIT 0x0
++#define UART16550_STOP_2BIT 0x4
++
++volatile Uart * stUart = UART_BASE;
++
++#define WRITE16(addr, value) ((*(volatile UINT16 *)((ULONG)&addr)) = value)
++
++/* Low level UART routines from promcon.c */
++extern void prom_putc(char c);
++extern char prom_getc(void);
++extern int prom_getc_nowait(void);
++extern int prom_testc(void);
++
++extern void set_debug_traps(void);
++extern void breakpoint(void);
++extern void enable_brcm_irq(unsigned int);
++extern void set_async_breakpoint(unsigned int epc);
++
++#ifdef CONFIG_GDB_CONSOLE
++extern void register_gdb_console(void);
++#endif
++
++int gdb_initialized = 0;
++
++#define GDB_BUF_SIZE 512 /* power of 2, please */
++
++static char gdb_buf[GDB_BUF_SIZE] ;
++static int gdb_buf_in_inx ;
++static atomic_t gdb_buf_in_cnt ;
++static int gdb_buf_out_inx ;
++
++void debugInit(uint32 baud, uint8 data, uint8 parity, uint8 stop)
++{
++ /* Do nothing, assume boot loader has already set up serial port */
++ printk("debugInit called\n");
++}
++
++/*
++ * Get a char if available, return -1 if nothing available.
++ * Empty the receive buffer first, then look at the interface hardware.
++ */
++static int read_char(void)
++{
++ if (atomic_read(&gdb_buf_in_cnt) != 0) /* intr routine has q'd chars */
++ {
++ int chr ;
++
++ chr = gdb_buf[gdb_buf_out_inx++] ;
++ gdb_buf_out_inx &= (GDB_BUF_SIZE - 1) ;
++ atomic_dec(&gdb_buf_in_cnt) ;
++ return(chr) ;
++ }
++ return(prom_getc_nowait()) ; /* read from hardware */
++} /* read_char */
++
++/*
++ * This is the receiver interrupt routine for the GDB stub.
++ * It will receive a limited number of characters of input
++ * from the gdb host machine and save them up in a buffer.
++ *
++ * When the gdb stub routine getDebugChar() is called it
++ * draws characters out of the buffer until it is empty and
++ * then reads directly from the serial port.
++ *
++ * We do not attempt to write chars from the interrupt routine
++ * since the stubs do all of that via putDebugChar() which
++ * writes one byte after waiting for the interface to become
++ * ready.
++ *
++ * The debug stubs like to run with interrupts disabled since,
++ * after all, they run as a consequence of a breakpoint in
++ * the kernel.
++ *
++ * Perhaps someone who knows more about the tty driver than I
++ * care to learn can make this work for any low level serial
++ * driver.
++ */
++static void gdb_interrupt(int irq, void *dev_id, struct pt_regs * regs)
++{
++ int chr ;
++ int more;
++ do
++ {
++ chr = prom_getc_nowait() ;
++ more = prom_testc();
++ if (chr < 0) continue ;
++
++ /* If we receive a Ctrl-C then this is GDB trying to break in */
++ if (chr == 3)
++ {
++ /* Replace current instruction with breakpoint */
++ set_async_breakpoint(regs->cp0_epc);
++ //breakpoint();
++ }
++
++#ifdef PRNT
++ printk("gdb_interrupt: chr=%02x '%c', more = %x\n",
++ chr, chr > ' ' && chr < 0x7F ? chr : ' ', more) ;
++#endif
++
++ if (atomic_read(&gdb_buf_in_cnt) >= GDB_BUF_SIZE)
++ { /* buffer overflow, clear it */
++ gdb_buf_in_inx = 0 ;
++ atomic_set(&gdb_buf_in_cnt, 0) ;
++ gdb_buf_out_inx = 0 ;
++ break ;
++ }
++
++ gdb_buf[gdb_buf_in_inx++] = chr ;
++ gdb_buf_in_inx &= (GDB_BUF_SIZE - 1) ;
++ atomic_inc(&gdb_buf_in_cnt) ;
++ }
++ while (more !=0);
++
++} /* gdb_interrupt */
++
++/*
++ * getDebugChar
++ *
++ * This is a GDB stub routine. It waits for a character from the
++ * serial interface and then returns it. If there is no serial
++ * interface connection then it returns a bogus value which will
++ * almost certainly cause the system to hang.
++ */
++int getDebugChar(void)
++{
++ volatile int chr ;
++
++#ifdef PRNT
++ printk("getDebugChar: ") ;
++#endif
++
++ while ( (chr = read_char()) < 0 ) ;
++
++#ifdef PRNT
++ printk("%c\n", chr > ' ' && chr < 0x7F ? chr : ' ') ;
++#endif
++ return(chr) ;
++
++} /* getDebugChar */
++
++/*
++ * putDebugChar
++ *
++ * This is a GDB stub routine. It waits until the interface is ready
++ * to transmit a char and then sends it. If there is no serial
++ * interface connection then it simply returns to its caller, having
++ * pretended to send the char.
++ */
++int putDebugChar(unsigned char chr)
++{
++#ifdef PRNT
++ printk("putDebugChar: chr=%02x '%c'\n", chr,
++ chr > ' ' && chr < 0x7F ? chr : ' ') ;
++#endif
++
++ prom_putc(chr) ; /* this routine will wait */
++ return 1;
++
++} /* putDebugChar */
++
++/* Just a NULL routine for testing. */
++void gdb_null(void)
++{
++}
++
++void rs_kgdb_hook(int tty_no)
++{
++ printk("rs_kgdb_hook: tty %d\n", tty_no);
++
++ /* Call GDB routine to setup the exception vectors for the debugger */
++ set_debug_traps();
++
++ printk("Breaking into debugger...\n");
++ breakpoint();
++ gdb_null() ;
++ printk("Connected.\n");
++
++ gdb_initialized = 1;
++
++#ifdef CONFIG_GDB_CONSOLE
++ register_gdb_console();
++#endif
++}
++
++void kgdb_hook_irq()
++{
++ int retval ;
++ uint16 uMask;
++
++ printk("GDB: Hooking UART interrupt\n");
++
++ retval = request_irq(INTERRUPT_ID_UART,
++ gdb_interrupt,
++ SA_INTERRUPT,
++ "GDB-stub", NULL);
++
++ if (retval != 0)
++ printk("gdb_hook: request_irq(irq=%d) failed: %d\n", INTERRUPT_ID_UART, retval);
++
++ // Enable UART config Rx not empty IRQ
++ uMask = READ16(stUart->intMask) ;
++ // printk("intMask: 0x%x\n", uMask);
++ WRITE16(stUart->intMask, uMask | RXFIFONE);
++}
++
++
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/generic/int-handler.S linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/int-handler.S
+--- linux-2.6.16.7/arch/mips/brcm-boards/generic/int-handler.S 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/int-handler.S 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/*
++ * Generic interrupt handler for Broadcom MIPS boards
++ */
++
++#include <linux/config.h>
++
++#include <asm/asm.h>
++#include <asm/mipsregs.h>
++#include <asm/regdef.h>
++#include <asm/stackframe.h>
++
++/*
++ * MIPS IRQ Source
++ * -------- ------
++ * 0 Software (ignored)
++ * 1 Software (ignored)
++ * 2 Combined hardware interrupt (hw0)
++ * 3 Hardware
++ * 4 Hardware
++ * 5 Hardware
++ * 6 Hardware
++ * 7 R4k timer
++ */
++
++ .text
++ .set noreorder
++ .set noat
++ .align 5
++ NESTED(brcmIRQ, PT_SIZE, sp)
++ SAVE_ALL
++ CLI
++ .set noreorder
++ .set at
++
++ jal brcm_irq_dispatch
++ move a0, sp
++
++ j ret_from_irq
++ nop
++
++ END(brcmIRQ)
+diff -urN linux-2.6.16.7/arch/mips/brcm-boards/generic/Makefile linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/Makefile
+--- linux-2.6.16.7/arch/mips/brcm-boards/generic/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/arch/mips/brcm-boards/generic/Makefile 2006-07-07 22:15:18.000000000 +0200
+@@ -0,0 +1,11 @@
++#
++# Makefile for generic Broadcom MIPS boards
++#
++# Copyright (C) 2001 Broadcom Corporation
++#
++obj-y := int-handler.o
++
++ifdef CONFIG_REMOTE_DEBUG
++obj-y += dbg_io.o
++endif
++
diff --git a/target/linux/brcm63xx-2.6/patches/002-pci_bcm96348.patch b/target/linux/brcm63xx-2.6/patches/002-pci_bcm96348.patch
new file mode 100644
index 0000000000..7d0936cb83
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/002-pci_bcm96348.patch
@@ -0,0 +1,438 @@
+diff -Naurp linux-2.6.16.7-generic-patched/arch/mips/pci/Makefile linux-2.6.16.7-patched/arch/mips/pci/Makefile
+--- linux-2.6.16.7-generic-patched/arch/mips/pci/Makefile 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/arch/mips/pci/Makefile 2006-07-05 15:21:58.000000000 +0200
+@@ -18,6 +18,7 @@ obj-$(CONFIG_MIPS_NILE4) += ops-nile4.o
+ obj-$(CONFIG_MIPS_TX3927) += ops-tx3927.o
+ obj-$(CONFIG_PCI_VR41XX) += ops-vr41xx.o pci-vr41xx.o
+ obj-$(CONFIG_NEC_CMBVR4133) += fixup-vr4133.o
++obj-$(CONFIG_BCM_PCI) += fixup-bcm96348.o pci-bcm96348.o ops-bcm96348.o
+
+ #
+ # These are still pretty much in the old state, watch, go blind.
+diff -Naurp linux-2.6.16.7-generic-patched/arch/mips/pci/fixup-bcm96348.c linux-2.6.16.7-patched/arch/mips/pci/fixup-bcm96348.c
+--- linux-2.6.16.7-generic-patched/arch/mips/pci/fixup-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/arch/mips/pci/fixup-bcm96348.c 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,85 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++#include <linux/init.h>
++#include <linux/types.h>
++#include <linux/pci.h>
++
++#include <bcmpci.h>
++#include <bcm_intr.h>
++#include <bcm_map_part.h>
++
++static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
++
++static char irq_tab_bcm96348[] __initdata = {
++ [0] = INTERRUPT_ID_MPI,
++ [1] = INTERRUPT_ID_MPI,
++#if defined(CONFIG_USB)
++ [USB_HOST_SLOT] = INTERRUPT_ID_USBH
++#endif
++};
++
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++ return irq_tab_bcm96348[slot];
++}
++
++static void bcm96348_fixup(struct pci_dev *dev)
++{
++ uint32 memaddr;
++ uint32 size;
++
++ memaddr = pci_resource_start(dev, 0);
++ size = pci_resource_len(dev, 0);
++
++ switch (PCI_SLOT(dev->devfn)) {
++ case 0:
++ // UBUS to PCI address range
++ // Memory Window 1. Mask determines which bits are decoded.
++ mpi->l2pmrange1 = ~(size-1);
++ // UBUS to PCI Memory base address. This is akin to the ChipSelect base
++ // register.
++ mpi->l2pmbase1 = memaddr & BCM_PCI_ADDR_MASK;
++ // UBUS to PCI Remap Address. Replaces the masked address bits in the
++ // range register with this setting.
++ // Also, enable direct I/O and direct Memory accesses
++ mpi->l2pmremap1 = (memaddr | MEM_WINDOW_EN);
++ break;
++
++ case 1:
++ // Memory Window 2
++ mpi->l2pmrange2 = ~(size-1);
++ // UBUS to PCI Memory base address.
++ mpi->l2pmbase2 = memaddr & BCM_PCI_ADDR_MASK;
++ // UBUS to PCI Remap Address
++ mpi->l2pmremap2 = (memaddr | MEM_WINDOW_EN);
++ break;
++
++#if defined(CONFIG_USB)
++ case USB_HOST_SLOT:
++ dev->resource[0].start = USB_HOST_BASE;
++ dev->resource[0].end = USB_HOST_BASE+USB_BAR0_MEM_SIZE-1;
++ break;
++#endif
++ }
++}
++
++struct pci_fixup pcibios_fixups[] = {
++ { PCI_FIXUP_FINAL, PCI_ANY_ID, PCI_ANY_ID, bcm96348_fixup },
++ {0}
++};
+diff -Naurp linux-2.6.16.7-generic-patched/arch/mips/pci/ops-bcm96348.c linux-2.6.16.7-patched/arch/mips/pci/ops-bcm96348.c
+--- linux-2.6.16.7-generic-patched/arch/mips/pci/ops-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/arch/mips/pci/ops-bcm96348.c 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,276 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++#include <linux/types.h>
++#include <linux/pci.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <asm/addrspace.h>
++
++#include <bcm_intr.h>
++#include <bcm_map_part.h>
++#include <bcmpci.h>
++
++#include <linux/delay.h>
++
++#if defined(CONFIG_USB)
++#if 0
++#define DPRINT(x...) printk(x)
++#else
++#define DPRINT(x...)
++#endif
++
++static int
++pci63xx_int_read(unsigned int devfn, int where, u32 * value, int size);
++static int
++pci63xx_int_write(unsigned int devfn, int where, u32 * value, int size);
++
++static bool usb_mem_size_rd = FALSE;
++static uint32 usb_mem_base = 0;
++static uint32 usb_cfg_space_cmd_reg = 0;
++#endif
++static bool pci_mem_size_rd = FALSE;
++
++static volatile MpiRegisters * mpi = (MpiRegisters *)(MPI_BASE);
++
++static void mpi_SetupPciConfigAccess(uint32 addr)
++{
++ mpi->l2pcfgctl = (DIR_CFG_SEL | DIR_CFG_USEREG | addr) & ~CONFIG_TYPE;
++}
++
++static void mpi_ClearPciConfigAccess(void)
++{
++ mpi->l2pcfgctl = 0x00000000;
++}
++
++#if defined(CONFIG_USB)
++/* --------------------------------------------------------------------------
++ Name: pci63xx_int_write
++Abstract: PCI Config write on internal device(s)
++ -------------------------------------------------------------------------- */
++static int
++pci63xx_int_write(unsigned int devfn, int where, u32 * value, int size)
++{
++ if (PCI_SLOT(devfn) != USB_HOST_SLOT) {
++ return PCIBIOS_SUCCESSFUL;
++ }
++
++ switch (size) {
++ case 1:
++ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %02X\n",
++ PCI_SLOT(devfn), where, size, *value);
++ break;
++ case 2:
++ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %04X\n",
++ PCI_SLOT(devfn), where, size, *value);
++ switch (where) {
++ case PCI_COMMAND:
++ usb_cfg_space_cmd_reg = *value;
++ break;
++ default:
++ break;
++ }
++ break;
++ case 4:
++ DPRINT("W => Slot: %d Where: %2X Len: %d Data: %08lX\n",
++ PCI_SLOT(devfn), where, size, *value);
++ switch (where) {
++ case PCI_BASE_ADDRESS_0:
++ if (*value == 0xffffffff) {
++ usb_mem_size_rd = TRUE;
++ } else {
++ usb_mem_base = *value;
++ }
++ break;
++ default:
++ break;
++ }
++ break;
++ default:
++ break;
++ }
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++/* --------------------------------------------------------------------------
++ Name: pci63xx_int_read
++Abstract: PCI Config read on internal device(s)
++ -------------------------------------------------------------------------- */
++static int
++pci63xx_int_read(unsigned int devfn, int where, u32 * value, int size)
++{
++ uint32 retValue = 0xFFFFFFFF;
++
++ if (PCI_SLOT(devfn) != USB_HOST_SLOT) {
++ return PCIBIOS_SUCCESSFUL;
++ }
++
++ // For now, this is specific to the USB Host controller. We can
++ // make it more general if we have to...
++ // Emulate PCI Config accesses
++ switch (where) {
++ case PCI_VENDOR_ID:
++ case PCI_DEVICE_ID:
++ retValue = PCI_VENDOR_ID_BROADCOM | 0x63000000;
++ break;
++ case PCI_COMMAND:
++ case PCI_STATUS:
++ retValue = (0x0006 << 16) | usb_cfg_space_cmd_reg;
++ break;
++ case PCI_CLASS_REVISION:
++ case PCI_CLASS_DEVICE:
++ retValue = (PCI_CLASS_SERIAL_USB << 16) | (0x10 << 8) | 0x01;
++ break;
++ case PCI_BASE_ADDRESS_0:
++ if (usb_mem_size_rd) {
++ retValue = USB_BAR0_MEM_SIZE;
++ } else {
++ if (usb_mem_base != 0)
++ retValue = usb_mem_base;
++ else
++ retValue = USB_HOST_BASE;
++ }
++ usb_mem_size_rd = FALSE;
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ case PCI_LATENCY_TIMER:
++ retValue = 0;
++ break;
++ case PCI_HEADER_TYPE:
++ retValue = PCI_HEADER_TYPE_NORMAL;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ retValue = PCI_VENDOR_ID_BROADCOM;
++ break;
++ case PCI_SUBSYSTEM_ID:
++ retValue = 0x6300;
++ break;
++ case PCI_INTERRUPT_LINE:
++ retValue = INTERRUPT_ID_USBH;
++ break;
++ default:
++ break;
++ }
++
++ switch (size) {
++ case 1:
++ *value = (retValue >> ((where & 3) << 3)) & 0xff;
++ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %02X\n",
++ PCI_SLOT(devfn), where, size, *value);
++ break;
++ case 2:
++ *value = (retValue >> ((where & 3) << 3)) & 0xffff;
++ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %04X\n",
++ PCI_SLOT(devfn), where, size, *value);
++ break;
++ case 4:
++ *value = retValue;
++ DPRINT("R <= Slot: %d Where: %2X Len: %d Data: %08lX\n",
++ PCI_SLOT(devfn), where, size, *value);
++ break;
++ default:
++ break;
++ }
++
++ return PCIBIOS_SUCCESSFUL;
++}
++#endif
++
++static int bcm96348_pcibios_read(struct pci_bus *bus, unsigned int devfn,
++ int where, int size, u32 * val)
++{
++ volatile unsigned char *ioBase = (unsigned char *)(mpi->l2piobase | KSEG1);
++ uint32 data;
++
++#if defined(CONFIG_USB)
++ if (PCI_SLOT(devfn) == USB_HOST_SLOT)
++ return pci63xx_int_read(devfn, where, val, size);
++#endif
++
++ mpi_SetupPciConfigAccess(BCM_PCI_CFG(PCI_SLOT(devfn), PCI_FUNC(devfn), where));
++ data = *(uint32 *)ioBase;
++ switch(size) {
++ case 1:
++ *val = (data >> ((where & 3) << 3)) & 0xff;
++ break;
++ case 2:
++ *val = (data >> ((where & 3) << 3)) & 0xffff;
++ break;
++ case 4:
++ *val = data;
++ /* Special case for reading PCI device range */
++ if ((where >= PCI_BASE_ADDRESS_0) && (where <= PCI_BASE_ADDRESS_5)) {
++ if (pci_mem_size_rd) {
++ /* bcm6348 PCI memory window minimum size is 64K */
++ *val &= PCI_SIZE_64K;
++ }
++ }
++ break;
++ default:
++ break;
++ }
++ pci_mem_size_rd = FALSE;
++ mpi_ClearPciConfigAccess();
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static int bcm96348_pcibios_write(struct pci_bus *bus, unsigned int devfn,
++ int where, int size, u32 val)
++{
++ volatile unsigned char *ioBase = (unsigned char *)(mpi->l2piobase | KSEG1);
++ uint32 data;
++
++#if defined(CONFIG_USB)
++ if (PCI_SLOT(devfn) == USB_HOST_SLOT)
++ return pci63xx_int_write(devfn, where, &val, size);
++#endif
++ mpi_SetupPciConfigAccess(BCM_PCI_CFG(PCI_SLOT(devfn), PCI_FUNC(devfn), where));
++ data = *(uint32 *)ioBase;
++ switch(size) {
++ case 1:
++ data = (data & ~(0xff << ((where & 3) << 3))) |
++ (val << ((where & 3) << 3));
++ break;
++ case 2:
++ data = (data & ~(0xffff << ((where & 3) << 3))) |
++ (val << ((where & 3) << 3));
++ break;
++ case 4:
++ data = val;
++ /* Special case for reading PCI device range */
++ if ((where >= PCI_BASE_ADDRESS_0) && (where <= PCI_BASE_ADDRESS_5)) {
++ if (val == 0xffffffff)
++ pci_mem_size_rd = TRUE;
++ }
++ break;
++ default:
++ break;
++ }
++ *(uint32 *)ioBase = data;
++ udelay(500);
++ mpi_ClearPciConfigAccess();
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++struct pci_ops bcm96348_pci_ops = {
++ .read = bcm96348_pcibios_read,
++ .write = bcm96348_pcibios_write
++};
+diff -Naurp linux-2.6.16.7-generic-patched/arch/mips/pci/pci-bcm96348.c linux-2.6.16.7-patched/arch/mips/pci/pci-bcm96348.c
+--- linux-2.6.16.7-generic-patched/arch/mips/pci/pci-bcm96348.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/arch/mips/pci/pci-bcm96348.c 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,54 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++#include <linux/types.h>
++#include <linux/pci.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++
++#include <asm/pci_channel.h>
++#include <bcmpci.h>
++
++static struct resource bcm_pci_io_resource = {
++ .name = "bcm96348 pci IO space",
++ .start = BCM_PCI_IO_BASE,
++ .end = BCM_PCI_IO_BASE + BCM_PCI_IO_SIZE_64KB - 1,
++ .flags = IORESOURCE_IO
++};
++
++static struct resource bcm_pci_mem_resource = {
++ .name = "bcm96348 pci memory space",
++ .start = BCM_PCI_MEM_BASE,
++ .end = BCM_PCI_MEM_BASE + BCM_PCI_MEM_SIZE_16MB - 1,
++ .flags = IORESOURCE_MEM
++};
++
++extern struct pci_ops bcm96348_pci_ops;
++
++struct pci_controller bcm96348_controller = {
++ .pci_ops = &bcm96348_pci_ops,
++ .io_resource = &bcm_pci_io_resource,
++ .mem_resource = &bcm_pci_mem_resource,
++};
++
++static void bcm96348_pci_init(void)
++{
++ register_pci_controller(&bcm96348_controller);
++}
++
++arch_initcall(bcm96348_pci_init);
diff --git a/target/linux/brcm63xx-2.6/patches/010-include_asm_mips.patch b/target/linux/brcm63xx-2.6/patches/010-include_asm_mips.patch
new file mode 100644
index 0000000000..e413acff8a
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/010-include_asm_mips.patch
@@ -0,0 +1,77 @@
+diff -Naurp -x mach-bcm963xx linux-2.6.16.7-generic-patched/include/asm-mips/bootinfo.h linux-2.6.16.7-patched/include/asm-mips/bootinfo.h
+--- linux-2.6.16.7-generic-patched/include/asm-mips/bootinfo.h 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/include/asm-mips/bootinfo.h 2006-07-05 15:21:58.000000000 +0200
+@@ -218,6 +218,15 @@
+ #define MACH_GROUP_TITAN 22 /* PMC-Sierra Titan */
+ #define MACH_TITAN_YOSEMITE 1 /* PMC-Sierra Yosemite */
+
++/*
++ * Valid machtype for group BRCM
++ */
++#define MACH_GROUP_BRCM 23 /* Broadcom boards */
++#define MACH_BCM96338 0
++#define MACH_BCM96345 1
++#define MACH_BCM96348 2
++
++
+ #define CL_SIZE COMMAND_LINE_SIZE
+
+ const char *get_system_type(void);
+diff -Naurp -x mach-bcm963xx linux-2.6.16.7-generic-patched/include/asm-mips/cpu.h linux-2.6.16.7-patched/include/asm-mips/cpu.h
+--- linux-2.6.16.7-generic-patched/include/asm-mips/cpu.h 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/include/asm-mips/cpu.h 2006-07-05 15:21:58.000000000 +0200
+@@ -102,6 +102,15 @@
+ #define PRID_IMP_SR71000 0x0400
+
+ /*
++ * These are the PRID's for when 23:16 == PRID_COMP_BROADCOM
++ */
++
++#define PRID_IMP_BCM6338 0x9000
++#define PRID_IMP_BCM6345 0x8000
++#define PRID_IMP_BCM6348 0x9100
++
++
++/*
+ * Definitions for 7:0 on legacy processors
+ */
+
+@@ -196,7 +205,10 @@
+ #define CPU_34K 60
+ #define CPU_PR4450 61
+ #define CPU_SB1A 62
+-#define CPU_LAST 62
++#define CPU_BCM6338 63
++#define CPU_BCM6345 64
++#define CPU_BCM6348 65
++#define CPU_LAST 65
+
+ /*
+ * ISA Level encodings
+diff -Naurp -x mach-bcm963xx linux-2.6.16.7-generic-patched/include/asm-mips/mach-generic/param.h linux-2.6.16.7-patched/include/asm-mips/mach-generic/param.h
+--- linux-2.6.16.7-generic-patched/include/asm-mips/mach-generic/param.h 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/include/asm-mips/mach-generic/param.h 2006-07-05 15:21:58.000000000 +0200
+@@ -8,6 +8,6 @@
+ #ifndef __ASM_MACH_GENERIC_PARAM_H
+ #define __ASM_MACH_GENERIC_PARAM_H
+
+-#define HZ 1000 /* Internal kernel timer frequency */
++#define HZ 200 /* Internal kernel timer frequency */
+
+ #endif /* __ASM_MACH_GENERIC_PARAM_H */
+diff -Naurp -x mach-bcm963xx linux-2.6.16.7-generic-patched/include/asm-mips/module.h linux-2.6.16.7-patched/include/asm-mips/module.h
+--- linux-2.6.16.7-generic-patched/include/asm-mips/module.h 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/include/asm-mips/module.h 2006-07-05 15:21:58.000000000 +0200
+@@ -113,6 +113,12 @@ search_module_dbetables(unsigned long ad
+ #define MODULE_PROC_FAMILY "RM9000 "
+ #elif defined CONFIG_CPU_SB1
+ #define MODULE_PROC_FAMILY "SB1 "
++#elif defined CONFIG_CPU_BCM6338
++#define MODULE_PROC_FAMILY "BCM6338 "
++#elif defined CONFIG_CPU_BCM6345
++#define MODULE_PROC_FAMILY "BCM6345 "
++#elif defined CONFIG_CPU_BCM6348
++#define MODULE_PROC_FAMILY "BCM6348 "
+ #else
+ #error MODULE_PROC_FAMILY undefined for your processor configuration
+ #endif
diff --git a/target/linux/brcm63xx-2.6/patches/011-include_mach_bcm963xx.patch b/target/linux/brcm63xx-2.6/patches/011-include_mach_bcm963xx.patch
new file mode 100644
index 0000000000..ad0cbbba56
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/011-include_mach_bcm963xx.patch
@@ -0,0 +1,40 @@
+diff -Naurp linux-2.6.16.7-generic-patched/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h linux-2.6.16.7-patched/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h
+--- linux-2.6.16.7-generic-patched/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/include/asm-mips/mach-bcm963xx/cpu-feature-overrides.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,36 @@
++#ifndef __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H
++#define __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H
++
++#define cpu_has_tlb 1
++#define cpu_has_4kex 4
++#define cpu_has_4ktlb 8
++#define cpu_has_fpu 0
++#define cpu_has_32fpr 0
++#define cpu_has_counter 0x40
++#define cpu_has_watch 0
++#define cpu_has_mips16 0
++#define cpu_has_divec 0x200
++#define cpu_has_vce 0
++#define cpu_has_cache_cdex_p 0
++#define cpu_has_cache_cdex_s 0
++#define cpu_has_prefetch 0x40000
++#define cpu_has_mcheck 0x2000
++#define cpu_has_ejtag 0x4000
++#define cpu_has_llsc 0x10000
++#define cpu_has_vtag_icache 0
++#define cpu_has_dc_aliases 0
++#define cpu_has_ic_fills_f_dc 0
++
++#define cpu_has_nofpuex 0
++#define cpu_has_64bits 0
++#define cpu_has_64bit_zero_reg 0
++#define cpu_has_64bit_gp_regs 0
++#define cpu_has_64bit_addresses 0
++
++#define cpu_has_subset_pcaches 0
++
++#define cpu_dcache_line_size() 16
++#define cpu_icache_line_size() 16
++#define cpu_scache_line_size() 0
++
++#endif /* __ASM_MACH_BCM963XX_CPU_FEATURE_OVERRIDES_H */
diff --git a/target/linux/brcm63xx-2.6/patches/020-bcmdrivers.patch b/target/linux/brcm63xx-2.6/patches/020-bcmdrivers.patch
new file mode 100644
index 0000000000..a3882ff131
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/020-bcmdrivers.patch
@@ -0,0 +1,3249 @@
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/Makefile linux-2.6.16.7-patched/bcmdrivers/opensource/Makefile
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/Makefile 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,20 @@
++# File: modules/drivers/Makefile
++#
++# Makefile for the GPLed Linux kernel modules.
++#
++
++LN_NAME=bcm9$(BRCM_CHIP)
++LN_DRIVER_DIRS =
++
++-include $(KERNEL_DIR)/.config
++
++ifneq ($(CONFIG_BCM_SERIAL),)
++ LN_DRIVER_DIRS +=ln -sn impl$(CONFIG_BCM_SERIAL_IMPL) char/serial/$(LN_NAME);
++endif
++
++obj-$(CONFIG_BCM_SERIAL) += char/serial/impl$(CONFIG_BCM_SERIAL_IMPL)/
++
++
++symlinks:
++ find . -lname "*" -name "$(LN_NAME)" -print -exec rm -f "{}" ";"
++ $(CONFIG_SHELL) -c "$(LN_DRIVER_DIRS)"
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/char/serial/impl1/Makefile linux-2.6.16.7-patched/bcmdrivers/opensource/char/serial/impl1/Makefile
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/char/serial/impl1/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/char/serial/impl1/Makefile 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,13 @@
++# File: bcmdrivers/opensource/char/serial
++#
++# Makefile for the BCM63xx serial/console driver
++
++obj-$(CONFIG_BCM_SERIAL) += bcm63xx_cons.o
++
++EXTRA_CFLAGS += -I$(INC_BRCMDRIVER_PUB_PATH)/$(BRCM_BOARD)
++
++-include $(TOPDIR)/Rules.make
++
++clean:
++ rm -f core *.o *.a *.s
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c linux-2.6.16.7-patched/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/char/serial/impl1/bcm63xx_cons.c 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,1038 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++/* Description: Serial port driver for the BCM963XX. */
++
++#define CARDNAME "bcm963xx_serial driver"
++#define VERSION "2.0"
++#define VER_STR CARDNAME " v" VERSION "\n"
++
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/version.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/interrupt.h>
++
++/* for definition of struct console */
++#include <linux/console.h>
++#include <linux/tty.h>
++#include <linux/tty_flip.h>
++#include <linux/serial.h>
++#include <asm/uaccess.h>
++
++#include <bcmtypes.h>
++#include <board.h>
++#include <bcm_map_part.h>
++#include <bcm_intr.h>
++
++extern void _putc(char);
++extern void _puts(const char *);
++
++typedef struct bcm_serial {
++ volatile Uart * port;
++ int type;
++ int flags;
++ int irq;
++ int baud_base;
++ int blocked_open;
++ unsigned short close_delay;
++ unsigned short closing_wait;
++ unsigned short line; /* port/line number */
++ unsigned short cflags; /* line configuration flag */
++ unsigned short x_char; /* xon/xoff character */
++ unsigned short read_status_mask; /* mask for read condition */
++ unsigned short ignore_status_mask; /* mask for ignore condition */
++ unsigned long event; /* mask used in BH */
++ int xmit_head; /* Position of the head */
++ int xmit_tail; /* Position of the tail */
++ int xmit_cnt; /* Count of the chars in the buffer */
++ int count; /* indicates how many times it has been opened */
++ int magic;
++
++ struct async_icount icount; /* keep track of things ... */
++ struct tty_struct *tty; /* tty associated */
++ struct termios normal_termios;
++
++ wait_queue_head_t open_wait;
++ wait_queue_head_t close_wait;
++
++ long session; /* Session of opening process */
++ long pgrp; /* pgrp of opening process */
++
++ unsigned char is_initialized;
++} Context;
++
++
++/*---------------------------------------------------------------------*/
++/* Define bits in the Interrupt Enable register */
++/*---------------------------------------------------------------------*/
++/* Enable receive interrupt */
++#define RXINT (RXFIFONE|RXOVFERR)
++
++/* Enable transmit interrupt */
++#define TXINT (TXFIFOEMT|TXUNDERR|TXOVFERR)
++
++/* Enable receiver line status interrupt */
++#define LSINT (RXBRK|RXPARERR|RXFRAMERR)
++
++#define BCM_NUM_UARTS 1
++
++#define BD_BCM63XX_TIMER_CLOCK_INPUT (FPERIPH)
++
++
++static struct bcm_serial multi[BCM_NUM_UARTS];
++static struct bcm_serial *lines[BCM_NUM_UARTS];
++static struct tty_driver serial_driver;
++static struct tty_struct *serial_table[BCM_NUM_UARTS];
++static struct termios *serial_termios[BCM_NUM_UARTS];
++static struct termios *serial_termios_locked[BCM_NUM_UARTS];
++static int serial_refcount;
++
++
++static void bcm_stop (struct tty_struct *tty);
++static void bcm_start (struct tty_struct *tty);
++static inline void receive_chars (struct bcm_serial * info);
++static int startup (struct bcm_serial *info);
++static void shutdown (struct bcm_serial * info);
++static void change_speed( volatile Uart *pUart, tcflag_t cFlag );
++static void bcm63xx_cons_flush_chars (struct tty_struct *tty);
++static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
++ const unsigned char *buf, int count);
++static int bcm63xx_cons_write_room (struct tty_struct *tty);
++static int bcm_chars_in_buffer (struct tty_struct *tty);
++static void bcm_flush_buffer (struct tty_struct *tty);
++static void bcm_throttle (struct tty_struct *tty);
++static void bcm_unthrottle (struct tty_struct *tty);
++static void bcm_send_xchar (struct tty_struct *tty, char ch);
++static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo);
++static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info);
++static int get_lsr_info (struct bcm_serial *info, unsigned int *value);
++static void send_break (struct bcm_serial *info, int duration);
++static int bcm_ioctl (struct tty_struct * tty, struct file * file,
++ unsigned int cmd, unsigned long arg);
++static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios);
++static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp);
++static void bcm_hangup (struct tty_struct *tty);
++static int block_til_ready (struct tty_struct *tty, struct file *filp, struct bcm_serial *info);
++static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp);
++static int __init bcm63xx_serialinit(void);
++
++
++/*
++ * ------------------------------------------------------------
++ * rs_stop () and rs_start ()
++ *
++ * These routines are called before setting or resetting
++ * tty->stopped. They enable or disable transmitter interrupts,
++ * as necessary.
++ * ------------------------------------------------------------
++ */
++static void bcm_stop (struct tty_struct *tty)
++{
++}
++
++static void bcm_start (struct tty_struct *tty)
++{
++ _puts(CARDNAME " Start\n");
++}
++
++/*
++ * ------------------------------------------------------------
++ * receive_char ()
++ *
++ * This routine deals with inputs from any lines.
++ * ------------------------------------------------------------
++ */
++static inline void receive_chars (struct bcm_serial * info)
++{
++ struct tty_struct *tty = 0;
++ struct async_icount * icount;
++ int ignore = 0;
++ unsigned short status, tmp;
++ UCHAR ch = 0;
++ while ((status = info->port->intStatus) & RXINT)
++ {
++ char flag_char = 0;
++
++ if (status & RXFIFONE)
++ ch = info->port->Data; // Read the character
++ tty = info->tty; /* now tty points to the proper dev */
++ icount = &info->icount;
++ if (! tty)
++ break;
++ if (!tty_buffer_request_room(tty, 1))
++ break;
++ icount->rx++;
++ if (status & RXBRK)
++ {
++ flag_char = TTY_BREAK;
++ icount->brk++;
++ }
++ // keep track of the statistics
++ if (status & (RXFRAMERR | RXPARERR | RXOVFERR))
++ {
++ if (status & RXPARERR) /* parity error */
++ icount->parity++;
++ else
++ if (status & RXFRAMERR) /* frame error */
++ icount->frame++;
++ if (status & RXOVFERR)
++ {
++ // Overflow. Reset the RX FIFO
++ info->port->fifoctl |= RSTRXFIFOS;
++ icount->overrun++;
++ }
++ // check to see if we should ignore the character
++ // and mask off conditions that should be ignored
++ if (status & info->ignore_status_mask)
++ {
++ if (++ignore > 100 )
++ break;
++ goto ignore_char;
++ }
++ // Mask off the error conditions we want to ignore
++ tmp = status & info->read_status_mask;
++ if (tmp & RXPARERR)
++ {
++ flag_char = TTY_PARITY;
++ }
++ else
++ if (tmp & RXFRAMERR)
++ {
++ flag_char = TTY_FRAME;
++ }
++ if (tmp & RXOVFERR)
++ {
++ tty_insert_flip_char(tty, ch, flag_char);
++ ch = 0;
++ flag_char = TTY_OVERRUN;
++ if (!tty_buffer_request_room(tty, 1))
++ break;
++ }
++ }
++ tty_insert_flip_char(tty, ch, flag_char);
++ }
++ignore_char:
++ if (tty)
++ tty_flip_buffer_push(tty);
++}
++
++
++/*
++ * ------------------------------------------------------------
++ * bcm_interrupt ()
++ *
++ * this is the main interrupt routine for the chip.
++ * It deals with the multiple ports.
++ * ------------------------------------------------------------
++ */
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++static irqreturn_t bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
++#else
++static void bcm_interrupt (int irq, void * dev, struct pt_regs * regs)
++#endif
++{
++ struct bcm_serial * info = lines[0];
++ UINT16 intStat;
++
++ /* get pending interrupt flags from UART */
++
++ /* Mask with only the serial interrupts that are enabled */
++ intStat = info->port->intStatus & info->port->intMask;
++ while (intStat)
++ {
++ if (intStat & RXINT)
++ receive_chars (info);
++ else
++ if (intStat & TXINT)
++ info->port->intStatus = TXINT;
++ else /* don't know what it was, so let's mask it */
++ info->port->intMask &= ~intStat;
++
++ intStat = info->port->intStatus & info->port->intMask;
++ }
++
++ // Clear the interrupt
++ BcmHalInterruptEnable (INTERRUPT_ID_UART);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ return IRQ_HANDLED;
++#endif
++}
++
++/*
++ * -------------------------------------------------------------------
++ * startup ()
++ *
++ * various initialization tasks
++ * -------------------------------------------------------------------
++ */
++static int startup (struct bcm_serial *info)
++{
++ // Port is already started...
++ return 0;
++}
++
++/*
++ * -------------------------------------------------------------------
++ * shutdown ()
++ *
++ * This routine will shutdown a serial port; interrupts are disabled, and
++ * DTR is dropped if the hangup on close termio flag is on.
++ * -------------------------------------------------------------------
++ */
++static void shutdown (struct bcm_serial * info)
++{
++ unsigned long flags;
++ if (!info->is_initialized)
++ return;
++
++ save_flags (flags);
++ cli ();
++
++ info->port->control &= ~(BRGEN|TXEN|RXEN);
++ if (info->tty)
++ set_bit (TTY_IO_ERROR, &info->tty->flags);
++ info->is_initialized = 0;
++
++ restore_flags (flags);
++}
++/*
++ * -------------------------------------------------------------------
++ * change_speed ()
++ *
++ * Set the baud rate, character size, parity and stop bits.
++ * -------------------------------------------------------------------
++ */
++static void change_speed( volatile Uart *pUart, tcflag_t cFlag )
++{
++ unsigned long ulFlags, ulBaud, ulClockFreqHz, ulTmp;
++ save_flags(ulFlags);
++ cli();
++ switch( cFlag & (CBAUD | CBAUDEX) )
++ {
++ case B115200:
++ ulBaud = 115200;
++ break;
++ case B57600:
++ ulBaud = 57600;
++ break;
++ case B38400:
++ ulBaud = 38400;
++ break;
++ case B19200:
++ ulBaud = 19200;
++ break;
++ case B9600:
++ ulBaud = 9600;
++ break;
++ case B4800:
++ ulBaud = 4800;
++ break;
++ case B2400:
++ ulBaud = 2400;
++ break;
++ case B1800:
++ ulBaud = 1800;
++ break;
++ case B1200:
++ ulBaud = 1200;
++ break;
++ case B600:
++ ulBaud = 600;
++ break;
++ case B300:
++ ulBaud = 300;
++ break;
++ case B200:
++ ulBaud = 200;
++ break;
++ case B150:
++ ulBaud = 150;
++ break;
++ case B134:
++ ulBaud = 134;
++ break;
++ case B110:
++ ulBaud = 110;
++ break;
++ case B75:
++ ulBaud = 75;
++ break;
++ case B50:
++ ulBaud = 50;
++ break;
++ default:
++ ulBaud = 115200;
++ break;
++ }
++
++ /* Calculate buad rate. */
++ ulClockFreqHz = BD_BCM63XX_TIMER_CLOCK_INPUT;
++ ulTmp = (ulClockFreqHz / ulBaud) / 16;
++ if( ulTmp & 0x01 )
++ ulTmp /= 2; /* Rounding up, so sub is already accounted for */
++ else
++ ulTmp = (ulTmp / 2) - 1; /* Rounding down so we must sub 1 */
++ pUart->baudword = ulTmp;
++
++ /* Set character size, stop bits and parity. */
++ switch( cFlag & CSIZE )
++ {
++ case CS5:
++ ulTmp = BITS5SYM; /* select transmit 5 bit data size */
++ break;
++ case CS6:
++ ulTmp = BITS6SYM; /* select transmit 6 bit data size */
++ break;
++ case CS7:
++ ulTmp = BITS7SYM; /* select transmit 7 bit data size */
++ break;
++ /*case CS8:*/
++ default:
++ ulTmp = BITS8SYM; /* select transmit 8 bit data size */
++ break;
++ }
++ if( cFlag & CSTOPB )
++ ulTmp |= TWOSTOP; /* select 2 stop bits */
++ else
++ ulTmp |= ONESTOP; /* select one stop bit */
++
++ /* Write these values into the config reg. */
++ pUart->config = ulTmp;
++ pUart->control &= ~(RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN);
++ switch( cFlag & (PARENB | PARODD) )
++ {
++ case PARENB|PARODD:
++ pUart->control |= RXPARITYEN | TXPARITYEN;
++ break;
++ case PARENB:
++ pUart->control |= RXPARITYEN | TXPARITYEN | RXPARITYEVEN | TXPARITYEVEN;
++ break;
++ default:
++ pUart->control |= 0;
++ break;
++ }
++
++ /* Reset and flush uart */
++ pUart->fifoctl = RSTTXFIFOS | RSTRXFIFOS;
++ restore_flags( ulFlags );
++}
++
++
++/*
++ * -------------------------------------------------------------------
++ * bcm_flush_char ()
++ *
++ * Nothing to flush. Polled I/O is used.
++ * -------------------------------------------------------------------
++ */
++static void bcm63xx_cons_flush_chars (struct tty_struct *tty)
++{
++}
++
++
++/*
++ * -------------------------------------------------------------------
++ * bcm63xx_cons_write ()
++ *
++ * Main output routine using polled I/O.
++ * -------------------------------------------------------------------
++ */
++static int bcm63xx_cons_write (struct tty_struct *tty, int from_user,
++ const unsigned char *buf, int count)
++{
++ int c;
++
++ for (c = 0; c < count; c++)
++ _putc(buf[c]);
++ return count;
++}
++
++/*
++ * -------------------------------------------------------------------
++ * bcm63xx_cons_write_room ()
++ *
++ * Compute the amount of space available for writing.
++ * -------------------------------------------------------------------
++ */
++static int bcm63xx_cons_write_room (struct tty_struct *tty)
++{
++ /* Pick a number. Any number. Polled I/O is used. */
++ return 1024;
++}
++
++/*
++ * -------------------------------------------------------------------
++ * bcm_chars_in_buffer ()
++ *
++ * compute the amount of char left to be transmitted
++ * -------------------------------------------------------------------
++ */
++static int bcm_chars_in_buffer (struct tty_struct *tty)
++{
++ return 0;
++}
++
++/*
++ * -------------------------------------------------------------------
++ * bcm_flush_buffer ()
++ *
++ * Empty the output buffer
++ * -------------------------------------------------------------------
++ */
++static void bcm_flush_buffer (struct tty_struct *tty)
++{
++}
++
++/*
++ * ------------------------------------------------------------
++ * bcm_throttle () and bcm_unthrottle ()
++ *
++ * This routine is called by the upper-layer tty layer to signal that
++ * incoming characters should be throttled (or not).
++ * ------------------------------------------------------------
++ */
++static void bcm_throttle (struct tty_struct *tty)
++{
++ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
++ if (I_IXOFF(tty))
++ info->x_char = STOP_CHAR(tty);
++}
++
++static void bcm_unthrottle (struct tty_struct *tty)
++{
++ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
++ if (I_IXOFF(tty))
++ {
++ if (info->x_char)
++ info->x_char = 0;
++ else
++ info->x_char = START_CHAR(tty);
++ }
++}
++
++static void bcm_send_xchar (struct tty_struct *tty, char ch)
++{
++ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
++ info->x_char = ch;
++ if (ch)
++ bcm_start (info->tty);
++}
++
++/*
++ * ------------------------------------------------------------
++ * rs_ioctl () and friends
++ * ------------------------------------------------------------
++ */
++static int get_serial_info(struct bcm_serial *info, struct serial_struct *retinfo)
++{
++ struct serial_struct tmp;
++
++ if (!retinfo)
++ return -EFAULT;
++
++ memset (&tmp, 0, sizeof(tmp));
++ tmp.type = info->type;
++ tmp.line = info->line;
++ tmp.port = (int) info->port;
++ tmp.irq = info->irq;
++ tmp.flags = 0;
++ tmp.baud_base = info->baud_base;
++ tmp.close_delay = info->close_delay;
++ tmp.closing_wait = info->closing_wait;
++
++ return copy_to_user (retinfo, &tmp, sizeof(*retinfo));
++}
++
++static int set_serial_info (struct bcm_serial *info, struct serial_struct *new_info)
++{
++ struct serial_struct new_serial;
++ struct bcm_serial old_info;
++ int retval = 0;
++
++ if (!new_info)
++ return -EFAULT;
++
++ copy_from_user (&new_serial, new_info, sizeof(new_serial));
++ old_info = *info;
++
++ if (!capable(CAP_SYS_ADMIN))
++ return -EPERM;
++
++
++ if (info->count > 1)
++ return -EBUSY;
++
++ /* OK, past this point, all the error checking has been done.
++ * At this point, we start making changes.....
++ */
++ info->baud_base = new_serial.baud_base;
++ info->type = new_serial.type;
++ info->close_delay = new_serial.close_delay;
++ info->closing_wait = new_serial.closing_wait;
++ retval = startup (info);
++ return retval;
++}
++
++/*
++ * get_lsr_info - get line status register info
++ *
++ * Purpose: Let user call ioctl() to get info when the UART physically
++ * is emptied. On bus types like RS485, the transmitter must
++ * release the bus after transmitting. This must be done when
++ * the transmit shift register is empty, not be done when the
++ * transmit holding register is empty. This functionality
++ * allows an RS485 driver to be written in user space.
++ */
++static int get_lsr_info (struct bcm_serial *info, unsigned int *value)
++{
++ return( 0 );
++}
++
++/*
++ * This routine sends a break character out the serial port.
++ */
++static void send_break (struct bcm_serial *info, int duration)
++{
++ unsigned long flags;
++
++ if (!info->port)
++ return;
++
++ current->state = TASK_INTERRUPTIBLE;
++
++ save_flags (flags);
++ cli();
++
++ info->port->control |= XMITBREAK;
++ schedule_timeout(duration);
++ info->port->control &= ~XMITBREAK;
++
++ restore_flags (flags);
++}
++
++static int bcm_ioctl (struct tty_struct * tty, struct file * file,
++ unsigned int cmd, unsigned long arg)
++{
++ int error;
++ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
++ int retval;
++
++ if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
++ (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) &&
++ (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT))
++ {
++ if (tty->flags & (1 << TTY_IO_ERROR))
++ return -EIO;
++ }
++ switch (cmd)
++ {
++
++ case TCSBRK: /* SVID version: non-zero arg --> no break */
++ retval = tty_check_change (tty);
++ if (retval)
++ return retval;
++ tty_wait_until_sent (tty, 0);
++ if (!arg)
++ send_break (info, HZ/4); /* 1/4 second */
++ return 0;
++
++ case TCSBRKP: /* support for POSIX tcsendbreak() */
++ retval = tty_check_change (tty);
++ if (retval)
++ return retval;
++ tty_wait_until_sent (tty, 0);
++ send_break (info, arg ? arg*(HZ/10) : HZ/4);
++ return 0;
++
++ case TIOCGSOFTCAR:
++ error = access_ok (VERIFY_WRITE, (void *)arg, sizeof(long));
++ if (!error)
++ return -EFAULT;
++ else
++ {
++ put_user (C_CLOCAL(tty) ? 1 : 0, (unsigned long *)arg);
++ return 0;
++ }
++
++ case TIOCSSOFTCAR:
++ error = get_user (arg, (unsigned long *)arg);
++ if (error)
++ return error;
++ tty->termios->c_cflag = ((tty->termios->c_cflag & ~CLOCAL) | (arg ? CLOCAL : 0));
++ return 0;
++
++ case TIOCGSERIAL:
++ error = access_ok (VERIFY_WRITE, (void *)arg, sizeof(struct serial_struct));
++ if (!error)
++ return -EFAULT;
++ else
++ return get_serial_info (info, (struct serial_struct *)arg);
++
++ case TIOCSSERIAL:
++ return set_serial_info (info, (struct serial_struct *) arg);
++
++ case TIOCSERGETLSR: /* Get line status register */
++ error = access_ok (VERIFY_WRITE, (void *)arg, sizeof(unsigned int));
++ if (!error)
++ return -EFAULT;
++ else
++ return get_lsr_info (info, (unsigned int *)arg);
++
++ case TIOCSERGSTRUCT:
++ error = access_ok (VERIFY_WRITE, (void *)arg, sizeof(struct bcm_serial));
++ if (!error)
++ return -EFAULT;
++ else
++ {
++ copy_to_user((struct bcm_serial *)arg, info, sizeof(struct bcm_serial));
++ return 0;
++ }
++
++ default:
++ return -ENOIOCTLCMD;
++ }
++ return 0;
++}
++
++static void bcm_set_termios (struct tty_struct *tty, struct termios *old_termios)
++{
++ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
++
++ if( tty->termios->c_cflag != old_termios->c_cflag )
++ change_speed (info->port, tty->termios->c_cflag);
++}
++
++/*
++ * ------------------------------------------------------------
++ * bcm63xx_cons_close()
++ *
++ * This routine is called when the serial port gets closed. First, we
++ * wait for the last remaining data to be sent. Then, we turn off
++ * the transmit enable and receive enable flags.
++ * ------------------------------------------------------------
++ */
++static void bcm63xx_cons_close (struct tty_struct *tty, struct file *filp)
++{
++ struct bcm_serial * info = (struct bcm_serial *)tty->driver_data;
++ unsigned long flags;
++
++ if (!info)
++ return;
++
++ save_flags (flags);
++ cli();
++
++ if (tty_hung_up_p (filp))
++ {
++ restore_flags (flags);
++ return;
++ }
++
++ if ((tty->count == 1) && (info->count != 1))
++ {
++
++ /* Uh, oh. tty->count is 1, which means that the tty
++ * structure will be freed. Info->count should always
++ * be one in these conditions. If it's greater than
++ * one, we've got real problems, since it means the
++ * serial port won't be shutdown.
++ */
++ printk("bcm63xx_cons_close: bad serial port count; tty->count is 1, "
++ "info->count is %d\n", info->count);
++ info->count = 1;
++ }
++
++ if (--info->count < 0)
++ {
++ printk("ds_close: bad serial port count for ttys%d: %d\n",
++ info->line, info->count);
++ info->count = 0;
++ }
++
++ if (info->count)
++ {
++ restore_flags (flags);
++ return;
++ }
++
++ /* Now we wait for the transmit buffer to clear; and we notify
++ * the line discipline to only process XON/XOFF characters.
++ */
++ tty->closing = 1;
++
++ /* At this point we stop accepting input. To do this, we
++ * disable the receive line status interrupts.
++ */
++ shutdown (info);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ if (tty->driver->flush_buffer)
++ tty->driver->flush_buffer (tty);
++#else
++ if (tty->driver.flush_buffer)
++ tty->driver.flush_buffer (tty);
++#endif
++ if (tty->ldisc.flush_buffer)
++ tty->ldisc.flush_buffer (tty);
++
++ tty->closing = 0;
++ info->event = 0;
++ info->tty = 0;
++ if (tty->ldisc.num != tty_ldisc_get(N_TTY)->num)
++ {
++ if (tty->ldisc.close)
++ (tty->ldisc.close)(tty);
++ tty->ldisc = *tty_ldisc_get(N_TTY);
++ tty->termios->c_line = N_TTY;
++ if (tty->ldisc.open)
++ (tty->ldisc.open)(tty);
++ }
++ if (info->blocked_open)
++ {
++ if (info->close_delay)
++ {
++ current->state = TASK_INTERRUPTIBLE;
++ schedule_timeout(info->close_delay);
++ }
++ wake_up_interruptible (&info->open_wait);
++ }
++ wake_up_interruptible (&info->close_wait);
++
++ restore_flags (flags);
++}
++
++/*
++ * bcm_hangup () --- called by tty_hangup() when a hangup is signaled.
++ */
++static void bcm_hangup (struct tty_struct *tty)
++{
++
++ struct bcm_serial *info = (struct bcm_serial *)tty->driver_data;
++
++ shutdown (info);
++ info->event = 0;
++ info->count = 0;
++ info->tty = 0;
++ wake_up_interruptible (&info->open_wait);
++}
++
++/*
++ * ------------------------------------------------------------
++ * rs_open() and friends
++ * ------------------------------------------------------------
++ */
++static int block_til_ready (struct tty_struct *tty, struct file *filp,
++ struct bcm_serial *info)
++{
++ return 0;
++}
++
++/*
++ * This routine is called whenever a serial port is opened. It
++ * enables interrupts for a serial port. It also performs the
++ * serial-specific initialization for the tty structure.
++ */
++static int bcm63xx_cons_open (struct tty_struct * tty, struct file * filp)
++{
++ struct bcm_serial *info;
++ int retval, line;
++
++ // Make sure we're only opening on of the ports we support
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ line = MINOR(tty->driver->cdev.dev) - tty->driver->minor_start;
++#else
++ line = MINOR(tty->device) - tty->driver.minor_start;
++#endif
++
++ if ((line < 0) || (line >= BCM_NUM_UARTS))
++ return -ENODEV;
++
++ info = lines[line];
++
++ info->port->intMask = 0; /* Clear any pending interrupts */
++ info->port->intMask = RXINT; /* Enable RX */
++
++ info->count++;
++ tty->driver_data = info;
++ info->tty = tty;
++ BcmHalInterruptEnable (INTERRUPT_ID_UART);
++
++ // Start up serial port
++ retval = startup (info);
++ if (retval)
++ return retval;
++
++ retval = block_til_ready (tty, filp, info);
++ if (retval)
++ return retval;
++
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ info->pgrp = process_group(current);
++ info->session = current->signal->session;
++#else
++ info->session = current->session;
++ info->pgrp = current->pgrp;
++#endif
++
++ return 0;
++}
++
++/* --------------------------------------------------------------------------
++ Name: bcm63xx_serialinit
++ Purpose: Initialize our BCM63xx serial driver
++-------------------------------------------------------------------------- */
++static int __init bcm63xx_serialinit(void)
++{
++ int i, flags;
++ struct bcm_serial * info;
++
++ // Print the driver version information
++ printk(VER_STR);
++
++ memset(&serial_driver, 0, sizeof(struct tty_driver));
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ serial_driver.owner = THIS_MODULE;
++ serial_driver.devfs_name = "tts/";
++#endif
++ serial_driver.magic = TTY_DRIVER_MAGIC;
++ serial_driver.name = "ttyS";
++ serial_driver.major = TTY_MAJOR;
++ serial_driver.minor_start = 64;
++ serial_driver.num = BCM_NUM_UARTS;
++ serial_driver.type = TTY_DRIVER_TYPE_SERIAL;
++ serial_driver.subtype = SERIAL_TYPE_NORMAL;
++ serial_driver.init_termios = tty_std_termios;
++ serial_driver.init_termios.c_cflag = B115200 | CS8 | CREAD | CLOCAL;
++ serial_driver.flags = TTY_DRIVER_REAL_RAW;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
++ serial_driver.refcount = serial_refcount;
++ serial_driver.ttys = serial_table;
++#else
++ serial_driver.refcount = &serial_refcount;
++ serial_driver.table = serial_table;
++#endif
++
++ serial_driver.termios = serial_termios;
++ serial_driver.termios_locked = serial_termios_locked;
++ serial_driver.open = bcm63xx_cons_open;
++ serial_driver.close = bcm63xx_cons_close;
++ serial_driver.write = bcm63xx_cons_write;
++ serial_driver.flush_chars = bcm63xx_cons_flush_chars;
++ serial_driver.write_room = bcm63xx_cons_write_room;
++ serial_driver.chars_in_buffer = bcm_chars_in_buffer;
++ serial_driver.flush_buffer = bcm_flush_buffer;
++ serial_driver.ioctl = bcm_ioctl;
++ serial_driver.throttle = bcm_throttle;
++ serial_driver.unthrottle = bcm_unthrottle;
++ serial_driver.send_xchar = bcm_send_xchar;
++ serial_driver.set_termios = bcm_set_termios;
++ serial_driver.stop = bcm_stop;
++ serial_driver.start = bcm_start;
++ serial_driver.hangup = bcm_hangup;
++
++ if (tty_register_driver (&serial_driver))
++ panic("Couldn't register serial driver\n");
++
++ save_flags(flags); cli();
++ for (i = 0; i < BCM_NUM_UARTS; i++)
++ {
++ info = &multi[i];
++ lines[i] = info;
++ info->port = (Uart *) ((char *)UART_BASE + (i * 0x20));
++ info->irq = (2 - i) + 8;
++ info->line = i;
++ info->tty = 0;
++ info->close_delay = 50;
++ info->closing_wait = 3000;
++ info->x_char = 0;
++ info->event = 0;
++ info->count = 0;
++ info->blocked_open = 0;
++ info->normal_termios = serial_driver.init_termios;
++ init_waitqueue_head(&info->open_wait);
++ init_waitqueue_head(&info->close_wait);
++
++ /* If we are pointing to address zero then punt - not correctly
++ * set up in setup.c to handle this.
++ */
++ if (! info->port)
++ return 0;
++ BcmHalMapInterrupt(bcm_interrupt, 0, INTERRUPT_ID_UART);
++ }
++
++ /* order matters here... the trick is that flags
++ * is updated... in request_irq - to immediatedly obliterate
++ * it is unwise.
++ */
++ restore_flags(flags);
++ return 0;
++}
++
++module_init(bcm63xx_serialinit);
++
++/* --------------------------------------------------------------------------
++ Name: bcm_console_print
++ Purpose: bcm_console_print is registered for printk.
++ The console_lock must be held when we get here.
++-------------------------------------------------------------------------- */
++static void bcm_console_print (struct console * cons, const char * str,
++ unsigned int count)
++{
++ unsigned int i;
++ //_puts(str);
++ for(i=0; i<count; i++, str++)
++ {
++ _putc(*str);
++ if (*str == 10)
++ {
++ _putc(13);
++ }
++ }
++}
++
++static struct tty_driver * bcm_console_device(struct console * c, int *index)
++{
++ *index = c->index;
++ return &serial_driver;
++}
++
++static int __init bcm_console_setup(struct console * co, char * options)
++{
++ return 0;
++}
++
++static struct console bcm_sercons = {
++ .name = "ttyS",
++ .write = bcm_console_print,
++ .device = bcm_console_device,
++ .setup = bcm_console_setup,
++ .flags = CON_PRINTBUFFER, // CON_CONSDEV, CONSOLE_LINE,
++ .index = -1,
++};
++
++static int __init bcm63xx_console_init(void)
++{
++ register_console(&bcm_sercons);
++ return 0;
++}
++
++console_initcall(bcm63xx_console_init);
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6338_intr.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6338_intr.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6338_intr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6338_intr.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,72 @@
++/*
++<:copyright-gpl
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __6338_INTR_H
++#define __6338_INTR_H
++
++#ifdef __cplusplus
++ extern "C" {
++#endif
++
++/*=====================================================================*/
++/* BCM6338 External Interrupt Level Assignments */
++/*=====================================================================*/
++#define INTERRUPT_ID_EXTERNAL_0 3
++#define INTERRUPT_ID_EXTERNAL_1 4
++#define INTERRUPT_ID_EXTERNAL_2 5
++#define INTERRUPT_ID_EXTERNAL_3 6
++
++/*=====================================================================*/
++/* BCM6338 Timer Interrupt Level Assignments */
++/*=====================================================================*/
++#define MIPS_TIMER_INT 7
++
++/*=====================================================================*/
++/* Peripheral ISR Table Offset */
++/*=====================================================================*/
++#define INTERNAL_ISR_TABLE_OFFSET 8
++
++/*=====================================================================*/
++/* Logical Peripheral Interrupt IDs */
++/*=====================================================================*/
++
++#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
++#define INTERRUPT_ID_SPI (INTERNAL_ISR_TABLE_OFFSET + 1)
++#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
++#define INTERRUPT_ID_DG (INTERNAL_ISR_TABLE_OFFSET + 4)
++#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 5)
++#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 6)
++#define INTERRUPT_ID_USBS (INTERNAL_ISR_TABLE_OFFSET + 7)
++#define INTERRUPT_ID_EMAC1 (INTERNAL_ISR_TABLE_OFFSET + 8)
++#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 9)
++#define INTERRUPT_ID_SDRAM (INTERNAL_ISR_TABLE_OFFSET + 10)
++#define INTERRUPT_ID_USB_CNTL_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 11)
++#define INTERRUPT_ID_USB_CNTL_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 12)
++#define INTERRUPT_ID_USB_BULK_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 13)
++#define INTERRUPT_ID_USB_BULK_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 14)
++#define INTERRUPT_ID_EMAC1_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 15)
++#define INTERRUPT_ID_EMAC1_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 16)
++#define INTERRUPT_ID_SDIO (INTERNAL_ISR_TABLE_OFFSET + 17)
++
++#ifdef __cplusplus
++ }
++#endif
++
++#endif /* __BCM6338_H */
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6338_map_part.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,341 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __BCM6338_MAP_H
++#define __BCM6338_MAP_H
++
++#if __cplusplus
++extern "C" {
++#endif
++
++#include "bcmtypes.h"
++
++#define PERF_BASE 0xfffe0000
++#define TIMR_BASE 0xfffe0200
++#define UART_BASE 0xfffe0300
++#define GPIO_BASE 0xfffe0400
++#define SPI_BASE 0xfffe0c00
++
++typedef struct PerfControl {
++ uint32 RevID;
++ uint16 testControl;
++ uint16 blkEnables;
++#define EMAC_CLK_EN 0x0010
++#define USBS_CLK_EN 0x0010
++#define SAR_CLK_EN 0x0020
++
++#define SPI_CLK_EN 0x0200
++
++ uint32 pll_control;
++#define SOFT_RESET 0x00000001
++
++ uint32 IrqMask;
++ uint32 IrqStatus;
++
++ uint32 ExtIrqCfg;
++#define EI_SENSE_SHFT 0
++#define EI_STATUS_SHFT 5
++#define EI_CLEAR_SHFT 10
++#define EI_MASK_SHFT 15
++#define EI_INSENS_SHFT 20
++#define EI_LEVEL_SHFT 25
++
++ uint32 unused[4]; /* (18) */
++ uint32 BlockSoftReset; /* (28) */
++#define BSR_SPI 0x00000001
++#define BSR_EMAC 0x00000004
++#define BSR_USBH 0x00000008
++#define BSR_USBS 0x00000010
++#define BSR_ADSL 0x00000020
++#define BSR_DMAMEM 0x00000040
++#define BSR_SAR 0x00000080
++#define BSR_ACLC 0x00000100
++#define BSR_ADSL_MIPS_PLL 0x00000400
++#define BSR_ALL_BLOCKS \
++ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
++ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
++} PerfControl;
++
++#define PERF ((volatile PerfControl * const) PERF_BASE)
++
++
++typedef struct Timer {
++ uint16 unused0;
++ byte TimerMask;
++#define TIMER0EN 0x01
++#define TIMER1EN 0x02
++#define TIMER2EN 0x04
++ byte TimerInts;
++#define TIMER0 0x01
++#define TIMER1 0x02
++#define TIMER2 0x04
++#define WATCHDOG 0x08
++ uint32 TimerCtl0;
++ uint32 TimerCtl1;
++ uint32 TimerCtl2;
++#define TIMERENABLE 0x80000000
++#define RSTCNTCLR 0x40000000
++ uint32 TimerCnt0;
++ uint32 TimerCnt1;
++ uint32 TimerCnt2;
++ uint32 WatchDogDefCount;
++
++ /* Write 0xff00 0x00ff to Start timer
++ * Write 0xee00 0x00ee to Stop and re-load default count
++ * Read from this register returns current watch dog count
++ */
++ uint32 WatchDogCtl;
++
++ /* Number of 40-MHz ticks for WD Reset pulse to last */
++ uint32 WDResetCount;
++} Timer;
++
++#define TIMER ((volatile Timer * const) TIMR_BASE)
++typedef struct UartChannel {
++ byte unused0;
++ byte control;
++#define BRGEN 0x80 /* Control register bit defs */
++#define TXEN 0x40
++#define RXEN 0x20
++#define LOOPBK 0x10
++#define TXPARITYEN 0x08
++#define TXPARITYEVEN 0x04
++#define RXPARITYEN 0x02
++#define RXPARITYEVEN 0x01
++
++ byte config;
++#define XMITBREAK 0x40
++#define BITS5SYM 0x00
++#define BITS6SYM 0x10
++#define BITS7SYM 0x20
++#define BITS8SYM 0x30
++#define ONESTOP 0x07
++#define TWOSTOP 0x0f
++ /* 4-LSBS represent STOP bits/char
++ * in 1/8 bit-time intervals. Zero
++ * represents 1/8 stop bit interval.
++ * Fifteen represents 2 stop bits.
++ */
++ byte fifoctl;
++#define RSTTXFIFOS 0x80
++#define RSTRXFIFOS 0x40
++ /* 5-bit TimeoutCnt is in low bits of this register.
++ * This count represents the number of characters
++ * idle times before setting receive Irq when below threshold
++ */
++ uint32 baudword;
++ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
++ */
++
++ byte txf_levl; /* Read-only fifo depth */
++ byte rxf_levl; /* Read-only fifo depth */
++ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
++ * RxThreshold. Irq can be asserted
++ * when rx fifo> thresh, txfifo<thresh
++ */
++ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
++ * if these bits are also enabled to GPIO_o
++ */
++#define DTREN 0x01
++#define RTSEN 0x02
++
++ byte unused1;
++ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
++ * detect irq on rising AND falling
++ * edges for corresponding GPIO_i
++ * if enabled (edge insensitive)
++ */
++ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
++ * 0 for negedge sense if
++ * not configured for edge
++ * insensitive (see above)
++ * Lower 4 bits: Mask to enable change
++ * detection IRQ for corresponding
++ * GPIO_i
++ */
++ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
++ * have changed (may set IRQ).
++ * read automatically clears bit
++ * Lower 4 bits are actual status
++ */
++
++ uint16 intMask; /* Same Bit defs for Mask and status */
++ uint16 intStatus;
++#define DELTAIP 0x0001
++#define TXUNDERR 0x0002
++#define TXOVFERR 0x0004
++#define TXFIFOTHOLD 0x0008
++#define TXREADLATCH 0x0010
++#define TXFIFOEMT 0x0020
++#define RXUNDERR 0x0040
++#define RXOVFERR 0x0080
++#define RXTIMEOUT 0x0100
++#define RXFIFOFULL 0x0200
++#define RXFIFOTHOLD 0x0400
++#define RXFIFONE 0x0800
++#define RXFRAMERR 0x1000
++#define RXPARERR 0x2000
++#define RXBRK 0x4000
++
++ uint16 unused2;
++ uint16 Data; /* Write to TX, Read from RX */
++ /* bits 11:8 are BRK,PAR,FRM errors */
++
++ uint32 unused3;
++ uint32 unused4;
++} Uart;
++
++#define UART ((volatile Uart * const) UART_BASE)
++
++typedef struct GpioControl {
++ uint32 unused0;
++ uint32 GPIODir; /* bits 7:0 */
++ uint32 unused1;
++ uint32 GPIOio; /* bits 7:0 */
++ uint32 LEDCtrl;
++#define LED3_STROBE 0x08000000
++#define LED2_STROBE 0x04000000
++#define LED1_STROBE 0x02000000
++#define LED0_STROBE 0x01000000
++#define LED_TEST 0x00010000
++#define LED3_DISABLE_LINK_ACT 0x00008000
++#define LED2_DISABLE_LINK_ACT 0x00004000
++#define LED1_DISABLE_LINK_ACT 0x00002000
++#define LED0_DISABLE_LINK_ACT 0x00001000
++#define LED_INTERVAL_SET_MASK 0x00000f00
++#define LED_INTERVAL_SET_320MS 0x00000500
++#define LED_INTERVAL_SET_160MS 0x00000400
++#define LED_INTERVAL_SET_80MS 0x00000300
++#define LED_INTERVAL_SET_40MS 0x00000200
++#define LED_INTERVAL_SET_20MS 0x00000100
++#define LED3_ON 0x00000080
++#define LED2_ON 0x00000040
++#define LED1_ON 0x00000020
++#define LED0_ON 0x00000010
++#define LED3_ENABLE 0x00000008
++#define LED2_ENABLE 0x00000004
++#define LED1_ENABLE 0x00000002
++#define LED0_ENABLE 0x00000001
++ uint32 SpiSlaveCfg;
++#define SPI_SLAVE_RESET 0x00010000
++#define SPI_RESTRICT 0x00000400
++#define SPI_DELAY_DISABLE 0x00000200
++#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
++#define SPI_SER_ADDR_CFG_MASK 0x0000000c
++#define SPI_MODE 0x00000001
++ uint32 vRegConfig;
++} GpioControl;
++
++#define GPIO ((volatile GpioControl * const) GPIO_BASE)
++
++/* Number to mask conversion macro used for GPIODir and GPIOio */
++#define GPIO_NUM_MAX_BITS_MASK 0x0f
++#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
++
++/*
++** Spi Controller
++*/
++
++typedef struct SpiControl {
++ uint16 spiCmd; /* (0x0): SPI command */
++#define SPI_CMD_START_IMMEDIATE 3
++
++#define SPI_CMD_COMMAND_SHIFT 0
++#define SPI_CMD_DEVICE_ID_SHIFT 4
++#define SPI_CMD_PREPEND_BYTE_CNT_SHIFT 8
++
++ byte spiIntStatus; /* (0x2): SPI interrupt status */
++ byte spiMaskIntStatus; /* (0x3): SPI masked interrupt status */
++
++ byte spiIntMask; /* (0x4): SPI interrupt mask */
++#define SPI_INTR_CMD_DONE 0x01
++#define SPI_INTR_CLEAR_ALL 0x1f
++
++ byte spiStatus; /* (0x5): SPI status */
++
++ byte spiClkCfg; /* (0x6): SPI clock configuration */
++
++ byte spiFillByte; /* (0x7): SPI fill byte */
++
++ byte unused0;
++ byte spiMsgTail; /* (0x9): msgtail */
++ byte unused1;
++ byte spiRxTail; /* (0xB): rxtail */
++
++ uint32 unused2[13]; /* (0x0c - 0x3c) reserved */
++
++ byte spiMsgCtl; /* (0x40) control byte */
++#define HALF_DUPLEX_W 1
++#define HALF_DUPLEX_R 2
++#define SPI_MSG_TYPE_SHIFT 6
++#define SPI_BYTE_CNT_SHIFT 0
++ byte spiMsgData[63]; /* (0x41 - 0x7f) msg data */
++ byte spiRxDataFifo[64]; /* (0x80 - 0xbf) rx data */
++ byte unused3[64]; /* (0xc0 - 0xff) reserved */
++} SpiControl;
++
++#define SPI ((volatile SpiControl * const) SPI_BASE)
++
++/*
++** External Bus Interface
++*/
++typedef struct EbiChipSelect {
++ uint32 base; /* base address in upper 24 bits */
++#define EBI_SIZE_8K 0
++#define EBI_SIZE_16K 1
++#define EBI_SIZE_32K 2
++#define EBI_SIZE_64K 3
++#define EBI_SIZE_128K 4
++#define EBI_SIZE_256K 5
++#define EBI_SIZE_512K 6
++#define EBI_SIZE_1M 7
++#define EBI_SIZE_2M 8
++#define EBI_SIZE_4M 9
++#define EBI_SIZE_8M 10
++#define EBI_SIZE_16M 11
++#define EBI_SIZE_32M 12
++#define EBI_SIZE_64M 13
++#define EBI_SIZE_128M 14
++#define EBI_SIZE_256M 15
++ uint32 config;
++#define EBI_ENABLE 0x00000001 /* .. enable this range */
++#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
++#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
++#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
++#define EBI_WREN 0x00000020 /* enable posted writes */
++#define EBI_POLARITY 0x00000040 /* .. set to invert something,
++ ** don't know what yet */
++#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
++#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
++#define EBI_FIFO 0x00000200 /* .. use fifo */
++#define EBI_RE 0x00000400 /* .. Reverse Endian */
++} EbiChipSelect;
++
++typedef struct MpiRegisters {
++ EbiChipSelect cs[1]; /* size chip select configuration */
++} MpiRegisters;
++
++#define MPI ((volatile MpiRegisters * const) MPI_BASE)
++
++#if __cplusplus
++}
++#endif
++
++#endif
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6345_intr.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6345_intr.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6345_intr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6345_intr.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,78 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __6345_INTR_H
++#define __6345_INTR_H
++
++#ifdef __cplusplus
++ extern "C" {
++#endif
++
++/*=====================================================================*/
++/* BCM6345 External Interrupt Level Assignments */
++/*=====================================================================*/
++#define INTERRUPT_ID_EXTERNAL_0 3
++#define INTERRUPT_ID_EXTERNAL_1 4
++#define INTERRUPT_ID_EXTERNAL_2 5
++#define INTERRUPT_ID_EXTERNAL_3 6
++
++/*=====================================================================*/
++/* BCM6345 Timer Interrupt Level Assignments */
++/*=====================================================================*/
++#define MIPS_TIMER_INT 7
++
++/*=====================================================================*/
++/* Peripheral ISR Table Offset */
++/*=====================================================================*/
++#define INTERNAL_ISR_TABLE_OFFSET 8
++#define DMA_ISR_TABLE_OFFSET (INTERNAL_ISR_TABLE_OFFSET + 13)
++
++/*=====================================================================*/
++/* Logical Peripheral Interrupt IDs */
++/*=====================================================================*/
++
++/* Internal peripheral interrupt IDs */
++#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
++#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
++#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 3)
++#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 4)
++#define INTERRUPT_ID_USB (INTERNAL_ISR_TABLE_OFFSET + 5)
++#define INTERRUPT_ID_EMAC (INTERNAL_ISR_TABLE_OFFSET + 8)
++#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 12)
++
++/* DMA channel interrupt IDs */
++#define INTERRUPT_ID_EMAC_RX_CHAN (DMA_ISR_TABLE_OFFSET + EMAC_RX_CHAN)
++#define INTERRUPT_ID_EMAC_TX_CHAN (DMA_ISR_TABLE_OFFSET + EMAC_TX_CHAN)
++#define INTERRUPT_ID_EBI_RX_CHAN (DMA_ISR_TABLE_OFFSET + EBI_RX_CHAN)
++#define INTERRUPT_ID_EBI_TX_CHAN (DMA_ISR_TABLE_OFFSET + EBI_TX_CHAN)
++#define INTERRUPT_ID_RESERVED_RX_CHAN (DMA_ISR_TABLE_OFFSET + RESERVED_RX_CHAN)
++#define INTERRUPT_ID_RESERVED_TX_CHAN (DMA_ISR_TABLE_OFFSET + RESERVED_TX_CHAN)
++#define INTERRUPT_ID_USB_BULK_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_BULK_RX_CHAN)
++#define INTERRUPT_ID_USB_BULK_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_BULK_TX_CHAN)
++#define INTERRUPT_ID_USB_CNTL_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_CNTL_RX_CHAN)
++#define INTERRUPT_ID_USB_CNTL_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_CNTL_TX_CHAN)
++#define INTERRUPT_ID_USB_ISO_RX_CHAN (DMA_ISR_TABLE_OFFSET + USB_ISO_RX_CHAN)
++#define INTERRUPT_ID_USB_ISO_TX_CHAN (DMA_ISR_TABLE_OFFSET + USB_ISO_TX_CHAN)
++
++#ifdef __cplusplus
++ }
++#endif
++
++#endif /* __BCM6345_H */
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6345_map_part.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,169 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __BCM6345_MAP_H
++#define __BCM6345_MAP_H
++
++#if __cplusplus
++extern "C" {
++#endif
++
++#include "bcmtypes.h"
++#include "6345_intr.h"
++
++typedef struct IntControl {
++ uint32 RevID;
++ uint16 testControl;
++ uint16 blkEnables;
++#define USB_CLK_EN 0x0100
++#define EMAC_CLK_EN 0x0080
++#define UART_CLK_EN 0x0008
++#define CPU_CLK_EN 0x0001
++
++ uint32 pll_control;
++#define SOFT_RESET 0x00000001
++
++ uint32 IrqMask;
++ uint32 IrqStatus;
++
++ uint32 ExtIrqCfg;
++#define EI_SENSE_SHFT 0
++#define EI_STATUS_SHFT 4
++#define EI_CLEAR_SHFT 8
++#define EI_MASK_SHFT 12
++#define EI_INSENS_SHFT 16
++#define EI_LEVEL_SHFT 20
++} IntControl;
++
++#define INTC_BASE 0xfffe0000
++#define PERF ((volatile IntControl * const) INTC_BASE)
++
++#define TIMR_BASE 0xfffe0200
++typedef struct Timer {
++ uint16 unused0;
++ byte TimerMask;
++#define TIMER0EN 0x01
++#define TIMER1EN 0x02
++#define TIMER2EN 0x04
++ byte TimerInts;
++#define TIMER0 0x01
++#define TIMER1 0x02
++#define TIMER2 0x04
++#define WATCHDOG 0x08
++ uint32 TimerCtl0;
++ uint32 TimerCtl1;
++ uint32 TimerCtl2;
++#define TIMERENABLE 0x80000000
++#define RSTCNTCLR 0x40000000
++ uint32 TimerCnt0;
++ uint32 TimerCnt1;
++ uint32 TimerCnt2;
++ uint32 WatchDogDefCount;
++
++ /* Write 0xff00 0x00ff to Start timer
++ * Write 0xee00 0x00ee to Stop and re-load default count
++ * Read from this register returns current watch dog count
++ */
++ uint32 WatchDogCtl;
++
++ /* Number of 40-MHz ticks for WD Reset pulse to last */
++ uint32 WDResetCount;
++} Timer;
++
++#define TIMER ((volatile Timer * const) TIMR_BASE)
++
++typedef struct UartChannel {
++ byte unused0;
++ byte control;
++#define BRGEN 0x80 /* Control register bit defs */
++#define TXEN 0x40
++#define RXEN 0x20
++#define TXPARITYEN 0x08
++#define TXPARITYEVEN 0x04
++#define RXPARITYEN 0x02
++#define RXPARITYEVEN 0x01
++ byte config;
++#define BITS5SYM 0x00
++#define BITS6SYM 0x10
++#define BITS7SYM 0x20
++#define BITS8SYM 0x30
++#define XMITBREAK 0x40
++#define ONESTOP 0x07
++#define TWOSTOP 0x0f
++
++ byte fifoctl;
++#define RSTTXFIFOS 0x80
++#define RSTRXFIFOS 0x40
++ uint32 baudword;
++
++ byte txf_levl;
++ byte rxf_levl;
++ byte fifocfg;
++ byte prog_out;
++
++ byte unused1;
++ byte DeltaIPEdgeNoSense;
++ byte DeltaIPConfig_Mask;
++ byte DeltaIP_SyncIP;
++ uint16 intMask;
++ uint16 intStatus;
++#define TXUNDERR 0x0002
++#define TXOVFERR 0x0004
++#define TXFIFOEMT 0x0020
++#define RXOVFERR 0x0080
++#define RXFIFONE 0x0800
++#define RXFRAMERR 0x1000
++#define RXPARERR 0x2000
++#define RXBRK 0x4000
++
++ uint16 unused2;
++ uint16 Data;
++ uint32 unused3;
++ uint32 unused4;
++} Uart;
++
++#define UART_BASE 0xfffe0300
++#define UART ((volatile Uart * const) UART_BASE)
++
++typedef struct GpioControl {
++ uint16 unused0;
++ byte unused1;
++ byte TBusSel;
++
++ uint16 unused2;
++ uint16 GPIODir;
++ byte unused3;
++ byte Leds;
++ uint16 GPIOio;
++
++ uint32 UartCtl;
++} GpioControl;
++
++#define GPIO_BASE 0xfffe0400
++#define GPIO ((volatile GpioControl * const) GPIO_BASE)
++
++#define GPIO_NUM_MAX_BITS_MASK 0x0f
++#define GPIO_NUM_TO_MASK(X) (1 << ((X) & GPIO_NUM_MAX_BITS_MASK))
++
++#if __cplusplus
++}
++#endif
++
++#endif
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6348_intr.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6348_intr.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6348_intr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6348_intr.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,80 @@
++/*
++<:copyright-gpl
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __6348_INTR_H
++#define __6348_INTR_H
++
++#ifdef __cplusplus
++ extern "C" {
++#endif
++
++/*=====================================================================*/
++/* BCM6348 External Interrupt Level Assignments */
++/*=====================================================================*/
++#define INTERRUPT_ID_EXTERNAL_0 3
++#define INTERRUPT_ID_EXTERNAL_1 4
++#define INTERRUPT_ID_EXTERNAL_2 5
++#define INTERRUPT_ID_EXTERNAL_3 6
++
++/*=====================================================================*/
++/* BCM6348 Timer Interrupt Level Assignments */
++/*=====================================================================*/
++#define MIPS_TIMER_INT 7
++
++/*=====================================================================*/
++/* Peripheral ISR Table Offset */
++/*=====================================================================*/
++#define INTERNAL_ISR_TABLE_OFFSET 8
++
++/*=====================================================================*/
++/* Logical Peripheral Interrupt IDs */
++/*=====================================================================*/
++
++#define INTERRUPT_ID_TIMER (INTERNAL_ISR_TABLE_OFFSET + 0)
++#define INTERRUPT_ID_SPI (INTERNAL_ISR_TABLE_OFFSET + 1)
++#define INTERRUPT_ID_UART (INTERNAL_ISR_TABLE_OFFSET + 2)
++#define INTERRUPT_ID_ADSL (INTERNAL_ISR_TABLE_OFFSET + 4)
++#define INTERRUPT_ID_ATM (INTERNAL_ISR_TABLE_OFFSET + 5)
++#define INTERRUPT_ID_USBS (INTERNAL_ISR_TABLE_OFFSET + 6)
++#define INTERRUPT_ID_EMAC2 (INTERNAL_ISR_TABLE_OFFSET + 7)
++#define INTERRUPT_ID_EMAC1 (INTERNAL_ISR_TABLE_OFFSET + 8)
++#define INTERRUPT_ID_EPHY (INTERNAL_ISR_TABLE_OFFSET + 9)
++#define INTERRUPT_ID_M2M (INTERNAL_ISR_TABLE_OFFSET + 10)
++#define INTERRUPT_ID_ACLC (INTERNAL_ISR_TABLE_OFFSET + 11)
++#define INTERRUPT_ID_USBH (INTERNAL_ISR_TABLE_OFFSET + 12)
++#define INTERRUPT_ID_SDRAM (INTERNAL_ISR_TABLE_OFFSET + 13)
++#define INTERRUPT_ID_USB_CNTL_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 14)
++#define INTERRUPT_ID_USB_CNTL_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 15)
++#define INTERRUPT_ID_USB_BULK_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 16)
++#define INTERRUPT_ID_USB_BULK_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 17)
++#define INTERRUPT_ID_USB_ISO_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 18)
++#define INTERRUPT_ID_USB_ISO_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 19)
++#define INTERRUPT_ID_EMAC1_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 20)
++#define INTERRUPT_ID_EMAC1_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 21)
++#define INTERRUPT_ID_EMAC2_RX_DMA (INTERNAL_ISR_TABLE_OFFSET + 22)
++#define INTERRUPT_ID_EMAC2_TX_DMA (INTERNAL_ISR_TABLE_OFFSET + 23)
++#define INTERRUPT_ID_MPI (INTERNAL_ISR_TABLE_OFFSET + 24)
++#define INTERRUPT_ID_DG (INTERNAL_ISR_TABLE_OFFSET + 25)
++
++#ifdef __cplusplus
++ }
++#endif
++
++#endif /* __BCM6348_H */
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/6348_map_part.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,508 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __BCM6348_MAP_H
++#define __BCM6348_MAP_H
++
++#if __cplusplus
++extern "C" {
++#endif
++
++#include "bcmtypes.h"
++
++#define PERF_BASE 0xfffe0000
++#define TIMR_BASE 0xfffe0200
++#define UART_BASE 0xfffe0300
++#define GPIO_BASE 0xfffe0400
++#define MPI_BASE 0xfffe2000 /* MPI control registers */
++#define USB_HOST_BASE 0xfffe1b00 /* USB host registers */
++#define USB_HOST_NON_OHCI 0xfffe1c00 /* USB host non-OHCI registers */
++
++typedef struct PerfControl {
++ uint32 RevID;
++ uint16 testControl;
++ uint16 blkEnables;
++#define EMAC_CLK_EN 0x0010
++#define SAR_CLK_EN 0x0020
++#define USBS_CLK_EN 0x0040
++#define USBH_CLK_EN 0x0100
++
++ uint32 pll_control;
++#define SOFT_RESET 0x00000001
++
++ uint32 IrqMask;
++ uint32 IrqStatus;
++
++ uint32 ExtIrqCfg;
++#define EI_SENSE_SHFT 0
++#define EI_STATUS_SHFT 5
++#define EI_CLEAR_SHFT 10
++#define EI_MASK_SHFT 15
++#define EI_INSENS_SHFT 20
++#define EI_LEVEL_SHFT 25
++
++ uint32 unused[4]; /* (18) */
++ uint32 BlockSoftReset; /* (28) */
++#define BSR_SPI 0x00000001
++#define BSR_EMAC 0x00000004
++#define BSR_USBH 0x00000008
++#define BSR_USBS 0x00000010
++#define BSR_ADSL 0x00000020
++#define BSR_DMAMEM 0x00000040
++#define BSR_SAR 0x00000080
++#define BSR_ACLC 0x00000100
++#define BSR_ADSL_MIPS_PLL 0x00000400
++#define BSR_ALL_BLOCKS \
++ (BSR_SPI | BSR_EMAC | BSR_USBH | BSR_USBS | BSR_ADSL | BSR_DMAMEM | \
++ BSR_SAR | BSR_ACLC | BSR_ADSL_MIPS_PLL)
++ uint32 unused2[2]; /* (2c) */
++ uint32 PllStrap; /* (34) */
++#define PLL_N1_SHFT 20
++#define PLL_N1_MASK (7<<PLL_N1_SHFT)
++#define PLL_N2_SHFT 15
++#define PLL_N2_MASK (0x1f<<PLL_N2_SHFT)
++#define PLL_M1_REF_SHFT 12
++#define PLL_M1_REF_MASK (7<<PLL_M1_REF_SHFT)
++#define PLL_M2_REF_SHFT 9
++#define PLL_M2_REF_MASK (7<<PLL_M2_REF_SHFT)
++#define PLL_M1_CPU_SHFT 6
++#define PLL_M1_CPU_MASK (7<<PLL_M1_CPU_SHFT)
++#define PLL_M1_BUS_SHFT 3
++#define PLL_M1_BUS_MASK (7<<PLL_M1_BUS_SHFT)
++#define PLL_M2_BUS_SHFT 0
++#define PLL_M2_BUS_MASK (7<<PLL_M2_BUS_SHFT)
++} PerfControl;
++
++#define PERF ((volatile PerfControl * const) PERF_BASE)
++
++typedef struct Timer {
++ uint16 unused0;
++ byte TimerMask;
++#define TIMER0EN 0x01
++#define TIMER1EN 0x02
++#define TIMER2EN 0x04
++ byte TimerInts;
++#define TIMER0 0x01
++#define TIMER1 0x02
++#define TIMER2 0x04
++#define WATCHDOG 0x08
++ uint32 TimerCtl0;
++ uint32 TimerCtl1;
++ uint32 TimerCtl2;
++#define TIMERENABLE 0x80000000
++#define RSTCNTCLR 0x40000000
++ uint32 TimerCnt0;
++ uint32 TimerCnt1;
++ uint32 TimerCnt2;
++ uint32 WatchDogDefCount;
++
++ /* Write 0xff00 0x00ff to Start timer
++ * Write 0xee00 0x00ee to Stop and re-load default count
++ * Read from this register returns current watch dog count
++ */
++ uint32 WatchDogCtl;
++
++ /* Number of 40-MHz ticks for WD Reset pulse to last */
++ uint32 WDResetCount;
++} Timer;
++
++#define TIMER ((volatile Timer * const) TIMR_BASE)
++
++typedef struct UartChannel {
++ byte unused0;
++ byte control;
++#define BRGEN 0x80 /* Control register bit defs */
++#define TXEN 0x40
++#define RXEN 0x20
++#define LOOPBK 0x10
++#define TXPARITYEN 0x08
++#define TXPARITYEVEN 0x04
++#define RXPARITYEN 0x02
++#define RXPARITYEVEN 0x01
++
++ byte config;
++#define XMITBREAK 0x40
++#define BITS5SYM 0x00
++#define BITS6SYM 0x10
++#define BITS7SYM 0x20
++#define BITS8SYM 0x30
++#define ONESTOP 0x07
++#define TWOSTOP 0x0f
++ /* 4-LSBS represent STOP bits/char
++ * in 1/8 bit-time intervals. Zero
++ * represents 1/8 stop bit interval.
++ * Fifteen represents 2 stop bits.
++ */
++ byte fifoctl;
++#define RSTTXFIFOS 0x80
++#define RSTRXFIFOS 0x40
++ /* 5-bit TimeoutCnt is in low bits of this register.
++ * This count represents the number of characters
++ * idle times before setting receive Irq when below threshold
++ */
++ uint32 baudword;
++ /* When divide SysClk/2/(1+baudword) we should get 32*bit-rate
++ */
++
++ byte txf_levl; /* Read-only fifo depth */
++ byte rxf_levl; /* Read-only fifo depth */
++ byte fifocfg; /* Upper 4-bits are TxThresh, Lower are
++ * RxThreshold. Irq can be asserted
++ * when rx fifo> thresh, txfifo<thresh
++ */
++ byte prog_out; /* Set value of DTR (Bit0), RTS (Bit1)
++ * if these bits are also enabled to GPIO_o
++ */
++#define DTREN 0x01
++#define RTSEN 0x02
++
++ byte unused1;
++ byte DeltaIPEdgeNoSense; /* Low 4-bits, set corr bit to 1 to
++ * detect irq on rising AND falling
++ * edges for corresponding GPIO_i
++ * if enabled (edge insensitive)
++ */
++ byte DeltaIPConfig_Mask; /* Upper 4 bits: 1 for posedge sense
++ * 0 for negedge sense if
++ * not configured for edge
++ * insensitive (see above)
++ * Lower 4 bits: Mask to enable change
++ * detection IRQ for corresponding
++ * GPIO_i
++ */
++ byte DeltaIP_SyncIP; /* Upper 4 bits show which bits
++ * have changed (may set IRQ).
++ * read automatically clears bit
++ * Lower 4 bits are actual status
++ */
++
++ uint16 intMask; /* Same Bit defs for Mask and status */
++ uint16 intStatus;
++#define DELTAIP 0x0001
++#define TXUNDERR 0x0002
++#define TXOVFERR 0x0004
++#define TXFIFOTHOLD 0x0008
++#define TXREADLATCH 0x0010
++#define TXFIFOEMT 0x0020
++#define RXUNDERR 0x0040
++#define RXOVFERR 0x0080
++#define RXTIMEOUT 0x0100
++#define RXFIFOFULL 0x0200
++#define RXFIFOTHOLD 0x0400
++#define RXFIFONE 0x0800
++#define RXFRAMERR 0x1000
++#define RXPARERR 0x2000
++#define RXBRK 0x4000
++
++ uint16 unused2;
++ uint16 Data; /* Write to TX, Read from RX */
++ /* bits 11:8 are BRK,PAR,FRM errors */
++
++ uint32 unused3;
++ uint32 unused4;
++} Uart;
++
++#define UART ((volatile Uart * const) UART_BASE)
++
++typedef struct GpioControl {
++ uint32 GPIODir_high; /* bits 36:32 */
++ uint32 GPIODir; /* bits 31:00 */
++ uint32 GPIOio_high; /* bits 36:32 */
++ uint32 GPIOio; /* bits 31:00 */
++ uint32 LEDCtrl;
++#define LED3_STROBE 0x08000000
++#define LED2_STROBE 0x04000000
++#define LED1_STROBE 0x02000000
++#define LED0_STROBE 0x01000000
++#define LED_TEST 0x00010000
++#define LED3_DISABLE_LINK_ACT 0x00008000
++#define LED2_DISABLE_LINK_ACT 0x00004000
++#define LED1_DISABLE_LINK_ACT 0x00002000
++#define LED0_DISABLE_LINK_ACT 0x00001000
++#define LED_INTERVAL_SET_MASK 0x00000f00
++#define LED_INTERVAL_SET_320MS 0x00000500
++#define LED_INTERVAL_SET_160MS 0x00000400
++#define LED_INTERVAL_SET_80MS 0x00000300
++#define LED_INTERVAL_SET_40MS 0x00000200
++#define LED_INTERVAL_SET_20MS 0x00000100
++#define LED3_ON 0x00000080
++#define LED2_ON 0x00000040
++#define LED1_ON 0x00000020
++#define LED0_ON 0x00000010
++#define LED3_ENABLE 0x00000008
++#define LED2_ENABLE 0x00000004
++#define LED1_ENABLE 0x00000002
++#define LED0_ENABLE 0x00000001
++ uint32 SpiSlaveCfg;
++#define SPI_SLAVE_RESET 0x00010000
++#define SPI_RESTRICT 0x00000400
++#define SPI_DELAY_DISABLE 0x00000200
++#define SPI_PROBE_MUX_SEL_MASK 0x000001e0
++#define SPI_SER_ADDR_CFG_MASK 0x0000000c
++#define SPI_MODE 0x00000001
++ uint32 GPIOMode;
++#define GROUP4_DIAG 0x00090000
++#define GROUP4_UTOPIA 0x00080000
++#define GROUP4_LEGACY_LED 0x00030000
++#define GROUP4_MII_SNOOP 0x00020000
++#define GROUP4_EXT_EPHY 0x00010000
++#define GROUP3_DIAG 0x00009000
++#define GROUP3_UTOPIA 0x00008000
++#define GROUP3_EXT_MII 0x00007000
++#define GROUP2_DIAG 0x00000900
++#define GROUP2_PCI 0x00000500
++#define GROUP1_DIAG 0x00000090
++#define GROUP1_UTOPIA 0x00000080
++#define GROUP1_SPI_UART 0x00000060
++#define GROUP1_SPI_MASTER 0x00000060
++#define GROUP1_MII_PCCARD 0x00000040
++#define GROUP1_MII_SNOOP 0x00000020
++#define GROUP1_EXT_EPHY 0x00000010
++#define GROUP0_DIAG 0x00000009
++#define GROUP0_EXT_MII 0x00000007
++
++} GpioControl;
++
++#define GPIO ((volatile GpioControl * const) GPIO_BASE)
++
++/* Number to mask conversion macro used for GPIODir and GPIOio */
++#define GPIO_NUM_TOTAL_BITS_MASK 0x3f
++#define GPIO_NUM_MAX_BITS_MASK 0x1f
++#define GPIO_NUM_TO_MASK(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) < 32) ? (1 << ((X) & GPIO_NUM_MAX_BITS_MASK)) : (0) )
++
++/* Number to mask conversion macro used for GPIODir_high and GPIOio_high */
++#define GPIO_NUM_MAX_BITS_MASK_HIGH 0x07
++#define GPIO_NUM_TO_MASK_HIGH(X) ( (((X) & GPIO_NUM_TOTAL_BITS_MASK) >= 32) ? (1 << ((X-32) & GPIO_NUM_MAX_BITS_MASK_HIGH)) : (0) )
++
++
++/*
++** External Bus Interface
++*/
++typedef struct EbiChipSelect {
++ uint32 base; /* base address in upper 24 bits */
++#define EBI_SIZE_8K 0
++#define EBI_SIZE_16K 1
++#define EBI_SIZE_32K 2
++#define EBI_SIZE_64K 3
++#define EBI_SIZE_128K 4
++#define EBI_SIZE_256K 5
++#define EBI_SIZE_512K 6
++#define EBI_SIZE_1M 7
++#define EBI_SIZE_2M 8
++#define EBI_SIZE_4M 9
++#define EBI_SIZE_8M 10
++#define EBI_SIZE_16M 11
++#define EBI_SIZE_32M 12
++#define EBI_SIZE_64M 13
++#define EBI_SIZE_128M 14
++#define EBI_SIZE_256M 15
++ uint32 config;
++#define EBI_ENABLE 0x00000001 /* .. enable this range */
++#define EBI_WAIT_STATES 0x0000000e /* .. mask for wait states */
++#define EBI_WTST_SHIFT 1 /* .. for shifting wait states */
++#define EBI_WORD_WIDE 0x00000010 /* .. 16-bit peripheral, else 8 */
++#define EBI_WREN 0x00000020 /* enable posted writes */
++#define EBI_POLARITY 0x00000040 /* .. set to invert something,
++ ** don't know what yet */
++#define EBI_TS_TA_MODE 0x00000080 /* .. use TS/TA mode */
++#define EBI_TS_SEL 0x00000100 /* .. drive tsize, not bs_b */
++#define EBI_FIFO 0x00000200 /* .. use fifo */
++#define EBI_RE 0x00000400 /* .. Reverse Endian */
++} EbiChipSelect;
++
++typedef struct MpiRegisters {
++ EbiChipSelect cs[7]; /* size chip select configuration */
++#define EBI_CS0_BASE 0
++#define EBI_CS1_BASE 1
++#define EBI_CS2_BASE 2
++#define EBI_CS3_BASE 3
++#define PCMCIA_COMMON_BASE 4
++#define PCMCIA_ATTRIBUTE_BASE 5
++#define PCMCIA_IO_BASE 6
++ uint32 unused0[2]; /* reserved */
++ uint32 ebi_control; /* ebi control */
++ uint32 unused1[4]; /* reserved */
++#define EBI_ACCESS_TIMEOUT 0x000007FF
++ uint32 pcmcia_cntl1; /* pcmcia control 1 */
++#define PCCARD_CARD_RESET 0x00040000
++#define CARDBUS_ENABLE 0x00008000
++#define PCMCIA_ENABLE 0x00004000
++#define PCMCIA_GPIO_ENABLE 0x00002000
++#define CARDBUS_IDSEL 0x00001F00
++#define VS2_OEN 0x00000080
++#define VS1_OEN 0x00000040
++#define VS2_OUT 0x00000020
++#define VS1_OUT 0x00000010
++#define VS2_IN 0x00000008
++#define VS1_IN 0x00000004
++#define CD2_IN 0x00000002
++#define CD1_IN 0x00000001
++#define VS_MASK 0x0000000C
++#define CD_MASK 0x00000003
++ uint32 unused2; /* reserved */
++ uint32 pcmcia_cntl2; /* pcmcia control 2 */
++#define PCMCIA_BYTESWAP_DIS 0x00000002
++#define PCMCIA_HALFWORD_EN 0x00000001
++#define RW_ACTIVE_CNT_BIT 2
++#define INACTIVE_CNT_BIT 8
++#define CE_SETUP_CNT_BIT 16
++#define CE_HOLD_CNT_BIT 24
++ uint32 unused3[40]; /* reserved */
++
++ uint32 sp0range; /* PCI to internal system bus address space */
++ uint32 sp0remap;
++ uint32 sp0cfg;
++ uint32 sp1range;
++ uint32 sp1remap;
++ uint32 sp1cfg;
++
++ uint32 EndianCfg;
++
++ uint32 l2pcfgctl; /* internal system bus to PCI IO/Cfg control */
++#define DIR_CFG_SEL 0x80000000 /* change from PCI I/O access to PCI config access */
++#define DIR_CFG_USEREG 0x40000000 /* use this register info for PCI configuration access */
++#define DEVICE_NUMBER 0x00007C00 /* device number for the PCI configuration access */
++#define FUNC_NUMBER 0x00000300 /* function number for the PCI configuration access */
++#define REG_NUMBER 0x000000FC /* register number for the PCI configuration access */
++#define CONFIG_TYPE 0x00000003 /* configuration type for the PCI configuration access */
++
++ uint32 l2pmrange1; /* internal system bus to PCI memory space */
++#define PCI_SIZE_64K 0xFFFF0000
++#define PCI_SIZE_128K 0xFFFE0000
++#define PCI_SIZE_256K 0xFFFC0000
++#define PCI_SIZE_512K 0xFFF80000
++#define PCI_SIZE_1M 0xFFF00000
++#define PCI_SIZE_2M 0xFFE00000
++#define PCI_SIZE_4M 0xFFC00000
++#define PCI_SIZE_8M 0xFF800000
++#define PCI_SIZE_16M 0xFF000000
++#define PCI_SIZE_32M 0xFE000000
++ uint32 l2pmbase1; /* kseg0 or kseg1 address & 0x1FFFFFFF */
++ uint32 l2pmremap1;
++#define CARDBUS_MEM 0x00000004
++#define MEM_WINDOW_EN 0x00000001
++ uint32 l2pmrange2;
++ uint32 l2pmbase2;
++ uint32 l2pmremap2;
++ uint32 l2piorange; /* internal system bus to PCI I/O space */
++ uint32 l2piobase;
++ uint32 l2pioremap;
++
++ uint32 pcimodesel;
++#define PCI2_INT_BUS_RD_PREFECH 0x000000F0
++#define PCI_BAR2_NOSWAP 0x00000002 /* BAR at offset 0x20 */
++#define PCI_BAR1_NOSWAP 0x00000001 /* BAR at affset 0x1c */
++
++ uint32 pciintstat; /* PCI interrupt mask/status */
++#define MAILBOX1_SENT 0x08
++#define MAILBOX0_SENT 0x04
++#define MAILBOX1_MSG_RCV 0x02
++#define MAILBOX0_MSG_RCV 0x01
++ uint32 locbuscntrl; /* internal system bus control */
++#define DIR_U2P_NOSWAP 0x00000002
++#define EN_PCI_GPIO 0x00000001
++ uint32 locintstat; /* internal system bus interrupt mask/status */
++#define CSERR 0x0200
++#define SERR 0x0100
++#define EXT_PCI_INT 0x0080
++#define DIR_FAILED 0x0040
++#define DIR_COMPLETE 0x0020
++#define PCI_CFG 0x0010
++ uint32 unused5[7];
++
++ uint32 mailbox0;
++ uint32 mailbox1;
++
++ uint32 pcicfgcntrl; /* internal system bus PCI configuration control */
++#define PCI_CFG_REG_WRITE_EN 0x00000080
++#define PCI_CFG_ADDR 0x0000003C
++ uint32 pcicfgdata; /* internal system bus PCI configuration data */
++
++ uint32 locch2ctl; /* PCI to interrnal system bus DMA (downstream) local control */
++#define MPI_DMA_HALT 0x00000008 /* idle after finish current memory burst */
++#define MPI_DMA_PKT_HALT 0x00000004 /* idle after an EOP flag is detected */
++#define MPI_DMA_STALL 0x00000002 /* idle after an EOP flag is detected */
++#define MPI_DMA_ENABLE 0x00000001 /* set to enable channel */
++ uint32 locch2intStat;
++#define MPI_DMA_NO_DESC 0x00000004 /* no valid descriptors */
++#define MPI_DMA_DONE 0x00000002 /* packet xfer complete */
++#define MPI_DMA_BUFF_DONE 0x00000001 /* buffer done */
++ uint32 locch2intMask;
++ uint32 unused6;
++ uint32 locch2descaddr;
++ uint32 locch2status1;
++#define LOCAL_DESC_STATE 0xE0000000
++#define PCI_DESC_STATE 0x1C000000
++#define BYTE_DONE 0x03FFC000
++#define RING_ADDR 0x00003FFF
++ uint32 locch2status2;
++#define BUFPTR_OFFSET 0x1FFF0000
++#define PCI_MASTER_STATE 0x000000C0
++#define LOC_MASTER_STATE 0x00000038
++#define CONTROL_STATE 0x00000007
++ uint32 unused7;
++
++ uint32 locch1Ctl; /*internal system bus to PCI DMA (upstream) local control */
++#define DMA_U2P_LE 0x00000200 /* local bus is little endian */
++#define DMA_U2P_NOSWAP 0x00000100 /* lccal bus is little endian but no data swapped */
++ uint32 locch1intstat;
++ uint32 locch1intmask;
++ uint32 unused8;
++ uint32 locch1descaddr;
++ uint32 locch1status1;
++ uint32 locch1status2;
++ uint32 unused9;
++
++ uint32 pcich1ctl; /* internal system bus to PCI DMA PCI control */
++ uint32 pcich1intstat;
++ uint32 pcich1intmask;
++ uint32 pcich1descaddr;
++ uint32 pcich1status1;
++ uint32 pcich1status2;
++
++ uint32 pcich2Ctl; /* PCI to internal system bus DMA PCI control */
++ uint32 pcich2intstat;
++ uint32 pcich2intmask;
++ uint32 pcich2descaddr;
++ uint32 pcich2status1;
++ uint32 pcich2status2;
++
++ uint32 perm_id; /* permanent device and vendor id */
++ uint32 perm_rev; /* permanent revision id */
++} MpiRegisters;
++
++#define MPI ((volatile MpiRegisters * const) MPI_BASE)
++
++/* PCI configuration address space start offset 0x40 */
++#define BRCM_PCI_CONFIG_TIMER 0x40
++#define BRCM_PCI_CONFIG_TIMER_RETRY_MASK 0x0000FF00
++#define BRCM_PCI_CONFIG_TIMER_TRDY_MASK 0x000000FF
++
++/* USB host non-Open HCI register, USB_HOST_NON_OHCI, bit definitions. */
++#define NON_OHCI_ENABLE_PORT1 0x00000001 /* Use USB port 1 for host, not dev */
++#define NON_OHCI_BYTE_SWAP 0x00000008 /* Swap USB host registers */
++
++#define USBH_NON_OHCI ((volatile unsigned long * const) USB_HOST_NON_OHCI)
++
++#if __cplusplus
++}
++#endif
++
++#endif
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmTag.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmTag.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmTag.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmTag.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,153 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++//**************************************************************************************
++// File Name : bcmTag.h
++//
++// Description: add tag with validation system to the firmware image file to be uploaded
++// via http
++//
++// Created : 02/28/2002 seanl
++//**************************************************************************************
++
++#ifndef _BCMTAG_H_
++#define _BCMTAG_H_
++
++
++#define BCM_SIG_1 "Broadcom Corporation"
++#define BCM_SIG_2 "ver. 2.0" // was "firmware version 2.0" now it is split 6 char out for chip id.
++
++#define BCM_TAG_VER "6"
++#define BCM_TAG_VER_LAST "26"
++
++// file tag (head) structure all is in clear text except validationTokens (crc, md5, sha1, etc). Total: 128 unsigned chars
++#define TAG_LEN 256
++#define TAG_VER_LEN 4
++#define SIG_LEN 20
++#define SIG_LEN_2 14 // Original second SIG = 20 is now devided into 14 for SIG_LEN_2 and 6 for CHIP_ID
++#define CHIP_ID_LEN 6
++#define IMAGE_LEN 10
++#define ADDRESS_LEN 12
++#define FLAG_LEN 2
++#define TOKEN_LEN 20
++#define BOARD_ID_LEN 16
++#define RESERVED_LEN (TAG_LEN - TAG_VER_LEN - SIG_LEN - SIG_LEN_2 - CHIP_ID_LEN - BOARD_ID_LEN - \
++ (4*IMAGE_LEN) - (3*ADDRESS_LEN) - (3*FLAG_LEN) - (2*TOKEN_LEN))
++
++
++// TAG for downloadable image (kernel plus file system)
++typedef struct _FILE_TAG
++{
++ unsigned char tagVersion[TAG_VER_LEN]; // tag version. Will be 2 here.
++ unsigned char signiture_1[SIG_LEN]; // text line for company info
++ unsigned char signiture_2[SIG_LEN_2]; // additional info (can be version number)
++ unsigned char chipId[CHIP_ID_LEN]; // chip id
++ unsigned char boardId[BOARD_ID_LEN]; // board id
++ unsigned char bigEndian[FLAG_LEN]; // if = 1 - big, = 0 - little endia of the host
++ unsigned char totalImageLen[IMAGE_LEN]; // the sum of all the following length
++ unsigned char cfeAddress[ADDRESS_LEN]; // if non zero, cfe starting address
++ unsigned char cfeLen[IMAGE_LEN]; // if non zero, cfe size in clear ASCII text.
++ unsigned char rootfsAddress[ADDRESS_LEN]; // if non zero, filesystem starting address
++ unsigned char rootfsLen[IMAGE_LEN]; // if non zero, filesystem size in clear ASCII text.
++ unsigned char kernelAddress[ADDRESS_LEN]; // if non zero, kernel starting address
++ unsigned char kernelLen[IMAGE_LEN]; // if non zero, kernel size in clear ASCII text.
++ unsigned char dualImage[FLAG_LEN]; // if 1, dual image
++ unsigned char inactiveLen[FLAG_LEN]; // if 1, the image is INACTIVE; if 0, active
++ unsigned char reserved[RESERVED_LEN]; // reserved for later use
++ unsigned char imageValidationToken[TOKEN_LEN];// image validation token - can be crc, md5, sha; for
++ // now will be 4 unsigned char crc
++ unsigned char tagValidationToken[TOKEN_LEN]; // validation token for tag(from signiture_1 to end of // mageValidationToken)
++} FILE_TAG, *PFILE_TAG;
++
++#define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
++#define CRC_LEN 4
++
++// only included if for bcmTag.exe program
++#ifdef BCMTAG_EXE_USE
++
++static unsigned long 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
++};
++#endif // BCMTAG_USE
++
++
++#endif // _BCMTAG_H_
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcm_intr.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,59 @@
++/*
++<:copyright-gpl
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __BCM_INTR_H
++#define __BCM_INTR_H
++
++#ifdef __cplusplus
++ extern "C" {
++#endif
++
++#if defined(CONFIG_BCM96338)
++#include <6338_intr.h>
++#endif
++#if defined(CONFIG_BCM96345)
++#include <6345_intr.h>
++#endif
++#if defined(CONFIG_BCM96348)
++#include <6348_intr.h>
++#endif
++
++/* defines */
++struct pt_regs;
++typedef int (*FN_HANDLER) (int, void *, struct pt_regs *);
++
++/* prototypes */
++extern void enable_brcm_irq(unsigned int irq);
++extern void disable_brcm_irq(unsigned int irq);
++extern int request_external_irq(unsigned int irq,
++ FN_HANDLER handler, unsigned long irqflags,
++ const char * devname, void *dev_id);
++extern unsigned int BcmHalMapInterrupt(FN_HANDLER isr, unsigned int param,
++ unsigned int interruptId);
++extern void dump_intr_regs(void);
++
++/* compatibility definitions */
++#define BcmHalInterruptEnable(irq) enable_brcm_irq( irq )
++#define BcmHalInterruptDisable(irq) disable_brcm_irq( irq )
++
++#ifdef __cplusplus
++ }
++#endif
++
++#endif
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcm_map_part.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,34 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++#ifndef __BCM_MAP_PART_H
++#define __BCM_MAP_PART_H
++
++#if defined(CONFIG_BCM96338)
++#include <6338_map_part.h>
++#endif
++#if defined(CONFIG_BCM96345)
++#include <6345_map_part.h>
++#endif
++#if defined(CONFIG_BCM96348)
++#include <6348_map_part.h>
++#endif
++
++#endif
++
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmpci.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmpci.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmpci.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmpci.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,87 @@
++/*
++<:copyright-gpl
++ Copyright 2004 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++//
++// bcmpci.h - bcm96348 PCI, Cardbus, and PCMCIA definition
++//
++#ifndef BCMPCI_H
++#define BCMPCI_H
++
++/* Memory window in internal system bus address space */
++#define BCM_PCI_MEM_BASE 0x08000000
++/* IO window in internal system bus address space */
++#define BCM_PCI_IO_BASE 0x0C000000
++
++#define BCM_PCI_ADDR_MASK 0x1fffffff
++
++/* Memory window size (range) */
++#define BCM_PCI_MEM_SIZE_16MB 0x01000000
++/* IO window size (range) */
++#define BCM_PCI_IO_SIZE_64KB 0x00010000
++
++/* PCI Configuration and I/O space acesss */
++#define BCM_PCI_CFG(d, f, o) ( (d << 11) | (f << 8) | (o/4 << 2) )
++
++/* fake USB PCI slot */
++#define USB_HOST_SLOT 9
++#define USB_BAR0_MEM_SIZE 0x0800
++
++#define BCM_HOST_MEM_SPACE1 0x10000000
++#define BCM_HOST_MEM_SPACE2 0x00000000
++
++/*
++ * EBI bus clock is 33MHz and share with PCI bus
++ * each clock cycle is 30ns.
++ */
++/* attribute memory access wait cnt for 4306 */
++#define PCMCIA_ATTR_CE_HOLD 3 // data hold time 70ns
++#define PCMCIA_ATTR_CE_SETUP 3 // data setup time 50ns
++#define PCMCIA_ATTR_INACTIVE 6 // time between read/write cycles 180ns. For the total cycle time 600ns (cnt1+cnt2+cnt3+cnt4)
++#define PCMCIA_ATTR_ACTIVE 10 // OE/WE pulse width 300ns
++
++/* common memory access wait cnt for 4306 */
++#define PCMCIA_MEM_CE_HOLD 1 // data hold time 30ns
++#define PCMCIA_MEM_CE_SETUP 1 // data setup time 30ns
++#define PCMCIA_MEM_INACTIVE 2 // time between read/write cycles 40ns. For the total cycle time 250ns (cnt1+cnt2+cnt3+cnt4)
++#define PCMCIA_MEM_ACTIVE 5 // OE/WE pulse width 150ns
++
++#define PCCARD_VCC_MASK 0x00070000 // Mask Reset also
++#define PCCARD_VCC_33V 0x00010000
++#define PCCARD_VCC_50V 0x00020000
++
++typedef enum {
++ MPI_CARDTYPE_NONE, // No Card in slot
++ MPI_CARDTYPE_PCMCIA, // 16-bit PCMCIA card in slot
++ MPI_CARDTYPE_CARDBUS, // 32-bit CardBus card in slot
++} CardType;
++
++#define CARDBUS_SLOT 0 // Slot 0 is default for CardBus
++
++#define pcmciaAttrOffset 0x00200000
++#define pcmciaMemOffset 0x00000000
++// Needs to be right above PCI I/O space. Give 0x8000 (32K) to PCMCIA.
++#define pcmciaIoOffset (BCM_PCI_IO_BASE + 0x80000)
++// Base Address is that mapped into the MPI ChipSelect registers.
++// UBUS bridge MemoryWindow 0 outputs a 0x00 for the base.
++#define pcmciaBase 0xbf000000
++#define pcmciaAttr (pcmciaAttrOffset | pcmciaBase)
++#define pcmciaMem (pcmciaMemOffset | pcmciaBase)
++#define pcmciaIo (pcmciaIoOffset | pcmciaBase)
++
++#endif
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/bcmtypes.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,163 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++
++//
++// bcmtypes.h - misc useful typedefs
++//
++#ifndef BCMTYPES_H
++#define BCMTYPES_H
++
++// These are also defined in typedefs.h in the application area, so I need to
++// protect against re-definition.
++
++#ifndef _TYPEDEFS_H_
++typedef unsigned char uint8;
++typedef unsigned short uint16;
++typedef unsigned long uint32;
++typedef signed char int8;
++typedef signed short int16;
++typedef signed long int32;
++#if !defined(__cplusplus)
++typedef int bool;
++#endif
++#endif
++
++typedef unsigned char byte;
++// typedef unsigned long sem_t;
++
++typedef unsigned long HANDLE,*PULONG,DWORD,*PDWORD;
++typedef signed long LONG,*PLONG;
++
++typedef unsigned int *PUINT;
++typedef signed int INT;
++
++typedef unsigned short *PUSHORT;
++typedef signed short SHORT,*PSHORT;
++typedef unsigned short WORD,*PWORD;
++
++typedef unsigned char *PUCHAR;
++typedef signed char *PCHAR;
++
++typedef void *PVOID;
++
++typedef unsigned char BOOLEAN, *PBOOL, *PBOOLEAN;
++
++typedef unsigned char BYTE,*PBYTE;
++
++//#ifndef __GNUC__
++//The following has been defined in Vxworks internally: vxTypesOld.h
++//redefine under vxworks will cause error
++typedef signed int *PINT;
++
++typedef signed char INT8;
++typedef signed short INT16;
++typedef signed long INT32;
++
++typedef unsigned char UINT8;
++typedef unsigned short UINT16;
++typedef unsigned long UINT32;
++
++typedef unsigned char UCHAR;
++typedef unsigned short USHORT;
++typedef unsigned int UINT;
++typedef unsigned long ULONG;
++
++typedef void VOID;
++typedef unsigned char BOOL;
++
++//#endif /* __GNUC__ */
++
++
++// These are also defined in typedefs.h in the application area, so I need to
++// protect against re-definition.
++#ifndef TYPEDEFS_H
++
++// Maximum and minimum values for a signed 16 bit integer.
++#define MAX_INT16 32767
++#define MIN_INT16 -32768
++
++// Useful for true/false return values. This uses the
++// Taligent notation (k for constant).
++typedef enum
++{
++ kFalse = 0,
++ kTrue = 1
++} Bool;
++
++#endif
++
++/* macros to protect against unaligned accesses */
++
++#if 0
++/* first arg is an address, second is a value */
++#define PUT16( a, d ) { \
++ *((byte *)a) = (byte)((d)>>8); \
++ *(((byte *)a)+1) = (byte)(d); \
++}
++
++#define PUT32( a, d ) { \
++ *((byte *)a) = (byte)((d)>>24); \
++ *(((byte *)a)+1) = (byte)((d)>>16); \
++ *(((byte *)a)+2) = (byte)((d)>>8); \
++ *(((byte *)a)+3) = (byte)(d); \
++}
++
++/* first arg is an address, returns a value */
++#define GET16( a ) ( \
++ (*((byte *)a) << 8) | \
++ (*(((byte *)a)+1)) \
++)
++
++#define GET32( a ) ( \
++ (*((byte *)a) << 24) | \
++ (*(((byte *)a)+1) << 16) | \
++ (*(((byte *)a)+2) << 8) | \
++ (*(((byte *)a)+3)) \
++)
++#endif
++
++#ifndef YES
++#define YES 1
++#endif
++
++#ifndef NO
++#define NO 0
++#endif
++
++#ifndef IN
++#define IN
++#endif
++
++#ifndef OUT
++#define OUT
++#endif
++
++#ifndef TRUE
++#define TRUE 1
++#endif
++
++#ifndef FALSE
++#define FALSE 0
++#endif
++
++#define READ32(addr) (*(volatile UINT32 *)((ULONG)&addr))
++#define READ16(addr) (*(volatile UINT16 *)((ULONG)&addr))
++#define READ8(addr) (*(volatile UINT8 *)((ULONG)&addr))
++
++#endif
+diff -Naurp linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/board.h linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/board.h
+--- linux-2.6.16.7-generic-patched/bcmdrivers/opensource/include/bcm963xx/board.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/bcmdrivers/opensource/include/bcm963xx/board.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,374 @@
++/*
++<:copyright-gpl
++ Copyright 2002 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++:>
++*/
++/***********************************************************************/
++/* */
++/* MODULE: board.h */
++/* DATE: 97/02/18 */
++/* PURPOSE: Board specific information. This module should include */
++/* all base device addresses and board specific macros. */
++/* */
++/***********************************************************************/
++#ifndef _BOARD_H
++#define _BOARD_H
++
++#if __cplusplus
++extern "C" {
++#endif
++/*****************************************************************************/
++/* Misc board definitions */
++/*****************************************************************************/
++
++#define DYING_GASP_API
++
++/*****************************************************************************/
++/* Physical Memory Map */
++/*****************************************************************************/
++
++#define PHYS_DRAM_BASE 0x00000000 /* Dynamic RAM Base */
++#define PHYS_FLASH_BASE 0x1FC00000 /* Flash Memory */
++
++/*****************************************************************************/
++/* Note that the addresses above are physical addresses and that programs */
++/* have to use converted addresses defined below: */
++/*****************************************************************************/
++#define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
++#define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
++#define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
++
++/*****************************************************************************/
++/* Select the PLL value to get the desired CPU clock frequency. */
++/* */
++/* */
++/*****************************************************************************/
++#define FPERIPH 50000000
++
++#define ONEK 1024
++#define BLK64K (64*ONEK)
++#define FLASH45_BLKS_BOOT_ROM 1
++#define FLASH45_LENGTH_BOOT_ROM (FLASH45_BLKS_BOOT_ROM * BLK64K)
++#define FLASH_RESERVED_AT_END (64*ONEK) /*reserved for PSI, scratch pad*/
++
++/*****************************************************************************/
++/* Note that the addresses above are physical addresses and that programs */
++/* have to use converted addresses defined below: */
++/*****************************************************************************/
++#define DRAM_BASE (0x80000000 | PHYS_DRAM_BASE) /* cached DRAM */
++#define DRAM_BASE_NOCACHE (0xA0000000 | PHYS_DRAM_BASE) /* uncached DRAM */
++#define FLASH_BASE (0xA0000000 | PHYS_FLASH_BASE) /* uncached Flash */
++
++/*****************************************************************************/
++/* Select the PLL value to get the desired CPU clock frequency. */
++/* */
++/* */
++/*****************************************************************************/
++#define FPERIPH 50000000
++
++#define SDRAM_TYPE_ADDRESS_OFFSET 16
++#define NVRAM_DATA_OFFSET 0x0580
++#define NVRAM_DATA_ID 0x0f1e2d3c
++#define BOARD_SDRAM_TYPE *(unsigned long *) \
++ (FLASH_BASE + SDRAM_TYPE_ADDRESS_OFFSET)
++
++#define ONEK 1024
++#define BLK64K (64*ONEK)
++
++// nvram and psi flash definitions for 45
++#define FLASH45_LENGTH_NVRAM ONEK // 1k nvram
++#define NVRAM_PSI_DEFAULT 24 // default psi in K byes
++
++/*****************************************************************************/
++/* NVRAM Offset and definition */
++/*****************************************************************************/
++
++#define NVRAM_VERSION_NUMBER 2
++#define NVRAM_VERSION_NUMBER_ADDRESS 0
++
++#define NVRAM_BOOTLINE_LEN 256
++#define NVRAM_BOARD_ID_STRING_LEN 16
++#define NVRAM_MAC_ADDRESS_LEN 6
++#define NVRAM_MAC_COUNT_MAX 32
++
++/*****************************************************************************/
++/* Misc Offsets */
++/*****************************************************************************/
++
++#define CFE_VERSION_OFFSET 0x0570
++#define CFE_VERSION_MARK_SIZE 5
++#define CFE_VERSION_SIZE 5
++
++typedef struct
++{
++ unsigned long ulVersion;
++ char szBootline[NVRAM_BOOTLINE_LEN];
++ char szBoardId[NVRAM_BOARD_ID_STRING_LEN];
++ unsigned long ulReserved1[2];
++ unsigned long ulNumMacAddrs;
++ unsigned char ucaBaseMacAddr[NVRAM_MAC_ADDRESS_LEN];
++ char chReserved[2];
++ unsigned long ulCheckSum;
++} NVRAM_DATA, *PNVRAM_DATA;
++
++
++/*****************************************************************************/
++/* board ioctl calls for flash, led and some other utilities */
++/*****************************************************************************/
++
++
++/* Defines. for board driver */
++#define BOARD_IOCTL_MAGIC 'B'
++#define BOARD_DRV_MAJOR 206
++
++#define MAC_ADDRESS_ANY (unsigned long) -1
++
++#define BOARD_IOCTL_FLASH_INIT \
++ _IOWR(BOARD_IOCTL_MAGIC, 0, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_FLASH_WRITE \
++ _IOWR(BOARD_IOCTL_MAGIC, 1, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_FLASH_READ \
++ _IOWR(BOARD_IOCTL_MAGIC, 2, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_NR_PAGES \
++ _IOWR(BOARD_IOCTL_MAGIC, 3, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_DUMP_ADDR \
++ _IOWR(BOARD_IOCTL_MAGIC, 4, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_SET_MEMORY \
++ _IOWR(BOARD_IOCTL_MAGIC, 5, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_MIPS_SOFT_RESET \
++ _IOWR(BOARD_IOCTL_MAGIC, 6, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_LED_CTRL \
++ _IOWR(BOARD_IOCTL_MAGIC, 7, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_ID \
++ _IOWR(BOARD_IOCTL_MAGIC, 8, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_MAC_ADDRESS \
++ _IOWR(BOARD_IOCTL_MAGIC, 9, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_RELEASE_MAC_ADDRESS \
++ _IOWR(BOARD_IOCTL_MAGIC, 10, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_PSI_SIZE \
++ _IOWR(BOARD_IOCTL_MAGIC, 11, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_SDRAM_SIZE \
++ _IOWR(BOARD_IOCTL_MAGIC, 12, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_SET_MONITOR_FD \
++ _IOWR(BOARD_IOCTL_MAGIC, 13, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_WAKEUP_MONITOR_TASK \
++ _IOWR(BOARD_IOCTL_MAGIC, 14, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_BOOTLINE \
++ _IOWR(BOARD_IOCTL_MAGIC, 15, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_SET_BOOTLINE \
++ _IOWR(BOARD_IOCTL_MAGIC, 16, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_BASE_MAC_ADDRESS \
++ _IOWR(BOARD_IOCTL_MAGIC, 17, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_CHIP_ID \
++ _IOWR(BOARD_IOCTL_MAGIC, 18, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_NUM_ENET \
++ _IOWR(BOARD_IOCTL_MAGIC, 19, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_CFE_VER \
++ _IOWR(BOARD_IOCTL_MAGIC, 20, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_ENET_CFG \
++ _IOWR(BOARD_IOCTL_MAGIC, 21, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_WLAN_ANT_INUSE \
++ _IOWR(BOARD_IOCTL_MAGIC, 22, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_SET_TRIGGER_EVENT \
++ _IOWR(BOARD_IOCTL_MAGIC, 23, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_GET_TRIGGER_EVENT \
++ _IOWR(BOARD_IOCTL_MAGIC, 24, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_UNSET_TRIGGER_EVENT \
++ _IOWR(BOARD_IOCTL_MAGIC, 25, BOARD_IOCTL_PARMS)
++
++#define BOARD_IOCTL_SET_SES_LED \
++ _IOWR(BOARD_IOCTL_MAGIC, 26, BOARD_IOCTL_PARMS)
++
++//<<JUNHON, 2004/09/15, get reset button status , tim hou , 05/04/12
++#define RESET_BUTTON_UP 1
++#define RESET_BUTTON_PRESSDOWN 0
++#define BOARD_IOCTL_GET_RESETHOLD \
++ _IOWR(BOARD_IOCTL_MAGIC, 27, BOARD_IOCTL_PARMS)
++//>>JUNHON, 2004/09/15
++
++// for the action in BOARD_IOCTL_PARMS for flash operation
++typedef enum
++{
++ PERSISTENT,
++ NVRAM,
++ BCM_IMAGE_CFE,
++ BCM_IMAGE_FS,
++ BCM_IMAGE_KERNEL,
++ BCM_IMAGE_WHOLE,
++ SCRATCH_PAD,
++ FLASH_SIZE,
++} BOARD_IOCTL_ACTION;
++
++
++typedef struct boardIoctParms
++{
++ char *string;
++ char *buf;
++ int strLen;
++ int offset;
++ BOARD_IOCTL_ACTION action; /* flash read/write: nvram, persistent, bcm image */
++ int result;
++} BOARD_IOCTL_PARMS;
++
++
++// LED defines
++typedef enum
++{
++ kLedAdsl,
++ kLedWireless,
++ kLedUsb,
++ kLedHpna,
++ kLedWanData,
++ kLedPPP,
++ kLedVoip,
++ kLedSes,
++ kLedEnd, // NOTE: Insert the new led name before this one. Alway stay at the end.
++} BOARD_LED_NAME;
++
++typedef enum
++{
++ kLedStateOff, /* turn led off */
++ kLedStateOn, /* turn led on */
++ kLedStateFail, /* turn led on red */
++ kLedStateBlinkOnce, /* blink once, ~100ms and ignore the same call during the 100ms period */
++ kLedStateSlowBlinkContinues, /* slow blink continues at ~600ms interval */
++ kLedStateFastBlinkContinues, /* fast blink continues at ~200ms interval */
++} BOARD_LED_STATE;
++
++
++// virtual and physical map pair defined in board.c
++typedef struct ledmappair
++{
++ BOARD_LED_NAME ledName; // virtual led name
++ BOARD_LED_STATE ledInitState; // initial led state when the board boots.
++ unsigned short ledMask; // physical GPIO pin mask
++ unsigned short ledActiveLow; // reset bit to turn on LED
++ unsigned short ledMaskFail; // physical GPIO pin mask for state failure
++ unsigned short ledActiveLowFail;// reset bit to turn on LED
++} LED_MAP_PAIR, *PLED_MAP_PAIR;
++
++typedef void (*HANDLE_LED_FUNC)(BOARD_LED_NAME ledName, BOARD_LED_STATE ledState);
++
++/* Flash storage address information that is determined by the flash driver. */
++typedef struct flashaddrinfo
++{
++ int flash_persistent_start_blk;
++ int flash_persistent_number_blk;
++ int flash_persistent_length;
++ unsigned long flash_persistent_blk_offset;
++ int flash_scratch_pad_start_blk; // start before psi (SP_BUF_LEN)
++ int flash_scratch_pad_number_blk;
++ int flash_scratch_pad_length;
++ unsigned long flash_scratch_pad_blk_offset;
++ int flash_nvram_start_blk;
++ int flash_nvram_number_blk;
++ int flash_nvram_length;
++ unsigned long flash_nvram_blk_offset;
++} FLASH_ADDR_INFO, *PFLASH_ADDR_INFO;
++
++// scratch pad defines
++/* SP - Persisten Scratch Pad format:
++ sp header : 32 bytes
++ tokenId-1 : 8 bytes
++ tokenId-1 len : 4 bytes
++ tokenId-1 data
++ ....
++ tokenId-n : 8 bytes
++ tokenId-n len : 4 bytes
++ tokenId-n data
++*/
++
++#define MAGIC_NUM_LEN 8
++#define MAGIC_NUMBER "gOGoBrCm"
++#define TOKEN_NAME_LEN 16
++#define SP_VERSION 1
++#define SP_MAX_LEN 8 * 1024 // 8k buf before psi
++#define SP_RESERVERD 16
++
++typedef struct _SP_HEADER
++{
++ char SPMagicNum[MAGIC_NUM_LEN]; // 8 bytes of magic number
++ int SPVersion; // version number
++ int SPUsedLen; // used sp len
++ char SPReserved[SP_RESERVERD]; // reservied, total 32 bytes
++} SP_HEADER, *PSP_HEADER;
++
++typedef struct _TOKEN_DEF
++{
++ char tokenName[TOKEN_NAME_LEN];
++ int tokenLen;
++} SP_TOKEN, *PSP_TOKEN;
++
++
++/*****************************************************************************/
++/* Function Prototypes */
++/*****************************************************************************/
++#if !defined(__ASM_ASM_H)
++void dumpaddr( unsigned char *pAddr, int nLen );
++
++void kerSysFlashAddrInfoGet(PFLASH_ADDR_INFO pflash_addr_info);
++int kerSysNvRamGet(char *string, int strLen, int offset);
++int kerSysNvRamSet(char *string, int strLen, int offset);
++int kerSysPersistentGet(char *string, int strLen, int offset);
++int kerSysPersistentSet(char *string, int strLen, int offset);
++int kerSysScratchPadGet(char *tokName, char *tokBuf, int tokLen);
++int kerSysScratchPadSet(char *tokName, char *tokBuf, int tokLen);
++int kerSysBcmImageSet( int flash_start_addr, char *string, int size);
++int kerSysGetMacAddress( unsigned char *pucaAddr, unsigned long ulId );
++int kerSysReleaseMacAddress( unsigned char *pucaAddr );
++int kerSysGetSdramSize( void );
++void kerSysGetBootline(char *string, int strLen);
++void kerSysSetBootline(char *string, int strLen);
++void kerSysMipsSoftReset(void);
++void kerSysLedCtrl(BOARD_LED_NAME, BOARD_LED_STATE);
++void kerSysLedRegisterHwHandler( BOARD_LED_NAME, HANDLE_LED_FUNC, int );
++int kerSysFlashSizeGet(void);
++void kerSysRegisterDyingGaspHandler(char *devname, void *cbfn, void *context);
++void kerSysDeregisterDyingGaspHandler(char *devname);
++void kerSysWakeupMonitorTask( void );
++#endif
++
++#if __cplusplus
++}
++#endif
++
++#endif /* _BOARD_H */
++
diff --git a/target/linux/brcm63xx-2.6/patches/030-boardparms.patch b/target/linux/brcm63xx-2.6/patches/030-boardparms.patch
new file mode 100644
index 0000000000..f6ce12ce34
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/030-boardparms.patch
@@ -0,0 +1,3186 @@
+diff -Naurp linux-2.6.16.7-generic-patched/boardparms/bcm963xx/Makefile linux-2.6.16.7-patched/boardparms/bcm963xx/Makefile
+--- linux-2.6.16.7-generic-patched/boardparms/bcm963xx/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/boardparms/bcm963xx/Makefile 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,16 @@
++
++ifeq ($(CONFIG_MIPS_BRCM),y)
++
++# Linux
++obj-y += boardparms.o
++EXTRA_CFLAGS += -DCONFIG_BCM9$(BRCM_CHIP)
++-include $(TOPDIR)/Rules.make
++
++else
++
++# CFE
++BSPOBJS += boardparms.o
++
++endif
++
++
+diff -Naurp linux-2.6.16.7-generic-patched/boardparms/bcm963xx/boardparms.c linux-2.6.16.7-patched/boardparms/bcm963xx/boardparms.c
+--- linux-2.6.16.7-generic-patched/boardparms/bcm963xx/boardparms.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/boardparms/bcm963xx/boardparms.c 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,2392 @@
++/*
++<:copyright-gpl
++
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++:>
++*/
++/**************************************************************************
++ * File Name : boardparms.c
++ *
++ * Description: This file contains the implementation for the BCM63xx board
++ * parameter access functions.
++ *
++ * Updates : 07/14/2003 Created.
++ ***************************************************************************/
++
++/* Includes. */
++#include <linux/config.h>
++#include "boardparms.h"
++
++/* Defines. */
++
++/* Default psi size in K bytes */
++#define BP_PSI_DEFAULT_SIZE 24
++
++/* Typedefs */
++typedef struct boardparameters
++{
++ char szBoardId[BP_BOARD_ID_LEN]; /* board id string */
++ ETHERNET_MAC_INFO EnetMacInfos[BP_MAX_ENET_MACS];
++ VOIP_DSP_INFO VoIPDspInfo[BP_MAX_VOIP_DSP];
++ unsigned short usSdramSize; /* SDRAM size and type */
++ unsigned short usPsiSize; /* persistent storage in K bytes */
++ unsigned short usGpioRj11InnerPair; /* GPIO pin or not defined */
++ unsigned short usGpioRj11OuterPair; /* GPIO pin or not defined */
++ unsigned short usGpioPressAndHoldReset; /* GPIO pin or not defined */
++ unsigned short usGpioPcmciaReset; /* GPIO pin or not defined */
++ unsigned short usGpioUartRts; /* GPIO pin or not defined */
++ unsigned short usGpioUartCts; /* GPIO pin or not defined */
++ unsigned short usGpioLedAdsl; /* GPIO pin or not defined */
++ unsigned short usGpioLedAdslFail; /* GPIO pin or not defined */
++ unsigned short usGpioLedWireless; /* GPIO pin or not defined */
++ unsigned short usGpioLedUsb; /* GPIO pin or not defined */
++ unsigned short usGpioLedHpna; /* GPIO pin or not defined */
++ unsigned short usGpioLedWanData; /* GPIO pin or not defined */
++ unsigned short usGpioLedPpp; /* GPIO pin or not defined */
++ unsigned short usGpioLedPppFail; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlPowerOn; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlAlarm; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlResetCfg; /* GPIO pin or not defined */
++ unsigned short usGpioLedBlStop; /* GPIO pin or not defined */
++ unsigned short usExtIntrWireless; /* ext intr or not defined */
++ unsigned short usExtIntrAdslDyingGasp; /* ext intr or not defined */
++ unsigned short usExtIntrHpna; /* ext intr or not defined */
++ unsigned short usCsHpna; /* chip select not defined */
++ unsigned short usAntInUseWireless; /* antenna in use or not defined */
++ unsigned short usGpioSesBtnWireless; /* GPIO pin or not defined */
++ unsigned short usExtIntrSesBtnWireless; /* ext intr or not defined */
++ unsigned short usGpioLedSesWireless; /* GPIO pin or not defined */
++} BOARD_PARAMETERS, *PBOARD_PARAMETERS;
++
++/* Variables */
++#if defined(_BCM96338_) || defined(CONFIG_BCM96338)
++static BOARD_PARAMETERS g_bcm96338sv =
++{
++ "96338SV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_NOT_DEFINED, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
++ BP_NOT_DEFINED, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++static BOARD_PARAMETERS g_bcm96338l2m8m =
++{
++ "96338L-2M-8M", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96338sv, &g_bcm96338l2m8m, 0};
++#endif
++
++#if defined(_BCM96345_) || defined(CONFIG_BCM96345)
++static BOARD_PARAMETERS g_bcm96345r =
++{
++ "96345R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345gw2 =
++{
++ /* A hardware jumper determines whether GPIO 13 is used for Press and Hold
++ * Reset or RTS.
++ */
++ "96345GW2", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_GPIO_0_AH, /* usGpioPhySpiSck */
++ BP_GPIO_4_AH, /* usGpioPhySpiSs */
++ BP_GPIO_12_AH, /* usGpioPhySpiMosi */
++ BP_GPIO_11_AH, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_GPIO, /* usConfigType */
++ BP_ENET_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_1, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_15_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_GPIO_2_AH, /* usGpioPcmciaReset */
++ BP_GPIO_13_AH, /* usGpioUartRts */
++ BP_GPIO_9_AH, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_GPIO_7_AH, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_7_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_EXT_INTR_2, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345gw =
++{
++ "96345GW", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_1, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_15_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_1_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_GPIO_2_AH, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_GPIO_10_AH, /* usGpioLedWireless */
++ BP_GPIO_7_AH, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_10_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_EXT_INTR_2, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_EXT_INTR_3, /* usExtIntrHpna */
++ BP_CS_1, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96335r =
++{
++ "96335R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_14_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_9_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_9_AH, /* usGpioLedWanData */
++ BP_GPIO_8_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_9_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345r0 =
++{
++ "96345R0", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_9_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_9_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_8_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96345rs =
++{
++ "96345RS", /* szBoardId */
++ {{BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_ENET_NO_REVERSE_MII}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_GPIO_11_AH, /* usGpioRj11InnerPair */
++ BP_GPIO_12_AH, /* usGpioRj11OuterPair */
++ BP_GPIO_13_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_GPIO_8_AH, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_8_AH, /* usGpioLedWanData */
++ BP_GPIO_9_AH, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_GPIO_10_AH, /* usGpioLedBlAlarm */
++ BP_GPIO_9_AH, /* usGpioLedBlResetCfg */
++ BP_GPIO_8_AH, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_EXT_INTR_0, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96345r, &g_bcm96345gw2, &g_bcm96345gw, &g_bcm96335r, &g_bcm96345r0,
++ &g_bcm96345rs, 0};
++#endif
++
++#if defined(_BCM96348_) || defined(CONFIG_BCM96348)
++
++static BOARD_PARAMETERS g_bcm96348r =
++{
++ "96348R", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY}}, /* ucPhyType */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_8MB_1_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348lv =
++{
++ "96348LV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
++ 0x02, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_GPIO_5_AL, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_7_AH, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348gw =
++{
++ "96348GW", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_0, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* BP_GPIO_35_AH, */ /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* BP_EXT_INTR_3, */ /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* BP_GPIO_0_AL */ /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcm96348gw_10 =
++{
++ "96348GW-10", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_6_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348gw_11 =
++{
++ "96348GW-11", /* szBoardId */
++ {{BP_ENET_NO_PHY}, /* ucPhyType */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x04, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static BOARD_PARAMETERS g_bcm96348sv =
++{
++ "96348SV", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_PHY, /* ucPhyType */
++ 0x1f, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}}, /* usReverseMii */
++ {{BP_VOIP_NO_DSP}, /* ucDspType */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_32MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_NOT_DEFINED, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_NOT_DEFINED, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_NOT_DEFINED, /* usGpioLedWanData */
++ BP_NOT_DEFINED, /* usGpioLedPpp */
++ BP_NOT_DEFINED, /* usGpioLedPppFail */
++ BP_NOT_DEFINED, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_NOT_DEFINED, /* usGpioLedBlResetCfg */
++ BP_NOT_DEFINED, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcm96348gw_dualDsp =
++{
++ "96348GW-DualDSP", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_EXTERNAL_SWITCH, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x03, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_UNEQUIPPED, /* usGpioVoipReset */
++ BP_GPIO_34_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_DSP, /* ucDspType */
++ 0x01, /* ucDspAddress */
++ BP_EXT_INTR_3, /* usExtIntrVoip */
++ BP_UNEQUIPPED , /* usGpioVoipReset */
++ BP_GPIO_35_AH, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_3}}, /* usCsVoip */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_HW_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_WLAN_ANT_MAIN, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++
++static BOARD_PARAMETERS g_bcmCustom_01 =
++{
++ "BCMCUST_01", /* szBoardId */
++ {{BP_ENET_INTERNAL_PHY, /* ucPhyType */
++ 0x01, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_MDIO, /* usConfigType */
++ BP_NOT_DEFINED}, /* usReverseMii */
++ {BP_ENET_NO_PHY, /* ucPhyType */
++ 0x00, /* ucPhyAddress */
++ BP_NOT_DEFINED, /* usGpioPhySpiSck */
++ BP_NOT_DEFINED, /* usGpioPhySpiSs */
++ BP_NOT_DEFINED, /* usGpioPhySpiMosi */
++ BP_NOT_DEFINED, /* usGpioPhySpiMiso */
++ BP_NOT_DEFINED, /* usGpioPhyReset */
++ 0x01, /* numSwitchPorts */
++ BP_ENET_CONFIG_SPI_SSB_1, /* usConfigType */
++ BP_ENET_REVERSE_MII}}, /* usReverseMii */
++ {{BP_VOIP_DSP, /* ucDspType */
++ 0x00, /* ucDspAddress */
++ BP_EXT_INTR_2, /* usExtIntrVoip */
++ BP_GPIO_36_AH, /* usGpioVoipReset */
++ BP_GPIO_34_AL, /* usGpioVoipIntr */
++ BP_NOT_DEFINED, /* usGpioLedVoip */
++ BP_CS_2}, /* usCsVoip */
++ {BP_VOIP_NO_DSP}}, /* ucDspType */
++ BP_MEMORY_16MB_2_CHIP, /* usSdramSize */
++ BP_PSI_DEFAULT_SIZE, /* usPsiSize */
++ BP_NOT_DEFINED, /* usGpioRj11InnerPair */
++ BP_NOT_DEFINED, /* usGpioRj11OuterPair */
++ BP_GPIO_33_AL, /* usGpioPressAndHoldReset */
++ BP_NOT_DEFINED, /* usGpioPcmciaReset */
++ BP_NOT_DEFINED, /* usGpioUartRts */
++ BP_NOT_DEFINED, /* usGpioUartCts */
++ BP_NOT_DEFINED, /* usGpioLedAdsl */
++ BP_GPIO_2_AL, /* usGpioLedAdslFail */
++ BP_NOT_DEFINED, /* usGpioLedWireless */
++ BP_NOT_DEFINED, /* usGpioLedUsb */
++ BP_NOT_DEFINED, /* usGpioLedHpna */
++ BP_GPIO_3_AL, /* usGpioLedWanData */
++ BP_GPIO_3_AL, /* usGpioLedPpp */
++ BP_GPIO_4_AL, /* usGpioLedPppFail */
++ BP_GPIO_0_AL, /* usGpioLedBlPowerOn */
++ BP_NOT_DEFINED, /* usGpioLedBlAlarm */
++ BP_GPIO_3_AL, /* usGpioLedBlResetCfg */
++ BP_GPIO_1_AL, /* usGpioLedBlStop */
++ BP_NOT_DEFINED, /* usExtIntrWireless */
++ BP_NOT_DEFINED, /* usExtIntrAdslDyingGasp */
++ BP_NOT_DEFINED, /* usExtIntrHpna */
++ BP_NOT_DEFINED, /* usCsHpna */
++ BP_NOT_DEFINED, /* usAntInUseWireless */
++ BP_NOT_DEFINED, /* usGpioSesBtnWireless */
++ BP_NOT_DEFINED, /* usExtIntrSesBtnWireless */
++ BP_NOT_DEFINED /* usGpioLedSesWireless */
++};
++
++static PBOARD_PARAMETERS g_BoardParms[] =
++ {&g_bcm96348r, &g_bcm96348lv, &g_bcm96348gw, &g_bcm96348gw_10,
++ &g_bcm96348gw_11, &g_bcm96348sv, &g_bcm96348gw_dualDsp,
++ &g_bcmCustom_01, 0};
++#endif
++
++static PBOARD_PARAMETERS g_pCurrentBp = 0;
++
++/**************************************************************************
++ * Name : bpstrcmp
++ *
++ * Description: String compare for this file so it does not depend on an OS.
++ * (Linux kernel and CFE share this source file.)
++ *
++ * Parameters : [IN] dest - destination string
++ * [IN] src - source string
++ *
++ * Returns : -1 - dest < src, 1 - dest > src, 0 dest == src
++ ***************************************************************************/
++static int bpstrcmp(const char *dest,const char *src);
++static int bpstrcmp(const char *dest,const char *src)
++{
++ while (*src && *dest)
++ {
++ if (*dest < *src) return -1;
++ if (*dest > *src) return 1;
++ dest++;
++ src++;
++ }
++
++ if (*dest && !*src) return 1;
++ if (!*dest && *src) return -1;
++ return 0;
++} /* bpstrcmp */
++
++/**************************************************************************
++ * Name : BpGetVoipDspConfig
++ *
++ * Description: Gets the DSP configuration from the board parameter
++ * structure for a given DSP index.
++ *
++ * Parameters : [IN] dspNum - DSP index (number)
++ *
++ * Returns : Pointer to DSP configuration block if found/valid, NULL
++ * otherwise.
++ ***************************************************************************/
++VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum );
++VOIP_DSP_INFO *BpGetVoipDspConfig( unsigned char dspNum )
++{
++ VOIP_DSP_INFO *pDspConfig = 0;
++ int i;
++
++ if( g_pCurrentBp )
++ {
++ for( i = 0 ; i < BP_MAX_VOIP_DSP ; i++ )
++ {
++ if( g_pCurrentBp->VoIPDspInfo[i].ucDspType != BP_VOIP_NO_DSP &&
++ g_pCurrentBp->VoIPDspInfo[i].ucDspAddress == dspNum )
++ {
++ pDspConfig = &g_pCurrentBp->VoIPDspInfo[i];
++ break;
++ }
++ }
++ }
++
++ return pDspConfig;
++}
++
++
++/**************************************************************************
++ * Name : BpSetBoardId
++ *
++ * Description: This function find the BOARD_PARAMETERS structure for the
++ * specified board id string and assigns it to a global, static
++ * variable.
++ *
++ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
++ * have a board parameters configuration record.
++ ***************************************************************************/
++int BpSetBoardId( char *pszBoardId )
++{
++ int nRet = BP_BOARD_ID_NOT_FOUND;
++ PBOARD_PARAMETERS *ppBp;
++
++ for( ppBp = g_BoardParms; *ppBp; ppBp++ )
++ {
++ if( !bpstrcmp((*ppBp)->szBoardId, pszBoardId) )
++ {
++ g_pCurrentBp = *ppBp;
++ nRet = BP_SUCCESS;
++ break;
++ }
++ }
++
++ return( nRet );
++} /* BpSetBoardId */
++
++/**************************************************************************
++ * Name : BpGetBoardIds
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
++ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
++ * boundary.
++ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
++ * were allocated in pszBoardIds.
++ *
++ * Returns : Number of board id strings returned.
++ ***************************************************************************/
++int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize )
++{
++ PBOARD_PARAMETERS *ppBp;
++ int i;
++ char *src;
++ char *dest;
++
++ for( i = 0, ppBp = g_BoardParms; *ppBp && nBoardIdsSize;
++ i++, ppBp++, nBoardIdsSize--, pszBoardIds += BP_BOARD_ID_LEN )
++ {
++ dest = pszBoardIds;
++ src = (*ppBp)->szBoardId;
++ while( *src )
++ *dest++ = *src++;
++ *dest = '\0';
++ }
++
++ return( i );
++} /* BpGetBoardIds */
++
++/**************************************************************************
++ * Name : BpGetEthernetMacInfo
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
++ * buffers.
++ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
++ * are pointed to by pEnetInfos.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos )
++{
++ int i, nRet;
++
++ if( g_pCurrentBp )
++ {
++ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
++ {
++ if( i < BP_MAX_ENET_MACS )
++ {
++ unsigned char *src = (unsigned char *)
++ &g_pCurrentBp->EnetMacInfos[i];
++ unsigned char *dest = (unsigned char *) pEnetInfos;
++ int len = sizeof(ETHERNET_MAC_INFO);
++ while( len-- )
++ *dest++ = *src++;
++ }
++ else
++ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
++ }
++
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ for( i = 0; i < nNumEnetInfos; i++, pEnetInfos++ )
++ pEnetInfos->ucPhyType = BP_ENET_NO_PHY;
++
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetEthernetMacInfo */
++
++/**************************************************************************
++ * Name : BpGetSdramSize
++ *
++ * Description: This function returns a constant that describees the board's
++ * SDRAM type and size.
++ *
++ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
++ * is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetSdramSize( unsigned long *pulSdramSize )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulSdramSize = g_pCurrentBp->usSdramSize;
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ *pulSdramSize = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetSdramSize */
++
++/**************************************************************************
++ * Name : BpGetPsiSize
++ *
++ * Description: This function returns the persistent storage size in K bytes.
++ *
++ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
++ * storage size is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetPsiSize( unsigned long *pulPsiSize )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulPsiSize = g_pCurrentBp->usPsiSize;
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ *pulPsiSize = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPsiSize */
++
++/**************************************************************************
++ * Name : BpGetRj11InnerOuterPairGpios
++ *
++ * Description: This function returns the GPIO pin assignments for changing
++ * between the RJ11 inner pair and RJ11 outer pair.
++ *
++ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
++ * GPIO pin is returned in.
++ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
++ unsigned short *pusOuter )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusInner = g_pCurrentBp->usGpioRj11InnerPair;
++ *pusOuter = g_pCurrentBp->usGpioRj11OuterPair;
++
++ if( g_pCurrentBp->usGpioRj11InnerPair != BP_NOT_DEFINED &&
++ g_pCurrentBp->usGpioRj11OuterPair != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusInner = *pusOuter = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetRj11InnerOuterPairGpios */
++
++/**************************************************************************
++ * Name : BpGetPressAndHoldResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the press
++ * and hold reset button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the press and hold
++ * reset button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPressAndHoldResetGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioPressAndHoldReset;
++
++ if( g_pCurrentBp->usGpioPressAndHoldReset != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPressAndHoldResetGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioVoipReset;
++
++ if( *pusValue != BP_NOT_DEFINED ||
++ *pusValue == BP_UNEQUIPPED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipResetGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipIntrGpio
++ *
++ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioVoipIntr;
++
++ if( *pusValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipIntrGpio */
++
++/**************************************************************************
++ * Name : BpGetPcmciaResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PCMCIA
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPcmciaResetGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioPcmciaReset;
++
++ if( g_pCurrentBp->usGpioPcmciaReset != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPcmciaResetGpio */
++
++/**************************************************************************
++ * Name : BpGetUartRtsCtsGpios
++ *
++ * Description: This function returns the GPIO pin assignments for RTS and CTS
++ * UART signals.
++ *
++ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
++ * pin is returned in.
++ * [OUT] pusCts - Address of short word that the UART CTS GPIO
++ * pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, board id input string does not
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusRts = g_pCurrentBp->usGpioUartRts;
++ *pusCts = g_pCurrentBp->usGpioUartCts;
++
++ if( g_pCurrentBp->usGpioUartRts != BP_NOT_DEFINED &&
++ g_pCurrentBp->usGpioUartCts != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusRts = *pusCts = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetUartRtsCtsGpios */
++
++/**************************************************************************
++ * Name : BpGetAdslLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedAdsl;
++
++ if( g_pCurrentBp->usGpioLedAdsl != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslLedGpio */
++
++/**************************************************************************
++ * Name : BpGetAdslFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED that is used when there is a DSL connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslFailLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedAdslFail;
++
++ if( g_pCurrentBp->usGpioLedAdslFail != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslFailLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedWireless;
++
++ if( g_pCurrentBp->usGpioLedWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessAntInUse
++ *
++ * Description: This function returns the antennas in use for wireless
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
++ * is in use.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessAntInUse( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usAntInUseWireless;
++
++ if( g_pCurrentBp->usAntInUseWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessAntInUse */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesBtnGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesBtnGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioSesBtnWireless;
++
++ if( g_pCurrentBp->usGpioSesBtnWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessSesBtnGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesExtIntr
++ *
++ * Description: This function returns the external interrupt number for the
++ * Wireless Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * external interrup is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesExtIntr( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usExtIntrSesBtnWireless;
++
++ if( g_pCurrentBp->usExtIntrSesBtnWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++
++} /* BpGetWirelessSesExtIntr */
++
++/**************************************************************************
++ * Name : BpGetWirelessSesLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Led.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Led GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedSesWireless;
++
++ if( g_pCurrentBp->usGpioLedSesWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++
++} /* BpGetWirelessSesLedGpio */
++
++/**************************************************************************
++ * Name : BpGetUsbLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the USB
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the USB LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetUsbLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedUsb;
++
++ if( g_pCurrentBp->usGpioLedUsb != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetUsbLedGpio */
++
++/**************************************************************************
++ * Name : BpGetHpnaLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the HPNA
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedHpna;
++
++ if( g_pCurrentBp->usGpioLedHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWanDataLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the WAN Data
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWanDataLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedWanData;
++
++ if( g_pCurrentBp->usGpioLedWanData != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWanDataLedGpio */
++
++/**************************************************************************
++ * Name : BpGetPppLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedPpp;
++
++ if( g_pCurrentBp->usGpioLedPpp != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPppLedGpio */
++
++/**************************************************************************
++ * Name : BpGetPppFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED that is used when there is a PPP connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppFailLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedPppFail;
++
++ if( g_pCurrentBp->usGpioLedPppFail != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetPppFailLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderPowerOnLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the power
++ * on LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlPowerOn;
++
++ if( g_pCurrentBp->usGpioLedBlPowerOn != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderPowerOn */
++
++/**************************************************************************
++ * Name : BpGetBootloaderAlarmLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the alarm
++ * LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlAlarm;
++
++ if( g_pCurrentBp->usGpioLedBlAlarm != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderAlarmLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderResetCfgLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the reset
++ * configuration LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the reset
++ * configuration LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlResetCfg;
++
++ if( g_pCurrentBp->usGpioLedBlResetCfg != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderResetCfgLedGpio */
++
++/**************************************************************************
++ * Name : BpGetBootloaderStopLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the break
++ * into bootloader LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the break into
++ * bootloader LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderStopLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pusValue = g_pCurrentBp->usGpioLedBlStop;
++
++ if( g_pCurrentBp->usGpioLedBlStop != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetBootloaderStopLedGpio */
++
++/**************************************************************************
++ * Name : BpGetVoipLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ *
++ * Note : The VoIP structure would allow for having one LED per DSP
++ * however, the board initialization function assumes only one
++ * LED per functionality (ie one LED for VoIP). Therefore in
++ * order to keep this tidy and simple we do not make usage of the
++ * one-LED-per-DSP function. Instead, we assume that the LED for
++ * VoIP is unique and associated with DSP 0 (always present on
++ * any VoIP platform). If changing this to a LED-per-DSP function
++ * then one need to update the board initialization driver in
++ * bcmdrivers\opensource\char\board\bcm963xx\impl1
++ ***************************************************************************/
++int BpGetVoipLedGpio( unsigned short *pusValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( 0 );
++
++ if( pDspInfo )
++ {
++ *pusValue = pDspInfo->usGpioLedVoip;
++
++ if( *pusValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pusValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipLedGpio */
++
++/**************************************************************************
++ * Name : BpGetWirelessExtIntr
++ *
++ * Description: This function returns the Wireless external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the wireless
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrWireless;
++
++ if( g_pCurrentBp->usExtIntrWireless != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetWirelessExtIntr */
++
++/**************************************************************************
++ * Name : BpGetAdslDyingGaspExtIntr
++ *
++ * Description: This function returns the ADSL Dying Gasp external interrupt
++ * number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrAdslDyingGasp;
++
++ if( g_pCurrentBp->usExtIntrAdslDyingGasp != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetAdslDyingGaspExtIntr */
++
++/**************************************************************************
++ * Name : BpGetVoipExtIntr
++ *
++ * Description: This function returns the VOIP external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * external interrupt number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pulValue = pDspInfo->usExtIntrVoip;
++
++ if( *pulValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipExtIntr */
++
++/**************************************************************************
++ * Name : BpGetHpnaExtIntr
++ *
++ * Description: This function returns the HPNA external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaExtIntr( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usExtIntrHpna;
++
++ if( g_pCurrentBp->usExtIntrHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaExtIntr */
++
++/**************************************************************************
++ * Name : BpGetHpnaChipSelect
++ *
++ * Description: This function returns the HPNA chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * chip select number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaChipSelect( unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ *pulValue = g_pCurrentBp->usCsHpna;
++
++ if( g_pCurrentBp->usCsHpna != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetHpnaChipSelect */
++
++/**************************************************************************
++ * Name : BpGetVoipChipSelect
++ *
++ * Description: This function returns the VOIP chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * chip select number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue )
++{
++ int nRet;
++
++ if( g_pCurrentBp )
++ {
++ VOIP_DSP_INFO *pDspInfo = BpGetVoipDspConfig( dspNum );
++
++ if( pDspInfo )
++ {
++ *pulValue = pDspInfo->usCsVoip;
++
++ if( *pulValue != BP_NOT_DEFINED )
++ {
++ nRet = BP_SUCCESS;
++ }
++ else
++ {
++ nRet = BP_VALUE_NOT_DEFINED;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_FOUND;
++ }
++ }
++ else
++ {
++ *pulValue = BP_NOT_DEFINED;
++ nRet = BP_BOARD_ID_NOT_SET;
++ }
++
++ return( nRet );
++} /* BpGetVoipChipSelect */
++
+diff -Naurp linux-2.6.16.7-generic-patched/boardparms/bcm963xx/boardparms.h linux-2.6.16.7-patched/boardparms/bcm963xx/boardparms.h
+--- linux-2.6.16.7-generic-patched/boardparms/bcm963xx/boardparms.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-patched/boardparms/bcm963xx/boardparms.h 2006-07-05 15:21:58.000000000 +0200
+@@ -0,0 +1,766 @@
++/*
++<:copyright-gpl
++
++ Copyright 2003 Broadcom Corp. All Rights Reserved.
++
++ This program is free software; you can distribute it and/or modify it
++ under the terms of the GNU General Public License (Version 2) as
++ published by the Free Software Foundation.
++
++ This program is distributed in the hope it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ for more details.
++
++ You should have received a copy of the GNU General Public License along
++ with this program; if not, write to the Free Software Foundation, Inc.,
++ 59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
++
++:>
++*/
++/**************************************************************************
++ * File Name : boardparms.h
++ *
++ * Description: This file contains definitions and function prototypes for
++ * the BCM63xx board parameter access functions.
++ *
++ * Updates : 07/14/2003 Created.
++ ***************************************************************************/
++
++#if !defined(_BOARDPARMS_H)
++#define _BOARDPARMS_H
++
++#if __cplusplus
++extern "C" {
++#endif
++
++/* Return codes. */
++#define BP_SUCCESS 0
++#define BP_BOARD_ID_NOT_FOUND 1
++#define BP_VALUE_NOT_DEFINED 2
++#define BP_BOARD_ID_NOT_SET 3
++
++/* Values for BpGetSdramSize. */
++#define BP_MEMORY_8MB_1_CHIP 0
++#define BP_MEMORY_16MB_1_CHIP 1
++#define BP_MEMORY_32MB_1_CHIP 2
++#define BP_MEMORY_64MB_2_CHIP 3
++#define BP_MEMORY_32MB_2_CHIP 4
++#define BP_MEMORY_16MB_2_CHIP 5
++
++/* Values for EthernetMacInfo PhyType. */
++#define BP_ENET_NO_PHY 0
++#define BP_ENET_INTERNAL_PHY 1
++#define BP_ENET_EXTERNAL_PHY 2
++#define BP_ENET_EXTERNAL_SWITCH 3
++
++/* Values for EthernetMacInfo Configuration type. */
++#define BP_ENET_CONFIG_MDIO 0 /* Internal PHY, External PHY, Switch+(no GPIO, no SPI, no MDIO Pseudo phy */
++#define BP_ENET_CONFIG_GPIO 1 /* Bcm96345GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_MDIO_PSEUDO_PHY 2 /* Bcm96348GW board + Bcm5325E */
++#define BP_ENET_CONFIG_SPI_SSB_0 3 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_1 4 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_2 5 /* Bcm96348GW board + Bcm5325M/E */
++#define BP_ENET_CONFIG_SPI_SSB_3 6 /* Bcm96348GW board + Bcm5325M/E */
++
++/* Values for EthernetMacInfo Reverse MII. */
++#define BP_ENET_NO_REVERSE_MII 0
++#define BP_ENET_REVERSE_MII 1
++
++/* Values for VoIPDSPInfo DSPType. */
++#define BP_VOIP_NO_DSP 0
++#define BP_VOIP_DSP 1
++
++
++/* Values for GPIO pin assignments (AH = Active High, AL = Active Low). */
++#define BP_ACTIVE_MASK 0x8000
++#define BP_ACTIVE_HIGH 0x0000
++#define BP_ACTIVE_LOW 0x8000
++#define BP_GPIO_0_AH (0 | BP_ACTIVE_HIGH)
++#define BP_GPIO_0_AL (0 | BP_ACTIVE_LOW)
++#define BP_GPIO_1_AH (1 | BP_ACTIVE_HIGH)
++#define BP_GPIO_1_AL (1 | BP_ACTIVE_LOW)
++#define BP_GPIO_2_AH (2 | BP_ACTIVE_HIGH)
++#define BP_GPIO_2_AL (2 | BP_ACTIVE_LOW)
++#define BP_GPIO_3_AH (3 | BP_ACTIVE_HIGH)
++#define BP_GPIO_3_AL (3 | BP_ACTIVE_LOW)
++#define BP_GPIO_4_AH (4 | BP_ACTIVE_HIGH)
++#define BP_GPIO_4_AL (4 | BP_ACTIVE_LOW)
++#define BP_GPIO_5_AH (5 | BP_ACTIVE_HIGH)
++#define BP_GPIO_5_AL (5 | BP_ACTIVE_LOW)
++#define BP_GPIO_6_AH (6 | BP_ACTIVE_HIGH)
++#define BP_GPIO_6_AL (6 | BP_ACTIVE_LOW)
++#define BP_GPIO_7_AH (7 | BP_ACTIVE_HIGH)
++#define BP_GPIO_7_AL (7 | BP_ACTIVE_LOW)
++#define BP_GPIO_8_AH (8 | BP_ACTIVE_HIGH)
++#define BP_GPIO_8_AL (8 | BP_ACTIVE_LOW)
++#define BP_GPIO_9_AH (9 | BP_ACTIVE_HIGH)
++#define BP_GPIO_9_AL (9 | BP_ACTIVE_LOW)
++#define BP_GPIO_10_AH (10 | BP_ACTIVE_HIGH)
++#define BP_GPIO_10_AL (10 | BP_ACTIVE_LOW)
++#define BP_GPIO_11_AH (11 | BP_ACTIVE_HIGH)
++#define BP_GPIO_11_AL (11 | BP_ACTIVE_LOW)
++#define BP_GPIO_12_AH (12 | BP_ACTIVE_HIGH)
++#define BP_GPIO_12_AL (12 | BP_ACTIVE_LOW)
++#define BP_GPIO_13_AH (13 | BP_ACTIVE_HIGH)
++#define BP_GPIO_13_AL (13 | BP_ACTIVE_LOW)
++#define BP_GPIO_14_AH (14 | BP_ACTIVE_HIGH)
++#define BP_GPIO_14_AL (14 | BP_ACTIVE_LOW)
++#define BP_GPIO_15_AH (15 | BP_ACTIVE_HIGH)
++#define BP_GPIO_15_AL (15 | BP_ACTIVE_LOW)
++#define BP_GPIO_16_AH (16 | BP_ACTIVE_HIGH)
++#define BP_GPIO_16_AL (16 | BP_ACTIVE_LOW)
++#define BP_GPIO_17_AH (17 | BP_ACTIVE_HIGH)
++#define BP_GPIO_17_AL (17 | BP_ACTIVE_LOW)
++#define BP_GPIO_18_AH (18 | BP_ACTIVE_HIGH)
++#define BP_GPIO_18_AL (18 | BP_ACTIVE_LOW)
++#define BP_GPIO_19_AH (19 | BP_ACTIVE_HIGH)
++#define BP_GPIO_19_AL (19 | BP_ACTIVE_LOW)
++#define BP_GPIO_20_AH (20 | BP_ACTIVE_HIGH)
++#define BP_GPIO_20_AL (20 | BP_ACTIVE_LOW)
++#define BP_GPIO_21_AH (21 | BP_ACTIVE_HIGH)
++#define BP_GPIO_21_AL (21 | BP_ACTIVE_LOW)
++#define BP_GPIO_22_AH (22 | BP_ACTIVE_HIGH)
++#define BP_GPIO_22_AL (22 | BP_ACTIVE_LOW)
++#define BP_GPIO_23_AH (23 | BP_ACTIVE_HIGH)
++#define BP_GPIO_23_AL (23 | BP_ACTIVE_LOW)
++#define BP_GPIO_24_AH (24 | BP_ACTIVE_HIGH)
++#define BP_GPIO_24_AL (24 | BP_ACTIVE_LOW)
++#define BP_GPIO_25_AH (25 | BP_ACTIVE_HIGH)
++#define BP_GPIO_25_AL (25 | BP_ACTIVE_LOW)
++#define BP_GPIO_26_AH (26 | BP_ACTIVE_HIGH)
++#define BP_GPIO_26_AL (26 | BP_ACTIVE_LOW)
++#define BP_GPIO_27_AH (27 | BP_ACTIVE_HIGH)
++#define BP_GPIO_27_AL (27 | BP_ACTIVE_LOW)
++#define BP_GPIO_28_AH (28 | BP_ACTIVE_HIGH)
++#define BP_GPIO_28_AL (28 | BP_ACTIVE_LOW)
++#define BP_GPIO_29_AH (29 | BP_ACTIVE_HIGH)
++#define BP_GPIO_29_AL (29 | BP_ACTIVE_LOW)
++#define BP_GPIO_30_AH (30 | BP_ACTIVE_HIGH)
++#define BP_GPIO_30_AL (30 | BP_ACTIVE_LOW)
++#define BP_GPIO_31_AH (31 | BP_ACTIVE_HIGH)
++#define BP_GPIO_31_AL (31 | BP_ACTIVE_LOW)
++#define BP_GPIO_32_AH (32 | BP_ACTIVE_HIGH)
++#define BP_GPIO_32_AL (32 | BP_ACTIVE_LOW)
++#define BP_GPIO_33_AH (33 | BP_ACTIVE_HIGH)
++#define BP_GPIO_33_AL (33 | BP_ACTIVE_LOW)
++#define BP_GPIO_34_AH (34 | BP_ACTIVE_HIGH)
++#define BP_GPIO_34_AL (34 | BP_ACTIVE_LOW)
++#define BP_GPIO_35_AH (35 | BP_ACTIVE_HIGH)
++#define BP_GPIO_35_AL (35 | BP_ACTIVE_LOW)
++#define BP_GPIO_36_AH (36 | BP_ACTIVE_HIGH)
++#define BP_GPIO_36_AL (36 | BP_ACTIVE_LOW)
++
++/* Values for external interrupt assignments. */
++#define BP_EXT_INTR_0 0
++#define BP_EXT_INTR_1 1
++#define BP_EXT_INTR_2 2
++#define BP_EXT_INTR_3 3
++
++/* Values for chip select assignments. */
++#define BP_CS_0 0
++#define BP_CS_1 1
++#define BP_CS_2 2
++#define BP_CS_3 3
++
++/* Value for GPIO and external interrupt fields that are not used. */
++#define BP_NOT_DEFINED 0xffff
++#define BP_HW_DEFINED 0xfff0
++#define BP_UNEQUIPPED 0xfff1
++
++/* Maximum size of the board id string. */
++#define BP_BOARD_ID_LEN 16
++
++/* Maximum number of Ethernet MACs. */
++#define BP_MAX_ENET_MACS 2
++
++/* Maximum number of VoIP DSPs. */
++#define BP_MAX_VOIP_DSP 2
++
++/* Wireless Antenna Settings. */
++#define BP_WLAN_ANT_MAIN 0
++#define BP_WLAN_ANT_AUX 1
++#define BP_WLAN_ANT_BOTH 3
++
++#if !defined(__ASSEMBLER__)
++
++/* Information about an Ethernet MAC. If ucPhyType is BP_ENET_NO_PHY,
++ * then the other fields are not valid.
++ */
++typedef struct EthernetMacInfo
++{
++ unsigned char ucPhyType; /* BP_ENET_xxx */
++ unsigned char ucPhyAddress; /* 0 to 31 */
++ unsigned short usGpioPhySpiSck; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiSs; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiMosi; /* GPIO pin or not defined */
++ unsigned short usGpioPhySpiMiso; /* GPIO pin or not defined */
++ unsigned short usGpioPhyReset; /* GPIO pin or not defined (96348LV) */
++ unsigned short numSwitchPorts; /* Number of PHY ports */
++ unsigned short usConfigType; /* Configuration type */
++ unsigned short usReverseMii; /* Reverse MII */
++} ETHERNET_MAC_INFO, *PETHERNET_MAC_INFO;
++
++
++/* Information about VoIP DSPs. If ucDspType is BP_VOIP_NO_DSP,
++ * then the other fields are not valid.
++ */
++typedef struct VoIPDspInfo
++{
++ unsigned char ucDspType;
++ unsigned char ucDspAddress;
++ unsigned short usExtIntrVoip;
++ unsigned short usGpioVoipReset;
++ unsigned short usGpioVoipIntr;
++ unsigned short usGpioLedVoip;
++ unsigned short usCsVoip;
++
++} VOIP_DSP_INFO;
++
++
++/**************************************************************************
++ * Name : BpSetBoardId
++ *
++ * Description: This function find the BOARD_PARAMETERS structure for the
++ * specified board id string and assigns it to a global, static
++ * variable.
++ *
++ * Parameters : [IN] pszBoardId - Board id string that is saved into NVRAM.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_FOUND - Error, board id input string does not
++ * have a board parameters configuration record.
++ ***************************************************************************/
++int BpSetBoardId( char *pszBoardId );
++
++/**************************************************************************
++ * Name : BpGetBoardIds
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pszBoardIds - Address of a buffer that the board id
++ * strings are returned in. Each id starts at BP_BOARD_ID_LEN
++ * boundary.
++ * [IN] nBoardIdsSize - Number of BP_BOARD_ID_LEN elements that
++ * were allocated in pszBoardIds.
++ *
++ * Returns : Number of board id strings returned.
++ ***************************************************************************/
++int BpGetBoardIds( char *pszBoardIds, int nBoardIdsSize );
++
++/**************************************************************************
++ * Name : BpGetEthernetMacInfo
++ *
++ * Description: This function returns all of the supported board id strings.
++ *
++ * Parameters : [OUT] pEnetInfos - Address of an array of ETHERNET_MAC_INFO
++ * buffers.
++ * [IN] nNumEnetInfos - Number of ETHERNET_MAC_INFO elements that
++ * are pointed to by pEnetInfos.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetEthernetMacInfo( PETHERNET_MAC_INFO pEnetInfos, int nNumEnetInfos );
++
++/**************************************************************************
++ * Name : BpGetSdramSize
++ *
++ * Description: This function returns a constant that describees the board's
++ * SDRAM type and size.
++ *
++ * Parameters : [OUT] pulSdramSize - Address of short word that the SDRAM size
++ * is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetSdramSize( unsigned long *pulSdramSize );
++
++/**************************************************************************
++ * Name : BpGetPsiSize
++ *
++ * Description: This function returns the persistent storage size in K bytes.
++ *
++ * Parameters : [OUT] pulPsiSize - Address of short word that the persistent
++ * storage size is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ ***************************************************************************/
++int BpGetPsiSize( unsigned long *pulPsiSize );
++
++/**************************************************************************
++ * Name : BpGetRj11InnerOuterPairGpios
++ *
++ * Description: This function returns the GPIO pin assignments for changing
++ * between the RJ11 inner pair and RJ11 outer pair.
++ *
++ * Parameters : [OUT] pusInner - Address of short word that the RJ11 inner pair
++ * GPIO pin is returned in.
++ * [OUT] pusOuter - Address of short word that the RJ11 outer pair
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRj11InnerOuterPairGpios( unsigned short *pusInner,
++ unsigned short *pusOuter );
++
++/**************************************************************************
++ * Name : BpGetPressAndHoldResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the press
++ * and hold reset button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the press and hold
++ * reset button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPressAndHoldResetGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP reset
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipResetGpio( unsigned char dspNum, unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipIntrGpio
++ *
++ * Description: This function returns the GPIO pin assignment for VoIP interrupt.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP interrupt
++ * GPIO pin is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipIntrGpio( unsigned char dspNum, unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPcmciaResetGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PCMCIA
++ * Reset operation.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PCMCIA reset
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPcmciaResetGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetUartRtsCtsGpios
++ *
++ * Description: This function returns the GPIO pin assignments for RTS and CTS
++ * UART signals.
++ *
++ * Parameters : [OUT] pusRts - Address of short word that the UART RTS GPIO
++ * pin is returned in.
++ * [OUT] pusCts - Address of short word that the UART CTS GPIO
++ * pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, values are returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetRtsCtsUartGpios( unsigned short *pusRts, unsigned short *pusCts );
++
++/**************************************************************************
++ * Name : BpGetAdslLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetAdslFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the ADSL
++ * LED that is used when there is a DSL connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the ADSL LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslFailLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessAntInUse
++ *
++ * Description: This function returns the antennas in use for wireless
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Antenna
++ * is in use.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessAntInUse( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesBtnGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Button GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesBtnGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesExtIntr
++ *
++ * Description: This function returns the external interrupt number for the
++ * Wireless Ses Button.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * external interrup is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesExtIntr( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessSesLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the Wireless
++ * Ses Led.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the Wireless Ses
++ * Led GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessSesLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetUsbLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the USB
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the USB LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetUsbLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the HPNA
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the HPNA LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWanDataLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the WAN Data
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the WAN Data LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWanDataLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPppLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetPppFailLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the PPP
++ * LED that is used when there is a PPP connection failure.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the PPP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetPppFailLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetVoipLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the VOIP
++ * LED.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the VOIP LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderPowerOnLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the power
++ * on LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderPowerOnLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderAlarmLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the alarm
++ * LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the alarm LED
++ * GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderAlarmLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderResetCfgLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the reset
++ * configuration LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the reset
++ * configuration LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderResetCfgLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetBootloaderStopLedGpio
++ *
++ * Description: This function returns the GPIO pin assignment for the break
++ * into bootloader LED that is set by the bootloader.
++ *
++ * Parameters : [OUT] pusValue - Address of short word that the break into
++ * bootloader LED GPIO pin is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetBootloaderStopLedGpio( unsigned short *pusValue );
++
++/**************************************************************************
++ * Name : BpGetWirelessExtIntr
++ *
++ * Description: This function returns the Wireless external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the wireless
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetWirelessExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetAdslDyingGaspExtIntr
++ *
++ * Description: This function returns the ADSL Dying Gasp external interrupt
++ * number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the ADSL Dying Gasp
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetAdslDyingGaspExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetVoipExtIntr
++ *
++ * Description: This function returns the VOIP external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * external interrupt number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipExtIntr( unsigned char dspNum, unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaExtIntr
++ *
++ * Description: This function returns the HPNA external interrupt number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * external interrupt number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaExtIntr( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetHpnaChipSelect
++ *
++ * Description: This function returns the HPNA chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the HPNA
++ * chip select number is returned in.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetHpnaChipSelect( unsigned long *pulValue );
++
++/**************************************************************************
++ * Name : BpGetVoipChipSelect
++ *
++ * Description: This function returns the VOIP chip select number.
++ *
++ * Parameters : [OUT] pulValue - Address of short word that the VOIP
++ * chip select number is returned in.
++ * [IN] dspNum - Address of the DSP to query.
++ *
++ * Returns : BP_SUCCESS - Success, value is returned.
++ * BP_BOARD_ID_NOT_SET - Error, BpSetBoardId has not been called.
++ * BP_VALUE_NOT_DEFINED - At least one return value is not defined
++ * for the board.
++ ***************************************************************************/
++int BpGetVoipChipSelect( unsigned char dspNum, unsigned long *pulValue );
++
++#endif /* __ASSEMBLER__ */
++
++#if __cplusplus
++}
++#endif
++
++#endif /* _BOARDPARMS_H */
++
diff --git a/target/linux/brcm63xx-2.6/patches/040-bcm963xx_flashmap.patch b/target/linux/brcm63xx-2.6/patches/040-bcm963xx_flashmap.patch
new file mode 100644
index 0000000000..d8acdfa9a0
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/040-bcm963xx_flashmap.patch
@@ -0,0 +1,135 @@
+diff -urN linux-2.6.16.7/drivers/mtd/maps/bcm963xx.c linux-2.6.16.7-brcm63xx/drivers/mtd/maps/bcm963xx.c
+--- linux-2.6.16.7/drivers/mtd/maps/bcm963xx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.16.7-brcm63xx/drivers/mtd/maps/bcm963xx.c 2006-07-07 22:00:36.000000000 +0200
+@@ -0,0 +1,106 @@
++/*
++ * A simple flash mapping code for BCM963xx board flash memory
++ * It is simple because it only treats all the flash memory as ROM
++ * It is used with chips/map_rom.c
++ *
++ * Song Wang (songw@broadcom.com)
++ */
++
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <asm/io.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/map.h>
++#include <linux/config.h>
++
++#include <board.h>
++#include <bcmTag.h>
++#define VERSION "1.0"
++
++extern PFILE_TAG kerSysImageTagGet(void);
++
++static struct mtd_info *mymtd;
++
++static map_word brcm_physmap_read16(struct map_info *map, unsigned long ofs)
++{
++ map_word val;
++
++ val.x[0] = __raw_readw(map->map_priv_1 + ofs);
++
++ return val;
++}
++
++static void brcm_physmap_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
++{
++ memcpy_fromio(to, map->map_priv_1 + from, len);
++}
++
++static struct map_info brcm_physmap_map = {
++ .name = "Physically mapped flash",
++ .bankwidth = 2,
++ .read = brcm_physmap_read16,
++ .copy_from = brcm_physmap_copy_from
++};
++
++static int __init init_brcm_physmap(void)
++{
++ PFILE_TAG pTag = NULL;
++ u_int32_t rootfs_addr, kernel_addr;
++ FLASH_ADDR_INFO info;
++
++ printk("bcm963xx_mtd driver v%s\n", VERSION);
++ kerSysFlashAddrInfoGet( &info );
++
++ /* Read the flash memory map from flash memory. */
++ if (!(pTag = kerSysImageTagGet())) {
++ printk("Failed to read image tag from flash\n");
++ return -EIO;
++ }
++
++ rootfs_addr = (u_int32_t) simple_strtoul(pTag->rootfsAddress, NULL, 10);
++ kernel_addr = (u_int32_t) simple_strtoul(pTag->kernelAddress, NULL, 10);
++
++ brcm_physmap_map.size = kernel_addr - rootfs_addr;
++ brcm_physmap_map.map_priv_1 = (unsigned long)rootfs_addr;
++
++ if (!brcm_physmap_map.map_priv_1) {
++ printk("Wrong rootfs starting address\n");
++ return -EIO;
++ }
++
++ if (brcm_physmap_map.size <= 0) {
++ printk("Wrong rootfs size\n");
++ return -EIO;
++ }
++
++ mymtd = do_map_probe("map_rom", &brcm_physmap_map);
++ if (mymtd) {
++ mymtd->owner = THIS_MODULE;
++ add_mtd_device(mymtd);
++
++ return 0;
++ }
++
++ return -ENXIO;
++}
++
++static void __exit cleanup_brcm_physmap(void)
++{
++ if (mymtd) {
++ del_mtd_device(mymtd);
++ map_destroy(mymtd);
++ }
++ if (brcm_physmap_map.map_priv_1) {
++ brcm_physmap_map.map_priv_1 = 0;
++ }
++}
++
++module_init(init_brcm_physmap);
++module_exit(cleanup_brcm_physmap);
++
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Song Wang songw@broadcom.com");
++MODULE_DESCRIPTION("Configurable MTD map driver for read-only root file system");
+diff -urN linux-2.6.16.7/drivers/mtd/maps/Kconfig linux-2.6.16.7-brcm63xx/drivers/mtd/maps/Kconfig
+--- linux-2.6.16.7/drivers/mtd/maps/Kconfig 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-brcm63xx/drivers/mtd/maps/Kconfig 2006-07-07 22:02:13.000000000 +0200
+@@ -224,6 +224,13 @@
+ Flash memory access on 4G Systems MTX-1 Board. If you have one of
+ these boards and would like to use the flash chips on it, say 'Y'.
+
++config MTD_BCM963XX
++ tristate "BCM963xx Flash device"
++ depends on MIPS && MIPS_BRCM
++ help
++ This driver seems to detect and provide a valid flash map to the system
++ of course, it needs checking and testing.
++
+ config MTD_DILNETPC
+ tristate "CFI Flash device mapped on DIL/Net PC"
+ depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT
+diff -urN linux-2.6.16.7/drivers/mtd/maps/Makefile linux-2.6.16.7-brcm63xx/drivers/mtd/maps/Makefile
+--- linux-2.6.16.7/drivers/mtd/maps/Makefile 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-brcm63xx/drivers/mtd/maps/Makefile 2006-07-07 22:01:29.000000000 +0200
+@@ -71,3 +71,4 @@
+ obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+ obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o
+ obj-$(CONFIG_MTD_TQM834x) += tqm834x.o
++obj-$(CONFIG_MTD_BCM963XX) += bcm963xx.o
diff --git a/target/linux/brcm63xx-2.6/patches/050-disable-synchronize_net.patch b/target/linux/brcm63xx-2.6/patches/050-disable-synchronize_net.patch
new file mode 100644
index 0000000000..737a70a48d
--- /dev/null
+++ b/target/linux/brcm63xx-2.6/patches/050-disable-synchronize_net.patch
@@ -0,0 +1,13 @@
+diff -Naurp linux-2.6.16.7-generic-patched/net/ipv4/af_inet.c linux-2.6.16.7-patched/net/ipv4/af_inet.c
+--- linux-2.6.16.7-generic-patched/net/ipv4/af_inet.c 2006-04-17 23:53:25.000000000 +0200
++++ linux-2.6.16.7-patched/net/ipv4/af_inet.c 2006-07-05 15:33:47.000000000 +0200
+@@ -940,7 +940,9 @@ void inet_register_protosw(struct inet_p
+ out:
+ spin_unlock_bh(&inetsw_lock);
+
++#ifndef CONFIG_MIPS_BRCM
+ synchronize_net();
++#endif
+
+ return;
+