Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of lwip by
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 0x0010 00101 //#define EMAC_RX_DESCRIPTOR_COUNT 0x0010 00102 #define EMAC_TX_DESCRIPTOR_COUNT 0x0005 00103 #define EMAC_RX_DESCRIPTOR_COUNT 0x0005 00104 00105 #define TX_DESCRIPTOR_SIZE (EMAC_TX_DESCRIPTOR_COUNT * 8) 00106 #define RX_DESCRIPTOR_SIZE (EMAC_RX_DESCRIPTOR_COUNT * 8) 00107 #define TX_STATUS_SIZE (EMAC_TX_DESCRIPTOR_COUNT * 4) 00108 #define RX_STATUS_SIZE (EMAC_RX_DESCRIPTOR_COUNT * 8) 00109 #define TOTAL_DESCRIPTOR_SIZE (TX_DESCRIPTOR_SIZE + RX_DESCRIPTOR_SIZE + TX_STATUS_SIZE + RX_STATUS_SIZE) 00110 #define EMAC_DESCRIPTOR_ADDR (EMAC_RAM_ADDR + EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE) 00111 00112 #define TX_DESCRIPTOR_ADDR EMAC_DESCRIPTOR_ADDR 00113 #define TX_STATUS_ADDR (EMAC_DESCRIPTOR_ADDR + TX_DESCRIPTOR_SIZE) 00114 #define RX_DESCRIPTOR_ADDR (TX_STATUS_ADDR + TX_STATUS_SIZE) 00115 #define RX_STATUS_ADDR (RX_DESCRIPTOR_ADDR + RX_DESCRIPTOR_SIZE) 00116 00117 #define EMAC_DMA_ADDR EMAC_RAM_ADDR 00118 #define EMAC_DMA_END EMAC_RAM_ADDR + EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE 00119 #define EMAC_DMA_SIZE EMAC_RAM_SIZE - TOTAL_DESCRIPTOR_SIZE 00120 00121 /* 00122 For EMAC TX and RX buffer, the fixed block size is EMAC_BLOCK_SIZE, there will 00123 EMAC_TX_BLOCK_NUM and EMAC_RX_BLOCK_NUM blocks for TX and RX, the total RAM size used 00124 is EMAC_BLOCK * (EMAC_TX_BLOCK_NUM + EMAC_RX_BLOCK_NUM) = 15360, the TOTAL_DESCRIPTOR_SIZE 00125 is 448, the total RAM, 16384 bytes, is just big enough for buffers and descriptors, 00126 EMA_BUFFER_SIZE + TOTAL_DESCRIPTOR_SIZE = 16256. 00127 00128 Please note, 00129 (1) if the EMAC_DESCRIPTOR_COUNT increases, the EMAC_BUFFER_SIZE needs to be decreased accordingly!!!! 00130 (2) if the TOTAL_EMAC_BLOCK_SIZE increases, the EMAC_BLOCK_NUM needs to be decreased accordingly as well!!! 00131 */ 00132 #define EMAC_BLOCK_SIZE 0x600 00133 #define EMAC_TX_BLOCK_NUM 5 00134 #define EMAC_RX_BLOCK_NUM 5 00135 #define TOTAL_EMAC_BLOCK_NUM (EMAC_TX_BLOCK_NUM = EMAC_RX_BLOCK_NUM) 00136 00137 #define EMAC_BUFFER_SIZE (EMAC_BLOCK_SIZE * (EMAC_TX_BLOCK_NUM + EMAC_RX_BLOCK_NUM )) 00138 #define EMAC_TX_BUFFER_ADDR EMAC_RAM_ADDR 00139 #define EMAC_RX_BUFFER_ADDR (EMAC_RAM_ADDR + EMAC_BLOCK_SIZE * EMAC_TX_BLOCK_NUM) 00140 00141 /* EMAC TX DMA Descriptor */ 00142 typedef struct _EMAC_TX_DESCRIPTOR { 00143 unsigned long TXPacketAddr; /* TX DMA Buffer Address */ 00144 unsigned long TXControl; 00145 } EMAC_TX_DESCRIPTOR; 00146 00147 typedef struct _EMAC_RX_DESCRIPTOR { 00148 unsigned long RXPacketAddr; /* RX DMA Buffer Address */ 00149 unsigned long RXControl; 00150 } EMAC_RX_DESCRIPTOR; 00151 00152 #define RX_DESCRIPTOR_PACKET(i) (*(unsigned int *)(RX_DESCRIPTOR_ADDR + 8*i)) 00153 #define RX_DESCRIPTOR_CTRL(i) (*(unsigned int *)(RX_DESCRIPTOR_ADDR+4 + 8*i)) 00154 #define RX_STATUS_INFO(i) (*(unsigned int *)(RX_STATUS_ADDR + 8*i)) 00155 #define RX_STATUS_HASHCRC(i) (*(unsigned int *)(RX_STATUS_ADDR +4 + 8*i)) 00156 #define TX_DESCRIPTOR_PACKET(i) (*(unsigned int *)(TX_DESCRIPTOR_ADDR + 8*i)) 00157 #define TX_DESCRIPTOR_CTRL(i) (*(unsigned int *)(TX_DESCRIPTOR_ADDR +4 + 8*i)) 00158 #define TX_STATUS_INFO(i) (*(unsigned int *)(TX_STATUS_ADDR + 4*i)) 00159 #define EMAC_RX_BUFFER(i) (EMAC_RX_BUFFER_ADDR + EMAC_BLOCK_SIZE*i) 00160 #define EMAC_TX_BUFFER(i) (EMAC_TX_BUFFER_ADDR + EMAC_BLOCK_SIZE*i) 00161 00162 /* EMAC Descriptor TX and RX Control fields */ 00163 #define EMAC_TX_DESC_INT 0x80000000 00164 #define EMAC_TX_DESC_LAST 0x40000000 00165 #define EMAC_TX_DESC_CRC 0x20000000 00166 #define EMAC_TX_DESC_PAD 0x10000000 00167 #define EMAC_TX_DESC_HUGE 0x08000000 00168 #define EMAC_TX_DESC_OVERRIDE 0x04000000 00169 00170 #define EMAC_RX_DESC_INT 0x80000000 00171 00172 /* EMAC Descriptor status related definition */ 00173 #define TX_DESC_STATUS_ERR 0x80000000 00174 #define TX_DESC_STATUS_NODESC 0x40000000 00175 #define TX_DESC_STATUS_UNDERRUN 0x20000000 00176 #define TX_DESC_STATUS_LCOL 0x10000000 00177 #define TX_DESC_STATUS_ECOL 0x08000000 00178 #define TX_DESC_STATUS_EDEFER 0x04000000 00179 #define TX_DESC_STATUS_DEFER 0x02000000 00180 #define TX_DESC_STATUS_COLCNT 0x01E00000 /* four bits, it's a mask, not exact count */ 00181 00182 #define RX_DESC_STATUS_ERR 0x80000000 00183 #define RX_DESC_STATUS_LAST 0x40000000 00184 #define RX_DESC_STATUS_NODESC 0x20000000 00185 #define RX_DESC_STATUS_OVERRUN 0x10000000 00186 #define RX_DESC_STATUS_ALGNERR 0x08000000 00187 #define RX_DESC_STATUS_RNGERR 0x04000000 00188 #define RX_DESC_STATUS_LENERR 0x02000000 00189 #define RX_DESC_STATUS_SYMERR 0x01000000 00190 #define RX_DESC_STATUS_CRCERR 0x00800000 00191 #define RX_DESC_STATUS_BCAST 0x00400000 00192 #define RX_DESC_STATUS_MCAST 0x00200000 00193 #define RX_DESC_STATUS_FAILFLT 0x00100000 00194 #define RX_DESC_STATUS_VLAN 0x00080000 00195 #define RX_DESC_STATUS_CTLFRAM 0x00040000 00196 00197 #define DESC_SIZE_MASK 0x000007FF /* 11 bits for both TX and RX */ 00198 00199 /* EMAC interrupt controller related definition */ 00200 #define EMAC_INT_RXOVERRUN 0x01 << 0 00201 #define EMAC_INT_RXERROR 0x01 << 1 00202 #define EMAC_INT_RXFINISHED 0x01 << 2 00203 #define EMAC_INT_RXDONE 0x01 << 3 00204 #define EMAC_INT_TXUNDERRUN 0x01 << 4 00205 #define EMAC_INT_TXERROR 0x01 << 5 00206 #define EMAC_INT_TXFINISHED 0x01 << 6 00207 #define EMAC_INT_TXDONE 0x01 << 7 00208 #define EMAC_INT_SOFTINT 0x01 << 12 00209 #define EMAC_INT_WOL 0x01 << 13 00210 00211 #define MAX_PACKET_SIZE 0x600 00212 #define EMAC_HEADER_LENGTH 14 00213 00214 #define I_Bit 0x80 00215 #define F_Bit 0x40 00216 00217 #define SYS32Mode 0x1F 00218 #define IRQ32Mode 0x12 00219 #define FIQ32Mode 0x11 00220 00221 00222 void emac_input(struct netif *netif); 00223 err_t emac_init(struct netif *netif); 00224 #endif
Generated on Tue Jul 12 2022 16:07:15 by
1.7.2
