miiphy: unify device list lookup

Rather than have every func re-implement the list walking code, do it one
local function.  This shrinks the resulting object code a little while
making the source much more manageable.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
This commit is contained in:
Mike Frysinger 2010-07-27 18:35:09 -04:00 committed by Ben Warren
parent 5700bb6352
commit 0daac97801

View File

@ -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;
}
dev = miiphy_get_dev_by_name(devname, 0);
if (dev)
return dev->read(devname, addr, reg, value);
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);
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;
}
dev = miiphy_get_dev_by_name(devname, 0);
if (dev)
return dev->write(devname, addr, reg, value);
list_for_each (entry, &mii_devs) {
dev = list_entry (entry, struct mii_dev, link);
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;
}
/*****************************************************************************