/* Use the PHY ID registers to determine what type of PHY is attached * to device dev. return a struct phy_info structure describing that PHY */ struct phy_info *get_phy_info (struct uec_mii_info *mii_info) { u16 phy_reg; u32 phy_ID; int i; struct phy_info *theInfo = NULL; /* Grab the bits from PHYIR1, and put them in the upper half */ phy_reg = phy_read (mii_info, PHY_PHYIDR1); phy_ID = (phy_reg & 0xffff) << 16; /* Grab the bits from PHYIR2, and put them in the lower half */ phy_reg = phy_read (mii_info, PHY_PHYIDR2); phy_ID |= (phy_reg & 0xffff); /* loop through all the known PHY types, and find one that */ /* matches the ID we read from the PHY. */ for (i = 0; phy_info[i]; i++) if (phy_info[i]->phy_id == (phy_ID & phy_info[i]->phy_id_mask)) { theInfo = phy_info[i]; break; } /* This shouldn't happen, as we have generic PHY support */ if (theInfo == NULL) { ugphy_info ("UEC: PHY id %x is not supported!", phy_ID); return NULL; } else { ugphy_info ("UEC: PHY is %s (%x)", theInfo->name, phy_ID); } return theInfo; }
/* Use the PHY ID registers to determine what type of PHY is attached * to device dev. return a struct phy_info structure describing that PHY */ struct phy_info *get_phy_info(struct ugeth_mii_info *mii_info) { u16 phy_reg; u32 phy_ID; int i; struct phy_info *theInfo = NULL; struct net_device *dev = mii_info->dev; ugphy_vdbg("%s: IN", __FUNCTION__); /* Grab the bits from PHYIR1, and put them in the upper half */ phy_reg = ucc_geth_phy_read(mii_info, MII_PHYSID1); phy_ID = (phy_reg & 0xffff) << 16; /* Grab the bits from PHYIR2, and put them in the lower half */ phy_reg = ucc_geth_phy_read(mii_info, MII_PHYSID2); phy_ID |= (phy_reg & 0xffff); /* loop through all the known PHY types, and find one that */ /* matches the ID we read from the PHY. */ for (i = 0; phy_info[i]; i++) if (phy_info[i]->phy_id == (phy_ID & phy_info[i]->phy_id_mask)){ theInfo = phy_info[i]; break; } /* This shouldn't happen, as we have generic PHY support */ if (theInfo == NULL) { ugphy_info("%s: PHY id %x is not supported!", dev->name, phy_ID); return NULL; } else { ugphy_info("%s: PHY is %s (%x)", dev->name, theInfo->name, phy_ID); } return theInfo; }