X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fnet%2Fsandbox.c;h=d538d379bbec77cb54c7072b63480218f3d456dd;hb=a51897b6c1e517ea2ce95da59784e84c5992dd00;hp=db115d0339f8223e91db0a76c812fec0c944878b;hpb=2eede1f363b485a9b2b49ac097b9a24256716c8b;p=u-boot diff --git a/drivers/net/sandbox.c b/drivers/net/sandbox.c index db115d0339..d538d379bb 100644 --- a/drivers/net/sandbox.c +++ b/drivers/net/sandbox.c @@ -11,6 +11,7 @@ #include #include #include +#include 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;