A version of LWIP, provided for backwards compatibility.
Dependents: AA_DemoBoard DemoBoard HelloServerDemo DemoBoard_RangeIndicator ... more
rmiiif.h
00001 #ifndef RMIIIF_H 00002 #define RMIIIF_H 00003 00004 //The right place for some variables. 00005 #define ACC_BROADCAST 0x0002 /* [1]-accept broadcast */ 00006 #define ACC_MATCH 0x0020 /* [5]accept perfect */ 00007 #define ACC_MULTICAST 0x0005 /* Accept Multicast */ 00008 #define ACC_UNICAST 0x0001 /* Accept Multicast */ 00009 #define ACC_HASH 0x0018 /* Hashing enabled */ 00010 00011 // PHY Registers (National PHY) 00012 #define PHY_BMCR 0x0000 00013 #define PHY_BMSR 0x0001 00014 #define PHY_PHYIDR1 0x0002 00015 #define PHY_PHYIDR2 0x0003 00016 #define PHY_ANAR 0x0004 00017 #define PHY_ANLPAR 0x0005 00018 #define PHY_ANLPARNP 0x0005 00019 #define PHY_ANER 0x0006 00020 #define PHY_ANNPTR 0x0007 00021 00022 #define PHY_PHYSTS 0x0010 00023 #define PHY_MICR 0x0011 00024 #define PHY_MISR 0x0012 00025 #define PHY_RESERVED1 0x0013 00026 #define PHY_FCSCR 0x0014 00027 #define PHY_RECR 0x0015 00028 #define PHY_PCSR 0x0016 00029 #define PHY_RBR 0x0017 00030 #define PHY_LEDCR 0x0018 00031 #define PHY_PHYCR 0x0019 00032 #define PHY_10BTSCR 0x001A 00033 #define PHY_CDCTRL1 0x001B 00034 #define PHY_RESERVED2 0x001C 00035 #define PHY_EDCR 0x001D 00036 00037 // PHY Flags 00038 #define PHY_ADDR (0x0001 << 8) // for National PHY 00039 00040 /* BMCR flags */ 00041 #define BMCR_RESET 0x8000 00042 #define BMCR_LOOPBACK 0x4000 00043 #define BMCR_SPEED_100 0x2000 00044 #define BMCR_AN 0x1000 00045 #define BMCR_POWERDOWN 0x0800 00046 #define BMCR_ISOLATE 0x0400 00047 #define BMCR_RE_AN 0x0200 00048 #define BMCR_DUPLEX 0x0100 00049 00050 #define MII_BMSR_TIMEOUT 0x1000000 00051 00052 #define PHILIPS_EMAC_MODULE_ID ((0x3902 << 16) | 0x2000) 00053 00054 /* BMSR flags */ 00055 #define BMSR_100BE_T4 0x8000 00056 #define BMSR_100TX_FULL 0x4000 00057 #define BMSR_100TX_HALF 0x2000 00058 #define BMSR_10BE_FULL 0x1000 00059 #define BMSR_10BE_HALF 0x0800 00060 #define BMSR_AUTO_DONE 0x0020 00061 #define BMSR_REMOTE_FAULT 0x0010 00062 #define BMSR_NO_AUTO 0x0008 00063 #define BMSR_LINK_ESTABLISHED 0x0004 00064 00065 00066 /* MAC registers and parameters */ 00067 #define PCONP_EMAC_CLOCK 0x40000000 00068 00069 #define SPEED_100 1 00070 #define SPEED_10 0 00071 #define FULL_DUPLEX 1 00072 #define HALF_DUPLEX 0 00073 00074 #define EMAC_RAM_ADDR 0x7FE00000 00075 #define EMAC_RAM_SIZE 0x00004000 00076 #define EMAC_RAM_END EMAC_RAM_ADDR + EMAC_RAM_SIZE 00077 00078 00079 /* 00080 The Ethernet RAM is configured as below, the starting of EMAC_DESCRIPTOR_ADDR depends 00081 on the EMAC_DESCRIPTOR_COUNT or the TOTAL_DESCRIPTOR_SIZE, at this point, the 00082 EMAC_DESCRIPTOR_COUNT for both TX and RX is set to 16: 00083 00084 EMAC_RAM_ADDR 0x7FE00000 00085 EMAC_DMA_ADDR 0x7FE00000 00086 . 00087 EMAC_DMA_END EMAC_RAM_ADDR + EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE 00088 TX_DESCRIPTOR_ADDR = EMAC_DESCRIPTOR_ADDR = EMAC_RAM_END(EMAC_RAM_ADDR+EMAC_RAM_SIZE) - TOTAL_DESCRIPTOR 00089 TX_STATUS_ADDR = TX_DESCRIPTOR_ADDR + TX_DESCRIPTOR_SIZE 00090 RX_DESCRIPTOR_ADDR = TX_DESCRIPTOR_ADDR + TX_DESCRIPTOR_SIZE + TX_STATUS_SIZE 00091 RX_STATUS_ADDR = RX_DESCRIPTOR_ADDR + RX_STATUS_SIZE 00092 ( RX_STATUS_ADDR + RX_STATUS_SIZE = EMAC_RAM_END )!!!!! 00093 EMAX_RAM_END 0x7FE04000 00094 00095 Please note that, the descriptors have to be aligned to the 32 bit boundary!!! 00096 Below descriptor addresses have been carefully aligned to the 32-bit boundary. 00097 If not, the descriptors have to be re-aligned!!! 00098 */ 00099 00100 #define EMAC_TX_DESCRIPTOR_COUNT 0x0003 00101 #define EMAC_RX_DESCRIPTOR_COUNT 0x0005 00102 00103 #define TX_DESCRIPTOR_SIZE (EMAC_TX_DESCRIPTOR_COUNT * 8) 00104 #define RX_DESCRIPTOR_SIZE (EMAC_RX_DESCRIPTOR_COUNT * 8) 00105 #define TX_STATUS_SIZE (EMAC_TX_DESCRIPTOR_COUNT * 4) 00106 #define RX_STATUS_SIZE (EMAC_RX_DESCRIPTOR_COUNT * 8) 00107 #define TOTAL_DESCRIPTOR_SIZE (TX_DESCRIPTOR_SIZE + RX_DESCRIPTOR_SIZE + TX_STATUS_SIZE + RX_STATUS_SIZE) 00108 #define EMAC_DESCRIPTOR_ADDR (EMAC_RAM_ADDR + EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE) 00109 00110 #define TX_DESCRIPTOR_ADDR EMAC_DESCRIPTOR_ADDR 00111 #define TX_STATUS_ADDR (EMAC_DESCRIPTOR_ADDR + TX_DESCRIPTOR_SIZE) 00112 #define RX_DESCRIPTOR_ADDR (TX_STATUS_ADDR + TX_STATUS_SIZE) 00113 #define RX_STATUS_ADDR (RX_DESCRIPTOR_ADDR + RX_DESCRIPTOR_SIZE) 00114 00115 //#define EMAC_DMA_ADDR EMAC_RAM_ADDR 00116 //#define EMAC_DMA_END EMAC_RAM_ADDR + EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE 00117 //#define EMAC_DMA_SIZE EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE 00118 00119 /* 00120 For EMAC TX and RX buffer, the fixed block size is EMAC_BLOCK_SIZE, there will 00121 EMAC_TX_BLOCK_NUM and EMAC_RX_BLOCK_NUM blocks for TX and RX, the total RAM size used 00122 is EMAC_BLOCK * (EMAC_TX_BLOCK_NUM + EMAC_RX_BLOCK_NUM) = 15360, the TOTAL_DESCRIPTOR_SIZE 00123 is 448, the total RAM, 16384 bytes, is just big enough for buffers and descriptors, 00124 EMA_BUFFER_SIZE + TOTAL_DESCRIPTOR_SIZE = 16256. 00125 00126 Please note, 00127 (1) if the EMAC_DESCRIPTOR_COUNT increases, the EMAC_BUFFER_SIZE needs to be decreased accordingly!!!! 00128 (2) if the TOTAL_EMAC_BLOCK_SIZE increases, the EMAC_BLOCK_NUM needs to be decreased accordingly as well!!! 00129 */ 00130 #define EMAC_BLOCK_SIZE 0x300 00131 //0x600 00132 #define EMAC_TX_BLOCK_NUM EMAC_TX_DESCRIPTOR_COUNT 00133 #define EMAC_RX_BLOCK_NUM EMAC_RX_DESCRIPTOR_COUNT 00134 #define TOTAL_EMAC_BLOCK_NUM (EMAC_TX_BLOCK_NUM + EMAC_RX_BLOCK_NUM) 00135 00136 #define EMAC_BUFFER_SIZE (EMAC_BLOCK_SIZE * (EMAC_TX_BLOCK_NUM + EMAC_RX_BLOCK_NUM )) 00137 #define EMAC_TX_BUFFER_ADDR EMAC_RAM_ADDR 00138 #define EMAC_RX_BUFFER_ADDR (EMAC_RAM_ADDR + EMAC_BLOCK_SIZE * EMAC_TX_BLOCK_NUM) 00139 #define EMAC_MEM_ADDR (EMAC_RAM_ADDR + EMAC_BLOCK_SIZE * TOTAL_EMAC_BLOCK_NUM) 00140 #define EMAC_MEM_SIZE (EMAC_DESCRIPTOR_ADDR - EMAC_MEM_ADDR) 00141 00142 /* EMAC TX DMA Descriptor */ 00143 typedef struct _EMAC_TX_DESCRIPTOR { 00144 unsigned long TXPacketAddr; /* TX DMA Buffer Address */ 00145 unsigned long TXControl; 00146 } EMAC_TX_DESCRIPTOR; 00147 00148 typedef struct _EMAC_RX_DESCRIPTOR { 00149 unsigned long RXPacketAddr; /* RX DMA Buffer Address */ 00150 unsigned long RXControl; 00151 } EMAC_RX_DESCRIPTOR; 00152 00153 #define RX_DESCRIPTOR_PACKET(i) (*(unsigned int *)(RX_DESCRIPTOR_ADDR + 8*i)) 00154 #define RX_DESCRIPTOR_CTRL(i) (*(unsigned int *)(RX_DESCRIPTOR_ADDR+4 + 8*i)) 00155 #define RX_STATUS_INFO(i) (*(unsigned int *)(RX_STATUS_ADDR + 8*i)) 00156 #define RX_STATUS_HASHCRC(i) (*(unsigned int *)(RX_STATUS_ADDR +4 + 8*i)) 00157 #define TX_DESCRIPTOR_PACKET(i) (*(unsigned int *)(TX_DESCRIPTOR_ADDR + 8*i)) 00158 #define TX_DESCRIPTOR_CTRL(i) (*(unsigned int *)(TX_DESCRIPTOR_ADDR +4 + 8*i)) 00159 #define TX_STATUS_INFO(i) (*(unsigned int *)(TX_STATUS_ADDR + 4*i)) 00160 #define EMAC_RX_BUFFER(i) (EMAC_RX_BUFFER_ADDR + EMAC_BLOCK_SIZE*i) 00161 #define EMAC_TX_BUFFER(i) (EMAC_TX_BUFFER_ADDR + EMAC_BLOCK_SIZE*i) 00162 00163 /* EMAC Descriptor TX and RX Control fields */ 00164 #define EMAC_TX_DESC_INT 0x80000000 00165 #define EMAC_TX_DESC_LAST 0x40000000 00166 #define EMAC_TX_DESC_CRC 0x20000000 00167 #define EMAC_TX_DESC_PAD 0x10000000 00168 #define EMAC_TX_DESC_HUGE 0x08000000 00169 #define EMAC_TX_DESC_OVERRIDE 0x04000000 00170 00171 #define EMAC_RX_DESC_INT 0x80000000 00172 00173 /* EMAC Descriptor status related definition */ 00174 #define TX_DESC_STATUS_ERR 0x80000000 00175 #define TX_DESC_STATUS_NODESC 0x40000000 00176 #define TX_DESC_STATUS_UNDERRUN 0x20000000 00177 #define TX_DESC_STATUS_LCOL 0x10000000 00178 #define TX_DESC_STATUS_ECOL 0x08000000 00179 #define TX_DESC_STATUS_EDEFER 0x04000000 00180 #define TX_DESC_STATUS_DEFER 0x02000000 00181 #define TX_DESC_STATUS_COLCNT 0x01E00000 /* four bits, it's a mask, not exact count */ 00182 00183 #define RX_DESC_STATUS_ERR 0x80000000 00184 #define RX_DESC_STATUS_LAST 0x40000000 00185 #define RX_DESC_STATUS_NODESC 0x20000000 00186 #define RX_DESC_STATUS_OVERRUN 0x10000000 00187 #define RX_DESC_STATUS_ALGNERR 0x08000000 00188 #define RX_DESC_STATUS_RNGERR 0x04000000 00189 #define RX_DESC_STATUS_LENERR 0x02000000 00190 #define RX_DESC_STATUS_SYMERR 0x01000000 00191 #define RX_DESC_STATUS_CRCERR 0x00800000 00192 #define RX_DESC_STATUS_BCAST 0x00400000 00193 #define RX_DESC_STATUS_MCAST 0x00200000 00194 #define RX_DESC_STATUS_FAILFLT 0x00100000 00195 #define RX_DESC_STATUS_VLAN 0x00080000 00196 #define RX_DESC_STATUS_CTLFRAM 0x00040000 00197 00198 #define DESC_SIZE_MASK 0x000007FF /* 11 bits for both TX and RX */ 00199 00200 /* EMAC interrupt controller related definition */ 00201 #define EMAC_INT_RXOVERRUN 0x01 << 0 00202 #define EMAC_INT_RXERROR 0x01 << 1 00203 #define EMAC_INT_RXFINISHED 0x01 << 2 00204 #define EMAC_INT_RXDONE 0x01 << 3 00205 #define EMAC_INT_TXUNDERRUN 0x01 << 4 00206 #define EMAC_INT_TXERROR 0x01 << 5 00207 #define EMAC_INT_TXFINISHED 0x01 << 6 00208 #define EMAC_INT_TXDONE 0x01 << 7 00209 #define EMAC_INT_SOFTINT 0x01 << 12 00210 #define EMAC_INT_WOL 0x01 << 13 00211 00212 #define MAX_PACKET_SIZE 0x600 00213 #define EMAC_HEADER_LENGTH 14 00214 00215 #define I_Bit 0x80 00216 #define F_Bit 0x40 00217 00218 #define SYS32Mode 0x1F 00219 #define IRQ32Mode 0x12 00220 #define FIQ32Mode 0x11 00221 00222 #endif
Generated on Tue Jul 12 2022 16:06:22 by 1.7.2