[U-Boot] [PATCH 1/2] net: introduce per device index

Michael Walle
2011-11-03T11:23:58Z

Am Do, 27.10.2011, 22:31 schrieb Michael Walle:
> Instead of counting the device index everytime a functions needs it, store
> it in the eth_device struct. eth_register() keeps track of the indices and
> updates the device's index number. This simplifies some functions in
> net/eth.c.
>
> Additionally, a network driver can now query its index, eg. to get the
> correct environment ethaddr name.

Ping, anyone?

> Signed-off-by: Michael Walle <michael@walle.cc>
> Cc: Prafulla Wadaskar <prafulla@marvell.com>
> Cc: Mike Frysinger <vapier@gentoo.com>
> Cc: Wolfgang Denk <wd@denx.de>
> ---
> include/net.h | 1 +
> net/eth.c | 41 ++++++++++++-----------------------------
> 2 files changed, 13 insertions(+), 29 deletions(-)
>
> diff --git a/include/net.h b/include/net.h
> index b408dea..7f9b1d1 100644
> --- a/include/net.h
> +++ b/include/net.h
> @@ -89,6 +89,7 @@ struct eth_device {
> #endif
> int (*write_hwaddr) (struct eth_device*);
> struct eth_device *next;
> + int index;
> void *priv;
> };
>
> diff --git a/net/eth.c b/net/eth.c
> index 4280d6d..b4b9b43 100644
> --- a/net/eth.c
> +++ b/net/eth.c
> @@ -127,7 +127,6 @@ struct eth_device *eth_get_dev_by_name(const char
> *devname)
> struct eth_device *eth_get_dev_by_index(int index)
> {
> struct eth_device *dev, *target_dev;
> - int idx = 0;
>
> if (!eth_devices)
> return NULL;
> @@ -135,12 +134,11 @@ struct eth_device *eth_get_dev_by_index(int index)
> dev = eth_devices;
> target_dev = NULL;
> do {
> - if (idx == index) {
> + if (dev->index == index) {
> target_dev = dev;
> break;
> }
> dev = dev->next;
> - idx++;
> } while (dev != eth_devices);
>
> return target_dev;
> @@ -148,24 +146,11 @@ struct eth_device *eth_get_dev_by_index(int index)
>
> int eth_get_dev_index (void)
> {
> - struct eth_device *dev;
> - int num = 0;
> -
> - if (!eth_devices) {
> - return (-1);
> - }
> -
> - for (dev = eth_devices; dev; dev = dev->next) {
> - if (dev == eth_current)
> - break;
> - ++num;
> - }
> -
> - if (dev) {
> - return (num);
> + if (!eth_current) {
> + return -1;
> }
>
> - return (0);
> + return eth_current->index;
> }
>
> static void eth_current_changed(void)
> @@ -219,6 +204,7 @@ int eth_write_hwaddr(struct eth_device *dev, const
> char *base_name,
> int eth_register(struct eth_device *dev)
> {
> struct eth_device *d;
> + static int index = 0;
>
> assert(strlen(dev->name) < NAMESIZE);
>
> @@ -233,14 +219,14 @@ int eth_register(struct eth_device *dev)
>
> dev->state = ETH_STATE_INIT;
> dev->next = eth_devices;
> + dev->index = index++;
>
> return 0;
> }
>
> int eth_initialize(bd_t *bis)
> {
> - int eth_number = 0;
> -
> + int num_devices = 0;
> eth_devices = NULL;
> eth_current = NULL;
>
> @@ -281,7 +267,7 @@ int eth_initialize(bd_t *bis)
>
> show_boot_progress (65);
> do {
> - if (eth_number)
> + if (dev->index)
> puts (", ");
>
> printf("%s", dev->name);
> @@ -294,18 +280,18 @@ int eth_initialize(bd_t *bis)
> if (strchr(dev->name, ' '))
> puts("\nWarning: eth device name has a space!\n");
>
> - if (eth_write_hwaddr(dev, "eth", eth_number))
> + if (eth_write_hwaddr(dev, "eth", dev->index))
> puts("\nWarning: failed to set MAC address\n");
>
> - eth_number++;
> dev = dev->next;
> + num_devices++;
> } while(dev != eth_devices);
>
> eth_current_changed();
> putc ('\n');
> }
>
> - return eth_number;
> + return num_devices;
> }
>
> #ifdef CONFIG_MCAST_TFTP
> @@ -356,7 +342,6 @@ u32 ether_crc (size_t len, unsigned char const *p)
>
> int eth_init(bd_t *bis)
> {
> - int eth_number;
> struct eth_device *old_current, *dev;
>
> if (!eth_current) {
> @@ -365,16 +350,14 @@ int eth_init(bd_t *bis)
> }
>
> /* Sync environment with network devices */
> - eth_number = 0;
> dev = eth_devices;
> do {
> uchar env_enetaddr[6];
>
> - if (eth_getenv_enetaddr_by_index("eth", eth_number,
> + if (eth_getenv_enetaddr_by_index("eth", dev->index,
> env_enetaddr))
> memcpy(dev->enetaddr, env_enetaddr, 6);
>
> - ++eth_number;
> dev = dev->next;
> } while (dev != eth_devices);
>
> --
> 1.7.2.5
>
>