summaryrefslogtreecommitdiff
path: root/package/sangam-atm
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2009-12-17 20:17:21 +0100
committerWaldemar Brodkorb <wbx@openadk.org>2009-12-17 20:17:21 +0100
commitf9b8f27119a5fc811c2a0a25e686638c8b5680b8 (patch)
tree53cbbe8044f43ed924da0c725c2df9b9b331f3a3 /package/sangam-atm
parentbb17a19fcc7f7d10369eed7f6c8662f6e4df9d4b (diff)
add sangam-atm package
- driver package for ag241 dsl modem, it loads, but we will see if it works..
Diffstat (limited to 'package/sangam-atm')
-rw-r--r--package/sangam-atm/Config.in23
-rw-r--r--package/sangam-atm/Makefile41
-rw-r--r--package/sangam-atm/patches/patch-Makefile29
-rw-r--r--package/sangam-atm/patches/patch-cp_sar_reg_h8
-rw-r--r--package/sangam-atm/patches/patch-cppi_cpaal5_c11
-rw-r--r--package/sangam-atm/patches/patch-dev_host_interface_h11
-rw-r--r--package/sangam-atm/patches/patch-dsl_hal_advcfg_c15
-rw-r--r--package/sangam-atm/patches/patch-dsl_hal_api_c107
-rw-r--r--package/sangam-atm/patches/patch-dsl_hal_support_c52
-rw-r--r--package/sangam-atm/patches/patch-dsl_hal_support_h11
-rw-r--r--package/sangam-atm/patches/patch-tn7api_h17
-rw-r--r--package/sangam-atm/patches/patch-tn7atm_c633
-rw-r--r--package/sangam-atm/patches/patch-tn7atm_h50
-rw-r--r--package/sangam-atm/patches/patch-tn7dsl_c602
-rw-r--r--package/sangam-atm/patches/patch-tn7sar_c79
15 files changed, 1689 insertions, 0 deletions
diff --git a/package/sangam-atm/Config.in b/package/sangam-atm/Config.in
new file mode 100644
index 000000000..fb37f6431
--- /dev/null
+++ b/package/sangam-atm/Config.in
@@ -0,0 +1,23 @@
+config ADK_PACKAGE_KMOD_SANGAM_ATM
+ prompt "kmod-sangam-atm.......................... Driver for TI AR7 DSL modem"
+ tristate
+ select ADK_KPACKAGE_KMOD_FW_LOADER
+ default n
+ help
+ ATM driver for AR7 DSL modem.
+
+choice
+prompt "Firmware type"
+depends on ADK_PACKAGE_KMOD_SANGAM_ATM
+
+config ADK_PACKAGE_SANGAM_ATM_ANNEX_A
+ prompt "Annex A, ADSL over POTS"
+ boolean
+ help
+
+config ADK_PACKAGE_SANGAM_ATM_ANNEX_B
+ prompt "Annex B, ADSL over ISDN"
+ boolean
+ help
+
+endchoice
diff --git a/package/sangam-atm/Makefile b/package/sangam-atm/Makefile
new file mode 100644
index 000000000..e6c98e4c4
--- /dev/null
+++ b/package/sangam-atm/Makefile
@@ -0,0 +1,41 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include ${TOPDIR}/rules.mk
+
+PKG_NAME:= sangam-atm
+PKG_VERSION:= 1.0
+PKG_RELEASE:= 1
+PKG_MD5SUM:= 3843f3e670967fe81561770ac960c1cd
+PKG_DESCR:= sangam-atm DSL modem driver for TI AR7 boards
+PKG_SECTION:= kernel
+PKG_SITES:= http://openadk.org/distfiles/
+
+include ${TOPDIR}/mk/package.mk
+include ${TOPDIR}/mk/kernel-vars.mk
+
+$(eval $(call PKG_template,KMOD_SANGAM_ATM,kmod-sangam-atm,${KERNEL_VERSION}+${PKG_VERSION}-${ADK_TARGET}-${PKG_RELEASE},kernel ${KERNEL_VERSION}-${KERNEL_RELEASE},${PKG_DESCR},${PKG_SECTION}))
+
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-build:
+ $(MAKE) ${KERNEL_MAKE_OPTS} LDFLAGS="" SUBDIRS="${WRKBUILD}" modules
+
+do-install:
+ ${INSTALL_DIR} ${IDIR_KMOD_SANGAM_ATM}/etc/modules.d/
+ echo "tiatm" > ${IDIR_KMOD_SANGAM_ATM}/etc/modules.d/70-sangam-atm
+ ${INSTALL_DIR} ${IDIR_KMOD_SANGAM_ATM}/lib/modules/${KERNEL_VERSION}/
+ ${INSTALL_DATA} ${WRKBUILD}/tiatm.ko \
+ ${IDIR_KMOD_SANGAM_ATM}/lib/modules/${KERNEL_VERSION}
+ ${INSTALL_DIR} ${IDIR_KMOD_SANGAM_ATM}/lib/firmware
+ifeq (${ADK_PACKAGE_SANGAM_ATM_ANNEX_A},y)
+ ${INSTALL_DATA} ${WRKBUILD}/ar0700mp.bin \
+ ${IDIR_KMOD_SANGAM_ATM}/lib/firmware/ar0700xx.bin
+endif
+ifeq (${ADK_PACKAGE_SANGAM_ATM_ANNEX_B},y)
+ ${INSTALL_DATA} ${WRKBUILD}/ar0700db.bin \
+ ${IDIR_KMOD_SANGAM_ATM}/lib/firmware/ar0700xx.bin
+endif
+
+include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/sangam-atm/patches/patch-Makefile b/package/sangam-atm/patches/patch-Makefile
new file mode 100644
index 000000000..4386b4a3f
--- /dev/null
+++ b/package/sangam-atm/patches/patch-Makefile
@@ -0,0 +1,29 @@
+--- sangam-atm-1.0.orig/Makefile 2005-06-01 05:46:28.000000000 +0200
++++ sangam-atm-1.0/Makefile 2009-12-17 19:10:13.456420379 +0100
+@@ -1,18 +1,11 @@
+-# 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
++#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/sangam-atm/patches/patch-cp_sar_reg_h b/package/sangam-atm/patches/patch-cp_sar_reg_h
new file mode 100644
index 000000000..2452ff86d
--- /dev/null
+++ b/package/sangam-atm/patches/patch-cp_sar_reg_h
@@ -0,0 +1,8 @@
+--- sangam-atm-1.0.orig/cp_sar_reg.h 2004-04-20 08:23:30.000000000 +0200
++++ sangam-atm-1.0/cp_sar_reg.h 2009-12-17 19:25:17.702739456 +0100
+@@ -214,4 +214,4 @@
+
+ /* END OF FILE */
+
+-#endif _INC_SAR_REG
++#endif
diff --git a/package/sangam-atm/patches/patch-cppi_cpaal5_c b/package/sangam-atm/patches/patch-cppi_cpaal5_c
new file mode 100644
index 000000000..a32408982
--- /dev/null
+++ b/package/sangam-atm/patches/patch-cppi_cpaal5_c
@@ -0,0 +1,11 @@
+--- sangam-atm-1.0.orig/cppi_cpaal5.c 2005-04-08 10:22:04.000000000 +0200
++++ sangam-atm-1.0/cppi_cpaal5.c 2009-12-17 19:09:41.516423269 +0100
+@@ -352,7 +352,7 @@ static int halRxReturn(HAL_RECEIVEINFO *
+ {
+ /* 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 */
diff --git a/package/sangam-atm/patches/patch-dev_host_interface_h b/package/sangam-atm/patches/patch-dev_host_interface_h
new file mode 100644
index 000000000..6927ab96b
--- /dev/null
+++ b/package/sangam-atm/patches/patch-dev_host_interface_h
@@ -0,0 +1,11 @@
+--- sangam-atm-1.0.orig/dev_host_interface.h 2007-03-07 14:40:14.000000000 +0100
++++ sangam-atm-1.0/dev_host_interface.h 2009-12-17 19:27:01.156438308 +0100
+@@ -1288,7 +1288,7 @@ typedef struct
+
+ SINT16 devCodecRxdf4Coeff[12] ; // (BOTH) IIR Coefficients
+ SINT16 devCodecTxdf2aCoeff[64] ; // (BOTH) FIR filter coefficients
+-#if OHIO_SUPPORT
++#if defined(OHIO_SUPPORT)
+ SINT16 devCodecTxdf2bCoeff[84] ; // (BOTH) FIR filter coefficients
+ #else
+ SINT16 devCodecTxdf2bCoeff[64] ; // (BOTH) FIR filter coefficients
diff --git a/package/sangam-atm/patches/patch-dsl_hal_advcfg_c b/package/sangam-atm/patches/patch-dsl_hal_advcfg_c
new file mode 100644
index 000000000..33149402d
--- /dev/null
+++ b/package/sangam-atm/patches/patch-dsl_hal_advcfg_c
@@ -0,0 +1,15 @@
+--- sangam-atm-1.0.orig/dsl_hal_advcfg.c 2005-08-09 09:20:46.000000000 +0200
++++ sangam-atm-1.0/dsl_hal_advcfg.c 2009-12-17 19:09:58.440420854 +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 */
diff --git a/package/sangam-atm/patches/patch-dsl_hal_api_c b/package/sangam-atm/patches/patch-dsl_hal_api_c
new file mode 100644
index 000000000..b88f4350f
--- /dev/null
+++ b/package/sangam-atm/patches/patch-dsl_hal_api_c
@@ -0,0 +1,107 @@
+--- sangam-atm-1.0.orig/dsl_hal_api.c 2007-03-07 04:13:06.000000000 +0100
++++ sangam-atm-1.0/dsl_hal_api.c 2009-12-17 19:39:11.092420102 +0100
+@@ -254,15 +254,15 @@
+ * of phyEnableDisableWord & phyControlWord to avoid changing API struct
+ * which may cause change required to application data structure.
+ ******************************************************************************/
+-#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.
+@@ -958,9 +958,6 @@ int dslhal_api_pollTrainingStatus(tidsl_
+
+ /*char *tmp;*/
+ DEV_HOST_dspOamSharedInterface_t *pdspOamSharedInterface, dspOamSharedInterface;
+-#if SWTC
+- DEV_HOST_tcHostCommDef_t TCHostCommDef;
+-#endif
+
+ dgprintf(5,"dslhal_api_pollTrainingStatus\n");
+ pdspOamSharedInterface = (DEV_HOST_dspOamSharedInterface_t *) ptidsl->pmainAddr;
+@@ -971,17 +968,6 @@ int dslhal_api_pollTrainingStatus(tidsl_
+ dgprintf(1,"dslhal_support_blockRead failed\n");
+ return DSLHAL_ERROR_BLOCK_READ;
+ }
+-#if SWTC
+- dspOamSharedInterface.tcHostComm_p =(DEV_HOST_tcHostCommDef_t *) dslhal_support_byteSwap32((unsigned int)dspOamSharedInterface.tcHostComm_p);
+-
+- rc = dslhal_support_blockRead((PVOID)dspOamSharedInterface.tcHostComm_p,
+- &TCHostCommDef, sizeof(DEV_HOST_tcHostCommDef_t));
+- if (rc)
+- {
+- dgprintf(1,"dslhal_support_blockRead failed\n");
+- return DSLHAL_ERROR_BLOCK_READ;
+- }
+-#endif
+
+ rc = dslhal_support_processTrainingState(ptidsl);
+ if(rc)
+@@ -1025,9 +1011,6 @@ int dslhal_api_handleTrainingInterrupt(t
+
+ /*char *tmp;*/
+ DEV_HOST_dspOamSharedInterface_t *pdspOamSharedInterface, dspOamSharedInterface;
+-#if SWTC
+- DEV_HOST_tcHostCommDef_t TCHostCommDef;
+-#endif
+ dgprintf(6,"dslhal_api_handleTrainingInterrupt\n");
+ pdspOamSharedInterface = (DEV_HOST_dspOamSharedInterface_t *) ptidsl->pmainAddr;
+ rc = dslhal_support_blockRead(pdspOamSharedInterface, &dspOamSharedInterface,
+@@ -1037,17 +1020,6 @@ int dslhal_api_handleTrainingInterrupt(t
+ dgprintf(1,"dslhal_support_blockRead failed\n");
+ return DSLHAL_ERROR_BLOCK_READ;
+ }
+-#if SWTC
+- dspOamSharedInterface.tcHostComm_p =(DEV_HOST_tcHostCommDef_t *) dslhal_support_byteSwap32((unsigned int)dspOamSharedInterface.tcHostComm_p);
+-
+- rc = dslhal_support_blockRead((PVOID)dspOamSharedInterface.tcHostComm_p,
+- &TCHostCommDef, sizeof(DEV_HOST_tcHostCommDef_t));
+- if (rc)
+- {
+- dgprintf(1,"dslhal_support_blockRead failed\n");
+- return DSLHAL_ERROR_BLOCK_READ;
+- }
+-#endif
+
+ if(intrSource & MASK_BITFIELD_INTERRUPTS)
+ {
+@@ -1705,27 +1677,15 @@ void dslhal_api_gatherStatistics(tidsl_t
+ /* Get ATM Stats for both US and DS for Channel 0*/
+ ptidsl->AppData.usAtm_count[0] = dslhal_support_byteSwap32(usAtmStats0.goodCount);
+ ptidsl->AppData.usIdle_count[0] = dslhal_support_byteSwap32(usAtmStats0.idleCount);
+-#if SWTC
+- ptidsl->AppData.usPdu_count[0] = dslhal_support_byteSwap32(usAtmStats0.pduCount);
+-#endif
+ ptidsl->AppData.dsGood_count[0] = dslhal_support_byteSwap32(dsAtmStats0.goodCount);
+ ptidsl->AppData.dsIdle_count[0] = dslhal_support_byteSwap32(dsAtmStats0.idleCount);
+-#if SWTC
+- ptidsl->AppData.dsPdu_count[0] = dslhal_support_byteSwap32(dsAtmStats0.pduCount);
+-#endif
+ ptidsl->AppData.dsBadHec_count[0] = dslhal_support_byteSwap32((dsAtmStats0.badHecCount));
+ ptidsl->AppData.dsOVFDrop_count[0] = dslhal_support_byteSwap32((dsAtmStats0.ovflwDropCount));
+ /* Get ATM Stats for both US and DS for Channel 1*/
+ ptidsl->AppData.usAtm_count[1] = dslhal_support_byteSwap32(usAtmStats1.goodCount);
+ ptidsl->AppData.usIdle_count[1] = dslhal_support_byteSwap32(usAtmStats1.idleCount);
+-#if SWTC
+- ptidsl->AppData.usPdu_count[1] = dslhal_support_byteSwap32(usAtmStats1.pduCount);
+-#endif
+ ptidsl->AppData.dsGood_count[1] = dslhal_support_byteSwap32(dsAtmStats1.goodCount);
+ ptidsl->AppData.dsIdle_count[1] = dslhal_support_byteSwap32(dsAtmStats1.idleCount);
+-#if SWTC
+- ptidsl->AppData.dsPdu_count[1] = dslhal_support_byteSwap32(dsAtmStats1.pduCount);
+-#endif
+ ptidsl->AppData.dsBadHec_count[1] = dslhal_support_byteSwap32((dsAtmStats1.badHecCount));
+ ptidsl->AppData.dsOVFDrop_count[1] = dslhal_support_byteSwap32((dsAtmStats1.ovflwDropCount));
+
diff --git a/package/sangam-atm/patches/patch-dsl_hal_support_c b/package/sangam-atm/patches/patch-dsl_hal_support_c
new file mode 100644
index 000000000..f1cdcd64a
--- /dev/null
+++ b/package/sangam-atm/patches/patch-dsl_hal_support_c
@@ -0,0 +1,52 @@
+--- sangam-atm-1.0.orig/dsl_hal_support.c 2007-05-18 09:47:33.000000000 +0200
++++ sangam-atm-1.0/dsl_hal_support.c 2009-12-17 19:40:14.924421047 +0100
+@@ -140,9 +140,9 @@
+ * oamFeature are overriden
+ // UR8_MERGE_END CQ10774 Ram
+ *******************************************************************************/
+-#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);
+@@ -1665,9 +1665,6 @@ int dslhal_support_hostDspCodeDownload(t
+ unsigned char * image;
+ char *tmp = (char *)DEV_HOST_DSP_OAM_POINTER_LOCATION;
+ DEV_HOST_dspVersionDef_t dspVersion;
+-#if SWTC
+- DEV_HOST_tcHostCommDef_t TCHostCommDef;
+-#endif
+ DEV_HOST_oamWrNegoParaDef_t OamWrNegoParaDef;
+ DEV_HOST_dspOamSharedInterface_t dspOamSharedInterface, *pdspOamSharedInterface;
+ DEV_HOST_olayDpDef_t olayDpParms;
+@@ -2152,26 +2149,6 @@ int dslhal_support_hostDspCodeDownload(t
+ }
+
+ /* table_dsp info */
+-#if SWTC
+- dspOamSharedInterface.tcHostComm_p = (DEV_HOST_tcHostCommDef_t *)dslhal_support_byteSwap32((unsigned int)dspOamSharedInterface.tcHostComm_p);
+- rc = dslhal_support_blockRead(&pdspOamSharedInterface->tcHostComm_p,
+- &pTCHostCommDef, 4);
+- if (rc)
+- {
+- dgprintf(1,"dslhal_support_blockRead failed\n");
+- return DSLHAL_ERROR_BLOCK_READ;
+- }
+-
+- pTCHostCommDef=(DEV_HOST_tcHostCommDef_t *) dslhal_support_byteSwap32((unsigned int)pTCHostCommDef);
+-
+- rc = dslhal_support_blockRead((PVOID)dspOamSharedInterface.tcHostComm_p,
+- &TCHostCommDef, sizeof(DEV_HOST_tcHostCommDef_t));
+- if (rc)
+- {
+- dgprintf(1,"dslhal_support_blockRead failed\n");
+- return DSLHAL_ERROR_BLOCK_READ;
+- }
+-#endif
+ /* Select the Multimode Training */
+ dspOamSharedInterface.oamWriteNegoParams_p = (DEV_HOST_oamWrNegoParaDef_t *)dslhal_support_byteSwap32((unsigned int)dspOamSharedInterface.oamWriteNegoParams_p);
+ rc = dslhal_support_blockRead((PVOID)dspOamSharedInterface.oamWriteNegoParams_p, &OamWrNegoParaDef, sizeof(DEV_HOST_oamWrNegoParaDef_t));
diff --git a/package/sangam-atm/patches/patch-dsl_hal_support_h b/package/sangam-atm/patches/patch-dsl_hal_support_h
new file mode 100644
index 000000000..074953501
--- /dev/null
+++ b/package/sangam-atm/patches/patch-dsl_hal_support_h
@@ -0,0 +1,11 @@
+--- sangam-atm-1.0.orig/dsl_hal_support.h 2005-11-11 09:07:04.000000000 +0100
++++ sangam-atm-1.0/dsl_hal_support.h 2009-12-17 19:09:41.532422794 +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 */
diff --git a/package/sangam-atm/patches/patch-tn7api_h b/package/sangam-atm/patches/patch-tn7api_h
new file mode 100644
index 000000000..7688e20e0
--- /dev/null
+++ b/package/sangam-atm/patches/patch-tn7api_h
@@ -0,0 +1,17 @@
+--- sangam-atm-1.0.orig/tn7api.h 2006-12-11 15:36:54.000000000 +0100
++++ sangam-atm-1.0/tn7api.h 2009-12-17 19:24:45.926721344 +0100
+@@ -107,7 +107,7 @@ int tn7dsl_proc_dbg_rmsgs4(char* buf, ch
+
+ int tn7dsl_proc_write_stats(struct file *fp, const char * buf, unsigned long count, void * data);
+ int tn7dsl_proc_modem(char* buf, char **start, off_t offset, int count,int *eof, void *data);
+-inline int tn7dsl_handle_interrupt(void);
++int tn7dsl_handle_interrupt(void);
+
+ void tn7dsl_dslmod_sysctl_register(void);
+ void tn7dsl_dslmod_sysctl_unregister(void);
+@@ -173,4 +173,4 @@ void tn7sar_get_sar_firmware_version(uns
+ int tn7sar_proc_oam_ping(char* buf, char **start, off_t offset, int count,int *eof, void *data);
+ int tn7sar_proc_pvc_table(char* buf, char **start, off_t offset, int count,int *eof, void *data);
+ int tn7sar_tx_flush(void *privContext, int chan, int queue, int skip);
+-#endif __SGAPI_H
++#endif
diff --git a/package/sangam-atm/patches/patch-tn7atm_c b/package/sangam-atm/patches/patch-tn7atm_c
new file mode 100644
index 000000000..744dec517
--- /dev/null
+++ b/package/sangam-atm/patches/patch-tn7atm_c
@@ -0,0 +1,633 @@
+--- sangam-atm-1.0.orig/tn7atm.c 2007-05-18 09:45:50.000000000 +0200
++++ sangam-atm-1.0/tn7atm.c 2009-12-17 19:10:27.616421480 +0100
+@@ -61,7 +61,6 @@
+ * UR8_MERGE_END CQ11057*
+ *********************************************************************************************/
+
+-#include <linux/config.h>
+ #include <linux/kernel.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+@@ -69,11 +68,20 @@
+ #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 <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"
+ #include "tn7atm.h"
+ #include "tn7api.h"
+@@ -82,8 +90,149 @@
+ #include "dsl_hal_register.h"
+
+ #ifdef MODULE
++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
+@@ -100,9 +249,9 @@ MODULE_AUTHOR ("Zhicheng Tang");
+
+ /*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)
+
+@@ -114,7 +263,7 @@ static int EnableQoS = FALSE;
+ /* 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);
+
+ static void tn7atm_close (struct atm_vcc *vcc);
+
+@@ -257,13 +406,12 @@ static const struct atmdev_ops tn7atm_op
+ 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;
+@@ -559,62 +707,12 @@ static int turbodsl_check_priority_type(
+
+ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ *
+- * 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.
+ *
+ *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+-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;
+@@ -641,6 +739,7 @@ static void tn7atm_sar_irq (int irq, voi
+ #ifdef TIATM_INST_SUPP
+ psp_trace_par (ATM_DRV_SAR_ISR_EXIT, retval);
+ #endif
++ return IRQ_HANDLED;
+ }
+
+ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -650,7 +749,7 @@ static void tn7atm_sar_irq (int irq, voi
+ * 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;
+@@ -672,6 +771,8 @@ static void tn7atm_dsl_irq (int irq, voi
+ #ifdef TIATM_INST_SUPP
+ psp_trace_par (ATM_DRV_DSL_ISR_EXIT, retval);
+ #endif
++
++ return IRQ_HANDLED;
+ }
+
+ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -693,25 +794,25 @@ static int __init tn7atm_irq_request (st
+ * Register SAR interrupt
+ */
+ 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");
+
+ /*
+ * 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);
++/* avalanche_request_pacing (priv->sar_irq, ATM_SAR_INT_PACING_BLOCK_NUM,
++ def_sar_inter_pace);*/
+
+ /*
+ * 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 ****/
+@@ -842,7 +943,7 @@ static int __init tn7atm_get_ESI (struct
+ char esi_addr[ESI_LEN] = { 0x00, 0x00, 0x11, 0x22, 0x33, 0x44 };
+ char *esiaddr_str = NULL;
+
+- esiaddr_str = prom_getenv ("maca");
++ esiaddr_str = mp_macc ? mp_macc : prom_getenv ("maca");
+
+ if (!esiaddr_str)
+ {
+@@ -875,11 +976,15 @@ static int __init tn7atm_get_ESI (struct
+ #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");
+
+@@ -891,24 +996,18 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ return -1;
+ }
+
+- MOD_INC_USE_COUNT;
+-
+- /* find a free VPI/VCI */
+- tn7atm_walk_vccs(vcc, &vpi, &vci);
+-
+- vcc->vpi = vpi;
+- vcc->vci = vci;
++// MOD_INC_USE_COUNT;
+
+- 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;
+@@ -916,7 +1015,7 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ /* 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;
+ }
+@@ -925,7 +1024,7 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ 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);
+@@ -934,17 +1033,17 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ }
+ 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;
+ }
+@@ -976,6 +1075,7 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ 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;
+@@ -997,6 +1097,7 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ 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;
+@@ -1024,7 +1125,7 @@ int tn7atm_open (struct atm_vcc *vcc, sh
+ 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;
+@@ -1114,7 +1215,7 @@ void tn7atm_close (struct atm_vcc *vcc)
+ tn7atm_lut_clear (vcc, dmachan);
+ //spin_unlock_irqrestore (&closeLock, closeFlag);