xref: /openbmc/u-boot/arch/sandbox/include/asm/eth.h (revision cf033e04)
183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */
22eede1f3SJoe Hershberger /*
32eede1f3SJoe Hershberger  * Copyright (c) 2015 National Instruments
42eede1f3SJoe Hershberger  *
52eede1f3SJoe Hershberger  * (C) Copyright 2015
62eede1f3SJoe Hershberger  * Joe Hershberger <joe.hershberger@ni.com>
72eede1f3SJoe Hershberger  */
82eede1f3SJoe Hershberger 
92eede1f3SJoe Hershberger #ifndef __ETH_H
102eede1f3SJoe Hershberger #define __ETH_H
112eede1f3SJoe Hershberger 
122eede1f3SJoe Hershberger void sandbox_eth_disable_response(int index, bool disable);
132eede1f3SJoe Hershberger 
146f2707c6SJoe Hershberger void sandbox_eth_skip_timeout(void);
156f2707c6SJoe Hershberger 
16e95bb161SJoe Hershberger /*
17e95bb161SJoe Hershberger  * sandbox_eth_arp_req_to_reply()
18e95bb161SJoe Hershberger  *
19e95bb161SJoe Hershberger  * Check for an arp request to be sent. If so, inject a reply
20e95bb161SJoe Hershberger  *
21e95bb161SJoe Hershberger  * @dev: device that received the packet
22e95bb161SJoe Hershberger  * @packet: pointer to the received pacaket buffer
23e95bb161SJoe Hershberger  * @len: length of received packet
24e95bb161SJoe Hershberger  * @return 0 if injected, -EAGAIN if not
25e95bb161SJoe Hershberger  */
26e95bb161SJoe Hershberger int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet,
27e95bb161SJoe Hershberger 				 unsigned int len);
28e95bb161SJoe Hershberger 
29e95bb161SJoe Hershberger /*
30e95bb161SJoe Hershberger  * sandbox_eth_ping_req_to_reply()
31e95bb161SJoe Hershberger  *
32e95bb161SJoe Hershberger  * Check for a ping request to be sent. If so, inject a reply
33e95bb161SJoe Hershberger  *
34e95bb161SJoe Hershberger  * @dev: device that received the packet
35e95bb161SJoe Hershberger  * @packet: pointer to the received pacaket buffer
36e95bb161SJoe Hershberger  * @len: length of received packet
37e95bb161SJoe Hershberger  * @return 0 if injected, -EAGAIN if not
38e95bb161SJoe Hershberger  */
39e95bb161SJoe Hershberger int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,
40e95bb161SJoe Hershberger 				  unsigned int len);
41e95bb161SJoe Hershberger 
4245988daeSJoe Hershberger /*
4345988daeSJoe Hershberger  * sandbox_eth_recv_arp_req()
4445988daeSJoe Hershberger  *
4545988daeSJoe Hershberger  * Inject an ARP request for this target
4645988daeSJoe Hershberger  *
4745988daeSJoe Hershberger  * @dev: device that received the packet
4845988daeSJoe Hershberger  * @return 0 if injected, -EOVERFLOW if not
4945988daeSJoe Hershberger  */
5045988daeSJoe Hershberger int sandbox_eth_recv_arp_req(struct udevice *dev);
5145988daeSJoe Hershberger 
52*72ff0042SJoe Hershberger /*
53*72ff0042SJoe Hershberger  * sandbox_eth_recv_ping_req()
54*72ff0042SJoe Hershberger  *
55*72ff0042SJoe Hershberger  * Inject a ping request for this target
56*72ff0042SJoe Hershberger  *
57*72ff0042SJoe Hershberger  * @dev: device that received the packet
58*72ff0042SJoe Hershberger  * @return 0 if injected, -EOVERFLOW if not
59*72ff0042SJoe Hershberger  */
60*72ff0042SJoe Hershberger int sandbox_eth_recv_ping_req(struct udevice *dev);
61*72ff0042SJoe Hershberger 
62c7eb733dSJoe Hershberger /**
63c7eb733dSJoe Hershberger  * A packet handler
64c7eb733dSJoe Hershberger  *
65c7eb733dSJoe Hershberger  * dev - device pointer
66c7eb733dSJoe Hershberger  * pkt - pointer to the "sent" packet
67c7eb733dSJoe Hershberger  * len - packet length
68c7eb733dSJoe Hershberger  */
69c7eb733dSJoe Hershberger typedef int sandbox_eth_tx_hand_f(struct udevice *dev, void *pkt,
70c7eb733dSJoe Hershberger 				   unsigned int len);
71c7eb733dSJoe Hershberger 
7276a50343SJoe Hershberger /**
7376a50343SJoe Hershberger  * struct eth_sandbox_priv - memory for sandbox mock driver
7476a50343SJoe Hershberger  *
7576a50343SJoe Hershberger  * fake_host_hwaddr - MAC address of mocked machine
7676a50343SJoe Hershberger  * fake_host_ipaddr - IP address of mocked machine
7776a50343SJoe Hershberger  * disabled - Will not respond
78c67a4207SJoe Hershberger  * recv_packet_buffer - buffers of the packet returned as received
79c67a4207SJoe Hershberger  * recv_packet_length - lengths of the packet returned as received
80c67a4207SJoe Hershberger  * recv_packets - number of packets returned
8176a50343SJoe Hershberger  * tx_handler - function to generate responses to sent packets
829cbe5972SJoe Hershberger  * priv - a pointer to some structure a test may want to keep track of
8376a50343SJoe Hershberger  */
8476a50343SJoe Hershberger struct eth_sandbox_priv {
8576a50343SJoe Hershberger 	uchar fake_host_hwaddr[ARP_HLEN];
8676a50343SJoe Hershberger 	struct in_addr fake_host_ipaddr;
8776a50343SJoe Hershberger 	bool disabled;
88c67a4207SJoe Hershberger 	uchar * recv_packet_buffer[PKTBUFSRX];
89c67a4207SJoe Hershberger 	int recv_packet_length[PKTBUFSRX];
90c67a4207SJoe Hershberger 	int recv_packets;
9176a50343SJoe Hershberger 	sandbox_eth_tx_hand_f *tx_handler;
929cbe5972SJoe Hershberger 	void *priv;
9376a50343SJoe Hershberger };
9476a50343SJoe Hershberger 
95c7eb733dSJoe Hershberger /*
96c7eb733dSJoe Hershberger  * Set packet handler
97c7eb733dSJoe Hershberger  *
98c7eb733dSJoe Hershberger  * handler - The func ptr to call on send. If NULL, set to default handler
99c7eb733dSJoe Hershberger  */
100c7eb733dSJoe Hershberger void sandbox_eth_set_tx_handler(int index, sandbox_eth_tx_hand_f *handler);
101c7eb733dSJoe Hershberger 
1029cbe5972SJoe Hershberger /*
1039cbe5972SJoe Hershberger  * Set priv ptr
1049cbe5972SJoe Hershberger  *
1059cbe5972SJoe Hershberger  * priv - priv void ptr to store in the device
1069cbe5972SJoe Hershberger  */
1079cbe5972SJoe Hershberger void sandbox_eth_set_priv(int index, void *priv);
1089cbe5972SJoe Hershberger 
1092eede1f3SJoe Hershberger #endif /* __ETH_H */
110