Merge branch 'master' of git://git.denx.de/u-boot-cfi-flash
[oweals/u-boot.git] / include / net.h
index 603452ab3281ec9adb54652c11c3755a69ed2faf..bbe0d4b5a2dfe4b001f00b3b8e62d86923372ca1 100644 (file)
 #define CONFIG_NET_MULTI
 #if (CONFIG_ETHER_INDEX == 1)
 #define        CONFIG_ETHER_ON_FCC1
-# define CFG_CMXFCR_MASK1      CFG_CMXFCR_MASK
-# define CFG_CMXFCR_VALUE1     CFG_CMXFCR_VALUE
+# define CONFIG_SYS_CMXFCR_MASK1       CONFIG_SYS_CMXFCR_MASK
+# define CONFIG_SYS_CMXFCR_VALUE1      CONFIG_SYS_CMXFCR_VALUE
 #elif (CONFIG_ETHER_INDEX == 2)
 #define        CONFIG_ETHER_ON_FCC2
-# define CFG_CMXFCR_MASK2      CFG_CMXFCR_MASK
-# define CFG_CMXFCR_VALUE2     CFG_CMXFCR_VALUE
+# define CONFIG_SYS_CMXFCR_MASK2       CONFIG_SYS_CMXFCR_MASK
+# define CONFIG_SYS_CMXFCR_VALUE2      CONFIG_SYS_CMXFCR_VALUE
 #elif (CONFIG_ETHER_INDEX == 3)
 #define        CONFIG_ETHER_ON_FCC3
-# define CFG_CMXFCR_MASK3      CFG_CMXFCR_MASK
-# define CFG_CMXFCR_VALUE3     CFG_CMXFCR_VALUE
+# define CONFIG_SYS_CMXFCR_MASK3       CONFIG_SYS_CMXFCR_MASK
+# define CONFIG_SYS_CMXFCR_VALUE3      CONFIG_SYS_CMXFCR_VALUE
 #endif /* CONFIG_ETHER_INDEX */
 #endif /* CONFIG_ETHER_ON_FCC */
 #endif /* !CONFIG_NET_MULTI && CONFIG_8260 */
@@ -61,8 +61,8 @@
  *
  */
 
-#ifdef CFG_RX_ETH_BUFFER
-# define PKTBUFSRX     CFG_RX_ETH_BUFFER
+#ifdef CONFIG_SYS_RX_ETH_BUFFER
+# define PKTBUFSRX     CONFIG_SYS_RX_ETH_BUFFER
 #else
 # define PKTBUFSRX     4
 #endif
@@ -122,6 +122,9 @@ extern void eth_set_enetaddr(int num, char* a);     /* Set new MAC address          */
 
 extern int eth_init(bd_t *bis);                        /* Initialize the device        */
 extern int eth_send(volatile void *packet, int length);           /* Send a packet     */
+#ifdef CONFIG_API
+extern int eth_receive(volatile void *packet, int length); /* Receive a packet */
+#endif
 extern int eth_rx(void);                       /* Check for received packets   */
 extern void eth_halt(void);                    /* stop SCC                     */
 extern char *eth_get_name(void);               /* get name of current device   */
@@ -197,6 +200,12 @@ typedef struct {
        ushort          udp_xsum;       /* Checksum                     */
 } IP_t;
 
+#define IP_OFFS                0x1fff /* ip offset *= 8 */
+#define IP_FLAGS       0xe000 /* first 3 bits */
+#define IP_FLAGS_RES   0x8000 /* reserved */
+#define IP_FLAGS_DFRAG 0x4000 /* don't fragments */
+#define IP_FLAGS_MFRAG 0x2000 /* more fragments */
+
 #define IP_HDR_SIZE_NO_UDP     (sizeof (IP_t) - 8)
 #define IP_HDR_SIZE            (sizeof (IP_t))
 
@@ -237,7 +246,7 @@ typedef struct
 /*
  * ICMP stuff (just enough to handle (host) redirect messages)
  */
-#define ICMP_ECHO_REPLY                0       /* Echo reply                   */
+#define ICMP_ECHO_REPLY                0       /* Echo reply                   */
 #define ICMP_REDIRECT          5       /* Redirect (change route)      */
 #define ICMP_ECHO_REQUEST      8       /* Echo request                 */
 
@@ -324,12 +333,12 @@ extern unsigned           NetIPID;                /* IP ID (counting)             */
 extern uchar           NetBcastAddr[6];        /* Ethernet boardcast address   */
 extern uchar           NetEtherNullAddr[6];
 
-#define VLAN_NONE      4095                    /* untagged                     */
-#define VLAN_IDMASK    0x0fff                  /* mask of valid vlan id        */
-extern ushort          NetOurVLAN;             /* Our VLAN                     */
-extern ushort          NetOurNativeVLAN;       /* Our Native VLAN              */
+#define VLAN_NONE      4095                    /* untagged                     */
+#define VLAN_IDMASK    0x0fff                  /* mask of valid vlan id        */
+extern ushort          NetOurVLAN;             /* Our VLAN                     */
+extern ushort          NetOurNativeVLAN;       /* Our Native VLAN              */
 
-extern uchar           NetCDPAddr[6];          /* Ethernet CDP address         */
+extern uchar           NetCDPAddr[6];          /* Ethernet CDP address         */
 extern ushort          CDPNativeVLAN;          /* CDP returned native VLAN     */
 extern ushort          CDPApplianceVLAN;       /* CDP returned appliance VLAN  */
 
@@ -349,7 +358,7 @@ typedef enum { BOOTP, RARP, ARP, TFTP, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP
 extern char    BootFile[128];                  /* Boot File name               */
 
 #if defined(CONFIG_CMD_PING)
-extern IPaddr_t        NetPingIP;                      /* the ip address to ping               */
+extern IPaddr_t        NetPingIP;                      /* the ip address to ping               */
 #endif
 
 #if defined(CONFIG_CMD_CDP)
@@ -359,7 +368,7 @@ extern ushort CDPApplianceVLAN;
 #endif
 
 #if defined(CONFIG_CMD_SNTP)
-extern IPaddr_t        NetNtpServerIP;                 /* the ip address to NTP        */
+extern IPaddr_t        NetNtpServerIP;                 /* the ip address to NTP        */
 extern int NetTimeOffset;                      /* offset time from UTC         */
 #endif
 
@@ -373,7 +382,7 @@ extern void NetStop(void);
 extern void    NetStartAgain(void);
 
 /* Get size of the ethernet header when we send */
-extern int     NetEthHdrSize(void);
+extern int     NetEthHdrSize(void);
 
 /* Set ethernet header; returns the size of the header */
 extern int     NetSetEther(volatile uchar *, uchar *, uint);
@@ -409,10 +418,10 @@ extern void       print_IPaddr (IPaddr_t);
  * footprint in our tests.
  */
 /* return IP *in network byteorder* */
-static inline IPaddr_t NetReadIP(void *from)
+static inline IPaddr_t NetReadIP(volatile void *from)
 {
        IPaddr_t ip;
-       memcpy((void*)&ip, from, sizeof(ip));
+       memcpy((void*)&ip, (void*)from, sizeof(ip));
        return ip;
 }
 
@@ -431,9 +440,9 @@ static inline void NetWriteIP(void *to, IPaddr_t ip)
 }
 
 /* copy IP */
-static inline void NetCopyIP(void *to, void *from)
+static inline void NetCopyIP(volatile void *to, void *from)
 {
-       memcpy(to, from, sizeof(IPaddr_t));
+       memcpy((void*)to, from, sizeof(IPaddr_t));
 }
 
 /* copy ulong */
@@ -465,6 +474,22 @@ static inline int is_multicast_ether_addr(const u8 *addr)
        return (0x01 & addr[0]);
 }
 
+/**
+ * is_valid_ether_addr - Determine if the given Ethernet address is valid
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
+ * a multicast address, and is not FF:FF:FF:FF:FF:FF.
+ *
+ * Return true if the address is valid.
+ */
+static inline int is_valid_ether_addr(const u8 * addr)
+{
+       /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
+        * explicitly check for it here. */
+       return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
+}
+
 /* Convert an IP address to a string */
 extern void    ip_to_string (IPaddr_t x, char *s);