1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _NPI_MAC_H
#define _NPI_MAC_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <npi.h>
#include <nxge_mac_hw.h>
#include <nxge_mii.h>
typedef struct _npi_mac_addr {
uint16_t w0;
uint16_t w1;
uint16_t w2;
} npi_mac_addr_t;
typedef enum npi_mac_attr {
MAC_PORT_MODE = 0,
MAC_PORT_FRAME_SIZE,
MAC_PORT_ADDR,
MAC_PORT_ADDR_FILTER,
MAC_PORT_ADDR_FILTER_MASK,
XMAC_PORT_IPG,
XMAC_10G_PORT_IPG,
BMAC_PORT_MAX_BURST_SIZE,
BMAC_PORT_PA_SIZE,
BMAC_PORT_CTRL_TYPE
} npi_mac_attr_t;
/* MAC Mode options */
typedef enum npi_mac_mode_e {
MAC_MII_MODE = 0,
MAC_GMII_MODE,
MAC_XGMII_MODE
} npi_mac_mode_t;
typedef enum npi_mac_reset_e {
TX_MAC_RESET = 1,
RX_MAC_RESET,
XTX_MAC_REG_RESET,
XRX_MAC_REG_RESET,
XTX_MAC_LOGIC_RESET,
XRX_MAC_LOGIC_RESET,
XTX_MAC_RESET_ALL,
XRX_MAC_RESET_ALL,
BMAC_RESET_ALL,
XMAC_RESET_ALL
} npi_mac_reset_t;
typedef enum xmac_tx_iconfig_e {
ICFG_XMAC_TX_FRAME_XMIT = XMAC_TX_FRAME_XMIT,
ICFG_XMAC_TX_UNDERRUN = XMAC_TX_UNDERRUN,
ICFG_XMAC_TX_MAX_PACKET_ERR = XMAC_TX_MAX_PACKET_ERR,
ICFG_XMAC_TX_OVERFLOW = XMAC_TX_OVERFLOW,
ICFG_XMAC_TX_FIFO_XFR_ERR = XMAC_TX_FIFO_XFR_ERR,
ICFG_XMAC_TX_BYTE_CNT_EXP = XMAC_TX_BYTE_CNT_EXP,
ICFG_XMAC_TX_FRAME_CNT_EXP = XMAC_TX_FRAME_CNT_EXP,
ICFG_XMAC_TX_ALL = (XMAC_TX_FRAME_XMIT | XMAC_TX_UNDERRUN |
XMAC_TX_MAX_PACKET_ERR | XMAC_TX_OVERFLOW |
XMAC_TX_FIFO_XFR_ERR | XMAC_TX_BYTE_CNT_EXP |
XMAC_TX_FRAME_CNT_EXP)
} xmac_tx_iconfig_t;
typedef enum xmac_rx_iconfig_e {
ICFG_XMAC_RX_FRAME_RCVD = XMAC_RX_FRAME_RCVD,
ICFG_XMAC_RX_OVERFLOW = XMAC_RX_OVERFLOW,
ICFG_XMAC_RX_UNDERFLOW = XMAC_RX_UNDERFLOW,
ICFG_XMAC_RX_CRC_ERR_CNT_EXP = XMAC_RX_CRC_ERR_CNT_EXP,
ICFG_XMAC_RX_LEN_ERR_CNT_EXP = XMAC_RX_LEN_ERR_CNT_EXP,
ICFG_XMAC_RX_VIOL_ERR_CNT_EXP = XMAC_RX_VIOL_ERR_CNT_EXP,
ICFG_XMAC_RX_OCT_CNT_EXP = XMAC_RX_OCT_CNT_EXP,
ICFG_XMAC_RX_HST_CNT1_EXP = XMAC_RX_HST_CNT1_EXP,
ICFG_XMAC_RX_HST_CNT2_EXP = XMAC_RX_HST_CNT2_EXP,
ICFG_XMAC_RX_HST_CNT3_EXP = XMAC_RX_HST_CNT3_EXP,
ICFG_XMAC_RX_HST_CNT4_EXP = XMAC_RX_HST_CNT4_EXP,
ICFG_XMAC_RX_HST_CNT5_EXP = XMAC_RX_HST_CNT5_EXP,
ICFG_XMAC_RX_HST_CNT6_EXP = XMAC_RX_HST_CNT6_EXP,
ICFG_XMAC_RX_BCAST_CNT_EXP = XMAC_RX_BCAST_CNT_EXP,
ICFG_XMAC_RX_MCAST_CNT_EXP = XMAC_RX_MCAST_CNT_EXP,
ICFG_XMAC_RX_FRAG_CNT_EXP = XMAC_RX_FRAG_CNT_EXP,
ICFG_XMAC_RX_ALIGNERR_CNT_EXP = XMAC_RX_ALIGNERR_CNT_EXP,
ICFG_XMAC_RX_LINK_FLT_CNT_EXP = XMAC_RX_LINK_FLT_CNT_EXP,
ICFG_XMAC_RX_HST_CNT7_EXP = XMAC_RX_HST_CNT7_EXP,
ICFG_XMAC_RX_REMOTE_FLT_DET = XMAC_RX_REMOTE_FLT_DET,
ICFG_XMAC_RX_LOCAL_FLT_DET = XMAC_RX_LOCAL_FLT_DET,
ICFG_XMAC_RX_ALL = (XMAC_RX_FRAME_RCVD | XMAC_RX_OVERFLOW |
XMAC_RX_UNDERFLOW | XMAC_RX_CRC_ERR_CNT_EXP |
XMAC_RX_LEN_ERR_CNT_EXP |
XMAC_RX_VIOL_ERR_CNT_EXP |
XMAC_RX_OCT_CNT_EXP | XMAC_RX_HST_CNT1_EXP |
XMAC_RX_HST_CNT2_EXP | XMAC_RX_HST_CNT3_EXP |
XMAC_RX_HST_CNT4_EXP | XMAC_RX_HST_CNT5_EXP |
XMAC_RX_HST_CNT6_EXP | XMAC_RX_BCAST_CNT_EXP |
XMAC_RX_MCAST_CNT_EXP | XMAC_RX_FRAG_CNT_EXP |
XMAC_RX_ALIGNERR_CNT_EXP |
XMAC_RX_LINK_FLT_CNT_EXP |
XMAC_RX_HST_CNT7_EXP |
XMAC_RX_REMOTE_FLT_DET | XMAC_RX_LOCAL_FLT_DET)
} xmac_rx_iconfig_t;
typedef enum xmac_ctl_iconfig_e {
ICFG_XMAC_CTRL_PAUSE_RCVD = XMAC_CTRL_PAUSE_RCVD,
ICFG_XMAC_CTRL_PAUSE_STATE = XMAC_CTRL_PAUSE_STATE,
ICFG_XMAC_CTRL_NOPAUSE_STATE = XMAC_CTRL_NOPAUSE_STATE,
ICFG_XMAC_CTRL_ALL = (XMAC_CTRL_PAUSE_RCVD | XMAC_CTRL_PAUSE_STATE |
XMAC_CTRL_NOPAUSE_STATE)
} xmac_ctl_iconfig_t;
typedef enum bmac_tx_iconfig_e {
ICFG_BMAC_TX_FRAME_SENT = MAC_TX_FRAME_XMIT,
ICFG_BMAC_TX_UNDERFLOW = MAC_TX_UNDERRUN,
ICFG_BMAC_TX_MAXPKTSZ_ERR = MAC_TX_MAX_PACKET_ERR,
ICFG_BMAC_TX_BYTE_CNT_EXP = MAC_TX_BYTE_CNT_EXP,
ICFG_BMAC_TX_FRAME_CNT_EXP = MAC_TX_FRAME_CNT_EXP,
ICFG_BMAC_TX_ALL = (MAC_TX_FRAME_XMIT | MAC_TX_UNDERRUN |
MAC_TX_MAX_PACKET_ERR | MAC_TX_BYTE_CNT_EXP |
MAC_TX_FRAME_CNT_EXP)
} bmac_tx_iconfig_t;
typedef enum bmac_rx_iconfig_e {
ICFG_BMAC_RX_FRAME_RCVD = MAC_RX_FRAME_RECV,
ICFG_BMAC_RX_OVERFLOW = MAC_RX_OVERFLOW,
ICFG_BMAC_RX_FRAME_CNT_EXP = MAC_RX_FRAME_COUNT,
ICFG_BMAC_RX_CRC_ERR_CNT_EXP = MAC_RX_ALIGN_ERR,
ICFG_BMAC_RX_LEN_ERR_CNT_EXP = MAC_RX_CRC_ERR,
ICFG_BMAC_RX_VIOL_ERR_CNT_EXP = MAC_RX_LEN_ERR,
ICFG_BMAC_RX_BYTE_CNT_EXP = MAC_RX_VIOL_ERR,
ICFG_BMAC_RX_ALIGNERR_CNT_EXP = MAC_RX_BYTE_CNT_EXP,
ICFG_BMAC_RX_ALL = (MAC_RX_FRAME_RECV | MAC_RX_OVERFLOW |
MAC_RX_FRAME_COUNT | MAC_RX_ALIGN_ERR |
MAC_RX_CRC_ERR | MAC_RX_LEN_ERR |
MAC_RX_VIOL_ERR | MAC_RX_BYTE_CNT_EXP)
} bmac_rx_iconfig_t;
typedef enum bmac_ctl_iconfig_e {
ICFG_BMAC_CTL_RCVPAUSE = MAC_CTRL_PAUSE_RECEIVED,
ICFG_BMAC_CTL_INPAUSE_ST = MAC_CTRL_PAUSE_STATE,
ICFG_BMAC_CTL_INNOTPAUSE_ST = MAC_CTRL_NOPAUSE_STATE,
ICFG_BMAC_CTL_ALL = (MAC_CTRL_PAUSE_RECEIVED | MAC_CTRL_PAUSE_STATE |
MAC_CTRL_NOPAUSE_STATE)
} bmac_ctl_iconfig_t;
typedef enum xmac_tx_config_e {
CFG_XMAC_TX = 0x00000001,
CFG_XMAC_TX_STRETCH_MODE = 0x00000002,
CFG_XMAC_VAR_IPG = 0x00000004,
CFG_XMAC_TX_CRC = 0x00000008,
CFG_XMAC_TX_ALL = 0x0000000F
} xmac_tx_config_t;
typedef enum xmac_rx_config_e {
CFG_XMAC_RX = 0x00000001,
CFG_XMAC_RX_PROMISCUOUS = 0x00000002,
CFG_XMAC_RX_PROMISCUOUSGROUP = 0x00000004,
CFG_XMAC_RX_ERRCHK = 0x00000008,
CFG_XMAC_RX_CRC_CHK = 0x00000010,
CFG_XMAC_RX_RESV_MULTICAST = 0x00000020,
CFG_XMAC_RX_CODE_VIO_CHK = 0x00000040,
CFG_XMAC_RX_HASH_FILTER = 0x00000080,
CFG_XMAC_RX_ADDR_FILTER = 0x00000100,
CFG_XMAC_RX_STRIP_CRC = 0x00000200,
CFG_XMAC_RX_PAUSE = 0x00000400,
CFG_XMAC_RX_PASS_FC_FRAME = 0x00000800,
CFG_XMAC_RX_MAC2IPP_PKT_CNT = 0x00001000,
CFG_XMAC_RX_ALL = 0x00001FFF
} xmac_rx_config_t;
typedef enum xmac_xif_config_e {
CFG_XMAC_XIF_LED_FORCE = 0x00000001,
CFG_XMAC_XIF_LED_POLARITY = 0x00000002,
CFG_XMAC_XIF_SEL_POR_CLK_SRC = 0x00000004,
CFG_XMAC_XIF_TX_OUTPUT = 0x00000008,
CFG_XMAC_XIF_LOOPBACK = 0x00000010,
CFG_XMAC_XIF_LFS = 0x00000020,
CFG_XMAC_XIF_XPCS_BYPASS = 0x00000040,
CFG_XMAC_XIF_1G_PCS_BYPASS = 0x00000080,
CFG_XMAC_XIF_SEL_CLK_25MHZ = 0x00000100,
CFG_XMAC_XIF_ALL = 0x000001FF
} xmac_xif_config_t;
typedef enum bmac_tx_config_e {
CFG_BMAC_TX = 0x00000001,
CFG_BMAC_TX_CRC = 0x00000002,
CFG_BMAC_TX_ALL = 0x00000003
} bmac_tx_config_t;
typedef enum bmac_rx_config_e {
CFG_BMAC_RX = 0x00000001,
CFG_BMAC_RX_STRIP_PAD = 0x00000002,
CFG_BMAC_RX_STRIP_CRC = 0x00000004,
CFG_BMAC_RX_PROMISCUOUS = 0x00000008,
CFG_BMAC_RX_PROMISCUOUSGROUP = 0x00000010,
CFG_BMAC_RX_HASH_FILTER = 0x00000020,
CFG_BMAC_RX_ADDR_FILTER = 0x00000040,
CFG_BMAC_RX_DISCARD_ON_ERR = 0x00000080,
CFG_BMAC_RX_ALL = 0x000000FF
} bmac_rx_config_t;
typedef enum bmac_xif_config_e {
CFG_BMAC_XIF_TX_OUTPUT = 0x00000001,
CFG_BMAC_XIF_LOOPBACK = 0x00000002,
CFG_BMAC_XIF_GMII_MODE = 0x00000008,
CFG_BMAC_XIF_LINKLED = 0x00000020,
CFG_BMAC_XIF_LED_POLARITY = 0x00000040,
CFG_BMAC_XIF_SEL_CLK_25MHZ = 0x00000080,
CFG_BMAC_XIF_ALL = 0x000000FF
} bmac_xif_config_t;
typedef enum xmac_ipg_e {
XGMII_IPG_12_15 = 0,
XGMII_IPG_16_19,
XGMII_IPG_20_23,
MII_GMII_IPG_12,
MII_GMII_IPG_13,
MII_GMII_IPG_14,
MII_GMII_IPG_15,
MII_GMII_IPG_16
} xmac_ipg_t;
typedef enum xpcs_reg_e {
XPCS_REG_CONTROL1,
XPCS_REG_STATUS1,
XPCS_REG_DEVICE_ID,
XPCS_REG_SPEED_ABILITY,
XPCS_REG_DEVICE_IN_PKG,
XPCS_REG_CONTROL2,
XPCS_REG_STATUS2,
XPCS_REG_PKG_ID,
XPCS_REG_STATUS,
XPCS_REG_TEST_CONTROL,
XPCS_REG_CONFIG_VENDOR1,
XPCS_REG_DIAG_VENDOR2,
XPCS_REG_MASK1,
XPCS_REG_PACKET_COUNTER,
XPCS_REG_TX_STATEMACHINE,
XPCS_REG_DESCWERR_COUNTER,
XPCS_REG_SYMBOL_ERR_L0_1_COUNTER,
XPCS_REG_SYMBOL_ERR_L2_3_COUNTER,
XPCS_REG_TRAINING_VECTOR
} xpcs_reg_t;
#define IS_XMAC_PORT_NUM_VALID(portn)\
((portn == XMAC_PORT_0) || (portn == XMAC_PORT_1))
#define IS_BMAC_PORT_NUM_VALID(portn)\
((portn == BMAC_PORT_0) || (portn == BMAC_PORT_1))
#define XMAC_REG_WR(handle, portn, reg, val)\
NXGE_REG_WR64(handle, XMAC_REG_ADDR((portn), (reg)), (val))
#define XMAC_REG_RD(handle, portn, reg, val_p)\
NXGE_REG_RD64(handle, XMAC_REG_ADDR((portn), (reg)), (val_p))
#define BMAC_REG_WR(handle, portn, reg, val)\
NXGE_REG_WR64(handle, BMAC_REG_ADDR((portn), (reg)), (val))
#define BMAC_REG_RD(handle, portn, reg, val_p)\
NXGE_REG_RD64(handle, BMAC_REG_ADDR((portn), (reg)), (val_p))
#define PCS_REG_WR(handle, portn, reg, val)\
NXGE_REG_WR64(handle, PCS_REG_ADDR((portn), (reg)), (val))
#define PCS_REG_RD(handle, portn, reg, val_p)\
NXGE_REG_RD64(handle, PCS_REG_ADDR((portn), (reg)), (val_p))
#define XPCS_REG_WR(handle, portn, reg, val)\
NXGE_REG_WR64(handle, XPCS_ADDR((portn), (reg)), (val))
#define XPCS_REG_RD(handle, portn, reg, val_p)\
NXGE_REG_RD64(handle, XPCS_ADDR((portn), (reg)), (val_p))
#define MIF_REG_WR(handle, reg, val)\
NXGE_REG_WR64(handle, MIF_ADDR((reg)), (val))
#define MIF_REG_RD(handle, reg, val_p)\
NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p))
/*
* When MIF_REG_RD is called inside a poll loop and if the poll takes
* very long time to complete, then each poll will print a rt_show_reg
* result on the screen and the rtrace "register show" result may
* become too messy to read. The solution is to call MIF_REG_RD_NO_SHOW
* instead of MIF_REG_RD in a polling loop. When COSIM or REG_SHOW is
* not defined, this macro is the same as MIF_REG_RD. When both COSIM
* and REG_SHOW are defined, this macro calls NXGE_REG_RD64_NO_SHOW
* which does not call rt_show_reg.
*/
#if defined(COSIM) && defined(REG_SHOW)
#define MIF_REG_RD_NO_SHOW(handle, reg, val_p)\
NXGE_REG_RD64_NO_SHOW(handle, MIF_ADDR((reg)), (val_p))
#else
/* If not COSIM or REG_SHOW, still show */
#define MIF_REG_RD_NO_SHOW(handle, reg, val_p)\
NXGE_REG_RD64(handle, MIF_ADDR((reg)), (val_p))
#endif
#define ESR_REG_WR(handle, reg, val)\
NXGE_REG_WR64(handle, ESR_ADDR((reg)), (val))
#define ESR_REG_RD(handle, reg, val_p)\
NXGE_REG_RD64(handle, ESR_ADDR((reg)), (val_p))
/* Macros to read/modify MAC attributes */
#define SET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\
p.type = attr;\
p.idata[0] = (uint32_t)val;\
stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
}
#define SET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\
p.type = attr;\
p.idata[0] = (uint32_t)val0;\
p.idata[1] = (uint32_t)val1;\
stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
}
#define SET_MAC_ATTR3(handle, p, portn, attr, val0, val1, val2, stat) {\
p.type = attr;\
p.idata[0] = (uint32_t)val0;\
p.idata[1] = (uint32_t)val1;\
p.idata[2] = (uint32_t)val2;\
stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
}
#define SET_MAC_ATTR4(handle, p, portn, attr, val0, val1, val2, val3, stat) {\
p.type = attr;\
p.idata[0] = (uint32_t)val0;\
p.idata[1] = (uint32_t)val1;\
p.idata[2] = (uint32_t)val2;\
p.idata[3] = (uint32_t)val3;\
stat = npi_mac_port_attr(handle, OP_SET, portn, (npi_attr_t *)&p);\
}
#define GET_MAC_ATTR1(handle, p, portn, attr, val, stat) {\
p.type = attr;\
if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
(npi_attr_t *)&p)) == NPI_SUCCESS) {\
val = p.odata[0];\
}\
}
#define GET_MAC_ATTR2(handle, p, portn, attr, val0, val1, stat) {\
p.type = attr;\
if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
(npi_attr_t *)&p)) == NPI_SUCCESS) {\
val0 = p.odata[0];\
val1 = p.odata[1];\
}\
}
#define GET_MAC_ATTR3(handle, p, portn, attr, val0, val1, \
val2, stat) {\
p.type = attr;\
if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
(npi_attr_t *)&p)) == NPI_SUCCESS) {\
val0 = p.odata[0];\
val1 = p.odata[1];\
val2 = p.odata[2];\
}\
}
#define GET_MAC_ATTR4(handle, p, portn, attr, val0, val1, \
val2, val3, stat) {\
p.type = attr;\
if ((stat = npi_mac_port_attr(handle, OP_GET, portn, \
(npi_attr_t *)&p)) == NPI_SUCCESS) {\
val0 = p.odata[0];\
val1 = p.odata[1];\
val2 = p.odata[2];\
val3 = p.odata[3];\
}\
}
/* MAC specific errors */
#define MAC_PORT_ATTR_INVALID 0x50
#define MAC_RESET_MODE_INVALID 0x51
#define MAC_HASHTAB_ENTRY_INVALID 0x52
#define MAC_HOSTINFO_ENTRY_INVALID 0x53
#define MAC_ALT_ADDR_ENTRY_INVALID 0x54
/* MAC error return macros */
#define NPI_MAC_PORT_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
PORT_INVALID | IS_PORT | (portn << 12))
#define NPI_MAC_OPCODE_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
OPCODE_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_HASHTAB_ENTRY_INVALID(portn)\
((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
MAC_HASHTAB_ENTRY_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_HOSTINFO_ENTRY_INVALID(portn)\
((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
MAC_HOSTINFO_ENTRY_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_ALT_ADDR_ENTRY_INVALID(portn)\
((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
MAC_ALT_ADDR_ENTRY_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_PORT_ATTR_INVALID(portn)\
((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
MAC_PORT_ATTR_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_RESET_MODE_INVALID(portn)\
((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
MAC_RESET_MODE_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_PCS_REG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
REGISTER_INVALID |\
IS_PORT | (portn << 12))
#define NPI_TXMAC_RESET_FAILED(portn) ((TXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
RESET_FAILED | IS_PORT | (portn << 12))
#define NPI_RXMAC_RESET_FAILED(portn) ((RXMAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
RESET_FAILED | IS_PORT | (portn << 12))
#define NPI_MAC_CONFIG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
CONFIG_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_REG_INVALID(portn) ((MAC_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
REGISTER_INVALID |\
IS_PORT | (portn << 12))
#define NPI_MAC_MII_READ_FAILED(portn) ((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
READ_FAILED | IS_PORT | (portn << 12))
#define NPI_MAC_MII_WRITE_FAILED(portn) ((MIF_BLK_ID << NPI_BLOCK_ID_SHIFT) |\
WRITE_FAILED | IS_PORT | (portn << 12))
/* library functions prototypes */
/* general mac functions */
npi_status_t npi_mac_hashtab_entry(npi_handle_t, io_op_t,
uint8_t, uint8_t, uint16_t *);
npi_status_t npi_mac_hostinfo_entry(npi_handle_t, io_op_t,
uint8_t, uint8_t,
hostinfo_t *);
npi_status_t npi_mac_altaddr_enable(npi_handle_t, uint8_t,
uint8_t);
npi_status_t npi_mac_altaddr_disable(npi_handle_t, uint8_t,
uint8_t);
npi_status_t npi_mac_altaddr_entry(npi_handle_t, io_op_t,
uint8_t, uint8_t,
npi_mac_addr_t *);
npi_status_t npi_mac_port_attr(npi_handle_t, io_op_t, uint8_t,
npi_attr_t *);
npi_status_t npi_mac_get_link_status(npi_handle_t, uint8_t,
boolean_t *);
npi_status_t npi_mac_get_10g_link_status(npi_handle_t, uint8_t,
boolean_t *);
npi_status_t npi_mac_mif_mii_read(npi_handle_t, uint8_t,
uint8_t, uint16_t *);
npi_status_t npi_mac_mif_mii_write(npi_handle_t, uint8_t,
uint8_t, uint16_t);
npi_status_t npi_mac_mif_link_intr_enable(npi_handle_t, uint8_t,
uint8_t, uint16_t);
npi_status_t npi_mac_mif_mdio_read(npi_handle_t, uint8_t,
uint8_t, uint16_t,
uint16_t *);
npi_status_t npi_mac_mif_mdio_write(npi_handle_t, uint8_t,
uint8_t, uint16_t,
uint16_t);
npi_status_t npi_mac_mif_mdio_link_intr_enable(npi_handle_t,
uint8_t, uint8_t,
uint16_t, uint16_t);
npi_status_t npi_mac_mif_link_intr_disable(npi_handle_t, uint8_t);
npi_status_t npi_mac_pcs_mii_read(npi_handle_t, uint8_t,
uint8_t, uint16_t *);
npi_status_t npi_mac_pcs_mii_write(npi_handle_t, uint8_t,
uint8_t, uint16_t);
npi_status_t npi_mac_pcs_link_intr_enable(npi_handle_t, uint8_t);
npi_status_t npi_mac_pcs_link_intr_disable(npi_handle_t, uint8_t);
npi_status_t npi_mac_pcs_reset(npi_handle_t, uint8_t);
/* xmac functions */
npi_status_t npi_xmac_reset(npi_handle_t, uint8_t,
npi_mac_reset_t);
npi_status_t npi_xmac_xif_config(npi_handle_t, config_op_t,
uint8_t, xmac_xif_config_t);
npi_status_t npi_xmac_tx_config(npi_handle_t, config_op_t,
uint8_t, xmac_tx_config_t);
npi_status_t npi_xmac_rx_config(npi_handle_t, config_op_t,
uint8_t, xmac_rx_config_t);
npi_status_t npi_xmac_tx_iconfig(npi_handle_t, config_op_t,
uint8_t, xmac_tx_iconfig_t);
npi_status_t npi_xmac_rx_iconfig(npi_handle_t, config_op_t,
uint8_t, xmac_rx_iconfig_t);
npi_status_t npi_xmac_ctl_iconfig(npi_handle_t, config_op_t,
uint8_t, xmac_ctl_iconfig_t);
npi_status_t npi_xmac_tx_get_istatus(npi_handle_t, uint8_t,
xmac_tx_iconfig_t *);
npi_status_t npi_xmac_rx_get_istatus(npi_handle_t, uint8_t,
xmac_rx_iconfig_t *);
npi_status_t npi_xmac_ctl_get_istatus(npi_handle_t, uint8_t,
xmac_ctl_iconfig_t *);
npi_status_t npi_xmac_xpcs_reset(npi_handle_t, uint8_t);
npi_status_t npi_xmac_xpcs_enable(npi_handle_t, uint8_t);
npi_status_t npi_xmac_xpcs_disable(npi_handle_t, uint8_t);
npi_status_t npi_xmac_xpcs_read(npi_handle_t, uint8_t,
uint8_t, uint32_t *);
npi_status_t npi_xmac_xpcs_write(npi_handle_t, uint8_t,
uint8_t, uint32_t);
npi_status_t npi_xmac_xpcs_link_intr_enable(npi_handle_t, uint8_t);
npi_status_t npi_xmac_xpcs_link_intr_disable(npi_handle_t,
uint8_t);
npi_status_t npi_xmac_xif_led(npi_handle_t, uint8_t,
boolean_t);
npi_status_t npi_xmac_zap_tx_counters(npi_handle_t, uint8_t);
npi_status_t npi_xmac_zap_rx_counters(npi_handle_t, uint8_t);
/* bmac functions */
npi_status_t npi_bmac_reset(npi_handle_t, uint8_t,
npi_mac_reset_t mode);
npi_status_t npi_bmac_tx_config(npi_handle_t, config_op_t,
uint8_t, bmac_tx_config_t);
npi_status_t npi_bmac_rx_config(npi_handle_t, config_op_t,
uint8_t, bmac_rx_config_t);
npi_status_t npi_bmac_rx_iconfig(npi_handle_t, config_op_t,
uint8_t, bmac_rx_iconfig_t);
npi_status_t npi_bmac_xif_config(npi_handle_t, config_op_t,
uint8_t, bmac_xif_config_t);
npi_status_t npi_bmac_tx_iconfig(npi_handle_t, config_op_t,
uint8_t, bmac_tx_iconfig_t);
npi_status_t npi_bmac_ctl_iconfig(npi_handle_t, config_op_t,
uint8_t, bmac_ctl_iconfig_t);
npi_status_t npi_bmac_tx_get_istatus(npi_handle_t, uint8_t,
bmac_tx_iconfig_t *);
npi_status_t npi_bmac_rx_get_istatus(npi_handle_t, uint8_t,
bmac_rx_iconfig_t *);
npi_status_t npi_bmac_ctl_get_istatus(npi_handle_t, uint8_t,
bmac_ctl_iconfig_t *);
npi_status_t npi_bmac_send_pause(npi_handle_t, uint8_t,
uint16_t);
npi_status_t npi_mac_dump_regs(npi_handle_t, uint8_t);
/* MIF common functions */
void npi_mac_mif_set_indirect_mode(npi_handle_t, boolean_t);
void npi_mac_mif_set_atca_mode(npi_handle_t, boolean_t);
#ifdef __cplusplus
}
#endif
#endif /* _NPI_MAC_H */
|