1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * wol - Wake-on-LAN
4  *
5  * Supports both Wake-on-LAN packet types:
6  * - EtherType 0x0842 packets
7  * - UDP packets on ports 0, 7 and 9.
8  *
9  * Copyright 2018 Lothar Felten, lothar.felten@gmail.com
10  */
11 
12 #if defined(CONFIG_CMD_WOL)
13 
14 #ifndef __WOL_H__
15 #define __WOL_H__
16 
17 #include <net.h>
18 
19 /**********************************************************************/
20 
21 #define WOL_SYNC_BYTE			0xFF
22 #define WOL_SYNC_COUNT			6
23 #define WOL_MAC_REPETITIONS		16
24 #define WOL_DEFAULT_TIMEOUT		5000
25 #define WOL_PASSWORD_4B			4
26 #define WOL_PASSWORD_6B			6
27 
28 /*
29  * Wake-on-LAN header
30  */
31 struct wol_hdr {
32 	u8	wol_sync[WOL_SYNC_COUNT];			/* sync bytes */
33 	u8	wol_dest[WOL_MAC_REPETITIONS * ARP_HLEN];	/* 16x MAC */
34 	u8	wol_passwd[0];					/* optional */
35 };
36 
37 /*
38  * Initialize wol (beginning of netloop)
39  */
40 void wol_start(void);
41 
42 /*
43  * Check incoming Wake-on-LAN packet for:
44  * - sync bytes
45  * - sixteen copies of the target MAC address
46  *
47  * Optionally store the four or six byte password in the environment
48  * variable "wolpassword"
49  *
50  * @param ip IP header in the packet
51  * @param len Packet length
52  */
53 void wol_receive(struct ip_udp_hdr *ip, unsigned int len);
54 
55 /*
56  * Set the timeout for the reception of a Wake-on-LAN packet
57  *
58  * @param timeout in milliseconds
59  */
60 void wol_set_timeout(ulong timeout);
61 
62 /**********************************************************************/
63 
64 #endif /* __WOL_H__ */
65 #endif
66