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