xref: /openbmc/u-boot/cmd/aspeed/nettest/comminf.h (revision 91d8613b)
1 /*
2  *  This program is distributed in the hope that it will be useful,
3  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
4  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
5  *  GNU General Public License for more details.
6  *
7  *  You should have received a copy of the GNU General Public License
8  *  along with this program; if not, write to the Free Software
9  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
10  */
11 
12 #ifndef COMMINF_H
13 #define COMMINF_H
14 
15 #include "swfunc.h"
16 
17 #include "mac.h"
18 
19 //---------------------------------------------------------
20 // Print Message
21 //---------------------------------------------------------
22 // for function
23 #define FP_LOG                                   0
24 #define FP_IO                                    1
25 #define STD_OUT                                  2
26 
27 #define PRINTF(i, ...)                                                         \
28 	do {                                                                   \
29 		if (i == STD_OUT) {                                            \
30 			fprintf(stdout, __VA_ARGS__);                          \
31 			break;                                                 \
32 		}                                                              \
33 		if ((display_lantest_log_msg != 0) && (i == FP_LOG)) {         \
34 			fprintf(stdout, "[Log]:   ");                          \
35 			fprintf(stdout, __VA_ARGS__);                          \
36 		}                                                              \
37 	} while (0);
38 
39 //---------------------------------------------------------
40 // Function
41 //---------------------------------------------------------
42   #define SWAP_4B( x )                                                             \
43                                                  ( ( ( ( x ) & 0xff000000 ) >> 24) \
44                                                  | ( ( ( x ) & 0x00ff0000 ) >>  8) \
45                                                  | ( ( ( x ) & 0x0000ff00 ) <<  8) \
46                                                  | ( ( ( x ) & 0x000000ff ) << 24) \
47                                                  )
48   #define SWAP_2B( x )                                                             \
49                                                  ( ( ( ( x ) & 0xff00     ) >>  8) \
50                                                  | ( ( ( x ) & 0x00ff     ) <<  8) \
51                                                  )
52 
53   #define SWAP_2B_BEDN( x )                      ( SWAP_2B ( x ) )
54   #define SWAP_2B_LEDN( x )                      ( x )
55   #define SWAP_4B_BEDN( x )                      ( SWAP_4B ( x ) )
56   #define SWAP_4B_LEDN( x )                      ( x )
57 
58   #define SWAP_4B_BEDN_NCSI( x )                 ( SWAP_4B( x ) )
59   #define SWAP_4B_LEDN_NCSI( x )                 ( x )
60 
61 #if defined(ENABLE_BIG_ENDIAN_MEM)
62   #define SWAP_4B_LEDN_MEM( x )                  ( SWAP_4B( x ) )
63 #else
64   #define SWAP_4B_LEDN_MEM( x )                  ( x )
65 #endif
66 #if defined(ENABLE_BIG_ENDIAN_REG)
67   #define SWAP_4B_LEDN_REG( x )                  ( SWAP_4B( x ) )
68 #else
69   #define SWAP_4B_LEDN_REG( x )                  ( x )
70 #endif
71 
72 #define DELAY( x )                       	udelay( ( x ) * 1000 )
73 #define GET_CAHR                         	getc
74 
75 //---------------------------------------------------------
76 // Default argument
77 //---------------------------------------------------------
78 #define  DEF_GUSER_DEF_PACKET_VAL                0xaaaaaaaa     //0xff00ff00, 0xf0f0f0f0, 0xcccccccc, 0x55aa55aa, 0x5a5a5a5a, 0x66666666
79 #define  DEF_GIOTIMINGBUND                       2
80 #define  DEF_GPHY_ADR                            0
81 #define  DEF_GTESTMODE                           0              //[0]0: no burst mode, 1: 0xff, 2: 0x55, 3: random, 4: ARP, 5: ARP, 6: IO timing, 7: IO timing+IO Strength
82 #define  DEF_GLOOP_MAX                           1
83 #define  DEF_GCTRL                               0
84 
85 #define  SET_1GBPS                               BIT(0)
86 #define  SET_100MBPS                             BIT(1)
87 #define  SET_10MBPS                              BIT(2)
88 #define  SET_1G_100M_10MBPS                      (SET_1GBPS | SET_100MBPS | SET_10MBPS)
89 #define  SET_100M_10MBPS                         (SET_100MBPS | SET_10MBPS)
90 
91 #define  DEF_GSPEED                              SET_1G_100M_10MBPS
92 #define  DEF_GARPNUMCNT                          0
93 
94 //---------------------------------------------------------
95 // MAC information
96 //---------------------------------------------------------
97 
98 #define MDC_Thres                                0x3f
99 #define MAC_PHYWr                                0x08000000
100 #define MAC_PHYRd                                0x04000000
101 
102 #ifdef CONFIG_ASPEED_AST2600
103 #define MAC_PHYWr_New 	(BIT(31) | BIT(28) | (0x1 << 26)) /* 0x94000000 */
104 #define MAC_PHYRd_New 	(BIT(31) | BIT(28) | (0x2 << 26)) /* 0x98000000 */
105 #define MAC_PHYBusy_New	BIT(31)
106 #else
107 #define MAC_PHYWr_New                            0x00009400
108 #define MAC_PHYRd_New                            0x00009800
109 #define MAC_PHYBusy_New                          0x00008000
110 #endif
111 
112 #define MAC_048_def                          0x000002F1 //default 0xf1
113 //#define MAC_058_def                              0x00000040 //0x000001c0
114 
115 //---------------------------------------------------------
116 // Data information
117 //---------------------------------------------------------
118 #define ZeroCopy_OFFSET                    (( eng->run.tm_tx_only ) ? 0 : 2)
119 
120 //      --------------------------------- DRAM_MapAdr            = tdes_base
121 //              | TX descriptor ring    |
122 //              ------------------------- DRAM_MapAdr + 0x040000 = rdes_base
123 //              | RX descriptor ring    |
124 //              -------------------------
125 //              | Reserved              |
126 //              -------------------------
127 //              | Reserved              |
128 //      --------------------------------- DRAM_MapAdr + 0x100000 = DMA_BASE    -------------------------
129 //              |   #1                  |  \                                   |     #1     Tx         |
130 //  DMA buffer  |                       |   DMA_BufSize                        |      LOOP = 0         |
131 // ( Tx/Rx )    -------------------------  /                                   --------------------------------------------------
132 //              |   #2                  |                                      |     #2     Rx         |  #2     Tx             |
133 //              |                       |                                      |      LOOP = 0         |   LOOP = 1             |
134 //              -------------------------                                      --------------------------------------------------
135 //              |   #3                  |                                                              |  #3     Rx             |
136 //              |                       |                                                              |   LOOP = 1             |
137 //              -------------------------                                                              -------------------------
138 //              |   #4                  |                                                                                     ..........
139 //              |                       |
140 //              -------------------------
141 //              |   #5                  |
142 //              |                       |
143 //              -------------------------
144 //              |   #6                  |
145 //              |                       |
146 //              -------------------------
147 //                           .
148 //                           .
149 //              -------------------------
150 //              |   #n, n = DMA_BufNum  |
151 //              |                       |
152 //      ---------------------------------
153 
154 #define BUF_SIZE			0x04000000
155 #define TDES_SIZE			0x00040000
156 #define RDES_SIZE			0x00040000
157 #define RESV_SIZE			0x00000000		/* reserved */
158 
159 #define TDES_IniVal (0xb0000000 + eng->dat.FRAME_LEN_Cur)
160 #define RDES_IniVal (0x00000fff)
161 #define EOR_IniVal (0x40000000)
162 #define HWOwnTx(dat) (dat & 0x80000000)
163 #define HWOwnRx(dat) ((dat & 0x80000000) == 0)
164 #define HWEOR(dat) (dat & 0x40000000)
165 
166 #define AT_MEMRW_BUF(x) ((x) - ASPEED_DRAM_BASE)
167 #define AT_BUF_MEMRW(x) ((x) + ASPEED_DRAM_BASE)
168 
169 //---------------------------------------------------------
170 // Error Flag Bits
171 //---------------------------------------------------------
172 #define Err_Flag_MACMode                              ( 1 <<  0 )   // MAC interface mode mismatch
173 #define Err_Flag_PHY_Type                             ( 1 <<  1 )   // Unidentifiable PHY
174 #define Err_Flag_MALLOC_FrmSize                       ( 1 <<  2 )   // Malloc fail at frame size buffer
175 #define Err_Flag_MALLOC_LastWP                        ( 1 <<  3 )   // Malloc fail at last WP buffer
176 #define Err_Flag_Check_Buf_Data                       ( 1 <<  4 )   // Received data mismatch
177 #define Err_Flag_Check_Des                            ( 1 <<  5 )   // Descriptor error
178 #define Err_Flag_NCSI_LinkFail                        ( 1 <<  6 )   // NCSI packet retry number over flows
179 #define Err_Flag_NCSI_Check_TxOwnTimeOut              ( 1 <<  7 )   // Time out of checking Tx owner bit in NCSI packet
180 #define Err_Flag_NCSI_Check_RxOwnTimeOut              ( 1 <<  8 )   // Time out of checking Rx owner bit in NCSI packet
181 #define Err_Flag_NCSI_Check_ARPOwnTimeOut             ( 1 <<  9 )   // Time out of checking ARP owner bit in NCSI packet
182 #define Err_Flag_NCSI_No_PHY                          ( 1 << 10 )   // Can not find NCSI PHY
183 #define Err_Flag_NCSI_Channel_Num                     ( 1 << 11 )   // NCSI Channel Number Mismatch
184 #define Err_Flag_NCSI_Package_Num                     ( 1 << 12 )   // NCSI Package Number Mismatch
185 #define Err_Flag_PHY_TimeOut_RW                       ( 1 << 13 )   // Time out of read/write PHY register
186 #define Err_Flag_PHY_TimeOut_Rst                      ( 1 << 14 )   // Time out of reset PHY register
187 #define Err_Flag_RXBUF_UNAVA                          ( 1 << 15 )   // MAC00h[2]:Receiving buffer unavailable
188 #define Err_Flag_RPKT_LOST                            ( 1 << 16 )   // MAC00h[3]:Received packet lost due to RX FIFO full
189 #define Err_Flag_NPTXBUF_UNAVA                        ( 1 << 17 )   // MAC00h[6]:Normal priority transmit buffer unavailable
190 #define Err_Flag_TPKT_LOST                            ( 1 << 18 )   // MAC00h[7]:Packets transmitted to Ethernet lost
191 #define Err_Flag_DMABufNum                            ( 1 << 19 )   // DMA Buffer is not enough
192 #define Err_Flag_IOMargin                             ( 1 << 20 )   // IO timing margin is not enough
193 #define Err_Flag_IOMarginOUF                          ( 1 << 21 )   // IO timing testing out of boundary
194 #define Err_Flag_MHCLK_Ratio                          ( 1 << 22 )   // Error setting of MAC AHB bus clock (SCU08[18:16])
195 
196 #define Wrn_Flag_IOMarginOUF                          ( 1 <<  0 )   // IO timing testing out of boundary
197 #define Wrn_Flag_RxErFloatting                        ( 1 <<  1 )   // NCSI RXER pin may be floatting to the MAC
198 //#define Wrn_Flag_RMIICK_IOMode                        ( 1 <<  2 )   // The PHY's RMII refreence clock input/output mode
199 
200 #define PHY_Flag_RMIICK_IOMode_RTL8201E               ( 1 <<  0 )
201 #define PHY_Flag_RMIICK_IOMode_RTL8201F               ( 1 <<  1 )
202 
203 #define Des_Flag_TxOwnTimeOut                         ( 1 <<  0 )   // Time out of checking Tx owner bit
204 #define Des_Flag_RxOwnTimeOut                         ( 1 <<  1 )   // Time out of checking Rx owner bit
205 #define Des_Flag_FrameLen                             ( 1 <<  2 )   // Frame length mismatch
206 #define Des_Flag_RxErr                                ( 1 <<  3 )   // Input signal RxErr
207 #define Des_Flag_CRC                                  ( 1 <<  4 )   // CRC error of frame
208 #define Des_Flag_FTL                                  ( 1 <<  5 )   // Frame too long
209 #define Des_Flag_Runt                                 ( 1 <<  6 )   // Runt packet
210 #define Des_Flag_OddNibble                            ( 1 <<  7 )   // Nibble bit happen
211 #define Des_Flag_RxFIFOFull                           ( 1 <<  8 )   // Rx FIFO full
212 
213 #define NCSI_Flag_Get_Version_ID                      ( 1 <<  0 )   // Time out when Get Version ID
214 #define NCSI_Flag_Get_Capabilities                    ( 1 <<  1 )   // Time out when Get Capabilities
215 #define NCSI_Flag_Select_Active_Package               ( 1 <<  2 )   // Time out when Select Active Package
216 #define NCSI_Flag_Enable_Set_MAC_Address              ( 1 <<  3 )   // Time out when Enable Set MAC Address
217 #define NCSI_Flag_Enable_Broadcast_Filter             ( 1 <<  4 )   // Time out when Enable Broadcast Filter
218 #define NCSI_Flag_Enable_Network_TX                   ( 1 <<  5 )   // Time out when Enable Network TX
219 #define NCSI_Flag_Enable_Channel                      ( 1 <<  6 )   // Time out when Enable Channel
220 #define NCSI_Flag_Disable_Network_TX                  ( 1 <<  7 )   // Time out when Disable Network TX
221 #define NCSI_Flag_Disable_Channel                     ( 1 <<  8 )   // Time out when Disable Channel
222 #define NCSI_Flag_Select_Package                      ( 1 <<  9 )   // Time out when Select Package
223 #define NCSI_Flag_Deselect_Package                    ( 1 << 10 )   // Time out when Deselect Package
224 #define NCSI_Flag_Set_Link                            ( 1 << 11 )   // Time out when Set Link
225 #define NCSI_Flag_Get_Controller_Packet_Statistics    ( 1 << 12 )   // Time out when Get Controller Packet Statistics
226 #define NCSI_Flag_Reset_Channel                       ( 1 << 13 )   // Time out when Reset Channel
227 
228 //---------------------------------------------------------
229 // DMA Buffer information
230 //---------------------------------------------------------
231 #define DMA_BUF_SIZE				(56 * 1024 * 1024)
232 extern uint8_t dma_buf[DMA_BUF_SIZE];
233 
234 #define DMA_BASE				((uint32_t)(&dma_buf[0]))
235 /* The size of one LAN packet */
236 #define DMA_PakSize 				(2 * 1024)
237 
238 #ifdef SelectSimpleBoundary
239 #define DMA_BufSize (((((p_eng->dat.Des_Num + 15) * DMA_PakSize) >> 2) << 2))
240 #else
241 #define DMA_BufSize                                                            \
242 	(4 + ((((p_eng->dat.Des_Num + 15) * DMA_PakSize) >> 2) << 2))
243 #endif
244 #define DMA_BufNum (DMA_BUF_SIZE / (p_eng->dat.DMABuf_Size))
245 
246 /* get DMA buffer address according to the loop counter */
247 #define GET_DMA_BASE(p_eng, x)                                                 \
248 	(DMA_BASE + ((((x) % p_eng->dat.DMABuf_Num)) * p_eng->dat.DMABuf_Size))
249 
250 #define SEED_START                               8
251 #define DATA_SEED(seed)                          ( ( seed ) | (( seed + 1 ) << 16 ) )
252 #define DATA_IncVal                              0x00020001
253 #define PktByteSize                              ( ( ( ( ZeroCopy_OFFSET + eng->dat.FRAME_LEN_Cur - 1 ) >> 2 ) + 1) << 2 )
254 
255 //---------------------------------------------------------
256 // Delay (ms)
257 //---------------------------------------------------------
258 //#define Delay_DesGap                             1    //off
259 //#define Delay_CntMax                             40
260 //#define Delay_CntMax                             1000
261 //#define Delay_CntMax                             8465
262 //#define Delay_CntMaxIncVal                       50000
263 #define Delay_CntMaxIncVal                       47500
264 
265 
266 //#define Delay_ChkRxOwn                           1
267 //#define Delay_ChkTxOwn                           1
268 
269 #define Delay_PHYRst                             100
270 //#define Delay_PHYRd                              5
271 #define Delay_PHYRd                              1         //20150423
272 
273 #define Delay_MACRst                             1
274 #define Delay_MACDump                            1
275 
276 //#define Delay_DES                                1
277 
278 //---------------------------------------------------------
279 // Time Out
280 //---------------------------------------------------------
281 #define TIME_OUT_Des_1G                      10000     //400
282 #define TIME_OUT_Des_100M                    20000     //4000
283 #define TIME_OUT_Des_10M                     50000     //20000
284 #define TIME_OUT_NCSI                        100000    //40000
285 #define TIME_OUT_PHY_RW                      2000000   //100000
286 #define TIME_OUT_PHY_Rst                     20000     //1000
287 
288 //---------------------------------------------------------
289 // Chip memory MAP
290 //---------------------------------------------------------
291 typedef union {
292 	uint32_t w;
293 	struct {
294 		uint32_t txdma_en		: 1;	/* bit[0] */
295 		uint32_t rxdma_en		: 1;	/* bit[1] */
296 		uint32_t txmac_en		: 1;	/* bit[2] */
297 		uint32_t rxmac_en		: 1;	/* bit[3] */
298 		uint32_t rm_vlan		: 1;	/* bit[4] */
299 		uint32_t hptxr_en		: 1;	/* bit[5] */
300 		uint32_t phy_link_sts_dtct	: 1;	/* bit[6] */
301 		uint32_t enrx_in_halftx		: 1;	/* bit[7] */
302 		uint32_t fulldup		: 1;	/* bit[8] */
303 		uint32_t gmac_mode		: 1;	/* bit[9] */
304 		uint32_t crc_apd		: 1;	/* bit[10] */
305 #ifdef CONFIG_ASPEED_AST2600
306 		uint32_t reserved_1		: 1;	/* bit[11] */
307 #else
308 		uint32_t phy_link_lvl_dtct	: 1;	/* bit[11] */
309 #endif
310 		uint32_t rx_runt		: 1;	/* bit[12] */
311 		uint32_t jumbo_lf		: 1;	/* bit[13] */
312 		uint32_t rx_alladr		: 1;	/* bit[14] */
313 		uint32_t rx_ht_en		: 1;	/* bit[15] */
314 		uint32_t rx_multipkt_en		: 1;	/* bit[16] */
315 		uint32_t rx_broadpkt_en		: 1;	/* bit[17] */
316 		uint32_t discard_crcerr		: 1;	/* bit[18] */
317 		uint32_t speed_100		: 1;	/* bit[19] */
318 		uint32_t reserved_0		: 11;	/* bit[30:20] */
319 		uint32_t sw_rst			: 1;	/* bit[31] */
320 	}b;
321 } mac_cr_t;
322 // ========================================================
323 // For ncsi.c
324 
325 #define DEF_GPACKAGE2NUM                         1         // Default value
326 #define DEF_GCHANNEL2NUM                         1         // Default value
327 
328 //---------------------------------------------------------
329 // Variable
330 //---------------------------------------------------------
331 //NC-SI Command Packet
332 typedef struct {
333 //Ethernet Header
334 	unsigned char        DA[6];                        // Destination Address
335 	unsigned char        SA[6];                        // Source Address
336 	uint16_t       EtherType;                    // DMTF NC-SI, it should be 0x88F8
337 //NC-SI Control Packet
338 	unsigned char        MC_ID;                        // Management Controller should set this field to 0x00
339 	unsigned char        Header_Revision;              // For NC-SI 1.0 spec, this field has to set 0x01
340 	unsigned char        Reserved_1;                   // Reserved has to set to 0x00
341 	unsigned char        IID;                          // Instance ID
342 	unsigned char        Command;
343 //	unsigned char        Channel_ID;
344 	unsigned char        ChID;
345 	uint16_t	Payload_Length;               // Payload Length = 12 bits, 4 bits are reserved
346 	uint32_t	Reserved_2;
347 	uint32_t	Reserved_3;
348 
349 	uint16_t	Reserved_4;
350 	uint16_t	Reserved_5;
351 	uint16_t	Response_Code;
352 	uint16_t       Reason_Code;
353 	unsigned char        Payload_Data[64];
354 #if !defined(SLT_UBOOT)
355 }  NCSI_Command_Packet;
356 #else
357 }  __attribute__ ((__packed__)) NCSI_Command_Packet;
358 #endif
359 
360 //NC-SI Response Packet
361 typedef struct {
362 	unsigned char        DA[6];
363 	unsigned char        SA[6];
364 	uint16_t       EtherType;                    //DMTF NC-SI
365 //NC-SI Control Packet
366 	unsigned char        MC_ID;                        //Management Controller should set this field to 0x00
367 	unsigned char        Header_Revision;              //For NC-SI 1.0 spec, this field has to set 0x01
368 	unsigned char        Reserved_1;                   //Reserved has to set to 0x00
369 	unsigned char        IID;                          //Instance ID
370 	unsigned char        Command;
371 //	unsigned char        Channel_ID;
372 	unsigned char        ChID;
373 	uint16_t       Payload_Length;               //Payload Length = 12 bits, 4 bits are reserved
374 	uint16_t       Reserved_2;
375 	uint16_t       Reserved_3;
376 	uint16_t       Reserved_4;
377 	uint16_t       Reserved_5;
378 
379 	uint16_t       Response_Code;
380 	uint16_t       Reason_Code;
381 	unsigned char        Payload_Data[64];
382 #if !defined(SLT_UBOOT)
383 }  NCSI_Response_Packet;
384 #else
385 }  __attribute__ ((__packed__)) NCSI_Response_Packet;
386 #endif
387 
388 typedef struct {
389 	unsigned char        All_ID                                   ;
390 	unsigned char        Package_ID                               ;
391 	unsigned char        Channel_ID                               ;
392 	uint32_t Capabilities_Flags                       ;
393 	uint32_t Broadcast_Packet_Filter_Capabilities     ;
394 	uint32_t Multicast_Packet_Filter_Capabilities     ;
395 	uint32_t Buffering_Capabilities                   ;
396 	uint32_t AEN_Control_Support                      ;
397 	unsigned char        VLAN_Filter_Count                        ;
398 	unsigned char        Mixed_Filter_Count                       ;
399 	unsigned char        Multicast_Filter_Count                   ;
400 	unsigned char        Unicast_Filter_Count                     ;
401 	unsigned char        VLAN_Mode_Support                        ;
402 	unsigned char        Channel_Count                            ;
403 	uint32_t PCI_DID_VID                              ;
404 	uint32_t manufacturer_id                           ;
405 } NCSI_Capability;
406 
407 typedef struct {
408 	mac_cr_t maccr;
409 	uint32_t mac_madr;
410 	uint32_t mac_ladr;
411 	uint32_t mac_fear;
412 
413 	uint32_t WDT_00c                       ;
414 	uint32_t WDT_02c                       ;
415 	uint32_t WDT_04c                       ;
416 
417 	int8_t                 SCU_oldvld;
418 } mac_reg_t;
419 typedef struct {
420 	uint8_t ast2600;
421 	uint8_t ast2500;
422 	uint8_t mac_num;
423 	uint8_t is_new_mdio_reg[4];
424 
425 	uint8_t is_1g_valid[4];
426 	uint8_t at_least_1g_valid;
427 	uint8_t MHCLK_Ratio;
428 } mac_env_t;
429 
430 typedef union {
431 	uint32_t w;
432 	struct {
433 		uint32_t phy_skip_init	: 1;	/* bit[0] */
434 		uint32_t phy_skip_deinit: 1;	/* bit[1] */
435 		uint32_t phy_skip_check	: 1;	/* bit[2] */
436 		uint32_t reserved_0	: 1;	/* bit[3] */
437 		uint32_t phy_int_loopback : 1;	/* bit[4] */
438 		uint32_t mac_int_loopback : 1;	/* bit[5] */
439 		uint32_t reserved_1	: 2;	/* bit[7:6] */
440 		uint32_t rmii_50m_out	: 1;	/* bit[8] */
441 		uint32_t rmii_phy_in	: 1;	/* bit[9] */
442 		uint32_t inv_rgmii_rxclk: 1;	/* bit[10] */
443 		uint32_t reserved_2	: 1;	/* bit[11] */
444 		uint32_t single_packet	: 1;	/* bit[12] */
445 		uint32_t full_range	: 1;	/* bit[13] */
446 		uint32_t reserved_3	: 2;	/* bit[15:14] */
447 		uint32_t print_ncsi	: 1;	/* bit[16] */
448 		uint32_t skip_rx_err	: 1;	/* bit[17] */
449 	} b;
450 } mac_arg_ctrl_t;
451 typedef struct {
452 	uint32_t run_mode;		/* select dedicated or NCSI */
453 	uint32_t mac_idx;		/* argv[1] */
454 	uint32_t mdio_idx;
455 	uint32_t run_speed;		/* argv[2] for dedicated */
456 	mac_arg_ctrl_t ctrl;		/* argv[3] for dedicated
457 					   argv[6] for ncsi */
458 	uint32_t loop_max;		/* argv[4] for dedicated */
459 	uint32_t loop_inf;		/* argv[4] for dedicated */
460 
461 	uint32_t GPackageTolNum;	/* argv[2] for ncsi */
462 	uint32_t GChannelTolNum;	/* argv[3] for ncsi */
463 
464 	uint32_t test_mode;		/* argv[5] for dedicated
465 					   argv[4] for ncsi */
466 
467 	uint32_t phy_addr;		/* argv[6] for dedicated */
468 	uint32_t delay_scan_range;	/* argv[7] for dedicated
469 					   argv[5] for ncsi */
470 	uint32_t ieee_sel;		/* argv[7] for dedicated */
471 
472 	uint32_t GARPNumCnt;		/* argv[7] for ncsi */
473 	uint32_t user_def_val;		/* argv[8] for dedicated */
474 } mac_arg_t;
475 typedef struct {
476 	uint32_t mac_idx;
477 	uint32_t mac_base;
478 	uint32_t mdio_idx;
479 	uint32_t mdio_base;
480 	uint32_t is_rgmii;
481 	uint32_t ieee_sel;		/* derived from delay_scan_range */
482 
483 	uint32_t tdes_base;
484 	uint32_t rdes_base;
485 
486 	uint32_t ncsi_tdes_base;
487 	uint32_t ncsi_rdes_base;
488 
489 	uint32_t LOOP_CheckNum                 ;
490 	uint32_t CheckBuf_MBSize               ;
491 	uint32_t timeout_th;	/* time out threshold (varies with run-speed) */
492 
493 	uint32_t loop_max;
494 	uint32_t loop_of_cnt;
495 	uint32_t loop_cnt;
496 	uint32_t speed_idx;
497 	int                  NCSI_RxTimeOutScale           ;
498 
499 	uint8_t speed_cfg[3];
500 	uint8_t speed_sel[3];
501 
502 	/* test mode */
503 	uint8_t delay_margin;
504 	uint8_t tm_tx_only;
505 	int8_t                 TM_IEEE                       ;//test_mode
506 	int8_t                 TM_IOTiming                   ;//test_mode
507 	int8_t                 TM_IOStrength                 ;//test_mode
508 	int8_t                 TM_TxDataEn                   ;//test_mode
509 	int8_t                 TM_RxDataEn                   ;//test_mode
510 	int8_t                 TM_WaitStart                  ;//test_mode
511 	int8_t                 TM_DefaultPHY                 ;//test_mode
512 	int8_t                 TM_NCSI_DiSChannel            ;//test_mode
513 
514 	int8_t                 IO_MrgChk                     ;
515 
516 
517 } MAC_Running;
518 typedef struct {
519 	int8_t                 SA[6]                         ;
520 } MAC_Information;
521 typedef struct {
522 	uint32_t mdio_base;
523 	uint32_t loopback;
524 	uint8_t phy_name[64];
525 	int8_t                 default_phy                   ;
526 	int8_t                 Adr                           ;
527 
528 	uint32_t PHY_ID3                       ;
529 	uint32_t PHY_ID2                       ;
530 
531 	uint32_t PHY_00h                       ;
532 	uint32_t PHY_06h                       ;
533 	uint32_t PHY_09h                       ;
534 	uint32_t PHY_0eh                       ;
535 	uint32_t PHY_10h                       ;
536 	uint32_t PHY_11h                       ;
537 	uint32_t PHY_12h                       ;
538 	uint32_t PHY_14h                       ;
539 	uint32_t PHY_15h                       ;
540 	uint32_t PHY_18h                       ;
541 	uint32_t PHY_19h                       ;
542 	uint32_t PHY_1ch                       ;
543 	uint32_t PHY_1eh                       ;
544 	uint32_t PHY_1fh                       ;
545 	uint32_t PHY_06hA[7]                   ;
546 
547 	uint32_t RMIICK_IOMode                 ;
548 } MAC_PHY;
549 
550 #ifdef CONFIG_ASPEED_AST2600
551 typedef union {
552 	uint32_t w;
553 	struct {
554 		uint32_t tx_delay_1		: 6;	/* bit[5:0] */
555 		uint32_t tx_delay_2		: 6;	/* bit[11:6] */
556 		uint32_t rx_delay_1		: 6;	/* bit[17:12] */
557 		uint32_t rx_delay_2		: 6;	/* bit[23:18] */
558 		uint32_t rx_clk_inv_1 		: 1;	/* bit[24] */
559 		uint32_t rx_clk_inv_2 		: 1;	/* bit[25] */
560 		uint32_t rmii_tx_data_at_falling_1 : 1; /* bit[26] */
561 		uint32_t rmii_tx_data_at_falling_2 : 1; /* bit[27] */
562 		uint32_t rgmiick_pad_dir	: 1;	/* bit[28] */
563 		uint32_t rmii_50m_oe_1 		: 1;	/* bit[29] */
564 		uint32_t rmii_50m_oe_2		: 1;	/* bit[30] */
565 		uint32_t rgmii_125m_o_sel 	: 1;	/* bit[31] */
566 	}b;
567 } mac_delay_1g_t;
568 
569 typedef union {
570 	uint32_t w;
571 	struct {
572 		uint32_t tx_delay_1		: 6;	/* bit[5:0] */
573 		uint32_t tx_delay_2		: 6;	/* bit[11:6] */
574 		uint32_t rx_delay_1		: 6;	/* bit[17:12] */
575 		uint32_t rx_delay_2		: 6;	/* bit[23:18] */
576 		uint32_t rx_clk_inv_1 		: 1;	/* bit[24] */
577 		uint32_t rx_clk_inv_2 		: 1;	/* bit[25] */
578 		uint32_t reserved_0 		: 6;	/* bit[31:26] */
579 	}b;
580 } mac_delay_100_10_t;
581 #else
582 typedef union {
583 	uint32_t w;
584 	struct {
585 		uint32_t tx_delay_1		: 6;	/* bit[5:0] */
586 		uint32_t tx_delay_2		: 6;	/* bit[11:6] */
587 		uint32_t rx_delay_1		: 6;	/* bit[17:12] */
588 		uint32_t rx_delay_2		: 6;	/* bit[23:18] */
589 		uint32_t rmii_tx_data_at_falling_1 : 1; /* bit[24] */
590 		uint32_t rmii_tx_data_at_falling_2 : 1; /* bit[25] */
591 		uint32_t reserved		: 3;	/* bit[28:26] */
592 		uint32_t rmii_50m_oe_1 		: 1;	/* bit[29] */
593 		uint32_t rmii_50m_oe_2		: 1;	/* bit[30] */
594 		uint32_t rgmii_125m_o_sel 	: 1;	/* bit[31] */
595 	}b;
596 } mac_delay_1g_t;
597 
598 typedef union {
599 	uint32_t w;
600 	struct {
601 		uint32_t tx_delay_1		: 6;	/* bit[5:0] */
602 		uint32_t tx_delay_2		: 6;	/* bit[11:6] */
603 		uint32_t rx_delay_1		: 6;	/* bit[17:12] */
604 		uint32_t rx_delay_2		: 6;	/* bit[23:18] */
605 		uint32_t enable 		: 1;	/* bit[24] */
606 		uint32_t reserved_0 		: 7;	/* bit[31:25] */
607 	}b;
608 } mac_delay_100_10_t;
609 #endif
610 
611 typedef struct mac_delay_1g_reg_s {
612 	uint32_t addr;
613 	int32_t tx_min;
614 	int32_t tx_max;
615 	int32_t rx_min;
616 	int32_t rx_max;
617 	int32_t rmii_tx_min;
618 	int32_t rmii_tx_max;
619 	int32_t rmii_rx_min;
620 	int32_t rmii_rx_max;
621 	mac_delay_1g_t value;	/* backup register value */
622 } mac_delay_1g_reg_t;
623 
624 typedef struct mac_delay_100_10_reg_s {
625 	uint32_t addr;
626 	int32_t tx_min;
627 	int32_t tx_max;
628 	int32_t rx_min;
629 	int32_t rx_max;
630 	mac_delay_100_10_t value;
631 } mac_delay_100_10_reg_t;
632 
633 #ifdef CONFIG_ASPEED_AST2600
634 typedef union {
635 	uint32_t w;
636 	struct {
637 		uint32_t mac3_tx_drv		: 2;	/* bit[1:0] */
638 		uint32_t mac4_tx_drv		: 2;	/* bit[3:2] */
639 		uint32_t reserved_0		: 28;	/* bit[31:4] */
640 	}b;
641 } mac34_drv_t;
642 typedef struct mac34_drv_reg_s {
643 	uint32_t addr;
644 	uint32_t drv_max;
645 	mac34_drv_t value;
646 } mac34_drv_reg_t;
647 
648 #else
649 typedef union {
650 	uint32_t w;
651 	struct {
652 		uint32_t reserved_0		: 8;	/* bit[7:0] */
653 		uint32_t mac1_rmii_tx_drv	: 1;	/* bit[8] */
654 		uint32_t mac1_rgmii_tx_drv	: 1;	/* bit[9] */
655 		uint32_t mac2_rmii_tx_drv	: 1;	/* bit[10] */
656 		uint32_t mac2_rgmii_tx_drv	: 1;	/* bit[11] */
657 		uint32_t reserved_1		: 20;	/* bit[31:12] */
658 	}b;
659 } mac12_drv_t;
660 
661 typedef struct mac12_drv_reg_s {
662 	uint32_t addr;
663 	uint32_t drv_max;
664 	mac12_drv_t value;
665 } mac12_drv_reg_t;
666 #endif
667 
668 typedef struct delay_scan_s {
669 	int8_t begin;
670 	int8_t end;
671 	int8_t step;
672 	int8_t orig;
673 } delay_scan_t;
674 typedef struct {
675 	/* driving strength */
676 #ifdef CONFIG_ASPEED_AST2600
677 	mac34_drv_reg_t mac34_drv_reg;
678 #else
679 	mac12_drv_reg_t mac12_drv_reg;
680 #endif
681 	uint32_t drv_upper_bond;
682 	uint32_t drv_lower_bond;
683 	uint32_t drv_curr;
684 
685 	mac_delay_1g_reg_t mac12_1g_delay;
686 	mac_delay_1g_reg_t mac34_1g_delay;
687 	mac_delay_100_10_reg_t mac12_100m_delay;
688 	mac_delay_100_10_reg_t mac34_100m_delay;
689 	mac_delay_100_10_reg_t mac12_10m_delay;
690 	mac_delay_100_10_reg_t mac34_10m_delay;
691 
692 	delay_scan_t tx_delay_scan;
693 	delay_scan_t rx_delay_scan;
694 
695 	char                 Dly_reg_name_tx[32];
696 	char                 Dly_reg_name_rx[32];
697 	char                 Dly_reg_name_tx_new[32];
698 	char                 Dly_reg_name_rx_new[32];
699 	uint8_t                 Dly_in_reg_idx;
700 	int8_t                Dly_in_min                    ;
701 	uint8_t                 Dly_in_max                    ;
702 	uint8_t                 Dly_out_reg_idx               ;
703 	int8_t                Dly_out_min                   ;
704 	uint8_t                 Dly_out_max                   ;
705 
706 	uint8_t                 Dly_in                        ;
707 	uint8_t                 Dly_in_selval                 ;
708 	uint8_t                 Dly_out                       ;
709 	uint8_t                 Dly_out_selval                ;
710 	int8_t result;
711 	int8_t result_history[128][64];
712 	uint32_t init_done;
713 } MAC_IO;
714 typedef struct {
715 #ifdef Enable_ShowBW
716 	double               Total_frame_len               ;//__attribute__ ((aligned (8)));
717 #endif
718 	uint32_t Des_Num                       ;
719 	uint32_t Des_Num_Org                   ;
720 	uint32_t DMABuf_Size                   ;
721 	uint32_t DMABuf_Num                    ;
722 
723 	uint32_t *FRAME_LEN                    ;
724 	uint32_t FRAME_LEN_Cur                 ;
725 	uint32_t *wp_lst                       ;
726 	uint32_t wp_fir                        ;
727 
728 	uint32_t DMA_Base_Setup                 ;
729 	uint32_t DMA_Base_Tx                  ;
730 	uint32_t DMA_Base_Rx                   ;
731 
732 	uint32_t ARP_data[16]                  ;
733 	uint32_t TxDes0DW                      ;
734 	uint32_t RxDes0DW                      ;
735 	uint32_t RxDes3DW                      ;
736 
737 	uint8_t                 number_chl                    ;
738 	uint8_t                 number_pak                    ;
739 	char                 NCSI_RxEr                     ;
740 	uint32_t NCSI_TxDWBUF[512]             ;
741 	uint32_t NCSI_RxDWBUF[512]             ;
742 	char                 NCSI_CommandStr[512]          ;
743 	unsigned char        *NCSI_TxByteBUF               ;
744 	unsigned char        *NCSI_RxByteBUF               ;
745 	unsigned char        NCSI_Payload_Data[16]         ;
746 	uint32_t Payload_Checksum_NCSI         ;
747 } MAC_Data;
748 typedef struct {
749 	uint32_t Wrn_Flag                      ;
750 	uint32_t Err_Flag                      ;
751 	uint32_t Des_Flag                      ;
752 	uint32_t NCSI_Flag                     ;
753 	uint32_t Bak_Err_Flag                  ;
754 	uint32_t Bak_NCSI_Flag                 ;
755 	uint32_t CheckDesFail_DesNum           ;
756 	uint8_t print_en;
757 	uint8_t all_fail;
758 } MAC_Flag;
759 typedef struct {
760 	mac_reg_t reg;
761 	mac_env_t env;
762 	mac_arg_t arg;
763 	MAC_Running          run;
764 	MAC_Information      inf;
765 	MAC_PHY              phy;
766 	MAC_IO               io;
767 	MAC_Data             dat;
768 	MAC_Flag             flg;
769 	NCSI_Command_Packet  ncsi_req;
770 	NCSI_Response_Packet ncsi_rsp;
771 	NCSI_Capability      ncsi_cap;
772 } MAC_ENGINE;
773 typedef void (* PHY_SETTING) (MAC_ENGINE *);
774 typedef struct {
775 	PHY_SETTING          fp_set;
776 	PHY_SETTING          fp_clr;
777 } PHY_ENGINE;
778 
779 #undef GLOBAL
780 #ifdef NCSI_C
781 #define GLOBAL
782 #else
783 #define GLOBAL    extern
784 #endif
785 
786 GLOBAL  char phy_ncsi (MAC_ENGINE *eng);
787 
788 // ========================================================
789 // For mactest
790 
791 #undef GLOBAL
792 #ifdef MACTEST_C
793 #define GLOBAL
794 #else
795 #define GLOBAL    extern
796 #endif
797 
798 #define MODE_DEDICATED                           0x01
799 #define MODE_NCSI                                0x02
800 
801 GLOBAL  uint8_t            *mmiobase;
802 GLOBAL  uint32_t ulPCIBaseAddress;
803 GLOBAL  uint32_t ulMMIOBaseAddress;
804 
805 GLOBAL  uint8_t             display_lantest_log_msg;
806 
807 // ========================================================
808 // For mac.c
809 #undef GLOBAL
810 #ifdef MAC_C
811 #define GLOBAL
812 #else
813 #define GLOBAL    extern
814 #endif
815 
816 #if defined(MAC_C)
817 static  const  char version_name[] = VER_NAME;
818 static  const  uint8_t IOValue_Array_A0[16] = {8,1, 10,3, 12,5, 14,7, 0,9, 2,11, 4,13, 6,15}; // AST2300-A0
819 #endif
820 
821 GLOBAL void    debug_pause (void);
822 GLOBAL uint32_t Read_Mem_Dat_NCSI_DD (uint32_t addr);
823 GLOBAL uint32_t Read_Mem_Des_NCSI_DD (uint32_t addr);
824 
825 
826 
827 
828 
829 
830 
831 GLOBAL void Write_Mem_Dat_NCSI_DD (uint32_t addr, uint32_t data);
832 GLOBAL void Write_Mem_Des_NCSI_DD (uint32_t addr, uint32_t data);
833 
834 
835 GLOBAL void Write_Reg_TIMER_DD (uint32_t addr, uint32_t data);
836 
837 
838 
839 
840 
841 
842 GLOBAL void    PrintTest (MAC_ENGINE *eng);
843 GLOBAL void    PrintIOTimingBund (MAC_ENGINE *eng);
844 
845 
846 
847 GLOBAL void    PrintPHYAdr (MAC_ENGINE *eng);
848 
849 
850 
851 
852 
853 GLOBAL void    setup_arp (MAC_ENGINE *eng);
854 GLOBAL void    TestingSetup (MAC_ENGINE *eng);
855 
856 
857 
858 GLOBAL void    init_mac (MAC_ENGINE *eng);
859 GLOBAL char TestingLoop (MAC_ENGINE *eng, uint32_t loop_checknum);
860 
861 GLOBAL void    init_phy (MAC_ENGINE *eng, PHY_ENGINE *phyeng);
862 
863 
864 GLOBAL void    phy_sel (MAC_ENGINE *eng, PHY_ENGINE *phyeng);
865 GLOBAL void    recov_phy (MAC_ENGINE *eng, PHY_ENGINE *phyeng);
866 GLOBAL int     FindErr (MAC_ENGINE *eng, int value);
867 GLOBAL int     FindErr_Des (MAC_ENGINE *eng, int value);
868 GLOBAL void    PrintIO_Header (MAC_ENGINE *eng, uint8_t option);
869 
870 
871 
872 GLOBAL void    FPri_ErrFlag (MAC_ENGINE *eng, uint8_t option);
873 
874 GLOBAL void init_hwtimer( void );
875 GLOBAL void delay_hwtimer(uint16_t msec);
876 
877 // ========================================================
878 // For PHYGPIO.c
879 #undef GLOBAL
880 #ifdef PHYGPIO_C
881 #define GLOBAL
882 #else
883 #define GLOBAL    extern
884 #endif
885 
886 
887 // ========================================================
888 // For PHYSPECIAL.c
889 #undef GLOBAL
890 #ifdef PHYMISC_C
891 #define GLOBAL
892 #else
893 #define GLOBAL    extern
894 #endif
895 
896 
897 #endif // End COMMINF_H
898