Re: [PATCH 3/4] rbtx4938: Fix secondary PCIC and glue internal NICs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux