int state;
 
        int  (*init) (struct eth_device*, bd_t*);
-       int  (*send) (struct eth_device*, volatile void* packet, int length);
+       int  (*send) (struct eth_device*, void *packet, int length);
        int  (*recv) (struct eth_device*);
        void (*halt) (struct eth_device*);
 #ifdef CONFIG_MCAST_TFTP
 
 extern int usb_eth_initialize(bd_t *bi);
 extern int eth_init(bd_t *bis);                        /* Initialize the device */
-extern int eth_send(volatile void *packet, int length);           /* Send a packet */
+extern int eth_send(void *packet, int length);    /* Send a packet */
 
 #ifdef CONFIG_API
-extern int eth_receive(volatile void *packet, int length); /* Receive a packet*/
+extern int eth_receive(void *packet, int length); /* Receive a packet*/
+extern void (*push_packet)(void *packet, int length);
 #endif
 extern int eth_rx(void);                       /* Check for received packets */
 extern void eth_halt(void);                    /* stop SCC */
 extern uchar           NetServerEther[6];      /* Boot server enet address     */
 extern IPaddr_t                NetOurIP;               /* Our    IP addr (0 = unknown) */
 extern IPaddr_t                NetServerIP;            /* Server IP addr (0 = unknown) */
-extern volatile uchar * NetTxPacket;           /* THE transmit packet          */
-extern volatile uchar * NetRxPackets[PKTBUFSRX];/* Receive packets             */
-extern volatile uchar * NetRxPacket;           /* Current receive packet       */
+extern uchar           *NetTxPacket;           /* THE transmit packet */
+extern uchar           *NetRxPackets[PKTBUFSRX];/* Receive packets */
+extern uchar           *NetRxPacket;           /* Current receive packet */
 extern int             NetRxPacketLen;         /* Current rx packet length     */
 extern unsigned                NetIPID;                /* IP ID (counting)             */
 extern uchar           NetBcastAddr[6];        /* Ethernet boardcast address   */
 extern int     NetEthHdrSize(void);
 
 /* Set ethernet header; returns the size of the header */
-extern int     NetSetEther(volatile uchar *, uchar *, uint);
+extern int NetSetEther(uchar *, uchar *, uint);
 
 /* Set IP header */
-extern void    NetSetIP(volatile uchar *, IPaddr_t, int, int, int);
+extern void NetSetIP(uchar *, IPaddr_t, int, int, int);
 
 /* Checksum */
 extern int     NetCksumOk(uchar *, int);       /* Return true if cksum OK      */
 extern void    NetSetTimeout(ulong, thand_f *);/* Set timeout handler          */
 
 /* Transmit "NetTxPacket" */
-extern void    NetSendPacket(volatile uchar *, int);
+extern void NetSendPacket(uchar *, int);
 
 /* Transmit UDP packet, performing ARP request if needed */
 extern int     NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len);
 
 /* Processes a received packet */
-extern void    NetReceive(volatile uchar *, int);
+extern void NetReceive(uchar *, int);
 
 /*
  * Check if autoload is enabled. If so, use either NFS or TFTP to download
  * footprint in our tests.
  */
 /* return IP *in network byteorder* */
-static inline IPaddr_t NetReadIP(volatile void *from)
+static inline IPaddr_t NetReadIP(void *from)
 {
        IPaddr_t ip;
        memcpy((void*)&ip, (void*)from, sizeof(ip));
 }
 
 /* copy IP */
-static inline void NetCopyIP(volatile void *to, void *from)
+static inline void NetCopyIP(void *to, void *from)
 {
        memcpy((void*)to, from, sizeof(IPaddr_t));
 }
 
 void
 BootpRequest (void)
 {
-       volatile uchar *pkt, *iphdr;
+       uchar *pkt, *iphdr;
        Bootp_t *bp;
        int ext_len, pktlen, iplen;
 
 
 static void DhcpSendRequestPkt(Bootp_t *bp_offer)
 {
-       volatile uchar *pkt, *iphdr;
+       uchar *pkt, *iphdr;
        Bootp_t *bp;
        int pktlen, iplen, extlen;
        IPaddr_t OfferedIP;
 
 int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
 
 #ifdef CONFIG_API
-extern void (*push_packet)(volatile void *, int);
-
 static struct {
        uchar data[PKTSIZE];
        int length;
        eth_current->state = ETH_STATE_PASSIVE;
 }
 
-int eth_send(volatile void *packet, int length)
+int eth_send(void *packet, int length)
 {
        if (!eth_current)
                return -1;
 }
 
 #ifdef CONFIG_API
-static void eth_save_packet(volatile void *packet, int length)
+static void eth_save_packet(void *packet, int length)
 {
-       volatile char *p = packet;
+       char *p = packet;
        int i;
 
        if ((eth_rcv_last+1) % PKTBUFSRX == eth_rcv_current)
        eth_rcv_last = (eth_rcv_last + 1) % PKTBUFSRX;
 }
 
-int eth_receive(volatile void *packet, int length)
+int eth_receive(void *packet, int length)
 {
-       volatile char *p = packet;
+       char *p = packet;
        void *pp = push_packet;
        int i;
 
 
 /* Server IP addr (0 = unknown) */
 IPaddr_t       NetServerIP;
 /* Current receive packet */
-volatile uchar *NetRxPacket;
+uchar *NetRxPacket;
 /* Current rx packet length */
 int            NetRxPacketLen;
 /* IP packet ID */
 uchar          NetBcastAddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
 uchar          NetEtherNullAddr[6];
 #ifdef CONFIG_API
-void           (*push_packet)(volatile void *, int len) = 0;
+void           (*push_packet)(void *, int len) = 0;
 #endif
 #if defined(CONFIG_CMD_CDP)
 /* Ethernet bcast address */
 int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len);
 #endif
 
-volatile uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
+uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
 
 /* Receive packet */
-volatile uchar *NetRxPackets[PKTBUFSRX];
+uchar *NetRxPackets[PKTBUFSRX];
 
 /* Current RX packet handler */
 static rxhand_f *packetHandler;
 /* Current timeout value */
 static ulong   timeDelta;
 /* THE transmit packet */
-volatile uchar *NetTxPacket;
+uchar *NetTxPacket;
 
 static int net_check_prereq(enum proto_t protocol);
 
 
 void ArpRequest(void)
 {
-       volatile uchar *pkt;
+       uchar *pkt;
        ARP_t *arp;
 
        debug("ARP broadcast %d\n", NetArpWaitTry);
 
 
 void
-NetSendPacket(volatile uchar *pkt, int len)
+NetSendPacket(uchar *pkt, int len)
 {
        (void) eth_send(pkt, len);
 }
 int PingSend(void)
 {
        static uchar mac[6];
-       volatile IP_t *ip;
-       volatile ushort *s;
+       IP_t *ip;
+       ushort *s;
        uchar *pkt;
 
        /* XXX always send arp request */
        pkt = NetArpWaitTxPacket;
        pkt += NetSetEther(pkt, mac, PROT_IP);
 
-       ip = (volatile IP_t *)pkt;
+       ip = (IP_t *)pkt;
 
        /*
         * Construct an IP and ICMP header.
 
 int CDPSendTrigger(void)
 {
-       volatile uchar *pkt;
-       volatile ushort *s;
-       volatile ushort *cp;
+       uchar *pkt;
+       ushort *s;
+       ushort *cp;
        Ethernet_t *et;
        int len;
        ushort chksum;
        /* CDP header */
        *pkt++ = 0x02;                          /* CDP version 2 */
        *pkt++ = 180;                           /* TTL */
-       s = (volatile ushort *)pkt;
+       s = (ushort *)pkt;
        cp = s;
        /* checksum (0 for later calculation) */
        *s++ = htons(0);
 }
 
 void
-NetReceive(volatile uchar *inpkt, int len)
+NetReceive(uchar *inpkt, int len)
 {
        Ethernet_t *et;
        IP_t    *ip;
 }
 
 int
-NetSetEther(volatile uchar *xet, uchar * addr, uint prot)
+NetSetEther(uchar *xet, uchar * addr, uint prot)
 {
        Ethernet_t *et = (Ethernet_t *)xet;
        ushort myvlanid;
 }
 
 void
-NetSetIP(volatile uchar *xip, IPaddr_t dest, int dport, int sport, int len)
+NetSetIP(uchar *xip, IPaddr_t dest, int dport, int sport, int len)
 {
        IP_t *ip = (IP_t *)xip;
 
 
 RarpRequest (void)
 {
        int i;
-       volatile uchar *pkt;
+       uchar *pkt;
        ARP_t * rarp;
 
        printf("RARP broadcast %d\n", ++RarpTry);
 
 TftpSend(void)
 {
        uchar *pkt;
-       volatile uchar *xp;
-       int             len = 0;
-       volatile ushort *s;
+       uchar *xp;
+       int len = 0;
+       ushort *s;
 
 #ifdef CONFIG_MCAST_TFTP
        /* Multicast TFTP.. non-MasterClients do not ACK data. */