]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - include/net.h
ATMEL/PIO: Enable new feature of PIO on Atmel device
[karo-tx-uboot.git] / include / net.h
index ff66073e6e6360cfbd3d29629ebbdd65882a982b..a092f291bbcd643b8eda122b10b0509d1fd4b719 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
@@ -179,11 +183,11 @@ struct e802_hdr {
        ushort          et_prot;        /* 802 protocol                 */
 };
 
-/* 802 ethernet header size */
+/* 802 + SNAP + ethernet header size */
 #define E802_HDR_SIZE  (sizeof(struct e802_hdr))
 
 /*
- *     Ethernet header
+ *     Virtual LAN Ethernet header
  */
 struct vlan_ethernet_hdr {
        uchar           vet_dest[6];    /* Destination node             */
@@ -259,7 +263,9 @@ struct arp_hdr {
 #   define ARP_ETHER       1           /* Ethernet  hardware address   */
        ushort          ar_pro;         /* Format of protocol address   */
        uchar           ar_hln;         /* Length of hardware address   */
+#   define ARP_HLEN    6
        uchar           ar_pln;         /* Length of protocol address   */
+#   define ARP_PLEN    4
        ushort          ar_op;          /* Operation                    */
 #   define ARPOP_REQUEST    1          /* Request  to resolve  address */
 #   define ARPOP_REPLY     2           /* Response to previous request */
@@ -273,6 +279,10 @@ struct arp_hdr {
         * specific hardware/protocol combinations.
         */
        uchar           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      */
@@ -385,17 +395,11 @@ extern uchar              NetEtherNullAddr[6];
 extern ushort          NetOurVLAN;             /* Our VLAN */
 extern ushort          NetOurNativeVLAN;       /* Our Native VLAN */
 
-extern int             NetState;               /* Network loop state */
-#define NETLOOP_CONTINUE       1
-#define NETLOOP_RESTART                2
-#define NETLOOP_SUCCESS                3
-#define NETLOOP_FAIL           4
-
 extern int             NetRestartWrap;         /* Tried all network devices */
 
 enum proto_t {
        BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
-       TFTPSRV, TFTPPUT
+       TFTPSRV, TFTPPUT, LINKLOCAL
 };
 
 /* from net/net.c */
@@ -436,6 +440,7 @@ extern IPaddr_t Mcast_addr;
 #endif
 
 /* Initialize the network adapter */
+extern void net_init(void);
 extern int NetLoop(enum proto_t);
 
 /* Shutdown adapters and cleanup */
@@ -449,25 +454,49 @@ extern int        NetEthHdrSize(void);
 
 /* Set ethernet header; returns the size of the header */
 extern int NetSetEther(uchar *, uchar *, uint);
+extern int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot);
 
 /* Set IP header */
-extern void NetSetIP(uchar *, IPaddr_t, int, int, int);
+extern void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source);
+extern void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport,
+                               int sport, int len);
 
 /* Checksum */
 extern int     NetCksumOk(uchar *, int);       /* Return true if cksum OK */
 extern uint    NetCksum(uchar *, int);         /* Calculate the checksum */
 
 /* Callbacks */
-extern rxhand_f *NetGetHandler(void);          /* Get RX packet handler */
-extern void    NetSetHandler(rxhand_f *);      /* Set RX packet handler */
+extern rxhand_f *net_get_udp_handler(void);    /* Get UDP RX packet handler */
+extern void net_set_udp_handler(rxhand_f *);   /* Set UDP RX packet handler */
+extern rxhand_f *net_get_arp_handler(void);    /* Get ARP RX packet handler */
+extern void net_set_arp_handler(rxhand_f *);   /* Set ARP RX packet handler */
 extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
 extern void    NetSetTimeout(ulong, thand_f *);/* Set timeout handler */
 
-/* Transmit "NetTxPacket" */
-extern void NetSendPacket(uchar *, int);
+/* Network loop state */
+enum net_loop_state {
+       NETLOOP_CONTINUE,
+       NETLOOP_RESTART,
+       NETLOOP_SUCCESS,
+       NETLOOP_FAIL
+};
+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;
+}
+
+/* Transmit a packet */
+static inline void NetSendPacket(uchar *pkt, int len)
+{
+       (void) eth_send(pkt, len);
+}
 
 /*
- * Transmit UDP packet, performing ARP request if needed
+ * Transmit "NetTxPacket" as UDP packet, performing ARP request if needed
+ *  (ether will be populated)
  *
  * @param ether Raw packet buffer
  * @param dest IP address to send the datagram to
@@ -475,7 +504,7 @@ extern void NetSendPacket(uchar *, int);
  * @param sport Source UDP port
  * @param payload_len Length of data after the UDP header
  */
-extern int     NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport,
+extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport,
                        int sport, int payload_len);
 
 /* Processes a received packet */