[U-Boot] [PATCH v4 2/5] Add Ethernet hardware MAC address framework to usbnet
Simon Glass
sjg at chromium.org
Fri Apr 22 03:52:30 CEST 2011
On Thu, Apr 21, 2011 at 4:38 PM, Wolfgang Denk <wd at denx.de> wrote:
> Dear Simon Glass,
>
> In message <BANLkTikGucjpun2RhS2T2Nyq4_KB9gK8zw at mail.gmail.com> you wrote:
>>
>> >> + eth = &usb_eth[usb_max_eth_dev].eth_dev;
>> >
>> > Index for eth is usb_max_eth_dev.
>> >
>> >> @@ -100,7 +102,10 @@ static void probe_valid_drivers(struct usb_device *> dev)
>> >> * call since eth_current_> changed (internally called)
>> >> * relies on it
>> >> */
>> >> - eth_register(&usb_eth[usb_max_eth_dev - 1].eth_dev);
>> >> + eth_register(eth);
>> >
>> > You change the behaviour here. Please confirmt his is really
>> > intentional.
>>
>> Yes. Since I am using an 'eth' pointer I don't need to index the array
>> again. The behaviour is the same as before.
>
> No, it is not. Before, we were accessing entry N-1 here. Now we use
> entry N. usb_max_eth_dev != usb_max_eth_dev - 1
Hi Wolfgang,
Hmmm. If you see the usb_max_eth_dev++ below, it is increasing the
index variable to keep eth_register() happy. I have kept that
behaviour.
So let's say usb_max_eth_dev is 3. The sequence is:
- set eth to point to item 3
- increase usb_max_eth_dev to 4 as required by eth_register()
- call eth_register() with item 3 (i.e. eth pointer hasn't changed)
- call eth_write_hwaddr with item 3
Maybe look at the whole code with my patch applied?
Let me know if I am missing something.
+ eth)) {
/* found proper driver */
/* register with networking stack */
usb_max_eth_dev++;
@@ -100,7 +102,10 @@ static void probe_valid_drivers(struct usb_device *dev)
* call since eth_current_changed (internally called)
* relies on it
*/
- eth_register(&usb_eth[usb_max_eth_dev - 1].eth_dev);
+ eth_register(eth);
+ if (eth_write_hwaddr(eth, "usbeth",
+ usb_max_eth_dev - 1))
+ puts("Warning: failed to set MAC address\n");
break;
}
>
>> >> + * base_name - base name for device (NULL for "eth")
>> >
>> > This is an atitifical decision for the API which is difficult to
>> > understand. It just makes the code and understanding it more
>> > difficult. Just pass "eth" when you mean it.
>>
>> The intention was to avoid everyone having to pass the correct value -
>> potential for error, etc. I could have created a #define, but decided
>> on this.
>
> Ummm... but having everyone to pass the correct value is actually a
> really good thing to have!
OK fair enough, it is in there now.
Regards,
Simon
More information about the U-Boot
mailing list