From: Eli Carter <eli.carter@inet.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: "Richard B. Johnson" <root@chaos.analogic.com>,
tsbogend@alpha.franken.de, Peter Missel <P.Missel@sbs-or.de>,
linux-kernel@vger.kernel.org, eli.carter@inet.com
Subject: Re: [PATCH] pcnet32.c: MAC address may be in CSR registers
Date: Thu, 15 Feb 2001 13:16:31 -0600 [thread overview]
Message-ID: <3A8C2B0F.A9EC2300@inet.com> (raw)
In-Reply-To: <E14TRbL-0000AR-00@the-village.bc.nu>
[-- Attachment #1: Type: text/plain, Size: 961 bytes --]
Alan Cox wrote:
> I'd rather keep the existing initialisation behaviour of using the eeprom
> for 2.2. There are also some power management cases where I am not sure
> the values are restored on the pcnet/pci.
>
> For 2.2 conservatism is the key. For 2.4 by all means default to CSR12-14 and
> print a warning if they dont match the eeprom value and we'll see what it
> shows
>
> > Alan, do you want me to put your inline version in <linux/etherdevice.h>
> > while I'm at it, or what?
>
> Sure
Here is the 2.2.18 patch... I'll send the 2.4.1 patch shortly.
This one still uses the PROM since we are going for least change in
initialization.
is_valid_ether_addr() is static inline in <linux/etherdevice.h>
Is this one satisfactory?
Eli
--------------------. Rule of Accuracy: When working toward
Eli Carter | the solution of a problem, it always
eli.carter@inet.com `--------------------- helps if you know the answer.
[-- Attachment #2: patch-pcnet32-mac22 --]
[-- Type: text/plain, Size: 2356 bytes --]
--- linux/drivers/net/pcnet32.c 2001/01/20 11:10:30 1.1.1.6
+++ linux/drivers/net/pcnet32.c 2001/02/15 19:08:55
@@ -648,10 +648,33 @@
printk(KERN_INFO "%s: %s at %#3lx,", dev->name, chipname, ioaddr);
- /* There is a 16 byte station address PROM at the base address.
- The first six bytes are the station address. */
- for (i = 0; i < 6; i++)
- printk(" %2.2x", dev->dev_addr[i] = inb(ioaddr + i));
+ /* In most chips, there is a station address PROM at the base address.
+ * However, if that does not have a valid address, try the "Physical
+ * Address Registers" CSR12-CSR14
+ */
+ {
+ /* There is a 16 byte station address PROM at the base address.
+ The first six bytes are the station address. */
+ for (i = 0; i < 6; i++) {
+ dev->dev_addr[i] = inb(ioaddr + i);
+ }
+ if( !is_valid_ether_addr(dev->dev_addr) ) {
+ /* also double check this station address */
+ for (i = 0; i < 3; i++) {
+ unsigned int val;
+ val = a->read_csr(ioaddr, i+12) & 0x0ffff;
+ /* There may be endianness issues here. */
+ dev->dev_addr[2*i] = val & 0x0ff;
+ dev->dev_addr[2*i+1] = (val >> 8) & 0x0ff;
+ }
+ /* if this is not valid either, force to 00:00:00:00:00:00 */
+ if( !is_valid_ether_addr(dev->dev_addr) )
+ for (i = 0; i < 6; i++)
+ dev->dev_addr[i]=0;
+ }
+ for (i = 0; i < 6; i++)
+ printk(" %2.2x", dev->dev_addr[i] );
+ }
if (((chip_version + 1) & 0xfffe) == 0x2624) { /* Version 0x2623 or 0x2624 */
i = a->read_csr(ioaddr, 80) & 0x0C00; /* Check tx_start_pt */
@@ -796,6 +819,10 @@
lp->shared_irq ? SA_SHIRQ : 0, lp->name, (void *)dev)) {
return -EAGAIN;
}
+
+ /* Check for a valid station address */
+ if( !is_valid_ether_addr(dev->dev_addr) )
+ return -EINVAL;
/* Reset the PCNET32 */
lp->a.reset (ioaddr);
--- linux/include/linux/etherdevice.h 2001/01/19 19:25:31 1.1.1.1
+++ linux/include/linux/etherdevice.h 2001/02/15 19:08:55
@@ -51,6 +51,14 @@
unsigned char *src, int length, int base);
#endif
+/* Check that the ethernet address (MAC) is not 00:00:00:00:00:00 and is not
+ * a multicast address. Return true if the address is valid.
+ */
+static __inline__ int is_valid_ether_addr( u8 *addr )
+{
+ return !(addr[0]&1) && memcmp( addr, "\0\0\0\0\0\0", 6);
+}
+
#endif
#endif /* _LINUX_ETHERDEVICE_H */
next prev parent reply other threads:[~2001-02-15 19:16 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-02-14 21:49 [PATCH] pcnet32.c: MAC address may be in CSR registers Eli Carter
2001-02-14 23:50 ` Eli Carter
2001-02-14 23:55 ` Alan Cox
2001-02-15 15:55 ` Eli Carter
2001-02-15 16:49 ` Alan Cox
2001-02-15 19:16 ` Eli Carter [this message]
2001-02-15 20:31 ` Eli Carter
2001-02-15 13:42 ` Richard B. Johnson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3A8C2B0F.A9EC2300@inet.com \
--to=eli.carter@inet.com \
--cc=P.Missel@sbs-or.de \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=root@chaos.analogic.com \
--cc=tsbogend@alpha.franken.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.