@ -56,6 +56,30 @@ struct mii_dev {
static struct list_head mii_devs ;
static struct mii_dev * current_mii ;
/*
* Lookup the mii_dev struct by the registered device name .
*/
static struct mii_dev * miiphy_get_dev_by_name ( const char * devname , int quiet )
{
struct list_head * entry ;
struct mii_dev * dev ;
if ( ! devname ) {
printf ( " NULL device name! \n " ) ;
return NULL ;
}
list_for_each ( entry , & mii_devs ) {
dev = list_entry ( entry , struct mii_dev , link ) ;
if ( strcmp ( dev - > name , devname ) = = 0 )
return dev ;
}
if ( ! quiet )
printf ( " No such device: %s \n " , devname ) ;
return NULL ;
}
/*****************************************************************************
*
* Initialize global data . Need to be called before any other miiphy routine .
@ -76,20 +100,15 @@ void miiphy_register(const char *name,
int ( * write ) ( const char * devname , unsigned char addr ,
unsigned char reg , unsigned short value ) )
{
struct list_head * entry ;
struct mii_dev * new_dev ;
struct mii_dev * miidev ;
unsigned int name_len ;
char * new_name ;
/* check if we have unique name */
list_for_each ( entry , & mii_devs ) {
miidev = list_entry ( entry , struct mii_dev , link ) ;
if ( strcmp ( miidev - > name , name ) = = 0 ) {
printf ( " miiphy_register: non unique device name "
" '%s' \n " , name ) ;
return ;
}
new_dev = miiphy_get_dev_by_name ( name , 1 ) ;
if ( new_dev ) {
printf ( " miiphy_register: non unique device name '%s' \n " , name ) ;
return ;
}
/* allocate memory */
@ -124,19 +143,14 @@ void miiphy_register(const char *name,
int miiphy_set_current_dev ( const char * devname )
{
struct list_head * entry ;
struct mii_dev * dev ;
list_for_each ( entry , & mii_devs ) {
dev = list_entry ( entry , struct mii_dev , link ) ;
if ( strcmp ( devname , dev - > name ) = = 0 ) {
current_mii = dev ;
return 0 ;
}
dev = miiphy_get_dev_by_name ( devname , 0 ) ;
if ( dev ) {
current_mii = dev ;
return 0 ;
}
printf ( " No such device: %s \n " , devname ) ;
return 1 ;
}
@ -159,30 +173,13 @@ const char *miiphy_get_current_dev(void)
int miiphy_read ( const char * devname , unsigned char addr , unsigned char reg ,
unsigned short * value )
{
struct list_head * entry ;
struct mii_dev * dev ;
int found_dev = 0 ;
int read_ret = 0 ;
if ( ! devname ) {
printf ( " NULL device name! \n " ) ;
return 1 ;
}
list_for_each ( entry , & mii_devs ) {
dev = list_entry ( entry , struct mii_dev , link ) ;
if ( strcmp ( devname , dev - > name ) = = 0 ) {
found_dev = 1 ;
read_ret = dev - > read ( devname , addr , reg , value ) ;
break ;
}
}
if ( found_dev = = 0 )
printf ( " No such device: %s \n " , devname ) ;
dev = miiphy_get_dev_by_name ( devname , 0 ) ;
if ( dev )
return dev - > read ( devname , addr , reg , value ) ;
return ( ( found_dev ) ? read_ret : 1 ) ;
return 1 ;
}
/*****************************************************************************
@ -196,30 +193,13 @@ int miiphy_read(const char *devname, unsigned char addr, unsigned char reg,
int miiphy_write ( const char * devname , unsigned char addr , unsigned char reg ,
unsigned short value )
{
struct list_head * entry ;
struct mii_dev * dev ;
int found_dev = 0 ;
int write_ret = 0 ;
if ( ! devname ) {
printf ( " NULL device name! \n " ) ;
return 1 ;
}
list_for_each ( entry , & mii_devs ) {
dev = list_entry ( entry , struct mii_dev , link ) ;
dev = miiphy_get_dev_by_name ( devname , 0 ) ;
if ( dev )
return dev - > write ( devname , addr , reg , value ) ;
if ( strcmp ( devname , dev - > name ) = = 0 ) {
found_dev = 1 ;
write_ret = dev - > write ( devname , addr , reg , value ) ;
break ;
}
}
if ( found_dev = = 0 )
printf ( " No such device: %s \n " , devname ) ;
return ( ( found_dev ) ? write_ret : 1 ) ;
return 1 ;
}
/*****************************************************************************