X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/a3033be2c1157ac8f0faf254fa4160d057f0aefe..5b0a7225a5c1363a5b86535248799f77c0ce4fbd:/package/ar7-atm/patches/160-module-params.patch?ds=inline diff --git a/package/ar7-atm/patches/160-module-params.patch b/package/ar7-atm/patches/160-module-params.patch index 7c89fe538..d9f6e380e 100644 --- a/package/ar7-atm/patches/160-module-params.patch +++ b/package/ar7-atm/patches/160-module-params.patch @@ -1,585 +1,580 @@ -Index: package/ar7-atm/patches/150-module_params.patch -=================================================================== ---- package/ar7-atm/patches/150-module_params.patch (revision 0) -+++ package/ar7-atm/patches/150-module_params.patch (revision 0) -@@ -0,0 +1,580 @@ -+diff -urN sangam_atm-07.02.01.00/tn7atm.c sangam_atm-07.02.01.00.mod/tn7atm.c -+--- sangam_atm-07.02.01.00/tn7atm.c 2007-09-19 04:12:20.000000000 +0200 -++++ sangam_atm-07.02.01.00.mod/tn7atm.c 2007-09-20 14:45:19.280250000 +0200 -+@@ -84,6 +84,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 -+@@ -657,9 +797,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);*/ -+@@ -799,7 +939,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 ("macc"); -+ -+ if (!esiaddr_str) -+ { -+@@ -1932,15 +2072,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; -+@@ -2189,8 +2329,9 @@ -+ // 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) -+ { -++ if (mp_featctl0 != NULL) ptr = mp_featctl0; -+ if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to -+ // os_atoh -+ ptr += 2; -+@@ -2198,8 +2339,9 @@ -+ _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) -+ { -++ if (mp_featctl1 != NULL) ptr = mp_featctl1; -+ if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to -+ // os_atoh -+ ptr += 2; -+@@ -2211,8 +2353,9 @@ -+ // 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) -+ { -++ if (mp_phyctl0 != NULL) ptr = mp_phyctl0; -+ if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to -+ // os_atoh -+ ptr += 2; -+@@ -2220,8 +2363,9 @@ -+ _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) -+ { -++ if (mp_phyctl1 != NULL) ptr = mp_phyctl1; -+ if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to -+ // os_atoh -+ ptr += 2; -+@@ -2249,9 +2393,9 @@ -+ priv->bTurboDsl = 1; -+ // read config for turbo dsl -+ ptr = prom_getenv ("TurboDSL"); -+- if (ptr) -++ if (ptr || mp_turbodsl != -1) -+ { -+- priv->bTurboDsl = os_atoi (ptr); -++ priv->bTurboDsl = mp_turbodsl == -1 ? os_atoi (ptr) : mp_turbodsl; -+ } -+ -+ // @Added to make Rx buffer number & Service max configurable through -+@@ -2259,30 +2403,30 @@ -+ 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; -+ } -+ -+ return 0; -+diff -urN sangam_atm-07.02.01.00/tn7dsl.c sangam_atm-07.02.01.00.mod/tn7dsl.c -+--- sangam_atm-07.02.01.00/tn7dsl.c 2007-09-19 04:12:20.000000000 +0200 -++++ sangam_atm-07.02.01.00.mod/tn7dsl.c 2007-09-20 14:55:46.608375000 +0200 -+@@ -134,6 +134,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; -+@@ -2816,84 +2837,80 @@ -+ -+ // 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); -+@@ -2911,46 +2928,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]; -+@@ -2975,26 +2993,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; -+@@ -3038,7 +3056,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__); -+ /* -+@@ -3067,9 +3085,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) -+ { -+diff -urN sangam_atm-07.02.01.00/tn7sar.c sangam_atm-07.02.01.00.mod/tn7sar.c -+--- sangam_atm-07.02.01.00/tn7sar.c 2007-09-19 04:12:20.000000000 +0200 -++++ sangam_atm-07.02.01.00.mod/tn7sar.c 2007-09-20 14:23:50.436500000 +0200 -+@@ -73,6 +73,8 @@ -+ /* PDSP Firmware files */ -+ #include "tnetd7300_sar_firm.h" -+ -++extern int mp_oam_lb_timeout; -++extern int mp_autopvc_enable; -+ -+ enum -+ { -+@@ -816,9 +818,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)); -+@@ -984,9 +986,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 -urN sangam_atm-07.02.01.00/tn7atm.c sangam_atm-07.02.01.00.mod/tn7atm.c +--- sangam_atm-07.02.01.00/tn7atm.c 2007-09-19 04:12:20.000000000 +0200 ++++ sangam_atm-07.02.01.00.mod/tn7atm.c 2007-09-20 14:45:19.280250000 +0200 +@@ -84,6 +84,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 +@@ -657,9 +797,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);*/ +@@ -799,7 +939,7 @@ + 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) + { +@@ -1932,15 +2072,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; +@@ -2189,8 +2329,9 @@ + // 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) + { ++ if (mp_featctl0 != NULL) ptr = mp_featctl0; + if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to + // os_atoh + ptr += 2; +@@ -2198,8 +2339,9 @@ + _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) + { ++ if (mp_featctl1 != NULL) ptr = mp_featctl1; + if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to + // os_atoh + ptr += 2; +@@ -2211,8 +2353,9 @@ + // 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) + { ++ if (mp_phyctl0 != NULL) ptr = mp_phyctl0; + if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to + // os_atoh + ptr += 2; +@@ -2220,8 +2363,9 @@ + _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) + { ++ if (mp_phyctl1 != NULL) ptr = mp_phyctl1; + if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to + // os_atoh + ptr += 2; +@@ -2249,9 +2393,9 @@ + priv->bTurboDsl = 1; + // read config for turbo dsl + ptr = prom_getenv ("TurboDSL"); +- if (ptr) ++ if (ptr || mp_turbodsl != -1) + { +- priv->bTurboDsl = os_atoi (ptr); ++ priv->bTurboDsl = mp_turbodsl == -1 ? os_atoi (ptr) : mp_turbodsl; + } + + // @Added to make Rx buffer number & Service max configurable through +@@ -2259,30 +2403,30 @@ + 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; + } + + return 0; +diff -urN sangam_atm-07.02.01.00/tn7dsl.c sangam_atm-07.02.01.00.mod/tn7dsl.c +--- sangam_atm-07.02.01.00/tn7dsl.c 2007-09-19 04:12:20.000000000 +0200 ++++ sangam_atm-07.02.01.00.mod/tn7dsl.c 2007-09-20 14:55:46.608375000 +0200 +@@ -134,6 +134,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; +@@ -2816,84 +2837,80 @@ + + // 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); +@@ -2911,46 +2928,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]; +@@ -2975,26 +2993,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; +@@ -3038,7 +3056,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__); + /* +@@ -3067,9 +3085,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) + { +diff -urN sangam_atm-07.02.01.00/tn7sar.c sangam_atm-07.02.01.00.mod/tn7sar.c +--- sangam_atm-07.02.01.00/tn7sar.c 2007-09-19 04:12:20.000000000 +0200 ++++ sangam_atm-07.02.01.00.mod/tn7sar.c 2007-09-20 14:23:50.436500000 +0200 +@@ -73,6 +73,8 @@ + /* PDSP Firmware files */ + #include "tnetd7300_sar_firm.h" + ++extern int mp_oam_lb_timeout; ++extern int mp_autopvc_enable; + + enum + { +@@ -816,9 +818,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)); +@@ -984,9 +986,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); + }