1--- a/tn7atm.c 2+++ b/tn7atm.c 3@@ -87,6 +87,146 @@ 4 MODULE_LICENSE("GPL"); 5 MODULE_DESCRIPTION ("Tnetd73xx ATM Device Driver"); 6 MODULE_AUTHOR ("Zhicheng Tang"); 7+ 8+int mp_sar_ipacemax = -1; 9+module_param_named(ipacemax, mp_sar_ipacemax, int, 0); 10+MODULE_PARM_DESC(ipacemax, "Interrupt pacing"); 11+ 12+char *mp_macc = NULL; 13+module_param_named(macc, mp_macc, charp, 0); 14+MODULE_PARM_DESC(macc, "MAC address"); 15+ 16+int mp_dsp_noboost = -1; 17+module_param_named(dsp_noboost, mp_dsp_noboost, int, 0); 18+MODULE_PARM_DESC(dsp_noboost, "Suppress DSP frequency boost"); 19+ 20+int mp_dsp_freq = -1; 21+module_param_named(dsp_freq, mp_dsp_freq, int, 0); 22+MODULE_PARM_DESC(dsp_freq, "Frequency to boost the DSP to"); 23+ 24+char *mp_featctl0 = NULL; 25+module_param_named(featctl0, mp_featctl0, charp, 0); 26+MODULE_PARM_DESC(featctl0, "DSL feature control 0"); 27+ 28+char *mp_featctl1 = NULL; 29+module_param_named(featctl1, mp_featctl1, charp, 0); 30+MODULE_PARM_DESC(featctl1, "DSL feature control 1"); 31+ 32+char *mp_phyctl0 = NULL; 33+module_param_named(phyctl0, mp_phyctl0, charp, 0); 34+MODULE_PARM_DESC(phyctl0, "DSL PHY control 0"); 35+ 36+char *mp_phyctl1 = NULL; 37+module_param_named(phyctl1, mp_phyctl1, charp, 0); 38+MODULE_PARM_DESC(phyctl1, "DSL PHY control 1"); 39+ 40+int mp_turbodsl = -1; 41+module_param_named(turbodsl, mp_turbodsl, int, 0); 42+MODULE_PARM_DESC(turbodsl, "Enable TurboDSL"); 43+ 44+int mp_sar_rxbuf = -1; 45+module_param_named(sar_rxbuf, mp_sar_rxbuf, int, 0); 46+MODULE_PARM_DESC(sar_rxbuf, "SAR RxBuf size"); 47+ 48+int mp_sar_rxmax = -1; 49+module_param_named(sar_rxmax, mp_sar_rxmax, int, 0); 50+MODULE_PARM_DESC(sar_rxmax, "SAR RxMax size"); 51+ 52+int mp_sar_txbuf = -1; 53+module_param_named(sar_txbuf, mp_sar_txbuf, int, 0); 54+MODULE_PARM_DESC(sar_txbuf, "SAR TxBuf size"); 55+ 56+int mp_sar_txmax = -1; 57+module_param_named(sar_txmax, mp_sar_txmax, int, 0); 58+MODULE_PARM_DESC(sar_txmax, "SAR TxMax size"); 59+ 60+char *mp_modulation = NULL; 61+module_param_named(modulation, mp_modulation, charp, 0); 62+MODULE_PARM_DESC(modulation, "Modulation"); 63+ 64+int mp_fine_gain_control = -1; 65+module_param_named(fine_gain_control, mp_fine_gain_control, int, 0); 66+MODULE_PARM_DESC(fine_gain_control, "Fine gain control"); 67+ 68+int mp_fine_gain_value = -1; 69+module_param_named(fine_gain_value, mp_fine_gain_value, int, 0); 70+MODULE_PARM_DESC(fine_gain_value, "Fine gain value"); 71+ 72+int mp_enable_margin_retrain = -1; 73+module_param_named(enable_margin_retrain, mp_enable_margin_retrain, int, 0); 74+MODULE_PARM_DESC(enable_margin_retrain, "Enable margin retrain"); 75+ 76+int mp_margin_threshold = -1; 77+module_param_named(margin_threshold, mp_margin_threshold, int, 0); 78+MODULE_PARM_DESC(margin_threshold, "Margin retrain treshold"); 79+ 80+int mp_enable_rate_adapt = -1; 81+module_param_named(enable_rate_adapt, mp_enable_rate_adapt, int, 0); 82+MODULE_PARM_DESC(enable_rate_adapt, "Enable rate adaption"); 83+ 84+int mp_powercutback = -1; 85+module_param_named(powercutback, mp_powercutback, int, 0); 86+MODULE_PARM_DESC(powercutback, "Enable / disable powercutback"); 87+ 88+int mp_trellis = -1; 89+module_param_named(trellis, mp_trellis, int, 0); 90+MODULE_PARM_DESC(trellis, "Enable / disable trellis coding"); 91+ 92+int mp_bitswap = -1; 93+module_param_named(bitswap, mp_bitswap, int, 0); 94+MODULE_PARM_DESC(bitswap, "Enable / disable bitswap"); 95+ 96+int mp_maximum_bits_per_carrier = -1; 97+module_param_named(maximum_bits_per_carrier, mp_maximum_bits_per_carrier, int, 0); 98+MODULE_PARM_DESC(maximum_bits_per_carrier, "Maximum bits per carrier"); 99+ 100+int mp_maximum_interleave_depth = -1; 101+module_param_named(maximum_interleave_depth, mp_maximum_interleave_depth, int, 0); 102+MODULE_PARM_DESC(maximum_interleave_depth, "Maximum interleave depth"); 103+ 104+int mp_pair_selection = -1; 105+module_param_named(pair_selection, mp_pair_selection, int, 0); 106+MODULE_PARM_DESC(pair_selection, "Pair selection"); 107+ 108+int mp_dgas_polarity = -1; 109+module_param_named(dgas_polarity, mp_dgas_polarity, int, 0); 110+MODULE_PARM_DESC(dgas_polarity, "DGAS polarity"); 111+ 112+int mp_los_alarm = -1; 113+module_param_named(los_alarm, mp_los_alarm, int, 0); 114+MODULE_PARM_DESC(los_alarm, "LOS alarm"); 115+ 116+char *mp_eoc_vendor_id = NULL; 117+module_param_named(eoc_vendor_id, mp_eoc_vendor_id, charp, 0); 118+MODULE_PARM_DESC(eoc_vendor_id, "EOC vendor id"); 119+ 120+int mp_eoc_vendor_revision = -1; 121+module_param_named(eoc_vendor_revision, mp_eoc_vendor_revision, int, 0); 122+MODULE_PARM_DESC(eoc_vendor_revision, "EOC vendor revision"); 123+ 124+char *mp_eoc_vendor_serialnum = NULL; 125+module_param_named(eoc_vendor_serialnum, mp_eoc_vendor_serialnum, charp, 0); 126+MODULE_PARM_DESC(eoc_vendor_serialnum, "EOC vendor serial number"); 127+ 128+char *mp_invntry_vernum = NULL; 129+module_param_named(invntry_vernum, mp_invntry_vernum, charp, 0); 130+MODULE_PARM_DESC(invntry_vernum, "Inventory revision number"); 131+ 132+int mp_dsl_bit_tmode = -1; 133+module_param_named(dsl_bit_tmode, mp_dsl_bit_tmode, int, 0); 134+MODULE_PARM_DESC(dsl_bit_tmode, "DSL bit training mode"); 135+ 136+int mp_high_precision = -1; 137+module_param_named(high_precision, mp_high_precision, int, 0); 138+MODULE_PARM_DESC(high_precision, "High precision"); 139+ 140+int mp_autopvc_enable = -1; 141+module_param_named(autopvc_enable, mp_autopvc_enable, int, 0); 142+MODULE_PARM_DESC(autopvc_enable, "Enable / disable automatic PVC"); 143+ 144+int mp_oam_lb_timeout = -1; 145+module_param_named(oam_lb_timeout, mp_oam_lb_timeout, int, 0); 146+MODULE_PARM_DESC(oam_lb_timeout, "OAM LB timeout"); 147 #endif 148 149 #ifndef TRUE 150@@ -655,9 +795,9 @@ static int __init tn7atm_irq_request (st 151 * interrupt pacing 152 */ 153 ptr = prom_getenv ("sar_ipacemax"); 154- if (ptr) 155+ if (ptr || mp_sar_ipacemax != -1) 156 { 157- def_sar_inter_pace = os_atoi (ptr); 158+ def_sar_inter_pace = mp_sar_ipacemax == -1 ? os_atoi (ptr) : mp_sar_ipacemax; 159 } 160 /* avalanche_request_pacing (priv->sar_irq, ATM_SAR_INT_PACING_BLOCK_NUM, 161 def_sar_inter_pace);*/ 162@@ -795,9 +935,18 @@ static int __init tn7atm_get_ESI (struct 163 { 164 int i; 165 char esi_addr[ESI_LEN] = { 0x00, 0x00, 0x11, 0x22, 0x33, 0x44 }; 166- char *esiaddr_str = NULL; 167+ char *esiaddr_str = mp_macc; 168 169- esiaddr_str = prom_getenv ("maca"); 170+ if (esiaddr_str == NULL) 171+ esiaddr_str = prom_getenv ("macdsl"); 172+ if (esiaddr_str == NULL) 173+ esiaddr_str = prom_getenv ("macc"); 174+ if (esiaddr_str == NULL) 175+ esiaddr_str = prom_getenv ("HWA_1"); 176+ if (esiaddr_str == NULL) 177+ esiaddr_str = prom_getenv ("macb"); 178+ if (esiaddr_str == NULL) 179+ esiaddr_str = prom_getenv ("maca"); 180 181 if (!esiaddr_str) 182 { 183@@ -1930,15 +2079,15 @@ static int tn7atm_autoDetectDspBoost (vo 184 //UR8_MERGE_END CQ10450* 185 186 cp = prom_getenv ("dsp_noboost"); 187- if (cp) 188+ if (cp || mp_dsp_noboost != -1) 189 { 190- dsp_noboost = os_atoi (cp); 191+ dsp_noboost = mp_dsp_noboost == -1 ? os_atoi (cp) : mp_dsp_noboost; 192 } 193 194 cp = (char *) prom_getenv ("dsp_freq"); 195- if (cp) 196+ if (cp || mp_dsp_freq != -1) 197 { 198- dspfreq = os_atoi (cp); 199+ dspfreq = mp_dsp_freq == -1 ? os_atoi (cp) : mp_dsp_freq; 200 if (dspfreq == 250) 201 { 202 boostDsp = 1; 203@@ -2187,8 +2336,9 @@ static int __init tn7atm_init (struct at 204 // Inter-Op DSL phy Control 205 // Note the setting of _dsl_Feature_0 and _dsl_Feature_1 must before 206 // dslhal_api_dslStartup (in tn7dsl_init()). 207- if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_0")) != NULL) 208+ if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_0")) != NULL || mp_featctl0 != NULL) 209 { 210+ if (mp_featctl0 != NULL) ptr = mp_featctl0; 211 if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to 212 // os_atoh 213 ptr += 2; 214@@ -2196,8 +2346,9 @@ static int __init tn7atm_init (struct at 215 _dsl_Feature_0_defined = 1; 216 } 217 218- if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_1")) != NULL) 219+ if ((ptr = prom_getenv ("DSL_FEATURE_CNTL_1")) != NULL || mp_featctl1 != NULL) 220 { 221+ if (mp_featctl1 != NULL) ptr = mp_featctl1; 222 if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to 223 // os_atoh 224 ptr += 2; 225@@ -2209,8 +2360,9 @@ static int __init tn7atm_init (struct at 226 // DSL phy Feature Control 227 // Note the setting of _dsl_PhyControl_0 and _dsl_PhyControl_1 must before 228 // dslhal_api_dslStartup (in tn7dsl_init()). 229- if ((ptr = prom_getenv ("DSL_PHY_CNTL_0")) != NULL) 230+ if ((ptr = prom_getenv ("DSL_PHY_CNTL_0")) != NULL || mp_phyctl0 != NULL) 231 { 232+ if (mp_phyctl0 != NULL) ptr = mp_phyctl0; 233 if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to 234 // os_atoh 235 ptr += 2; 236@@ -2218,8 +2370,9 @@ static int __init tn7atm_init (struct at 237 _dsl_PhyControl_0_defined = 1; 238 } 239 240- if ((ptr = prom_getenv ("DSL_PHY_CNTL_1")) != NULL) 241+ if ((ptr = prom_getenv ("DSL_PHY_CNTL_1")) != NULL || mp_phyctl1 != NULL) 242 { 243+ if (mp_phyctl1 != NULL) ptr = mp_phyctl1; 244 if ((ptr[0] == '0') && (ptr[1] == 'x')) // skip 0x before pass to 245 // os_atoh 246 ptr += 2; 247@@ -2247,9 +2400,9 @@ static int __init tn7atm_init (struct at 248 priv->bTurboDsl = 1; 249 // read config for turbo dsl 250 ptr = prom_getenv ("TurboDSL"); 251- if (ptr) 252+ if (ptr || mp_turbodsl != -1) 253 { 254- priv->bTurboDsl = os_atoi (ptr); 255+ priv->bTurboDsl = mp_turbodsl == -1 ? os_atoi (ptr) : mp_turbodsl; 256 } 257 258 // @Added to make Rx buffer number & Service max configurable through 259@@ -2257,30 +2410,30 @@ static int __init tn7atm_init (struct at 260 priv->sarRxBuf = RX_BUFFER_NUM; 261 ptr = NULL; 262 ptr = prom_getenv ("SarRxBuf"); 263- if (ptr) 264+ if (ptr || mp_sar_rxbuf != -1) 265 { 266- priv->sarRxBuf = os_atoi (ptr); 267+ priv->sarRxBuf = mp_sar_rxbuf == -1 ? os_atoi (ptr) : mp_sar_rxbuf; 268 } 269 priv->sarRxMax = RX_SERVICE_MAX; 270 ptr = NULL; 271 ptr = prom_getenv ("SarRxMax"); 272- if (ptr) 273+ if (ptr || mp_sar_rxmax != -1) 274 { 275- priv->sarRxMax = os_atoi (ptr); 276+ priv->sarRxMax = mp_sar_rxmax == -1 ? os_atoi (ptr) : mp_sar_rxmax; 277 } 278 priv->sarTxBuf = TX_BUFFER_NUM; 279 ptr = NULL; 280 ptr = prom_getenv ("SarTxBuf"); 281- if (ptr) 282+ if (ptr || mp_sar_txbuf != -1) 283 { 284- priv->sarTxBuf = os_atoi (ptr); 285+ priv->sarTxBuf = mp_sar_txbuf == -1 ? os_atoi (ptr) : mp_sar_txbuf; 286 } 287 priv->sarTxMax = TX_SERVICE_MAX; 288 ptr = NULL; 289 ptr = prom_getenv ("SarTxMax"); 290- if (ptr) 291+ if (ptr || mp_sar_txmax != -1) 292 { 293- priv->sarTxMax = os_atoi (ptr); 294+ priv->sarTxMax = mp_sar_txmax == -1 ? os_atoi (ptr) : mp_sar_txmax; 295 } 296 297 return 0; 298--- a/tn7dsl.c 299+++ b/tn7dsl.c 300@@ -136,6 +136,27 @@ 301 #define NEW_TRAINING_VAL_T1413 128 302 #define NEW_TRAINING_VAL_MMODE 255 303 304+extern char *mp_modulation; 305+extern int mp_fine_gain_control; 306+extern int mp_fine_gain_value; 307+extern int mp_enable_margin_retrain; 308+extern int mp_margin_threshold; 309+extern int mp_enable_rate_adapt; 310+extern int mp_powercutback; 311+extern int mp_trellis; 312+extern int mp_bitswap; 313+extern int mp_maximum_bits_per_carrier; 314+extern int mp_maximum_interleave_depth; 315+extern int mp_pair_selection; 316+extern int mp_dgas_polarity; 317+extern int mp_los_alarm; 318+extern char *mp_eoc_vendor_id; 319+extern int mp_eoc_vendor_revision; 320+extern char *mp_eoc_vendor_serialnum; 321+extern char *mp_invntry_vernum; 322+extern int mp_dsl_bit_tmode; 323+extern int mp_high_precision; 324+ 325 int testflag1 = 0; 326 extern int __guDbgLevel; 327 extern sar_stat_t sarStat; 328@@ -2818,84 +2839,80 @@ static int tn7dsl_set_dsl(void) 329 330 // modulation 331 ptr = prom_getenv("modulation"); 332- if (ptr) 333+ if (ptr || mp_modulation != NULL) 334 { 335- tn7dsl_set_modulation(ptr, FALSE); 336+ tn7dsl_set_modulation(mp_modulation == NULL ? ptr : mp_modulation, FALSE); 337 } 338 339 // Fine Gains 340 ptr = prom_getenv("fine_gain_control"); 341- if (ptr) 342+ if (ptr || mp_fine_gain_control != -1) 343 { 344- value = os_atoi(ptr); 345+ value = mp_fine_gain_control == -1 ? os_atoi(ptr) : mp_fine_gain_control; 346 tn7dsl_ctrl_fineGain(value); 347 } 348 ptr = NULL; 349 ptr = prom_getenv("fine_gain_value"); 350- if(ptr) 351- tn7dsl_set_fineGainValue(os_atoh(ptr)); 352+ if(ptr || mp_fine_gain_value != -1) 353+ tn7dsl_set_fineGainValue(mp_fine_gain_value == -1 ? os_atoh(ptr) : mp_fine_gain_value); 354 355 // margin retrain 356 ptr = NULL; 357 ptr = prom_getenv("enable_margin_retrain"); 358- if(ptr) 359+ value = mp_enable_margin_retrain == -1 ? (ptr ? os_atoi(ptr) : 0) : mp_enable_margin_retrain; 360+ 361+ if (value == 1) 362 { 363- value = os_atoi(ptr); 364- if(value == 1) 365+ dslhal_api_setMarginMonitorFlags(pIhw, 0, 1); 366+ bMarginRetrainEnable = 1; 367+ //printk("enable showtime margin monitor.\n"); 368+ 369+ ptr = NULL; 370+ ptr = prom_getenv("margin_threshold"); 371+ value = mp_margin_threshold == -1 ? (ptr ? os_atoi(ptr) : 0) : mp_margin_threshold; 372+ 373+ if(value >= 0) 374 { 375- dslhal_api_setMarginMonitorFlags(pIhw, 0, 1); 376- bMarginRetrainEnable = 1; 377- //printk("enable showtime margin monitor.\n"); 378- ptr = NULL; 379- ptr = prom_getenv("margin_threshold"); 380- if(ptr) 381- { 382- value = os_atoi(ptr); 383- //printk("Set margin threshold to %d x 0.5 db\n",value); 384- if(value >= 0) 385- { 386- dslhal_api_setMarginThreshold(pIhw, value); 387- bMarginThConfig=1; 388- } 389- } 390+ dslhal_api_setMarginThreshold(pIhw, value); 391+ bMarginThConfig=1; 392 } 393 } 394 395 // rate adapt 396 ptr = NULL; 397 ptr = prom_getenv("enable_rate_adapt"); 398- if(ptr) 399+ if(ptr || mp_enable_rate_adapt != -1) 400 { 401- dslhal_api_setRateAdaptFlag(pIhw, os_atoi(ptr)); 402+ dslhal_api_setRateAdaptFlag(pIhw, mp_enable_rate_adapt == -1 ? os_atoi(ptr) : mp_enable_rate_adapt); 403 } 404 405 // set powercutback 406 ptr = NULL; 407 ptr = prom_getenv("powercutback"); 408- if(ptr) 409+ if(ptr || mp_powercutback != -1) 410 { 411- dslhal_advcfg_onOffPcb(pIhw, os_atoi(ptr)); 412+ dslhal_advcfg_onOffPcb(pIhw, mp_powercutback == -1 ? os_atoi(ptr) : mp_powercutback); 413 } 414 415 // trellis 416 ptr = NULL; 417 ptr = prom_getenv("trellis"); 418- if(ptr) 419+ if(ptr || mp_trellis != -1) 420 { 421- dslhal_api_setTrellisFlag(pIhw, os_atoi(ptr)); 422- trellis = os_atoi(ptr); 423+ trellis = mp_trellis == -1 ? os_atoi(ptr) : mp_trellis; 424+ dslhal_api_setTrellisFlag(pIhw, trellis); 425 //printk("trellis=%d\n"); 426 } 427 428 // bitswap 429 ptr = NULL; 430 ptr = prom_getenv("bitswap"); 431- if(ptr) 432+ if(ptr || mp_bitswap != -1) 433 { 434 int offset[2] = {33, 0}; 435 unsigned int bitswap; 436 437- bitswap = os_atoi(ptr); 438+ bitswap = mp_bitswap == -1 ? os_atoi(ptr) : mp_bitswap; 439 440 tn7dsl_generic_read(2, offset); 441 dslReg &= dslhal_support_byteSwap32(0xFFFFFF00); 442@@ -2913,46 +2930,47 @@ static int tn7dsl_set_dsl(void) 443 // maximum bits per carrier 444 ptr = NULL; 445 ptr = prom_getenv("maximum_bits_per_carrier"); 446- if(ptr) 447+ if(ptr || mp_maximum_bits_per_carrier != -1) 448 { 449- dslhal_api_setMaxBitsPerCarrierUpstream(pIhw, os_atoi(ptr)); 450+ dslhal_api_setMaxBitsPerCarrierUpstream(pIhw, mp_maximum_bits_per_carrier == -1 ? os_atoi(ptr) : mp_maximum_bits_per_carrier); 451 } 452 453 // maximum interleave depth 454 ptr = NULL; 455 ptr = prom_getenv("maximum_interleave_depth"); 456- if(ptr) 457+ if(ptr || mp_maximum_interleave_depth != -1) 458 { 459- dslhal_api_setMaxInterleaverDepth(pIhw, os_atoi(ptr)); 460+ dslhal_api_setMaxInterleaverDepth(pIhw, mp_maximum_interleave_depth == -1 ? os_atoi(ptr) : mp_maximum_interleave_depth); 461 } 462 463 // inner and outer pairs 464 ptr = NULL; 465 ptr = prom_getenv("pair_selection"); 466- if(ptr) 467+ if(ptr || mp_pair_selection != -1) 468 { 469- dslhal_api_selectInnerOuterPair(pIhw, os_atoi(ptr)); 470+ dslhal_api_selectInnerOuterPair(pIhw, mp_pair_selection == -1 ? os_atoi(ptr) : mp_pair_selection); 471 } 472 473 ptr = NULL; 474 ptr = prom_getenv("dgas_polarity"); 475- if(ptr) 476+ if(ptr || mp_dgas_polarity != -1) 477 { 478 dslhal_api_configureDgaspLpr(pIhw, 1, 1); 479- dslhal_api_configureDgaspLpr(pIhw, 0, os_atoi(ptr)); 480+ dslhal_api_configureDgaspLpr(pIhw, 0, mp_dgas_polarity == -1 ? os_atoi(ptr) : mp_dgas_polarity); 481 } 482 483 ptr = NULL; 484 ptr = prom_getenv("los_alarm"); 485- if(ptr) 486+ if(ptr || mp_los_alarm != -1) 487 { 488- dslhal_api_disableLosAlarm(pIhw, os_atoi(ptr)); 489+ dslhal_api_disableLosAlarm(pIhw, mp_los_alarm == -1 ? os_atoi(ptr) : mp_los_alarm); 490 } 491 492 ptr = NULL; 493 ptr = prom_getenv("eoc_vendor_id"); 494- if(ptr) 495+ if(ptr || mp_eoc_vendor_id != NULL) 496 { 497+ ptr = mp_eoc_vendor_id == NULL ? ptr : mp_eoc_vendor_id; 498 for(i=0;i<8;i++) 499 { 500 tmp[0]=ptr[i*2]; 501@@ -2977,26 +2995,26 @@ static int tn7dsl_set_dsl(void) 502 } 503 ptr = NULL; 504 ptr = prom_getenv("eoc_vendor_revision"); 505- if(ptr) 506+ if(ptr || mp_eoc_vendor_revision != -1) 507 { 508- value = os_atoi(ptr); 509+ value = mp_eoc_vendor_revision == -1 ? os_atoi(ptr) : mp_eoc_vendor_revision; 510 //printk("eoc rev=%d\n", os_atoi(ptr)); 511 dslhal_api_setEocRevisionNumber(pIhw, (char *)&value); 512 513 } 514 ptr = NULL; 515 ptr = prom_getenv("eoc_vendor_serialnum"); 516- if(ptr) 517+ if(ptr || mp_eoc_vendor_serialnum != NULL) 518 { 519- dslhal_api_setEocSerialNumber(pIhw, ptr); 520+ dslhal_api_setEocSerialNumber(pIhw, mp_eoc_vendor_serialnum == NULL ? ptr : mp_eoc_vendor_serialnum); 521 } 522 523 // CQ10037 Added invntry_vernum environment variable to be able to set version number in ADSL2, ADSL2+ modes. 524 ptr = NULL; 525 ptr = prom_getenv("invntry_vernum"); 526- if(ptr) 527+ if(ptr || mp_invntry_vernum != NULL) 528 { 529- dslhal_api_setEocRevisionNumber(pIhw, ptr); 530+ dslhal_api_setEocRevisionNumber(pIhw, mp_invntry_vernum == NULL ? ptr : mp_invntry_vernum); 531 } 532 533 return 0; 534@@ -3041,7 +3059,7 @@ int tn7dsl_init(void *priv) 535 * backward compatibility. 536 */ 537 cp = prom_getenv("DSL_BIT_TMODE"); 538- if (cp) 539+ if (cp || mp_dsl_bit_tmode != -1) 540 { 541 printk("%s : env var DSL_BIT_TMODE is set\n", __FUNCTION__); 542 /* 543@@ -3070,9 +3088,9 @@ int tn7dsl_init(void *priv) 544 545 // UR8_MERGE_START CQ11054 Jack Zhang 546 cp = prom_getenv("high_precision"); 547- if (cp) 548+ if (cp || mp_high_precision != -1) 549 { 550- high_precision_selected = os_atoi(cp); 551+ high_precision_selected = mp_high_precision == -1 ? os_atoi(cp) : mp_high_precision; 552 } 553 if ( high_precision_selected) 554 { 555--- a/tn7sar.c 556+++ b/tn7sar.c 557@@ -74,6 +74,8 @@ typedef void OS_SETUP; 558 /* PDSP Firmware files */ 559 #include "tnetd7300_sar_firm.h" 560 561+extern int mp_oam_lb_timeout; 562+extern int mp_autopvc_enable; 563 564 enum 565 { 566@@ -817,9 +819,9 @@ int tn7sar_setup_oam_channel(Tn7AtmPriva 567 pHalDev = (HAL_DEVICE *)priv->pSarHalDev; 568 569 pauto_pvc = prom_getenv("autopvc_enable"); 570- if(pauto_pvc) //CQ10273 571+ if(pauto_pvc || mp_autopvc_enable != -1) //CQ10273 572 { 573- auto_pvc =tn7sar_strtoul(pauto_pvc, NULL, 10); 574+ auto_pvc = mp_autopvc_enable == -1 ? tn7sar_strtoul(pauto_pvc, NULL, 10) : mp_autopvc_enable; 575 } 576 577 memset(&chInfo, 0xff, sizeof(chInfo)); 578@@ -985,9 +987,9 @@ int tn7sar_init(struct atm_dev *dev, Tn7 579 580 /* read in oam lb timeout value */ 581 pLbTimeout = prom_getenv("oam_lb_timeout"); 582- if(pLbTimeout) 583+ if(pLbTimeout || mp_oam_lb_timeout != -1) 584 { 585- lbTimeout =tn7sar_strtoul(pLbTimeout, NULL, 10); 586+ lbTimeout = mp_oam_lb_timeout == -1 ? tn7sar_strtoul(pLbTimeout, NULL, 10) : mp_oam_lb_timeout; 587 oamLbTimeout = lbTimeout; 588 pHalFunc->Control(pHalDev,"OamLbTimeout", "Set", &lbTimeout); 589 } 590