Esempio n. 1
0
IX_STATUS ixEthAccCodeletLinkSlowSpeedSet(IxEthAccPortId portId)
{
   BOOL speed, linkUp, fullDuplex, autoneg;
    /* get current duplex mode  */
   ixEthMiiLinkStatus(ixEthAccCodeletPhyAddresses[portId], 
		       &linkUp, 
		       &speed, 
		       &fullDuplex, 
		       &autoneg);
    /* set 10 Mbit, current duplex mode, no negotiation */
    ixEthMiiPhyConfig(ixEthAccCodeletPhyAddresses[portId],
		      FALSE, 
		      fullDuplex, 
		      FALSE);
    ixEthMiiPhyReset(ixEthAccCodeletPhyAddresses[portId]);

    /* get the link status */
    (void)ixEthAccCodeletLinkUpCheck(portId);
    (void)ixEthAccCodeletLinkMonitor(portId);

    printf("\nPHY %d configuration:\n", portId);
    ixEthMiiPhyShow(ixEthAccCodeletPhyAddresses[portId]);

    return (IX_SUCCESS);
}
Esempio n. 2
0
IX_STATUS ixEthAccCodeletLinkUpCheck(IxEthAccPortId portId)
{
   IX_STATUS returnStatus = IX_SUCCESS;
   BOOL fullDuplex;
   BOOL linkUp;
   BOOL speed;
   BOOL autoneg;

   /* get the status */
   ixEthMiiLinkStatus(ixEthAccCodeletPhyAddresses[portId], 
		      &linkUp, 
		      &speed, 
		      &fullDuplex, 
		      &autoneg);

   if (!linkUp)
   {
          unsigned int retry = 20; /* 20 retries */
          printf("Wait for PHY %u to be ready ...\n", portId);
          while ((!linkUp) && (retry-- > 0))
          {
            ixOsalSleep(100);  /* 100 milliseconds */

	    /* get the status again */
            ixEthMiiLinkStatus(ixEthAccCodeletPhyAddresses[portId], 
			       &linkUp, 
			       &speed, 
			       &fullDuplex, 
			       &autoneg);
          }
          if (!linkUp) 
          {
            returnStatus = IX_FAIL;
          }
   }

   /* return fail if one of the links is not up */
   return returnStatus;
}
Esempio n. 3
0
PUBLIC IX_STATUS
ixEthMiiPhyShow (UINT32 phyAddr)
{
    BOOL linkUp, speed100, fullDuplex, autoneg;
    UINT16 cregval;
    UINT16 sregval;
    

    ixEthAccMiiReadRtn(phyAddr,  IX_ETH_MII_STAT_REG, &sregval);
    ixEthAccMiiReadRtn(phyAddr,  IX_ETH_MII_CTRL_REG, &cregval);

    /* get link information */
    if (ixEthMiiLinkStatus(phyAddr,
			   &linkUp,
			   &speed100,
			   &fullDuplex,
			   &autoneg) != IX_ETH_ACC_SUCCESS)
    {
	printf("PHY Status unknown\n");
	return IX_FAIL;
    }

    printf("PHY ID [phyAddr]: %8.8x\n",ixEthMiiPhyId[phyAddr]);
    printf( " Status reg:  %4.4x\n",sregval);
    printf( " control reg: %4.4x\n",cregval);
    /* display link information */
    printf("PHY Status:\n");
    printf("    Link is %s\n",
	   (linkUp ? "Up" : "Down"));
    if((sregval & IX_ETH_MII_SR_REMOTE_FAULT) != 0)
    {
	printf("    Remote fault detected\n");
    }
    printf("    Auto Negotiation %s\n",
	   (autoneg ? "Completed" : "Not Completed"));

    printf("PHY Configuration:\n");
    printf("    Speed %sMb/s\n",
	   (speed100 ? "100" : "10"));
    printf("    %s Duplex\n",
	   (fullDuplex ? "Full" : "Half"));
    printf("    Auto Negotiation %s\n",
	   (autoneg ? "Enabled" : "Disabled"));
    return IX_SUCCESS;
}
Esempio n. 4
0
PRIVATE void
ixEthAccCodeletLinkMonitor(IxEthAccPortId portId)
{
    BOOL speed, linkUp, fullDuplex, autoneg;
    /* get the link status */
    ixEthMiiLinkStatus(ixEthAccCodeletPhyAddresses[portId], 
		       &linkUp,
		       &speed,
		       &fullDuplex,
		       &autoneg);
    
    /* Set the MAC duplex mode */
    if(fullDuplex)
    {
	ixEthAccPortDuplexModeSet (portId, IX_ETH_ACC_FULL_DUPLEX);
    }
    else
    {
	ixEthAccPortDuplexModeSet (portId, IX_ETH_ACC_HALF_DUPLEX);
    }
}