diff options
Diffstat (limited to 'net/net.c')
-rw-r--r-- | net/net.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/net/net.c b/net/net.c index 37b4aab34d4..afec4433f07 100644 --- a/net/net.c +++ b/net/net.c @@ -183,10 +183,13 @@ int NetTimeOffset; #endif static uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN]; - +#ifdef CONFIG_DM_ETH +/* Receive packets */ +uchar *net_rx_packets[PKTBUFSRX]; +#else /* Receive packet */ uchar *NetRxPackets[PKTBUFSRX]; - +#endif /* Current UDP RX packet handler */ static rxhand_f *udp_packet_handler; /* Current ARP RX packet handler */ @@ -304,9 +307,15 @@ void net_init(void) NetTxPacket = &PktBuf[0] + (PKTALIGN - 1); NetTxPacket -= (ulong)NetTxPacket % PKTALIGN; +#ifdef CONFIG_DM_ETH + for (i = 0; i < PKTBUFSRX; i++) { + net_rx_packets[i] = NetTxPacket + (i + 1) * + PKTSIZE_ALIGN; + } +#else for (i = 0; i < PKTBUFSRX; i++) NetRxPackets[i] = NetTxPacket + (i + 1) * PKTSIZE_ALIGN; - +#endif ArpInit(); net_clear_handlers(); @@ -952,8 +961,7 @@ static void receive_icmp(struct ip_udp_hdr *ip, int len, } } -void -NetReceive(uchar *inpkt, int len) +void net_process_received_packet(uchar *in_packet, int len) { struct ethernet_hdr *et; struct ip_udp_hdr *ip; @@ -967,9 +975,9 @@ NetReceive(uchar *inpkt, int len) debug_cond(DEBUG_NET_PKT, "packet received\n"); - NetRxPacket = inpkt; + NetRxPacket = in_packet; NetRxPacketLen = len; - et = (struct ethernet_hdr *)inpkt; + et = (struct ethernet_hdr *)in_packet; /* too small packet? */ if (len < ETHER_HDR_SIZE) @@ -977,7 +985,7 @@ NetReceive(uchar *inpkt, int len) #ifdef CONFIG_API if (push_packet) { - (*push_packet)(inpkt, len); + (*push_packet)(in_packet, len); return; } #endif @@ -1004,11 +1012,11 @@ NetReceive(uchar *inpkt, int len) */ eth_proto = ntohs(et802->et_prot); - ip = (struct ip_udp_hdr *)(inpkt + E802_HDR_SIZE); + ip = (struct ip_udp_hdr *)(in_packet + E802_HDR_SIZE); len -= E802_HDR_SIZE; } else if (eth_proto != PROT_VLAN) { /* normal packet */ - ip = (struct ip_udp_hdr *)(inpkt + ETHER_HDR_SIZE); + ip = (struct ip_udp_hdr *)(in_packet + ETHER_HDR_SIZE); len -= ETHER_HDR_SIZE; } else { /* VLAN packet */ @@ -1033,7 +1041,7 @@ NetReceive(uchar *inpkt, int len) vlanid = cti & VLAN_IDMASK; eth_proto = ntohs(vet->vet_type); - ip = (struct ip_udp_hdr *)(inpkt + VLAN_ETHER_HDR_SIZE); + ip = (struct ip_udp_hdr *)(in_packet + VLAN_ETHER_HDR_SIZE); len -= VLAN_ETHER_HDR_SIZE; } |