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 <mich...@walle.cc> > Cc: Prafulla Wadaskar <prafu...@marvell.com> > Cc: Mike Frysinger <vap...@gentoo.com> > Cc: Wolfgang Denk <w...@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 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot