/******************************************************************************* * madPatCtrlGetPRBS * * DESCRIPTION: * This function get PRBS test setting - PRBS 7, PRBS23, PRBS31. * * INPUTS: * port - The logical port number * * OUTPUTS: * genCfg - PRBS generator config structure: MAD_PRBS_GEN_CONFIG * * RETURNS: * MAD_OK - on success * MAD_FAIL | [reason] - on error * * COMMENTS: * None. * *******************************************************************************/ MAD_STATUS madPatCtrlGetPRBS ( IN MAD_DEV *dev, IN MAD_LPORT port, OUT MAD_PRBS_GEN_CONFIG *genCfg ) { MAD_STATUS retVal; MAD_U8 hwPort; MAD_U16 data; MAD_DBG_INFO("madPatCtrlGetPRBS called.\n"); /* translate LPORT to hardware port */ hwPort = MAD_LPORT_2_PORT(port); if(!(MAD_DEV_PORT_CHECK(dev, hwPort))) { MAD_DBG_ERROR("The port %d is over range.\n", (int)port); return MAD_API_ERROR_OVER_PORT_RANGE; } if(!(MAD_DEV_CAPABILITY1(dev, MAD_PHY_QSGMII_PRBS_GEN))) { MAD_DBG_ERROR("Pattern generator not supported.\n"); return MAD_API_NEW_FEATURE_NOT_SUPPORT; } if((retVal = madHwReadPagedPhyReg(dev,hwPort,MAD_PAGE4,MAD_REG_QSGMII_PRBS_CTRL,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading to paged phy reg (%i,%i) failed.\n",MAD_PAGE4,MAD_REG_QSGMII_PRBS_CTRL); return (retVal | MAD_API_FAIL_WRITE_PAGED_REG); } genCfg->polarCheckInv = (data>>7)&0x1; genCfg->polarGenInv = (data>>6)&0x1; genCfg->counterLock = (data>>5)&0x1; genCfg->patternSel = (data>>2)&0x3; genCfg->genEn = data&1; genCfg->countEn = (data>>1)&1; if((retVal = madHwReadPagedPhyReg(dev,hwPort,MAD_PAGE4,MAD_REG_QSGMII_PRBS_ERR_COUNT_LSB,&data)) != MAD_OK) { MAD_DBG_ERROR("Writing to paged phy reg (%i,%i) failed.\n",MAD_PAGE4,MAD_REG_QSGMII_PRBS_CTRL); return (retVal | MAD_API_FAIL_WRITE_PAGED_REG); } genCfg->errCounter = data; if((retVal = madHwReadPagedPhyReg(dev,hwPort,MAD_PAGE4,MAD_REG_QSGMII_PRBS_ERR_COUNT_MSB,&data)) != MAD_OK) { MAD_DBG_ERROR("Writing to paged phy reg (%i,%i) failed.\n",MAD_PAGE4,MAD_REG_QSGMII_PRBS_CTRL); return (retVal | MAD_API_FAIL_WRITE_PAGED_REG); } genCfg->errCounter &= 0x0000ffff; genCfg->errCounter |= (data<<16); return MAD_OK; }
MAD_STATUS testChannel(MAD_DEV *dev, MAD_U8 hwPort, char * sw, int lp, MAD_DSP_VCT_RESULT_STRUCT *madDspVctResultP) { unsigned short data; MAD_STATUS retVal = MAD_OK; int count; int i = 0; int j = 0; int l = 0; for(i = 0; i <= 3; i++) { madDspVctResultP->regLen_21[0][i] = 0; } // VSA.Script("RW u2 P" & port & " R22 h15") // VSA.Script("RW u2 P" & port & " R8 hc9") // VSA.Script("RW u2 P" & port & " R22 h7") // VSA.Script("RW u2 P" & port & " R21 h2640") // VSA.Script("RW u2 P" & port & " R21 b1xxx xxxx xxxx xxxx") if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x15, 8,0xc9)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,0x2640)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,21,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } data &= 0x7fff; data |= 0x8000; if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,data)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } // do while (true) // if ((Convert.ToInt32(VSA.Script("rr u2 P" & port & " r21"), 16) and &h800) >> 11) = 0 then // Exit do // end if // Loop count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, hwPort ,7, 21, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x0800)==0) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } // reg20_7[0] = Convert.ToInt32(VSA.Script("rr u2 P" & port & " r20"), 16) // VSA.Script("RW u2 P" & port & " R22 h15") // regLen_21(0) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r1"), 16) and &hff) // regLen_21(1) = ((Convert.ToInt32(VSA.Script("rr u2 P" & port & " r1"), 16) >> 8) and &hff) // regLen_21(2) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r2"), 16) and &hff) // regLen_21(3) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r2"), 16) and &hff00) >> 8 if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,20,&madDspVctResultP->reg20_7[0])) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,1,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[0][0] = data & 0xff; madDspVctResultP->regLen_21[0][1] = (data>>8)&0xff; if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,2,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[0][2] = data & 0xff; madDspVctResultP->regLen_21[0][3] = (data>>8)&0xff; MAD_DBG_ERROR("@@@ madDspVctResultP->regLen_21[0][0] %02x, [1] %02x, [2] %02x, [3] %02x \n", madDspVctResultP->regLen_21[0][0], madDspVctResultP->regLen_21[0][1], madDspVctResultP->regLen_21[0][2], madDspVctResultP->regLen_21[0][3] ); /************************************ 1 done **************************/ /************************************ 2 start **************************/ for(i = 0; i <= 3; i++) { madDspVctResultP->regLen_21[1][i] = 0; } // VSA.Script("RW u2 P" & port & " R22 h15") // VSA.Script("RW u2 P" & port & " R8 h12C") // VSA.Script("RW u2 P" & port & " R22 h7") // VSA.Script("RW u2 P" & port & " R21 h2640") // VSA.Script("RW u2 P" & port & " R21 b1xxx xxxx xxxx xxxx") if((retVal = madHwWritePagedPhyReg(dev,hwPort,0x15, 8,0x12c)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev,hwPort,0x7,21,0x2640)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev,hwPort,0x7,21,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } data &= 0x7fff; data |= 0x8000; if((retVal = madHwWritePagedPhyReg(dev,hwPort,0x7,21,data)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } // do while (true) // { // if ((Convert.ToInt32(VSA.Script("rr u2 P" & port & " r21"), 16) and &h800) >> 11) = 0 then // Exit do // end if // } count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, hwPort ,7, 21, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x0800)==0) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } // reg20_7[1] = Convert.ToInt32(VSA.Script("rr u2 P" & port & " r20"), 16) // VSA.Script("RW u2 P" & port & " R22 h15") // regLen_21(0) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r1"), 16) and 0xff) // regLen_21(1) = ((Convert.ToInt32(VSA.Script("rr u2 P" & port & " r1"), 16) >> 8) and 0xff) // regLen_21(2) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r2"), 16) and 0xff) // regLen_21(3) = (Convert.ToInt32(VSA.Script("rr u2 P" & port & " r2"), 16) and 0xff00) >> 8 if((retVal = madHwReadPagedPhyReg(dev,hwPort,0x7,20,&madDspVctResultP->reg20_7[1])) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev,hwPort,0x15,1,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[1][0] = data & 0xff; madDspVctResultP->regLen_21[1][1] = (data>>8)&0xff; if((retVal = madHwReadPagedPhyReg(dev,hwPort,0x15,2,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[1][2] = data & 0xff; madDspVctResultP->regLen_21[1][3] = (data>>8)&0xff; MAD_DBG_ERROR("@@@ madDspVctResultP->regLen_21[1][0] %02x, [1] %02x, [2] %02x, [3] %02x\n", madDspVctResultP->regLen_21[1][0], madDspVctResultP->regLen_21[1][1], madDspVctResultP->regLen_21[1][2], madDspVctResultP->regLen_21[1][3], madDspVctResultP->regLen_21[0] ); return retVal; }
MAD_STATUS madDspVct ( IN MAD_DEV *dev, IN MAD_LPORT port, OUT MAD_DSP_VCT_RESULT_STRUCT *madDspVctResultP ) { int i = 0; int j = 0; int l = 0; int m = 0; int temp = 8; int count; unsigned short data; MAD_STATUS retVal; MAD_U8 hwPort; MAD_CRITIC_INFO("@@@ Start madDspVct (hold, and no pending mode) collect data \n"); hwPort = MAD_LPORT_2_PORT(port); if(!(MAD_DEV_PORT_CHECK(dev, hwPort))) { MAD_DBG_INFO("The port %d is over range.\n", (int)port); return MAD_API_ERROR_OVER_PORT_RANGE; } if( !MAD_DEV_CAPABILITY(dev, MAD_PHY_DSP_VCT) || !MAD_DEV_HWMODE(dev, hwPort, MAD_PHY_MODE_COPPER) ) { MAD_DBG_ERROR("DSP VCT not supported.\n"); return MAD_API_DSPVCT_NOT_SUPPORT; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xfc, 24,0x9555)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xfc, 25,0x9575)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 17,0xdc0c)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x2159)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 17,0x0088)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x215d)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 17,0x8906)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x215b)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 17,0x2148)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x2144)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 17,0x8034)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x2141)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xfb, 8,0x3606)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0, 16,0x3070)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0, 0,0x9140)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } MAD_CRITIC_INFO("@@@ setting done, wait reg 17_0 = 0x400 \n"); count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, hwPort ,0, 17, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x0400)==0x400) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } if((retVal = madHwReadPagedPhyReg(dev, port ,0xfc, 23, &madDspVctResultP->reg23_252)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } madDspVctResultP->reg23_252 &= 0x3; temp = 8; for(l = 0; l <= 3; l++) { for(m = 0; m <= 9; m++) { if((retVal = madHwWritePagedPhyReg(dev, hwPort,0xff, 16,0x1110+temp)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } /* MAD_CRITIC_INFO("@@@ wait 16_ff = 0x8000\n"); */ count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, port ,0xff, 16, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x8000)==0x8000) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } if((retVal = madHwReadPagedPhyReg(dev, port ,0xff, 18, &madDspVctResultP->regGain[l][m])) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } madDspVctResultP->regGain[l][m] &= 0xff; /* MAD_CRITIC_INFO("@@@ regGain[%d][%d] = %d \n", l, m, madDspVctResultP->regGain[l][m]); */ } temp = temp + 1; } /* End to collecte data */ MAD_CRITIC_INFO("@@@ End to collecte gain data, and to collect madDspVctResultP->regLen_21\n"); for(i=0; i <= 3; i++) { madDspVctResultP->regLen_21[0][i] = 0; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x15, 8,0xc9)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,0x2640)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,21,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } data &= 0x7fff; data |= 0x8000; if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,data)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, hwPort ,7, 21, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x0800)==0x800) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,20,&madDspVctResultP->reg20_7[0])) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,1,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[0][0] = data & 0xff; madDspVctResultP->regLen_21[0][1] = (data>>8)&0xff; if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,2,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[0][2] = data & 0xff; madDspVctResultP->regLen_21[0][3] = (data>>8)&0xff; MAD_DBG_ERROR("@@@ madDspVctResultP->regLen_21[0][0] %02x, [1] %02x, [2] %02x, [3] %02x\n", madDspVctResultP->regLen_21[0][0], madDspVctResultP->regLen_21[0][1], madDspVctResultP->regLen_21[0][2], madDspVctResultP->regLen_21[0][3] ); MAD_CRITIC_INFO("@@@ to collect madDspVctResultP->regLen_21 1\n"); for(i = 0; i <= 3; i++) { madDspVctResultP->regLen_21[1][i] = 0; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x15, 8,0x12c)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,0x2640)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,21,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } data &= 0x7fff; data |= 0x8000; if((retVal = madHwWritePagedPhyReg(dev, hwPort,0x7,21,data)) != MAD_OK) { MAD_DBG_ERROR("Writing from paged phy reg failed.\n"); return retVal; } count = MAX_DSP_VCT_WAIT_COUNT; while (1) { if((retVal = madHwReadPagedPhyReg(dev, hwPort ,7, 21, &data)) != MAD_OK) { MAD_DBG_ERROR("Reading paged phy reg failed.\n"); return (retVal | MAD_API_FAIL_GET_PAGED_REG_FIELD); } if( (data&0x0800)==0x800) break; madWait(DSP_VCT_WAIT_TIME); if (count--==0) return MAD_FAIL; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x7,20,&madDspVctResultP->reg20_7[1])) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,1,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[1][0] = data & 0xff; madDspVctResultP->regLen_21[1][1] = (data>>8)&0xff; if((retVal = madHwReadPagedPhyReg(dev, hwPort,0x15,2,&data)) != MAD_OK) { MAD_DBG_ERROR("Reading from paged phy reg failed.\n"); return retVal; } madDspVctResultP->regLen_21[1][2] = data & 0xff; madDspVctResultP->regLen_21[1][3] = (data>>8)&0xff; MAD_DBG_ERROR("@@@ madDspVctResultP->regLen_21[1][0] %02x, [1] %02x, [2] %02x, [3] %02x\n", madDspVctResultP->regLen_21[1][0], madDspVctResultP->regLen_21[1][1], madDspVctResultP->regLen_21[1][2], madDspVctResultP->regLen_21[1][3] ); return MAD_OK; }