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