On Fri, Jun 22, 2007 at 11:22:19PM +0900, Atsushi Nemoto wrote:
> +static int rbtx4938_netdev_event(struct notifier_block *this,
> + unsigned long event,
> + void *ptr)
> {
> - struct pci_controller *channel = (struct pci_controller
> *)dev->bus->sysdata;
> - int ch = 0;
> -
> - if (channel != &tx4938_pci_controller[1])
> - return -ENODEV;
> - /* TX4938 PCIC1 */
> - switch (PCI_SLOT(dev->devfn)) {
> - case TX4938_PCIC_IDSEL_AD_TO_SLOT(31):
> - ch = 0;
> - break;
> - case TX4938_PCIC_IDSEL_AD_TO_SLOT(30):
> - ch = 1;
> - break;
> - default:
> - return -ENODEV;
> + struct net_device *dev = ptr;
> + if (event == NETDEV_REGISTER) {
> + int ch = -1;
> + if (dev->irq == RBTX4938_IRQ_IRC + TX4938_IR_ETH0)
> + ch = 0;
> + else if (dev->irq == RBTX4938_IRQ_IRC + TX4938_IR_ETH1)
> + ch = 1;
> + if (ch >= 0)
> + memcpy(dev->dev_addr,
> + &rbtx4938_ethaddr[4 + 6 * ch], 6);
> }
> - memcpy(addr, &rbtx4938_ethaddr[4 + 6 * ch], 6);
<jgarzik> Ralf: probably not... :)
<jgarzik> Ralf: dev->open() assumes dev->dev_addr[] is filled in, when
interface goes up, and each NIC driver should use that and write the MAC
address in dev->dev_addr[] to its RX filter / MAC address registers
<jgarzik> Ralf: the default value should be filled in before netdev is registers
<jgarzik> registered
<jgarzik> Ralf: well, ->open() is just the manifestation of interface-up
operation, with all the notifications that that entails. At that point, NIC
driver should not be touching dev->dev_addr[], because it may have already been
supplied by the user via ifconfig, when the interface was down.
<jgarzik> Ralf: dev->dev_addr[] should definitely be filled in before the call
to register_netdev()
Ralf
|