OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [bootloaders/] [orpmon/] [include/] [net.h] - Diff between revs 140 and 175

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 140 Rev 175
/*
/*
 *      LiMon Monitor (LiMon) - Network.
 *      LiMon Monitor (LiMon) - Network.
 *
 *
 *      Copyright 1994 - 2000 Neil Russell.
 *      Copyright 1994 - 2000 Neil Russell.
 *      (See License)
 *      (See License)
 *
 *
 *
 *
 * History
 * History
 *      9/16/00   bor  adapted to TQM823L/STK8xxL board, RARP/TFTP boot added
 *      9/16/00   bor  adapted to TQM823L/STK8xxL board, RARP/TFTP boot added
 */
 */
 
 
#ifndef __NET_H__
#ifndef __NET_H__
#define __NET_H__
#define __NET_H__
 
 
 
 
// TFTP running checksum defined here... tftp.h not in common include/ path
// TFTP running checksum defined here... tftp.h not in common include/ path
extern unsigned long TFTP_CHKSUM;
extern unsigned long TFTP_CHKSUM;
 
 
/*
/*
 *      The number of receive packet buffers, and the required packet buffer
 *      The number of receive packet buffers, and the required packet buffer
 *      alignment in memory.
 *      alignment in memory.
 *
 *
 */
 */
 
 
#define PKTBUFSRX       4
#define PKTBUFSRX       4
#define PKTALIGN        32
#define PKTALIGN        32
 
 
/****** from cpu_arch.h ************/
/****** from cpu_arch.h ************/
 
 
/* Byte swapping stuff (not needed on PPC). */
/* Byte swapping stuff (not needed on PPC). */
 
 
#define SWAP16(x)       (x)
#define SWAP16(x)       (x)
#define SWAP16c(x)      (x)
#define SWAP16c(x)      (x)
#define SWAP32(x)       (x)
#define SWAP32(x)       (x)
 
 
/****** end from cpu_arch.h **************/
/****** end from cpu_arch.h **************/
 
 
typedef unsigned long           IPaddr_t;
typedef unsigned long           IPaddr_t;
 
 
 
 
 
 
/*
/*
 * The current receive packet handler.  Called with a pointer to the
 * The current receive packet handler.  Called with a pointer to the
 * application packet, and a protocol type (PORT_BOOTPC or PORT_TFTP).
 * application packet, and a protocol type (PORT_BOOTPC or PORT_TFTP).
 * All other packets are dealt with without calling the handler.
 * All other packets are dealt with without calling the handler.
 */
 */
typedef void    rxhand_f(unsigned char *, unsigned, unsigned, unsigned);
typedef void    rxhand_f(unsigned char *, unsigned, unsigned, unsigned);
 
 
/*
/*
 *      A timeout handler.  Called after time interval has expired.
 *      A timeout handler.  Called after time interval has expired.
 */
 */
typedef void    thand_f(void);
typedef void    thand_f(void);
 
 
#ifdef CONFIG_NET_MULTI
#ifdef CONFIG_NET_MULTI
 
 
#define NAMESIZE 16
#define NAMESIZE 16
 
 
enum eth_state_t {
enum eth_state_t {
        ETH_STATE_INIT,
        ETH_STATE_INIT,
        ETH_STATE_PASSIVE,
        ETH_STATE_PASSIVE,
        ETH_STATE_ACTIVE
        ETH_STATE_ACTIVE
};
};
 
 
struct eth_device {
struct eth_device {
        char name[NAMESIZE];
        char name[NAMESIZE];
        unsigned char enetaddr[6];
        unsigned char enetaddr[6];
        int iobase;
        int iobase;
        int state;
        int state;
 
 
        int  (*init) (struct eth_device*, bd_t*);
        int  (*init) (struct eth_device*, bd_t*);
        int  (*send) (struct eth_device*, volatile void* pachet, int length);
        int  (*send) (struct eth_device*, volatile void* pachet, int length);
        int  (*recv) (struct eth_device*);
        int  (*recv) (struct eth_device*);
        void (*halt) (struct eth_device*);
        void (*halt) (struct eth_device*);
 
 
        struct eth_device *next;
        struct eth_device *next;
        void *priv;
        void *priv;
};
};
 
 
extern int eth_initialize(bd_t *bis);           /* Initialize network subsystem */
extern int eth_initialize(bd_t *bis);           /* Initialize network subsystem */
extern int eth_register(struct eth_device* dev);/* Register network device      */
extern int eth_register(struct eth_device* dev);/* Register network device      */
extern void eth_try_another(void);              /* Change the device            */
extern void eth_try_another(void);              /* Change the device            */
#endif
#endif
 
 
/**********************************************************************/
/**********************************************************************/
/*
/*
 *      Protocol headers.
 *      Protocol headers.
 */
 */
 
 
/*
/*
 *      Ethernet header
 *      Ethernet header
 */
 */
typedef struct {
typedef struct {
        unsigned char           et_dest[6];     /* Destination node             */
        unsigned char           et_dest[6];     /* Destination node             */
        unsigned char           et_src[6];      /* Source node                  */
        unsigned char           et_src[6];      /* Source node                  */
        unsigned short          et_protlen;     /* Protocol or length           */
        unsigned short          et_protlen;     /* Protocol or length           */
        unsigned char           et_dsap;        /* 802 DSAP                     */
        unsigned char           et_dsap;        /* 802 DSAP                     */
        unsigned char           et_ssap;        /* 802 SSAP                     */
        unsigned char           et_ssap;        /* 802 SSAP                     */
        unsigned char           et_ctl;         /* 802 control                  */
        unsigned char           et_ctl;         /* 802 control                  */
        unsigned char           et_snap1;       /* SNAP                         */
        unsigned char           et_snap1;       /* SNAP                         */
        unsigned char           et_snap2;
        unsigned char           et_snap2;
        unsigned char           et_snap3;
        unsigned char           et_snap3;
        unsigned short          et_prot;        /* 802 protocol                 */
        unsigned short          et_prot;        /* 802 protocol                 */
} Ethernet_t;
} Ethernet_t;
 
 
#define ETHER_HDR_SIZE  14              /* Ethernet header size         */
#define ETHER_HDR_SIZE  14              /* Ethernet header size         */
#define E802_HDR_SIZE   22              /* 802 ethernet header size     */
#define E802_HDR_SIZE   22              /* 802 ethernet header size     */
#define PROT_IP         0x0800          /* IP protocol                  */
#define PROT_IP         0x0800          /* IP protocol                  */
#define PROT_ARP        0x0806          /* IP ARP protocol              */
#define PROT_ARP        0x0806          /* IP ARP protocol              */
#define PROT_RARP       0x8035          /* IP ARP protocol              */
#define PROT_RARP       0x8035          /* IP ARP protocol              */
 
 
#define IPPROTO_ICMP     1      /* Internet Control Message Protocol    */
#define IPPROTO_ICMP     1      /* Internet Control Message Protocol    */
#define IPPROTO_UDP     17      /* User Datagram Protocol               */
#define IPPROTO_UDP     17      /* User Datagram Protocol               */
 
 
/*
/*
 *      Internet Protocol (IP) header.
 *      Internet Protocol (IP) header.
 */
 */
typedef struct {
typedef struct {
        unsigned char           ip_hl_v;        /* header length and version    */
        unsigned char           ip_hl_v;        /* header length and version    */
        unsigned char           ip_tos;         /* type of service              */
        unsigned char           ip_tos;         /* type of service              */
        unsigned short          ip_len;         /* total length                 */
        unsigned short          ip_len;         /* total length                 */
        unsigned short          ip_id;          /* identification               */
        unsigned short          ip_id;          /* identification               */
        unsigned short          ip_off;         /* fragment offset field        */
        unsigned short          ip_off;         /* fragment offset field        */
        unsigned char           ip_ttl;         /* time to live                 */
        unsigned char           ip_ttl;         /* time to live                 */
        unsigned char           ip_p;           /* protocol                     */
        unsigned char           ip_p;           /* protocol                     */
        unsigned short          ip_sum;         /* checksum                     */
        unsigned short          ip_sum;         /* checksum                     */
        IPaddr_t        ip_src;         /* Source IP address            */
        IPaddr_t        ip_src;         /* Source IP address            */
        IPaddr_t        ip_dst;         /* Destination IP address       */
        IPaddr_t        ip_dst;         /* Destination IP address       */
        unsigned short          udp_src;        /* UDP source port              */
        unsigned short          udp_src;        /* UDP source port              */
        unsigned short          udp_dst;        /* UDP destination port         */
        unsigned short          udp_dst;        /* UDP destination port         */
        unsigned short          udp_len;        /* Length of UDP packet         */
        unsigned short          udp_len;        /* Length of UDP packet         */
        unsigned short          udp_xsum;       /* Checksum                     */
        unsigned short          udp_xsum;       /* Checksum                     */
} IP_t;
} IP_t;
 
 
#define IP_HDR_SIZE_NO_UDP      (sizeof (IP_t) - 8)
#define IP_HDR_SIZE_NO_UDP      (sizeof (IP_t) - 8)
#define IP_HDR_SIZE             (sizeof (IP_t))
#define IP_HDR_SIZE             (sizeof (IP_t))
 
 
 
 
/*
/*
 *      Address Resolution Protocol (ARP) header.
 *      Address Resolution Protocol (ARP) header.
 */
 */
typedef struct
typedef struct
{
{
        unsigned short          ar_hrd;         /* Format of hardware address*/
        unsigned short          ar_hrd;         /* Format of hardware address*/
#   define ARP_ETHER        1                   /* Ethernet  hardware address*/
#   define ARP_ETHER        1                   /* Ethernet  hardware address*/
        unsigned short          ar_pro;         /* Format of protocol address*/
        unsigned short          ar_pro;         /* Format of protocol address*/
        unsigned char           ar_hln;         /* Length of hardware address*/
        unsigned char           ar_hln;         /* Length of hardware address*/
        unsigned char           ar_pln;         /* Length of protocol address*/
        unsigned char           ar_pln;         /* Length of protocol address*/
        unsigned short          ar_op;          /* Operation            */
        unsigned short          ar_op;          /* Operation            */
#   define ARPOP_REQUEST    1           /* Request  to resolve  address */
#   define ARPOP_REQUEST    1           /* Request  to resolve  address */
#   define ARPOP_REPLY      2           /* Response to previous request */
#   define ARPOP_REPLY      2           /* Response to previous request */
 
 
#   define RARPOP_REQUEST   3           /* Request  to resolve  address */
#   define RARPOP_REQUEST   3           /* Request  to resolve  address */
#   define RARPOP_REPLY     4           /* Response to previous request */
#   define RARPOP_REPLY     4           /* Response to previous request */
 
 
        /*
        /*
         * The remaining fields are variable in size, according to
         * The remaining fields are variable in size, according to
         * the sizes above, and are defined as appropriate for
         * the sizes above, and are defined as appropriate for
         * specific hardware/protocol combinations.
         * specific hardware/protocol combinations.
         */
         */
        unsigned char           ar_data[0];
        unsigned char           ar_data[0];
#if 0
#if 0
        unsigned char           ar_sha[];       /* Sender hardware address*/
        unsigned char           ar_sha[];       /* Sender hardware address*/
        unsigned char           ar_spa[];       /* Sender protocol address*/
        unsigned char           ar_spa[];       /* Sender protocol address*/
        unsigned char           ar_tha[];       /* Target hardware address*/
        unsigned char           ar_tha[];       /* Target hardware address*/
        unsigned char           ar_tpa[];       /* Target protocol address*/
        unsigned char           ar_tpa[];       /* Target protocol address*/
#endif /* 0 */
#endif /* 0 */
} ARP_t;
} ARP_t;
 
 
#define ARP_HDR_SIZE    (8+20)          /* Size assuming ethernet       */
#define ARP_HDR_SIZE    (8+20)          /* Size assuming ethernet       */
 
 
/*
/*
 * ICMP stuff (just enough to handle (host) redirect messages)
 * ICMP stuff (just enough to handle (host) redirect messages)
 */
 */
#define ICMP_REDIRECT           5       /* Redirect (change route)      */
#define ICMP_REDIRECT           5       /* Redirect (change route)      */
 
 
/* Codes for REDIRECT. */
/* Codes for REDIRECT. */
#define ICMP_REDIR_NET          0        /* Redirect Net                 */
#define ICMP_REDIR_NET          0        /* Redirect Net                 */
#define ICMP_REDIR_HOST         1       /* Redirect Host                */
#define ICMP_REDIR_HOST         1       /* Redirect Host                */
 
 
typedef struct icmphdr {
typedef struct icmphdr {
        unsigned char           type;
        unsigned char           type;
        unsigned char           code;
        unsigned char           code;
        unsigned short          checksum;
        unsigned short          checksum;
        union {
        union {
                struct {
                struct {
                        unsigned short  id;
                        unsigned short  id;
                        unsigned short  sequence;
                        unsigned short  sequence;
                } echo;
                } echo;
                unsigned long   gateway;
                unsigned long   gateway;
                struct {
                struct {
                        unsigned short  __unused;
                        unsigned short  __unused;
                        unsigned short  mtu;
                        unsigned short  mtu;
                } frag;
                } frag;
        } un;
        } un;
} ICMP_t;
} ICMP_t;
 
 
 
 
 
 
/*
/*
 * Maximum packet size; used to allocate packet storage.
 * Maximum packet size; used to allocate packet storage.
 * TFTP packets can be 524 bytes + IP header + ethernet header.
 * TFTP packets can be 524 bytes + IP header + ethernet header.
 * Lets be conservative, and go for 38 * 16.  (Must also be
 * Lets be conservative, and go for 38 * 16.  (Must also be
 * a multiple of 32 bytes).
 * a multiple of 32 bytes).
 */
 */
/*
/*
 * AS.HARNOIS : Better to set PKTSIZE to maximum size because
 * AS.HARNOIS : Better to set PKTSIZE to maximum size because
 * traffic type is not always controlled
 * traffic type is not always controlled
 * maximum packet size =  1518
 * maximum packet size =  1518
 * maximum packet size and multiple of 32 bytes =  1536
 * maximum packet size and multiple of 32 bytes =  1536
 */
 */
#define PKTSIZE                 1518
#define PKTSIZE                 1518
#define PKTSIZE_ALIGN           1536
#define PKTSIZE_ALIGN           1536
/*#define PKTSIZE               608*/
/*#define PKTSIZE               608*/
 
 
/*
/*
 * Maximum receive ring size; that is, the number of packets
 * Maximum receive ring size; that is, the number of packets
 * we can buffer before overflow happens. Basically, this just
 * we can buffer before overflow happens. Basically, this just
 * needs to be enough to prevent a packet being discarded while
 * needs to be enough to prevent a packet being discarded while
 * we are processing the previous one.
 * we are processing the previous one.
 */
 */
#define RINGSZ          4
#define RINGSZ          4
#define RINGSZ_LOG2     2
#define RINGSZ_LOG2     2
 
 
/**********************************************************************/
/**********************************************************************/
/*
/*
 *      Globals.
 *      Globals.
 */
 */
 
 
/* net.c */
/* net.c */
/** BOOTP EXTENTIONS **/
/** BOOTP EXTENTIONS **/
extern IPaddr_t         NetOurGatewayIP;        /* Our gateway IP addresse      */
extern IPaddr_t         NetOurGatewayIP;        /* Our gateway IP addresse      */
extern IPaddr_t         NetOurSubnetMask;       /* Our subnet mask (0 = unknown)*/
extern IPaddr_t         NetOurSubnetMask;       /* Our subnet mask (0 = unknown)*/
extern IPaddr_t         NetOurDNSIP;     /* Our Domain Name Server (0 = unknown)*/
extern IPaddr_t         NetOurDNSIP;     /* Our Domain Name Server (0 = unknown)*/
extern char             NetOurNISDomain[32];    /* Our NIS domain               */
extern char             NetOurNISDomain[32];    /* Our NIS domain               */
extern char             NetOurHostName[32];     /* Our hostname                 */
extern char             NetOurHostName[32];     /* Our hostname                 */
extern char             NetOurRootPath[64];     /* Our root path                */
extern char             NetOurRootPath[64];     /* Our root path                */
extern unsigned short           NetBootFileSize;        /* Our boot file size in blocks */
extern unsigned short           NetBootFileSize;        /* Our boot file size in blocks */
/** END OF BOOTP EXTENTIONS **/
/** END OF BOOTP EXTENTIONS **/
extern unsigned long            NetBootFileXferSize;    /* size of bootfile in bytes    */
extern unsigned long            NetBootFileXferSize;    /* size of bootfile in bytes    */
extern unsigned char            NetOurEther[6];         /* Our ethernet address         */
extern unsigned char            NetOurEther[6];         /* Our ethernet address         */
extern unsigned char            NetServerEther[6];      /* Boot server enet address     */
extern unsigned char            NetServerEther[6];      /* Boot server enet address     */
extern IPaddr_t         NetOurIP;               /* Our    IP addr (0 = unknown) */
extern IPaddr_t         NetOurIP;               /* Our    IP addr (0 = unknown) */
extern IPaddr_t         NetServerIP;            /* Server IP addr (0 = unknown) */
extern IPaddr_t         NetServerIP;            /* Server IP addr (0 = unknown) */
extern volatile unsigned char * NetTxPacket;            /* THE transmit packet          */
extern volatile unsigned char * NetTxPacket;            /* THE transmit packet          */
extern volatile unsigned char * NetRxPackets[PKTBUFSRX];/* Receive packets              */
extern volatile unsigned char * NetRxPackets[PKTBUFSRX];/* Receive packets              */
extern volatile unsigned char * NetRxPkt;               /* Current receive packet       */
extern volatile unsigned char * NetRxPkt;               /* Current receive packet       */
extern int              NetRxPktLen;            /* Current rx packet length     */
extern int              NetRxPktLen;            /* Current rx packet length     */
extern unsigned         NetIPID;                /* IP ID (counting)             */
extern unsigned         NetIPID;                /* IP ID (counting)             */
extern unsigned char            NetBcastAddr[6];        /* Ethernet boardcast address   */
extern unsigned char            NetBcastAddr[6];        /* Ethernet boardcast address   */
 
 
extern int              NetState;               /* Network loop state           */
extern int              NetState;               /* Network loop state           */
#define NETLOOP_CONTINUE        1
#define NETLOOP_CONTINUE        1
#define NETLOOP_RESTART         2
#define NETLOOP_RESTART         2
#define NETLOOP_SUCCESS         3
#define NETLOOP_SUCCESS         3
#define NETLOOP_FAIL            4
#define NETLOOP_FAIL            4
 
 
 
 
typedef enum { BOOTP, RARP, ARP, TFTP, DHCP } proto_t;
typedef enum { BOOTP, RARP, ARP, TFTP, DHCP } proto_t;
 
 
/* from net/net.c */
/* from net/net.c */
extern char     BootFile[128];                  /* Boot File name               */
extern char     BootFile[128];                  /* Boot File name               */
 
 
/* Initialize the network adapter */
/* Initialize the network adapter */
extern int      NetLoop(proto_t protocol);
extern int      NetLoop(proto_t protocol);
 
 
/* Shutdown adapters and cleanup */
/* Shutdown adapters and cleanup */
extern void     NetStop(void);
extern void     NetStop(void);
 
 
/* Load failed.  Start again. */
/* Load failed.  Start again. */
extern void     NetStartAgain(void);
extern void     NetStartAgain(void);
 
 
/* Copy ethernet address */
/* Copy ethernet address */
extern void     NetCopyEther(volatile unsigned char *, unsigned char *);
extern void     NetCopyEther(volatile unsigned char *, unsigned char *);
 
 
/* Set ethernet header */
/* Set ethernet header */
extern void     NetSetEther(volatile unsigned char *, unsigned char *, unsigned long);
extern void     NetSetEther(volatile unsigned char *, unsigned char *, unsigned long);
 
 
/* Set IP header */
/* Set IP header */
extern void     NetSetIP(volatile unsigned char *, IPaddr_t, int, int, int);
extern void     NetSetIP(volatile unsigned char *, IPaddr_t, int, int, int);
 
 
/* Checksum */
/* Checksum */
extern int      NetCksumOk(unsigned char *, int);       /* Return true if cksum OK      */
extern int      NetCksumOk(unsigned char *, int);       /* Return true if cksum OK      */
extern unsigned NetCksum(unsigned char *, int);         /* Calculate the checksum       */
extern unsigned NetCksum(unsigned char *, int);         /* Calculate the checksum       */
 
 
/* Set callbacks */
/* Set callbacks */
extern void     NetSetHandler(rxhand_f *);      /* Set RX packet handler        */
extern void     NetSetHandler(rxhand_f *);      /* Set RX packet handler        */
extern void     NetSetTimeout(int, thand_f *);  /* Set timeout handler          */
extern void     NetSetTimeout(int, thand_f *);  /* Set timeout handler          */
 
 
/* Transmit "NetTxPacket" */
/* Transmit "NetTxPacket" */
extern void     NetSendPacket(volatile unsigned char *, int);
extern void     NetSendPacket(volatile unsigned char *, int);
 
 
/* Processes a received packet */
/* Processes a received packet */
extern void     NetReceive(volatile unsigned char *, int);
extern void     NetReceive(volatile unsigned char *, int);
 
 
/* Print an IP address on the console */
/* Print an IP address on the console */
extern void     print_IPaddr (IPaddr_t);
extern void     print_IPaddr (IPaddr_t);
 
 
/* Convert an IP address to a string */
/* Convert an IP address to a string */
extern void     ip_to_string (IPaddr_t x, char *s);
extern void     ip_to_string (IPaddr_t x, char *s);
 
 
/* read an IP address from a environment variable */
/* read an IP address from a environment variable */
extern IPaddr_t getenv_IPaddr (char *);
extern IPaddr_t getenv_IPaddr (char *);
 
 
/* copy a filename (allow for "..." notation, limit length) */
/* copy a filename (allow for "..." notation, limit length) */
extern void     copy_filename (unsigned char *dst, unsigned char *src, int size);
extern void     copy_filename (unsigned char *dst, unsigned char *src, int size);
 
 
/* converts IP from unsigned long to string */
/* converts IP from unsigned long to string */
extern char         *inet_ntoa(unsigned long);
extern char         *inet_ntoa(unsigned long);
extern unsigned long inet_aton(const char *);
extern unsigned long inet_aton(const char *);
 
 
/**********************************************************************/
/**********************************************************************/
 
 
#endif /* __NET_H__ */
#endif /* __NET_H__ */
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.