linux-mips
[Top] [All Lists]

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

To: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Subject: Re: [PATCH 3/4] rbtx4938: Fix secondary PCIC and glue internal NICs
From: Ralf Baechle <ralf@linux-mips.org>
Date: Mon, 25 Jun 2007 02:28:22 +0200
Cc: linux-mips@linux-mips.org, sshtylyov@ru.mvista.com, mlachwani@mvista.com
In-reply-to: <20070622.232219.48807177.anemo@mba.ocn.ne.jp>
Original-recipient: rfc822;linux-mips@linux-mips.org
References: <20070622.232219.48807177.anemo@mba.ocn.ne.jp>
Sender: linux-mips-bounce@linux-mips.org
User-agent: Mutt/1.5.14 (2007-02-12)
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

<Prev in Thread] Current Thread [Next in Thread>