xref: /openbmc/u-boot/arch/sandbox/include/asm/eth.h (revision fabbeb33)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2015 National Instruments
4  *
5  * (C) Copyright 2015
6  * Joe Hershberger <joe.hershberger@ni.com>
7  */
8 
9 #ifndef __ETH_H
10 #define __ETH_H
11 
12 void sandbox_eth_disable_response(int index, bool disable);
13 
14 void sandbox_eth_skip_timeout(void);
15 
16 /*
17  * sandbox_eth_arp_req_to_reply()
18  *
19  * Check for an arp request to be sent. If so, inject a reply
20  *
21  * @dev: device that received the packet
22  * @packet: pointer to the received pacaket buffer
23  * @len: length of received packet
24  * @return 0 if injected, -EAGAIN if not
25  */
26 int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet,
27 				 unsigned int len);
28 
29 /*
30  * sandbox_eth_ping_req_to_reply()
31  *
32  * Check for a ping request to be sent. If so, inject a reply
33  *
34  * @dev: device that received the packet
35  * @packet: pointer to the received pacaket buffer
36  * @len: length of received packet
37  * @return 0 if injected, -EAGAIN if not
38  */
39 int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,
40 				  unsigned int len);
41 
42 /*
43  * sandbox_eth_recv_arp_req()
44  *
45  * Inject an ARP request for this target
46  *
47  * @dev: device that received the packet
48  * @return 0 if injected, -EOVERFLOW if not
49  */
50 int sandbox_eth_recv_arp_req(struct udevice *dev);
51 
52 /*
53  * sandbox_eth_recv_ping_req()
54  *
55  * Inject a ping request for this target
56  *
57  * @dev: device that received the packet
58  * @return 0 if injected, -EOVERFLOW if not
59  */
60 int sandbox_eth_recv_ping_req(struct udevice *dev);
61 
62 /**
63  * A packet handler
64  *
65  * dev - device pointer
66  * pkt - pointer to the "sent" packet
67  * len - packet length
68  */
69 typedef int sandbox_eth_tx_hand_f(struct udevice *dev, void *pkt,
70 				   unsigned int len);
71 
72 /**
73  * struct eth_sandbox_priv - memory for sandbox mock driver
74  *
75  * fake_host_hwaddr - MAC address of mocked machine
76  * fake_host_ipaddr - IP address of mocked machine
77  * disabled - Will not respond
78  * recv_packet_buffer - buffers of the packet returned as received
79  * recv_packet_length - lengths of the packet returned as received
80  * recv_packets - number of packets returned
81  * tx_handler - function to generate responses to sent packets
82  * priv - a pointer to some structure a test may want to keep track of
83  */
84 struct eth_sandbox_priv {
85 	uchar fake_host_hwaddr[ARP_HLEN];
86 	struct in_addr fake_host_ipaddr;
87 	bool disabled;
88 	uchar * recv_packet_buffer[PKTBUFSRX];
89 	int recv_packet_length[PKTBUFSRX];
90 	int recv_packets;
91 	sandbox_eth_tx_hand_f *tx_handler;
92 	void *priv;
93 };
94 
95 /*
96  * Set packet handler
97  *
98  * handler - The func ptr to call on send. If NULL, set to default handler
99  */
100 void sandbox_eth_set_tx_handler(int index, sandbox_eth_tx_hand_f *handler);
101 
102 /*
103  * Set priv ptr
104  *
105  * priv - priv void ptr to store in the device
106  */
107 void sandbox_eth_set_priv(int index, void *priv);
108 
109 #endif /* __ETH_H */
110