All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Rapoport <mike@compulab.co.il>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] Add ability to take MAC address from the environment to DM9000 driver
Date: Tue, 07 Aug 2007 13:32:39 +0300	[thread overview]
Message-ID: <46B84A47.3030908@compulab.co.il> (raw)

Signed-off-by: Mike Rapoport <mike@compulab.co.il>

  drivers/dm9000x.c |   14 ++++++++++++++
  include/net.h     |   39 +++++++++++++++++++++++++++++++++++++++
  2 files changed, 53 insertions(+), 0 deletions(-)

diff --git a/drivers/dm9000x.c b/drivers/dm9000x.c
index 6877076..6486699 100644
--- a/drivers/dm9000x.c
+++ b/drivers/dm9000x.c
@@ -302,6 +302,20 @@ eth_init(bd_t * bd)
  	/* Set Node address */
  	for (i = 0; i < 6; i++)
  		((u16 *) bd->bi_enetaddr)[i] = read_srom_word(i);
+
+	if (!is_valid_ether_addr(bd->bi_enetaddr)) {
+		/* try reading from environment */
+		u8 i;
+		char *s, *e;
+		s = getenv ("ethaddr");
+		for (i = 0; i < 6; ++i) {
+			bd->bi_enetaddr[i] = s ?
+				simple_strtoul (s, &e, 16) : 0;
+			if (s)
+				s = (*e) ? e + 1 : e;
+		}
+	}
+
  	printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", bd->bi_enetaddr[0],
  	       bd->bi_enetaddr[1], bd->bi_enetaddr[2], bd->bi_enetaddr[3],
  	       bd->bi_enetaddr[4], bd->bi_enetaddr[5]);
diff --git a/include/net.h b/include/net.h
index 461e038..34967e4 100644
--- a/include/net.h
+++ b/include/net.h
@@ -435,6 +435,45 @@ static inline void NetCopyLong(ulong *to, ulong *from)
  	memcpy((void*)to, (void*)from, sizeof(ulong));
  }

+/**
+ * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Return true if the address is all zeroes.
+ */
+static inline int is_zero_ether_addr(const u8 *addr)
+{
+	return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
+}
+
+/**
+ * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Return true if the address is a multicast address.
+ * By definition the broadcast address is also a multicast address.
+ */
+static inline int is_multicast_ether_addr(const u8 *addr)
+{
+	return (0x01 & addr[0]);
+}
+
+/**
+ * is_valid_ether_addr - Determine if the given Ethernet address is valid
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
+ * a multicast address, and is not FF:FF:FF:FF:FF:FF.
+ *
+ * Return true if the address is valid.
+ */
+static inline int is_valid_ether_addr(const u8 *addr)
+{
+	/* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
+	 * explicitly check for it here. */
+	return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
+}
+
  /* Convert an IP address to a string */
  extern void	ip_to_string (IPaddr_t x, char *s);

             reply	other threads:[~2007-08-07 10:32 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-08-07 10:32 Mike Rapoport [this message]
2007-08-07 14:56 ` [U-Boot-Users] [PATCH] Add ability to take MAC address from the environment to DM9000 driver Wolfgang Denk
2007-08-07 15:29   ` Mike Rapoport
2007-08-09 21:04     ` Wolfgang Denk
2007-08-09 21:10       ` Wolfgang Denk
2007-08-12  5:48         ` Mike Rapoport
2007-08-13 14:32           ` Ben Warren
2007-08-07 14:57 ` Wolfgang Denk
2007-08-07 16:07 ` Ben Warren
2007-08-08  5:35   ` Mike Rapoport
2007-08-08  6:48     ` Wolfgang Denk
2007-08-08  7:10       ` Mike Rapoport
2007-08-08 15:41         ` Ben Warren

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=46B84A47.3030908@compulab.co.il \
    --to=mike@compulab.co.il \
    --cc=u-boot@lists.denx.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.