0001
0002
0003
0004
0005 #ifndef _SKGE_H
0006 #define _SKGE_H
0007 #include <linux/interrupt.h>
0008
0009
0010 #define PCI_DEV_REG1 0x40
0011 #define PCI_PHY_COMA 0x8000000
0012 #define PCI_VIO 0x2000000
0013
0014 #define PCI_DEV_REG2 0x44
0015 #define PCI_VPD_ROM_SZ 7L<<14
0016 #define PCI_REV_DESC 1<<2
0017
0018 enum csr_regs {
0019 B0_RAP = 0x0000,
0020 B0_CTST = 0x0004,
0021 B0_LED = 0x0006,
0022 B0_POWER_CTRL = 0x0007,
0023 B0_ISRC = 0x0008,
0024 B0_IMSK = 0x000c,
0025 B0_HWE_ISRC = 0x0010,
0026 B0_HWE_IMSK = 0x0014,
0027 B0_SP_ISRC = 0x0018,
0028 B0_XM1_IMSK = 0x0020,
0029 B0_XM1_ISRC = 0x0028,
0030 B0_XM1_PHY_ADDR = 0x0030,
0031 B0_XM1_PHY_DATA = 0x0034,
0032 B0_XM2_IMSK = 0x0040,
0033 B0_XM2_ISRC = 0x0048,
0034 B0_XM2_PHY_ADDR = 0x0050,
0035 B0_XM2_PHY_DATA = 0x0054,
0036 B0_R1_CSR = 0x0060,
0037 B0_R2_CSR = 0x0064,
0038 B0_XS1_CSR = 0x0068,
0039 B0_XA1_CSR = 0x006c,
0040 B0_XS2_CSR = 0x0070,
0041 B0_XA2_CSR = 0x0074,
0042
0043 B2_MAC_1 = 0x0100,
0044 B2_MAC_2 = 0x0108,
0045 B2_MAC_3 = 0x0110,
0046 B2_CONN_TYP = 0x0118,
0047 B2_PMD_TYP = 0x0119,
0048 B2_MAC_CFG = 0x011a,
0049 B2_CHIP_ID = 0x011b,
0050 B2_E_0 = 0x011c,
0051 B2_E_1 = 0x011d,
0052 B2_E_2 = 0x011e,
0053 B2_E_3 = 0x011f,
0054 B2_FAR = 0x0120,
0055 B2_FDP = 0x0124,
0056 B2_LD_CTRL = 0x0128,
0057 B2_LD_TEST = 0x0129,
0058 B2_TI_INI = 0x0130,
0059 B2_TI_VAL = 0x0134,
0060 B2_TI_CTRL = 0x0138,
0061 B2_TI_TEST = 0x0139,
0062 B2_IRQM_INI = 0x0140,
0063 B2_IRQM_VAL = 0x0144,
0064 B2_IRQM_CTRL = 0x0148,
0065 B2_IRQM_TEST = 0x0149,
0066 B2_IRQM_MSK = 0x014c,
0067 B2_IRQM_HWE_MSK = 0x0150,
0068 B2_TST_CTRL1 = 0x0158,
0069 B2_TST_CTRL2 = 0x0159,
0070 B2_GP_IO = 0x015c,
0071 B2_I2C_CTRL = 0x0160,
0072 B2_I2C_DATA = 0x0164,
0073 B2_I2C_IRQ = 0x0168,
0074 B2_I2C_SW = 0x016c,
0075 B2_BSC_INI = 0x0170,
0076 B2_BSC_VAL = 0x0174,
0077 B2_BSC_CTRL = 0x0178,
0078 B2_BSC_STAT = 0x0179,
0079 B2_BSC_TST = 0x017a,
0080
0081 B3_RAM_ADDR = 0x0180,
0082 B3_RAM_DATA_LO = 0x0184,
0083 B3_RAM_DATA_HI = 0x0188,
0084 B3_RI_WTO_R1 = 0x0190,
0085 B3_RI_WTO_XA1 = 0x0191,
0086 B3_RI_WTO_XS1 = 0x0192,
0087 B3_RI_RTO_R1 = 0x0193,
0088 B3_RI_RTO_XA1 = 0x0194,
0089 B3_RI_RTO_XS1 = 0x0195,
0090 B3_RI_WTO_R2 = 0x0196,
0091 B3_RI_WTO_XA2 = 0x0197,
0092 B3_RI_WTO_XS2 = 0x0198,
0093 B3_RI_RTO_R2 = 0x0199,
0094 B3_RI_RTO_XA2 = 0x019a,
0095 B3_RI_RTO_XS2 = 0x019b,
0096 B3_RI_TO_VAL = 0x019c,
0097 B3_RI_CTRL = 0x01a0,
0098 B3_RI_TEST = 0x01a2,
0099 B3_MA_TOINI_RX1 = 0x01b0,
0100 B3_MA_TOINI_RX2 = 0x01b1,
0101 B3_MA_TOINI_TX1 = 0x01b2,
0102 B3_MA_TOINI_TX2 = 0x01b3,
0103 B3_MA_TOVAL_RX1 = 0x01b4,
0104 B3_MA_TOVAL_RX2 = 0x01b5,
0105 B3_MA_TOVAL_TX1 = 0x01b6,
0106 B3_MA_TOVAL_TX2 = 0x01b7,
0107 B3_MA_TO_CTRL = 0x01b8,
0108 B3_MA_TO_TEST = 0x01ba,
0109 B3_MA_RCINI_RX1 = 0x01c0,
0110 B3_MA_RCINI_RX2 = 0x01c1,
0111 B3_MA_RCINI_TX1 = 0x01c2,
0112 B3_MA_RCINI_TX2 = 0x01c3,
0113 B3_MA_RCVAL_RX1 = 0x01c4,
0114 B3_MA_RCVAL_RX2 = 0x01c5,
0115 B3_MA_RCVAL_TX1 = 0x01c6,
0116 B3_MA_RCVAL_TX2 = 0x01c7,
0117 B3_MA_RC_CTRL = 0x01c8,
0118 B3_MA_RC_TEST = 0x01ca,
0119 B3_PA_TOINI_RX1 = 0x01d0,
0120 B3_PA_TOINI_RX2 = 0x01d4,
0121 B3_PA_TOINI_TX1 = 0x01d8,
0122 B3_PA_TOINI_TX2 = 0x01dc,
0123 B3_PA_TOVAL_RX1 = 0x01e0,
0124 B3_PA_TOVAL_RX2 = 0x01e4,
0125 B3_PA_TOVAL_TX1 = 0x01e8,
0126 B3_PA_TOVAL_TX2 = 0x01ec,
0127 B3_PA_CTRL = 0x01f0,
0128 B3_PA_TEST = 0x01f2,
0129 };
0130
0131
0132 enum {
0133 CS_CLK_RUN_HOT = 1<<13,
0134 CS_CLK_RUN_RST = 1<<12,
0135 CS_CLK_RUN_ENA = 1<<11,
0136 CS_VAUX_AVAIL = 1<<10,
0137 CS_BUS_CLOCK = 1<<9,
0138 CS_BUS_SLOT_SZ = 1<<8,
0139 CS_ST_SW_IRQ = 1<<7,
0140 CS_CL_SW_IRQ = 1<<6,
0141 CS_STOP_DONE = 1<<5,
0142 CS_STOP_MAST = 1<<4,
0143 CS_MRST_CLR = 1<<3,
0144 CS_MRST_SET = 1<<2,
0145 CS_RST_CLR = 1<<1,
0146 CS_RST_SET = 1,
0147
0148
0149
0150 LED_STAT_ON = 1<<1,
0151 LED_STAT_OFF = 1,
0152
0153
0154 PC_VAUX_ENA = 1<<7,
0155 PC_VAUX_DIS = 1<<6,
0156 PC_VCC_ENA = 1<<5,
0157 PC_VCC_DIS = 1<<4,
0158 PC_VAUX_ON = 1<<3,
0159 PC_VAUX_OFF = 1<<2,
0160 PC_VCC_ON = 1<<1,
0161 PC_VCC_OFF = 1<<0,
0162 };
0163
0164
0165 enum {
0166 IS_ALL_MSK = 0xbffffffful,
0167 IS_HW_ERR = 1<<31,
0168
0169 IS_PA_TO_RX1 = 1<<29,
0170 IS_PA_TO_RX2 = 1<<28,
0171 IS_PA_TO_TX1 = 1<<27,
0172 IS_PA_TO_TX2 = 1<<26,
0173 IS_I2C_READY = 1<<25,
0174 IS_IRQ_SW = 1<<24,
0175 IS_EXT_REG = 1<<23,
0176
0177 IS_TIMINT = 1<<22,
0178 IS_MAC1 = 1<<21,
0179 IS_LNK_SYNC_M1 = 1<<20,
0180 IS_MAC2 = 1<<19,
0181 IS_LNK_SYNC_M2 = 1<<18,
0182
0183 IS_R1_B = 1<<17,
0184 IS_R1_F = 1<<16,
0185 IS_R1_C = 1<<15,
0186
0187 IS_R2_B = 1<<14,
0188 IS_R2_F = 1<<13,
0189 IS_R2_C = 1<<12,
0190
0191 IS_XS1_B = 1<<11,
0192 IS_XS1_F = 1<<10,
0193 IS_XS1_C = 1<<9,
0194
0195 IS_XA1_B = 1<<8,
0196 IS_XA1_F = 1<<7,
0197 IS_XA1_C = 1<<6,
0198
0199 IS_XS2_B = 1<<5,
0200 IS_XS2_F = 1<<4,
0201 IS_XS2_C = 1<<3,
0202
0203 IS_XA2_B = 1<<2,
0204 IS_XA2_F = 1<<1,
0205 IS_XA2_C = 1<<0,
0206
0207 IS_TO_PORT1 = IS_PA_TO_RX1 | IS_PA_TO_TX1,
0208 IS_TO_PORT2 = IS_PA_TO_RX2 | IS_PA_TO_TX2,
0209
0210 IS_PORT_1 = IS_XA1_F| IS_R1_F | IS_TO_PORT1 | IS_MAC1,
0211 IS_PORT_2 = IS_XA2_F| IS_R2_F | IS_TO_PORT2 | IS_MAC2,
0212 };
0213
0214
0215
0216 enum {
0217 IS_IRQ_TIST_OV = 1<<13,
0218 IS_IRQ_SENSOR = 1<<12,
0219 IS_IRQ_MST_ERR = 1<<11,
0220 IS_IRQ_STAT = 1<<10,
0221 IS_NO_STAT_M1 = 1<<9,
0222 IS_NO_STAT_M2 = 1<<8,
0223 IS_NO_TIST_M1 = 1<<7,
0224 IS_NO_TIST_M2 = 1<<6,
0225 IS_RAM_RD_PAR = 1<<5,
0226 IS_RAM_WR_PAR = 1<<4,
0227 IS_M1_PAR_ERR = 1<<3,
0228 IS_M2_PAR_ERR = 1<<2,
0229 IS_R1_PAR_ERR = 1<<1,
0230 IS_R2_PAR_ERR = 1<<0,
0231
0232 IS_ERR_MSK = IS_IRQ_MST_ERR | IS_IRQ_STAT
0233 | IS_RAM_RD_PAR | IS_RAM_WR_PAR
0234 | IS_M1_PAR_ERR | IS_M2_PAR_ERR
0235 | IS_R1_PAR_ERR | IS_R2_PAR_ERR,
0236 };
0237
0238
0239 enum {
0240 TST_FRC_DPERR_MR = 1<<7,
0241 TST_FRC_DPERR_MW = 1<<6,
0242 TST_FRC_DPERR_TR = 1<<5,
0243 TST_FRC_DPERR_TW = 1<<4,
0244 TST_FRC_APERR_M = 1<<3,
0245 TST_FRC_APERR_T = 1<<2,
0246 TST_CFG_WRITE_ON = 1<<1,
0247 TST_CFG_WRITE_OFF= 1<<0,
0248 };
0249
0250
0251 enum {
0252 CFG_CHIP_R_MSK = 0xf<<4,
0253
0254 CFG_DIS_M2_CLK = 1<<1,
0255 CFG_SNG_MAC = 1<<0,
0256 };
0257
0258
0259 enum {
0260 CHIP_ID_GENESIS = 0x0a,
0261 CHIP_ID_YUKON = 0xb0,
0262 CHIP_ID_YUKON_LITE = 0xb1,
0263 CHIP_ID_YUKON_LP = 0xb2,
0264 CHIP_ID_YUKON_XL = 0xb3,
0265 CHIP_ID_YUKON_EC = 0xb6,
0266 CHIP_ID_YUKON_FE = 0xb7,
0267
0268 CHIP_REV_YU_LITE_A1 = 3,
0269 CHIP_REV_YU_LITE_A3 = 7,
0270 };
0271
0272
0273
0274 enum {
0275 TIM_START = 1<<2,
0276 TIM_STOP = 1<<1,
0277 TIM_CLR_IRQ = 1<<0,
0278 };
0279
0280
0281
0282
0283 enum {
0284 TIM_T_ON = 1<<2,
0285 TIM_T_OFF = 1<<1,
0286 TIM_T_STEP = 1<<0,
0287 };
0288
0289
0290 enum {
0291 GP_DIR_9 = 1<<25,
0292 GP_DIR_8 = 1<<24,
0293 GP_DIR_7 = 1<<23,
0294 GP_DIR_6 = 1<<22,
0295 GP_DIR_5 = 1<<21,
0296 GP_DIR_4 = 1<<20,
0297 GP_DIR_3 = 1<<19,
0298 GP_DIR_2 = 1<<18,
0299 GP_DIR_1 = 1<<17,
0300 GP_DIR_0 = 1<<16,
0301
0302 GP_IO_9 = 1<<9,
0303 GP_IO_8 = 1<<8,
0304 GP_IO_7 = 1<<7,
0305 GP_IO_6 = 1<<6,
0306 GP_IO_5 = 1<<5,
0307 GP_IO_4 = 1<<4,
0308 GP_IO_3 = 1<<3,
0309 GP_IO_2 = 1<<2,
0310 GP_IO_1 = 1<<1,
0311 GP_IO_0 = 1<<0,
0312 };
0313
0314
0315
0316
0317 enum {
0318 BMU_OWN = 1<<31,
0319 BMU_STF = 1<<30,
0320 BMU_EOF = 1<<29,
0321 BMU_IRQ_EOB = 1<<28,
0322 BMU_IRQ_EOF = 1<<27,
0323
0324 BMU_STFWD = 1<<26,
0325 BMU_NO_FCS = 1<<25,
0326 BMU_SW = 1<<24,
0327
0328 BMU_DEV_0 = 1<<26,
0329 BMU_STAT_VAL = 1<<25,
0330 BMU_TIST_VAL = 1<<24,
0331
0332 BMU_CHECK = 0x55<<16,
0333 BMU_TCP_CHECK = 0x56<<16,
0334 BMU_UDP_CHECK = 0x57<<16,
0335 BMU_BBC = 0xffffL,
0336 };
0337
0338
0339 enum {
0340 BSC_START = 1<<1,
0341 BSC_STOP = 1<<0,
0342 };
0343
0344
0345 enum {
0346 BSC_SRC = 1<<0,
0347 };
0348
0349
0350 enum {
0351 BSC_T_ON = 1<<2,
0352 BSC_T_OFF = 1<<1,
0353 BSC_T_STEP = 1<<0,
0354 };
0355
0356
0357
0358 #define RAM_ADR_RAN 0x0007ffffL
0359
0360
0361
0362 enum {
0363 RI_CLR_RD_PERR = 1<<9,
0364 RI_CLR_WR_PERR = 1<<8,
0365
0366 RI_RST_CLR = 1<<1,
0367 RI_RST_SET = 1<<0,
0368 };
0369
0370
0371
0372 enum {
0373 MA_FOE_ON = 1<<3,
0374 MA_FOE_OFF = 1<<2,
0375 MA_RST_CLR = 1<<1,
0376 MA_RST_SET = 1<<0,
0377
0378 };
0379
0380
0381 #define SK_MAC_TO_53 72
0382 #define SK_PKT_TO_53 0x2000
0383 #define SK_PKT_TO_MAX 0xffff
0384 #define SK_RI_TO_53 36
0385
0386
0387
0388 enum {
0389 PA_CLR_TO_TX2 = 1<<13,
0390 PA_CLR_TO_TX1 = 1<<12,
0391 PA_CLR_TO_RX2 = 1<<11,
0392 PA_CLR_TO_RX1 = 1<<10,
0393 PA_ENA_TO_TX2 = 1<<9,
0394 PA_DIS_TO_TX2 = 1<<8,
0395 PA_ENA_TO_TX1 = 1<<7,
0396 PA_DIS_TO_TX1 = 1<<6,
0397 PA_ENA_TO_RX2 = 1<<5,
0398 PA_DIS_TO_RX2 = 1<<4,
0399 PA_ENA_TO_RX1 = 1<<3,
0400 PA_DIS_TO_RX1 = 1<<2,
0401 PA_RST_CLR = 1<<1,
0402 PA_RST_SET = 1<<0,
0403 };
0404
0405 #define PA_ENA_TO_ALL (PA_ENA_TO_RX1 | PA_ENA_TO_RX2 |\
0406 PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
0407
0408
0409
0410
0411
0412
0413
0414
0415 #define TXA_MAX_VAL 0x00ffffffUL
0416
0417
0418 enum {
0419 TXA_ENA_FSYNC = 1<<7,
0420 TXA_DIS_FSYNC = 1<<6,
0421 TXA_ENA_ALLOC = 1<<5,
0422 TXA_DIS_ALLOC = 1<<4,
0423 TXA_START_RC = 1<<3,
0424 TXA_STOP_RC = 1<<2,
0425 TXA_ENA_ARB = 1<<1,
0426 TXA_DIS_ARB = 1<<0,
0427 };
0428
0429
0430
0431
0432
0433 enum {
0434 TXA_ITI_INI = 0x0200,
0435 TXA_ITI_VAL = 0x0204,
0436 TXA_LIM_INI = 0x0208,
0437 TXA_LIM_VAL = 0x020c,
0438 TXA_CTRL = 0x0210,
0439 TXA_TEST = 0x0211,
0440 TXA_STAT = 0x0212,
0441 };
0442
0443
0444 enum {
0445 B6_EXT_REG = 0x0300,
0446 B7_CFG_SPC = 0x0380,
0447 B8_RQ1_REGS = 0x0400,
0448 B8_RQ2_REGS = 0x0480,
0449 B8_TS1_REGS = 0x0600,
0450 B8_TA1_REGS = 0x0680,
0451 B8_TS2_REGS = 0x0700,
0452 B8_TA2_REGS = 0x0780,
0453 B16_RAM_REGS = 0x0800,
0454 };
0455
0456
0457 enum {
0458 B8_Q_REGS = 0x0400,
0459 Q_D = 0x00,
0460 Q_DA_L = 0x20,
0461 Q_DA_H = 0x24,
0462 Q_AC_L = 0x28,
0463 Q_AC_H = 0x2c,
0464 Q_BC = 0x30,
0465 Q_CSR = 0x34,
0466 Q_F = 0x38,
0467 Q_T1 = 0x3c,
0468 Q_T1_TR = 0x3c,
0469 Q_T1_WR = 0x3d,
0470 Q_T1_RD = 0x3e,
0471 Q_T1_SV = 0x3f,
0472 Q_T2 = 0x40,
0473 Q_T3 = 0x44,
0474
0475 };
0476 #define Q_ADDR(reg, offs) (B8_Q_REGS + (reg) + (offs))
0477
0478
0479 enum {
0480
0481 RB_START= 0x00,
0482 RB_END = 0x04,
0483 RB_WP = 0x08,
0484 RB_RP = 0x0c,
0485 RB_RX_UTPP= 0x10,
0486 RB_RX_LTPP= 0x14,
0487 RB_RX_UTHP= 0x18,
0488 RB_RX_LTHP= 0x1c,
0489
0490 RB_PC = 0x20,
0491 RB_LEV = 0x24,
0492 RB_CTRL = 0x28,
0493 RB_TST1 = 0x29,
0494 RB_TST2 = 0x2a,
0495 };
0496
0497
0498 enum {
0499 Q_R1 = 0x0000,
0500 Q_R2 = 0x0080,
0501 Q_XS1 = 0x0200,
0502 Q_XA1 = 0x0280,
0503 Q_XS2 = 0x0300,
0504 Q_XA2 = 0x0380,
0505 };
0506
0507
0508 enum {
0509 SK_MAC_XMAC = 0,
0510 SK_MAC_GMAC = 1,
0511 };
0512
0513
0514 enum {
0515 SK_PHY_XMAC = 0,
0516 SK_PHY_BCOM = 1,
0517 SK_PHY_LONE = 2,
0518 SK_PHY_NAT = 3,
0519 SK_PHY_MARV_COPPER= 4,
0520 SK_PHY_MARV_FIBER = 5,
0521 };
0522
0523
0524 enum {
0525 PHY_ADDR_XMAC = 0<<8,
0526 PHY_ADDR_BCOM = 1<<8,
0527
0528
0529 PHY_ADDR_MARV = 0,
0530 };
0531
0532 #define RB_ADDR(offs, queue) ((u16)B16_RAM_REGS + (u16)(queue) + (offs))
0533
0534
0535 enum {
0536 RX_MFF_EA = 0x0c00,
0537 RX_MFF_WP = 0x0c04,
0538
0539 RX_MFF_RP = 0x0c0c,
0540 RX_MFF_PC = 0x0c10,
0541 RX_MFF_LEV = 0x0c14,
0542 RX_MFF_CTRL1 = 0x0c18,
0543 RX_MFF_STAT_TO = 0x0c1a,
0544 RX_MFF_TIST_TO = 0x0c1b,
0545 RX_MFF_CTRL2 = 0x0c1c,
0546 RX_MFF_TST1 = 0x0c1d,
0547 RX_MFF_TST2 = 0x0c1e,
0548
0549 RX_LED_INI = 0x0c20,
0550 RX_LED_VAL = 0x0c24,
0551 RX_LED_CTRL = 0x0c28,
0552 RX_LED_TST = 0x0c29,
0553
0554 LNK_SYNC_INI = 0x0c30,
0555 LNK_SYNC_VAL = 0x0c34,
0556 LNK_SYNC_CTRL = 0x0c38,
0557 LNK_SYNC_TST = 0x0c39,
0558 LNK_LED_REG = 0x0c3c,
0559 };
0560
0561
0562
0563 enum {
0564 MFF_ENA_RDY_PAT = 1<<13,
0565 MFF_DIS_RDY_PAT = 1<<12,
0566 MFF_ENA_TIM_PAT = 1<<11,
0567 MFF_DIS_TIM_PAT = 1<<10,
0568 MFF_ENA_ALM_FUL = 1<<9,
0569 MFF_DIS_ALM_FUL = 1<<8,
0570 MFF_ENA_PAUSE = 1<<7,
0571 MFF_DIS_PAUSE = 1<<6,
0572 MFF_ENA_FLUSH = 1<<5,
0573 MFF_DIS_FLUSH = 1<<4,
0574 MFF_ENA_TIST = 1<<3,
0575 MFF_DIS_TIST = 1<<2,
0576 MFF_CLR_INTIST = 1<<1,
0577 MFF_CLR_INSTAT = 1<<0,
0578 MFF_RX_CTRL_DEF = MFF_ENA_TIM_PAT,
0579 };
0580
0581
0582 enum {
0583 MFF_CLR_PERR = 1<<15,
0584
0585 MFF_ENA_PKT_REC = 1<<13,
0586 MFF_DIS_PKT_REC = 1<<12,
0587
0588 MFF_ENA_W4E = 1<<7,
0589 MFF_DIS_W4E = 1<<6,
0590
0591 MFF_ENA_LOOPB = 1<<3,
0592 MFF_DIS_LOOPB = 1<<2,
0593 MFF_CLR_MAC_RST = 1<<1,
0594 MFF_SET_MAC_RST = 1<<0,
0595
0596 MFF_TX_CTRL_DEF = MFF_ENA_PKT_REC | (u16) MFF_ENA_TIM_PAT | MFF_ENA_FLUSH,
0597 };
0598
0599
0600
0601
0602 enum {
0603 MFF_WSP_T_ON = 1<<6,
0604 MFF_WSP_T_OFF = 1<<5,
0605 MFF_WSP_INC = 1<<4,
0606 MFF_PC_DEC = 1<<3,
0607 MFF_PC_T_ON = 1<<2,
0608 MFF_PC_T_OFF = 1<<1,
0609 MFF_PC_INC = 1<<0,
0610 };
0611
0612
0613
0614 enum {
0615 MFF_WP_T_ON = 1<<6,
0616 MFF_WP_T_OFF = 1<<5,
0617 MFF_WP_INC = 1<<4,
0618
0619 MFF_RP_T_ON = 1<<2,
0620 MFF_RP_T_OFF = 1<<1,
0621 MFF_RP_DEC = 1<<0,
0622 };
0623
0624
0625
0626 enum {
0627 MFF_ENA_OP_MD = 1<<3,
0628 MFF_DIS_OP_MD = 1<<2,
0629 MFF_RST_CLR = 1<<1,
0630 MFF_RST_SET = 1<<0,
0631 };
0632
0633
0634
0635
0636
0637
0638
0639 enum {
0640 LED_START = 1<<2,
0641 LED_STOP = 1<<1,
0642 LED_STATE = 1<<0,
0643 };
0644
0645
0646
0647
0648 enum {
0649 LED_T_ON = 1<<2,
0650 LED_T_OFF = 1<<1,
0651 LED_T_STEP = 1<<0,
0652 };
0653
0654
0655 enum {
0656 LED_BLK_ON = 1<<5,
0657 LED_BLK_OFF = 1<<4,
0658 LED_SYNC_ON = 1<<3,
0659 LED_SYNC_OFF = 1<<2,
0660 LED_REG_ON = 1<<1,
0661 LED_REG_OFF = 1<<0,
0662 };
0663
0664
0665 enum {
0666 RX_GMF_EA = 0x0c40,
0667 RX_GMF_AF_THR = 0x0c44,
0668 RX_GMF_CTRL_T = 0x0c48,
0669 RX_GMF_FL_MSK = 0x0c4c,
0670 RX_GMF_FL_THR = 0x0c50,
0671 RX_GMF_WP = 0x0c60,
0672 RX_GMF_WLEV = 0x0c68,
0673 RX_GMF_RP = 0x0c70,
0674 RX_GMF_RLEV = 0x0c78,
0675 };
0676
0677
0678
0679 enum {
0680 TXA_INT_T_ON = 1<<5,
0681 TXA_INT_T_OFF = 1<<4,
0682 TXA_INT_T_STEP = 1<<3,
0683 TXA_LIM_T_ON = 1<<2,
0684 TXA_LIM_T_OFF = 1<<1,
0685 TXA_LIM_T_STEP = 1<<0,
0686 };
0687
0688
0689 enum {
0690 TXA_PRIO_XS = 1<<0,
0691 };
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704
0705 enum {
0706 CSR_SV_IDLE = 1<<24,
0707
0708 CSR_DESC_CLR = 1<<21,
0709 CSR_DESC_SET = 1<<20,
0710 CSR_FIFO_CLR = 1<<19,
0711 CSR_FIFO_SET = 1<<18,
0712 CSR_HPI_RUN = 1<<17,
0713 CSR_HPI_RST = 1<<16,
0714 CSR_SV_RUN = 1<<15,
0715 CSR_SV_RST = 1<<14,
0716 CSR_DREAD_RUN = 1<<13,
0717 CSR_DREAD_RST = 1<<12,
0718 CSR_DWRITE_RUN = 1<<11,
0719 CSR_DWRITE_RST = 1<<10,
0720 CSR_TRANS_RUN = 1<<9,
0721 CSR_TRANS_RST = 1<<8,
0722 CSR_ENA_POL = 1<<7,
0723 CSR_DIS_POL = 1<<6,
0724 CSR_STOP = 1<<5,
0725 CSR_START = 1<<4,
0726 CSR_IRQ_CL_P = 1<<3,
0727 CSR_IRQ_CL_B = 1<<2,
0728 CSR_IRQ_CL_F = 1<<1,
0729 CSR_IRQ_CL_C = 1<<0,
0730 };
0731
0732 #define CSR_SET_RESET (CSR_DESC_SET | CSR_FIFO_SET | CSR_HPI_RST |\
0733 CSR_SV_RST | CSR_DREAD_RST | CSR_DWRITE_RST |\
0734 CSR_TRANS_RST)
0735 #define CSR_CLR_RESET (CSR_DESC_CLR | CSR_FIFO_CLR | CSR_HPI_RUN |\
0736 CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\
0737 CSR_TRANS_RUN)
0738
0739
0740 enum {
0741 F_ALM_FULL = 1<<27,
0742 F_EMPTY = 1<<27,
0743 F_FIFO_EOF = 1<<26,
0744 F_WM_REACHED = 1<<25,
0745
0746 F_FIFO_LEVEL = 0x1fL<<16,
0747 F_WATER_MARK = 0x0007ffL,
0748 };
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762 #define RB_MSK 0x0007ffff
0763
0764
0765
0766
0767 enum {
0768 RB_ENA_STFWD = 1<<5,
0769 RB_DIS_STFWD = 1<<4,
0770 RB_ENA_OP_MD = 1<<3,
0771 RB_DIS_OP_MD = 1<<2,
0772 RB_RST_CLR = 1<<1,
0773 RB_RST_SET = 1<<0,
0774 };
0775
0776
0777 enum {
0778 TX_MFF_EA = 0x0d00,
0779 TX_MFF_WP = 0x0d04,
0780 TX_MFF_WSP = 0x0d08,
0781 TX_MFF_RP = 0x0d0c,
0782 TX_MFF_PC = 0x0d10,
0783 TX_MFF_LEV = 0x0d14,
0784 TX_MFF_CTRL1 = 0x0d18,
0785 TX_MFF_WAF = 0x0d1a,
0786
0787 TX_MFF_CTRL2 = 0x0d1c,
0788 TX_MFF_TST1 = 0x0d1d,
0789 TX_MFF_TST2 = 0x0d1e,
0790
0791 TX_LED_INI = 0x0d20,
0792 TX_LED_VAL = 0x0d24,
0793 TX_LED_CTRL = 0x0d28,
0794 TX_LED_TST = 0x0d29,
0795 };
0796
0797
0798 #define SK_XMIT_DUR 0x002faf08UL
0799 #define SK_BLK_DUR 0x01dcd650UL
0800
0801 #define SK_DPOLL_DEF 0x00ee6b28UL
0802
0803 #define SK_DPOLL_MAX 0x00ffffffUL
0804
0805
0806 #define SK_FACT_62 100
0807 #define SK_FACT_53 85
0808 #define SK_FACT_78 125
0809
0810
0811
0812 enum {
0813 TX_GMF_EA = 0x0d40,
0814 TX_GMF_AE_THR = 0x0d44,
0815 TX_GMF_CTRL_T = 0x0d48,
0816
0817 TX_GMF_WP = 0x0d60,
0818 TX_GMF_WSP = 0x0d64,
0819 TX_GMF_WLEV = 0x0d68,
0820
0821 TX_GMF_RP = 0x0d70,
0822 TX_GMF_RSTP = 0x0d74,
0823 TX_GMF_RLEV = 0x0d78,
0824
0825
0826 B28_DPT_INI = 0x0e00,
0827 B28_DPT_VAL = 0x0e04,
0828 B28_DPT_CTRL = 0x0e08,
0829
0830 B28_DPT_TST = 0x0e0a,
0831
0832
0833 GMAC_TI_ST_VAL = 0x0e14,
0834 GMAC_TI_ST_CTRL = 0x0e18,
0835 GMAC_TI_ST_TST = 0x0e1a,
0836 };
0837
0838
0839 enum {
0840 LINKLED_OFF = 0x01,
0841 LINKLED_ON = 0x02,
0842 LINKLED_LINKSYNC_OFF = 0x04,
0843 LINKLED_LINKSYNC_ON = 0x08,
0844 LINKLED_BLINK_OFF = 0x10,
0845 LINKLED_BLINK_ON = 0x20,
0846 };
0847
0848
0849 enum {
0850 GMAC_CTRL = 0x0f00,
0851 GPHY_CTRL = 0x0f04,
0852 GMAC_IRQ_SRC = 0x0f08,
0853 GMAC_IRQ_MSK = 0x0f0c,
0854 GMAC_LINK_CTRL = 0x0f10,
0855
0856
0857
0858 WOL_REG_OFFS = 0x20,
0859
0860 WOL_CTRL_STAT = 0x0f20,
0861 WOL_MATCH_CTL = 0x0f22,
0862 WOL_MATCH_RES = 0x0f23,
0863 WOL_MAC_ADDR = 0x0f24,
0864 WOL_PATT_RPTR = 0x0f2c,
0865
0866
0867
0868 WOL_PATT_LEN_LO = 0x0f30,
0869 WOL_PATT_LEN_HI = 0x0f34,
0870
0871
0872
0873 WOL_PATT_CNT_0 = 0x0f38,
0874 WOL_PATT_CNT_4 = 0x0f3c,
0875 };
0876 #define WOL_REGS(port, x) (x + (port)*0x80)
0877
0878 enum {
0879 WOL_PATT_RAM_1 = 0x1000,
0880 WOL_PATT_RAM_2 = 0x1400,
0881 };
0882 #define WOL_PATT_RAM_BASE(port) (WOL_PATT_RAM_1 + (port)*0x400)
0883
0884 enum {
0885 BASE_XMAC_1 = 0x2000,
0886 BASE_GMAC_1 = 0x2800,
0887 BASE_XMAC_2 = 0x3000,
0888 BASE_GMAC_2 = 0x3800,
0889 };
0890
0891
0892
0893
0894 enum {
0895 XMR_FS_LEN = 0x3fff<<18,
0896 XMR_FS_LEN_SHIFT = 18,
0897 XMR_FS_2L_VLAN = 1<<17,
0898 XMR_FS_1_VLAN = 1<<16,
0899 XMR_FS_BC = 1<<15,
0900 XMR_FS_MC = 1<<14,
0901 XMR_FS_UC = 1<<13,
0902
0903 XMR_FS_BURST = 1<<11,
0904 XMR_FS_CEX_ERR = 1<<10,
0905 XMR_FS_802_3 = 1<<9,
0906 XMR_FS_COL_ERR = 1<<8,
0907 XMR_FS_CAR_ERR = 1<<7,
0908 XMR_FS_LEN_ERR = 1<<6,
0909 XMR_FS_FRA_ERR = 1<<5,
0910 XMR_FS_RUNT = 1<<4,
0911 XMR_FS_LNG_ERR = 1<<3,
0912 XMR_FS_FCS_ERR = 1<<2,
0913 XMR_FS_ERR = 1<<1,
0914 XMR_FS_MCTRL = 1<<0,
0915
0916
0917
0918
0919
0920
0921
0922
0923
0924 };
0925
0926
0927
0928
0929 enum {
0930 PHY_XMAC_CTRL = 0x00,
0931 PHY_XMAC_STAT = 0x01,
0932 PHY_XMAC_ID0 = 0x02,
0933 PHY_XMAC_ID1 = 0x03,
0934 PHY_XMAC_AUNE_ADV = 0x04,
0935 PHY_XMAC_AUNE_LP = 0x05,
0936 PHY_XMAC_AUNE_EXP = 0x06,
0937 PHY_XMAC_NEPG = 0x07,
0938 PHY_XMAC_NEPG_LP = 0x08,
0939
0940 PHY_XMAC_EXT_STAT = 0x0f,
0941 PHY_XMAC_RES_ABI = 0x10,
0942 };
0943
0944
0945
0946 enum {
0947 PHY_BCOM_CTRL = 0x00,
0948 PHY_BCOM_STAT = 0x01,
0949 PHY_BCOM_ID0 = 0x02,
0950 PHY_BCOM_ID1 = 0x03,
0951 PHY_BCOM_AUNE_ADV = 0x04,
0952 PHY_BCOM_AUNE_LP = 0x05,
0953 PHY_BCOM_AUNE_EXP = 0x06,
0954 PHY_BCOM_NEPG = 0x07,
0955 PHY_BCOM_NEPG_LP = 0x08,
0956
0957 PHY_BCOM_1000T_CTRL = 0x09,
0958 PHY_BCOM_1000T_STAT = 0x0a,
0959 PHY_BCOM_EXT_STAT = 0x0f,
0960 PHY_BCOM_P_EXT_CTRL = 0x10,
0961 PHY_BCOM_P_EXT_STAT = 0x11,
0962 PHY_BCOM_RE_CTR = 0x12,
0963 PHY_BCOM_FC_CTR = 0x13,
0964 PHY_BCOM_RNO_CTR = 0x14,
0965
0966 PHY_BCOM_AUX_CTRL = 0x18,
0967 PHY_BCOM_AUX_STAT = 0x19,
0968 PHY_BCOM_INT_STAT = 0x1a,
0969 PHY_BCOM_INT_MASK = 0x1b,
0970 };
0971
0972
0973
0974
0975 enum {
0976 PHY_MARV_CTRL = 0x00,
0977 PHY_MARV_STAT = 0x01,
0978 PHY_MARV_ID0 = 0x02,
0979 PHY_MARV_ID1 = 0x03,
0980 PHY_MARV_AUNE_ADV = 0x04,
0981 PHY_MARV_AUNE_LP = 0x05,
0982 PHY_MARV_AUNE_EXP = 0x06,
0983 PHY_MARV_NEPG = 0x07,
0984 PHY_MARV_NEPG_LP = 0x08,
0985
0986 PHY_MARV_1000T_CTRL = 0x09,
0987 PHY_MARV_1000T_STAT = 0x0a,
0988 PHY_MARV_EXT_STAT = 0x0f,
0989 PHY_MARV_PHY_CTRL = 0x10,
0990 PHY_MARV_PHY_STAT = 0x11,
0991 PHY_MARV_INT_MASK = 0x12,
0992 PHY_MARV_INT_STAT = 0x13,
0993 PHY_MARV_EXT_CTRL = 0x14,
0994 PHY_MARV_RXE_CNT = 0x15,
0995 PHY_MARV_EXT_ADR = 0x16,
0996 PHY_MARV_PORT_IRQ = 0x17,
0997 PHY_MARV_LED_CTRL = 0x18,
0998 PHY_MARV_LED_OVER = 0x19,
0999 PHY_MARV_EXT_CTRL_2 = 0x1a,
1000 PHY_MARV_EXT_P_STAT = 0x1b,
1001 PHY_MARV_CABLE_DIAG = 0x1c,
1002 PHY_MARV_PAGE_ADDR = 0x1d,
1003 PHY_MARV_PAGE_DATA = 0x1e,
1004
1005
1006 PHY_MARV_FE_LED_PAR = 0x16,
1007 PHY_MARV_FE_LED_SER = 0x17,
1008 PHY_MARV_FE_VCT_TX = 0x1a,
1009 PHY_MARV_FE_VCT_RX = 0x1b,
1010 PHY_MARV_FE_SPEC_2 = 0x1c,
1011 };
1012
1013 enum {
1014 PHY_CT_RESET = 1<<15,
1015 PHY_CT_LOOP = 1<<14,
1016 PHY_CT_SPS_LSB = 1<<13,
1017 PHY_CT_ANE = 1<<12,
1018 PHY_CT_PDOWN = 1<<11,
1019 PHY_CT_ISOL = 1<<10,
1020 PHY_CT_RE_CFG = 1<<9,
1021 PHY_CT_DUP_MD = 1<<8,
1022 PHY_CT_COL_TST = 1<<7,
1023 PHY_CT_SPS_MSB = 1<<6,
1024 };
1025
1026 enum {
1027 PHY_CT_SP1000 = PHY_CT_SPS_MSB,
1028 PHY_CT_SP100 = PHY_CT_SPS_LSB,
1029 PHY_CT_SP10 = 0,
1030 };
1031
1032 enum {
1033 PHY_ST_EXT_ST = 1<<8,
1034
1035 PHY_ST_PRE_SUP = 1<<6,
1036 PHY_ST_AN_OVER = 1<<5,
1037 PHY_ST_REM_FLT = 1<<4,
1038 PHY_ST_AN_CAP = 1<<3,
1039 PHY_ST_LSYNC = 1<<2,
1040 PHY_ST_JAB_DET = 1<<1,
1041 PHY_ST_EXT_REG = 1<<0,
1042 };
1043
1044 enum {
1045 PHY_I1_OUI_MSK = 0x3f<<10,
1046 PHY_I1_MOD_NUM = 0x3f<<4,
1047 PHY_I1_REV_MSK = 0xf,
1048 };
1049
1050
1051 enum {
1052 PHY_BCOM_ID1_A1 = 0x6041,
1053 PHY_BCOM_ID1_B2 = 0x6043,
1054 PHY_BCOM_ID1_C0 = 0x6044,
1055 PHY_BCOM_ID1_C5 = 0x6047,
1056 };
1057
1058
1059 enum {
1060 PHY_MARV_ID0_VAL= 0x0141,
1061 PHY_MARV_ID1_B0 = 0x0C23,
1062 PHY_MARV_ID1_B2 = 0x0C25,
1063 PHY_MARV_ID1_C2 = 0x0CC2,
1064 PHY_MARV_ID1_Y2 = 0x0C91,
1065 };
1066
1067
1068 enum {
1069 PHY_AN_NXT_PG = 1<<15,
1070 PHY_AN_ACK = 1<<14,
1071 PHY_AN_RF = 1<<13,
1072
1073 PHY_AN_PAUSE_ASYM = 1<<11,
1074 PHY_AN_PAUSE_CAP = 1<<10,
1075 PHY_AN_100BASE4 = 1<<9,
1076 PHY_AN_100FULL = 1<<8,
1077 PHY_AN_100HALF = 1<<7,
1078 PHY_AN_10FULL = 1<<6,
1079 PHY_AN_10HALF = 1<<5,
1080 PHY_AN_CSMA = 1<<0,
1081 PHY_AN_SEL = 0x1f,
1082 PHY_AN_FULL = PHY_AN_100FULL | PHY_AN_10FULL | PHY_AN_CSMA,
1083 PHY_AN_ALL = PHY_AN_10HALF | PHY_AN_10FULL |
1084 PHY_AN_100HALF | PHY_AN_100FULL,
1085 };
1086
1087
1088 enum {
1089 PHY_X_AN_NXT_PG = 1<<15,
1090 PHY_X_AN_ACK = 1<<14,
1091 PHY_X_AN_RFB = 3<<12,
1092
1093 PHY_X_AN_PAUSE = 3<<7,
1094 PHY_X_AN_HD = 1<<6,
1095 PHY_X_AN_FD = 1<<5,
1096 };
1097
1098
1099 enum {
1100 PHY_X_P_NO_PAUSE= 0<<7,
1101 PHY_X_P_SYM_MD = 1<<7,
1102 PHY_X_P_ASYM_MD = 2<<7,
1103 PHY_X_P_BOTH_MD = 3<<7,
1104 };
1105
1106
1107
1108 enum {
1109 PHY_X_EX_FD = 1<<15,
1110 PHY_X_EX_HD = 1<<14,
1111 };
1112
1113
1114 enum {
1115 PHY_X_RS_PAUSE = 3<<7,
1116 PHY_X_RS_HD = 1<<6,
1117 PHY_X_RS_FD = 1<<5,
1118 PHY_X_RS_ABLMIS = 1<<4,
1119 PHY_X_RS_PAUMIS = 1<<3,
1120 };
1121
1122
1123 enum {
1124 X_RFB_OK = 0<<12,
1125 X_RFB_LF = 1<<12,
1126 X_RFB_OFF = 2<<12,
1127 X_RFB_AN_ERR = 3<<12,
1128 };
1129
1130
1131
1132 enum {
1133 PHY_B_1000C_TEST = 7<<13,
1134 PHY_B_1000C_MSE = 1<<12,
1135 PHY_B_1000C_MSC = 1<<11,
1136 PHY_B_1000C_RD = 1<<10,
1137 PHY_B_1000C_AFD = 1<<9,
1138 PHY_B_1000C_AHD = 1<<8,
1139 };
1140
1141
1142
1143 enum {
1144 PHY_B_1000S_MSF = 1<<15,
1145 PHY_B_1000S_MSR = 1<<14,
1146 PHY_B_1000S_LRS = 1<<13,
1147 PHY_B_1000S_RRS = 1<<12,
1148 PHY_B_1000S_LP_FD = 1<<11,
1149 PHY_B_1000S_LP_HD = 1<<10,
1150
1151 PHY_B_1000S_IEC = 0xff,
1152 };
1153
1154
1155 enum {
1156 PHY_B_ES_X_FD_CAP = 1<<15,
1157 PHY_B_ES_X_HD_CAP = 1<<14,
1158 PHY_B_ES_T_FD_CAP = 1<<13,
1159 PHY_B_ES_T_HD_CAP = 1<<12,
1160 };
1161
1162
1163 enum {
1164 PHY_B_PEC_MAC_PHY = 1<<15,
1165 PHY_B_PEC_DIS_CROSS = 1<<14,
1166 PHY_B_PEC_TX_DIS = 1<<13,
1167 PHY_B_PEC_INT_DIS = 1<<12,
1168 PHY_B_PEC_F_INT = 1<<11,
1169 PHY_B_PEC_BY_45 = 1<<10,
1170 PHY_B_PEC_BY_SCR = 1<<9,
1171 PHY_B_PEC_BY_MLT3 = 1<<8,
1172 PHY_B_PEC_BY_RXA = 1<<7,
1173 PHY_B_PEC_RES_SCR = 1<<6,
1174 PHY_B_PEC_EN_LTR = 1<<5,
1175 PHY_B_PEC_LED_ON = 1<<4,
1176 PHY_B_PEC_LED_OFF = 1<<3,
1177 PHY_B_PEC_EX_IPG = 1<<2,
1178 PHY_B_PEC_3_LED = 1<<1,
1179 PHY_B_PEC_HIGH_LA = 1<<0,
1180 };
1181
1182
1183 enum {
1184 PHY_B_PES_CROSS_STAT = 1<<13,
1185 PHY_B_PES_INT_STAT = 1<<12,
1186 PHY_B_PES_RRS = 1<<11,
1187 PHY_B_PES_LRS = 1<<10,
1188 PHY_B_PES_LOCKED = 1<<9,
1189 PHY_B_PES_LS = 1<<8,
1190 PHY_B_PES_RF = 1<<7,
1191 PHY_B_PES_CE_ER = 1<<6,
1192 PHY_B_PES_BAD_SSD = 1<<5,
1193 PHY_B_PES_BAD_ESD = 1<<4,
1194 PHY_B_PES_RX_ER = 1<<3,
1195 PHY_B_PES_TX_ER = 1<<2,
1196 PHY_B_PES_LOCK_ER = 1<<1,
1197 PHY_B_PES_MLT3_ER = 1<<0,
1198 };
1199
1200
1201
1202 enum {
1203 PHY_B_AN_RF = 1<<13,
1204
1205 PHY_B_AN_ASP = 1<<11,
1206 PHY_B_AN_PC = 1<<10,
1207 };
1208
1209
1210
1211 enum {
1212 PHY_B_FC_CTR = 0xff,
1213
1214
1215 PHY_B_RC_LOC_MSK = 0xff00,
1216 PHY_B_RC_REM_MSK = 0x00ff,
1217
1218
1219 PHY_B_AC_L_SQE = 1<<15,
1220 PHY_B_AC_LONG_PACK = 1<<14,
1221 PHY_B_AC_ER_CTRL = 3<<12,
1222
1223 PHY_B_AC_TX_TST = 1<<10,
1224
1225 PHY_B_AC_DIS_PRF = 1<<7,
1226
1227 PHY_B_AC_DIS_PM = 1<<5,
1228
1229 PHY_B_AC_DIAG = 1<<3,
1230 };
1231
1232
1233 enum {
1234 PHY_B_AS_AN_C = 1<<15,
1235 PHY_B_AS_AN_CA = 1<<14,
1236 PHY_B_AS_ANACK_D = 1<<13,
1237 PHY_B_AS_ANAB_D = 1<<12,
1238 PHY_B_AS_NPW = 1<<11,
1239 PHY_B_AS_AN_RES_MSK = 7<<8,
1240 PHY_B_AS_PDF = 1<<7,
1241 PHY_B_AS_RF = 1<<6,
1242 PHY_B_AS_ANP_R = 1<<5,
1243 PHY_B_AS_LP_ANAB = 1<<4,
1244 PHY_B_AS_LP_NPAB = 1<<3,
1245 PHY_B_AS_LS = 1<<2,
1246 PHY_B_AS_PRR = 1<<1,
1247 PHY_B_AS_PRT = 1<<0,
1248 };
1249 #define PHY_B_AS_PAUSE_MSK (PHY_B_AS_PRR | PHY_B_AS_PRT)
1250
1251
1252
1253 enum {
1254 PHY_B_IS_PSE = 1<<14,
1255 PHY_B_IS_MDXI_SC = 1<<13,
1256 PHY_B_IS_HCT = 1<<12,
1257 PHY_B_IS_LCT = 1<<11,
1258 PHY_B_IS_AN_PR = 1<<10,
1259 PHY_B_IS_NO_HDCL = 1<<9,
1260 PHY_B_IS_NO_HDC = 1<<8,
1261 PHY_B_IS_NEG_USHDC = 1<<7,
1262 PHY_B_IS_SCR_S_ER = 1<<6,
1263 PHY_B_IS_RRS_CHANGE = 1<<5,
1264 PHY_B_IS_LRS_CHANGE = 1<<4,
1265 PHY_B_IS_DUP_CHANGE = 1<<3,
1266 PHY_B_IS_LSP_CHANGE = 1<<2,
1267 PHY_B_IS_LST_CHANGE = 1<<1,
1268 PHY_B_IS_CRC_ER = 1<<0,
1269 };
1270 #define PHY_B_DEF_MSK \
1271 (~(PHY_B_IS_PSE | PHY_B_IS_AN_PR | PHY_B_IS_DUP_CHANGE | \
1272 PHY_B_IS_LSP_CHANGE | PHY_B_IS_LST_CHANGE))
1273
1274
1275 enum {
1276 PHY_B_P_NO_PAUSE = 0<<10,
1277 PHY_B_P_SYM_MD = 1<<10,
1278 PHY_B_P_ASYM_MD = 2<<10,
1279 PHY_B_P_BOTH_MD = 3<<10,
1280 };
1281
1282
1283
1284 enum {
1285 PHY_B_RES_1000FD = 7<<8,
1286 PHY_B_RES_1000HD = 6<<8,
1287 };
1288
1289
1290 enum {
1291 PHY_M_AN_NXT_PG = 1<<15,
1292 PHY_M_AN_ACK = 1<<14,
1293 PHY_M_AN_RF = 1<<13,
1294
1295 PHY_M_AN_ASP = 1<<11,
1296 PHY_M_AN_PC = 1<<10,
1297 PHY_M_AN_100_T4 = 1<<9,
1298 PHY_M_AN_100_FD = 1<<8,
1299 PHY_M_AN_100_HD = 1<<7,
1300 PHY_M_AN_10_FD = 1<<6,
1301 PHY_M_AN_10_HD = 1<<5,
1302 PHY_M_AN_SEL_MSK =0x1f<<4,
1303 };
1304
1305
1306 enum {
1307 PHY_M_AN_ASP_X = 1<<8,
1308 PHY_M_AN_PC_X = 1<<7,
1309 PHY_M_AN_1000X_AHD = 1<<6,
1310 PHY_M_AN_1000X_AFD = 1<<5,
1311 };
1312
1313
1314 enum {
1315 PHY_M_P_NO_PAUSE_X = 0<<7,
1316 PHY_M_P_SYM_MD_X = 1<<7,
1317 PHY_M_P_ASYM_MD_X = 2<<7,
1318 PHY_M_P_BOTH_MD_X = 3<<7,
1319 };
1320
1321
1322 enum {
1323 PHY_M_1000C_TEST= 7<<13,
1324 PHY_M_1000C_MSE = 1<<12,
1325 PHY_M_1000C_MSC = 1<<11,
1326 PHY_M_1000C_MPD = 1<<10,
1327 PHY_M_1000C_AFD = 1<<9,
1328 PHY_M_1000C_AHD = 1<<8,
1329 };
1330
1331
1332 enum {
1333 PHY_M_PC_TX_FFD_MSK = 3<<14,
1334 PHY_M_PC_RX_FFD_MSK = 3<<12,
1335 PHY_M_PC_ASS_CRS_TX = 1<<11,
1336 PHY_M_PC_FL_GOOD = 1<<10,
1337 PHY_M_PC_EN_DET_MSK = 3<<8,
1338 PHY_M_PC_ENA_EXT_D = 1<<7,
1339 PHY_M_PC_MDIX_MSK = 3<<5,
1340 PHY_M_PC_DIS_125CLK = 1<<4,
1341 PHY_M_PC_MAC_POW_UP = 1<<3,
1342 PHY_M_PC_SQE_T_ENA = 1<<2,
1343 PHY_M_PC_POL_R_DIS = 1<<1,
1344 PHY_M_PC_DIS_JABBER = 1<<0,
1345 };
1346
1347 enum {
1348 PHY_M_PC_EN_DET = 2<<8,
1349 PHY_M_PC_EN_DET_PLUS = 3<<8,
1350 };
1351
1352 enum {
1353 PHY_M_PC_MAN_MDI = 0,
1354 PHY_M_PC_MAN_MDIX = 1,
1355 PHY_M_PC_ENA_AUTO = 3,
1356 };
1357
1358
1359 enum {
1360 PHY_M_PC_ENA_DTE_DT = 1<<15,
1361 PHY_M_PC_ENA_ENE_DT = 1<<14,
1362 PHY_M_PC_DIS_NLP_CK = 1<<13,
1363 PHY_M_PC_ENA_LIP_NP = 1<<12,
1364 PHY_M_PC_DIS_NLP_GN = 1<<11,
1365
1366 PHY_M_PC_DIS_SCRAMB = 1<<9,
1367 PHY_M_PC_DIS_FEFI = 1<<8,
1368
1369 PHY_M_PC_SH_TP_SEL = 1<<6,
1370 PHY_M_PC_RX_FD_MSK = 3<<2,
1371 };
1372
1373
1374 enum {
1375 PHY_M_PS_SPEED_MSK = 3<<14,
1376 PHY_M_PS_SPEED_1000 = 1<<15,
1377 PHY_M_PS_SPEED_100 = 1<<14,
1378 PHY_M_PS_SPEED_10 = 0,
1379 PHY_M_PS_FULL_DUP = 1<<13,
1380 PHY_M_PS_PAGE_REC = 1<<12,
1381 PHY_M_PS_SPDUP_RES = 1<<11,
1382 PHY_M_PS_LINK_UP = 1<<10,
1383 PHY_M_PS_CABLE_MSK = 7<<7,
1384 PHY_M_PS_MDI_X_STAT = 1<<6,
1385 PHY_M_PS_DOWNS_STAT = 1<<5,
1386 PHY_M_PS_ENDET_STAT = 1<<4,
1387 PHY_M_PS_TX_P_EN = 1<<3,
1388 PHY_M_PS_RX_P_EN = 1<<2,
1389 PHY_M_PS_POL_REV = 1<<1,
1390 PHY_M_PS_JABBER = 1<<0,
1391 };
1392
1393 #define PHY_M_PS_PAUSE_MSK (PHY_M_PS_TX_P_EN | PHY_M_PS_RX_P_EN)
1394
1395
1396 enum {
1397 PHY_M_PS_DTE_DETECT = 1<<15,
1398 PHY_M_PS_RES_SPEED = 1<<14,
1399 };
1400
1401 enum {
1402 PHY_M_IS_AN_ERROR = 1<<15,
1403 PHY_M_IS_LSP_CHANGE = 1<<14,
1404 PHY_M_IS_DUP_CHANGE = 1<<13,
1405 PHY_M_IS_AN_PR = 1<<12,
1406 PHY_M_IS_AN_COMPL = 1<<11,
1407 PHY_M_IS_LST_CHANGE = 1<<10,
1408 PHY_M_IS_SYMB_ERROR = 1<<9,
1409 PHY_M_IS_FALSE_CARR = 1<<8,
1410 PHY_M_IS_FIFO_ERROR = 1<<7,
1411 PHY_M_IS_MDI_CHANGE = 1<<6,
1412 PHY_M_IS_DOWNSH_DET = 1<<5,
1413 PHY_M_IS_END_CHANGE = 1<<4,
1414
1415 PHY_M_IS_DTE_CHANGE = 1<<2,
1416 PHY_M_IS_POL_CHANGE = 1<<1,
1417 PHY_M_IS_JABBER = 1<<0,
1418
1419 PHY_M_IS_DEF_MSK = PHY_M_IS_AN_ERROR | PHY_M_IS_LSP_CHANGE |
1420 PHY_M_IS_LST_CHANGE | PHY_M_IS_FIFO_ERROR,
1421
1422 PHY_M_IS_AN_MSK = PHY_M_IS_AN_ERROR | PHY_M_IS_AN_COMPL,
1423 };
1424
1425
1426 enum {
1427 PHY_M_EC_ENA_BC_EXT = 1<<15,
1428 PHY_M_EC_ENA_LIN_LB = 1<<14,
1429
1430 PHY_M_EC_DIS_LINK_P = 1<<12,
1431 PHY_M_EC_M_DSC_MSK = 3<<10,
1432
1433 PHY_M_EC_S_DSC_MSK = 3<<8,
1434
1435 PHY_M_EC_M_DSC_MSK2 = 7<<9,
1436
1437 PHY_M_EC_DOWN_S_ENA = 1<<8,
1438
1439 PHY_M_EC_RX_TIM_CT = 1<<7,
1440 PHY_M_EC_MAC_S_MSK = 7<<4,
1441 PHY_M_EC_FIB_AN_ENA = 1<<3,
1442 PHY_M_EC_DTE_D_ENA = 1<<2,
1443 PHY_M_EC_TX_TIM_CT = 1<<1,
1444 PHY_M_EC_TRANS_DIS = 1<<0, };
1445
1446 #define PHY_M_EC_M_DSC(x) ((u16)(x)<<10)
1447 #define PHY_M_EC_S_DSC(x) ((u16)(x)<<8)
1448 #define PHY_M_EC_MAC_S(x) ((u16)(x)<<4)
1449
1450 #define PHY_M_EC_M_DSC_2(x) ((u16)(x)<<9)
1451
1452 enum {
1453 MAC_TX_CLK_0_MHZ = 2,
1454 MAC_TX_CLK_2_5_MHZ = 6,
1455 MAC_TX_CLK_25_MHZ = 7,
1456 };
1457
1458
1459 enum {
1460 PHY_M_LEDC_DIS_LED = 1<<15,
1461 PHY_M_LEDC_PULS_MSK = 7<<12,
1462 PHY_M_LEDC_F_INT = 1<<11,
1463 PHY_M_LEDC_BL_R_MSK = 7<<8,
1464 PHY_M_LEDC_DP_C_LSB = 1<<7,
1465 PHY_M_LEDC_TX_C_LSB = 1<<6,
1466 PHY_M_LEDC_LK_C_MSK = 7<<3,
1467
1468 };
1469 #define PHY_M_LED_PULS_DUR(x) (((u16)(x)<<12) & PHY_M_LEDC_PULS_MSK)
1470 #define PHY_M_LED_BLINK_RT(x) (((u16)(x)<<8) & PHY_M_LEDC_BL_R_MSK)
1471
1472 enum {
1473 PHY_M_LEDC_LINK_MSK = 3<<3,
1474
1475 PHY_M_LEDC_DP_CTRL = 1<<2,
1476 PHY_M_LEDC_DP_C_MSB = 1<<2,
1477 PHY_M_LEDC_RX_CTRL = 1<<1,
1478 PHY_M_LEDC_TX_CTRL = 1<<0,
1479 PHY_M_LEDC_TX_C_MSB = 1<<0,
1480 };
1481
1482 enum {
1483 PULS_NO_STR = 0,
1484 PULS_21MS = 1,
1485 PULS_42MS = 2,
1486 PULS_84MS = 3,
1487 PULS_170MS = 4,
1488 PULS_340MS = 5,
1489 PULS_670MS = 6,
1490 PULS_1300MS = 7,
1491 };
1492
1493
1494 enum {
1495 BLINK_42MS = 0,
1496 BLINK_84MS = 1,
1497 BLINK_170MS = 2,
1498 BLINK_340MS = 3,
1499 BLINK_670MS = 4,
1500 };
1501
1502
1503 #define PHY_M_LED_MO_SGMII(x) ((x)<<14)
1504
1505 #define PHY_M_LED_MO_DUP(x) ((x)<<10)
1506 #define PHY_M_LED_MO_10(x) ((x)<<8)
1507 #define PHY_M_LED_MO_100(x) ((x)<<6)
1508 #define PHY_M_LED_MO_1000(x) ((x)<<4)
1509 #define PHY_M_LED_MO_RX(x) ((x)<<2)
1510 #define PHY_M_LED_MO_TX(x) ((x)<<0)
1511
1512 enum {
1513 MO_LED_NORM = 0,
1514 MO_LED_BLINK = 1,
1515 MO_LED_OFF = 2,
1516 MO_LED_ON = 3,
1517 };
1518
1519
1520 enum {
1521 PHY_M_EC2_FI_IMPED = 1<<6,
1522 PHY_M_EC2_FO_IMPED = 1<<5,
1523 PHY_M_EC2_FO_M_CLK = 1<<4,
1524 PHY_M_EC2_FO_BOOST = 1<<3,
1525 PHY_M_EC2_FO_AM_MSK = 7,
1526 };
1527
1528
1529 enum {
1530 PHY_M_FC_AUTO_SEL = 1<<15,
1531 PHY_M_FC_AN_REG_ACC = 1<<14,
1532 PHY_M_FC_RESOLUTION = 1<<13,
1533 PHY_M_SER_IF_AN_BP = 1<<12,
1534 PHY_M_SER_IF_BP_ST = 1<<11,
1535 PHY_M_IRQ_POLARITY = 1<<10,
1536 PHY_M_DIS_AUT_MED = 1<<9,
1537
1538
1539 PHY_M_UNDOC1 = 1<<7,
1540 PHY_M_DTE_POW_STAT = 1<<4,
1541 PHY_M_MODE_MASK = 0xf,
1542 };
1543
1544
1545 enum {
1546 PHY_M_CABD_ENA_TEST = 1<<15,
1547 PHY_M_CABD_DIS_WAIT = 1<<15,
1548
1549 PHY_M_CABD_STAT_MSK = 3<<13,
1550 PHY_M_CABD_AMPL_MSK = 0x1f<<8,
1551
1552 PHY_M_CABD_DIST_MSK = 0xff,
1553 };
1554
1555
1556 enum {
1557 CABD_STAT_NORMAL= 0,
1558 CABD_STAT_SHORT = 1,
1559 CABD_STAT_OPEN = 2,
1560 CABD_STAT_FAIL = 3,
1561 };
1562
1563
1564
1565
1566 enum {
1567 PHY_M_FELP_LED2_MSK = 0xf<<8,
1568 PHY_M_FELP_LED1_MSK = 0xf<<4,
1569 PHY_M_FELP_LED0_MSK = 0xf,
1570 };
1571
1572 #define PHY_M_FELP_LED2_CTRL(x) (((x)<<8) & PHY_M_FELP_LED2_MSK)
1573 #define PHY_M_FELP_LED1_CTRL(x) (((x)<<4) & PHY_M_FELP_LED1_MSK)
1574 #define PHY_M_FELP_LED0_CTRL(x) (((x)<<0) & PHY_M_FELP_LED0_MSK)
1575
1576 enum {
1577 LED_PAR_CTRL_COLX = 0x00,
1578 LED_PAR_CTRL_ERROR = 0x01,
1579 LED_PAR_CTRL_DUPLEX = 0x02,
1580 LED_PAR_CTRL_DP_COL = 0x03,
1581 LED_PAR_CTRL_SPEED = 0x04,
1582 LED_PAR_CTRL_LINK = 0x05,
1583 LED_PAR_CTRL_TX = 0x06,
1584 LED_PAR_CTRL_RX = 0x07,
1585 LED_PAR_CTRL_ACT = 0x08,
1586 LED_PAR_CTRL_LNK_RX = 0x09,
1587 LED_PAR_CTRL_LNK_AC = 0x0a,
1588 LED_PAR_CTRL_ACT_BL = 0x0b,
1589 LED_PAR_CTRL_TX_BL = 0x0c,
1590 LED_PAR_CTRL_RX_BL = 0x0d,
1591 LED_PAR_CTRL_COL_BL = 0x0e,
1592 LED_PAR_CTRL_INACT = 0x0f
1593 };
1594
1595
1596 enum {
1597 PHY_M_FESC_DIS_WAIT = 1<<2,
1598 PHY_M_FESC_ENA_MCLK = 1<<1,
1599 PHY_M_FESC_SEL_CL_A = 1<<0,
1600 };
1601
1602
1603
1604 enum {
1605 PHY_M_LEDC_LOS_MSK = 0xf<<12,
1606 PHY_M_LEDC_INIT_MSK = 0xf<<8,
1607 PHY_M_LEDC_STA1_MSK = 0xf<<4,
1608 PHY_M_LEDC_STA0_MSK = 0xf,
1609 };
1610
1611 #define PHY_M_LEDC_LOS_CTRL(x) (((x)<<12) & PHY_M_LEDC_LOS_MSK)
1612 #define PHY_M_LEDC_INIT_CTRL(x) (((x)<<8) & PHY_M_LEDC_INIT_MSK)
1613 #define PHY_M_LEDC_STA1_CTRL(x) (((x)<<4) & PHY_M_LEDC_STA1_MSK)
1614 #define PHY_M_LEDC_STA0_CTRL(x) (((x)<<0) & PHY_M_LEDC_STA0_MSK)
1615
1616
1617
1618 enum {
1619 GM_GP_STAT = 0x0000,
1620 GM_GP_CTRL = 0x0004,
1621 GM_TX_CTRL = 0x0008,
1622 GM_RX_CTRL = 0x000c,
1623 GM_TX_FLOW_CTRL = 0x0010,
1624 GM_TX_PARAM = 0x0014,
1625 GM_SERIAL_MODE = 0x0018,
1626
1627 GM_SRC_ADDR_1L = 0x001c,
1628 GM_SRC_ADDR_1M = 0x0020,
1629 GM_SRC_ADDR_1H = 0x0024,
1630 GM_SRC_ADDR_2L = 0x0028,
1631 GM_SRC_ADDR_2M = 0x002c,
1632 GM_SRC_ADDR_2H = 0x0030,
1633
1634
1635 GM_MC_ADDR_H1 = 0x0034,
1636 GM_MC_ADDR_H2 = 0x0038,
1637 GM_MC_ADDR_H3 = 0x003c,
1638 GM_MC_ADDR_H4 = 0x0040,
1639
1640
1641 GM_TX_IRQ_SRC = 0x0044,
1642 GM_RX_IRQ_SRC = 0x0048,
1643 GM_TR_IRQ_SRC = 0x004c,
1644
1645
1646 GM_TX_IRQ_MSK = 0x0050,
1647 GM_RX_IRQ_MSK = 0x0054,
1648 GM_TR_IRQ_MSK = 0x0058,
1649
1650
1651 GM_SMI_CTRL = 0x0080,
1652 GM_SMI_DATA = 0x0084,
1653 GM_PHY_ADDR = 0x0088,
1654 };
1655
1656
1657 #define GM_MIB_CNT_BASE 0x0100
1658 #define GM_MIB_CNT_SIZE 44
1659
1660
1661
1662
1663
1664 enum {
1665 GM_RXF_UC_OK = GM_MIB_CNT_BASE + 0,
1666 GM_RXF_BC_OK = GM_MIB_CNT_BASE + 8,
1667 GM_RXF_MPAUSE = GM_MIB_CNT_BASE + 16,
1668 GM_RXF_MC_OK = GM_MIB_CNT_BASE + 24,
1669 GM_RXF_FCS_ERR = GM_MIB_CNT_BASE + 32,
1670
1671 GM_RXO_OK_LO = GM_MIB_CNT_BASE + 48,
1672 GM_RXO_OK_HI = GM_MIB_CNT_BASE + 56,
1673 GM_RXO_ERR_LO = GM_MIB_CNT_BASE + 64,
1674 GM_RXO_ERR_HI = GM_MIB_CNT_BASE + 72,
1675 GM_RXF_SHT = GM_MIB_CNT_BASE + 80,
1676 GM_RXE_FRAG = GM_MIB_CNT_BASE + 88,
1677 GM_RXF_64B = GM_MIB_CNT_BASE + 96,
1678 GM_RXF_127B = GM_MIB_CNT_BASE + 104,
1679 GM_RXF_255B = GM_MIB_CNT_BASE + 112,
1680 GM_RXF_511B = GM_MIB_CNT_BASE + 120,
1681 GM_RXF_1023B = GM_MIB_CNT_BASE + 128,
1682 GM_RXF_1518B = GM_MIB_CNT_BASE + 136,
1683 GM_RXF_MAX_SZ = GM_MIB_CNT_BASE + 144,
1684 GM_RXF_LNG_ERR = GM_MIB_CNT_BASE + 152,
1685 GM_RXF_JAB_PKT = GM_MIB_CNT_BASE + 160,
1686
1687 GM_RXE_FIFO_OV = GM_MIB_CNT_BASE + 176,
1688
1689 GM_TXF_UC_OK = GM_MIB_CNT_BASE + 192,
1690 GM_TXF_BC_OK = GM_MIB_CNT_BASE + 200,
1691 GM_TXF_MPAUSE = GM_MIB_CNT_BASE + 208,
1692 GM_TXF_MC_OK = GM_MIB_CNT_BASE + 216,
1693 GM_TXO_OK_LO = GM_MIB_CNT_BASE + 224,
1694 GM_TXO_OK_HI = GM_MIB_CNT_BASE + 232,
1695 GM_TXF_64B = GM_MIB_CNT_BASE + 240,
1696 GM_TXF_127B = GM_MIB_CNT_BASE + 248,
1697 GM_TXF_255B = GM_MIB_CNT_BASE + 256,
1698 GM_TXF_511B = GM_MIB_CNT_BASE + 264,
1699 GM_TXF_1023B = GM_MIB_CNT_BASE + 272,
1700 GM_TXF_1518B = GM_MIB_CNT_BASE + 280,
1701 GM_TXF_MAX_SZ = GM_MIB_CNT_BASE + 288,
1702
1703 GM_TXF_COL = GM_MIB_CNT_BASE + 304,
1704 GM_TXF_LAT_COL = GM_MIB_CNT_BASE + 312,
1705 GM_TXF_ABO_COL = GM_MIB_CNT_BASE + 320,
1706 GM_TXF_MUL_COL = GM_MIB_CNT_BASE + 328,
1707 GM_TXF_SNG_COL = GM_MIB_CNT_BASE + 336,
1708 GM_TXE_FIFO_UR = GM_MIB_CNT_BASE + 344,
1709 };
1710
1711
1712
1713 enum {
1714 GM_GPSR_SPEED = 1<<15,
1715 GM_GPSR_DUPLEX = 1<<14,
1716 GM_GPSR_FC_TX_DIS = 1<<13,
1717 GM_GPSR_LINK_UP = 1<<12,
1718 GM_GPSR_PAUSE = 1<<11,
1719 GM_GPSR_TX_ACTIVE = 1<<10,
1720 GM_GPSR_EXC_COL = 1<<9,
1721 GM_GPSR_LAT_COL = 1<<8,
1722
1723 GM_GPSR_PHY_ST_CH = 1<<5,
1724 GM_GPSR_GIG_SPEED = 1<<4,
1725 GM_GPSR_PART_MODE = 1<<3,
1726 GM_GPSR_FC_RX_DIS = 1<<2,
1727 GM_GPSR_PROM_EN = 1<<1,
1728 };
1729
1730
1731 enum {
1732 GM_GPCR_PROM_ENA = 1<<14,
1733 GM_GPCR_FC_TX_DIS = 1<<13,
1734 GM_GPCR_TX_ENA = 1<<12,
1735 GM_GPCR_RX_ENA = 1<<11,
1736 GM_GPCR_BURST_ENA = 1<<10,
1737 GM_GPCR_LOOP_ENA = 1<<9,
1738 GM_GPCR_PART_ENA = 1<<8,
1739 GM_GPCR_GIGS_ENA = 1<<7,
1740 GM_GPCR_FL_PASS = 1<<6,
1741 GM_GPCR_DUP_FULL = 1<<5,
1742 GM_GPCR_FC_RX_DIS = 1<<4,
1743 GM_GPCR_SPEED_100 = 1<<3,
1744 GM_GPCR_AU_DUP_DIS = 1<<2,
1745 GM_GPCR_AU_FCT_DIS = 1<<1,
1746 GM_GPCR_AU_SPD_DIS = 1<<0,
1747 };
1748
1749 #define GM_GPCR_SPEED_1000 (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
1750 #define GM_GPCR_AU_ALL_DIS (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS|GM_GPCR_AU_SPD_DIS)
1751
1752
1753 enum {
1754 GM_TXCR_FORCE_JAM = 1<<15,
1755 GM_TXCR_CRC_DIS = 1<<14,
1756 GM_TXCR_PAD_DIS = 1<<13,
1757 GM_TXCR_COL_THR_MSK = 7<<10,
1758 };
1759
1760 #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK)
1761 #define TX_COL_DEF 0x04
1762
1763
1764 enum {
1765 GM_RXCR_UCF_ENA = 1<<15,
1766 GM_RXCR_MCF_ENA = 1<<14,
1767 GM_RXCR_CRC_DIS = 1<<13,
1768 GM_RXCR_PASS_FC = 1<<12,
1769 };
1770
1771
1772 enum {
1773 GM_TXPA_JAMLEN_MSK = 0x03<<14,
1774 GM_TXPA_JAMIPG_MSK = 0x1f<<9,
1775 GM_TXPA_JAMDAT_MSK = 0x1f<<4,
1776
1777 TX_JAM_LEN_DEF = 0x03,
1778 TX_JAM_IPG_DEF = 0x0b,
1779 TX_IPG_JAM_DEF = 0x1c,
1780 };
1781
1782 #define TX_JAM_LEN_VAL(x) (((x)<<14) & GM_TXPA_JAMLEN_MSK)
1783 #define TX_JAM_IPG_VAL(x) (((x)<<9) & GM_TXPA_JAMIPG_MSK)
1784 #define TX_IPG_JAM_DATA(x) (((x)<<4) & GM_TXPA_JAMDAT_MSK)
1785
1786
1787
1788 enum {
1789 GM_SMOD_DATABL_MSK = 0x1f<<11,
1790 GM_SMOD_LIMIT_4 = 1<<10,
1791 GM_SMOD_VLAN_ENA = 1<<9,
1792 GM_SMOD_JUMBO_ENA = 1<<8,
1793 GM_SMOD_IPG_MSK = 0x1f
1794 };
1795
1796 #define DATA_BLIND_VAL(x) (((x)<<11) & GM_SMOD_DATABL_MSK)
1797 #define DATA_BLIND_DEF 0x04
1798
1799 #define IPG_DATA_VAL(x) (x & GM_SMOD_IPG_MSK)
1800 #define IPG_DATA_DEF 0x1e
1801
1802
1803 enum {
1804 GM_SMI_CT_PHY_A_MSK = 0x1f<<11,
1805 GM_SMI_CT_REG_A_MSK = 0x1f<<6,
1806 GM_SMI_CT_OP_RD = 1<<5,
1807 GM_SMI_CT_RD_VAL = 1<<4,
1808 GM_SMI_CT_BUSY = 1<<3,
1809 };
1810
1811 #define GM_SMI_CT_PHY_AD(x) (((x)<<11) & GM_SMI_CT_PHY_A_MSK)
1812 #define GM_SMI_CT_REG_AD(x) (((x)<<6) & GM_SMI_CT_REG_A_MSK)
1813
1814
1815 enum {
1816 GM_PAR_MIB_CLR = 1<<5,
1817 GM_PAR_MIB_TST = 1<<4,
1818 };
1819
1820
1821 enum {
1822 GMR_FS_LEN = 0xffff<<16,
1823 GMR_FS_LEN_SHIFT = 16,
1824 GMR_FS_VLAN = 1<<13,
1825 GMR_FS_JABBER = 1<<12,
1826 GMR_FS_UN_SIZE = 1<<11,
1827 GMR_FS_MC = 1<<10,
1828 GMR_FS_BC = 1<<9,
1829 GMR_FS_RX_OK = 1<<8,
1830 GMR_FS_GOOD_FC = 1<<7,
1831 GMR_FS_BAD_FC = 1<<6,
1832 GMR_FS_MII_ERR = 1<<5,
1833 GMR_FS_LONG_ERR = 1<<4,
1834 GMR_FS_FRAGMENT = 1<<3,
1835
1836 GMR_FS_CRC_ERR = 1<<1,
1837 GMR_FS_RX_FF_OV = 1<<0,
1838
1839
1840
1841
1842 GMR_FS_ANY_ERR = GMR_FS_CRC_ERR | GMR_FS_LONG_ERR |
1843 GMR_FS_MII_ERR | GMR_FS_BAD_FC | GMR_FS_GOOD_FC |
1844 GMR_FS_JABBER,
1845
1846 RX_FF_FL_DEF_MSK = GMR_FS_CRC_ERR | GMR_FS_RX_FF_OV |GMR_FS_MII_ERR |
1847 GMR_FS_BAD_FC | GMR_FS_UN_SIZE | GMR_FS_JABBER,
1848 };
1849
1850
1851 enum {
1852 GMF_WP_TST_ON = 1<<14,
1853 GMF_WP_TST_OFF = 1<<13,
1854 GMF_WP_STEP = 1<<12,
1855
1856 GMF_RP_TST_ON = 1<<10,
1857 GMF_RP_TST_OFF = 1<<9,
1858 GMF_RP_STEP = 1<<8,
1859 GMF_RX_F_FL_ON = 1<<7,
1860 GMF_RX_F_FL_OFF = 1<<6,
1861 GMF_CLI_RX_FO = 1<<5,
1862 GMF_CLI_RX_FC = 1<<4,
1863 GMF_OPER_ON = 1<<3,
1864 GMF_OPER_OFF = 1<<2,
1865 GMF_RST_CLR = 1<<1,
1866 GMF_RST_SET = 1<<0,
1867
1868 RX_GMF_FL_THR_DEF = 0xa,
1869 };
1870
1871
1872
1873 enum {
1874 GMF_WSP_TST_ON = 1<<18,
1875 GMF_WSP_TST_OFF = 1<<17,
1876 GMF_WSP_STEP = 1<<16,
1877
1878 GMF_CLI_TX_FU = 1<<6,
1879 GMF_CLI_TX_FC = 1<<5,
1880 GMF_CLI_TX_PE = 1<<4,
1881 };
1882
1883
1884 enum {
1885 GMT_ST_START = 1<<2,
1886 GMT_ST_STOP = 1<<1,
1887 GMT_ST_CLR_IRQ = 1<<0,
1888 };
1889
1890
1891 enum {
1892 GMC_H_BURST_ON = 1<<7,
1893 GMC_H_BURST_OFF = 1<<6,
1894 GMC_F_LOOPB_ON = 1<<5,
1895 GMC_F_LOOPB_OFF = 1<<4,
1896 GMC_PAUSE_ON = 1<<3,
1897 GMC_PAUSE_OFF = 1<<2,
1898 GMC_RST_CLR = 1<<1,
1899 GMC_RST_SET = 1<<0,
1900 };
1901
1902
1903 enum {
1904 GPC_SEL_BDT = 1<<28,
1905 GPC_INT_POL_HI = 1<<27,
1906 GPC_75_OHM = 1<<26,
1907 GPC_DIS_FC = 1<<25,
1908 GPC_DIS_SLEEP = 1<<24,
1909 GPC_HWCFG_M_3 = 1<<23,
1910 GPC_HWCFG_M_2 = 1<<22,
1911 GPC_HWCFG_M_1 = 1<<21,
1912 GPC_HWCFG_M_0 = 1<<20,
1913 GPC_ANEG_0 = 1<<19,
1914 GPC_ENA_XC = 1<<18,
1915 GPC_DIS_125 = 1<<17,
1916 GPC_ANEG_3 = 1<<16,
1917 GPC_ANEG_2 = 1<<15,
1918 GPC_ANEG_1 = 1<<14,
1919 GPC_ENA_PAUSE = 1<<13,
1920 GPC_PHYADDR_4 = 1<<12,
1921 GPC_PHYADDR_3 = 1<<11,
1922 GPC_PHYADDR_2 = 1<<10,
1923 GPC_PHYADDR_1 = 1<<9,
1924 GPC_PHYADDR_0 = 1<<8,
1925
1926 GPC_RST_CLR = 1<<1,
1927 GPC_RST_SET = 1<<0,
1928 };
1929
1930 #define GPC_HWCFG_GMII_COP (GPC_HWCFG_M_3|GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
1931 #define GPC_HWCFG_GMII_FIB (GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
1932 #define GPC_ANEG_ADV_ALL_M (GPC_ANEG_3 | GPC_ANEG_2 | GPC_ANEG_1 | GPC_ANEG_0)
1933
1934
1935 #define GPC_FRC10MBIT_HALF 0
1936 #define GPC_FRC10MBIT_FULL GPC_ANEG_0
1937 #define GPC_FRC100MBIT_HALF GPC_ANEG_1
1938 #define GPC_FRC100MBIT_FULL (GPC_ANEG_0 | GPC_ANEG_1)
1939
1940
1941
1942 #define GPC_ADV_1000_HALF GPC_ANEG_2
1943 #define GPC_ADV_1000_FULL GPC_ANEG_3
1944 #define GPC_ADV_ALL (GPC_ANEG_2 | GPC_ANEG_3)
1945
1946
1947
1948 #define GPC_FORCE_MASTER 0
1949 #define GPC_FORCE_SLAVE GPC_ANEG_0
1950 #define GPC_PREF_MASTER GPC_ANEG_1
1951 #define GPC_PREF_SLAVE (GPC_ANEG_1 | GPC_ANEG_0)
1952
1953
1954
1955 enum {
1956 GM_IS_TX_CO_OV = 1<<5,
1957 GM_IS_RX_CO_OV = 1<<4,
1958 GM_IS_TX_FF_UR = 1<<3,
1959 GM_IS_TX_COMPL = 1<<2,
1960 GM_IS_RX_FF_OR = 1<<1,
1961 GM_IS_RX_COMPL = 1<<0,
1962
1963 #define GMAC_DEF_MSK (GM_IS_RX_FF_OR | GM_IS_TX_FF_UR)
1964
1965
1966
1967 GMLC_RST_CLR = 1<<1,
1968 GMLC_RST_SET = 1<<0,
1969
1970
1971
1972 WOL_CTL_LINK_CHG_OCC = 1<<15,
1973 WOL_CTL_MAGIC_PKT_OCC = 1<<14,
1974 WOL_CTL_PATTERN_OCC = 1<<13,
1975 WOL_CTL_CLEAR_RESULT = 1<<12,
1976 WOL_CTL_ENA_PME_ON_LINK_CHG = 1<<11,
1977 WOL_CTL_DIS_PME_ON_LINK_CHG = 1<<10,
1978 WOL_CTL_ENA_PME_ON_MAGIC_PKT = 1<<9,
1979 WOL_CTL_DIS_PME_ON_MAGIC_PKT = 1<<8,
1980 WOL_CTL_ENA_PME_ON_PATTERN = 1<<7,
1981 WOL_CTL_DIS_PME_ON_PATTERN = 1<<6,
1982 WOL_CTL_ENA_LINK_CHG_UNIT = 1<<5,
1983 WOL_CTL_DIS_LINK_CHG_UNIT = 1<<4,
1984 WOL_CTL_ENA_MAGIC_PKT_UNIT = 1<<3,
1985 WOL_CTL_DIS_MAGIC_PKT_UNIT = 1<<2,
1986 WOL_CTL_ENA_PATTERN_UNIT = 1<<1,
1987 WOL_CTL_DIS_PATTERN_UNIT = 1<<0,
1988 };
1989
1990 #define WOL_CTL_DEFAULT \
1991 (WOL_CTL_DIS_PME_ON_LINK_CHG | \
1992 WOL_CTL_DIS_PME_ON_PATTERN | \
1993 WOL_CTL_DIS_PME_ON_MAGIC_PKT | \
1994 WOL_CTL_DIS_LINK_CHG_UNIT | \
1995 WOL_CTL_DIS_PATTERN_UNIT | \
1996 WOL_CTL_DIS_MAGIC_PKT_UNIT)
1997
1998
1999 #define WOL_CTL_PATT_ENA(x) (1 << (x))
2000
2001
2002
2003 enum {
2004 XM_MMU_CMD = 0x0000,
2005 XM_POFF = 0x0008,
2006 XM_BURST = 0x000c,
2007 XM_1L_VLAN_TAG = 0x0010,
2008 XM_2L_VLAN_TAG = 0x0014,
2009 XM_TX_CMD = 0x0020,
2010 XM_TX_RT_LIM = 0x0024,
2011 XM_TX_STIME = 0x0028,
2012 XM_TX_IPG = 0x002c,
2013 XM_RX_CMD = 0x0030,
2014 XM_PHY_ADDR = 0x0034,
2015 XM_PHY_DATA = 0x0038,
2016 XM_GP_PORT = 0x0040,
2017 XM_IMSK = 0x0044,
2018 XM_ISRC = 0x0048,
2019 XM_HW_CFG = 0x004c,
2020 XM_TX_LO_WM = 0x0060,
2021 XM_TX_HI_WM = 0x0062,
2022 XM_TX_THR = 0x0064,
2023 XM_HT_THR = 0x0066,
2024 XM_PAUSE_DA = 0x0068,
2025 XM_CTL_PARA = 0x0070,
2026 XM_MAC_OPCODE = 0x0074,
2027 XM_MAC_PTIME = 0x0076,
2028 XM_TX_STAT = 0x0078,
2029
2030 XM_EXM_START = 0x0080,
2031 #define XM_EXM(reg) (XM_EXM_START + ((reg) << 3))
2032 };
2033
2034 enum {
2035 XM_SRC_CHK = 0x0100,
2036 XM_SA = 0x0108,
2037 XM_HSM = 0x0110,
2038 XM_RX_LO_WM = 0x0118,
2039 XM_RX_HI_WM = 0x011a,
2040 XM_RX_THR = 0x011c,
2041 XM_DEV_ID = 0x0120,
2042 XM_MODE = 0x0124,
2043 XM_LSA = 0x0128,
2044 XM_TS_READ = 0x0130,
2045 XM_TS_LOAD = 0x0134,
2046 XM_STAT_CMD = 0x0200,
2047 XM_RX_CNT_EV = 0x0204,
2048 XM_TX_CNT_EV = 0x0208,
2049 XM_RX_EV_MSK = 0x020c,
2050 XM_TX_EV_MSK = 0x0210,
2051 XM_TXF_OK = 0x0280,
2052 XM_TXO_OK_HI = 0x0284,
2053 XM_TXO_OK_LO = 0x0288,
2054 XM_TXF_BC_OK = 0x028c,
2055 XM_TXF_MC_OK = 0x0290,
2056 XM_TXF_UC_OK = 0x0294,
2057 XM_TXF_LONG = 0x0298,
2058 XM_TXE_BURST = 0x029c,
2059 XM_TXF_MPAUSE = 0x02a0,
2060 XM_TXF_MCTRL = 0x02a4,
2061 XM_TXF_SNG_COL = 0x02a8,
2062 XM_TXF_MUL_COL = 0x02ac,
2063 XM_TXF_ABO_COL = 0x02b0,
2064 XM_TXF_LAT_COL = 0x02b4,
2065 XM_TXF_DEF = 0x02b8,
2066 XM_TXF_EX_DEF = 0x02bc,
2067 XM_TXE_FIFO_UR = 0x02c0,
2068 XM_TXE_CS_ERR = 0x02c4,
2069 XM_TXP_UTIL = 0x02c8,
2070 XM_TXF_64B = 0x02d0,
2071 XM_TXF_127B = 0x02d4,
2072 XM_TXF_255B = 0x02d8,
2073 XM_TXF_511B = 0x02dc,
2074 XM_TXF_1023B = 0x02e0,
2075 XM_TXF_MAX_SZ = 0x02e4,
2076 XM_RXF_OK = 0x0300,
2077 XM_RXO_OK_HI = 0x0304,
2078 XM_RXO_OK_LO = 0x0308,
2079 XM_RXF_BC_OK = 0x030c,
2080 XM_RXF_MC_OK = 0x0310,
2081 XM_RXF_UC_OK = 0x0314,
2082 XM_RXF_MPAUSE = 0x0318,
2083 XM_RXF_MCTRL = 0x031c,
2084 XM_RXF_INV_MP = 0x0320,
2085 XM_RXF_INV_MOC = 0x0324,
2086 XM_RXE_BURST = 0x0328,
2087 XM_RXE_FMISS = 0x032c,
2088 XM_RXF_FRA_ERR = 0x0330,
2089 XM_RXE_FIFO_OV = 0x0334,
2090 XM_RXF_JAB_PKT = 0x0338,
2091 XM_RXE_CAR_ERR = 0x033c,
2092 XM_RXF_LEN_ERR = 0x0340,
2093 XM_RXE_SYM_ERR = 0x0344,
2094 XM_RXE_SHT_ERR = 0x0348,
2095 XM_RXE_RUNT = 0x034c,
2096 XM_RXF_LNG_ERR = 0x0350,
2097 XM_RXF_FCS_ERR = 0x0354,
2098 XM_RXF_CEX_ERR = 0x035c,
2099 XM_RXP_UTIL = 0x0360,
2100 XM_RXF_64B = 0x0368,
2101 XM_RXF_127B = 0x036c,
2102 XM_RXF_255B = 0x0370,
2103 XM_RXF_511B = 0x0374,
2104 XM_RXF_1023B = 0x0378,
2105 XM_RXF_MAX_SZ = 0x037c,
2106 };
2107
2108
2109 enum {
2110 XM_MMU_PHY_RDY = 1<<12,
2111 XM_MMU_PHY_BUSY = 1<<11,
2112 XM_MMU_IGN_PF = 1<<10,
2113 XM_MMU_MAC_LB = 1<<9,
2114 XM_MMU_FRC_COL = 1<<7,
2115 XM_MMU_SIM_COL = 1<<6,
2116 XM_MMU_NO_PRE = 1<<5,
2117 XM_MMU_GMII_FD = 1<<4,
2118 XM_MMU_RAT_CTRL = 1<<3,
2119 XM_MMU_GMII_LOOP= 1<<2,
2120 XM_MMU_ENA_RX = 1<<1,
2121 XM_MMU_ENA_TX = 1<<0,
2122 };
2123
2124
2125
2126 enum {
2127 XM_TX_BK2BK = 1<<6,
2128 XM_TX_ENC_BYP = 1<<5,
2129 XM_TX_SAM_LINE = 1<<4,
2130 XM_TX_NO_GIG_MD = 1<<3,
2131 XM_TX_NO_PRE = 1<<2,
2132 XM_TX_NO_CRC = 1<<1,
2133 XM_TX_AUTO_PAD = 1<<0,
2134 };
2135
2136
2137 #define XM_RT_LIM_MSK 0x1f
2138
2139
2140
2141 #define XM_STIME_MSK 0x7f
2142
2143
2144
2145 #define XM_IPG_MSK 0xff
2146
2147
2148
2149 enum {
2150 XM_RX_LENERR_OK = 1<<8,
2151
2152 XM_RX_BIG_PK_OK = 1<<7,
2153
2154 XM_RX_IPG_CAP = 1<<6,
2155 XM_RX_TP_MD = 1<<5,
2156 XM_RX_STRIP_FCS = 1<<4,
2157 XM_RX_SELF_RX = 1<<3,
2158 XM_RX_SAM_LINE = 1<<2,
2159 XM_RX_STRIP_PAD = 1<<1,
2160 XM_RX_DIS_CEXT = 1<<0,
2161 };
2162
2163
2164
2165 enum {
2166 XM_GP_ANIP = 1<<6,
2167 XM_GP_FRC_INT = 1<<5,
2168 XM_GP_RES_MAC = 1<<3,
2169 XM_GP_RES_STAT = 1<<2,
2170 XM_GP_INP_ASS = 1<<0,
2171 };
2172
2173
2174
2175
2176 enum {
2177 XM_IS_LNK_AE = 1<<14,
2178 XM_IS_TX_ABORT = 1<<13,
2179 XM_IS_FRC_INT = 1<<12,
2180 XM_IS_INP_ASS = 1<<11,
2181 XM_IS_LIPA_RC = 1<<10,
2182 XM_IS_RX_PAGE = 1<<9,
2183 XM_IS_TX_PAGE = 1<<8,
2184 XM_IS_AND = 1<<7,
2185 XM_IS_TSC_OV = 1<<6,
2186 XM_IS_RXC_OV = 1<<5,
2187 XM_IS_TXC_OV = 1<<4,
2188 XM_IS_RXF_OV = 1<<3,
2189 XM_IS_TXF_UR = 1<<2,
2190 XM_IS_TX_COMP = 1<<1,
2191 XM_IS_RX_COMP = 1<<0,
2192
2193 XM_IMSK_DISABLE = 0xffff,
2194 };
2195
2196
2197 enum {
2198 XM_HW_GEN_EOP = 1<<3,
2199 XM_HW_COM4SIG = 1<<2,
2200 XM_HW_GMII_MD = 1<<0,
2201 };
2202
2203
2204
2205
2206 #define XM_TX_WM_MSK 0x01ff
2207
2208
2209
2210
2211 #define XM_THR_MSK 0x03ff
2212
2213
2214
2215 enum {
2216 XM_ST_VALID = (1UL<<31),
2217 XM_ST_BYTE_CNT = (0x3fffL<<17),
2218 XM_ST_RETRY_CNT = (0x1fL<<12),
2219 XM_ST_EX_COL = 1<<11,
2220 XM_ST_EX_DEF = 1<<10,
2221 XM_ST_BURST = 1<<9,
2222 XM_ST_DEFER = 1<<8,
2223 XM_ST_BC = 1<<7,
2224 XM_ST_MC = 1<<6,
2225 XM_ST_UC = 1<<5,
2226 XM_ST_TX_UR = 1<<4,
2227 XM_ST_CS_ERR = 1<<3,
2228 XM_ST_LAT_COL = 1<<2,
2229 XM_ST_MUL_COL = 1<<1,
2230 XM_ST_SGN_COL = 1<<0,
2231 };
2232
2233
2234
2235 #define XM_RX_WM_MSK 0x03ff
2236
2237
2238
2239 #define XM_DEV_OUI (0x00ffffffUL<<8)
2240 #define XM_DEV_REV (0x07L << 5)
2241
2242
2243
2244 enum {
2245 XM_MD_ENA_REJ = 1<<26,
2246 XM_MD_SPOE_E = 1<<25,
2247
2248 XM_MD_TX_REP = 1<<24,
2249 XM_MD_SPOFF_I = 1<<23,
2250
2251 XM_MD_LE_STW = 1<<22,
2252 XM_MD_TX_CONT = 1<<21,
2253 XM_MD_TX_PAUSE = 1<<20,
2254 XM_MD_ATS = 1<<19,
2255 XM_MD_SPOL_I = 1<<18,
2256
2257 XM_MD_SPOH_I = 1<<17,
2258
2259 XM_MD_CAP = 1<<16,
2260 XM_MD_ENA_HASH = 1<<15,
2261 XM_MD_CSA = 1<<14,
2262 XM_MD_CAA = 1<<13,
2263 XM_MD_RX_MCTRL = 1<<12,
2264 XM_MD_RX_RUNT = 1<<11,
2265 XM_MD_RX_IRLE = 1<<10,
2266 XM_MD_RX_LONG = 1<<9,
2267 XM_MD_RX_CRCE = 1<<8,
2268 XM_MD_RX_ERR = 1<<7,
2269 XM_MD_DIS_UC = 1<<6,
2270 XM_MD_DIS_MC = 1<<5,
2271 XM_MD_DIS_BC = 1<<4,
2272 XM_MD_ENA_PROM = 1<<3,
2273 XM_MD_ENA_BE = 1<<2,
2274 XM_MD_FTF = 1<<1,
2275 XM_MD_FRF = 1<<0,
2276 };
2277
2278 #define XM_PAUSE_MODE (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
2279 #define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
2280 XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA)
2281
2282
2283 enum {
2284 XM_SC_SNP_RXC = 1<<5,
2285 XM_SC_SNP_TXC = 1<<4,
2286 XM_SC_CP_RXC = 1<<3,
2287 XM_SC_CP_TXC = 1<<2,
2288 XM_SC_CLR_RXC = 1<<1,
2289 XM_SC_CLR_TXC = 1<<0,
2290 };
2291
2292
2293
2294
2295 enum {
2296 XMR_MAX_SZ_OV = 1<<31,
2297 XMR_1023B_OV = 1<<30,
2298 XMR_511B_OV = 1<<29,
2299 XMR_255B_OV = 1<<28,
2300 XMR_127B_OV = 1<<27,
2301 XMR_64B_OV = 1<<26,
2302 XMR_UTIL_OV = 1<<25,
2303 XMR_UTIL_UR = 1<<24,
2304 XMR_CEX_ERR_OV = 1<<23,
2305 XMR_FCS_ERR_OV = 1<<21,
2306 XMR_LNG_ERR_OV = 1<<20,
2307 XMR_RUNT_OV = 1<<19,
2308 XMR_SHT_ERR_OV = 1<<18,
2309 XMR_SYM_ERR_OV = 1<<17,
2310 XMR_CAR_ERR_OV = 1<<15,
2311 XMR_JAB_PKT_OV = 1<<14,
2312 XMR_FIFO_OV = 1<<13,
2313 XMR_FRA_ERR_OV = 1<<12,
2314 XMR_FMISS_OV = 1<<11,
2315 XMR_BURST = 1<<10,
2316 XMR_INV_MOC = 1<<9,
2317 XMR_INV_MP = 1<<8,
2318 XMR_MCTRL_OV = 1<<7,
2319 XMR_MPAUSE_OV = 1<<6,
2320 XMR_UC_OK_OV = 1<<5,
2321 XMR_MC_OK_OV = 1<<4,
2322 XMR_BC_OK_OV = 1<<3,
2323 XMR_OK_LO_OV = 1<<2,
2324 XMR_OK_HI_OV = 1<<1,
2325 XMR_OK_OV = 1<<0,
2326 };
2327
2328 #define XMR_DEF_MSK (XMR_OK_LO_OV | XMR_OK_HI_OV)
2329
2330
2331
2332 enum {
2333 XMT_MAX_SZ_OV = 1<<25,
2334 XMT_1023B_OV = 1<<24,
2335 XMT_511B_OV = 1<<23,
2336 XMT_255B_OV = 1<<22,
2337 XMT_127B_OV = 1<<21,
2338 XMT_64B_OV = 1<<20,
2339 XMT_UTIL_OV = 1<<19,
2340 XMT_UTIL_UR = 1<<18,
2341 XMT_CS_ERR_OV = 1<<17,
2342 XMT_FIFO_UR_OV = 1<<16,
2343 XMT_EX_DEF_OV = 1<<15,
2344 XMT_DEF = 1<<14,
2345 XMT_LAT_COL_OV = 1<<13,
2346 XMT_ABO_COL_OV = 1<<12,
2347 XMT_MUL_COL_OV = 1<<11,
2348 XMT_SNG_COL = 1<<10,
2349 XMT_MCTRL_OV = 1<<9,
2350 XMT_MPAUSE = 1<<8,
2351 XMT_BURST = 1<<7,
2352 XMT_LONG = 1<<6,
2353 XMT_UC_OK_OV = 1<<5,
2354 XMT_MC_OK_OV = 1<<4,
2355 XMT_BC_OK_OV = 1<<3,
2356 XMT_OK_LO_OV = 1<<2,
2357 XMT_OK_HI_OV = 1<<1,
2358 XMT_OK_OV = 1<<0,
2359 };
2360
2361 #define XMT_DEF_MSK (XMT_OK_LO_OV | XMT_OK_HI_OV)
2362
2363 struct skge_rx_desc {
2364 u32 control;
2365 u32 next_offset;
2366 u32 dma_lo;
2367 u32 dma_hi;
2368 u32 status;
2369 u32 timestamp;
2370 u16 csum2;
2371 u16 csum1;
2372 u16 csum2_start;
2373 u16 csum1_start;
2374 };
2375
2376 struct skge_tx_desc {
2377 u32 control;
2378 u32 next_offset;
2379 u32 dma_lo;
2380 u32 dma_hi;
2381 u32 status;
2382 u32 csum_offs;
2383 u16 csum_write;
2384 u16 csum_start;
2385 u32 rsvd;
2386 };
2387
2388 struct skge_element {
2389 struct skge_element *next;
2390 void *desc;
2391 struct sk_buff *skb;
2392 DEFINE_DMA_UNMAP_ADDR(mapaddr);
2393 DEFINE_DMA_UNMAP_LEN(maplen);
2394 };
2395
2396 struct skge_ring {
2397 struct skge_element *to_clean;
2398 struct skge_element *to_use;
2399 struct skge_element *start;
2400 unsigned long count;
2401 };
2402
2403
2404 struct skge_hw {
2405 void __iomem *regs;
2406 struct pci_dev *pdev;
2407 spinlock_t hw_lock;
2408 u32 intr_mask;
2409 struct net_device *dev[2];
2410
2411 u8 chip_id;
2412 u8 chip_rev;
2413 u8 copper;
2414 u8 ports;
2415 u8 phy_type;
2416
2417 u32 ram_size;
2418 u32 ram_offset;
2419 u16 phy_addr;
2420 spinlock_t phy_lock;
2421 struct tasklet_struct phy_task;
2422
2423 char irq_name[];
2424 };
2425
2426 enum pause_control {
2427 FLOW_MODE_NONE = 1,
2428 FLOW_MODE_LOC_SEND = 2,
2429 FLOW_MODE_SYMMETRIC = 3,
2430 FLOW_MODE_SYM_OR_REM = 4,
2431
2432
2433 };
2434
2435 enum pause_status {
2436 FLOW_STAT_INDETERMINATED=0,
2437 FLOW_STAT_NONE,
2438 FLOW_STAT_REM_SEND,
2439 FLOW_STAT_LOC_SEND,
2440 FLOW_STAT_SYMMETRIC,
2441 };
2442
2443
2444 struct skge_port {
2445 struct skge_hw *hw;
2446 struct net_device *netdev;
2447 struct napi_struct napi;
2448 int port;
2449 u32 msg_enable;
2450
2451 struct skge_ring tx_ring;
2452
2453 struct skge_ring rx_ring ____cacheline_aligned_in_smp;
2454 unsigned int rx_buf_size;
2455
2456 struct timer_list link_timer;
2457 enum pause_control flow_control;
2458 enum pause_status flow_status;
2459 u8 blink_on;
2460 u8 wol;
2461 u8 autoneg;
2462 u8 duplex;
2463 u16 speed;
2464 u32 advertising;
2465
2466 void *mem;
2467 dma_addr_t dma;
2468 unsigned long mem_size;
2469 #ifdef CONFIG_SKGE_DEBUG
2470 struct dentry *debugfs;
2471 #endif
2472 };
2473
2474
2475
2476 static inline u32 skge_read32(const struct skge_hw *hw, int reg)
2477 {
2478 return readl(hw->regs + reg);
2479 }
2480
2481 static inline u16 skge_read16(const struct skge_hw *hw, int reg)
2482 {
2483 return readw(hw->regs + reg);
2484 }
2485
2486 static inline u8 skge_read8(const struct skge_hw *hw, int reg)
2487 {
2488 return readb(hw->regs + reg);
2489 }
2490
2491 static inline void skge_write32(const struct skge_hw *hw, int reg, u32 val)
2492 {
2493 writel(val, hw->regs + reg);
2494 }
2495
2496 static inline void skge_write16(const struct skge_hw *hw, int reg, u16 val)
2497 {
2498 writew(val, hw->regs + reg);
2499 }
2500
2501 static inline void skge_write8(const struct skge_hw *hw, int reg, u8 val)
2502 {
2503 writeb(val, hw->regs + reg);
2504 }
2505
2506
2507 #define SK_REG(port,reg) (((port)<<7)+(u16)(reg))
2508 #define SK_XMAC_REG(port, reg) \
2509 ((BASE_XMAC_1 + (port) * (BASE_XMAC_2 - BASE_XMAC_1)) | (reg) << 1)
2510
2511 static inline u32 xm_read32(const struct skge_hw *hw, int port, int reg)
2512 {
2513 u32 v;
2514 v = skge_read16(hw, SK_XMAC_REG(port, reg));
2515 v |= (u32)skge_read16(hw, SK_XMAC_REG(port, reg+2)) << 16;
2516 return v;
2517 }
2518
2519 static inline u16 xm_read16(const struct skge_hw *hw, int port, int reg)
2520 {
2521 return skge_read16(hw, SK_XMAC_REG(port,reg));
2522 }
2523
2524 static inline void xm_write32(const struct skge_hw *hw, int port, int r, u32 v)
2525 {
2526 skge_write16(hw, SK_XMAC_REG(port,r), v & 0xffff);
2527 skge_write16(hw, SK_XMAC_REG(port,r+2), v >> 16);
2528 }
2529
2530 static inline void xm_write16(const struct skge_hw *hw, int port, int r, u16 v)
2531 {
2532 skge_write16(hw, SK_XMAC_REG(port,r), v);
2533 }
2534
2535 static inline void xm_outhash(const struct skge_hw *hw, int port, int reg,
2536 const u8 *hash)
2537 {
2538 xm_write16(hw, port, reg, (u16)hash[0] | ((u16)hash[1] << 8));
2539 xm_write16(hw, port, reg+2, (u16)hash[2] | ((u16)hash[3] << 8));
2540 xm_write16(hw, port, reg+4, (u16)hash[4] | ((u16)hash[5] << 8));
2541 xm_write16(hw, port, reg+6, (u16)hash[6] | ((u16)hash[7] << 8));
2542 }
2543
2544 static inline void xm_outaddr(const struct skge_hw *hw, int port, int reg,
2545 const u8 *addr)
2546 {
2547 xm_write16(hw, port, reg, (u16)addr[0] | ((u16)addr[1] << 8));
2548 xm_write16(hw, port, reg+2, (u16)addr[2] | ((u16)addr[3] << 8));
2549 xm_write16(hw, port, reg+4, (u16)addr[4] | ((u16)addr[5] << 8));
2550 }
2551
2552 #define SK_GMAC_REG(port,reg) \
2553 (BASE_GMAC_1 + (port) * (BASE_GMAC_2-BASE_GMAC_1) + (reg))
2554
2555 static inline u16 gma_read16(const struct skge_hw *hw, int port, int reg)
2556 {
2557 return skge_read16(hw, SK_GMAC_REG(port,reg));
2558 }
2559
2560 static inline u32 gma_read32(const struct skge_hw *hw, int port, int reg)
2561 {
2562 return (u32) skge_read16(hw, SK_GMAC_REG(port,reg))
2563 | ((u32)skge_read16(hw, SK_GMAC_REG(port,reg+4)) << 16);
2564 }
2565
2566 static inline void gma_write16(const struct skge_hw *hw, int port, int r, u16 v)
2567 {
2568 skge_write16(hw, SK_GMAC_REG(port,r), v);
2569 }
2570
2571 static inline void gma_set_addr(struct skge_hw *hw, int port, int reg,
2572 const u8 *addr)
2573 {
2574 gma_write16(hw, port, reg, (u16) addr[0] | ((u16) addr[1] << 8));
2575 gma_write16(hw, port, reg+4,(u16) addr[2] | ((u16) addr[3] << 8));
2576 gma_write16(hw, port, reg+8,(u16) addr[4] | ((u16) addr[5] << 8));
2577 }
2578
2579 #endif