diff options
Diffstat (limited to 'net')
| -rw-r--r-- | net/eth.c | 41 | 
1 files changed, 12 insertions, 29 deletions
| @@ -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); |