コード例 #1
0
ファイル: madPatGen.c プロジェクト: Undrizzle/apps
/*******************************************************************************
* 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;

}
コード例 #2
0
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;
						
}
コード例 #3
0
ファイル: madDSPVct.c プロジェクト: sevennothing/lros
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;
}