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

Michael Walle michael at walle.cc
Thu Nov 3 12:23:58 CET 2011


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 at walle.cc>
> Cc: Prafulla Wadaskar <prafulla at marvell.com>
> Cc: Mike Frysinger <vapier at gentoo.com>
> Cc: Wolfgang Denk <wd at 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
>
>




More information about the U-Boot mailing list