]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - include/net.h
include/net.h: add max_speed member in struct eth_pdata
[people/ms/u-boot.git] / include / net.h
index 16fa117586a23a2b02764d1b69ec2e87577e9aa2..7dbba09d499ec1f0f9506ec5edfff91b33e10441 100644 (file)
@@ -85,10 +85,22 @@ enum eth_state_t {
  *
  * @iobase: The base address of the hardware registers
  * @enetaddr: The Ethernet MAC address that is loaded from EEPROM or env
+ * @phy_interface: PHY interface to use - see PHY_INTERFACE_MODE_...
+ * @max_speed: Maximum speed of Ethernet connection supported by MAC
  */
 struct eth_pdata {
        phys_addr_t iobase;
        unsigned char enetaddr[6];
+       int phy_interface;
+       int max_speed;
+};
+
+enum eth_recv_flags {
+       /*
+        * Check hardware device for new packets (otherwise only return those
+        * which are already in the memory buffer ready to process)
+        */
+       ETH_RECV_CHECK_DEVICE           = 1 << 0,
 };
 
 /**
@@ -109,7 +121,9 @@ struct eth_pdata {
  * mcast: Join or leave a multicast group (for TFTP) - optional
  * write_hwaddr: Write a MAC address to the hardware (used to pass it to Linux
  *              on some platforms like ARM). This function expects the
- *              eth_pdata::enetaddr field to be populated - optional
+ *              eth_pdata::enetaddr field to be populated. The method can
+ *              return -ENOSYS to indicate that this is not implemented for
+                this hardware - optional.
  * read_rom_hwaddr: Some devices have a backup of the MAC address stored in a
  *                 ROM on the board. This is how the driver should expose it
  *                 to the network stack. This function should fill in the
@@ -118,7 +132,7 @@ struct eth_pdata {
 struct eth_ops {
        int (*start)(struct udevice *dev);
        int (*send)(struct udevice *dev, void *packet, int length);
-       int (*recv)(struct udevice *dev, uchar **packetp);
+       int (*recv)(struct udevice *dev, int flags, uchar **packetp);
        int (*free_pkt)(struct udevice *dev, uchar *packet, int length);
        void (*stop)(struct udevice *dev);
 #ifdef CONFIG_MCAST_TFTP
@@ -137,7 +151,9 @@ struct udevice *eth_get_dev(void); /* get the current device */
  */
 struct udevice *eth_get_dev_by_name(const char *devname);
 unsigned char *eth_get_ethaddr(void); /* get the current device MAC */
+
 /* Used only when NetConsole is enabled */
+int eth_is_active(struct udevice *dev); /* Test device for active state */
 int eth_init_state_only(void); /* Set active state */
 void eth_halt_state_only(void); /* Set passive state */
 #endif
@@ -183,6 +199,8 @@ static inline unsigned char *eth_get_ethaddr(void)
        return NULL;
 }
 
+/* Used only when NetConsole is enabled */
+int eth_is_active(struct eth_device *dev); /* Test device for active state */
 /* Set active state */
 static inline __attribute__((always_inline)) int eth_init_state_only(void)
 {
@@ -217,8 +235,8 @@ void eth_set_current(void);         /* set nterface to ethcur var */
 
 int eth_get_dev_index(void);           /* get the device index */
 void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
-int eth_getenv_enetaddr(char *name, uchar *enetaddr);
-int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
+int eth_getenv_enetaddr(const char *name, uchar *enetaddr);
+int eth_setenv_enetaddr(const char *name, const uchar *enetaddr);
 
 /*
  * Get the hardware address for an ethernet interface .
@@ -259,9 +277,9 @@ u32 ether_crc(size_t len, unsigned char const *p);
  */
 
 struct ethernet_hdr {
-       uchar           et_dest[6];     /* Destination node             */
-       uchar           et_src[6];      /* Source node                  */
-       ushort          et_protlen;     /* Protocol or length           */
+       u8              et_dest[6];     /* Destination node             */
+       u8              et_src[6];      /* Source node                  */
+       u16             et_protlen;     /* Protocol or length           */
 };
 
 /* Ethernet header size */
@@ -270,16 +288,16 @@ struct ethernet_hdr {
 #define ETH_FCS_LEN    4               /* Octets in the FCS            */
 
 struct e802_hdr {
-       uchar           et_dest[6];     /* Destination node             */
-       uchar           et_src[6];      /* Source node                  */
-       ushort          et_protlen;     /* Protocol or length           */
-       uchar           et_dsap;        /* 802 DSAP                     */
-       uchar           et_ssap;        /* 802 SSAP                     */
-       uchar           et_ctl;         /* 802 control                  */
-       uchar           et_snap1;       /* SNAP                         */
-       uchar           et_snap2;
-       uchar           et_snap3;
-       ushort          et_prot;        /* 802 protocol                 */
+       u8              et_dest[6];     /* Destination node             */
+       u8              et_src[6];      /* Source node                  */
+       u16             et_protlen;     /* Protocol or length           */
+       u8              et_dsap;        /* 802 DSAP                     */
+       u8              et_ssap;        /* 802 SSAP                     */
+       u8              et_ctl;         /* 802 control                  */
+       u8              et_snap1;       /* SNAP                         */
+       u8              et_snap2;
+       u8              et_snap3;
+       u16             et_prot;        /* 802 protocol                 */
 };
 
 /* 802 + SNAP + ethernet header size */
@@ -289,11 +307,11 @@ struct e802_hdr {
  *     Virtual LAN Ethernet header
  */
 struct vlan_ethernet_hdr {
-       uchar           vet_dest[6];    /* Destination node             */
-       uchar           vet_src[6];     /* Source node                  */
-       ushort          vet_vlan_type;  /* PROT_VLAN                    */
-       ushort          vet_tag;        /* TAG of VLAN                  */
-       ushort          vet_type;       /* protocol type                */
+       u8              vet_dest[6];    /* Destination node             */
+       u8              vet_src[6];     /* Source node                  */
+       u16             vet_vlan_type;  /* PROT_VLAN                    */
+       u16             vet_tag;        /* TAG of VLAN                  */
+       u16             vet_type;       /* protocol type                */
 };
 
 /* VLAN Ethernet header size */
@@ -311,14 +329,14 @@ struct vlan_ethernet_hdr {
  *     Internet Protocol (IP) header.
  */
 struct ip_hdr {
-       uchar           ip_hl_v;        /* header length and version    */
-       uchar           ip_tos;         /* type of service              */
-       ushort          ip_len;         /* total length                 */
-       ushort          ip_id;          /* identification               */
-       ushort          ip_off;         /* fragment offset field        */
-       uchar           ip_ttl;         /* time to live                 */
-       uchar           ip_p;           /* protocol                     */
-       ushort          ip_sum;         /* checksum                     */
+       u8              ip_hl_v;        /* header length and version    */
+       u8              ip_tos;         /* type of service              */
+       u16             ip_len;         /* total length                 */
+       u16             ip_id;          /* identification               */
+       u16             ip_off;         /* fragment offset field        */
+       u8              ip_ttl;         /* time to live                 */
+       u8              ip_p;           /* protocol                     */
+       u16             ip_sum;         /* checksum                     */
        struct in_addr  ip_src;         /* Source IP address            */
        struct in_addr  ip_dst;         /* Destination IP address       */
 };
@@ -335,20 +353,20 @@ struct ip_hdr {
  *     Internet Protocol (IP) + UDP header.
  */
 struct ip_udp_hdr {
-       uchar           ip_hl_v;        /* header length and version    */
-       uchar           ip_tos;         /* type of service              */
-       ushort          ip_len;         /* total length                 */
-       ushort          ip_id;          /* identification               */
-       ushort          ip_off;         /* fragment offset field        */
-       uchar           ip_ttl;         /* time to live                 */
-       uchar           ip_p;           /* protocol                     */
-       ushort          ip_sum;         /* checksum                     */
+       u8              ip_hl_v;        /* header length and version    */
+       u8              ip_tos;         /* type of service              */
+       u16             ip_len;         /* total length                 */
+       u16             ip_id;          /* identification               */
+       u16             ip_off;         /* fragment offset field        */
+       u8              ip_ttl;         /* time to live                 */
+       u8              ip_p;           /* protocol                     */
+       u16             ip_sum;         /* checksum                     */
        struct in_addr  ip_src;         /* Source IP address            */
        struct in_addr  ip_dst;         /* Destination IP address       */
-       ushort          udp_src;        /* UDP source port              */
-       ushort          udp_dst;        /* UDP destination port         */
-       ushort          udp_len;        /* Length of UDP packet         */
-       ushort          udp_xsum;       /* Checksum                     */
+       u16             udp_src;        /* UDP source port              */
+       u16             udp_dst;        /* UDP destination port         */
+       u16             udp_len;        /* Length of UDP packet         */
+       u16             udp_xsum;       /* Checksum                     */
 };
 
 #define IP_UDP_HDR_SIZE                (sizeof(struct ip_udp_hdr))
@@ -358,14 +376,14 @@ struct ip_udp_hdr {
  *     Address Resolution Protocol (ARP) header.
  */
 struct arp_hdr {
-       ushort          ar_hrd;         /* Format of hardware address   */
+       u16             ar_hrd;         /* Format of hardware address   */
 #   define ARP_ETHER       1           /* Ethernet  hardware address   */
-       ushort          ar_pro;         /* Format of protocol address   */
-       uchar           ar_hln;         /* Length of hardware address   */
+       u16             ar_pro;         /* Format of protocol address   */
+       u8              ar_hln;         /* Length of hardware address   */
 #   define ARP_HLEN    6
-       uchar           ar_pln;         /* Length of protocol address   */
+       u8              ar_pln;         /* Length of protocol address   */
 #   define ARP_PLEN    4
-       ushort          ar_op;          /* Operation                    */
+       u16             ar_op;          /* Operation                    */
 #   define ARPOP_REQUEST    1          /* Request  to resolve  address */
 #   define ARPOP_REPLY     2           /* Response to previous request */
 
@@ -377,16 +395,16 @@ struct arp_hdr {
         * the sizes above, and are defined as appropriate for
         * specific hardware/protocol combinations.
         */
-       uchar           ar_data[0];
+       u8              ar_data[0];
 #define ar_sha         ar_data[0]
 #define ar_spa         ar_data[ARP_HLEN]
 #define ar_tha         ar_data[ARP_HLEN + ARP_PLEN]
 #define ar_tpa         ar_data[ARP_HLEN + ARP_PLEN + ARP_HLEN]
 #if 0
-       uchar           ar_sha[];       /* Sender hardware address      */
-       uchar           ar_spa[];       /* Sender protocol address      */
-       uchar           ar_tha[];       /* Target hardware address      */
-       uchar           ar_tpa[];       /* Target protocol address      */
+       u8              ar_sha[];       /* Sender hardware address      */
+       u8              ar_spa[];       /* Sender protocol address      */
+       u8              ar_tha[];       /* Target hardware address      */
+       u8              ar_tpa[];       /* Target protocol address      */
 #endif /* 0 */
 };
 
@@ -408,20 +426,20 @@ struct arp_hdr {
 #define ICMP_NOT_REACH_PORT    3       /* Port unreachable             */
 
 struct icmp_hdr {
-       uchar           type;
-       uchar           code;
-       ushort          checksum;
+       u8              type;
+       u8              code;
+       u16             checksum;
        union {
                struct {
-                       ushort  id;
-                       ushort  sequence;
+                       u16     id;
+                       u16     sequence;
                } echo;
                u32     gateway;
                struct {
-                       ushort  unused;
-                       ushort  mtu;
+                       u16     unused;
+                       u16     mtu;
                } frag;
-               uchar data[0];
+               u8 data[0];
        } un;
 };
 
@@ -500,7 +518,7 @@ enum proto_t {
        TFTPSRV, TFTPPUT, LINKLOCAL
 };
 
-extern char    net_boot_file_name[128];/* Boot File name */
+extern char    net_boot_file_name[1024];/* Boot File name */
 /* The actual transferred size of the bootfile (in bytes) */
 extern u32     net_boot_file_size;
 /* Boot file size in blocks as reported by the DHCP server */
@@ -801,8 +819,18 @@ void copy_filename(char *dst, const char *src, int size);
 /* get a random source port */
 unsigned int random_port(void);
 
-/* Update U-Boot over TFTP */
-int update_tftp(ulong addr);
+/**
+ * update_tftp - Update firmware over TFTP (via DFU)
+ *
+ * This function updates board's firmware via TFTP
+ *
+ * @param addr - memory address where data is stored
+ * @param interface - the DFU medium name - e.g. "mmc"
+ * @param devstring - the DFU medium number - e.g. "1"
+ *
+ * @return - 0 on success, other value on failure
+ */
+int update_tftp(ulong addr, char *interface, char *devstring);
 
 /**********************************************************************/