Igor Skochinsky
/
EasyWebCR
code_red's port of EasyWeb server for LPC1768, made to compile with mbed's online compiler.
ethmac.h@0:12b53511e212, 2010-01-29 (annotated)
- Committer:
- igorsk
- Date:
- Fri Jan 29 21:46:31 2010 +0000
- Revision:
- 0:12b53511e212
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
igorsk | 0:12b53511e212 | 1 | /****************************************************************** |
igorsk | 0:12b53511e212 | 2 | ***** ***** |
igorsk | 0:12b53511e212 | 3 | ***** Name: cs8900.h ***** |
igorsk | 0:12b53511e212 | 4 | ***** Ver.: 1.0 ***** |
igorsk | 0:12b53511e212 | 5 | ***** Date: 07/05/2001 ***** |
igorsk | 0:12b53511e212 | 6 | ***** Auth: Andreas Dannenberg ***** |
igorsk | 0:12b53511e212 | 7 | ***** HTWK Leipzig ***** |
igorsk | 0:12b53511e212 | 8 | ***** university of applied sciences ***** |
igorsk | 0:12b53511e212 | 9 | ***** Germany ***** |
igorsk | 0:12b53511e212 | 10 | ***** adannenb@et.htwk-leipzig.de ***** |
igorsk | 0:12b53511e212 | 11 | ***** Func: header-file for cs8900.c ***** |
igorsk | 0:12b53511e212 | 12 | ***** ***** |
igorsk | 0:12b53511e212 | 13 | ******************************************************************/ |
igorsk | 0:12b53511e212 | 14 | |
igorsk | 0:12b53511e212 | 15 | // Modifications by Code Red Technologies for NXP LPC1768 |
igorsk | 0:12b53511e212 | 16 | // Filename changed to ethmac.h as no longer for cs8900 |
igorsk | 0:12b53511e212 | 17 | |
igorsk | 0:12b53511e212 | 18 | // CodeRed - update for new header filename |
igorsk | 0:12b53511e212 | 19 | //#ifndef __CS8900_H |
igorsk | 0:12b53511e212 | 20 | //#define __CS8900_H |
igorsk | 0:12b53511e212 | 21 | #ifndef __ETHMAC_H |
igorsk | 0:12b53511e212 | 22 | #define __ETHMAC_H |
igorsk | 0:12b53511e212 | 23 | |
igorsk | 0:12b53511e212 | 24 | #define MYMAC_1 1 // our ethernet (MAC) address |
igorsk | 0:12b53511e212 | 25 | #define MYMAC_2 2 // (MUST be unique in LAN!) |
igorsk | 0:12b53511e212 | 26 | #define MYMAC_3 3 |
igorsk | 0:12b53511e212 | 27 | #define MYMAC_4 4 |
igorsk | 0:12b53511e212 | 28 | #define MYMAC_5 5 |
igorsk | 0:12b53511e212 | 29 | #define MYMAC_6 6 |
igorsk | 0:12b53511e212 | 30 | |
igorsk | 0:12b53511e212 | 31 | |
igorsk | 0:12b53511e212 | 32 | // CodeRed - commented out original CS8900 defines |
igorsk | 0:12b53511e212 | 33 | /* |
igorsk | 0:12b53511e212 | 34 | #define IOR BIT6 // CS8900's ISA-bus interface pins |
igorsk | 0:12b53511e212 | 35 | #define IOW BIT7 |
igorsk | 0:12b53511e212 | 36 | |
igorsk | 0:12b53511e212 | 37 | // definitions for Crystal CS8900 ethernet-controller |
igorsk | 0:12b53511e212 | 38 | // based on linux-header by Russel Nelson |
igorsk | 0:12b53511e212 | 39 | |
igorsk | 0:12b53511e212 | 40 | #define PP_ChipID 0x0000 // offset 0h -> Corp-ID |
igorsk | 0:12b53511e212 | 41 | // offset 2h -> Model/Product Number |
igorsk | 0:12b53511e212 | 42 | // offset 3h -> Chip Revision Number |
igorsk | 0:12b53511e212 | 43 | |
igorsk | 0:12b53511e212 | 44 | #define PP_ISAIOB 0x0020 // IO base address |
igorsk | 0:12b53511e212 | 45 | #define PP_CS8900_ISAINT 0x0022 // ISA interrupt select |
igorsk | 0:12b53511e212 | 46 | #define PP_CS8900_ISADMA 0x0024 // ISA Rec DMA channel |
igorsk | 0:12b53511e212 | 47 | #define PP_ISASOF 0x0026 // ISA DMA offset |
igorsk | 0:12b53511e212 | 48 | #define PP_DmaFrameCnt 0x0028 // ISA DMA Frame count |
igorsk | 0:12b53511e212 | 49 | #define PP_DmaByteCnt 0x002A // ISA DMA Byte count |
igorsk | 0:12b53511e212 | 50 | #define PP_CS8900_ISAMemB 0x002C // Memory base |
igorsk | 0:12b53511e212 | 51 | #define PP_ISABootBase 0x0030 // Boot Prom base |
igorsk | 0:12b53511e212 | 52 | #define PP_ISABootMask 0x0034 // Boot Prom Mask |
igorsk | 0:12b53511e212 | 53 | |
igorsk | 0:12b53511e212 | 54 | // EEPROM data and command registers |
igorsk | 0:12b53511e212 | 55 | #define PP_EECMD 0x0040 // NVR Interface Command register |
igorsk | 0:12b53511e212 | 56 | #define PP_EEData 0x0042 // NVR Interface Data Register |
igorsk | 0:12b53511e212 | 57 | |
igorsk | 0:12b53511e212 | 58 | // Configuration and control registers |
igorsk | 0:12b53511e212 | 59 | #define PP_RxCFG 0x0102 // Rx Bus config |
igorsk | 0:12b53511e212 | 60 | #define PP_RxCTL 0x0104 // Receive Control Register |
igorsk | 0:12b53511e212 | 61 | #define PP_TxCFG 0x0106 // Transmit Config Register |
igorsk | 0:12b53511e212 | 62 | #define PP_TxCMD 0x0108 // Transmit Command Register |
igorsk | 0:12b53511e212 | 63 | #define PP_BufCFG 0x010A // Bus configuration Register |
igorsk | 0:12b53511e212 | 64 | #define PP_LineCTL 0x0112 // Line Config Register |
igorsk | 0:12b53511e212 | 65 | #define PP_SelfCTL 0x0114 // Self Command Register |
igorsk | 0:12b53511e212 | 66 | #define PP_BusCTL 0x0116 // ISA bus control Register |
igorsk | 0:12b53511e212 | 67 | #define PP_TestCTL 0x0118 // Test Register |
igorsk | 0:12b53511e212 | 68 | |
igorsk | 0:12b53511e212 | 69 | // Status and Event Registers |
igorsk | 0:12b53511e212 | 70 | #define PP_ISQ 0x0120 // Interrupt Status |
igorsk | 0:12b53511e212 | 71 | #define PP_RxEvent 0x0124 // Rx Event Register |
igorsk | 0:12b53511e212 | 72 | #define PP_TxEvent 0x0128 // Tx Event Register |
igorsk | 0:12b53511e212 | 73 | #define PP_BufEvent 0x012C // Bus Event Register |
igorsk | 0:12b53511e212 | 74 | #define PP_RxMiss 0x0130 // Receive Miss Count |
igorsk | 0:12b53511e212 | 75 | #define PP_TxCol 0x0132 // Transmit Collision Count |
igorsk | 0:12b53511e212 | 76 | #define PP_LineST 0x0134 // Line State Register |
igorsk | 0:12b53511e212 | 77 | #define PP_SelfST 0x0136 // Self State register |
igorsk | 0:12b53511e212 | 78 | #define PP_BusST 0x0138 // Bus Status |
igorsk | 0:12b53511e212 | 79 | #define PP_TDR 0x013C // Time Domain Reflectometry |
igorsk | 0:12b53511e212 | 80 | |
igorsk | 0:12b53511e212 | 81 | // Initiate Transmit Registers |
igorsk | 0:12b53511e212 | 82 | #define PP_TxCommand 0x0144 // Tx Command |
igorsk | 0:12b53511e212 | 83 | #define PP_TxLength 0x0146 // Tx Length |
igorsk | 0:12b53511e212 | 84 | |
igorsk | 0:12b53511e212 | 85 | // Adress Filter Registers |
igorsk | 0:12b53511e212 | 86 | #define PP_LAF 0x0150 // Hash Table |
igorsk | 0:12b53511e212 | 87 | #define PP_IA 0x0158 // Physical Address Register |
igorsk | 0:12b53511e212 | 88 | |
igorsk | 0:12b53511e212 | 89 | // Frame Location |
igorsk | 0:12b53511e212 | 90 | #define PP_RxStatus 0x0400 // Receive start of frame |
igorsk | 0:12b53511e212 | 91 | #define PP_RxLength 0x0402 // Receive Length of frame |
igorsk | 0:12b53511e212 | 92 | #define PP_RxFrame 0x0404 // Receive frame pointer |
igorsk | 0:12b53511e212 | 93 | #define PP_TxFrame 0x0A00 // Transmit frame pointer |
igorsk | 0:12b53511e212 | 94 | |
igorsk | 0:12b53511e212 | 95 | // Primary I/O Base Address. If no I/O base is supplied by the user, then this |
igorsk | 0:12b53511e212 | 96 | // can be used as the default I/O base to access the PacketPage Area. |
igorsk | 0:12b53511e212 | 97 | #define DEFAULTIOBASE 0x0300 |
igorsk | 0:12b53511e212 | 98 | |
igorsk | 0:12b53511e212 | 99 | // PP_RxCFG - Receive Configuration and Interrupt Mask bit definition - Read/write |
igorsk | 0:12b53511e212 | 100 | #define SKIP_1 0x0040 |
igorsk | 0:12b53511e212 | 101 | #define RX_STREAM_ENBL 0x0080 |
igorsk | 0:12b53511e212 | 102 | #define RX_OK_ENBL 0x0100 |
igorsk | 0:12b53511e212 | 103 | #define RX_DMA_ONLY 0x0200 |
igorsk | 0:12b53511e212 | 104 | #define AUTO_RX_DMA 0x0400 |
igorsk | 0:12b53511e212 | 105 | #define BUFFER_CRC 0x0800 |
igorsk | 0:12b53511e212 | 106 | #define RX_CRC_ERROR_ENBL 0x1000 |
igorsk | 0:12b53511e212 | 107 | #define RX_RUNT_ENBL 0x2000 |
igorsk | 0:12b53511e212 | 108 | #define RX_EXTRA_DATA_ENBL 0x4000 |
igorsk | 0:12b53511e212 | 109 | |
igorsk | 0:12b53511e212 | 110 | // PP_RxCTL - Receive Control bit definition - Read/write |
igorsk | 0:12b53511e212 | 111 | #define RX_IA_HASH_ACCEPT 0x0040 |
igorsk | 0:12b53511e212 | 112 | #define RX_PROM_ACCEPT 0x0080 |
igorsk | 0:12b53511e212 | 113 | #define RX_OK_ACCEPT 0x0100 |
igorsk | 0:12b53511e212 | 114 | #define RX_MULTCAST_ACCEPT 0x0200 |
igorsk | 0:12b53511e212 | 115 | #define RX_IA_ACCEPT 0x0400 |
igorsk | 0:12b53511e212 | 116 | #define RX_BROADCAST_ACCEPT 0x0800 |
igorsk | 0:12b53511e212 | 117 | #define RX_BAD_CRC_ACCEPT 0x1000 |
igorsk | 0:12b53511e212 | 118 | #define RX_RUNT_ACCEPT 0x2000 |
igorsk | 0:12b53511e212 | 119 | #define RX_EXTRA_DATA_ACCEPT 0x4000 |
igorsk | 0:12b53511e212 | 120 | |
igorsk | 0:12b53511e212 | 121 | // PP_TxCFG - Transmit Configuration Interrupt Mask bit definition - Read/write |
igorsk | 0:12b53511e212 | 122 | #define TX_LOST_CRS_ENBL 0x0040 |
igorsk | 0:12b53511e212 | 123 | #define TX_SQE_ERROR_ENBL 0x0080 |
igorsk | 0:12b53511e212 | 124 | #define TX_OK_ENBL 0x0100 |
igorsk | 0:12b53511e212 | 125 | #define TX_LATE_COL_ENBL 0x0200 |
igorsk | 0:12b53511e212 | 126 | #define TX_JBR_ENBL 0x0400 |
igorsk | 0:12b53511e212 | 127 | #define TX_ANY_COL_ENBL 0x0800 |
igorsk | 0:12b53511e212 | 128 | #define TX_16_COL_ENBL 0x8000 |
igorsk | 0:12b53511e212 | 129 | |
igorsk | 0:12b53511e212 | 130 | // PP_TxCMD - Transmit Command bit definition - Read-only and |
igorsk | 0:12b53511e212 | 131 | // PP_TxCommand - Write-only |
igorsk | 0:12b53511e212 | 132 | #define TX_START_5_BYTES 0x0000 |
igorsk | 0:12b53511e212 | 133 | #define TX_START_381_BYTES 0x0040 |
igorsk | 0:12b53511e212 | 134 | #define TX_START_1021_BYTES 0x0080 |
igorsk | 0:12b53511e212 | 135 | #define TX_START_ALL_BYTES 0x00C0 |
igorsk | 0:12b53511e212 | 136 | #define TX_FORCE 0x0100 |
igorsk | 0:12b53511e212 | 137 | #define TX_ONE_COL 0x0200 |
igorsk | 0:12b53511e212 | 138 | #define TX_NO_CRC 0x1000 |
igorsk | 0:12b53511e212 | 139 | #define TX_RUNT 0x2000 |
igorsk | 0:12b53511e212 | 140 | |
igorsk | 0:12b53511e212 | 141 | // PP_BufCFG - Buffer Configuration Interrupt Mask bit definition - Read/write |
igorsk | 0:12b53511e212 | 142 | #define GENERATE_SW_INTERRUPT 0x0040 |
igorsk | 0:12b53511e212 | 143 | #define RX_DMA_ENBL 0x0080 |
igorsk | 0:12b53511e212 | 144 | #define READY_FOR_TX_ENBL 0x0100 |
igorsk | 0:12b53511e212 | 145 | #define TX_UNDERRUN_ENBL 0x0200 |
igorsk | 0:12b53511e212 | 146 | #define RX_MISS_ENBL 0x0400 |
igorsk | 0:12b53511e212 | 147 | #define RX_128_BYTE_ENBL 0x0800 |
igorsk | 0:12b53511e212 | 148 | #define TX_COL_COUNT_OVRFLOW_ENBL 0x1000 |
igorsk | 0:12b53511e212 | 149 | #define RX_MISS_COUNT_OVRFLOW_ENBL 0x2000 |
igorsk | 0:12b53511e212 | 150 | #define RX_DEST_MATCH_ENBL 0x8000 |
igorsk | 0:12b53511e212 | 151 | |
igorsk | 0:12b53511e212 | 152 | // PP_LineCTL - Line Control bit definition - Read/write |
igorsk | 0:12b53511e212 | 153 | #define SERIAL_RX_ON 0x0040 |
igorsk | 0:12b53511e212 | 154 | #define SERIAL_TX_ON 0x0080 |
igorsk | 0:12b53511e212 | 155 | #define AUI_ONLY 0x0100 |
igorsk | 0:12b53511e212 | 156 | #define AUTO_AUI_10BASET 0x0200 |
igorsk | 0:12b53511e212 | 157 | #define MODIFIED_BACKOFF 0x0800 |
igorsk | 0:12b53511e212 | 158 | #define NO_AUTO_POLARITY 0x1000 |
igorsk | 0:12b53511e212 | 159 | #define TWO_PART_DEFDIS 0x2000 |
igorsk | 0:12b53511e212 | 160 | #define LOW_RX_SQUELCH 0x4000 |
igorsk | 0:12b53511e212 | 161 | |
igorsk | 0:12b53511e212 | 162 | // PP_SelfCTL - Software Self Control bit definition - Read/write |
igorsk | 0:12b53511e212 | 163 | #define POWER_ON_RESET 0x0040 |
igorsk | 0:12b53511e212 | 164 | #define SW_STOP 0x0100 |
igorsk | 0:12b53511e212 | 165 | #define SLEEP_ON 0x0200 |
igorsk | 0:12b53511e212 | 166 | #define AUTO_WAKEUP 0x0400 |
igorsk | 0:12b53511e212 | 167 | #define HCB0_ENBL 0x1000 |
igorsk | 0:12b53511e212 | 168 | #define HCB1_ENBL 0x2000 |
igorsk | 0:12b53511e212 | 169 | #define HCB0 0x4000 |
igorsk | 0:12b53511e212 | 170 | #define HCB1 0x8000 |
igorsk | 0:12b53511e212 | 171 | |
igorsk | 0:12b53511e212 | 172 | // PP_BusCTL - ISA Bus Control bit definition - Read/write |
igorsk | 0:12b53511e212 | 173 | #define RESET_RX_DMA 0x0040 |
igorsk | 0:12b53511e212 | 174 | #define MEMORY_ON 0x0400 |
igorsk | 0:12b53511e212 | 175 | #define DMA_BURST_MODE 0x0800 |
igorsk | 0:12b53511e212 | 176 | #define IO_CHANNEL_READY_ON 0x1000 |
igorsk | 0:12b53511e212 | 177 | #define RX_DMA_SIZE_64K 0x2000 |
igorsk | 0:12b53511e212 | 178 | #define ENABLE_IRQ 0x8000 |
igorsk | 0:12b53511e212 | 179 | |
igorsk | 0:12b53511e212 | 180 | // PP_TestCTL - Test Control bit definition - Read/write |
igorsk | 0:12b53511e212 | 181 | #define LINK_OFF 0x0080 |
igorsk | 0:12b53511e212 | 182 | #define ENDEC_LOOPBACK 0x0200 |
igorsk | 0:12b53511e212 | 183 | #define AUI_LOOPBACK 0x0400 |
igorsk | 0:12b53511e212 | 184 | #define BACKOFF_OFF 0x0800 |
igorsk | 0:12b53511e212 | 185 | #define FDX_8900 0x4000 |
igorsk | 0:12b53511e212 | 186 | |
igorsk | 0:12b53511e212 | 187 | // PP_RxEvent - Receive Event Bit definition - Read-only |
igorsk | 0:12b53511e212 | 188 | #define RX_IA_HASHED 0x0040 |
igorsk | 0:12b53511e212 | 189 | #define RX_DRIBBLE 0x0080 |
igorsk | 0:12b53511e212 | 190 | #define RX_OK 0x0100 |
igorsk | 0:12b53511e212 | 191 | #define RX_HASHED 0x0200 |
igorsk | 0:12b53511e212 | 192 | #define RX_IA 0x0400 |
igorsk | 0:12b53511e212 | 193 | #define RX_BROADCAST 0x0800 |
igorsk | 0:12b53511e212 | 194 | #define RX_CRC_ERROR 0x1000 |
igorsk | 0:12b53511e212 | 195 | #define RX_RUNT 0x2000 |
igorsk | 0:12b53511e212 | 196 | #define RX_EXTRA_DATA 0x4000 |
igorsk | 0:12b53511e212 | 197 | #define HASH_INDEX_MASK 0xFC00 // Hash-Table Index Mask (6 Bit) |
igorsk | 0:12b53511e212 | 198 | |
igorsk | 0:12b53511e212 | 199 | // PP_TxEvent - Transmit Event Bit definition - Read-only |
igorsk | 0:12b53511e212 | 200 | #define TX_LOST_CRS 0x0040 |
igorsk | 0:12b53511e212 | 201 | #define TX_SQE_ERROR 0x0080 |
igorsk | 0:12b53511e212 | 202 | #define TX_OK 0x0100 |
igorsk | 0:12b53511e212 | 203 | #define TX_LATE_COL 0x0200 |
igorsk | 0:12b53511e212 | 204 | #define TX_JBR 0x0400 |
igorsk | 0:12b53511e212 | 205 | #define TX_16_COL 0x8000 |
igorsk | 0:12b53511e212 | 206 | #define TX_COL_COUNT_MASK 0x7800 |
igorsk | 0:12b53511e212 | 207 | |
igorsk | 0:12b53511e212 | 208 | // PP_BufEvent - Buffer Event Bit definition - Read-only |
igorsk | 0:12b53511e212 | 209 | #define SW_INTERRUPT 0x0040 |
igorsk | 0:12b53511e212 | 210 | #define RX_DMA 0x0080 |
igorsk | 0:12b53511e212 | 211 | #define READY_FOR_TX 0x0100 |
igorsk | 0:12b53511e212 | 212 | #define TX_UNDERRUN 0x0200 |
igorsk | 0:12b53511e212 | 213 | #define RX_MISS 0x0400 |
igorsk | 0:12b53511e212 | 214 | #define RX_128_BYTE 0x0800 |
igorsk | 0:12b53511e212 | 215 | #define TX_COL_OVRFLW 0x1000 |
igorsk | 0:12b53511e212 | 216 | #define RX_MISS_OVRFLW 0x2000 |
igorsk | 0:12b53511e212 | 217 | #define RX_DEST_MATCH 0x8000 |
igorsk | 0:12b53511e212 | 218 | |
igorsk | 0:12b53511e212 | 219 | // PP_LineST - Ethernet Line Status bit definition - Read-only |
igorsk | 0:12b53511e212 | 220 | #define LINK_OK 0x0080 |
igorsk | 0:12b53511e212 | 221 | #define AUI_ON 0x0100 |
igorsk | 0:12b53511e212 | 222 | #define TENBASET_ON 0x0200 |
igorsk | 0:12b53511e212 | 223 | #define POLARITY_OK 0x1000 |
igorsk | 0:12b53511e212 | 224 | #define CRS_OK 0x4000 |
igorsk | 0:12b53511e212 | 225 | |
igorsk | 0:12b53511e212 | 226 | // PP_SelfST - Chip Software Status bit definition |
igorsk | 0:12b53511e212 | 227 | #define ACTIVE_33V 0x0040 |
igorsk | 0:12b53511e212 | 228 | #define INIT_DONE 0x0080 |
igorsk | 0:12b53511e212 | 229 | #define SI_BUSY 0x0100 |
igorsk | 0:12b53511e212 | 230 | #define EEPROM_PRESENT 0x0200 |
igorsk | 0:12b53511e212 | 231 | #define EEPROM_OK 0x0400 |
igorsk | 0:12b53511e212 | 232 | #define EL_PRESENT 0x0800 |
igorsk | 0:12b53511e212 | 233 | #define EE_SIZE_64 0x1000 |
igorsk | 0:12b53511e212 | 234 | |
igorsk | 0:12b53511e212 | 235 | // PP_BusST - ISA Bus Status bit definition |
igorsk | 0:12b53511e212 | 236 | #define TX_BID_ERROR 0x0080 |
igorsk | 0:12b53511e212 | 237 | #define READY_FOR_TX_NOW 0x0100 |
igorsk | 0:12b53511e212 | 238 | |
igorsk | 0:12b53511e212 | 239 | // The following block defines the ISQ event types |
igorsk | 0:12b53511e212 | 240 | #define ISQ_RX_EVENT 0x0004 |
igorsk | 0:12b53511e212 | 241 | #define ISQ_TX_EVENT 0x0008 |
igorsk | 0:12b53511e212 | 242 | #define ISQ_BUFFER_EVENT 0x000C |
igorsk | 0:12b53511e212 | 243 | #define ISQ_RX_MISS_EVENT 0x0010 |
igorsk | 0:12b53511e212 | 244 | #define ISQ_TX_COL_EVENT 0x0012 |
igorsk | 0:12b53511e212 | 245 | |
igorsk | 0:12b53511e212 | 246 | #define ISQ_EVENT_MASK 0x003F // ISQ mask to find out type of event |
igorsk | 0:12b53511e212 | 247 | |
igorsk | 0:12b53511e212 | 248 | // Ports for I/O-Mode |
igorsk | 0:12b53511e212 | 249 | #define RX_FRAME_PORT 0x0000 |
igorsk | 0:12b53511e212 | 250 | #define TX_FRAME_PORT 0x0000 |
igorsk | 0:12b53511e212 | 251 | #define TX_CMD_PORT 0x0004 |
igorsk | 0:12b53511e212 | 252 | #define TX_LEN_PORT 0x0006 |
igorsk | 0:12b53511e212 | 253 | #define ISQ_PORT 0x0008 |
igorsk | 0:12b53511e212 | 254 | #define ADD_PORT 0x000A |
igorsk | 0:12b53511e212 | 255 | #define DATA_PORT 0x000C |
igorsk | 0:12b53511e212 | 256 | |
igorsk | 0:12b53511e212 | 257 | #define AUTOINCREMENT 0x8000 // Bit mask to set Bit-15 for autoincrement |
igorsk | 0:12b53511e212 | 258 | |
igorsk | 0:12b53511e212 | 259 | // EEProm Commands |
igorsk | 0:12b53511e212 | 260 | #define EEPROM_WRITE_EN 0x00F0 |
igorsk | 0:12b53511e212 | 261 | #define EEPROM_WRITE_DIS 0x0000 |
igorsk | 0:12b53511e212 | 262 | #define EEPROM_WRITE_CMD 0x0100 |
igorsk | 0:12b53511e212 | 263 | #define EEPROM_READ_CMD 0x0200 |
igorsk | 0:12b53511e212 | 264 | |
igorsk | 0:12b53511e212 | 265 | // Receive Header of each packet in receive area of memory for DMA-Mode |
igorsk | 0:12b53511e212 | 266 | #define RBUF_EVENT_LOW 0x0000 // Low byte of RxEvent |
igorsk | 0:12b53511e212 | 267 | #define RBUF_EVENT_HIGH 0x0001 // High byte of RxEvent |
igorsk | 0:12b53511e212 | 268 | #define RBUF_LEN_LOW 0x0002 // Length of received data - low byte |
igorsk | 0:12b53511e212 | 269 | #define RBUF_LEN_HI 0x0003 // Length of received data - high byte |
igorsk | 0:12b53511e212 | 270 | #define RBUF_HEAD_LEN 0x0004 // Length of this header |
igorsk | 0:12b53511e212 | 271 | |
igorsk | 0:12b53511e212 | 272 | // CodeRed - end of original CS8900 defines |
igorsk | 0:12b53511e212 | 273 | */ |
igorsk | 0:12b53511e212 | 274 | |
igorsk | 0:12b53511e212 | 275 | // ******* |
igorsk | 0:12b53511e212 | 276 | // CodeRed - defines for LPC1768 ethernet |
igorsk | 0:12b53511e212 | 277 | // ******* |
igorsk | 0:12b53511e212 | 278 | |
igorsk | 0:12b53511e212 | 279 | /* EMAC Memory Buffer configuration for 16K Ethernet RAM. */ |
igorsk | 0:12b53511e212 | 280 | #define NUM_RX_FRAG 4 /* Num.of RX Fragments 4*1536= 6.0kB */ |
igorsk | 0:12b53511e212 | 281 | #define NUM_TX_FRAG 2 /* Num.of TX Fragments 3*1536= 4.6kB */ |
igorsk | 0:12b53511e212 | 282 | #define ETH_FRAG_SIZE 1536 /* Packet Fragment size 1536 Bytes */ |
igorsk | 0:12b53511e212 | 283 | |
igorsk | 0:12b53511e212 | 284 | #define ETH_MAX_FLEN 1536 /* Max. Ethernet Frame Size */ |
igorsk | 0:12b53511e212 | 285 | |
igorsk | 0:12b53511e212 | 286 | /* EMAC variables located in AHB SRAM bank 1*/ |
igorsk | 0:12b53511e212 | 287 | // Below is base address for first silicon |
igorsk | 0:12b53511e212 | 288 | //#define RX_DESC_BASE 0x20004000 |
igorsk | 0:12b53511e212 | 289 | // Below is base address for production silicon |
igorsk | 0:12b53511e212 | 290 | #define RX_DESC_BASE 0x2007c000 |
igorsk | 0:12b53511e212 | 291 | #define RX_STAT_BASE (RX_DESC_BASE + NUM_RX_FRAG*8) |
igorsk | 0:12b53511e212 | 292 | #define TX_DESC_BASE (RX_STAT_BASE + NUM_RX_FRAG*8) |
igorsk | 0:12b53511e212 | 293 | #define TX_STAT_BASE (TX_DESC_BASE + NUM_TX_FRAG*8) |
igorsk | 0:12b53511e212 | 294 | #define RX_BUF_BASE (TX_STAT_BASE + NUM_TX_FRAG*4) |
igorsk | 0:12b53511e212 | 295 | #define TX_BUF_BASE (RX_BUF_BASE + NUM_RX_FRAG*ETH_FRAG_SIZE) |
igorsk | 0:12b53511e212 | 296 | |
igorsk | 0:12b53511e212 | 297 | /* RX and TX descriptor and status definitions. */ |
igorsk | 0:12b53511e212 | 298 | #define RX_DESC_PACKET(i) (*(unsigned int *)(RX_DESC_BASE + 8*i)) |
igorsk | 0:12b53511e212 | 299 | #define RX_DESC_CTRL(i) (*(unsigned int *)(RX_DESC_BASE+4 + 8*i)) |
igorsk | 0:12b53511e212 | 300 | #define RX_STAT_INFO(i) (*(unsigned int *)(RX_STAT_BASE + 8*i)) |
igorsk | 0:12b53511e212 | 301 | #define RX_STAT_HASHCRC(i) (*(unsigned int *)(RX_STAT_BASE+4 + 8*i)) |
igorsk | 0:12b53511e212 | 302 | #define TX_DESC_PACKET(i) (*(unsigned int *)(TX_DESC_BASE + 8*i)) |
igorsk | 0:12b53511e212 | 303 | #define TX_DESC_CTRL(i) (*(unsigned int *)(TX_DESC_BASE+4 + 8*i)) |
igorsk | 0:12b53511e212 | 304 | #define TX_STAT_INFO(i) (*(unsigned int *)(TX_STAT_BASE + 4*i)) |
igorsk | 0:12b53511e212 | 305 | #define RX_BUF(i) (RX_BUF_BASE + ETH_FRAG_SIZE*i) |
igorsk | 0:12b53511e212 | 306 | #define TX_BUF(i) (TX_BUF_BASE + ETH_FRAG_SIZE*i) |
igorsk | 0:12b53511e212 | 307 | |
igorsk | 0:12b53511e212 | 308 | /* MAC Configuration Register 1 */ |
igorsk | 0:12b53511e212 | 309 | #define MAC1_REC_EN 0x00000001 /* Receive Enable */ |
igorsk | 0:12b53511e212 | 310 | #define MAC1_PASS_ALL 0x00000002 /* Pass All Receive Frames */ |
igorsk | 0:12b53511e212 | 311 | #define MAC1_RX_FLOWC 0x00000004 /* RX Flow Control */ |
igorsk | 0:12b53511e212 | 312 | #define MAC1_TX_FLOWC 0x00000008 /* TX Flow Control */ |
igorsk | 0:12b53511e212 | 313 | #define MAC1_LOOPB 0x00000010 /* Loop Back Mode */ |
igorsk | 0:12b53511e212 | 314 | #define MAC1_RES_TX 0x00000100 /* Reset TX Logic */ |
igorsk | 0:12b53511e212 | 315 | #define MAC1_RES_MCS_TX 0x00000200 /* Reset MAC TX Control Sublayer */ |
igorsk | 0:12b53511e212 | 316 | #define MAC1_RES_RX 0x00000400 /* Reset RX Logic */ |
igorsk | 0:12b53511e212 | 317 | #define MAC1_RES_MCS_RX 0x00000800 /* Reset MAC RX Control Sublayer */ |
igorsk | 0:12b53511e212 | 318 | #define MAC1_SIM_RES 0x00004000 /* Simulation Reset */ |
igorsk | 0:12b53511e212 | 319 | #define MAC1_SOFT_RES 0x00008000 /* Soft Reset MAC */ |
igorsk | 0:12b53511e212 | 320 | |
igorsk | 0:12b53511e212 | 321 | /* MAC Configuration Register 2 */ |
igorsk | 0:12b53511e212 | 322 | #define MAC2_FULL_DUP 0x00000001 /* Full Duplex Mode */ |
igorsk | 0:12b53511e212 | 323 | #define MAC2_FRM_LEN_CHK 0x00000002 /* Frame Length Checking */ |
igorsk | 0:12b53511e212 | 324 | #define MAC2_HUGE_FRM_EN 0x00000004 /* Huge Frame Enable */ |
igorsk | 0:12b53511e212 | 325 | #define MAC2_DLY_CRC 0x00000008 /* Delayed CRC Mode */ |
igorsk | 0:12b53511e212 | 326 | #define MAC2_CRC_EN 0x00000010 /* Append CRC to every Frame */ |
igorsk | 0:12b53511e212 | 327 | #define MAC2_PAD_EN 0x00000020 /* Pad all Short Frames */ |
igorsk | 0:12b53511e212 | 328 | #define MAC2_VLAN_PAD_EN 0x00000040 /* VLAN Pad Enable */ |
igorsk | 0:12b53511e212 | 329 | #define MAC2_ADET_PAD_EN 0x00000080 /* Auto Detect Pad Enable */ |
igorsk | 0:12b53511e212 | 330 | #define MAC2_PPREAM_ENF 0x00000100 /* Pure Preamble Enforcement */ |
igorsk | 0:12b53511e212 | 331 | #define MAC2_LPREAM_ENF 0x00000200 /* Long Preamble Enforcement */ |
igorsk | 0:12b53511e212 | 332 | #define MAC2_NO_BACKOFF 0x00001000 /* No Backoff Algorithm */ |
igorsk | 0:12b53511e212 | 333 | #define MAC2_BACK_PRESSURE 0x00002000 /* Backoff Presurre / No Backoff */ |
igorsk | 0:12b53511e212 | 334 | #define MAC2_EXCESS_DEF 0x00004000 /* Excess Defer */ |
igorsk | 0:12b53511e212 | 335 | |
igorsk | 0:12b53511e212 | 336 | /* Back-to-Back Inter-Packet-Gap Register */ |
igorsk | 0:12b53511e212 | 337 | #define IPGT_FULL_DUP 0x00000015 /* Recommended value for Full Duplex */ |
igorsk | 0:12b53511e212 | 338 | #define IPGT_HALF_DUP 0x00000012 /* Recommended value for Half Duplex */ |
igorsk | 0:12b53511e212 | 339 | |
igorsk | 0:12b53511e212 | 340 | /* Non Back-to-Back Inter-Packet-Gap Register */ |
igorsk | 0:12b53511e212 | 341 | #define IPGR_DEF 0x00000012 /* Recommended value */ |
igorsk | 0:12b53511e212 | 342 | |
igorsk | 0:12b53511e212 | 343 | /* Collision Window/Retry Register */ |
igorsk | 0:12b53511e212 | 344 | #define CLRT_DEF 0x0000370F /* Default value */ |
igorsk | 0:12b53511e212 | 345 | |
igorsk | 0:12b53511e212 | 346 | /* PHY Support Register */ |
igorsk | 0:12b53511e212 | 347 | #define SUPP_SPEED 0x00000100 /* Reduced MII Logic Current Speed */ |
igorsk | 0:12b53511e212 | 348 | |
igorsk | 0:12b53511e212 | 349 | /* Test Register */ |
igorsk | 0:12b53511e212 | 350 | #define TEST_SHCUT_PQUANTA 0x00000001 /* Shortcut Pause Quanta */ |
igorsk | 0:12b53511e212 | 351 | #define TEST_TST_PAUSE 0x00000002 /* Test Pause */ |
igorsk | 0:12b53511e212 | 352 | #define TEST_TST_BACKP 0x00000004 /* Test Back Pressure */ |
igorsk | 0:12b53511e212 | 353 | |
igorsk | 0:12b53511e212 | 354 | /* MII Management Configuration Register */ |
igorsk | 0:12b53511e212 | 355 | #define MCFG_SCAN_INC 0x00000001 /* Scan Increment PHY Address */ |
igorsk | 0:12b53511e212 | 356 | #define MCFG_SUPP_PREAM 0x00000002 /* Suppress Preamble */ |
igorsk | 0:12b53511e212 | 357 | #define MCFG_CLK_SEL 0x0000001C /* Clock Select Mask */ |
igorsk | 0:12b53511e212 | 358 | #define MCFG_RES_MII 0x00008000 /* Reset MII Management Hardware */ |
igorsk | 0:12b53511e212 | 359 | |
igorsk | 0:12b53511e212 | 360 | /* MII Management Command Register */ |
igorsk | 0:12b53511e212 | 361 | #define MCMD_READ 0x00000001 /* MII Read */ |
igorsk | 0:12b53511e212 | 362 | #define MCMD_SCAN 0x00000002 /* MII Scan continuously */ |
igorsk | 0:12b53511e212 | 363 | |
igorsk | 0:12b53511e212 | 364 | #define MII_WR_TOUT 0x00050000 /* MII Write timeout count */ |
igorsk | 0:12b53511e212 | 365 | #define MII_RD_TOUT 0x00050000 /* MII Read timeout count */ |
igorsk | 0:12b53511e212 | 366 | |
igorsk | 0:12b53511e212 | 367 | /* MII Management Address Register */ |
igorsk | 0:12b53511e212 | 368 | #define MADR_REG_ADR 0x0000001F /* MII Register Address Mask */ |
igorsk | 0:12b53511e212 | 369 | #define MADR_PHY_ADR 0x00001F00 /* PHY Address Mask */ |
igorsk | 0:12b53511e212 | 370 | |
igorsk | 0:12b53511e212 | 371 | /* MII Management Indicators Register */ |
igorsk | 0:12b53511e212 | 372 | #define MIND_BUSY 0x00000001 /* MII is Busy */ |
igorsk | 0:12b53511e212 | 373 | #define MIND_SCAN 0x00000002 /* MII Scanning in Progress */ |
igorsk | 0:12b53511e212 | 374 | #define MIND_NOT_VAL 0x00000004 /* MII Read Data not valid */ |
igorsk | 0:12b53511e212 | 375 | #define MIND_MII_LINK_FAIL 0x00000008 /* MII Link Failed */ |
igorsk | 0:12b53511e212 | 376 | |
igorsk | 0:12b53511e212 | 377 | /* Command Register */ |
igorsk | 0:12b53511e212 | 378 | #define CR_RX_EN 0x00000001 /* Enable Receive */ |
igorsk | 0:12b53511e212 | 379 | #define CR_TX_EN 0x00000002 /* Enable Transmit */ |
igorsk | 0:12b53511e212 | 380 | #define CR_REG_RES 0x00000008 /* Reset Host Registers */ |
igorsk | 0:12b53511e212 | 381 | #define CR_TX_RES 0x00000010 /* Reset Transmit Datapath */ |
igorsk | 0:12b53511e212 | 382 | #define CR_RX_RES 0x00000020 /* Reset Receive Datapath */ |
igorsk | 0:12b53511e212 | 383 | #define CR_PASS_RUNT_FRM 0x00000040 /* Pass Runt Frames */ |
igorsk | 0:12b53511e212 | 384 | #define CR_PASS_RX_FILT 0x00000080 /* Pass RX Filter */ |
igorsk | 0:12b53511e212 | 385 | #define CR_TX_FLOW_CTRL 0x00000100 /* TX Flow Control */ |
igorsk | 0:12b53511e212 | 386 | #define CR_RMII 0x00000200 /* Reduced MII Interface */ |
igorsk | 0:12b53511e212 | 387 | #define CR_FULL_DUP 0x00000400 /* Full Duplex */ |
igorsk | 0:12b53511e212 | 388 | |
igorsk | 0:12b53511e212 | 389 | /* Status Register */ |
igorsk | 0:12b53511e212 | 390 | #define SR_RX_EN 0x00000001 /* Enable Receive */ |
igorsk | 0:12b53511e212 | 391 | #define SR_TX_EN 0x00000002 /* Enable Transmit */ |
igorsk | 0:12b53511e212 | 392 | |
igorsk | 0:12b53511e212 | 393 | /* Transmit Status Vector 0 Register */ |
igorsk | 0:12b53511e212 | 394 | #define TSV0_CRC_ERR 0x00000001 /* CRC error */ |
igorsk | 0:12b53511e212 | 395 | #define TSV0_LEN_CHKERR 0x00000002 /* Length Check Error */ |
igorsk | 0:12b53511e212 | 396 | #define TSV0_LEN_OUTRNG 0x00000004 /* Length Out of Range */ |
igorsk | 0:12b53511e212 | 397 | #define TSV0_DONE 0x00000008 /* Tramsmission Completed */ |
igorsk | 0:12b53511e212 | 398 | #define TSV0_MCAST 0x00000010 /* Multicast Destination */ |
igorsk | 0:12b53511e212 | 399 | #define TSV0_BCAST 0x00000020 /* Broadcast Destination */ |
igorsk | 0:12b53511e212 | 400 | #define TSV0_PKT_DEFER 0x00000040 /* Packet Deferred */ |
igorsk | 0:12b53511e212 | 401 | #define TSV0_EXC_DEFER 0x00000080 /* Excessive Packet Deferral */ |
igorsk | 0:12b53511e212 | 402 | #define TSV0_EXC_COLL 0x00000100 /* Excessive Collision */ |
igorsk | 0:12b53511e212 | 403 | #define TSV0_LATE_COLL 0x00000200 /* Late Collision Occured */ |
igorsk | 0:12b53511e212 | 404 | #define TSV0_GIANT 0x00000400 /* Giant Frame */ |
igorsk | 0:12b53511e212 | 405 | #define TSV0_UNDERRUN 0x00000800 /* Buffer Underrun */ |
igorsk | 0:12b53511e212 | 406 | #define TSV0_BYTES 0x0FFFF000 /* Total Bytes Transferred */ |
igorsk | 0:12b53511e212 | 407 | #define TSV0_CTRL_FRAME 0x10000000 /* Control Frame */ |
igorsk | 0:12b53511e212 | 408 | #define TSV0_PAUSE 0x20000000 /* Pause Frame */ |
igorsk | 0:12b53511e212 | 409 | #define TSV0_BACK_PRESS 0x40000000 /* Backpressure Method Applied */ |
igorsk | 0:12b53511e212 | 410 | #define TSV0_VLAN 0x80000000 /* VLAN Frame */ |
igorsk | 0:12b53511e212 | 411 | |
igorsk | 0:12b53511e212 | 412 | /* Transmit Status Vector 1 Register */ |
igorsk | 0:12b53511e212 | 413 | #define TSV1_BYTE_CNT 0x0000FFFF /* Transmit Byte Count */ |
igorsk | 0:12b53511e212 | 414 | #define TSV1_COLL_CNT 0x000F0000 /* Transmit Collision Count */ |
igorsk | 0:12b53511e212 | 415 | |
igorsk | 0:12b53511e212 | 416 | /* Receive Status Vector Register */ |
igorsk | 0:12b53511e212 | 417 | #define RSV_BYTE_CNT 0x0000FFFF /* Receive Byte Count */ |
igorsk | 0:12b53511e212 | 418 | #define RSV_PKT_IGNORED 0x00010000 /* Packet Previously Ignored */ |
igorsk | 0:12b53511e212 | 419 | #define RSV_RXDV_SEEN 0x00020000 /* RXDV Event Previously Seen */ |
igorsk | 0:12b53511e212 | 420 | #define RSV_CARR_SEEN 0x00040000 /* Carrier Event Previously Seen */ |
igorsk | 0:12b53511e212 | 421 | #define RSV_REC_CODEV 0x00080000 /* Receive Code Violation */ |
igorsk | 0:12b53511e212 | 422 | #define RSV_CRC_ERR 0x00100000 /* CRC Error */ |
igorsk | 0:12b53511e212 | 423 | #define RSV_LEN_CHKERR 0x00200000 /* Length Check Error */ |
igorsk | 0:12b53511e212 | 424 | #define RSV_LEN_OUTRNG 0x00400000 /* Length Out of Range */ |
igorsk | 0:12b53511e212 | 425 | #define RSV_REC_OK 0x00800000 /* Frame Received OK */ |
igorsk | 0:12b53511e212 | 426 | #define RSV_MCAST 0x01000000 /* Multicast Frame */ |
igorsk | 0:12b53511e212 | 427 | #define RSV_BCAST 0x02000000 /* Broadcast Frame */ |
igorsk | 0:12b53511e212 | 428 | #define RSV_DRIB_NIBB 0x04000000 /* Dribble Nibble */ |
igorsk | 0:12b53511e212 | 429 | #define RSV_CTRL_FRAME 0x08000000 /* Control Frame */ |
igorsk | 0:12b53511e212 | 430 | #define RSV_PAUSE 0x10000000 /* Pause Frame */ |
igorsk | 0:12b53511e212 | 431 | #define RSV_UNSUPP_OPC 0x20000000 /* Unsupported Opcode */ |
igorsk | 0:12b53511e212 | 432 | #define RSV_VLAN 0x40000000 /* VLAN Frame */ |
igorsk | 0:12b53511e212 | 433 | |
igorsk | 0:12b53511e212 | 434 | /* Flow Control Counter Register */ |
igorsk | 0:12b53511e212 | 435 | #define FCC_MIRR_CNT 0x0000FFFF /* Mirror Counter */ |
igorsk | 0:12b53511e212 | 436 | #define FCC_PAUSE_TIM 0xFFFF0000 /* Pause Timer */ |
igorsk | 0:12b53511e212 | 437 | |
igorsk | 0:12b53511e212 | 438 | /* Flow Control Status Register */ |
igorsk | 0:12b53511e212 | 439 | #define FCS_MIRR_CNT 0x0000FFFF /* Mirror Counter Current */ |
igorsk | 0:12b53511e212 | 440 | |
igorsk | 0:12b53511e212 | 441 | /* Receive Filter Control Register */ |
igorsk | 0:12b53511e212 | 442 | #define RFC_UCAST_EN 0x00000001 /* Accept Unicast Frames Enable */ |
igorsk | 0:12b53511e212 | 443 | #define RFC_BCAST_EN 0x00000002 /* Accept Broadcast Frames Enable */ |
igorsk | 0:12b53511e212 | 444 | #define RFC_MCAST_EN 0x00000004 /* Accept Multicast Frames Enable */ |
igorsk | 0:12b53511e212 | 445 | #define RFC_UCAST_HASH_EN 0x00000008 /* Accept Unicast Hash Filter Frames */ |
igorsk | 0:12b53511e212 | 446 | #define RFC_MCAST_HASH_EN 0x00000010 /* Accept Multicast Hash Filter Fram.*/ |
igorsk | 0:12b53511e212 | 447 | #define RFC_PERFECT_EN 0x00000020 /* Accept Perfect Match Enable */ |
igorsk | 0:12b53511e212 | 448 | #define RFC_MAGP_WOL_EN 0x00001000 /* Magic Packet Filter WoL Enable */ |
igorsk | 0:12b53511e212 | 449 | #define RFC_PFILT_WOL_EN 0x00002000 /* Perfect Filter WoL Enable */ |
igorsk | 0:12b53511e212 | 450 | |
igorsk | 0:12b53511e212 | 451 | /* Receive Filter WoL Status/Clear Registers */ |
igorsk | 0:12b53511e212 | 452 | #define WOL_UCAST 0x00000001 /* Unicast Frame caused WoL */ |
igorsk | 0:12b53511e212 | 453 | #define WOL_BCAST 0x00000002 /* Broadcast Frame caused WoL */ |
igorsk | 0:12b53511e212 | 454 | #define WOL_MCAST 0x00000004 /* Multicast Frame caused WoL */ |
igorsk | 0:12b53511e212 | 455 | #define WOL_UCAST_HASH 0x00000008 /* Unicast Hash Filter Frame WoL */ |
igorsk | 0:12b53511e212 | 456 | #define WOL_MCAST_HASH 0x00000010 /* Multicast Hash Filter Frame WoL */ |
igorsk | 0:12b53511e212 | 457 | #define WOL_PERFECT 0x00000020 /* Perfect Filter WoL */ |
igorsk | 0:12b53511e212 | 458 | #define WOL_RX_FILTER 0x00000080 /* RX Filter caused WoL */ |
igorsk | 0:12b53511e212 | 459 | #define WOL_MAG_PACKET 0x00000100 /* Magic Packet Filter caused WoL */ |
igorsk | 0:12b53511e212 | 460 | |
igorsk | 0:12b53511e212 | 461 | /* Interrupt Status/Enable/Clear/Set Registers */ |
igorsk | 0:12b53511e212 | 462 | #define INT_RX_OVERRUN 0x00000001 /* Overrun Error in RX Queue */ |
igorsk | 0:12b53511e212 | 463 | #define INT_RX_ERR 0x00000002 /* Receive Error */ |
igorsk | 0:12b53511e212 | 464 | #define INT_RX_FIN 0x00000004 /* RX Finished Process Descriptors */ |
igorsk | 0:12b53511e212 | 465 | #define INT_RX_DONE 0x00000008 /* Receive Done */ |
igorsk | 0:12b53511e212 | 466 | #define INT_TX_UNDERRUN 0x00000010 /* Transmit Underrun */ |
igorsk | 0:12b53511e212 | 467 | #define INT_TX_ERR 0x00000020 /* Transmit Error */ |
igorsk | 0:12b53511e212 | 468 | #define INT_TX_FIN 0x00000040 /* TX Finished Process Descriptors */ |
igorsk | 0:12b53511e212 | 469 | #define INT_TX_DONE 0x00000080 /* Transmit Done */ |
igorsk | 0:12b53511e212 | 470 | #define INT_SOFT_INT 0x00001000 /* Software Triggered Interrupt */ |
igorsk | 0:12b53511e212 | 471 | #define INT_WAKEUP 0x00002000 /* Wakeup Event Interrupt */ |
igorsk | 0:12b53511e212 | 472 | |
igorsk | 0:12b53511e212 | 473 | /* Power Down Register */ |
igorsk | 0:12b53511e212 | 474 | #define PD_POWER_DOWN 0x80000000 /* Power Down MAC */ |
igorsk | 0:12b53511e212 | 475 | |
igorsk | 0:12b53511e212 | 476 | /* RX Descriptor Control Word */ |
igorsk | 0:12b53511e212 | 477 | #define RCTRL_SIZE 0x000007FF /* Buffer size mask */ |
igorsk | 0:12b53511e212 | 478 | #define RCTRL_INT 0x80000000 /* Generate RxDone Interrupt */ |
igorsk | 0:12b53511e212 | 479 | |
igorsk | 0:12b53511e212 | 480 | /* RX Status Hash CRC Word */ |
igorsk | 0:12b53511e212 | 481 | #define RHASH_SA 0x000001FF /* Hash CRC for Source Address */ |
igorsk | 0:12b53511e212 | 482 | #define RHASH_DA 0x001FF000 /* Hash CRC for Destination Address */ |
igorsk | 0:12b53511e212 | 483 | |
igorsk | 0:12b53511e212 | 484 | /* RX Status Information Word */ |
igorsk | 0:12b53511e212 | 485 | #define RINFO_SIZE 0x000007FF /* Data size in bytes */ |
igorsk | 0:12b53511e212 | 486 | #define RINFO_CTRL_FRAME 0x00040000 /* Control Frame */ |
igorsk | 0:12b53511e212 | 487 | #define RINFO_VLAN 0x00080000 /* VLAN Frame */ |
igorsk | 0:12b53511e212 | 488 | #define RINFO_FAIL_FILT 0x00100000 /* RX Filter Failed */ |
igorsk | 0:12b53511e212 | 489 | #define RINFO_MCAST 0x00200000 /* Multicast Frame */ |
igorsk | 0:12b53511e212 | 490 | #define RINFO_BCAST 0x00400000 /* Broadcast Frame */ |
igorsk | 0:12b53511e212 | 491 | #define RINFO_CRC_ERR 0x00800000 /* CRC Error in Frame */ |
igorsk | 0:12b53511e212 | 492 | #define RINFO_SYM_ERR 0x01000000 /* Symbol Error from PHY */ |
igorsk | 0:12b53511e212 | 493 | #define RINFO_LEN_ERR 0x02000000 /* Length Error */ |
igorsk | 0:12b53511e212 | 494 | #define RINFO_RANGE_ERR 0x04000000 /* Range Error (exceeded max. size) */ |
igorsk | 0:12b53511e212 | 495 | #define RINFO_ALIGN_ERR 0x08000000 /* Alignment Error */ |
igorsk | 0:12b53511e212 | 496 | #define RINFO_OVERRUN 0x10000000 /* Receive overrun */ |
igorsk | 0:12b53511e212 | 497 | #define RINFO_NO_DESCR 0x20000000 /* No new Descriptor available */ |
igorsk | 0:12b53511e212 | 498 | #define RINFO_LAST_FLAG 0x40000000 /* Last Fragment in Frame */ |
igorsk | 0:12b53511e212 | 499 | #define RINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ |
igorsk | 0:12b53511e212 | 500 | |
igorsk | 0:12b53511e212 | 501 | #define RINFO_ERR_MASK (RINFO_FAIL_FILT | RINFO_CRC_ERR | RINFO_SYM_ERR | \ |
igorsk | 0:12b53511e212 | 502 | RINFO_LEN_ERR | RINFO_ALIGN_ERR | RINFO_OVERRUN) |
igorsk | 0:12b53511e212 | 503 | |
igorsk | 0:12b53511e212 | 504 | /* TX Descriptor Control Word */ |
igorsk | 0:12b53511e212 | 505 | #define TCTRL_SIZE 0x000007FF /* Size of data buffer in bytes */ |
igorsk | 0:12b53511e212 | 506 | #define TCTRL_OVERRIDE 0x04000000 /* Override Default MAC Registers */ |
igorsk | 0:12b53511e212 | 507 | #define TCTRL_HUGE 0x08000000 /* Enable Huge Frame */ |
igorsk | 0:12b53511e212 | 508 | #define TCTRL_PAD 0x10000000 /* Pad short Frames to 64 bytes */ |
igorsk | 0:12b53511e212 | 509 | #define TCTRL_CRC 0x20000000 /* Append a hardware CRC to Frame */ |
igorsk | 0:12b53511e212 | 510 | #define TCTRL_LAST 0x40000000 /* Last Descriptor for TX Frame */ |
igorsk | 0:12b53511e212 | 511 | #define TCTRL_INT 0x80000000 /* Generate TxDone Interrupt */ |
igorsk | 0:12b53511e212 | 512 | |
igorsk | 0:12b53511e212 | 513 | /* TX Status Information Word */ |
igorsk | 0:12b53511e212 | 514 | #define TINFO_COL_CNT 0x01E00000 /* Collision Count */ |
igorsk | 0:12b53511e212 | 515 | #define TINFO_DEFER 0x02000000 /* Packet Deferred (not an error) */ |
igorsk | 0:12b53511e212 | 516 | #define TINFO_EXCESS_DEF 0x04000000 /* Excessive Deferral */ |
igorsk | 0:12b53511e212 | 517 | #define TINFO_EXCESS_COL 0x08000000 /* Excessive Collision */ |
igorsk | 0:12b53511e212 | 518 | #define TINFO_LATE_COL 0x10000000 /* Late Collision Occured */ |
igorsk | 0:12b53511e212 | 519 | #define TINFO_UNDERRUN 0x20000000 /* Transmit Underrun */ |
igorsk | 0:12b53511e212 | 520 | #define TINFO_NO_DESCR 0x40000000 /* No new Descriptor available */ |
igorsk | 0:12b53511e212 | 521 | #define TINFO_ERR 0x80000000 /* Error Occured (OR of all errors) */ |
igorsk | 0:12b53511e212 | 522 | |
igorsk | 0:12b53511e212 | 523 | /* ENET Device Revision ID */ |
igorsk | 0:12b53511e212 | 524 | #define OLD_EMAC_MODULE_ID 0x39022000 /* Rev. ID for first rev '-' */ |
igorsk | 0:12b53511e212 | 525 | |
igorsk | 0:12b53511e212 | 526 | /* DP83848C PHY Registers */ |
igorsk | 0:12b53511e212 | 527 | #define PHY_REG_BMCR 0x00 /* Basic Mode Control Register */ |
igorsk | 0:12b53511e212 | 528 | #define PHY_REG_BMSR 0x01 /* Basic Mode Status Register */ |
igorsk | 0:12b53511e212 | 529 | #define PHY_REG_IDR1 0x02 /* PHY Identifier 1 */ |
igorsk | 0:12b53511e212 | 530 | #define PHY_REG_IDR2 0x03 /* PHY Identifier 2 */ |
igorsk | 0:12b53511e212 | 531 | #define PHY_REG_ANAR 0x04 /* Auto-Negotiation Advertisement */ |
igorsk | 0:12b53511e212 | 532 | #define PHY_REG_ANLPAR 0x05 /* Auto-Neg. Link Partner Abitily */ |
igorsk | 0:12b53511e212 | 533 | #define PHY_REG_ANER 0x06 /* Auto-Neg. Expansion Register */ |
igorsk | 0:12b53511e212 | 534 | #define PHY_REG_ANNPTR 0x07 /* Auto-Neg. Next Page TX */ |
igorsk | 0:12b53511e212 | 535 | |
igorsk | 0:12b53511e212 | 536 | /* PHY Extended Registers */ |
igorsk | 0:12b53511e212 | 537 | #define PHY_REG_STS 0x10 /* Status Register */ |
igorsk | 0:12b53511e212 | 538 | #define PHY_REG_MICR 0x11 /* MII Interrupt Control Register */ |
igorsk | 0:12b53511e212 | 539 | #define PHY_REG_MISR 0x12 /* MII Interrupt Status Register */ |
igorsk | 0:12b53511e212 | 540 | #define PHY_REG_FCSCR 0x14 /* False Carrier Sense Counter */ |
igorsk | 0:12b53511e212 | 541 | #define PHY_REG_RECR 0x15 /* Receive Error Counter */ |
igorsk | 0:12b53511e212 | 542 | #define PHY_REG_PCSR 0x16 /* PCS Sublayer Config. and Status */ |
igorsk | 0:12b53511e212 | 543 | #define PHY_REG_RBR 0x17 /* RMII and Bypass Register */ |
igorsk | 0:12b53511e212 | 544 | #define PHY_REG_LEDCR 0x18 /* LED Direct Control Register */ |
igorsk | 0:12b53511e212 | 545 | #define PHY_REG_PHYCR 0x19 /* PHY Control Register */ |
igorsk | 0:12b53511e212 | 546 | #define PHY_REG_10BTSCR 0x1A /* 10Base-T Status/Control Register */ |
igorsk | 0:12b53511e212 | 547 | #define PHY_REG_CDCTRL1 0x1B /* CD Test Control and BIST Extens. */ |
igorsk | 0:12b53511e212 | 548 | #define PHY_REG_EDCR 0x1D /* Energy Detect Control Register */ |
igorsk | 0:12b53511e212 | 549 | |
igorsk | 0:12b53511e212 | 550 | #define PHY_FULLD_100M 0x2100 /* Full Duplex 100Mbit */ |
igorsk | 0:12b53511e212 | 551 | #define PHY_HALFD_100M 0x2000 /* Half Duplex 100Mbit */ |
igorsk | 0:12b53511e212 | 552 | #define PHY_FULLD_10M 0x0100 /* Full Duplex 10Mbit */ |
igorsk | 0:12b53511e212 | 553 | #define PHY_HALFD_10M 0x0000 /* Half Duplex 10MBit */ |
igorsk | 0:12b53511e212 | 554 | #define PHY_AUTO_NEG 0x3000 /* Select Auto Negotiation */ |
igorsk | 0:12b53511e212 | 555 | |
igorsk | 0:12b53511e212 | 556 | #define DP83848C_DEF_ADR 0x0100 /* Default PHY device address */ |
igorsk | 0:12b53511e212 | 557 | #define DP83848C_ID 0x20005C90 /* PHY Identifier */ |
igorsk | 0:12b53511e212 | 558 | |
igorsk | 0:12b53511e212 | 559 | |
igorsk | 0:12b53511e212 | 560 | /************************************************* |
igorsk | 0:12b53511e212 | 561 | * CodeRed - PHY definitions for RDB1768 rev 2 |
igorsk | 0:12b53511e212 | 562 | * which uses SMSC LAN8720 PHY instead of DP83848C |
igorsk | 0:12b53511e212 | 563 | *************************************************/ |
igorsk | 0:12b53511e212 | 564 | #define LAN8720_ID 0x000730F0 /* PHY Identifier */ |
igorsk | 0:12b53511e212 | 565 | |
igorsk | 0:12b53511e212 | 566 | |
igorsk | 0:12b53511e212 | 567 | |
igorsk | 0:12b53511e212 | 568 | |
igorsk | 0:12b53511e212 | 569 | // Code Red - not required for RDB1768 port |
igorsk | 0:12b53511e212 | 570 | /* |
igorsk | 0:12b53511e212 | 571 | // typedefs |
igorsk | 0:12b53511e212 | 572 | typedef struct { // struct to store CS8900's |
igorsk | 0:12b53511e212 | 573 | unsigned int Addr; // init-sequence |
igorsk | 0:12b53511e212 | 574 | unsigned int Data; |
igorsk | 0:12b53511e212 | 575 | } TInitSeq; |
igorsk | 0:12b53511e212 | 576 | */ |
igorsk | 0:12b53511e212 | 577 | |
igorsk | 0:12b53511e212 | 578 | // Code Red - moved into tcpip.c |
igorsk | 0:12b53511e212 | 579 | /* |
igorsk | 0:12b53511e212 | 580 | // constants |
igorsk | 0:12b53511e212 | 581 | const unsigned char MyMAC[] = // "M1-M2-M3-M4-M5-M6" |
igorsk | 0:12b53511e212 | 582 | { |
igorsk | 0:12b53511e212 | 583 | MYMAC_1, MYMAC_2, MYMAC_3, |
igorsk | 0:12b53511e212 | 584 | MYMAC_4, MYMAC_5, MYMAC_6 |
igorsk | 0:12b53511e212 | 585 | }; |
igorsk | 0:12b53511e212 | 586 | */ |
igorsk | 0:12b53511e212 | 587 | |
igorsk | 0:12b53511e212 | 588 | // Code Red - not required for RDB1768 port |
igorsk | 0:12b53511e212 | 589 | /* |
igorsk | 0:12b53511e212 | 590 | const TInitSeq InitSeq[] = |
igorsk | 0:12b53511e212 | 591 | { |
igorsk | 0:12b53511e212 | 592 | PP_IA, MYMAC_1 + (MYMAC_2 << 8), // set our MAC as Individual Address |
igorsk | 0:12b53511e212 | 593 | PP_IA + 2, MYMAC_3 + (MYMAC_4 << 8), |
igorsk | 0:12b53511e212 | 594 | PP_IA + 4, MYMAC_5 + (MYMAC_6 << 8), |
igorsk | 0:12b53511e212 | 595 | PP_LineCTL, SERIAL_RX_ON | SERIAL_TX_ON, // configure the Physical Interface |
igorsk | 0:12b53511e212 | 596 | PP_RxCTL, RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT |
igorsk | 0:12b53511e212 | 597 | }; |
igorsk | 0:12b53511e212 | 598 | */ |
igorsk | 0:12b53511e212 | 599 | |
igorsk | 0:12b53511e212 | 600 | // prototypes |
igorsk | 0:12b53511e212 | 601 | |
igorsk | 0:12b53511e212 | 602 | // CodeRed - updated for LPC1768 port |
igorsk | 0:12b53511e212 | 603 | /* |
igorsk | 0:12b53511e212 | 604 | void Init8900(void); |
igorsk | 0:12b53511e212 | 605 | void Write8900(unsigned char Address, unsigned int Data); |
igorsk | 0:12b53511e212 | 606 | void WriteFrame8900(unsigned int Data); |
igorsk | 0:12b53511e212 | 607 | unsigned int Read8900(unsigned char Address); |
igorsk | 0:12b53511e212 | 608 | unsigned int ReadFrame8900(void); |
igorsk | 0:12b53511e212 | 609 | unsigned int ReadHB1ST8900(unsigned char Address); |
igorsk | 0:12b53511e212 | 610 | unsigned int ReadFrameBE8900(void); |
igorsk | 0:12b53511e212 | 611 | void CopyToFrame8900(void *Source, unsigned int Size); |
igorsk | 0:12b53511e212 | 612 | void CopyFromFrame8900(void *Dest, unsigned int Size); |
igorsk | 0:12b53511e212 | 613 | void DummyReadFrame8900(unsigned int Size); |
igorsk | 0:12b53511e212 | 614 | void RequestSend(unsigned int FrameSize); |
igorsk | 0:12b53511e212 | 615 | unsigned int Rdy4Tx(void); |
igorsk | 0:12b53511e212 | 616 | */ |
igorsk | 0:12b53511e212 | 617 | |
igorsk | 0:12b53511e212 | 618 | void Init_EthMAC(void); |
igorsk | 0:12b53511e212 | 619 | unsigned short ReadFrameBE_EthMAC(void); |
igorsk | 0:12b53511e212 | 620 | void CopyToFrame_EthMAC(void *Source, unsigned int Size); |
igorsk | 0:12b53511e212 | 621 | void CopyFromFrame_EthMAC(void *Dest, unsigned short Size); |
igorsk | 0:12b53511e212 | 622 | void DummyReadFrame_EthMAC(unsigned short Size); |
igorsk | 0:12b53511e212 | 623 | void RequestSend(unsigned short FrameSize); |
igorsk | 0:12b53511e212 | 624 | unsigned int Rdy4Tx(void); |
igorsk | 0:12b53511e212 | 625 | unsigned short StartReadingFrame(void); |
igorsk | 0:12b53511e212 | 626 | void StopReadingFrame(void); |
igorsk | 0:12b53511e212 | 627 | unsigned int CheckIfFrameReceived(void); |
igorsk | 0:12b53511e212 | 628 | |
igorsk | 0:12b53511e212 | 629 | #endif |
igorsk | 0:12b53511e212 | 630 |