
Dear Stefan Roese,
In message 200902111436.38210.sr@denx.de you wrote:
pci_eth_init() is called to add additional *optional* network interfaces. Since PCI boards may or may not exist, I think that a non existant PCI ethernet device should not result in an error.
What sort of error handling do you have in mind here?
I don;t know. I just see that pci_eth_init() is declared to return "int". If the return value is not used, we should make the function void.
/* Try board-specific initialization first. If it fails or isn't * present, try the cpu-specific initialization */ if (board_eth_init(bis) < 0) cpu_eth_init(bis);
I think we must differentiate between board_eth_init() not existing and a failure in board_eth_init(); these are two very different situations.
board_eth_init() not existing is the default. We have a weak implementation for board_eth_init() in eth.c:
/*
- CPU and board-specific Ethernet initializations. Aliased function
- signals caller to move on
*/ static int __def_eth_init(bd_t *bis) { return -1; } int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); int board_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init")));
What change do you have in mind here?
I don't understand the intended logic. As far as I can see, pci_eth_init() will return the number of initialized boards, i. e. a non-negative value. Then having board_eth_init() reuturn the same return code should be no problem - you get -1 (i. e. < 0) if board_eth_init() does not exist, and >= 0 else.
Best regards,
Wolfgang Denk