[mii] Add mii_find()

Add the function mii_find() in order to locate the PHY address.

Signed-off-by: Sylvie Barlow <sylvie.c.barlow@gmail.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/73/head
Sylvie Barlow 2018-04-20 13:37:20 +01:00 committed by Michael Brown
parent 6047b7ca7a
commit 7ed1dc98c3
2 changed files with 29 additions and 0 deletions

View File

@ -147,3 +147,28 @@ int mii_check_link ( struct mii_device *mii, struct net_device *netdev ) {
return 0;
}
/**
* Find PHY address
*
* @v mii MII device
* @ret rc Return status code
*/
int mii_find ( struct mii_device *mii ) {
unsigned int address;
int id;
/* Try all possible PHY addresses */
for ( address = 0 ; address <= MII_MAX_PHY_ADDRESS ; address++ ) {
mii->address = address;
id = mii_read ( mii, MII_PHYSID1 );
if ( ( id > 0x0000 ) && ( id < 0xffff ) ) {
DBGC ( mii, "MII %p found PHY at address %d\n",
mii, address );
return 0;
}
}
DBGC ( mii, "MII %p failed to find an address\n", mii );
return -ENOENT;
}

View File

@ -141,9 +141,13 @@ mii_dump ( struct mii_device *mii ) {
/** Maximum time to wait for a reset, in milliseconds */
#define MII_RESET_MAX_WAIT_MS 500
/** Maximum PHY address */
#define MII_MAX_PHY_ADDRESS 31
extern int mii_restart ( struct mii_device *mii );
extern int mii_reset ( struct mii_device *mii );
extern int mii_check_link ( struct mii_device *mii,
struct net_device *netdev );
extern int mii_find ( struct mii_device *mii );
#endif /* _IPXE_MII_H */