]> git.sur5r.net Git - u-boot/blobdiff - drivers/net/sandbox.c
net: davinci_emac: Invalidate only the received portion of a buffer
[u-boot] / drivers / net / sandbox.c
index db115d0339f8223e91db0a76c812fec0c944878b..d538d379bbec77cb54c7072b63480218f3d456dd 100644 (file)
@@ -11,6 +11,7 @@
 #include <dm.h>
 #include <malloc.h>
 #include <net.h>
+#include <asm/test.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -24,12 +25,13 @@ DECLARE_GLOBAL_DATA_PTR;
  */
 struct eth_sandbox_priv {
        uchar fake_host_hwaddr[ARP_HLEN];
-       IPaddr_t fake_host_ipaddr;
+       struct in_addr fake_host_ipaddr;
        uchar *recv_packet_buffer;
        int recv_packet_length;
 };
 
 static bool disabled[8] = {false};
+static bool skip_timeout;
 
 /*
  * sandbox_eth_disable_response()
@@ -42,6 +44,16 @@ void sandbox_eth_disable_response(int index, bool disable)
        disabled[index] = disable;
 }
 
+/*
+ * sandbox_eth_skip_timeout()
+ *
+ * When the first packet read is attempted, fast-forward time
+ */
+void sandbox_eth_skip_timeout(void)
+{
+       skip_timeout = true;
+}
+
 static int sb_eth_start(struct udevice *dev)
 {
        struct eth_sandbox_priv *priv = dev_get_priv(dev);
@@ -73,7 +85,7 @@ static int sb_eth_send(struct udevice *dev, void *packet, int length)
                        struct arp_hdr *arp_recv;
 
                        /* store this as the assumed IP of the fake host */
-                       priv->fake_host_ipaddr = NetReadIP(&arp->ar_tpa);
+                       priv->fake_host_ipaddr = net_read_ip(&arp->ar_tpa);
                        /* Formulate a fake response */
                        eth_recv = (void *)priv->recv_packet_buffer;
                        memcpy(eth_recv->et_dest, eth->et_src, ARP_HLEN);
@@ -90,9 +102,9 @@ static int sb_eth_send(struct udevice *dev, void *packet, int length)
                        arp_recv->ar_op = htons(ARPOP_REPLY);
                        memcpy(&arp_recv->ar_sha, priv->fake_host_hwaddr,
                               ARP_HLEN);
-                       NetWriteIP(&arp_recv->ar_spa, priv->fake_host_ipaddr);
+                       net_write_ip(&arp_recv->ar_spa, priv->fake_host_ipaddr);
                        memcpy(&arp_recv->ar_tha, &arp->ar_sha, ARP_HLEN);
-                       NetCopyIP(&arp_recv->ar_tpa, &arp->ar_spa);
+                       net_copy_ip(&arp_recv->ar_tpa, &arp->ar_spa);
 
                        priv->recv_packet_length = ETHER_HDR_SIZE +
                                ARP_HDR_SIZE;
@@ -121,9 +133,9 @@ static int sb_eth_send(struct udevice *dev, void *packet, int length)
                                       ARP_HLEN);
                                ipr->ip_sum = 0;
                                ipr->ip_off = 0;
-                               NetCopyIP((void *)&ipr->ip_dst, &ip->ip_src);
-                               NetWriteIP((void *)&ipr->ip_src,
-                                          priv->fake_host_ipaddr);
+                               net_copy_ip((void *)&ipr->ip_dst, &ip->ip_src);
+                               net_write_ip((void *)&ipr->ip_src,
+                                            priv->fake_host_ipaddr);
                                ipr->ip_sum = compute_ip_checksum(ipr,
                                        IP_HDR_SIZE);
 
@@ -140,10 +152,15 @@ static int sb_eth_send(struct udevice *dev, void *packet, int length)
        return 0;
 }
 
-static int sb_eth_recv(struct udevice *dev, uchar **packetp)
+static int sb_eth_recv(struct udevice *dev, int flags, uchar **packetp)
 {
        struct eth_sandbox_priv *priv = dev_get_priv(dev);
 
+       if (skip_timeout) {
+               sandbox_timer_add_offset(11000UL);
+               skip_timeout = false;
+       }
+
        if (priv->recv_packet_length) {
                int lcl_recv_packet_length = priv->recv_packet_length;