From: Mike Frysinger <vapier@gentoo.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 01/27 v2] Blackfin: bfin_mac: force board_get_enetaddr() usage
Date: Mon, 2 Feb 2009 15:05:16 -0500 [thread overview]
Message-ID: <200902021505.17476.vapier@gentoo.org> (raw)
In-Reply-To: <200901292023.07046.vapier@gentoo.org>
On Thursday 29 January 2009 20:23:06 Mike Frysinger wrote:
> at any rate, i'm fine with having the driver assume bi_enetaddr is sane.
> so the series of patches i just posted starts unifying the things i whined
> about earlier and does what you suggested.
>
> unfortunately, with this small review i noticed another layer of confusion
> ;). every ethernet device is represented as struct eth_device, and that
> device has an enetaddr member. the board makes sure ethaddr is set in the
> environment during misc init. then when the network is actually used, the
> eth layer calls the board init which calls the driver init which registers
> a new eth_device. then the eth layer sets up dev->enetaddr based on the
> appropriate ethaddr env var. so imo, no eth driver should be touching the
> global data (and thus the bi_enetaddr's contained in there).
>
> going back a step, i dont think the board itself should be touching the
> global bi_enetaddr. when the board sets the ethaddr env var, the common
> code in cmd_nvedit.c syncs the value to the global data.
>
> if i were to document this mess, where would be the best place ? start a
> new doc/README.enetaddr as i dont see any document that covers the eth
> layer ? that way in the future we can all easily agree on how things should
> be done.
how about this document at doc/README.enetaddr ...
-mike
---------------------------------
Ethernet Address (MAC) Handling
---------------------------------
There are a variety of places in U-Boot where the MAC address is used, parse,
and stored. This document covers proper usage of each location and the moving
of data between them.
-----------
Locations
-----------
Here are the places where MAC addresses are stored:
- board-specific location (eeprom, dedicated flash, ...)
- environment ("ethaddr", "eth1addr", ...)
- global data (bi_enetaddr, bi_enet1addr, ...)
- ethernet data (struct eth_device -> enetaddr)
-------
Usage
-------
During board init (like the board-specific misc_init_r() function), boards
should take care of locating the MAC address, initializing the environment,
and seeding the global data.
During runtime, the ethernet layer will use the environment variables to sync
the MAC addresses to the ethernet structures. All ethernet driver code should
then only use the enetaddr member of the eth_device structure.
The common environment code will take care of passing environment changes to
the global data and to the ethernet layer.
Any other common code that wishes to access the MAC address should then query
the global data directly. No one should be looking in the environment for any
addresses.
---------
Helpers
---------
To assist in the management of these layers, a few helper functions exist. You
should use these rather than attempt to do any kind of parsing/manipulation
yourself as many common errors have arisen in the past.
* void eth_parse_enetaddr(char *addr, uchar *enetaddr);
Convert a string representation of a MAC address to the binary version.
char *addr = "00:11:22:33:44:55";
uchar enetaddr[6];
eth_parse_enetaddr(addr, enetaddr);
/* enetaddr now equals { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 } */
* bool eth_getenv_enetaddr(char *name, uchar *enetaddr);
Look up an environment variable and convert the stored address. If the env var
is not set, then the function returns false. Otherwise, the conversion occurs
and returns true.
uchar enetaddr[6];
if (eth_getenv_enetaddr("ethaddr", enetaddr))
/* enetaddr is now set to the value stored in the ethaddr env var */
else
/* "ethaddr" is not set in the environment */
* int eth_setenv_enetaddr(char *name, uchar *enetaddr);
Store the MAC address into the named environment variable. The return value is
the same as the setenv() function.
uchar enetaddr[6] = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55 };
eth_setenv_enetaddr("ethaddr", enetaddr);
/* the "ethaddr" env var should now be set to "00:11:22:33:44:55" */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: This is a digitally signed message part.
Url : http://lists.denx.de/pipermail/u-boot/attachments/20090202/4b98a04d/attachment.pgp
next prev parent reply other threads:[~2009-02-02 20:05 UTC|newest]
Thread overview: 73+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-29 0:03 [U-Boot] [PATCH 00/27] Blackfin updates for 2009.03 (part 2) Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 01/27] Blackfin: bfin_mac: force board_get_enetaddr() usage Mike Frysinger
2009-01-29 5:43 ` Ben Warren
2009-01-29 5:53 ` Mike Frysinger
2009-01-29 6:01 ` Ben Warren
2009-01-29 6:16 ` Mike Frysinger
2009-01-29 6:20 ` Ben Warren
2009-01-29 10:43 ` Wolfgang Denk
2009-01-29 6:59 ` [U-Boot] [PATCH 01/27 v2] " Mike Frysinger
2009-01-29 7:53 ` Ben Warren
2009-01-29 10:45 ` Wolfgang Denk
2009-01-29 16:35 ` Mike Frysinger
2009-01-29 19:03 ` Wolfgang Denk
2009-01-29 20:25 ` Mike Frysinger
2009-01-29 20:41 ` Wolfgang Denk
2009-01-29 21:05 ` Mike Frysinger
2009-01-29 21:17 ` Wolfgang Denk
2009-01-29 21:48 ` Mike Frysinger
2009-01-29 22:18 ` Wolfgang Denk
2009-01-30 1:23 ` Mike Frysinger
2009-02-02 20:05 ` Mike Frysinger [this message]
2009-02-02 21:04 ` Wolfgang Denk
2009-02-03 0:37 ` Mike Frysinger
2009-02-03 8:16 ` Wolfgang Denk
2009-02-03 19:40 ` Mike Frysinger
2009-02-10 20:36 ` Mike Frysinger
2009-02-11 5:45 ` Ben Warren
2009-02-11 5:57 ` Mike Frysinger
2009-02-11 12:17 ` Wolfgang Denk
2009-02-11 19:25 ` Mike Frysinger
2009-02-11 20:15 ` Ben Warren
2009-02-12 1:29 ` Mike Frysinger
2009-02-12 6:24 ` Ben Warren
2009-02-12 6:30 ` Mike Frysinger
2009-02-12 7:33 ` Wolfgang Denk
2009-02-12 7:57 ` Mike Frysinger
2009-01-30 0:59 ` [U-Boot] [PATCH] net: new utility functions eth_{parse, {get, set}env}_enetaddr() Mike Frysinger
2009-01-30 1:09 ` [U-Boot] [PATCH 01/27 v3] Blackfin: bfin_mac: force boards to setup the MAC themselves Mike Frysinger
2009-01-30 1:09 ` [U-Boot] [PATCH] Blackfin: bf537-stamp: rewrite MAC-in-flash handling Mike Frysinger
2009-01-29 17:49 ` [U-Boot] [PATCH 01/27] Blackfin: bfin_mac: force board_get_enetaddr() usage Scott Wood
2009-01-29 10:30 ` Wolfgang Denk
2009-01-29 0:03 ` [U-Boot] [PATCH 02/27] Blackfin: bfin_mac: set MDCDIV based on SCLK Mike Frysinger
2009-01-29 5:46 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 03/27] Blackfin: bfin_mac: cleanup MII/PHY functions Mike Frysinger
2009-01-29 5:48 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 04/27] Blackfin: bfin_mac: respect CONFIG_PHY_{ADDR, CLOCK_FREQ} Mike Frysinger
2009-01-29 5:50 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 05/27] Blackfin: bfin_mac: use common debug() Mike Frysinger
2009-01-29 5:51 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 06/27] Blackfin: bfin_mac: convert CONFIG_BFIN_MAC_RMII to CONFIG_RMII Mike Frysinger
2009-01-29 6:03 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 07/27] Blackfin: bfin_mac: cleanup pointer/casts for aliasing issues Mike Frysinger
2009-01-29 6:05 ` Ben Warren
2009-01-29 0:03 ` [U-Boot] [PATCH 08/27] Blackfin: only build post code when CONFIG_POST Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 09/27] Blackfin: add driver for on-chip SPI controller Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 10/27] Blackfin: dont check baud if it wont actually get used Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 11/27] Blackfin: enable --gc-sections Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 12/27] Blackfin: cache core/system clock values Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 13/27] Blackfin: setup bi_enetaddr for single nets Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 14/27] Blackfin: rewrite cache handling functions Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 15/27] Blackfin: dma_memcpy(): fix random failures Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 16/27] Blackfin: only flag L1 instruction for DMA memcpy Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 17/27] Blackfin: use 8/16/32 bit transfer widths in dma_memcpy() Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 18/27] Blackfin: fix up EBIU defines Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 19/27] Blackfin: build with -mno-fdpic Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 20/27] Blackfin: add driver for on-chip NAND controller Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 21/27] Blackfin: add driver for on-chip ATAPI controller Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 22/27] Blackfin: add port I bits Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 23/27] Blackfin: update asm-blackfin/posix_types.h to latest Linux version Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 24/27] Blackfin: set default CONFIG_ENV_SPI_CS based on bootrom Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 25/27] Blackfin: output booting source when booting Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 26/27] Blackfin: add port muxing for BF51x SPI Mike Frysinger
2009-01-29 0:03 ` [U-Boot] [PATCH 27/27] Blackfin: add driver for on-chip MMC/SD controller Mike Frysinger
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=200902021505.17476.vapier@gentoo.org \
--to=vapier@gentoo.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox