| /*********************************** | 
 |  * $Id: m68360_enet.h,v 1.1 2002/03/02 15:01:07 gerg Exp $ | 
 |  *********************************** | 
 |  * | 
 |  *************************************** | 
 |  * Definitions for the ETHERNET controllers | 
 |  *************************************** | 
 |  */ | 
 |  | 
 | #ifndef __ETHER_H | 
 | #define __ETHER_H | 
 |  | 
 | #include "quicc_simple.h" | 
 |  | 
 | /* | 
 |  * transmit BD's | 
 |  */ | 
 | #define T_R     0x8000          /* ready bit */ | 
 | #define E_T_PAD 0x4000          /* short frame padding */ | 
 | #define T_W     0x2000          /* wrap bit */ | 
 | #define T_I     0x1000          /* interrupt on completion */ | 
 | #define T_L     0x0800          /* last in frame */ | 
 | #define T_TC    0x0400          /* transmit CRC (when last) */ | 
 |  | 
 | #define T_DEF   0x0200          /* defer indication */ | 
 | #define T_HB    0x0100          /* heartbeat */ | 
 | #define T_LC    0x0080          /* error: late collision */ | 
 | #define T_RL    0x0040          /* error: retransmission limit */ | 
 | #define T_RC    0x003c          /* retry count */ | 
 | #define T_UN    0x0002          /* error: underrun */ | 
 | #define T_CSL   0x0001          /* carier sense lost */ | 
 | #define T_ERROR (T_HB | T_LC | T_RL | T_UN | T_CSL) | 
 |  | 
 | /* | 
 |  * receive BD's | 
 |  */ | 
 | #define R_E     0x8000          /* buffer empty */ | 
 | #define R_W     0x2000          /* wrap bit */ | 
 | #define R_I     0x1000          /* interrupt on reception */ | 
 | #define R_L     0x0800          /* last BD in frame */ | 
 | #define R_F     0x0400          /* first BD in frame */ | 
 | #define R_M     0x0100          /* received because of promisc. mode */ | 
 |  | 
 | #define R_LG    0x0020          /* frame too long */ | 
 | #define R_NO    0x0010          /* non-octet aligned */ | 
 | #define R_SH    0x0008          /* short frame */ | 
 | #define R_CR    0x0004          /* receive CRC error */ | 
 | #define R_OV    0x0002          /* receive overrun */ | 
 | #define R_CL    0x0001          /* collision */ | 
 | #define ETHER_R_ERROR (R_LG | R_NO | R_SH | R_CR | R_OV | R_CL) | 
 |  | 
 |  | 
 | /* | 
 |  * ethernet interrupts | 
 |  */ | 
 | #define ETHERNET_GRA    0x0080  /* graceful stop complete */ | 
 | #define ETHERNET_TXE    0x0010  /* transmit error         */ | 
 | #define ETHERNET_RXF    0x0008  /* receive frame          */ | 
 | #define ETHERNET_BSY    0x0004  /* busy condition         */ | 
 | #define ETHERNET_TXB    0x0002  /* transmit buffer        */ | 
 | #define ETHERNET_RXB    0x0001  /* receive buffer         */ | 
 |  | 
 | /* | 
 |  * ethernet protocol specific mode register (PSMR) | 
 |  */ | 
 | #define ETHER_HBC       0x8000    /* heartbeat checking      */ | 
 | #define ETHER_FC        0x4000    /* force collision         */ | 
 | #define ETHER_RSH       0x2000    /* receive short frames    */ | 
 | #define ETHER_IAM       0x1000    /* individual address mode */ | 
 | #define ETHER_CRC_32    (0x2<<10) /* Enable CRC              */ | 
 | #define ETHER_PRO       0x0200    /* promiscuous             */ | 
 | #define ETHER_BRO       0x0100    /* broadcast address       */ | 
 | #define ETHER_SBT       0x0080    /* stop backoff timer      */ | 
 | #define ETHER_LPB       0x0040    /* Loop Back Mode          */ | 
 | #define ETHER_SIP       0x0020    /* sample input pins       */ | 
 | #define ETHER_LCW       0x0010    /* late collision window   */ | 
 | #define ETHER_NIB_13    (0x0<<1)  /* # of ignored bits 13    */ | 
 | #define ETHER_NIB_14    (0x1<<1)  /* # of ignored bits 14    */ | 
 | #define ETHER_NIB_15    (0x2<<1)  /* # of ignored bits 15    */ | 
 | #define ETHER_NIB_16    (0x3<<1)  /* # of ignored bits 16    */ | 
 | #define ETHER_NIB_21    (0x4<<1)  /* # of ignored bits 21    */ | 
 | #define ETHER_NIB_22    (0x5<<1)  /* # of ignored bits 22    */ | 
 | #define ETHER_NIB_23    (0x6<<1)  /* # of ignored bits 23    */ | 
 | #define ETHER_NIB_24    (0x7<<1)  /* # of ignored bits 24    */ | 
 |  | 
 | /* | 
 |  * ethernet specific parameters | 
 |  */ | 
 | #define CRC_WORD 4          /* Length in bytes of CRC */                | 
 | #define C_PRES   0xffffffff /* preform 32 bit CRC */ | 
 | #define C_MASK   0xdebb20e3 /* comply with 32 bit CRC */        | 
 | #define CRCEC    0x00000000 | 
 | #define ALEC     0x00000000 | 
 | #define DISFC    0x00000000 | 
 | #define PADS     0x00000000 | 
 | #define RET_LIM  0x000f     /* retry 15 times to send a frame before interrupt */ | 
 | #define ETH_MFLR 0x05ee     /* 1518 max frame size */ | 
 | #define MINFLR   0x0040     /* Minimum frame size 64 */ | 
 | #define MAXD1    0x05ee     /* Max dma count 1518 */ | 
 | #define MAXD2    0x05ee | 
 | #define GADDR1   0x00000000 /* Clear group address */   | 
 | #define GADDR2   0x00000000 | 
 | #define GADDR3   0x00000000     | 
 | #define GADDR4   0x00000000     | 
 | #define P_PER    0x00000000 /*not used */               | 
 | #define IADDR1   0x00000000 /* Individual hash table not used */        | 
 | #define IADDR2   0x00000000 | 
 | #define IADDR3   0x00000000     | 
 | #define IADDR4   0x00000000             | 
 | #define TADDR_H  0x00000000 /* clear this regs */               | 
 | #define TADDR_M  0x00000000             | 
 | #define TADDR_L  0x00000000             | 
 |  | 
 | /*       SCC Parameter Ram */ | 
 | #define RFCR    0x18 /* normal operation */ | 
 | #define TFCR    0x18 /* normal operation */ | 
 | #define E_MRBLR 1518 /* Max ethernet frame length */ | 
 |  | 
 | /* | 
 |  * ethernet specific structure | 
 |  */ | 
 | typedef union { | 
 |         unsigned char b[6]; | 
 |         struct { | 
 |             unsigned short high; | 
 |             unsigned short middl; | 
 |             unsigned short low; | 
 |         } w; | 
 | } ETHER_ADDR; | 
 |  | 
 | typedef struct { | 
 |     int        max_frame_length; | 
 |     int        promisc_mode; | 
 |     int        reject_broadcast; | 
 |     ETHER_ADDR phys_adr; | 
 | } ETHER_SPECIFIC; | 
 |  | 
 | typedef struct { | 
 |     ETHER_ADDR     dst_addr; | 
 |     ETHER_ADDR     src_addr; | 
 |     unsigned short type_or_len; | 
 |     unsigned char  data[1]; | 
 | } ETHER_FRAME; | 
 |  | 
 | #define MAX_DATALEN 1500 | 
 | typedef struct { | 
 |     ETHER_ADDR     dst_addr; | 
 |     ETHER_ADDR     src_addr; | 
 |     unsigned short type_or_len; | 
 |     unsigned char  data[MAX_DATALEN]; | 
 |     unsigned char  fcs[CRC_WORD]; | 
 | } ETHER_MAX_FRAME; | 
 |  | 
 |  | 
 | /* | 
 |  * Internal ethernet function prototypes | 
 |  */ | 
 | void        ether_interrupt(int scc_num); | 
 | /* mleslie: debug */ | 
 | /* static void ethernet_rx_internal(int scc_num); */ | 
 | /* static void ethernet_tx_internal(int scc_num); */ | 
 |  | 
 | /* | 
 |  * User callable routines prototypes (ethernet specific) | 
 |  */ | 
 | void ethernet_init(int                       scc_number, | 
 |                    alloc_routine             *alloc_buffer, | 
 |                    free_routine              *free_buffer, | 
 |                    store_rx_buffer_routine   *store_rx_buffer, | 
 |                    handle_tx_error_routine   *handle_tx_error, | 
 |                    handle_rx_error_routine   *handle_rx_error, | 
 |                    handle_lost_error_routine *handle_lost_error, | 
 |                    ETHER_SPECIFIC            *ether_spec); | 
 | int  ethernet_tx(int scc_number, void *buf, int length); | 
 |  | 
 | #endif | 
 |  |