2005-04-16 15:20:36 -07:00
/***********************************
* $ 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
2012-10-02 18:01:25 +01:00
# include <asm/quicc_simple.h>
2005-04-16 15:20:36 -07:00
/*
* 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