]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - include/net.h
tegra: allow build to succeed with SPL disabled
[karo-tx-uboot.git] / include / net.h
index a902a64752ae56635d2174e86470cefbf1ec8b4f..0802fad8761364d97f04a799e91d01ca4cd2eb06 100644 (file)
 #include <asm/cache.h>
 #include <asm/byteorder.h>     /* for nton* / ntoh* stuff */
 
+#define DEBUG_LL_STATE 0       /* Link local state machine changes */
+#define DEBUG_DEV_PKT 0                /* Packets or info directed to the device */
+#define DEBUG_NET_PKT 0                /* Packets on info on the network at large */
+#define DEBUG_INT_STATE 0      /* Internal network state changes */
 
 /*
  *     The number of receive packet buffers, and the required packet buffer
@@ -35,7 +39,7 @@
 #define PKTALIGN       ARCH_DMA_MINALIGN
 
 /* IPv4 addresses are always 32 bits in size */
-typedef u32            IPaddr_t;
+typedef __be32         IPaddr_t;
 
 
 /**
@@ -85,7 +89,7 @@ struct eth_device {
        int  (*recv) (struct eth_device *);
        void (*halt) (struct eth_device *);
 #ifdef CONFIG_MCAST_TFTP
-       int (*mcast) (struct eth_device *, u32 ip, u8 set);
+       int (*mcast) (struct eth_device *, const u8 *enetaddr, u8 set);
 #endif
        int  (*write_hwaddr) (struct eth_device *);
        struct eth_device *next;
@@ -98,7 +102,15 @@ extern int eth_register(struct eth_device* dev);/* Register network device */
 extern int eth_unregister(struct eth_device *dev);/* Remove network device */
 extern void eth_try_another(int first_restart);        /* Change the device */
 extern void eth_set_current(void);             /* set nterface to ethcur var */
-extern struct eth_device *eth_get_dev(void);   /* get the current device MAC */
+
+/* get the current device MAC */
+extern struct eth_device *eth_current;
+
+static inline __attribute__((always_inline))
+struct eth_device *eth_get_dev(void)
+{
+       return eth_current;
+}
 extern struct eth_device *eth_get_dev_by_name(const char *devname);
 extern struct eth_device *eth_get_dev_by_index(int index); /* get dev @ index */
 extern int eth_get_dev_index(void);            /* get the device index */
@@ -118,6 +130,23 @@ extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
 extern int eth_getenv_enetaddr_by_index(const char *base_name, int index,
                                        uchar *enetaddr);
 
+#ifdef CONFIG_RANDOM_MACADDR
+/*
+ * The u-boot policy does not allow hardcoded ethernet addresses. Under the
+ * following circumstances a random generated address is allowed:
+ *  - in emergency cases, where you need a working network connection to set
+ *    the ethernet address.
+ *    Eg. you want a rescue boot and don't have a serial port to access the
+ *    CLI to set environment variables.
+ *
+ * In these cases, we generate a random locally administered ethernet address.
+ *
+ * Args:
+ *  enetaddr - returns 6 byte hardware address
+ */
+extern void eth_random_enetaddr(uchar *enetaddr);
+#endif
+
 extern int usb_eth_initialize(bd_t *bi);
 extern int eth_init(bd_t *bis);                        /* Initialize the device */
 extern int eth_send(void *packet, int length);    /* Send a packet */
@@ -130,6 +159,19 @@ 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 */
 
+/* Set active state */
+static inline __attribute__((always_inline)) int eth_init_state_only(bd_t *bis)
+{
+       eth_get_dev()->state = ETH_STATE_ACTIVE;
+
+       return 0;
+}
+/* Set passive state */
+static inline __attribute__((always_inline)) void eth_halt_state_only(void)
+{
+       eth_get_dev()->state = ETH_STATE_PASSIVE;
+}
+
 /*
  * Set the hardware address for an ethernet interface based on 'eth%daddr'
  * environment variable (or just 'ethaddr' if eth_number is 0).
@@ -315,7 +357,7 @@ struct icmp_hdr {
                } echo;
                ulong   gateway;
                struct {
-                       ushort  __unused;
+                       ushort  unused;
                        ushort  mtu;
                } frag;
                uchar data[0];
@@ -476,10 +518,11 @@ enum net_loop_state {
        NETLOOP_SUCCESS,
        NETLOOP_FAIL
 };
+extern enum net_loop_state net_state;
+
 static inline void net_set_state(enum net_loop_state state)
 {
-       extern enum net_loop_state net_state;
-
+       debug_cond(DEBUG_INT_STATE, "--- NetState set to %d\n", state);
        net_state = state;
 }
 
@@ -507,8 +550,29 @@ extern void NetReceive(uchar *, int);
 
 #ifdef CONFIG_NETCONSOLE
 void NcStart(void);
-int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len);
+int nc_input_packet(uchar *pkt, IPaddr_t src_ip, unsigned dest_port,
+       unsigned src_port, unsigned len);
+#endif
+
+static inline __attribute__((always_inline)) int eth_is_on_demand_init(void)
+{
+#ifdef CONFIG_NETCONSOLE
+       extern enum proto_t net_loop_last_protocol;
+
+       return net_loop_last_protocol != NETCONS;
+#else
+       return 1;
 #endif
+}
+
+static inline void eth_set_last_protocol(int protocol)
+{
+#ifdef CONFIG_NETCONSOLE
+       extern enum proto_t net_loop_last_protocol;
+
+       net_loop_last_protocol = protocol;
+#endif
+}
 
 /*
  * Check if autoload is enabled. If so, use either NFS or TFTP to download
@@ -631,6 +695,9 @@ extern void copy_filename(char *dst, const char *src, int size);
 /* get a random source port */
 extern unsigned int random_port(void);
 
+/* Update U-Boot over TFTP */
+extern int update_tftp(ulong addr);
+
 /**********************************************************************/
 
 #endif /* __NET_H__ */