Re: [U-Boot] [PATCH 06/28] net: Move ARP out of net.c

2012-02-03 Thread Mike Frysinger
Acked-by: Mike Frysinger vap...@gentoo.org
-mike


signature.asc
Description: This is a digitally signed message part.
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 06/28] net: Move ARP out of net.c

2012-01-23 Thread Simon Glass
On Thu, Jan 19, 2012 at 4:53 PM, Joe Hershberger joe.hershber...@ni.com wrote:
 Signed-off-by: Joe Hershberger joe.hershber...@ni.com

Acked-by: Simon Glass s...@chromium.org

 Cc: Joe Hershberger joe.hershber...@gmail.com
 Cc: Wolfgang Denk w...@denx.de
 ---
  include/net.h |    3 +-
  net/Makefile  |    1 +
  net/arp.c     |  213 
 +
  net/arp.h     |   30 
  net/net.c     |  209 
  5 files changed, 259 insertions(+), 197 deletions(-)
  create mode 100644 net/arp.c
  create mode 100644 net/arp.h

 diff --git a/include/net.h b/include/net.h
 index 0396b69..2d00233 100644
 --- a/include/net.h
 +++ b/include/net.h
 @@ -418,7 +418,8 @@ extern void NetSetIP(uchar *, IPaddr_t, int, int, int);
  extern int     NetCksumOk(uchar *, int);       /* Return true if cksum OK */
  extern uint    NetCksum(uchar *, int);         /* Calculate the checksum */

 -/* Set callbacks */
 +/* Callbacks */
 +extern rxhand_f *NetGetHandler(void);          /* Get RX packet handler */
  extern void    NetSetHandler(rxhand_f *);      /* Set RX packet handler */
  extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
  extern void    NetSetTimeout(ulong, thand_f *);/* Set timeout handler */
 diff --git a/net/Makefile b/net/Makefile
 index b350bfc..0916a56 100644
 --- a/net/Makefile
 +++ b/net/Makefile
 @@ -27,6 +27,7 @@ include $(TOPDIR)/config.mk

  LIB    = $(obj)libnet.o

 +COBJS-$(CONFIG_CMD_NET)  += arp.o
  COBJS-$(CONFIG_CMD_NET)  += bootp.o
  COBJS-$(CONFIG_CMD_CDP)  += cdp.o
  COBJS-$(CONFIG_CMD_DNS)  += dns.o
 diff --git a/net/arp.c b/net/arp.c
 new file mode 100644
 index 000..f75217c
 --- /dev/null
 +++ b/net/arp.c
 @@ -0,0 +1,213 @@
 +/*
 + *     Copied from Linux Monitor (LiMon) - Networking.
 + *
 + *     Copyright 1994 - 2000 Neil Russell.
 + *     (See License)
 + *     Copyright 2000 Roland Borde
 + *     Copyright 2000 Paolo Scaffardi
 + *     Copyright 2000-2002 Wolfgang Denk, w...@denx.de
 + */
 +
 +#include common.h
 +
 +#include arp.h
 +
 +#ifndef        CONFIG_ARP_TIMEOUT
 +/* Milliseconds before trying ARP again */
 +# define ARP_TIMEOUT           5000UL
 +#else
 +# define ARP_TIMEOUT           CONFIG_ARP_TIMEOUT
 +#endif
 +
 +
 +#ifndef        CONFIG_NET_RETRY_COUNT
 +# define ARP_TIMEOUT_COUNT     5       /* # of timeouts before giving up  */
 +#else
 +# define ARP_TIMEOUT_COUNT     CONFIG_NET_RETRY_COUNT
 +#endif
 +
 +IPaddr_t       NetArpWaitPacketIP;
 +IPaddr_t       NetArpWaitReplyIP;
 +/* MAC address of waiting packet's destination */
 +uchar         *NetArpWaitPacketMAC;
 +/* THE transmit packet */
 +uchar         *NetArpWaitTxPacket;
 +int            NetArpWaitTxPacketSize;
 +uchar          NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
 +ulong          NetArpWaitTimerStart;
 +int            NetArpWaitTry;
 +
 +void ArpInit(void)
 +{
 +       /* XXX problem with bss workaround */
 +       NetArpWaitPacketMAC = NULL;
 +       NetArpWaitPacketIP = 0;
 +       NetArpWaitReplyIP = 0;
 +       NetArpWaitTxPacket = NetArpWaitPacketBuf[0] + (PKTALIGN - 1);
 +       NetArpWaitTxPacket -= (ulong)NetArpWaitTxPacket % PKTALIGN;
 +       NetArpWaitTxPacketSize = 0;
 +}
 +
 +void ArpRequest(void)
 +{
 +       uchar *pkt;
 +       ARP_t *arp;
 +
 +       debug(ARP broadcast %d\n, NetArpWaitTry);
 +
 +       pkt = NetTxPacket;
 +
 +       pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP);
 +
 +       arp = (ARP_t *) pkt;
 +
 +       arp-ar_hrd = htons(ARP_ETHER);
 +       arp-ar_pro = htons(PROT_IP);
 +       arp-ar_hln = 6;
 +       arp-ar_pln = 4;
 +       arp-ar_op = htons(ARPOP_REQUEST);
 +
 +       /* source ET addr */
 +       memcpy(arp-ar_data[0], NetOurEther, 6);
 +       /* source IP addr */
 +       NetWriteIP((uchar *) arp-ar_data[6], NetOurIP);
 +       /* dest ET addr = 0 */
 +       memset(arp-ar_data[10], '\0', 6);
 +       if ((NetArpWaitPacketIP  NetOurSubnetMask) !=
 +           (NetOurIP  NetOurSubnetMask)) {
 +               if (NetOurGatewayIP == 0) {
 +                       puts(## Warning: gatewayip needed but not set\n);
 +                       NetArpWaitReplyIP = NetArpWaitPacketIP;
 +               } else {
 +                       NetArpWaitReplyIP = NetOurGatewayIP;
 +               }
 +       } else {
 +               NetArpWaitReplyIP = NetArpWaitPacketIP;
 +       }
 +
 +       NetWriteIP((uchar *) arp-ar_data[16], NetArpWaitReplyIP);
 +       (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
 +}
 +
 +void ArpTimeoutCheck(void)
 +{
 +       ulong t;
 +
 +       if (!NetArpWaitPacketIP)
 +               return;
 +
 +       t = get_timer(0);
 +
 +       /* check for arp timeout */
 +       if ((t - NetArpWaitTimerStart)  ARP_TIMEOUT) {
 +               NetArpWaitTry++;
 +
 +               if (NetArpWaitTry = ARP_TIMEOUT_COUNT) {
 +                       puts(\nARP Retry count exceeded; starting again\n);
 +                    

[U-Boot] [PATCH 06/28] net: Move ARP out of net.c

2012-01-20 Thread Joe Hershberger
Signed-off-by: Joe Hershberger joe.hershber...@ni.com
Cc: Joe Hershberger joe.hershber...@gmail.com
Cc: Wolfgang Denk w...@denx.de
---
 include/net.h |3 +-
 net/Makefile  |1 +
 net/arp.c |  213 +
 net/arp.h |   30 
 net/net.c |  209 
 5 files changed, 259 insertions(+), 197 deletions(-)
 create mode 100644 net/arp.c
 create mode 100644 net/arp.h

diff --git a/include/net.h b/include/net.h
index 0396b69..2d00233 100644
--- a/include/net.h
+++ b/include/net.h
@@ -418,7 +418,8 @@ extern void NetSetIP(uchar *, IPaddr_t, int, int, int);
 extern int NetCksumOk(uchar *, int);   /* Return true if cksum OK */
 extern uintNetCksum(uchar *, int); /* Calculate the checksum */
 
-/* Set callbacks */
+/* Callbacks */
+extern rxhand_f *NetGetHandler(void);  /* Get RX packet handler */
 extern voidNetSetHandler(rxhand_f *);  /* Set RX packet handler */
 extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
 extern voidNetSetTimeout(ulong, thand_f *);/* Set timeout handler */
diff --git a/net/Makefile b/net/Makefile
index b350bfc..0916a56 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -27,6 +27,7 @@ include $(TOPDIR)/config.mk
 
 LIB= $(obj)libnet.o
 
+COBJS-$(CONFIG_CMD_NET)  += arp.o
 COBJS-$(CONFIG_CMD_NET)  += bootp.o
 COBJS-$(CONFIG_CMD_CDP)  += cdp.o
 COBJS-$(CONFIG_CMD_DNS)  += dns.o
diff --git a/net/arp.c b/net/arp.c
new file mode 100644
index 000..f75217c
--- /dev/null
+++ b/net/arp.c
@@ -0,0 +1,213 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, w...@denx.de
+ */
+
+#include common.h
+
+#include arp.h
+
+#ifndefCONFIG_ARP_TIMEOUT
+/* Milliseconds before trying ARP again */
+# define ARP_TIMEOUT   5000UL
+#else
+# define ARP_TIMEOUT   CONFIG_ARP_TIMEOUT
+#endif
+
+
+#ifndefCONFIG_NET_RETRY_COUNT
+# define ARP_TIMEOUT_COUNT 5   /* # of timeouts before giving up  */
+#else
+# define ARP_TIMEOUT_COUNT CONFIG_NET_RETRY_COUNT
+#endif
+
+IPaddr_t   NetArpWaitPacketIP;
+IPaddr_t   NetArpWaitReplyIP;
+/* MAC address of waiting packet's destination */
+uchar *NetArpWaitPacketMAC;
+/* THE transmit packet */
+uchar *NetArpWaitTxPacket;
+intNetArpWaitTxPacketSize;
+uchar  NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
+ulong  NetArpWaitTimerStart;
+intNetArpWaitTry;
+
+void ArpInit(void)
+{
+   /* XXX problem with bss workaround */
+   NetArpWaitPacketMAC = NULL;
+   NetArpWaitPacketIP = 0;
+   NetArpWaitReplyIP = 0;
+   NetArpWaitTxPacket = NetArpWaitPacketBuf[0] + (PKTALIGN - 1);
+   NetArpWaitTxPacket -= (ulong)NetArpWaitTxPacket % PKTALIGN;
+   NetArpWaitTxPacketSize = 0;
+}
+
+void ArpRequest(void)
+{
+   uchar *pkt;
+   ARP_t *arp;
+
+   debug(ARP broadcast %d\n, NetArpWaitTry);
+
+   pkt = NetTxPacket;
+
+   pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP);
+
+   arp = (ARP_t *) pkt;
+
+   arp-ar_hrd = htons(ARP_ETHER);
+   arp-ar_pro = htons(PROT_IP);
+   arp-ar_hln = 6;
+   arp-ar_pln = 4;
+   arp-ar_op = htons(ARPOP_REQUEST);
+
+   /* source ET addr */
+   memcpy(arp-ar_data[0], NetOurEther, 6);
+   /* source IP addr */
+   NetWriteIP((uchar *) arp-ar_data[6], NetOurIP);
+   /* dest ET addr = 0 */
+   memset(arp-ar_data[10], '\0', 6);
+   if ((NetArpWaitPacketIP  NetOurSubnetMask) !=
+   (NetOurIP  NetOurSubnetMask)) {
+   if (NetOurGatewayIP == 0) {
+   puts(## Warning: gatewayip needed but not set\n);
+   NetArpWaitReplyIP = NetArpWaitPacketIP;
+   } else {
+   NetArpWaitReplyIP = NetOurGatewayIP;
+   }
+   } else {
+   NetArpWaitReplyIP = NetArpWaitPacketIP;
+   }
+
+   NetWriteIP((uchar *) arp-ar_data[16], NetArpWaitReplyIP);
+   (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
+}
+
+void ArpTimeoutCheck(void)
+{
+   ulong t;
+
+   if (!NetArpWaitPacketIP)
+   return;
+
+   t = get_timer(0);
+
+   /* check for arp timeout */
+   if ((t - NetArpWaitTimerStart)  ARP_TIMEOUT) {
+   NetArpWaitTry++;
+
+   if (NetArpWaitTry = ARP_TIMEOUT_COUNT) {
+   puts(\nARP Retry count exceeded; starting again\n);
+   NetArpWaitTry = 0;
+   NetStartAgain();
+   } else {
+   NetArpWaitTimerStart = t;
+   ArpRequest();
+   }
+   }
+}
+
+void ArpReceive(Ethernet_t *et, IP_t *ip, int len)
+{
+