This patch enables the WoL command

Signed-off-by: Lothar Felten <[email protected]>
---
 cmd/Kconfig   |  5 +++++
 cmd/net.c     | 14 ++++++++++++++
 include/net.h |  3 ++-
 net/Makefile  |  1 +
 net/net.c     | 19 +++++++++++++++++++
 5 files changed, 41 insertions(+), 1 deletion(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index bc1d2f31c0..ed9d82fe71 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1142,6 +1142,11 @@ config CMD_RARP
        help
          Boot image via network using RARP/TFTP protocol
 
+config CMD_WOL
+       bool "wol"
+       help
+         Wait for wake-on-lan packages
+
 config CMD_NFS
        bool "nfs"
        default y
diff --git a/cmd/net.c b/cmd/net.c
index 67888d4e18..2e963b19c2 100644
--- a/cmd/net.c
+++ b/cmd/net.c
@@ -88,6 +88,20 @@ U_BOOT_CMD(
 );
 #endif
 
+#if defined(CONFIG_CMD_WOL)
+int do_wol(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       return netboot_common(WOL, cmdtp, argc, argv);
+}
+
+U_BOOT_CMD(
+       wol,    2,      1,      do_wol,
+       "wait for an incoming wake-on-lan packet",
+       "[timeout]\n"
+       "timeout is in seconds"
+);
+#endif
+
 #if defined(CONFIG_CMD_DHCP)
 static int do_dhcp(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
diff --git a/include/net.h b/include/net.h
index 3469811aa0..0b4c2438a5 100644
--- a/include/net.h
+++ b/include/net.h
@@ -344,6 +344,7 @@ struct vlan_ethernet_hdr {
 
 #define PROT_IP                0x0800          /* IP protocol                  
*/
 #define PROT_ARP       0x0806          /* IP ARP protocol              */
+#define PROT_WOL       0x0842          /* IP WOL protocol              */
 #define PROT_RARP      0x8035          /* IP ARP protocol              */
 #define PROT_VLAN      0x8100          /* IEEE 802.1q protocol         */
 #define PROT_IPV6      0x86dd          /* IPv6 over bluebook           */
@@ -535,7 +536,7 @@ extern int          net_restart_wrap;       /* Tried all 
network devices */
 
 enum proto_t {
        BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
-       TFTPSRV, TFTPPUT, LINKLOCAL
+       TFTPSRV, TFTPPUT, LINKLOCAL, WOL
 };
 
 extern char    net_boot_file_name[1024];/* Boot File name */
diff --git a/net/Makefile b/net/Makefile
index ce6e5adfa5..993b18f24c 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_CMD_PING) += ping.o
 obj-$(CONFIG_CMD_RARP) += rarp.o
 obj-$(CONFIG_CMD_SNTP) += sntp.o
 obj-$(CONFIG_CMD_TFTPBOOT) += tftp.o
+obj-$(CONFIG_CMD_WOL)  += wol.o
 
 # Disable this warning as it is triggered by:
 # sprintf(buf, index ? "foo%d" : "foo", index)
diff --git a/net/net.c b/net/net.c
index 8a9b69c6b0..e0088d352c 100644
--- a/net/net.c
+++ b/net/net.c
@@ -78,6 +78,12 @@
  *                     - own IP address
  *     We want:        - network time
  *     Next step:      none
+ *
+ * WOL:
+ *
+ *     Prerequisites:  - own ethernet address
+ *     We want:        - magic packet to initiate action
+ *     Next step:      none
  */
 
 
@@ -107,6 +113,9 @@
 #if defined(CONFIG_CMD_SNTP)
 #include "sntp.h"
 #endif
+#if defined(CONFIG_CMD_WOL)
+#include "wol.h"
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -508,6 +517,11 @@ restart:
                case LINKLOCAL:
                        link_local_start();
                        break;
+#endif
+#if defined(CONFIG_CMD_WOL)
+               case WOL:
+                       wol_start();
+                       break;
 #endif
                default:
                        break;
@@ -1274,6 +1288,11 @@ void net_process_received_packet(uchar *in_packet, int 
len)
                                      ntohs(ip->udp_src),
                                      ntohs(ip->udp_len) - UDP_HDR_SIZE);
                break;
+#ifdef CONFIG_CMD_WOL
+       case PROT_WOL:
+               wol_receive(ip, len);
+               break;
+#endif
        }
 }
 
-- 
2.14.1

_______________________________________________
U-Boot mailing list
[email protected]
https://lists.denx.de/listinfo/u-boot

Reply via email to