Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /*********************************** |
| 2 | * $Id: m68360_enet.h,v 1.1 2002/03/02 15:01:07 gerg Exp $ |
| 3 | *********************************** |
| 4 | * |
| 5 | *************************************** |
| 6 | * Definitions for the ETHERNET controllers |
| 7 | *************************************** |
| 8 | */ |
| 9 | |
| 10 | #ifndef __ETHER_H |
| 11 | #define __ETHER_H |
| 12 | |
| 13 | #include "quicc_simple.h" |
| 14 | |
| 15 | /* |
| 16 | * transmit BD's |
| 17 | */ |
| 18 | #define T_R 0x8000 /* ready bit */ |
| 19 | #define E_T_PAD 0x4000 /* short frame padding */ |
| 20 | #define T_W 0x2000 /* wrap bit */ |
| 21 | #define T_I 0x1000 /* interrupt on completion */ |
| 22 | #define T_L 0x0800 /* last in frame */ |
| 23 | #define T_TC 0x0400 /* transmit CRC (when last) */ |
| 24 | |
| 25 | #define T_DEF 0x0200 /* defer indication */ |
| 26 | #define T_HB 0x0100 /* heartbeat */ |
| 27 | #define T_LC 0x0080 /* error: late collision */ |
| 28 | #define T_RL 0x0040 /* error: retransmission limit */ |
| 29 | #define T_RC 0x003c /* retry count */ |
| 30 | #define T_UN 0x0002 /* error: underrun */ |
| 31 | #define T_CSL 0x0001 /* carier sense lost */ |
| 32 | #define T_ERROR (T_HB | T_LC | T_RL | T_UN | T_CSL) |
| 33 | |
| 34 | /* |
| 35 | * receive BD's |
| 36 | */ |
| 37 | #define R_E 0x8000 /* buffer empty */ |
| 38 | #define R_W 0x2000 /* wrap bit */ |
| 39 | #define R_I 0x1000 /* interrupt on reception */ |
| 40 | #define R_L 0x0800 /* last BD in frame */ |
| 41 | #define R_F 0x0400 /* first BD in frame */ |
| 42 | #define R_M 0x0100 /* received because of promisc. mode */ |
| 43 | |
| 44 | #define R_LG 0x0020 /* frame too long */ |
| 45 | #define R_NO 0x0010 /* non-octet aligned */ |
| 46 | #define R_SH 0x0008 /* short frame */ |
| 47 | #define R_CR 0x0004 /* receive CRC error */ |
| 48 | #define R_OV 0x0002 /* receive overrun */ |
| 49 | #define R_CL 0x0001 /* collision */ |
| 50 | #define ETHER_R_ERROR (R_LG | R_NO | R_SH | R_CR | R_OV | R_CL) |
| 51 | |
| 52 | |
| 53 | /* |
| 54 | * ethernet interrupts |
| 55 | */ |
| 56 | #define ETHERNET_GRA 0x0080 /* graceful stop complete */ |
| 57 | #define ETHERNET_TXE 0x0010 /* transmit error */ |
| 58 | #define ETHERNET_RXF 0x0008 /* receive frame */ |
| 59 | #define ETHERNET_BSY 0x0004 /* busy condition */ |
| 60 | #define ETHERNET_TXB 0x0002 /* transmit buffer */ |
| 61 | #define ETHERNET_RXB 0x0001 /* receive buffer */ |
| 62 | |
| 63 | /* |
| 64 | * ethernet protocol specific mode register (PSMR) |
| 65 | */ |
| 66 | #define ETHER_HBC 0x8000 /* heartbeat checking */ |
| 67 | #define ETHER_FC 0x4000 /* force collision */ |
| 68 | #define ETHER_RSH 0x2000 /* receive short frames */ |
| 69 | #define ETHER_IAM 0x1000 /* individual address mode */ |
| 70 | #define ETHER_CRC_32 (0x2<<10) /* Enable CRC */ |
| 71 | #define ETHER_PRO 0x0200 /* promiscuous */ |
| 72 | #define ETHER_BRO 0x0100 /* broadcast address */ |
| 73 | #define ETHER_SBT 0x0080 /* stop backoff timer */ |
| 74 | #define ETHER_LPB 0x0040 /* Loop Back Mode */ |
| 75 | #define ETHER_SIP 0x0020 /* sample input pins */ |
| 76 | #define ETHER_LCW 0x0010 /* late collision window */ |
| 77 | #define ETHER_NIB_13 (0x0<<1) /* # of ignored bits 13 */ |
| 78 | #define ETHER_NIB_14 (0x1<<1) /* # of ignored bits 14 */ |
| 79 | #define ETHER_NIB_15 (0x2<<1) /* # of ignored bits 15 */ |
| 80 | #define ETHER_NIB_16 (0x3<<1) /* # of ignored bits 16 */ |
| 81 | #define ETHER_NIB_21 (0x4<<1) /* # of ignored bits 21 */ |
| 82 | #define ETHER_NIB_22 (0x5<<1) /* # of ignored bits 22 */ |
| 83 | #define ETHER_NIB_23 (0x6<<1) /* # of ignored bits 23 */ |
| 84 | #define ETHER_NIB_24 (0x7<<1) /* # of ignored bits 24 */ |
| 85 | |
| 86 | /* |
| 87 | * ethernet specific parameters |
| 88 | */ |
| 89 | #define CRC_WORD 4 /* Length in bytes of CRC */ |
| 90 | #define C_PRES 0xffffffff /* preform 32 bit CRC */ |
| 91 | #define C_MASK 0xdebb20e3 /* comply with 32 bit CRC */ |
| 92 | #define CRCEC 0x00000000 |
| 93 | #define ALEC 0x00000000 |
| 94 | #define DISFC 0x00000000 |
| 95 | #define PADS 0x00000000 |
| 96 | #define RET_LIM 0x000f /* retry 15 times to send a frame before interrupt */ |
| 97 | #define ETH_MFLR 0x05ee /* 1518 max frame size */ |
| 98 | #define MINFLR 0x0040 /* Minimum frame size 64 */ |
| 99 | #define MAXD1 0x05ee /* Max dma count 1518 */ |
| 100 | #define MAXD2 0x05ee |
| 101 | #define GADDR1 0x00000000 /* Clear group address */ |
| 102 | #define GADDR2 0x00000000 |
| 103 | #define GADDR3 0x00000000 |
| 104 | #define GADDR4 0x00000000 |
| 105 | #define P_PER 0x00000000 /*not used */ |
| 106 | #define IADDR1 0x00000000 /* Individual hash table not used */ |
| 107 | #define IADDR2 0x00000000 |
| 108 | #define IADDR3 0x00000000 |
| 109 | #define IADDR4 0x00000000 |
| 110 | #define TADDR_H 0x00000000 /* clear this regs */ |
| 111 | #define TADDR_M 0x00000000 |
| 112 | #define TADDR_L 0x00000000 |
| 113 | |
| 114 | /* SCC Parameter Ram */ |
| 115 | #define RFCR 0x18 /* normal operation */ |
| 116 | #define TFCR 0x18 /* normal operation */ |
| 117 | #define E_MRBLR 1518 /* Max ethernet frame length */ |
| 118 | |
| 119 | /* |
| 120 | * ethernet specific structure |
| 121 | */ |
| 122 | typedef union { |
| 123 | unsigned char b[6]; |
| 124 | struct { |
| 125 | unsigned short high; |
| 126 | unsigned short middl; |
| 127 | unsigned short low; |
| 128 | } w; |
| 129 | } ETHER_ADDR; |
| 130 | |
| 131 | typedef struct { |
| 132 | int max_frame_length; |
| 133 | int promisc_mode; |
| 134 | int reject_broadcast; |
| 135 | ETHER_ADDR phys_adr; |
| 136 | } ETHER_SPECIFIC; |
| 137 | |
| 138 | typedef struct { |
| 139 | ETHER_ADDR dst_addr; |
| 140 | ETHER_ADDR src_addr; |
| 141 | unsigned short type_or_len; |
| 142 | unsigned char data[1]; |
| 143 | } ETHER_FRAME; |
| 144 | |
| 145 | #define MAX_DATALEN 1500 |
| 146 | typedef struct { |
| 147 | ETHER_ADDR dst_addr; |
| 148 | ETHER_ADDR src_addr; |
| 149 | unsigned short type_or_len; |
| 150 | unsigned char data[MAX_DATALEN]; |
| 151 | unsigned char fcs[CRC_WORD]; |
| 152 | } ETHER_MAX_FRAME; |
| 153 | |
| 154 | |
| 155 | /* |
| 156 | * Internal ethernet function prototypes |
| 157 | */ |
| 158 | void ether_interrupt(int scc_num); |
| 159 | /* mleslie: debug */ |
| 160 | /* static void ethernet_rx_internal(int scc_num); */ |
| 161 | /* static void ethernet_tx_internal(int scc_num); */ |
| 162 | |
| 163 | /* |
| 164 | * User callable routines prototypes (ethernet specific) |
| 165 | */ |
| 166 | void ethernet_init(int scc_number, |
| 167 | alloc_routine *alloc_buffer, |
| 168 | free_routine *free_buffer, |
| 169 | store_rx_buffer_routine *store_rx_buffer, |
| 170 | handle_tx_error_routine *handle_tx_error, |
| 171 | handle_rx_error_routine *handle_rx_error, |
| 172 | handle_lost_error_routine *handle_lost_error, |
| 173 | ETHER_SPECIFIC *ether_spec); |
| 174 | int ethernet_tx(int scc_number, void *buf, int length); |
| 175 | |
| 176 | #endif |
| 177 | |