diff options
author | Rafal Jaworowski <raj@semihalf.com> | 2007-12-27 18:19:02 +0100 |
---|---|---|
committer | Ben Warren <biggerbadderben@gmail.com> | 2008-01-03 21:36:50 -0500 |
commit | f85b60710571b37293d2233933b76e2aa3db5635 (patch) | |
tree | ab517f6280b1d126b0f9dfe53a5496623d63a26f /net/net.c | |
parent | 5c740711f0ea5b51414b341b71597c4a0751be74 (diff) |
Introduce new eth_receive routine
The purpose of this routine is receiving a single network frame, outside of
U-Boot's NetLoop(). Exporting it to standalone programs that run on top of
U-Boot will let them utilise networking facilities. For sending a raw frame
the already existing eth_send() can be used.
The direct consumer of this routine is the newly introduced API layer for
external applications (enabled with CONFIG_API).
Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
Signed-off-by: Piotr Kruszynski <ppk@semihalf.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'net/net.c')
-rw-r--r-- | net/net.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/net.c b/net/net.c index c719bc4c0f3..cac3e09d96d 100644 --- a/net/net.c +++ b/net/net.c @@ -137,6 +137,9 @@ uchar NetBcastAddr[6] = /* Ethernet bcast address */ { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; uchar NetEtherNullAddr[6] = { 0, 0, 0, 0, 0, 0 }; +#ifdef CONFIG_API +void (*push_packet)(volatile void *, int len) = 0; +#endif #if defined(CONFIG_CMD_CDP) uchar NetCDPAddr[6] = /* Ethernet bcast address */ { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc }; @@ -1161,6 +1164,13 @@ NetReceive(volatile uchar * inpkt, int len) if (len < ETHER_HDR_SIZE) return; +#ifdef CONFIG_API + if (push_packet) { + (*push_packet)(inpkt, len); + return; + } +#endif + #if defined(CONFIG_CMD_CDP) /* keep track if packet is CDP */ iscdp = memcmp(et->et_dest, NetCDPAddr, 6) == 0; |