diff options
Diffstat (limited to 'package')
22 files changed, 1761 insertions, 0 deletions
diff --git a/package/ar7-atm/Config.in b/package/ar7-atm/Config.in index c828d5c9a..395755c59 100644 --- a/package/ar7-atm/Config.in +++ b/package/ar7-atm/Config.in @@ -6,6 +6,9 @@ choice  		This option allows you to switch between firmware/driver versions which  		might improve the DSL line speed. +config AR7_ATM_FW_VERSION_705 +	bool "D7.05.01.00" +  config AR7_ATM_FW_VERSION_704  	bool "D7.04.03.00" diff --git a/package/ar7-atm/Makefile b/package/ar7-atm/Makefile index 88036c693..e5cef0791 100644 --- a/package/ar7-atm/Makefile +++ b/package/ar7-atm/Makefile @@ -10,16 +10,25 @@ include $(INCLUDE_DIR)/kernel.mk  PKG_NAME:=sangam_atm +ifeq ($(CONFIG_AR7_ATM_FW_VERSION_705),y) +PKG_VERSION:=D7.05.01.00 +PKG_MD5SUM:=42ee465be5cfbe9476fc25deb260d450 +PKG_RELEASE:=R1 +PATCH_DIR:=patches-$(PKG_VERSION) +endif +  ifeq ($(CONFIG_AR7_ATM_FW_VERSION_704),y)  PKG_VERSION:=D7.04.03.00  PKG_MD5SUM:=3d76004e46f09e88931f91670cb420ad  PKG_RELEASE:=R1 +PATCH_DIR:=patches-$(PKG_VERSION)  endif  ifeq ($(CONFIG_AR7_ATM_FW_VERSION_703),y)  PKG_VERSION:=D7.03.01.00  PKG_MD5SUM:=bc6e9c6adb1be25820c7ee661de8ca7d  PKG_RELEASE:=R2 +PATCH_DIR:=patches-D7.04.03.00  endif  PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE).tar.bz2 diff --git a/package/ar7-atm/patches/100-compile_fix.patch b/package/ar7-atm/patches-D7.04.03.00/100-compile_fix.patch index 83271ca48..83271ca48 100644 --- a/package/ar7-atm/patches/100-compile_fix.patch +++ b/package/ar7-atm/patches-D7.04.03.00/100-compile_fix.patch diff --git a/package/ar7-atm/patches/110-interrupt_fix.patch b/package/ar7-atm/patches-D7.04.03.00/110-interrupt_fix.patch index 9acb862e5..9acb862e5 100644 --- a/package/ar7-atm/patches/110-interrupt_fix.patch +++ b/package/ar7-atm/patches-D7.04.03.00/110-interrupt_fix.patch diff --git a/package/ar7-atm/patches/120-no_dumb_inline.patch b/package/ar7-atm/patches-D7.04.03.00/120-no_dumb_inline.patch index 2968fdc16..2968fdc16 100644 --- a/package/ar7-atm/patches/120-no_dumb_inline.patch +++ b/package/ar7-atm/patches-D7.04.03.00/120-no_dumb_inline.patch diff --git a/package/ar7-atm/patches/130-powercutback.patch b/package/ar7-atm/patches-D7.04.03.00/130-powercutback.patch index ec00df97a..ec00df97a 100644 --- a/package/ar7-atm/patches/130-powercutback.patch +++ b/package/ar7-atm/patches-D7.04.03.00/130-powercutback.patch diff --git a/package/ar7-atm/patches/140-debug_mode.patch b/package/ar7-atm/patches-D7.04.03.00/140-debug_mode.patch index ce3697b10..ce3697b10 100644 --- a/package/ar7-atm/patches/140-debug_mode.patch +++ b/package/ar7-atm/patches-D7.04.03.00/140-debug_mode.patch diff --git a/package/ar7-atm/patches/150-tasklet_mode.patch b/package/ar7-atm/patches-D7.04.03.00/150-tasklet_mode.patch index 97b8cecdd..97b8cecdd 100644 --- a/package/ar7-atm/patches/150-tasklet_mode.patch +++ b/package/ar7-atm/patches-D7.04.03.00/150-tasklet_mode.patch diff --git a/package/ar7-atm/patches/160-module-params.patch b/package/ar7-atm/patches-D7.04.03.00/160-module-params.patch index 5b3dcbfe3..5b3dcbfe3 100644 --- a/package/ar7-atm/patches/160-module-params.patch +++ b/package/ar7-atm/patches-D7.04.03.00/160-module-params.patch diff --git a/package/ar7-atm/patches/170-bus_id_removal.patch b/package/ar7-atm/patches-D7.04.03.00/170-bus_id_removal.patch index 64c92b574..64c92b574 100644 --- a/package/ar7-atm/patches/170-bus_id_removal.patch +++ b/package/ar7-atm/patches-D7.04.03.00/170-bus_id_removal.patch diff --git a/package/ar7-atm/patches/180-git_headers_include.patch b/package/ar7-atm/patches-D7.04.03.00/180-git_headers_include.patch index a6f7107a7..a6f7107a7 100644 --- a/package/ar7-atm/patches/180-git_headers_include.patch +++ b/package/ar7-atm/patches-D7.04.03.00/180-git_headers_include.patch diff --git a/package/ar7-atm/patches/190-2.6.32_proc_fixes.patch b/package/ar7-atm/patches-D7.04.03.00/190-2.6.32_proc_fixes.patch index 42e89c318..42e89c318 100644 --- a/package/ar7-atm/patches/190-2.6.32_proc_fixes.patch +++ b/package/ar7-atm/patches-D7.04.03.00/190-2.6.32_proc_fixes.patch diff --git a/package/ar7-atm/patches-D7.05.01.00/100-compile_fix.patch b/package/ar7-atm/patches-D7.05.01.00/100-compile_fix.patch new file mode 100644 index 000000000..ef3e4c786 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/100-compile_fix.patch @@ -0,0 +1,826 @@ +Index: sangam_atm-D7.05.01.00/cppi_cpaal5.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/cppi_cpaal5.c	2007-09-25 15:55:14.000000000 +0200 ++++ sangam_atm-D7.05.01.00/cppi_cpaal5.c	2010-03-07 19:03:28.000000000 +0100 +@@ -360,7 +360,7 @@ +            { +             /* malloc failed, add this RCB to Needs Buffer List */ +             TempRcb->FragCount = 1;                                             /*MJH+030417*/ +-            (HAL_RCB *)TempRcb->Eop = TempRcb;                                  /* GSG +030430 */ ++            TempRcb->Eop = TempRcb;                                             /* GSG +030430 */ +  +             if(HalDev->NeedsCount < MAX_NEEDS)                                  /* +MJH 030410 */ +               {                                                                 /* +MJH 030410 */ +Index: sangam_atm-D7.05.01.00/dsl_hal_api.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/dsl_hal_api.c	2007-09-27 10:35:44.000000000 +0200 ++++ sangam_atm-D7.05.01.00/dsl_hal_api.c	2010-03-07 19:03:28.000000000 +0100 +@@ -273,15 +273,15 @@ + *  09/15/07  CPH    CQ11466  Added EFM support + *  09/27/07  EYin   CQ11929: Added NFEC/INP/Lp/Rp reporting for only ADSL2/2+ mode. + ******************************************************************************/ +-#include <dev_host_interface.h> +-#include <dsl_hal_register.h> +-#include <dsl_hal_support.h> ++#include "dev_host_interface.h" ++#include "dsl_hal_register.h" ++#include "dsl_hal_support.h" +  + #ifndef NO_ADV_STATS +-#include <dsl_hal_logtable.h> ++#include "dsl_hal_logtable.h" + #endif +  +-#include <dsl_hal_version.h> ++#include "dsl_hal_version.h" +  + //  UR8_MERGE_START CQ11054   Jack Zhang + static unsigned int highprecision_selected = 0;  //By default we use low precision for backward compt. +Index: sangam_atm-D7.05.01.00/dsl_hal_support.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/dsl_hal_support.c	2007-09-25 11:19:50.000000000 +0200 ++++ sangam_atm-D7.05.01.00/dsl_hal_support.c	2010-03-07 19:03:28.000000000 +0100 +@@ -142,9 +142,9 @@ + *  UR8_MERGE_START_END CQ11922 Tim + *    04Sep07     0.14.00            Tim    CQ11922: Added support for new scratchram for INP NDR tables + *******************************************************************************/ +-#include <dev_host_interface.h> +-#include <dsl_hal_register.h> +-#include <dsl_hal_support.h> ++#include "dev_host_interface.h" ++#include "dsl_hal_register.h" ++#include "dsl_hal_support.h" +  + #define NUM_READ_RETRIES 3 + static unsigned int dslhal_support_adsl2ByteSwap32(unsigned int in32Bits); +Index: sangam_atm-D7.05.01.00/dsl_hal_support.h +=================================================================== +--- sangam_atm-D7.05.01.00.orig/dsl_hal_support.h	2005-11-11 09:07:04.000000000 +0100 ++++ sangam_atm-D7.05.01.00/dsl_hal_support.h	2010-03-07 19:03:28.000000000 +0100 +@@ -49,7 +49,7 @@ + *    04Nov05     0.11.00            CPH    Fixed T1413 mode got Zero DS/US rate when DSL_BIT_TMODE is set. + *******************************************************************************/ +  +-#include <dsl_hal_api.h> ++#include "dsl_hal_api.h" +  + #define virtual2Physical(a)    (((int)a)&~0xe0000000) + /* External Function Prototype Declarations */ +Index: sangam_atm-D7.05.01.00/Makefile +=================================================================== +--- sangam_atm-D7.05.01.00.orig/Makefile	2005-06-01 04:46:28.000000000 +0200 ++++ sangam_atm-D7.05.01.00/Makefile	2010-03-07 19:03:45.000000000 +0100 +@@ -1,18 +1,9 @@ +-# File: drivers/atm/ti_evm3/Makefile + # +-# Makefile for the Texas Instruments EVM3 ADSL/ATM driver. ++# Makefile for the TIATM device driver. + # +-# +-# Copyright (c) 2000 Texas Instruments Incorporated. +-# 	Jeff Harrell (jharrell@telogy.com) +-# 	Viren Balar  (vbalar@ti.com) +-# 	Victor Wells (vwells@telogy.com) +-# +-include $(TOPDIR)/Rules.make +- +- +- +- +- +- +  ++CONFIG_SANGAM_ATM=m ++#EXTRA_CFLAGS += -DEL -I. -DPOST_SILICON -DCOMMON_NSP -DCONFIG_LED_MODULE -DDEREGISTER_LED -DNO_ACT ++EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -DNO_ACT -D__NO__VOICE_PATCH__ -DEL ++obj-$(CONFIG_SANGAM_ATM) := tiatm.o ++tiatm-objs += cpsar.o aal5sar.o tn7sar.o tn7atm.o tn7dsl.o dsl_hal_api.o dsl_hal_support.o +Index: sangam_atm-D7.05.01.00/tn7atm.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7atm.c	2008-08-28 17:15:22.000000000 +0200 ++++ sangam_atm-D7.05.01.00/tn7atm.c	2010-03-07 19:03:48.000000000 +0100 +@@ -66,7 +66,6 @@ +  *    09/18/07 CPH    CQ11466  Added EFM Support + *********************************************************************************************/ +  +-#include <linux/config.h> + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/init.h> +@@ -74,11 +73,14 @@ + #include <linux/delay.h> + #include <linux/spinlock.h> + #include <linux/smp_lock.h> +-#include <asm/io.h> +-#include <asm/mips-boards/prom.h> + #include <linux/proc_fs.h> + #include <linux/string.h> + #include <linux/ctype.h> ++ ++#include <asm/io.h> ++#include <asm/ar7/ar7.h> ++#include <asm/ar7/prom.h> ++ + #include "dsl_hal_api.h" + #ifdef AR7_EFM + #include "tn7efm.h" +@@ -90,6 +92,7 @@ + #include "dsl_hal_register.h" +  + #ifdef MODULE ++MODULE_LICENSE("GPL"); + MODULE_DESCRIPTION ("Tnetd73xx ATM Device Driver"); + MODULE_AUTHOR ("Zhicheng Tang"); + #endif +@@ -108,9 +111,9 @@ +  + /*end of externs */ +  +-#ifndef TI_STATIC_ALLOCATIONS +-#define TI_STATIC_ALLOCATIONS +-#endif ++//#ifndef TI_STATIC_ALLOCATIONS ++//#define TI_STATIC_ALLOCATIONS ++//#endif +  + #define tn7atm_kfree_skb(x)     dev_kfree_skb(x) +  +@@ -135,7 +138,7 @@ + /* prototypes */ + static int tn7atm_set_can_support_adsl2 (int can); +  +-static int tn7atm_open (struct atm_vcc *vcc, short vpi, int vci); ++static int tn7atm_open (struct atm_vcc *vcc); +  + void tn7atm_close (struct atm_vcc *vcc); +  +@@ -298,13 +301,12 @@ +         getsockopt:     NULL, +         setsockopt:     NULL, +         send:           tn7atm_send, +-        sg_send:        NULL, +         phy_put:        NULL, +         phy_get:        NULL, +         change_qos:     tn7atm_change_qos, + }; +  +-const char drv_proc_root_folder[] = "avalanche/"; ++const char drv_proc_root_folder[] = "avalanche"; + static struct proc_dir_entry *root_proc_dir_entry = NULL; + #define DRV_PROC_MODE 0644 + static int proc_root_already_exists = TRUE; +@@ -626,56 +628,6 @@ +  + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +  * +- *  Function: int tn7atm_walk_vccs(struct atm_dev *dev, short *vcc, int *vci) +- * +- *  Description: retrieve VPI/VCI for connection +- * +- *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +-static int tn7atm_walk_vccs (struct atm_vcc *vcc, short *vpi, int *vci) +-{ +-  struct atm_vcc *walk; +- +-  /* +-   * find a free VPI +-   */ +-  if (*vpi == ATM_VPI_ANY) +-  { +- +-    for (*vpi = 0, walk = vcc->dev->vccs; walk; walk = walk->next) +-    { +- +-      if ((walk->vci == *vci) && (walk->vpi == *vpi)) +-      { +-        (*vpi)++; +-        walk = vcc->dev->vccs; +-      } +-    } +-  } +- +-  /* +-   * find a free VCI +-   */ +-  if (*vci == ATM_VCI_ANY) +-  { +- +-    for (*vci = ATM_NOT_RSV_VCI, walk = vcc->dev->vccs; walk; +-         walk = walk->next) +-    { +- +-      if ((walk->vpi = *vpi) && (walk->vci == *vci)) +-      { +-        *vci = walk->vci + 1; +-        walk = vcc->dev->vccs; +-      } +-    } +-  } +- +-  return 0; +-} +- +- +-/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- * +  *  Function: int tn7atm_sar_irq(void) +  * +  *  Description: tnetd73xx SAR interrupt. +@@ -766,7 +718,7 @@ +  +   priv->sar_irq = LNXINTNUM (ATM_SAR_INT);      /* Interrupt line # */ +  +-  if (request_irq (priv->sar_irq, tn7atm_sar_irq, SA_INTERRUPT, "SAR ", dev)) ++  if (request_irq (priv->sar_irq, tn7atm_sar_irq, IRQF_DISABLED, "SAR ", dev)) +     printk ("Could not register tn7atm_sar_irq\n"); +  +   /* +@@ -777,8 +729,8 @@ +   { +     def_sar_inter_pace = os_atoi (ptr); +   } +-  avalanche_request_pacing (priv->sar_irq, ATM_SAR_INT_PACING_BLOCK_NUM, +-                            def_sar_inter_pace); ++  /* avalanche_request_pacing (priv->sar_irq, ATM_SAR_INT_PACING_BLOCK_NUM, ++                            def_sar_inter_pace); */ +  +  + #ifdef AR7_EFM +@@ -790,7 +742,7 @@ +    * Reigster Receive interrupt A +    */ +   priv->dsl_irq = LNXINTNUM (ATM_DSL_INT);      /* Interrupt line # */ +-  if (request_irq (priv->dsl_irq, tn7atm_dsl_irq, SA_INTERRUPT, "DSL ", dev)) ++  if (request_irq (priv->dsl_irq, tn7atm_dsl_irq, IRQF_DISABLED, "DSL ", dev)) +     printk ("Could not register tn7atm_dsl_irq\n"); +  + /***** VRB Tasklet Mode ****/ +@@ -958,11 +910,15 @@ + #define ATM_VBR_RT     5 + #endif +  +-int tn7atm_open (struct atm_vcc *vcc, short vpi, int vci) ++int tn7atm_open (struct atm_vcc *vcc) + { +   tn7atm_activate_vc_parm_t tn7atm_activate_vc_parm; +   int rc; +   //int flags; ++  tn7atm_activate_vc_parm.pcr = 0x20000; ++  tn7atm_activate_vc_parm.scr = 0x20000; ++  tn7atm_activate_vc_parm.mbs = 0x20000; ++  tn7atm_activate_vc_parm.cdvt = 10000; +  +   dgprintf(1, "tn7atm_open()\n"); +  +@@ -974,24 +930,18 @@ +     return -1; +   } +  +-  MOD_INC_USE_COUNT; ++//  MOD_INC_USE_COUNT; +  +-  /* find a free VPI/VCI */ +-  tn7atm_walk_vccs(vcc, &vpi, &vci); +- +-  vcc->vpi = vpi; +-  vcc->vci = vci; +- +-  if ((vci == ATM_VCI_UNSPEC) || (vpi == ATM_VCI_UNSPEC)) ++  if ((vcc->vci == ATM_VCI_UNSPEC) || (vcc->vpi == ATM_VCI_UNSPEC)) +   { +-    MOD_DEC_USE_COUNT; ++//    MOD_DEC_USE_COUNT; +     return -EBUSY; +   } +  +-  tn7atm_activate_vc_parm.vpi = vpi; +-  tn7atm_activate_vc_parm.vci = vci; ++  tn7atm_activate_vc_parm.vpi = vcc->vpi; ++  tn7atm_activate_vc_parm.vci = vcc->vci; +  +-  if ((vpi == CLEAR_EOC_VPI) && (vci == CLEAR_EOC_VCI)) ++  if ((vcc->vpi == CLEAR_EOC_VPI) && (vcc->vci == CLEAR_EOC_VCI)) +   { +     /* always use (max_dma_chan+1) for clear eoc */ +     tn7atm_activate_vc_parm.chan = EOC_DMA_CHAN; +@@ -999,7 +949,7 @@ +     /* check to see whether clear eoc is opened or not */ +     if (tn7atm_activate_vc_parm.priv->lut[tn7atm_activate_vc_parm.chan].inuse) +     { +-      MOD_DEC_USE_COUNT; ++//      MOD_DEC_USE_COUNT; +       printk("tn7atm_open: Clear EOC channel (dmachan=%d) already in use.\n", tn7atm_activate_vc_parm.chan); +       return -EBUSY; +     } +@@ -1008,7 +958,7 @@ +     if (rc) +     { +       printk("tn7atm_open: failed to setup clear_eoc\n"); +-      MOD_DEC_USE_COUNT; ++//      MOD_DEC_USE_COUNT; +       return -EBUSY; +     } +     tn7atm_set_lut(tn7atm_activate_vc_parm.priv,vcc, tn7atm_activate_vc_parm.chan); +@@ -1017,17 +967,17 @@ +   } +   else  /* PVC channel setup */ +   { +-    if ((vpi==REMOTE_MGMT_VPI) && (vci==REMOTE_MGMT_VCI)) ++    if ((vcc->vpi==REMOTE_MGMT_VPI) && (vcc->vci==REMOTE_MGMT_VCI)) +     { +       tn7atm_activate_vc_parm.chan = 14;   /* always use chan 14 for MII PVC-base romote mgmt */ +     } +     else +     { +-       rc = tn7atm_lut_find(vpi, vci); ++       rc = tn7atm_lut_find(vcc->vpi, vcc->vci); +       /* check to see whether PVC is opened or not */ +       if(ATM_NO_DMA_CHAN != rc) +       { +-        MOD_DEC_USE_COUNT; ++//        MOD_DEC_USE_COUNT; +         printk("PVC already opened. dmachan = %d\n", rc); +         return -EBUSY; +       } +@@ -1059,6 +1009,7 @@ +        tn7atm_activate_vc_parm.priority = 2; +        break; +  ++#if 0 +      case ATM_VBR: /* Variable Bit Rate-Non RealTime*/ +        tn7atm_activate_vc_parm.qos = 1; +        tn7atm_activate_vc_parm.priority = 1; +@@ -1080,6 +1031,7 @@ +            tn7atm_activate_vc_parm.mbs = vcc->qos.txtp.max_pcr; +        tn7atm_activate_vc_parm.cdvt = vcc->qos.txtp.max_cdv; +        break; ++#endif +  +      default: +          tn7atm_activate_vc_parm.qos = 2; +@@ -1107,7 +1059,7 @@ +    if (rc < 0) +    { +       printk("failed to activate hw channel\n"); +-      MOD_DEC_USE_COUNT; ++//      MOD_DEC_USE_COUNT; +       tn7atm_lut_clear(vcc, tn7atm_activate_vc_parm.chan); +       //spin_unlock_irqrestore(&chan_init_lock, flags); +       return -EBUSY; +@@ -1197,7 +1149,7 @@ +   tn7atm_lut_clear (vcc, dmachan); +   //spin_unlock_irqrestore (&closeLock, closeFlag); +  +-  MOD_DEC_USE_COUNT; ++//  MOD_DEC_USE_COUNT; +  +   dgprintf (1, "Leave tn7atm_close\n"); + } +@@ -1630,8 +1582,7 @@ +                                  * firewall is on */ +  +   dgprintf (3, "pushing the skb...\n"); +- +-  skb->stamp = vcc->timestamp = xtime; ++  __net_timestamp(skb); +  +   xdump ((unsigned char *) skb->data, skb->len, 5); +  +@@ -1854,8 +1805,7 @@ +  +   kfree (dev->dev_data); +  +-  // atm_dev_deregister (dev); +-  shutdown_atm_dev (dev); ++  atm_dev_deregister (dev); +  +   /* +    * remove proc entries +@@ -2086,9 +2036,6 @@ +    * Set up proc entry for atm stats +    */ +  +-  if (tn7atm_xlate_proc_name +-      (drv_proc_root_folder, &root_proc_dir_entry, &residual)) +-  { +     printk ("Creating new root folder %s in the proc for the driver stats \n", +             drv_proc_root_folder); +     root_proc_dir_entry = proc_mkdir (drv_proc_root_folder, NULL); +@@ -2098,7 +2045,6 @@ +       return -ENOMEM; +     } +     proc_root_already_exists = FALSE; +-  } +  +  +   /* +@@ -2731,7 +2677,5 @@ +     return count; + } +  +-#ifdef MODULE + module_init (tn7atm_detect); + module_exit (tn7atm_exit); +-#endif /* MODULE */ +Index: sangam_atm-D7.05.01.00/tn7atm.h +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7atm.h	2007-09-25 15:49:34.000000000 +0200 ++++ sangam_atm-D7.05.01.00/tn7atm.h	2010-03-07 19:03:28.000000000 +0100 +@@ -20,7 +20,8 @@ + //#include  "mips_support.h" + #include  <linux/list.h> +  +-#include <linux/config.h> ++#define MIPS_EXCEPTION_OFFSET 8 ++#define LNXINTNUM(x)((x) + MIPS_EXCEPTION_OFFSET) +  + #ifdef CONFIG_MODVERSIONS + #include <linux/modversions.h> +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2009-07-08 13:02:06.000000000 +0200 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 19:04:27.000000000 +0100 +@@ -102,7 +102,6 @@ + *  UR8_MERGE_END   CQ11813 + *  09/18/07 CPH   CQ11466: Added EFM support. +  *********************************************************************************************/ +-#include <linux/config.h> + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/init.h> +@@ -110,8 +109,6 @@ + #include <linux/delay.h> + #include <linux/spinlock.h> + #include <linux/smp_lock.h> +-#include <asm/io.h> +-#include <asm/mips-boards/prom.h> + #include <linux/proc_fs.h> + #include <linux/string.h> + #include <linux/ctype.h> +@@ -119,6 +116,12 @@ + #include <linux/timer.h> + #include <linux/vmalloc.h> + #include <linux/file.h> ++#include <linux/firmware.h> ++ ++#include <asm/io.h> ++#include <asm/ar7/ar7.h> ++#include <asm/ar7/prom.h> ++ + /* Modules specific header files */ + #ifdef AR7_EFM + #include "tn7efm.h" +@@ -185,7 +188,7 @@ + static struct led_funcs ledreg[2]; + #endif +  +-#define DEV_DSLMOD       1 ++#define DEV_DSLMOD       CTL_UNNUMBERED + #define MAX_STR_SIZE     256 + #define DSL_MOD_SIZE     256 +  +@@ -316,7 +319,7 @@ + static volatile int bshutdown; + static char info[MAX_STR_SIZE]; + /* Used for DSL Polling enable */ +-static DECLARE_MUTEX_LOCKED (adsl_sem_overlay); ++static struct semaphore adsl_sem_overlay; +  + //kthread_t overlay_thread; + /* end of module wide declars */ +@@ -369,6 +372,14 @@ +   return val; + } +  ++int avalanche_request_intr_pacing(int irq_nr, unsigned int blk_num, ++                            unsigned int pace_value) ++{ ++	printk("avalanche_request_pacing(%d, %u, %u); // not implemented\n", irq_nr, blk_num, pace_value); ++	return 0; ++} ++ ++ + int os_atoi(const char *pStr) + { +   int MulNeg = (*pStr == '-' ? -1 : 1); +@@ -405,39 +416,6 @@ + #endif + } +  +-int strcmp(const char *s1, const char *s2) +-{ +- +-  int size = strlen(s1); +- +-  return(strncmp(s1, s2, size)); +-} +- +-int strncmp(const char *s1, const char *s2, size_t size) +-{ +-  int i = 0; +-  int max_size = (int)size; +- +-  while((s1[i] != 0) && i < max_size) +-  { +-    if(s2[i] == 0) +-    { +-      return -1; +-    } +-    if(s1[i] != s2[i]) +-    { +-       return 1; +-    } +-    i++; +-  } +-  if(s2[i] != 0) +-  { +-    return 1; +-  } +- +-  return 0; +-} +- + // * UR8_MERGE_START CQ10640   Jack Zhang + int tn7dsl_dump_dsp_memory(char *input_str) //cph99 +   { +@@ -487,144 +465,78 @@ +   return CpuFrequency; + } +  +-int shim_osLoadFWImage(unsigned char *ptr) ++static void avsar_release(struct device *dev) + { +-  unsigned int bytesRead; +-  mm_segment_t  oldfs; +-  static struct file *filp; +-  unsigned int imageLength=0x5ffff; +- +-#ifdef AR7_EFM +-  int dp_alt=0; +-  char *ptr1=NULL; +-#ifdef EFM_DEBUG   +-  char *ptr2=NULL; +-  char *ptr3=NULL; +-#endif     +- +-  if ((ptr1 = prom_getenv("DSL_DP_ALT")) != NULL) +-  { +-    dp_alt=os_atoi(ptr1); +-    if (dp_alt==1) +-    { +-      filp = filp_open(DSP_DEBUG_FIRMWARE_PATH,00,O_RDONLY); +-      if (!IS_ERR(filp)) +-      { +-          strcpy (DSP_FIRMWARE_PATH, DSP_DEBUG_FIRMWARE_PATH); +-      } +-    } +-#ifdef EFM_DEBUG     +-    else if (dp_alt==2) +-    { +-      if ((ptr2 = prom_getenv("DSL_DP")) != NULL) +-      { +-        if (!strncmp(ptr2, "DSL_DP", 6)) +-        { // indirect naming +-          if ((ptr3 = prom_getenv(ptr2)) != NULL) +-          filp = filp_open(ptr3,00,O_RDONLY); +-          ptr2 = ptr3; // redirect ptr2 to ptr3 +-        } +- +-        filp = filp_open(ptr2,00,O_RDONLY); +-        if (!IS_ERR(filp)) +-        { +-          strcpy (DSP_FIRMWARE_PATH, ptr2); +-        } +-      } +-    } +-    printk("dp_path=%s\n", DSP_FIRMWARE_PATH); +-#endif     +-  } +-#endif +- +-  dgprintf(4, "tn7dsl_read_dsp()\n"); +- +-  dgprintf(4,"open file %s\n", DSP_FIRMWARE_PATH); +- +-  filp=filp_open(DSP_FIRMWARE_PATH,00,O_RDONLY); +-  if(IS_ERR(filp)) +-  { +-    printk("Failed: Could not open DSP binary file\n"); +-          return -1; +-  } +- +-  if (filp->f_dentry != NULL) +-  { +-    if (filp->f_dentry->d_inode != NULL) +-    { +-      printk ("DSP binary filesize = %d bytes\n", +-              (int) filp->f_dentry->d_inode->i_size); +-      imageLength = (unsigned int)filp->f_dentry->d_inode->i_size + 0x200; +-    } +-  } +- +-  if (filp->f_op->read==NULL) +-          return -1;  /* File(system) doesn't allow reads */ +- +-  /* +-   * Disable parameter checking +-   */ +-  oldfs = get_fs(); +-  set_fs(KERNEL_DS); +- +-  /* +-   * Now read bytes from postion "StartPos" +-   */ +-  filp->f_pos = 0; +- +-  bytesRead = filp->f_op->read(filp,ptr,imageLength,&filp->f_pos); +- +-  dgprintf(4,"file length = %d\n", bytesRead); +- +-  set_fs(oldfs); +- +-  /* +-   * Close the file +-   */ +-  fput(filp); +- +-  return bytesRead; ++	printk(KERN_DEBUG "avsar firmware released\n"); + } +  ++static struct device avsar = { ++	.bus_id    = "vlynq", ++	.release   = avsar_release, ++}; +  +-unsigned int shim_read_overlay_page (void *ptr, unsigned int secOffset, +-                                     unsigned int secLength) ++int shim_osLoadFWImage(unsigned char *ptr) + { +-  unsigned int bytesRead; +-  mm_segment_t  oldfs; +-  struct file *filp; +- +-  dgprintf(4,"shim_read_overlay_page\n"); +-  //dgprintf(4,"sec offset=%d, sec length =%d\n", secOffset, secLength); ++	const struct firmware *fw_entry; ++	size_t size; +  +-  filp=filp_open(DSP_FIRMWARE_PATH,00,O_RDONLY); +-  if(filp ==NULL) +-  { +-    printk("Failed: Could not open DSP binary file\n"); +-          return -1; +-  } +- +-  if (filp->f_op->read==NULL) +-          return -1;  /* File(system) doesn't allow reads */ +- +-  /* +-   * Now read bytes from postion "StartPos" +-   */ ++	printk("requesting firmware image \"ar0700xx.bin\"\n"); ++	if(device_register(&avsar) < 0) { ++		printk(KERN_ERR ++			"avsar: device_register fails\n"); ++		return -1; ++	} ++ ++	if (request_firmware(&fw_entry, "ar0700xx.bin", &avsar)) { ++		printk(KERN_ERR ++			"avsar: Firmware not available\n"); ++		device_unregister(&avsar); ++		return -1; ++	} ++	size = fw_entry->size; ++	device_unregister(&avsar); ++	if (size > 0x6ffff) { ++		printk(KERN_ERR ++			"avsar: Firmware too big (%d bytes)\n", size); ++			release_firmware(fw_entry); ++			return -1; ++	} ++	memcpy(ptr, fw_entry->data, size); ++	release_firmware(fw_entry); ++	return size; ++} ++ ++unsigned int shim_read_overlay_page(void *ptr, unsigned int secOffset, unsigned int secLength) ++{ ++	const struct firmware *fw_entry; ++ ++	printk("requesting firmware image \"ar0700xx.bin\"\n"); ++	if (device_register(&avsar) < 0) { ++		printk(KERN_ERR ++			"avsar: device_register fails\n"); ++		return -1; ++	} ++ ++	if (request_firmware(&fw_entry, "ar0700xx.bin", &avsar)) { ++		printk(KERN_ERR ++			"avsar: Firmware not available\n"); ++		device_unregister(&avsar); ++		return -1; ++	} ++ ++	device_unregister(&avsar); ++	if (fw_entry->size > secLength) { ++		printk(KERN_ERR ++			"avsar: Firmware too big (%d bytes)\n", fw_entry->size); ++		release_firmware(fw_entry); ++		return -1; ++	} ++	memcpy(ptr + secOffset, fw_entry->data, secLength); ++	release_firmware(fw_entry); ++	return secLength; ++} +  +-  if(filp->f_op->llseek) +-    filp->f_op->llseek(filp,secOffset, 0); +-  oldfs = get_fs(); +-  set_fs(KERNEL_DS); +-  filp->f_pos = secOffset; +-  bytesRead = filp->f_op->read(filp,ptr,secLength,&filp->f_pos); +  +-  set_fs(oldfs); +-  /* +-   * Close the file +-   */ +-  fput(filp); +-  return bytesRead; +-} +  + int shim_osLoadDebugFWImage(unsigned char *ptr) + { +@@ -3287,6 +3199,7 @@ +   int high_precision_selected = 0; + //  UR8_MERGE_END   CQ11054* +  ++  sema_init(&adsl_sem_overlay, 0); +   /* +    * start dsl +    */ +@@ -3665,7 +3578,7 @@ +    */ +   if(write) +     { +-    ret = proc_dostring(ctl, write, filp, buffer, lenp); ++    ret = proc_dostring(ctl, write, filp, buffer, lenp, 0); +  +     switch (ctl->ctl_name) +       { +@@ -3751,14 +3664,14 @@ +   else +     { +     len += sprintf(info+len, mod_req); +-    ret = proc_dostring(ctl, write, filp, buffer, lenp); ++    ret = proc_dostring(ctl, write, filp, buffer, lenp, 0); +     } +   return ret; + } +  +  + ctl_table dslmod_table[] = { +-  {DEV_DSLMOD, "dslmod", info, DSL_MOD_SIZE, 0644, NULL, &dslmod_sysctl} ++  {DEV_DSLMOD, "dslmod", info, DSL_MOD_SIZE, 0644, NULL, NULL, &dslmod_sysctl, &sysctl_string} +   , +   {0} +   }; +@@ -3781,8 +3694,7 @@ +   if (initialized == 1) +     return; +  +-  dslmod_sysctl_header = register_sysctl_table(dslmod_root_table, 1); +-  dslmod_root_table->child->de->owner = THIS_MODULE; ++  dslmod_sysctl_header = register_sysctl_table(dslmod_root_table); +  +   /* +    * set the defaults +Index: sangam_atm-D7.05.01.00/tn7sar.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7sar.c	2007-09-25 15:49:22.000000000 +0200 ++++ sangam_atm-D7.05.01.00/tn7sar.c	2010-03-07 19:03:44.000000000 +0100 +@@ -43,7 +43,6 @@ +  * 09/18/07 CPH   CQ11466: Added EFM support. +  *******************************************************************************/ +  +-#include <linux/config.h> + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/init.h> +@@ -51,12 +50,13 @@ + #include <linux/delay.h> + #include <linux/spinlock.h> + #include <linux/smp_lock.h> +-#include <asm/io.h> +-#include <asm/mips-boards/prom.h> + #include <linux/proc_fs.h> + #include <linux/string.h> + #include <linux/ctype.h> +  ++#include <asm/io.h> ++#include <asm/ar7/ar7.h> ++#include <asm/ar7/prom.h> +  + #define _CPHAL_AAL5 + #define _CPHAL_SAR diff --git a/package/ar7-atm/patches-D7.05.01.00/110-interrupt_fix.patch b/package/ar7-atm/patches-D7.05.01.00/110-interrupt_fix.patch new file mode 100644 index 000000000..1223e7c07 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/110-interrupt_fix.patch @@ -0,0 +1,39 @@ +Index: sangam_atm-D7.05.01.00/tn7atm.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7atm.c	2010-03-07 18:09:13.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7atm.c	2010-03-07 18:09:21.000000000 +0100 +@@ -633,7 +633,7 @@ +  *  Description: tnetd73xx SAR interrupt. +  * +  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +-static void tn7atm_sar_irq (int irq, void *voiddev, struct pt_regs *regs) ++static irqreturn_t tn7atm_sar_irq (int irq, void *voiddev) + { +   struct atm_dev *atmdev; +   Tn7AtmPrivate *priv; +@@ -660,6 +660,7 @@ + #ifdef TIATM_INST_SUPP +   psp_trace_par (ATM_DRV_SAR_ISR_EXIT, retval); + #endif ++  return IRQ_HANDLED; + } +  + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@@ -669,7 +670,7 @@ +  *  Description: tnetd73xx DSL interrupt. +  * +  *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ +-static void tn7atm_dsl_irq (int irq, void *voiddev, struct pt_regs *regs) ++static irqreturn_t tn7atm_dsl_irq (int irq, void *voiddev) + { +   struct atm_dev *atmdev; +   Tn7AtmPrivate *priv; +@@ -691,6 +692,8 @@ + #ifdef TIATM_INST_SUPP +   psp_trace_par (ATM_DRV_DSL_ISR_EXIT, retval); + #endif ++ ++  return IRQ_HANDLED; + } +  + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/package/ar7-atm/patches-D7.05.01.00/120-no_dumb_inline.patch b/package/ar7-atm/patches-D7.05.01.00/120-no_dumb_inline.patch new file mode 100644 index 000000000..ab9d2b307 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/120-no_dumb_inline.patch @@ -0,0 +1,13 @@ +Index: sangam_atm-D7.05.01.00/tn7api.h +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7api.h	2007-09-25 15:49:10.000000000 +0200 ++++ sangam_atm-D7.05.01.00/tn7api.h	2010-03-07 18:09:52.000000000 +0100 +@@ -118,7 +118,7 @@ + int tn7dsl_proc_dbgmsg_read(char* buf, char **start, off_t offset, int count,int *eof, void *data); + #endif + //UR8_MERGE_END CQ11813 +-inline int tn7dsl_handle_interrupt(void); ++int tn7dsl_handle_interrupt(void); +  + void tn7dsl_dslmod_sysctl_register(void); + void tn7dsl_dslmod_sysctl_unregister(void); diff --git a/package/ar7-atm/patches-D7.05.01.00/130-powercutback.patch b/package/ar7-atm/patches-D7.05.01.00/130-powercutback.patch new file mode 100644 index 000000000..29a02e55c --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/130-powercutback.patch @@ -0,0 +1,50 @@ +Index: sangam_atm-D7.05.01.00/dsl_hal_advcfg.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/dsl_hal_advcfg.c	2005-08-09 08:20:46.000000000 +0200 ++++ sangam_atm-D7.05.01.00/dsl_hal_advcfg.c	2010-03-07 18:09:59.000000000 +0100 +@@ -36,9 +36,9 @@ + *    05Jul05     0.00.09            CPH    CQ9775: Change dslhal_advcfg_configDsTones input parameters & support for ADSL2+ + *    24Jul05     0.00.10            CPH    Fixed comments in dslhal_advcfg_configDsTones function header + *******************************************************************************/ +-#include <dev_host_interface.h> +-#include <dsl_hal_register.h> +-#include <dsl_hal_support.h> ++#include "dev_host_interface.h" ++#include "dsl_hal_register.h" ++#include "dsl_hal_support.h" +  + /*****************************************************************************/ + /* ACT API functions -- To be moved into their own independent module --RamP */ +Index: sangam_atm-D7.05.01.00/Makefile +=================================================================== +--- sangam_atm-D7.05.01.00.orig/Makefile	2010-03-07 18:01:20.000000000 +0100 ++++ sangam_atm-D7.05.01.00/Makefile	2010-03-07 18:09:59.000000000 +0100 +@@ -4,6 +4,7 @@ +  + CONFIG_SANGAM_ATM=m + #EXTRA_CFLAGS += -DEL -I. -DPOST_SILICON -DCOMMON_NSP -DCONFIG_LED_MODULE -DDEREGISTER_LED -DNO_ACT +-EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -DNO_ACT -D__NO__VOICE_PATCH__ -DEL ++#EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -DNO_ACT -D__NO__VOICE_PATCH__ -DEL ++EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -D__NO__VOICE_PATCH__ -DEL + obj-$(CONFIG_SANGAM_ATM) := tiatm.o +-tiatm-objs += cpsar.o aal5sar.o tn7sar.o tn7atm.o tn7dsl.o dsl_hal_api.o dsl_hal_support.o ++tiatm-objs += cpsar.o aal5sar.o tn7sar.o tn7atm.o tn7dsl.o dsl_hal_api.o dsl_hal_support.o dsl_hal_advcfg.o +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2010-03-07 18:07:28.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 18:09:59.000000000 +0100 +@@ -3053,6 +3053,14 @@ +     dslhal_api_setRateAdaptFlag(pIhw, os_atoi(ptr)); +   } +  ++  // set powercutback ++  ptr = NULL; ++  ptr = prom_getenv("powercutback"); ++  if(ptr) ++  { ++    dslhal_advcfg_onOffPcb(pIhw, os_atoi(ptr)); ++  } ++ +   // trellis +   ptr = NULL; +   ptr = prom_getenv("trellis"); diff --git a/package/ar7-atm/patches-D7.05.01.00/140-debug_mode.patch b/package/ar7-atm/patches-D7.05.01.00/140-debug_mode.patch new file mode 100644 index 000000000..064954859 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/140-debug_mode.patch @@ -0,0 +1,18 @@ +Index: sangam_atm-D7.05.01.00/tn7sar.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7sar.c	2010-03-07 18:01:20.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7sar.c	2010-03-07 18:10:03.000000000 +0100 +@@ -125,10 +125,10 @@ + //09/05/07: cph, move to tn7atm.h + // #define RESERVED_OAM_CHANNEL              15 +  +-#define AAL5_PARM "id=aal5, base = 0x03000000, offset = 0, int_line=15, ch0=[RxBufSize=1522; RxNumBuffers = 32; RxServiceMax = 50; TxServiceMax=50; TxNumBuffers=32; CpcsUU=0x5aa5; TxVc_CellRate=0x3000; TxVc_AtmHeader=0x00000640]" +-#define SAR_PARM "id=sar,base = 0x03000000, reset_bit = 9, offset = 0; UniNni = 0, PdspEnable = 1" ++#define CH0_PARM "RxBufSize=1522, RxNumBuffers=32, RxServiceMax=50, TxServiceMax=50, TxNumBuffers=32, CpcsUU=0x5aa5, TxVc_CellRate=0x3000, TxVc_AtmHeader=0x00000640" ++#define AAL5_PARM "id=aal5, base=0x03000000, offset=0, int_line=15, ch0=[" CH0_PARM "]" ++#define SAR_PARM "id=sar, base=0x03000000, reset_bit=9, offset=0; UniNni=0, PdspEnable=1, Debug=0xFFFFFFFF" + #define RESET_PARM "id=ResetControl, base=0xA8611600" +-#define CH0_PARM "RxBufSize=1522, RxNumBuffers = 32, RxServiceMax = 50, TxServiceMax=50, TxNumBuffers=32, CpcsUU=0x5aa5, TxVc_CellRate=0x3000, TxVc_AtmHeader=0x00000640" +  + #define MAX_PVC_TABLE_ENTRY 16 +  diff --git a/package/ar7-atm/patches-D7.05.01.00/150-tasklet_mode.patch b/package/ar7-atm/patches-D7.05.01.00/150-tasklet_mode.patch new file mode 100644 index 000000000..582a7ca71 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/150-tasklet_mode.patch @@ -0,0 +1,13 @@ +Index: sangam_atm-D7.05.01.00/Makefile +=================================================================== +--- sangam_atm-D7.05.01.00.orig/Makefile	2010-03-07 18:09:59.000000000 +0100 ++++ sangam_atm-D7.05.01.00/Makefile	2010-03-07 18:10:06.000000000 +0100 +@@ -5,6 +5,7 @@ + CONFIG_SANGAM_ATM=m + #EXTRA_CFLAGS += -DEL -I. -DPOST_SILICON -DCOMMON_NSP -DCONFIG_LED_MODULE -DDEREGISTER_LED -DNO_ACT + #EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -DNO_ACT -D__NO__VOICE_PATCH__ -DEL +-EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -D__NO__VOICE_PATCH__ -DEL ++#EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -D__NO__VOICE_PATCH__ -DEL ++EXTRA_CFLAGS += -DEL -I$(PWD) -DPOST_SILICON -DCOMMON_NSP -D__NO__VOICE_PATCH__ -DEL -DCPATM_TASKLET_MODE + obj-$(CONFIG_SANGAM_ATM) := tiatm.o + tiatm-objs += cpsar.o aal5sar.o tn7sar.o tn7atm.o tn7dsl.o dsl_hal_api.o dsl_hal_support.o dsl_hal_advcfg.o diff --git a/package/ar7-atm/patches-D7.05.01.00/160-module-params.patch b/package/ar7-atm/patches-D7.05.01.00/160-module-params.patch new file mode 100644 index 000000000..40c80d986 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/160-module-params.patch @@ -0,0 +1,669 @@ +Index: sangam_atm-D7.05.01.00/tn7atm.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7atm.c	2010-03-07 18:27:11.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7atm.c	2010-03-07 18:27:34.000000000 +0100 +@@ -95,6 +95,146 @@ + MODULE_LICENSE("GPL"); + MODULE_DESCRIPTION ("Tnetd73xx ATM Device Driver"); + MODULE_AUTHOR ("Zhicheng Tang"); ++ ++int mp_sar_ipacemax = -1; ++module_param_named(ipacemax, mp_sar_ipacemax, int, 0); ++MODULE_PARM_DESC(ipacemax, "Interrupt pacing"); ++ ++char *mp_macc = NULL; ++module_param_named(macc, mp_macc, charp, 0); ++MODULE_PARM_DESC(macc, "MAC address"); ++ ++int mp_dsp_noboost = -1; ++module_param_named(dsp_noboost, mp_dsp_noboost, int, 0); ++MODULE_PARM_DESC(dsp_noboost, "Suppress DSP frequency boost"); ++ ++int mp_dsp_freq = -1; ++module_param_named(dsp_freq, mp_dsp_freq, int, 0); ++MODULE_PARM_DESC(dsp_freq, "Frequency to boost the DSP to"); ++ ++char *mp_featctl0 = NULL; ++module_param_named(featctl0, mp_featctl0, charp, 0); ++MODULE_PARM_DESC(featctl0, "DSL feature control 0"); ++ ++char *mp_featctl1 = NULL; ++module_param_named(featctl1, mp_featctl1, charp, 0); ++MODULE_PARM_DESC(featctl1, "DSL feature control 1"); ++ ++char *mp_phyctl0 = NULL; ++module_param_named(phyctl0, mp_phyctl0, charp, 0); ++MODULE_PARM_DESC(phyctl0, "DSL PHY control 0"); ++ ++char *mp_phyctl1 = NULL; ++module_param_named(phyctl1, mp_phyctl1, charp, 0); ++MODULE_PARM_DESC(phyctl1, "DSL PHY control 1"); ++ ++int mp_turbodsl = -1; ++module_param_named(turbodsl, mp_turbodsl, int, 0); ++MODULE_PARM_DESC(turbodsl, "Enable TurboDSL"); ++ ++int mp_sar_rxbuf = -1; ++module_param_named(sar_rxbuf, mp_sar_rxbuf, int, 0); ++MODULE_PARM_DESC(sar_rxbuf, "SAR RxBuf size"); ++ ++int mp_sar_rxmax = -1; ++module_param_named(sar_rxmax, mp_sar_rxmax, int, 0); ++MODULE_PARM_DESC(sar_rxmax, "SAR RxMax size"); ++ ++int mp_sar_txbuf = -1; ++module_param_named(sar_txbuf, mp_sar_txbuf, int, 0); ++MODULE_PARM_DESC(sar_txbuf, "SAR TxBuf size"); ++ ++int mp_sar_txmax = -1; ++module_param_named(sar_txmax, mp_sar_txmax, int, 0); ++MODULE_PARM_DESC(sar_txmax, "SAR TxMax size"); ++ ++char *mp_modulation = NULL; ++module_param_named(modulation, mp_modulation, charp, 0); ++MODULE_PARM_DESC(modulation, "Modulation"); ++ ++int mp_fine_gain_control = -1; ++module_param_named(fine_gain_control, mp_fine_gain_control, int, 0); ++MODULE_PARM_DESC(fine_gain_control, "Fine gain control"); ++ ++int mp_fine_gain_value = -1; ++module_param_named(fine_gain_value, mp_fine_gain_value, int, 0); ++MODULE_PARM_DESC(fine_gain_value, "Fine gain value"); ++ ++int mp_enable_margin_retrain = -1; ++module_param_named(enable_margin_retrain, mp_enable_margin_retrain, int, 0); ++MODULE_PARM_DESC(enable_margin_retrain, "Enable margin retrain"); ++ ++int mp_margin_threshold = -1; ++module_param_named(margin_threshold, mp_margin_threshold, int, 0); ++MODULE_PARM_DESC(margin_threshold, "Margin retrain treshold"); ++ ++int mp_enable_rate_adapt = -1; ++module_param_named(enable_rate_adapt, mp_enable_rate_adapt, int, 0); ++MODULE_PARM_DESC(enable_rate_adapt, "Enable rate adaption"); ++ ++int mp_powercutback = -1; ++module_param_named(powercutback, mp_powercutback, int, 0); ++MODULE_PARM_DESC(powercutback, "Enable / disable powercutback"); ++ ++int mp_trellis = -1; ++module_param_named(trellis, mp_trellis, int, 0); ++MODULE_PARM_DESC(trellis, "Enable / disable trellis coding"); ++ ++int mp_bitswap = -1; ++module_param_named(bitswap, mp_bitswap, int, 0); ++MODULE_PARM_DESC(bitswap, "Enable / disable bitswap"); ++ ++int mp_maximum_bits_per_carrier = -1; ++module_param_named(maximum_bits_per_carrier, mp_maximum_bits_per_carrier, int, 0); ++MODULE_PARM_DESC(maximum_bits_per_carrier, "Maximum bits per carrier"); ++ ++int mp_maximum_interleave_depth = -1; ++module_param_named(maximum_interleave_depth, mp_maximum_interleave_depth, int, 0); ++MODULE_PARM_DESC(maximum_interleave_depth, "Maximum interleave depth"); ++ ++int mp_pair_selection = -1; ++module_param_named(pair_selection, mp_pair_selection, int, 0); ++MODULE_PARM_DESC(pair_selection, "Pair selection"); ++ ++int mp_dgas_polarity = -1; ++module_param_named(dgas_polarity, mp_dgas_polarity, int, 0); ++MODULE_PARM_DESC(dgas_polarity, "DGAS polarity"); ++ ++int mp_los_alarm = -1; ++module_param_named(los_alarm, mp_los_alarm, int, 0); ++MODULE_PARM_DESC(los_alarm, "LOS alarm"); ++ ++char *mp_eoc_vendor_id = NULL; ++module_param_named(eoc_vendor_id, mp_eoc_vendor_id, charp, 0); ++MODULE_PARM_DESC(eoc_vendor_id, "EOC vendor id"); ++ ++int mp_eoc_vendor_revision = -1; ++module_param_named(eoc_vendor_revision, mp_eoc_vendor_revision, int, 0); ++MODULE_PARM_DESC(eoc_vendor_revision, "EOC vendor revision"); ++ ++char *mp_eoc_vendor_serialnum = NULL; ++module_param_named(eoc_vendor_serialnum, mp_eoc_vendor_serialnum, charp, 0); ++MODULE_PARM_DESC(eoc_vendor_serialnum, "EOC vendor serial number"); ++ ++char *mp_invntry_vernum = NULL; ++module_param_named(invntry_vernum, mp_invntry_vernum, charp, 0); ++MODULE_PARM_DESC(invntry_vernum, "Inventory revision number"); ++ ++int mp_dsl_bit_tmode = -1; ++module_param_named(dsl_bit_tmode, mp_dsl_bit_tmode, int, 0); ++MODULE_PARM_DESC(dsl_bit_tmode, "DSL bit training mode"); ++ ++int mp_high_precision = -1; ++module_param_named(high_precision, mp_high_precision, int, 0); ++MODULE_PARM_DESC(high_precision, "High precision"); ++ ++int mp_autopvc_enable = -1; ++module_param_named(autopvc_enable, mp_autopvc_enable, int, 0); ++MODULE_PARM_DESC(autopvc_enable, "Enable / disable automatic PVC"); ++ ++int mp_oam_lb_timeout = -1; ++module_param_named(oam_lb_timeout, mp_oam_lb_timeout, int, 0); ++MODULE_PARM_DESC(oam_lb_timeout, "OAM LB timeout"); + #endif +  + #ifndef TRUE +@@ -728,9 +868,9 @@ +    * interrupt pacing +    */ +   ptr = prom_getenv ("sar_ipacemax"); +-  if (ptr) ++  if (ptr || mp_sar_ipacemax != -1) +   { +-    def_sar_inter_pace = os_atoi (ptr); ++    def_sar_inter_pace = mp_sar_ipacemax == -1 ? os_atoi (ptr) : mp_sar_ipacemax; +   } +   /* avalanche_request_pacing (priv->sar_irq, ATM_SAR_INT_PACING_BLOCK_NUM, +                             def_sar_inter_pace); */ +@@ -880,7 +1020,7 @@ +   char esi_addr[ESI_LEN] = { 0x00, 0x00, 0x11, 0x22, 0x33, 0x44 }; +   char *esiaddr_str = NULL; +  +-  esiaddr_str = prom_getenv ("macc"); ++  esiaddr_str = mp_macc ? mp_macc : prom_getenv ("maca"); +  +   if (!esiaddr_str) +   { +@@ -2139,15 +2279,15 @@ + //UR8_MERGE_END   CQ10450* +  +   cp = prom_getenv ("dsp_noboost"); +-  if (cp) ++  if (cp || mp_dsp_noboost != -1) +   { +-    dsp_noboost = os_atoi (cp); ++    dsp_noboost = mp_dsp_noboost == -1 ? os_atoi (cp) : mp_dsp_noboost; +   } +  +   cp = (char *) prom_getenv ("dsp_freq"); +-  if (cp) ++  if (cp || mp_dsp_freq != -1) +   { +-    dspfreq = os_atoi (cp); ++    dspfreq = mp_dsp_freq == -1 ? os_atoi (cp) : mp_dsp_freq; +     if (dspfreq == 250) +     { +       boostDsp = 1; +@@ -2396,15 +2536,17 @@ +   // Inter-Op DSL phy Control +   // Note the setting of _dsl_Feature_0 and _dsl_Feature_1 must before +   // dslhal_api_dslStartup (in tn7dsl_init()). +-  if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_0")) != NULL) ++  if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_0")) != NULL || mp_featctl0 != NULL) +   { +-    _dsl_Feature_0 = os_atoih (ptr); ++    if (mp_featctl0 != NULL) ptr = mp_featctl0; ++    _dsl_Feature_0 = os_atoh (ptr); +     _dsl_Feature_0_defined = 1; +   } +  +-  if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_1")) != NULL) ++  if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_1")) != NULL || mp_featctl1 != NULL) +   { +-    _dsl_Feature_1 = os_atoih (ptr); ++    if (mp_featctl1 != NULL) ptr = mp_featctl1; ++    _dsl_Feature_1 = os_atoh (ptr); +     _dsl_Feature_1_defined = 1; +   } +  +@@ -2412,15 +2554,17 @@ +   // DSL phy Feature Control +   // Note the setting of _dsl_PhyControl_0 and _dsl_PhyControl_1 must before +   // dslhal_api_dslStartup (in tn7dsl_init()). +-  if ((ptr = prom_getenv ("DSL_PHY_CNTL_0")) != NULL) ++  if ((ptr = prom_getenv ("DSL_PHY_CNTL_0")) != NULL || mp_phyctl0 != NULL) +   { +-    _dsl_PhyControl_0 = os_atoih (ptr); ++    if (mp_phyctl0 != NULL) ptr = mp_phyctl0; ++    _dsl_PhyControl_0 = os_atoh (ptr); +     _dsl_PhyControl_0_defined = 1; +   } +  +-  if ((ptr = prom_getenv ("DSL_PHY_CNTL_1")) != NULL) ++  if ((ptr = prom_getenv ("DSL_PHY_CNTL_1")) != NULL || mp_phyctl1 != NULL) +   { +-    _dsl_PhyControl_1 = os_atoih (ptr); ++    if (mp_phyctl1 != NULL) ptr = mp_phyctl1; ++    _dsl_PhyControl_1 = os_atoh (ptr); +     _dsl_PhyControl_1_defined = 1; +   } +  +@@ -2440,12 +2584,12 @@ +   // read config for turbo dsl +     +   ptr = prom_getenv ("TurboDSL"); +-  if (ptr) ++  if (ptr || mp_turbodsl != -1) +   { +     #if 1 //[KT] +     bTurboDsl = os_atoi (ptr); +     #else +-    priv->bTurboDsl = os_atoi (ptr); ++    priv->bTurboDsl = mp_turbodsl == -1 ? os_atoi (ptr) : mp_turbodsl; +     #endif +   } +    else +@@ -2459,33 +2603,33 @@ +   priv->sarRxBuf = RX_BUFFER_NUM; +   ptr = NULL; +   ptr = prom_getenv ("SarRxBuf"); +-  if (ptr) ++  if (ptr || mp_sar_rxbuf != -1) +   { +-    priv->sarRxBuf = os_atoi (ptr); ++    priv->sarRxBuf = mp_sar_rxbuf == -1 ? os_atoi (ptr) : mp_sar_rxbuf; +   } +  +   priv->sarRxMax = RX_SERVICE_MAX; +   ptr = NULL; +   ptr = prom_getenv ("SarRxMax"); +-  if (ptr) ++  if (ptr || mp_sar_rxmax != -1) +   { +-    priv->sarRxMax = os_atoi (ptr); ++    priv->sarRxMax = mp_sar_rxmax == -1 ? os_atoi (ptr) : mp_sar_rxmax; +   } +  +   priv->sarTxBuf = TX_BUFFER_NUM; +   ptr = NULL; +   ptr = prom_getenv ("SarTxBuf"); +-  if (ptr) ++  if (ptr || mp_sar_txbuf != -1) +   { +-    priv->sarTxBuf = os_atoi (ptr); ++    priv->sarTxBuf = mp_sar_txbuf == -1 ? os_atoi (ptr) : mp_sar_txbuf; +   } +  +   priv->sarTxMax = TX_SERVICE_MAX; +   ptr = NULL; +   ptr = prom_getenv ("SarTxMax"); +-  if (ptr) ++  if (ptr || mp_sar_txmax != -1) +   { +-    priv->sarTxMax = os_atoi (ptr); ++    priv->sarTxMax = mp_sar_txmax == -1 ? os_atoi (ptr) : mp_sar_txmax; +   } +  + #ifdef AR7_EFM +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2010-03-07 18:27:11.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 18:28:15.000000000 +0100 +@@ -148,6 +148,27 @@ + #define NEW_TRAINING_VAL_T1413  128 + #define NEW_TRAINING_VAL_MMODE  255 +  ++extern char *mp_modulation; ++extern int mp_fine_gain_control; ++extern int mp_fine_gain_value; ++extern int mp_enable_margin_retrain; ++extern int mp_margin_threshold; ++extern int mp_enable_rate_adapt; ++extern int mp_powercutback; ++extern int mp_trellis; ++extern int mp_bitswap; ++extern int mp_maximum_bits_per_carrier; ++extern int mp_maximum_interleave_depth; ++extern int mp_pair_selection; ++extern int mp_dgas_polarity; ++extern int mp_los_alarm; ++extern char *mp_eoc_vendor_id; ++extern int mp_eoc_vendor_revision; ++extern char *mp_eoc_vendor_serialnum; ++extern char *mp_invntry_vernum; ++extern int mp_dsl_bit_tmode; ++extern int mp_high_precision; ++ + int testflag1 = 0; + extern int  __guDbgLevel; + extern sar_stat_t sarStat; +@@ -2933,24 +2954,24 @@ +                                 (unsigned char *) &oamFeature, 4); + 	 +   ptr = prom_getenv("DSL_FEATURE_CNTL_0");  +-  if(!ptr) +-    prom_setenv("DSL_FEATURE_CNTL_0", "0x00004000"); ++  //if(!ptr) ++    //prom_setenv("DSL_FEATURE_CNTL_0", "0x00004000"); +  +   ptr = prom_getenv("DSL_FEATURE_CNTL_1");  +-  if(!ptr)    +-	prom_setenv("DSL_FEATURE_CNTL_1", "0x00000000"); ++  //if(!ptr)    ++	//prom_setenv("DSL_FEATURE_CNTL_1", "0x00000000"); +  +   ptr = prom_getenv("DSL_PHY_CNTL_0");  +-  if(!ptr)    +-	prom_setenv("DSL_PHY_CNTL_0", "0x00000400"); ++  //if(!ptr)    ++	//prom_setenv("DSL_PHY_CNTL_0", "0x00000400"); + 	 +   ptr = prom_getenv("enable_margin_retrain");  +-  if(!ptr)    +-	prom_setenv("enable_margin_retrain", "0"); ++  //if(!ptr)    ++	//prom_setenv("enable_margin_retrain", "0"); + 	 +   ptr = prom_getenv("modulation"); +-  if(!ptr) +-    prom_setenv("modulation", "0xbf"); ++  //if(!ptr) ++    //prom_setenv("modulation", "0xbf"); +    + #define EOC_VENDOR_ID "4200534153000000" + #define EOC_VENDOR_REVISION "FW370090708b1_55" +@@ -2959,25 +2980,25 @@ +   ptr = prom_getenv("eoc_vendor_id"); +   if(!ptr || strcmp(ptr,EOC_VENDOR_ID) != 0 || strlen(ptr) != strlen(EOC_VENDOR_ID)) +   { +-      if(ptr)      	 +-         prom_unsetenv("eoc_vendor_id"); +-      prom_setenv("eoc_vendor_id",EOC_VENDOR_ID); ++      //if(ptr)      	 ++         //prom_unsetenv("eoc_vendor_id"); ++      //prom_setenv("eoc_vendor_id",EOC_VENDOR_ID); +   } +        +   ptr = prom_getenv("eoc_vendor_revision"); +   if(!ptr || strcmp(ptr,EOC_VENDOR_REVISION) != 0 || strlen(ptr) != strlen(EOC_VENDOR_REVISION)) +   {   +-      if(ptr)      	 +-         prom_unsetenv("eoc_vendor_revision"); +-      prom_setenv("eoc_vendor_revision",EOC_VENDOR_REVISION); ++      //if(ptr)      	 ++         //prom_unsetenv("eoc_vendor_revision"); ++      //prom_setenv("eoc_vendor_revision",EOC_VENDOR_REVISION); +   } +        +   ptr = prom_getenv("eoc_vendor_serialnum"); +   if(!ptr || strcmp(ptr,EOC_VENDOR_SERIALNUM) != 0 || strlen(ptr) != strlen(EOC_VENDOR_SERIALNUM)) +   { +-      if(ptr)      	 +-         prom_unsetenv("eoc_vendor_serialnum"); +-      prom_setenv("eoc_vendor_serialnum",EOC_VENDOR_SERIALNUM); ++      //if(ptr)      	 ++        // prom_unsetenv("eoc_vendor_serialnum"); ++      //prom_setenv("eoc_vendor_serialnum",EOC_VENDOR_SERIALNUM); +   } +  +   /* Do only if we are in the new Base PSP 7.4.*/ +@@ -2994,92 +3015,88 @@ +              we clear the modulation environment variable, as this could potentially +              not have the same meaning in the new mode. +           */ +-         prom_unsetenv("modulation"); +-         prom_setenv("DSL_UPG_DONE", "1"); ++         //prom_unsetenv("modulation"); ++         //prom_setenv("DSL_UPG_DONE", "1"); +       } +   } +   #endif +  +   // modulation +   ptr = prom_getenv("modulation"); +-  if (ptr) ++  if (ptr || mp_modulation != NULL) +   { +-    tn7dsl_set_modulation(ptr, FALSE); ++    tn7dsl_set_modulation(mp_modulation == NULL ? ptr : mp_modulation, FALSE); +   } +  +   // Fine Gains +   ptr = prom_getenv("fine_gain_control"); +-  if (ptr) ++  if (ptr || mp_fine_gain_control != -1) +   { +-    value = os_atoi(ptr); ++    value = mp_fine_gain_control == -1 ? os_atoi(ptr) : mp_fine_gain_control; +     tn7dsl_ctrl_fineGain(value); +   } +   ptr = NULL; +   ptr = prom_getenv("fine_gain_value"); +-  if(ptr) +-    tn7dsl_set_fineGainValue(os_atoh(ptr)); ++  if(ptr || mp_fine_gain_value != -1) ++    tn7dsl_set_fineGainValue(mp_fine_gain_value == -1 ? os_atoh(ptr) : mp_fine_gain_value); +  +   // margin retrain +   ptr = NULL; +   ptr = prom_getenv("enable_margin_retrain"); +-  if(ptr) ++  value = mp_enable_margin_retrain == -1 ? (ptr ? os_atoi(ptr) : 0) : mp_enable_margin_retrain; ++ ++  if (value == 1) +   { +-    value = os_atoi(ptr); +-    if(value == 1) ++    dslhal_api_setMarginMonitorFlags(pIhw, 0, 1); ++    bMarginRetrainEnable = 1; ++    //printk("enable showtime margin monitor.\n"); ++ ++    ptr = NULL; ++    ptr = prom_getenv("margin_threshold"); ++    value = mp_margin_threshold == -1 ? (ptr ? os_atoi(ptr) : 0) : mp_margin_threshold; ++ ++    if(value >= 0) +     { +-      dslhal_api_setMarginMonitorFlags(pIhw, 0, 1); +-      bMarginRetrainEnable = 1; +-      //printk("enable showtime margin monitor.\n"); +-      ptr = NULL; +-      ptr = prom_getenv("margin_threshold"); +-      if(ptr) +-      { +-        value = os_atoi(ptr); +-        //printk("Set margin threshold to %d x 0.5 db\n",value); +-        if(value >= 0) +-        { +-          dslhal_api_setMarginThreshold(pIhw, value); +-          bMarginThConfig=1; +-        } +-      } ++      dslhal_api_setMarginThreshold(pIhw, value); ++      bMarginThConfig=1; +     } +   } +  +   // rate adapt +   ptr = NULL; +   ptr = prom_getenv("enable_rate_adapt"); +-  if(ptr) ++  if(ptr || mp_enable_rate_adapt != -1) +   { +-    dslhal_api_setRateAdaptFlag(pIhw, os_atoi(ptr)); ++    dslhal_api_setRateAdaptFlag(pIhw, mp_enable_rate_adapt == -1 ? os_atoi(ptr) : mp_enable_rate_adapt); +   } +  +   // set powercutback +   ptr = NULL; +   ptr = prom_getenv("powercutback"); +-  if(ptr) ++  if(ptr || mp_powercutback != -1) +   { +-    dslhal_advcfg_onOffPcb(pIhw, os_atoi(ptr)); ++    dslhal_advcfg_onOffPcb(pIhw, mp_powercutback == -1 ? os_atoi(ptr) : mp_powercutback); +   } +  +   // trellis +   ptr = NULL; +   ptr = prom_getenv("trellis"); +-  if(ptr) ++  if(ptr || mp_trellis != -1) +   { +-    dslhal_api_setTrellisFlag(pIhw, os_atoi(ptr)); +-    trellis = os_atoi(ptr); ++    trellis = mp_trellis == -1 ? os_atoi(ptr) : mp_trellis; ++    dslhal_api_setTrellisFlag(pIhw, trellis); +     //printk("trellis=%d\n"); +   } +  +   // bitswap +   ptr = NULL; +   ptr = prom_getenv("bitswap"); +-  if(ptr) ++  if(ptr || mp_bitswap != -1) +   { +     int offset[2] = {33, 0}; +     unsigned int bitswap; +  +-    bitswap = os_atoi(ptr); ++    bitswap = mp_bitswap == -1 ? os_atoi(ptr) : mp_bitswap; +  +     tn7dsl_generic_read(2, offset); +     dslReg &= dslhal_support_byteSwap32(0xFFFFFF00); +@@ -3097,46 +3114,47 @@ +   // maximum bits per carrier +   ptr = NULL; +   ptr = prom_getenv("maximum_bits_per_carrier"); +-  if(ptr) ++  if(ptr || mp_maximum_bits_per_carrier != -1) +   { +-    dslhal_api_setMaxBitsPerCarrierUpstream(pIhw, os_atoi(ptr)); ++    dslhal_api_setMaxBitsPerCarrierUpstream(pIhw, mp_maximum_bits_per_carrier == -1 ? os_atoi(ptr) : mp_maximum_bits_per_carrier); +   } +  +   // maximum interleave depth +   ptr = NULL; +   ptr = prom_getenv("maximum_interleave_depth"); +-  if(ptr) ++  if(ptr || mp_maximum_interleave_depth != -1) +   { +-    dslhal_api_setMaxInterleaverDepth(pIhw, os_atoi(ptr)); ++    dslhal_api_setMaxInterleaverDepth(pIhw, mp_maximum_interleave_depth == -1 ? os_atoi(ptr) : mp_maximum_interleave_depth); +   } +  +   // inner and outer pairs +   ptr = NULL; +   ptr = prom_getenv("pair_selection"); +-  if(ptr) ++  if(ptr || mp_pair_selection != -1) +   { +-    dslhal_api_selectInnerOuterPair(pIhw, os_atoi(ptr)); ++    dslhal_api_selectInnerOuterPair(pIhw, mp_pair_selection == -1 ? os_atoi(ptr) : mp_pair_selection); +   } +  +   ptr = NULL; +   ptr = prom_getenv("dgas_polarity"); +-  if(ptr) ++  if(ptr || mp_dgas_polarity != -1) +   { +     dslhal_api_configureDgaspLpr(pIhw, 1, 1); +-    dslhal_api_configureDgaspLpr(pIhw, 0, os_atoi(ptr)); ++    dslhal_api_configureDgaspLpr(pIhw, 0, mp_dgas_polarity == -1 ? os_atoi(ptr) : mp_dgas_polarity); +   } +  +   ptr = NULL; +   ptr = prom_getenv("los_alarm"); +-  if(ptr) ++  if(ptr || mp_los_alarm != -1) +   { +-    dslhal_api_disableLosAlarm(pIhw, os_atoi(ptr)); ++    dslhal_api_disableLosAlarm(pIhw, mp_los_alarm == -1 ? os_atoi(ptr) : mp_los_alarm); +   } +  +   ptr = NULL; +   ptr = prom_getenv("eoc_vendor_id"); +-  if(ptr) ++  if(ptr || mp_eoc_vendor_id != NULL) +   { ++    ptr = mp_eoc_vendor_id == NULL ? ptr : mp_eoc_vendor_id; +     for(i=0;i<8;i++) +     { +       tmp[0]=ptr[i*2]; +@@ -3161,26 +3179,26 @@ +   } +   ptr = NULL; +   ptr = prom_getenv("eoc_vendor_revision"); +-  if(ptr) ++  if(ptr || mp_eoc_vendor_revision != -1) +   { +-    value = os_atoi(ptr); ++    value = mp_eoc_vendor_revision == -1 ? os_atoi(ptr) : mp_eoc_vendor_revision; +     //printk("eoc rev=%d\n", os_atoi(ptr)); +     dslhal_api_setEocRevisionNumber(pIhw, (char *)&value); +  +   } +   ptr = NULL; +   ptr = prom_getenv("eoc_vendor_serialnum"); +-  if(ptr) ++  if(ptr || mp_eoc_vendor_serialnum != NULL) +   { +-    dslhal_api_setEocSerialNumber(pIhw, ptr); ++    dslhal_api_setEocSerialNumber(pIhw, mp_eoc_vendor_serialnum == NULL ? ptr : mp_eoc_vendor_serialnum); +   } +  +   // CQ10037 Added invntry_vernum environment variable to be able to set version number in ADSL2, ADSL2+ modes. +   ptr = NULL; +   ptr = prom_getenv("invntry_vernum"); +-  if(ptr) ++  if(ptr || mp_invntry_vernum != NULL) +   { +-    dslhal_api_setEocRevisionNumber(pIhw, ptr); ++    dslhal_api_setEocRevisionNumber(pIhw, mp_invntry_vernum == NULL ? ptr : mp_invntry_vernum); +   } +  +   return 0; +@@ -3225,7 +3243,7 @@ +    * backward compatibility. +    */ +   cp = prom_getenv("DSL_BIT_TMODE"); +-  if (cp) ++  if (cp || mp_dsl_bit_tmode != -1) +   { +     printk("%s : env var DSL_BIT_TMODE is set\n", __FUNCTION__); +     /* +@@ -3254,9 +3272,9 @@ +  + //  UR8_MERGE_START CQ11054   Jack Zhang +   cp = prom_getenv("high_precision"); +-  if (cp) ++  if (cp || mp_high_precision != -1) +   { +-    high_precision_selected = os_atoi(cp); ++    high_precision_selected = mp_high_precision == -1 ? os_atoi(cp) : mp_high_precision; +   } +   if ( high_precision_selected) +   { +Index: sangam_atm-D7.05.01.00/tn7sar.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7sar.c	2010-03-07 18:27:11.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7sar.c	2010-03-07 18:27:34.000000000 +0100 +@@ -76,6 +76,8 @@ + #include "tn7atm.h" + #include "tn7api.h" +  ++extern int mp_oam_lb_timeout; ++extern int mp_autopvc_enable; +  + /* PDSP Firmware files */ + #include "tnetd7300_sar_firm.h" +@@ -932,9 +934,9 @@ +   pHalDev  = (HAL_DEVICE *)priv->pSarHalDev; +  +   pauto_pvc = prom_getenv("autopvc_enable"); +-  if(pauto_pvc)  //CQ10273 ++  if(pauto_pvc || mp_autopvc_enable != -1)  //CQ10273 +   { +-    auto_pvc =tn7sar_strtoul(pauto_pvc, NULL, 10); ++    auto_pvc = mp_autopvc_enable == -1 ? tn7sar_strtoul(pauto_pvc, NULL, 10) : mp_autopvc_enable; +   } +  +   memset(&chInfo, 0xff, sizeof(chInfo)); +@@ -1133,9 +1135,9 @@ +  +   /* read in oam lb timeout value */ +   pLbTimeout = prom_getenv("oam_lb_timeout"); +-  if(pLbTimeout) ++  if(pLbTimeout || mp_oam_lb_timeout != -1) +   { +-    lbTimeout =tn7sar_strtoul(pLbTimeout, NULL, 10); ++    lbTimeout = mp_oam_lb_timeout == -1 ? tn7sar_strtoul(pLbTimeout, NULL, 10) : mp_oam_lb_timeout; +     oamLbTimeout = lbTimeout; +     pHalFunc->Control(pHalDev,"OamLbTimeout", "Set", &lbTimeout); +   } diff --git a/package/ar7-atm/patches-D7.05.01.00/170-bus_id_removal.patch b/package/ar7-atm/patches-D7.05.01.00/170-bus_id_removal.patch new file mode 100644 index 000000000..9cafa5e7c --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/170-bus_id_removal.patch @@ -0,0 +1,32 @@ +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2010-03-07 18:18:39.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 18:19:04.000000000 +0100 +@@ -117,6 +117,7 @@ + #include <linux/vmalloc.h> + #include <linux/file.h> + #include <linux/firmware.h> ++#include <linux/version.h> +  + #include <asm/io.h> + #include <asm/ar7/ar7.h> +@@ -492,7 +493,9 @@ + } +  + static struct device avsar = { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) + 	.bus_id    = "vlynq", ++#endif + 	.release   = avsar_release, + }; +  +@@ -501,6 +504,9 @@ + 	const struct firmware *fw_entry; + 	size_t size; +  ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30) ++	dev_set_name(&avsar, "avsar"); ++#endif + 	printk("requesting firmware image \"ar0700xx.bin\"\n"); + 	if(device_register(&avsar) < 0) { + 		printk(KERN_ERR diff --git a/package/ar7-atm/patches-D7.05.01.00/180-git_headers_include.patch b/package/ar7-atm/patches-D7.05.01.00/180-git_headers_include.patch new file mode 100644 index 000000000..39f0751a4 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/180-git_headers_include.patch @@ -0,0 +1,60 @@ +Index: sangam_atm-D7.05.01.00/tn7atm.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7atm.c	2010-03-07 18:16:20.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7atm.c	2010-03-07 18:19:09.000000000 +0100 +@@ -76,10 +76,16 @@ + #include <linux/proc_fs.h> + #include <linux/string.h> + #include <linux/ctype.h> ++#include <linux/version.h> +  + #include <asm/io.h> ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) + #include <asm/ar7/ar7.h> + #include <asm/ar7/prom.h> ++#else ++#include <asm/mach-ar7/ar7.h> ++#include <asm/mach-ar7/prom.h> ++#endif +  + #include "dsl_hal_api.h" + #ifdef AR7_EFM +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2010-03-07 18:19:04.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 18:19:09.000000000 +0100 +@@ -120,8 +120,13 @@ + #include <linux/version.h> +  + #include <asm/io.h> ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) + #include <asm/ar7/ar7.h> + #include <asm/ar7/prom.h> ++#else ++#include <asm/mach-ar7/ar7.h> ++#include <asm/mach-ar7/prom.h> ++#endif +  + /* Modules specific header files */ + #ifdef AR7_EFM +Index: sangam_atm-D7.05.01.00/tn7sar.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7sar.c	2010-03-07 18:10:13.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7sar.c	2010-03-07 18:19:09.000000000 +0100 +@@ -53,10 +53,16 @@ + #include <linux/proc_fs.h> + #include <linux/string.h> + #include <linux/ctype.h> ++#include <linux/version.h> +  + #include <asm/io.h> ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) + #include <asm/ar7/ar7.h> + #include <asm/ar7/prom.h> ++#else ++#include <asm/mach-ar7/ar7.h> ++#include <asm/mach-ar7/prom.h> ++#endif +  + #define _CPHAL_AAL5 + #define _CPHAL_SAR diff --git a/package/ar7-atm/patches-D7.05.01.00/190-2.6.32_proc_fixes.patch b/package/ar7-atm/patches-D7.05.01.00/190-2.6.32_proc_fixes.patch new file mode 100644 index 000000000..fae93ca29 --- /dev/null +++ b/package/ar7-atm/patches-D7.05.01.00/190-2.6.32_proc_fixes.patch @@ -0,0 +1,29 @@ +Index: sangam_atm-D7.05.01.00/tn7dsl.c +=================================================================== +--- sangam_atm-D7.05.01.00.orig/tn7dsl.c	2010-03-07 18:19:09.000000000 +0100 ++++ sangam_atm-D7.05.01.00/tn7dsl.c	2010-03-07 18:19:12.000000000 +0100 +@@ -3615,8 +3615,11 @@ +    */ +   if(write) +     { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) +     ret = proc_dostring(ctl, write, filp, buffer, lenp, 0); +- ++#else ++    ret = proc_dostring(ctl, write, buffer, lenp, 0); ++#endif +     switch (ctl->ctl_name) +       { +       case DEV_DSLMOD: +@@ -3701,7 +3704,11 @@ +   else +     { +     len += sprintf(info+len, mod_req); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32) +     ret = proc_dostring(ctl, write, filp, buffer, lenp, 0); ++#else ++    ret = proc_dostring(ctl, write, buffer, lenp, 0); ++#endif +     } +   return ret; + }  | 
