diff options
author | Mike Frysinger <vapier@gentoo.org> | 2010-07-27 18:35:09 -0400 |
---|---|---|
committer | Ben Warren <biggerbadderben@gmail.com> | 2010-08-09 11:52:29 -0700 |
commit | 0daac97801fa5989d3740487aa824fbab9ff0503 (patch) | |
tree | ef68e719ce34fb5064352ba0737b3ec6b63337e6 /common/miiphyutil.c | |
parent | 5700bb63522c2af9276f25a15448b61f19d72841 (diff) | |
download | u-boot-imx-0daac97801fa5989d3740487aa824fbab9ff0503.zip u-boot-imx-0daac97801fa5989d3740487aa824fbab9ff0503.tar.gz u-boot-imx-0daac97801fa5989d3740487aa824fbab9ff0503.tar.bz2 |
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>
Diffstat (limited to 'common/miiphyutil.c')
-rw-r--r-- | common/miiphyutil.c | 100 |
1 files changed, 40 insertions, 60 deletions
diff --git a/common/miiphyutil.c b/common/miiphyutil.c index a299b12..e055c08 100644 --- a/common/miiphyutil.c +++ b/common/miiphyutil.c @@ -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; } /***************************************************************************** |