1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-10-28 14:29:21 +02:00
openwrt-xburst/target/linux/brcm63xx-2.6/patches/001-bcm963xx.patch
florian d3ec79b469 Merge premilinary Broadcom 63xx support (Livebox, Siemens SE515...)
Kernel compiles fine, does not include linux-2.6.8.1 linux-mips specific fixes and neither includes broadcom changes to netfiler
Needs testing of course :)


git-svn-id: svn://svn.openwrt.org/openwrt/branches/buildroot-ng/openwrt@4084 3c298f89-4303-0410-b956-a3cf2f4a3e73
2006-06-26 11:45:23 +00:00

48190 lines
1.6 MiB
Raw Blame History

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<6F>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
# ---------------------------------------------------------------------------