summaryrefslogtreecommitdiff
path: root/net/net.c
diff options
context:
space:
mode:
authorRafal Jaworowski <raj@semihalf.com>2007-12-27 18:19:02 +0100
committerBen Warren <biggerbadderben@gmail.com>2008-01-03 21:36:50 -0500
commitf85b60710571b37293d2233933b76e2aa3db5635 (patch)
treeab517f6280b1d126b0f9dfe53a5496623d63a26f /net/net.c
parent5c740711f0ea5b51414b341b71597c4a0751be74 (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.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/net/net.c b/net/net.c
index c719bc4c0f..cac3e09d96 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;