00001
00002
00003
00004 #ifndef _SKGE_H
00005 #define _SKGE_H
00006
00007 FILE_LICENCE ( GPL2_ONLY );
00008
00009
00010 #define PCI_DEV_REG1 0x40
00011 #define PCI_PHY_COMA 0x8000000
00012 #define PCI_VIO 0x2000000
00013
00014 #define PCI_DEV_REG2 0x44
00015 #define PCI_VPD_ROM_SZ 7L<<14
00016 #define PCI_REV_DESC 1<<2
00017
00018 #define DRV_NAME "skge"
00019 #define DRV_VERSION "1.13"
00020 #define PFX DRV_NAME " "
00021
00022 #define NUM_TX_DESC 8
00023 #define NUM_RX_DESC 8
00024
00025
00026 #define SKGE_RING_ALIGN 8
00027 #define RX_BUF_SIZE 1536
00028 #define PHY_RETRIES 1000
00029
00030 #define TX_RING_SIZE ( NUM_TX_DESC * sizeof ( struct skge_rx_desc ) )
00031 #define RX_RING_SIZE ( NUM_RX_DESC * sizeof ( struct skge_tx_desc ) )
00032 #define RING_SIZE ( TX_RING_SIZE + RX_RING_SIZE )
00033
00034 #define SKGE_REG_SIZE 0x4000
00035
00036 #define SKGE_EEPROM_MAGIC 0x9933aabb
00037
00038
00039
00040
00041 #define AUTONEG_DISABLE 0x00
00042 #define AUTONEG_ENABLE 0x01
00043
00044 #define DUPLEX_HALF 0x00
00045 #define DUPLEX_FULL 0x01
00046
00047 #define SPEED_10 10
00048 #define SPEED_100 100
00049 #define SPEED_1000 1000
00050
00051 #define ADVERTISED_10baseT_Half (1 << 0)
00052 #define ADVERTISED_10baseT_Full (1 << 1)
00053 #define ADVERTISED_100baseT_Half (1 << 2)
00054 #define ADVERTISED_100baseT_Full (1 << 3)
00055 #define ADVERTISED_1000baseT_Half (1 << 4)
00056 #define ADVERTISED_1000baseT_Full (1 << 5)
00057
00058 #define SUPPORTED_10baseT_Half (1 << 0)
00059 #define SUPPORTED_10baseT_Full (1 << 1)
00060 #define SUPPORTED_100baseT_Half (1 << 2)
00061 #define SUPPORTED_100baseT_Full (1 << 3)
00062 #define SUPPORTED_1000baseT_Half (1 << 4)
00063 #define SUPPORTED_1000baseT_Full (1 << 5)
00064 #define SUPPORTED_Autoneg (1 << 6)
00065 #define SUPPORTED_TP (1 << 7)
00066 #define SUPPORTED_FIBRE (1 << 10)
00067
00068
00069 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
00070
00071
00072
00073 #define PCI_STATUS_ERROR_BITS (PCI_STATUS_DETECTED_PARITY | \
00074 PCI_STATUS_SIG_SYSTEM_ERROR | \
00075 PCI_STATUS_REC_MASTER_ABORT | \
00076 PCI_STATUS_REC_TARGET_ABORT | \
00077 PCI_STATUS_PARITY)
00078
00079 enum csr_regs {
00080 B0_RAP = 0x0000,
00081 B0_CTST = 0x0004,
00082 B0_LED = 0x0006,
00083 B0_POWER_CTRL = 0x0007,
00084 B0_ISRC = 0x0008,
00085 B0_IMSK = 0x000c,
00086 B0_HWE_ISRC = 0x0010,
00087 B0_HWE_IMSK = 0x0014,
00088 B0_SP_ISRC = 0x0018,
00089 B0_XM1_IMSK = 0x0020,
00090 B0_XM1_ISRC = 0x0028,
00091 B0_XM1_PHY_ADDR = 0x0030,
00092 B0_XM1_PHY_DATA = 0x0034,
00093 B0_XM2_IMSK = 0x0040,
00094 B0_XM2_ISRC = 0x0048,
00095 B0_XM2_PHY_ADDR = 0x0050,
00096 B0_XM2_PHY_DATA = 0x0054,
00097 B0_R1_CSR = 0x0060,
00098 B0_R2_CSR = 0x0064,
00099 B0_XS1_CSR = 0x0068,
00100 B0_XA1_CSR = 0x006c,
00101 B0_XS2_CSR = 0x0070,
00102 B0_XA2_CSR = 0x0074,
00103
00104 B2_MAC_1 = 0x0100,
00105 B2_MAC_2 = 0x0108,
00106 B2_MAC_3 = 0x0110,
00107 B2_CONN_TYP = 0x0118,
00108 B2_PMD_TYP = 0x0119,
00109 B2_MAC_CFG = 0x011a,
00110 B2_CHIP_ID = 0x011b,
00111 B2_E_0 = 0x011c,
00112 B2_E_1 = 0x011d,
00113 B2_E_2 = 0x011e,
00114 B2_E_3 = 0x011f,
00115 B2_FAR = 0x0120,
00116 B2_FDP = 0x0124,
00117 B2_LD_CTRL = 0x0128,
00118 B2_LD_TEST = 0x0129,
00119 B2_TI_INI = 0x0130,
00120 B2_TI_VAL = 0x0134,
00121 B2_TI_CTRL = 0x0138,
00122 B2_TI_TEST = 0x0139,
00123 B2_IRQM_INI = 0x0140,
00124 B2_IRQM_VAL = 0x0144,
00125 B2_IRQM_CTRL = 0x0148,
00126 B2_IRQM_TEST = 0x0149,
00127 B2_IRQM_MSK = 0x014c,
00128 B2_IRQM_HWE_MSK = 0x0150,
00129 B2_TST_CTRL1 = 0x0158,
00130 B2_TST_CTRL2 = 0x0159,
00131 B2_GP_IO = 0x015c,
00132 B2_I2C_CTRL = 0x0160,
00133 B2_I2C_DATA = 0x0164,
00134 B2_I2C_IRQ = 0x0168,
00135 B2_I2C_SW = 0x016c,
00136 B2_BSC_INI = 0x0170,
00137 B2_BSC_VAL = 0x0174,
00138 B2_BSC_CTRL = 0x0178,
00139 B2_BSC_STAT = 0x0179,
00140 B2_BSC_TST = 0x017a,
00141
00142 B3_RAM_ADDR = 0x0180,
00143 B3_RAM_DATA_LO = 0x0184,
00144 B3_RAM_DATA_HI = 0x0188,
00145 B3_RI_WTO_R1 = 0x0190,
00146 B3_RI_WTO_XA1 = 0x0191,
00147 B3_RI_WTO_XS1 = 0x0192,
00148 B3_RI_RTO_R1 = 0x0193,
00149 B3_RI_RTO_XA1 = 0x0194,
00150 B3_RI_RTO_XS1 = 0x0195,
00151 B3_RI_WTO_R2 = 0x0196,
00152 B3_RI_WTO_XA2 = 0x0197,
00153 B3_RI_WTO_XS2 = 0x0198,
00154 B3_RI_RTO_R2 = 0x0199,
00155 B3_RI_RTO_XA2 = 0x019a,
00156 B3_RI_RTO_XS2 = 0x019b,
00157 B3_RI_TO_VAL = 0x019c,
00158 B3_RI_CTRL = 0x01a0,
00159 B3_RI_TEST = 0x01a2,
00160 B3_MA_TOINI_RX1 = 0x01b0,
00161 B3_MA_TOINI_RX2 = 0x01b1,
00162 B3_MA_TOINI_TX1 = 0x01b2,
00163 B3_MA_TOINI_TX2 = 0x01b3,
00164 B3_MA_TOVAL_RX1 = 0x01b4,
00165 B3_MA_TOVAL_RX2 = 0x01b5,
00166 B3_MA_TOVAL_TX1 = 0x01b6,
00167 B3_MA_TOVAL_TX2 = 0x01b7,
00168 B3_MA_TO_CTRL = 0x01b8,
00169 B3_MA_TO_TEST = 0x01ba,
00170 B3_MA_RCINI_RX1 = 0x01c0,
00171 B3_MA_RCINI_RX2 = 0x01c1,
00172 B3_MA_RCINI_TX1 = 0x01c2,
00173 B3_MA_RCINI_TX2 = 0x01c3,
00174 B3_MA_RCVAL_RX1 = 0x01c4,
00175 B3_MA_RCVAL_RX2 = 0x01c5,
00176 B3_MA_RCVAL_TX1 = 0x01c6,
00177 B3_MA_RCVAL_TX2 = 0x01c7,
00178 B3_MA_RC_CTRL = 0x01c8,
00179 B3_MA_RC_TEST = 0x01ca,
00180 B3_PA_TOINI_RX1 = 0x01d0,
00181 B3_PA_TOINI_RX2 = 0x01d4,
00182 B3_PA_TOINI_TX1 = 0x01d8,
00183 B3_PA_TOINI_TX2 = 0x01dc,
00184 B3_PA_TOVAL_RX1 = 0x01e0,
00185 B3_PA_TOVAL_RX2 = 0x01e4,
00186 B3_PA_TOVAL_TX1 = 0x01e8,
00187 B3_PA_TOVAL_TX2 = 0x01ec,
00188 B3_PA_CTRL = 0x01f0,
00189 B3_PA_TEST = 0x01f2,
00190 };
00191
00192
00193 enum {
00194 CS_CLK_RUN_HOT = 1<<13,
00195 CS_CLK_RUN_RST = 1<<12,
00196 CS_CLK_RUN_ENA = 1<<11,
00197 CS_VAUX_AVAIL = 1<<10,
00198 CS_BUS_CLOCK = 1<<9,
00199 CS_BUS_SLOT_SZ = 1<<8,
00200 CS_ST_SW_IRQ = 1<<7,
00201 CS_CL_SW_IRQ = 1<<6,
00202 CS_STOP_DONE = 1<<5,
00203 CS_STOP_MAST = 1<<4,
00204 CS_MRST_CLR = 1<<3,
00205 CS_MRST_SET = 1<<2,
00206 CS_RST_CLR = 1<<1,
00207 CS_RST_SET = 1,
00208
00209
00210
00211 LED_STAT_ON = 1<<1,
00212 LED_STAT_OFF = 1,
00213
00214
00215 PC_VAUX_ENA = 1<<7,
00216 PC_VAUX_DIS = 1<<6,
00217 PC_VCC_ENA = 1<<5,
00218 PC_VCC_DIS = 1<<4,
00219 PC_VAUX_ON = 1<<3,
00220 PC_VAUX_OFF = 1<<2,
00221 PC_VCC_ON = 1<<1,
00222 PC_VCC_OFF = 1<<0,
00223 };
00224
00225
00226 enum {
00227 IS_ALL_MSK = 0xbffffffful,
00228 IS_HW_ERR = 1<<31,
00229
00230 IS_PA_TO_RX1 = 1<<29,
00231 IS_PA_TO_RX2 = 1<<28,
00232 IS_PA_TO_TX1 = 1<<27,
00233 IS_PA_TO_TX2 = 1<<26,
00234 IS_I2C_READY = 1<<25,
00235 IS_IRQ_SW = 1<<24,
00236 IS_EXT_REG = 1<<23,
00237
00238 IS_TIMINT = 1<<22,
00239 IS_MAC1 = 1<<21,
00240 IS_LNK_SYNC_M1 = 1<<20,
00241 IS_MAC2 = 1<<19,
00242 IS_LNK_SYNC_M2 = 1<<18,
00243
00244 IS_R1_B = 1<<17,
00245 IS_R1_F = 1<<16,
00246 IS_R1_C = 1<<15,
00247
00248 IS_R2_B = 1<<14,
00249 IS_R2_F = 1<<13,
00250 IS_R2_C = 1<<12,
00251
00252 IS_XS1_B = 1<<11,
00253 IS_XS1_F = 1<<10,
00254 IS_XS1_C = 1<<9,
00255
00256 IS_XA1_B = 1<<8,
00257 IS_XA1_F = 1<<7,
00258 IS_XA1_C = 1<<6,
00259
00260 IS_XS2_B = 1<<5,
00261 IS_XS2_F = 1<<4,
00262 IS_XS2_C = 1<<3,
00263
00264 IS_XA2_B = 1<<2,
00265 IS_XA2_F = 1<<1,
00266 IS_XA2_C = 1<<0,
00267
00268 IS_TO_PORT1 = IS_PA_TO_RX1 | IS_PA_TO_TX1,
00269 IS_TO_PORT2 = IS_PA_TO_RX2 | IS_PA_TO_TX2,
00270
00271 IS_PORT_1 = IS_XA1_F| IS_R1_F | IS_TO_PORT1 | IS_MAC1,
00272 IS_PORT_2 = IS_XA2_F| IS_R2_F | IS_TO_PORT2 | IS_MAC2,
00273 };
00274
00275
00276
00277 enum {
00278 IS_IRQ_TIST_OV = 1<<13,
00279 IS_IRQ_SENSOR = 1<<12,
00280 IS_IRQ_MST_ERR = 1<<11,
00281 IS_IRQ_STAT = 1<<10,
00282 IS_NO_STAT_M1 = 1<<9,
00283 IS_NO_STAT_M2 = 1<<8,
00284 IS_NO_TIST_M1 = 1<<7,
00285 IS_NO_TIST_M2 = 1<<6,
00286 IS_RAM_RD_PAR = 1<<5,
00287 IS_RAM_WR_PAR = 1<<4,
00288 IS_M1_PAR_ERR = 1<<3,
00289 IS_M2_PAR_ERR = 1<<2,
00290 IS_R1_PAR_ERR = 1<<1,
00291 IS_R2_PAR_ERR = 1<<0,
00292
00293 IS_ERR_MSK = IS_IRQ_MST_ERR | IS_IRQ_STAT
00294 | IS_RAM_RD_PAR | IS_RAM_WR_PAR
00295 | IS_M1_PAR_ERR | IS_M2_PAR_ERR
00296 | IS_R1_PAR_ERR | IS_R2_PAR_ERR,
00297 };
00298
00299
00300 enum {
00301 TST_FRC_DPERR_MR = 1<<7,
00302 TST_FRC_DPERR_MW = 1<<6,
00303 TST_FRC_DPERR_TR = 1<<5,
00304 TST_FRC_DPERR_TW = 1<<4,
00305 TST_FRC_APERR_M = 1<<3,
00306 TST_FRC_APERR_T = 1<<2,
00307 TST_CFG_WRITE_ON = 1<<1,
00308 TST_CFG_WRITE_OFF= 1<<0,
00309 };
00310
00311
00312 enum {
00313 CFG_CHIP_R_MSK = 0xf<<4,
00314
00315 CFG_DIS_M2_CLK = 1<<1,
00316 CFG_SNG_MAC = 1<<0,
00317 };
00318
00319
00320 enum {
00321 CHIP_ID_GENESIS = 0x0a,
00322 CHIP_ID_YUKON = 0xb0,
00323 CHIP_ID_YUKON_LITE = 0xb1,
00324 CHIP_ID_YUKON_LP = 0xb2,
00325 CHIP_ID_YUKON_XL = 0xb3,
00326 CHIP_ID_YUKON_EC = 0xb6,
00327 CHIP_ID_YUKON_FE = 0xb7,
00328
00329 CHIP_REV_YU_LITE_A1 = 3,
00330 CHIP_REV_YU_LITE_A3 = 7,
00331 };
00332
00333
00334
00335 enum {
00336 TIM_START = 1<<2,
00337 TIM_STOP = 1<<1,
00338 TIM_CLR_IRQ = 1<<0,
00339 };
00340
00341
00342
00343
00344 enum {
00345 TIM_T_ON = 1<<2,
00346 TIM_T_OFF = 1<<1,
00347 TIM_T_STEP = 1<<0,
00348 };
00349
00350
00351 enum {
00352 GP_DIR_9 = 1<<25,
00353 GP_DIR_8 = 1<<24,
00354 GP_DIR_7 = 1<<23,
00355 GP_DIR_6 = 1<<22,
00356 GP_DIR_5 = 1<<21,
00357 GP_DIR_4 = 1<<20,
00358 GP_DIR_3 = 1<<19,
00359 GP_DIR_2 = 1<<18,
00360 GP_DIR_1 = 1<<17,
00361 GP_DIR_0 = 1<<16,
00362
00363 GP_IO_9 = 1<<9,
00364 GP_IO_8 = 1<<8,
00365 GP_IO_7 = 1<<7,
00366 GP_IO_6 = 1<<6,
00367 GP_IO_5 = 1<<5,
00368 GP_IO_4 = 1<<4,
00369 GP_IO_3 = 1<<3,
00370 GP_IO_2 = 1<<2,
00371 GP_IO_1 = 1<<1,
00372 GP_IO_0 = 1<<0,
00373 };
00374
00375
00376
00377
00378 enum {
00379 BMU_OWN = 1<<31,
00380 BMU_STF = 1<<30,
00381 BMU_EOF = 1<<29,
00382 BMU_IRQ_EOB = 1<<28,
00383 BMU_IRQ_EOF = 1<<27,
00384
00385 BMU_STFWD = 1<<26,
00386 BMU_NO_FCS = 1<<25,
00387 BMU_SW = 1<<24,
00388
00389 BMU_DEV_0 = 1<<26,
00390 BMU_STAT_VAL = 1<<25,
00391 BMU_TIST_VAL = 1<<24,
00392
00393 BMU_CHECK = 0x55<<16,
00394 BMU_TCP_CHECK = 0x56<<16,
00395 BMU_UDP_CHECK = 0x57<<16,
00396 BMU_BBC = 0xffffL,
00397 };
00398
00399
00400 enum {
00401 BSC_START = 1<<1,
00402 BSC_STOP = 1<<0,
00403 };
00404
00405
00406 enum {
00407 BSC_SRC = 1<<0,
00408 };
00409
00410
00411 enum {
00412 BSC_T_ON = 1<<2,
00413 BSC_T_OFF = 1<<1,
00414 BSC_T_STEP = 1<<0,
00415 };
00416
00417
00418
00419 #define RAM_ADR_RAN 0x0007ffffL
00420
00421
00422
00423 enum {
00424 RI_CLR_RD_PERR = 1<<9,
00425 RI_CLR_WR_PERR = 1<<8,
00426
00427 RI_RST_CLR = 1<<1,
00428 RI_RST_SET = 1<<0,
00429 };
00430
00431
00432
00433 enum {
00434 MA_FOE_ON = 1<<3,
00435 MA_FOE_OFF = 1<<2,
00436 MA_RST_CLR = 1<<1,
00437 MA_RST_SET = 1<<0,
00438
00439 };
00440
00441
00442 #define SK_MAC_TO_53 72
00443 #define SK_PKT_TO_53 0x2000
00444 #define SK_PKT_TO_MAX 0xffff
00445 #define SK_RI_TO_53 36
00446
00447
00448
00449 enum {
00450 PA_CLR_TO_TX2 = 1<<13,
00451 PA_CLR_TO_TX1 = 1<<12,
00452 PA_CLR_TO_RX2 = 1<<11,
00453 PA_CLR_TO_RX1 = 1<<10,
00454 PA_ENA_TO_TX2 = 1<<9,
00455 PA_DIS_TO_TX2 = 1<<8,
00456 PA_ENA_TO_TX1 = 1<<7,
00457 PA_DIS_TO_TX1 = 1<<6,
00458 PA_ENA_TO_RX2 = 1<<5,
00459 PA_DIS_TO_RX2 = 1<<4,
00460 PA_ENA_TO_RX1 = 1<<3,
00461 PA_DIS_TO_RX1 = 1<<2,
00462 PA_RST_CLR = 1<<1,
00463 PA_RST_SET = 1<<0,
00464 };
00465
00466 #define PA_ENA_TO_ALL (PA_ENA_TO_RX1 | PA_ENA_TO_RX2 |\
00467 PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
00468
00469
00470
00471
00472
00473
00474
00475
00476 #define TXA_MAX_VAL 0x00ffffffUL
00477
00478
00479 enum {
00480 TXA_ENA_FSYNC = 1<<7,
00481 TXA_DIS_FSYNC = 1<<6,
00482 TXA_ENA_ALLOC = 1<<5,
00483 TXA_DIS_ALLOC = 1<<4,
00484 TXA_START_RC = 1<<3,
00485 TXA_STOP_RC = 1<<2,
00486 TXA_ENA_ARB = 1<<1,
00487 TXA_DIS_ARB = 1<<0,
00488 };
00489
00490
00491
00492
00493
00494 enum {
00495 TXA_ITI_INI = 0x0200,
00496 TXA_ITI_VAL = 0x0204,
00497 TXA_LIM_INI = 0x0208,
00498 TXA_LIM_VAL = 0x020c,
00499 TXA_CTRL = 0x0210,
00500 TXA_TEST = 0x0211,
00501 TXA_STAT = 0x0212,
00502 };
00503
00504
00505 enum {
00506 B6_EXT_REG = 0x0300,
00507 B7_CFG_SPC = 0x0380,
00508 B8_RQ1_REGS = 0x0400,
00509 B8_RQ2_REGS = 0x0480,
00510 B8_TS1_REGS = 0x0600,
00511 B8_TA1_REGS = 0x0680,
00512 B8_TS2_REGS = 0x0700,
00513 B8_TA2_REGS = 0x0780,
00514 B16_RAM_REGS = 0x0800,
00515 };
00516
00517
00518 enum {
00519 B8_Q_REGS = 0x0400,
00520 Q_D = 0x00,
00521 Q_DA_L = 0x20,
00522 Q_DA_H = 0x24,
00523 Q_AC_L = 0x28,
00524 Q_AC_H = 0x2c,
00525 Q_BC = 0x30,
00526 Q_CSR = 0x34,
00527 Q_F = 0x38,
00528 Q_T1 = 0x3c,
00529 Q_T1_TR = 0x3c,
00530 Q_T1_WR = 0x3d,
00531 Q_T1_RD = 0x3e,
00532 Q_T1_SV = 0x3f,
00533 Q_T2 = 0x40,
00534 Q_T3 = 0x44,
00535
00536 };
00537 #define Q_ADDR(reg, offs) (B8_Q_REGS + (reg) + (offs))
00538
00539
00540 enum {
00541
00542 RB_START= 0x00,
00543 RB_END = 0x04,
00544 RB_WP = 0x08,
00545 RB_RP = 0x0c,
00546 RB_RX_UTPP= 0x10,
00547 RB_RX_LTPP= 0x14,
00548 RB_RX_UTHP= 0x18,
00549 RB_RX_LTHP= 0x1c,
00550
00551 RB_PC = 0x20,
00552 RB_LEV = 0x24,
00553 RB_CTRL = 0x28,
00554 RB_TST1 = 0x29,
00555 RB_TST2 = 0x2a,
00556 };
00557
00558
00559 enum {
00560 Q_R1 = 0x0000,
00561 Q_R2 = 0x0080,
00562 Q_XS1 = 0x0200,
00563 Q_XA1 = 0x0280,
00564 Q_XS2 = 0x0300,
00565 Q_XA2 = 0x0380,
00566 };
00567
00568
00569 enum {
00570 SK_MAC_XMAC = 0,
00571 SK_MAC_GMAC = 1,
00572 };
00573
00574
00575 enum {
00576 SK_PHY_XMAC = 0,
00577 SK_PHY_BCOM = 1,
00578 SK_PHY_LONE = 2,
00579 SK_PHY_NAT = 3,
00580 SK_PHY_MARV_COPPER= 4,
00581 SK_PHY_MARV_FIBER = 5,
00582 };
00583
00584
00585 enum {
00586 PHY_ADDR_XMAC = 0<<8,
00587 PHY_ADDR_BCOM = 1<<8,
00588
00589
00590 PHY_ADDR_MARV = 0,
00591 };
00592
00593 #define RB_ADDR(offs, queue) ((u16)B16_RAM_REGS + (u16)(queue) + (offs))
00594
00595
00596 enum {
00597 RX_MFF_EA = 0x0c00,
00598 RX_MFF_WP = 0x0c04,
00599
00600 RX_MFF_RP = 0x0c0c,
00601 RX_MFF_PC = 0x0c10,
00602 RX_MFF_LEV = 0x0c14,
00603 RX_MFF_CTRL1 = 0x0c18,
00604 RX_MFF_STAT_TO = 0x0c1a,
00605 RX_MFF_TIST_TO = 0x0c1b,
00606 RX_MFF_CTRL2 = 0x0c1c,
00607 RX_MFF_TST1 = 0x0c1d,
00608 RX_MFF_TST2 = 0x0c1e,
00609
00610 RX_LED_INI = 0x0c20,
00611 RX_LED_VAL = 0x0c24,
00612 RX_LED_CTRL = 0x0c28,
00613 RX_LED_TST = 0x0c29,
00614
00615 LNK_SYNC_INI = 0x0c30,
00616 LNK_SYNC_VAL = 0x0c34,
00617 LNK_SYNC_CTRL = 0x0c38,
00618 LNK_SYNC_TST = 0x0c39,
00619 LNK_LED_REG = 0x0c3c,
00620 };
00621
00622
00623
00624 enum {
00625 MFF_ENA_RDY_PAT = 1<<13,
00626 MFF_DIS_RDY_PAT = 1<<12,
00627 MFF_ENA_TIM_PAT = 1<<11,
00628 MFF_DIS_TIM_PAT = 1<<10,
00629 MFF_ENA_ALM_FUL = 1<<9,
00630 MFF_DIS_ALM_FUL = 1<<8,
00631 MFF_ENA_PAUSE = 1<<7,
00632 MFF_DIS_PAUSE = 1<<6,
00633 MFF_ENA_FLUSH = 1<<5,
00634 MFF_DIS_FLUSH = 1<<4,
00635 MFF_ENA_TIST = 1<<3,
00636 MFF_DIS_TIST = 1<<2,
00637 MFF_CLR_INTIST = 1<<1,
00638 MFF_CLR_INSTAT = 1<<0,
00639 MFF_RX_CTRL_DEF = MFF_ENA_TIM_PAT,
00640 };
00641
00642
00643 enum {
00644 MFF_CLR_PERR = 1<<15,
00645
00646 MFF_ENA_PKT_REC = 1<<13,
00647 MFF_DIS_PKT_REC = 1<<12,
00648
00649 MFF_ENA_W4E = 1<<7,
00650 MFF_DIS_W4E = 1<<6,
00651
00652 MFF_ENA_LOOPB = 1<<3,
00653 MFF_DIS_LOOPB = 1<<2,
00654 MFF_CLR_MAC_RST = 1<<1,
00655 MFF_SET_MAC_RST = 1<<0,
00656
00657 MFF_TX_CTRL_DEF = MFF_ENA_PKT_REC | (u16) MFF_ENA_TIM_PAT | MFF_ENA_FLUSH,
00658 };
00659
00660
00661
00662
00663 enum {
00664 MFF_WSP_T_ON = 1<<6,
00665 MFF_WSP_T_OFF = 1<<5,
00666 MFF_WSP_INC = 1<<4,
00667 MFF_PC_DEC = 1<<3,
00668 MFF_PC_T_ON = 1<<2,
00669 MFF_PC_T_OFF = 1<<1,
00670 MFF_PC_INC = 1<<0,
00671 };
00672
00673
00674
00675 enum {
00676 MFF_WP_T_ON = 1<<6,
00677 MFF_WP_T_OFF = 1<<5,
00678 MFF_WP_INC = 1<<4,
00679
00680 MFF_RP_T_ON = 1<<2,
00681 MFF_RP_T_OFF = 1<<1,
00682 MFF_RP_DEC = 1<<0,
00683 };
00684
00685
00686
00687 enum {
00688 MFF_ENA_OP_MD = 1<<3,
00689 MFF_DIS_OP_MD = 1<<2,
00690 MFF_RST_CLR = 1<<1,
00691 MFF_RST_SET = 1<<0,
00692 };
00693
00694
00695
00696
00697
00698
00699
00700 enum {
00701 LED_START = 1<<2,
00702 LED_STOP = 1<<1,
00703 LED_STATE = 1<<0,
00704 };
00705
00706
00707
00708
00709 enum {
00710 LED_T_ON = 1<<2,
00711 LED_T_OFF = 1<<1,
00712 LED_T_STEP = 1<<0,
00713 };
00714
00715
00716 enum {
00717 LED_BLK_ON = 1<<5,
00718 LED_BLK_OFF = 1<<4,
00719 LED_SYNC_ON = 1<<3,
00720 LED_SYNC_OFF = 1<<2,
00721 LED_ON = 1<<1,
00722 LED_OFF = 1<<0,
00723 };
00724
00725
00726 enum {
00727 RX_GMF_EA = 0x0c40,
00728 RX_GMF_AF_THR = 0x0c44,
00729 RX_GMF_CTRL_T = 0x0c48,
00730 RX_GMF_FL_MSK = 0x0c4c,
00731 RX_GMF_FL_THR = 0x0c50,
00732 RX_GMF_WP = 0x0c60,
00733 RX_GMF_WLEV = 0x0c68,
00734 RX_GMF_RP = 0x0c70,
00735 RX_GMF_RLEV = 0x0c78,
00736 };
00737
00738
00739
00740 enum {
00741 TXA_INT_T_ON = 1<<5,
00742 TXA_INT_T_OFF = 1<<4,
00743 TXA_INT_T_STEP = 1<<3,
00744 TXA_LIM_T_ON = 1<<2,
00745 TXA_LIM_T_OFF = 1<<1,
00746 TXA_LIM_T_STEP = 1<<0,
00747 };
00748
00749
00750 enum {
00751 TXA_PRIO_XS = 1<<0,
00752 };
00753
00754
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
00766 enum {
00767 CSR_SV_IDLE = 1<<24,
00768
00769 CSR_DESC_CLR = 1<<21,
00770 CSR_DESC_SET = 1<<20,
00771 CSR_FIFO_CLR = 1<<19,
00772 CSR_FIFO_SET = 1<<18,
00773 CSR_HPI_RUN = 1<<17,
00774 CSR_HPI_RST = 1<<16,
00775 CSR_SV_RUN = 1<<15,
00776 CSR_SV_RST = 1<<14,
00777 CSR_DREAD_RUN = 1<<13,
00778 CSR_DREAD_RST = 1<<12,
00779 CSR_DWRITE_RUN = 1<<11,
00780 CSR_DWRITE_RST = 1<<10,
00781 CSR_TRANS_RUN = 1<<9,
00782 CSR_TRANS_RST = 1<<8,
00783 CSR_ENA_POL = 1<<7,
00784 CSR_DIS_POL = 1<<6,
00785 CSR_STOP = 1<<5,
00786 CSR_START = 1<<4,
00787 CSR_IRQ_CL_P = 1<<3,
00788 CSR_IRQ_CL_B = 1<<2,
00789 CSR_IRQ_CL_F = 1<<1,
00790 CSR_IRQ_CL_C = 1<<0,
00791 };
00792
00793 #define CSR_SET_RESET (CSR_DESC_SET | CSR_FIFO_SET | CSR_HPI_RST |\
00794 CSR_SV_RST | CSR_DREAD_RST | CSR_DWRITE_RST |\
00795 CSR_TRANS_RST)
00796 #define CSR_CLR_RESET (CSR_DESC_CLR | CSR_FIFO_CLR | CSR_HPI_RUN |\
00797 CSR_SV_RUN | CSR_DREAD_RUN | CSR_DWRITE_RUN |\
00798 CSR_TRANS_RUN)
00799
00800
00801 enum {
00802 F_ALM_FULL = 1<<27,
00803 F_EMPTY = 1<<27,
00804 F_FIFO_EOF = 1<<26,
00805 F_WM_REACHED = 1<<25,
00806
00807 F_FIFO_LEVEL = 0x1fL<<16,
00808 F_WATER_MARK = 0x0007ffL,
00809 };
00810
00811
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823 #define RB_MSK 0x0007ffff
00824
00825
00826
00827
00828 enum {
00829 RB_ENA_STFWD = 1<<5,
00830 RB_DIS_STFWD = 1<<4,
00831 RB_ENA_OP_MD = 1<<3,
00832 RB_DIS_OP_MD = 1<<2,
00833 RB_RST_CLR = 1<<1,
00834 RB_RST_SET = 1<<0,
00835 };
00836
00837
00838 enum {
00839 TX_MFF_EA = 0x0d00,
00840 TX_MFF_WP = 0x0d04,
00841 TX_MFF_WSP = 0x0d08,
00842 TX_MFF_RP = 0x0d0c,
00843 TX_MFF_PC = 0x0d10,
00844 TX_MFF_LEV = 0x0d14,
00845 TX_MFF_CTRL1 = 0x0d18,
00846 TX_MFF_WAF = 0x0d1a,
00847
00848 TX_MFF_CTRL2 = 0x0d1c,
00849 TX_MFF_TST1 = 0x0d1d,
00850 TX_MFF_TST2 = 0x0d1e,
00851
00852 TX_LED_INI = 0x0d20,
00853 TX_LED_VAL = 0x0d24,
00854 TX_LED_CTRL = 0x0d28,
00855 TX_LED_TST = 0x0d29,
00856 };
00857
00858
00859 #define SK_XMIT_DUR 0x002faf08UL
00860 #define SK_BLK_DUR 0x01dcd650UL
00861
00862 #define SK_DPOLL_DEF 0x00ee6b28UL
00863
00864 #define SK_DPOLL_MAX 0x00ffffffUL
00865
00866
00867 #define SK_FACT_62 100
00868 #define SK_FACT_53 85
00869 #define SK_FACT_78 125
00870
00871
00872
00873 enum {
00874 TX_GMF_EA = 0x0d40,
00875 TX_GMF_AE_THR = 0x0d44,
00876 TX_GMF_CTRL_T = 0x0d48,
00877
00878 TX_GMF_WP = 0x0d60,
00879 TX_GMF_WSP = 0x0d64,
00880 TX_GMF_WLEV = 0x0d68,
00881
00882 TX_GMF_RP = 0x0d70,
00883 TX_GMF_RSTP = 0x0d74,
00884 TX_GMF_RLEV = 0x0d78,
00885
00886
00887 B28_DPT_INI = 0x0e00,
00888 B28_DPT_VAL = 0x0e04,
00889 B28_DPT_CTRL = 0x0e08,
00890
00891 B28_DPT_TST = 0x0e0a,
00892
00893
00894 GMAC_TI_ST_VAL = 0x0e14,
00895 GMAC_TI_ST_CTRL = 0x0e18,
00896 GMAC_TI_ST_TST = 0x0e1a,
00897 };
00898
00899
00900 enum {
00901 LINKLED_OFF = 0x01,
00902 LINKLED_ON = 0x02,
00903 LINKLED_LINKSYNC_OFF = 0x04,
00904 LINKLED_LINKSYNC_ON = 0x08,
00905 LINKLED_BLINK_OFF = 0x10,
00906 LINKLED_BLINK_ON = 0x20,
00907 };
00908
00909
00910 enum {
00911 GMAC_CTRL = 0x0f00,
00912 GPHY_CTRL = 0x0f04,
00913 GMAC_IRQ_SRC = 0x0f08,
00914 GMAC_IRQ_MSK = 0x0f0c,
00915 GMAC_LINK_CTRL = 0x0f10,
00916
00917
00918
00919 WOL_REG_OFFS = 0x20,
00920
00921 WOL_CTRL_STAT = 0x0f20,
00922 WOL_MATCH_CTL = 0x0f22,
00923 WOL_MATCH_RES = 0x0f23,
00924 WOL_MAC_ADDR = 0x0f24,
00925 WOL_PATT_RPTR = 0x0f2c,
00926
00927
00928
00929 WOL_PATT_LEN_LO = 0x0f30,
00930 WOL_PATT_LEN_HI = 0x0f34,
00931
00932
00933
00934 WOL_PATT_CNT_0 = 0x0f38,
00935 WOL_PATT_CNT_4 = 0x0f3c,
00936 };
00937 #define WOL_REGS(port, x) (x + (port)*0x80)
00938
00939 enum {
00940 WOL_PATT_RAM_1 = 0x1000,
00941 WOL_PATT_RAM_2 = 0x1400,
00942 };
00943 #define WOL_PATT_RAM_BASE(port) (WOL_PATT_RAM_1 + (port)*0x400)
00944
00945 enum {
00946 BASE_XMAC_1 = 0x2000,
00947 BASE_GMAC_1 = 0x2800,
00948 BASE_XMAC_2 = 0x3000,
00949 BASE_GMAC_2 = 0x3800,
00950 };
00951
00952
00953
00954
00955 enum {
00956 XMR_FS_LEN = 0x3fff<<18,
00957 XMR_FS_LEN_SHIFT = 18,
00958 XMR_FS_2L_VLAN = 1<<17,
00959 XMR_FS_1_VLAN = 1<<16,
00960 XMR_FS_BC = 1<<15,
00961 XMR_FS_MC = 1<<14,
00962 XMR_FS_UC = 1<<13,
00963
00964 XMR_FS_BURST = 1<<11,
00965 XMR_FS_CEX_ERR = 1<<10,
00966 XMR_FS_802_3 = 1<<9,
00967 XMR_FS_COL_ERR = 1<<8,
00968 XMR_FS_CAR_ERR = 1<<7,
00969 XMR_FS_LEN_ERR = 1<<6,
00970 XMR_FS_FRA_ERR = 1<<5,
00971 XMR_FS_RUNT = 1<<4,
00972 XMR_FS_LNG_ERR = 1<<3,
00973 XMR_FS_FCS_ERR = 1<<2,
00974 XMR_FS_ERR = 1<<1,
00975 XMR_FS_MCTRL = 1<<0,
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985 };
00986
00987
00988
00989
00990 enum {
00991 PHY_XMAC_CTRL = 0x00,
00992 PHY_XMAC_STAT = 0x01,
00993 PHY_XMAC_ID0 = 0x02,
00994 PHY_XMAC_ID1 = 0x03,
00995 PHY_XMAC_AUNE_ADV = 0x04,
00996 PHY_XMAC_AUNE_LP = 0x05,
00997 PHY_XMAC_AUNE_EXP = 0x06,
00998 PHY_XMAC_NEPG = 0x07,
00999 PHY_XMAC_NEPG_LP = 0x08,
01000
01001 PHY_XMAC_EXT_STAT = 0x0f,
01002 PHY_XMAC_RES_ABI = 0x10,
01003 };
01004
01005
01006
01007 enum {
01008 PHY_BCOM_CTRL = 0x00,
01009 PHY_BCOM_STAT = 0x01,
01010 PHY_BCOM_ID0 = 0x02,
01011 PHY_BCOM_ID1 = 0x03,
01012 PHY_BCOM_AUNE_ADV = 0x04,
01013 PHY_BCOM_AUNE_LP = 0x05,
01014 PHY_BCOM_AUNE_EXP = 0x06,
01015 PHY_BCOM_NEPG = 0x07,
01016 PHY_BCOM_NEPG_LP = 0x08,
01017
01018 PHY_BCOM_1000T_CTRL = 0x09,
01019 PHY_BCOM_1000T_STAT = 0x0a,
01020 PHY_BCOM_EXT_STAT = 0x0f,
01021 PHY_BCOM_P_EXT_CTRL = 0x10,
01022 PHY_BCOM_P_EXT_STAT = 0x11,
01023 PHY_BCOM_RE_CTR = 0x12,
01024 PHY_BCOM_FC_CTR = 0x13,
01025 PHY_BCOM_RNO_CTR = 0x14,
01026
01027 PHY_BCOM_AUX_CTRL = 0x18,
01028 PHY_BCOM_AUX_STAT = 0x19,
01029 PHY_BCOM_INT_STAT = 0x1a,
01030 PHY_BCOM_INT_MASK = 0x1b,
01031 };
01032
01033
01034
01035
01036 enum {
01037 PHY_MARV_CTRL = 0x00,
01038 PHY_MARV_STAT = 0x01,
01039 PHY_MARV_ID0 = 0x02,
01040 PHY_MARV_ID1 = 0x03,
01041 PHY_MARV_AUNE_ADV = 0x04,
01042 PHY_MARV_AUNE_LP = 0x05,
01043 PHY_MARV_AUNE_EXP = 0x06,
01044 PHY_MARV_NEPG = 0x07,
01045 PHY_MARV_NEPG_LP = 0x08,
01046
01047 PHY_MARV_1000T_CTRL = 0x09,
01048 PHY_MARV_1000T_STAT = 0x0a,
01049 PHY_MARV_EXT_STAT = 0x0f,
01050 PHY_MARV_PHY_CTRL = 0x10,
01051 PHY_MARV_PHY_STAT = 0x11,
01052 PHY_MARV_INT_MASK = 0x12,
01053 PHY_MARV_INT_STAT = 0x13,
01054 PHY_MARV_EXT_CTRL = 0x14,
01055 PHY_MARV_RXE_CNT = 0x15,
01056 PHY_MARV_EXT_ADR = 0x16,
01057 PHY_MARV_PORT_IRQ = 0x17,
01058 PHY_MARV_LED_CTRL = 0x18,
01059 PHY_MARV_LED_OVER = 0x19,
01060 PHY_MARV_EXT_CTRL_2 = 0x1a,
01061 PHY_MARV_EXT_P_STAT = 0x1b,
01062 PHY_MARV_CABLE_DIAG = 0x1c,
01063 PHY_MARV_PAGE_ADDR = 0x1d,
01064 PHY_MARV_PAGE_DATA = 0x1e,
01065
01066
01067 PHY_MARV_FE_LED_PAR = 0x16,
01068 PHY_MARV_FE_LED_SER = 0x17,
01069 PHY_MARV_FE_VCT_TX = 0x1a,
01070 PHY_MARV_FE_VCT_RX = 0x1b,
01071 PHY_MARV_FE_SPEC_2 = 0x1c,
01072 };
01073
01074 enum {
01075 PHY_CT_RESET = 1<<15,
01076 PHY_CT_LOOP = 1<<14,
01077 PHY_CT_SPS_LSB = 1<<13,
01078 PHY_CT_ANE = 1<<12,
01079 PHY_CT_PDOWN = 1<<11,
01080 PHY_CT_ISOL = 1<<10,
01081 PHY_CT_RE_CFG = 1<<9,
01082 PHY_CT_DUP_MD = 1<<8,
01083 PHY_CT_COL_TST = 1<<7,
01084 PHY_CT_SPS_MSB = 1<<6,
01085 };
01086
01087 enum {
01088 PHY_CT_SP1000 = PHY_CT_SPS_MSB,
01089 PHY_CT_SP100 = PHY_CT_SPS_LSB,
01090 PHY_CT_SP10 = 0,
01091 };
01092
01093 enum {
01094 PHY_ST_EXT_ST = 1<<8,
01095
01096 PHY_ST_PRE_SUP = 1<<6,
01097 PHY_ST_AN_OVER = 1<<5,
01098 PHY_ST_REM_FLT = 1<<4,
01099 PHY_ST_AN_CAP = 1<<3,
01100 PHY_ST_LSYNC = 1<<2,
01101 PHY_ST_JAB_DET = 1<<1,
01102 PHY_ST_EXT_REG = 1<<0,
01103 };
01104
01105 enum {
01106 PHY_I1_OUI_MSK = 0x3f<<10,
01107 PHY_I1_MOD_NUM = 0x3f<<4,
01108 PHY_I1_REV_MSK = 0xf,
01109 };
01110
01111
01112 enum {
01113 PHY_BCOM_ID1_A1 = 0x6041,
01114 PHY_BCOM_ID1_B2 = 0x6043,
01115 PHY_BCOM_ID1_C0 = 0x6044,
01116 PHY_BCOM_ID1_C5 = 0x6047,
01117 };
01118
01119
01120 enum {
01121 PHY_MARV_ID0_VAL= 0x0141,
01122 PHY_MARV_ID1_B0 = 0x0C23,
01123 PHY_MARV_ID1_B2 = 0x0C25,
01124 PHY_MARV_ID1_C2 = 0x0CC2,
01125 PHY_MARV_ID1_Y2 = 0x0C91,
01126 };
01127
01128
01129 enum {
01130 PHY_AN_NXT_PG = 1<<15,
01131 PHY_AN_ACK = 1<<14,
01132 PHY_AN_RF = 1<<13,
01133
01134 PHY_AN_PAUSE_ASYM = 1<<11,
01135 PHY_AN_PAUSE_CAP = 1<<10,
01136 PHY_AN_100BASE4 = 1<<9,
01137 PHY_AN_100FULL = 1<<8,
01138 PHY_AN_100HALF = 1<<7,
01139 PHY_AN_10FULL = 1<<6,
01140 PHY_AN_10HALF = 1<<5,
01141 PHY_AN_CSMA = 1<<0,
01142 PHY_AN_SEL = 0x1f,
01143 PHY_AN_FULL = PHY_AN_100FULL | PHY_AN_10FULL | PHY_AN_CSMA,
01144 PHY_AN_ALL = PHY_AN_10HALF | PHY_AN_10FULL |
01145 PHY_AN_100HALF | PHY_AN_100FULL,
01146 };
01147
01148
01149 enum {
01150 PHY_X_AN_NXT_PG = 1<<15,
01151 PHY_X_AN_ACK = 1<<14,
01152 PHY_X_AN_RFB = 3<<12,
01153
01154 PHY_X_AN_PAUSE = 3<<7,
01155 PHY_X_AN_HD = 1<<6,
01156 PHY_X_AN_FD = 1<<5,
01157 };
01158
01159
01160 enum {
01161 PHY_X_P_NO_PAUSE= 0<<7,
01162 PHY_X_P_SYM_MD = 1<<7,
01163 PHY_X_P_ASYM_MD = 2<<7,
01164 PHY_X_P_BOTH_MD = 3<<7,
01165 };
01166
01167
01168
01169 enum {
01170 PHY_X_EX_FD = 1<<15,
01171 PHY_X_EX_HD = 1<<14,
01172 };
01173
01174
01175 enum {
01176 PHY_X_RS_PAUSE = 3<<7,
01177 PHY_X_RS_HD = 1<<6,
01178 PHY_X_RS_FD = 1<<5,
01179 PHY_X_RS_ABLMIS = 1<<4,
01180 PHY_X_RS_PAUMIS = 1<<3,
01181 };
01182
01183
01184 enum {
01185 X_RFB_OK = 0<<12,
01186 X_RFB_LF = 1<<12,
01187 X_RFB_OFF = 2<<12,
01188 X_RFB_AN_ERR = 3<<12,
01189 };
01190
01191
01192
01193 enum {
01194 PHY_B_1000C_TEST = 7<<13,
01195 PHY_B_1000C_MSE = 1<<12,
01196 PHY_B_1000C_MSC = 1<<11,
01197 PHY_B_1000C_RD = 1<<10,
01198 PHY_B_1000C_AFD = 1<<9,
01199 PHY_B_1000C_AHD = 1<<8,
01200 };
01201
01202
01203
01204 enum {
01205 PHY_B_1000S_MSF = 1<<15,
01206 PHY_B_1000S_MSR = 1<<14,
01207 PHY_B_1000S_LRS = 1<<13,
01208 PHY_B_1000S_RRS = 1<<12,
01209 PHY_B_1000S_LP_FD = 1<<11,
01210 PHY_B_1000S_LP_HD = 1<<10,
01211
01212 PHY_B_1000S_IEC = 0xff,
01213 };
01214
01215
01216 enum {
01217 PHY_B_ES_X_FD_CAP = 1<<15,
01218 PHY_B_ES_X_HD_CAP = 1<<14,
01219 PHY_B_ES_T_FD_CAP = 1<<13,
01220 PHY_B_ES_T_HD_CAP = 1<<12,
01221 };
01222
01223
01224 enum {
01225 PHY_B_PEC_MAC_PHY = 1<<15,
01226 PHY_B_PEC_DIS_CROSS = 1<<14,
01227 PHY_B_PEC_TX_DIS = 1<<13,
01228 PHY_B_PEC_INT_DIS = 1<<12,
01229 PHY_B_PEC_F_INT = 1<<11,
01230 PHY_B_PEC_BY_45 = 1<<10,
01231 PHY_B_PEC_BY_SCR = 1<<9,
01232 PHY_B_PEC_BY_MLT3 = 1<<8,
01233 PHY_B_PEC_BY_RXA = 1<<7,
01234 PHY_B_PEC_RES_SCR = 1<<6,
01235 PHY_B_PEC_EN_LTR = 1<<5,
01236 PHY_B_PEC_LED_ON = 1<<4,
01237 PHY_B_PEC_LED_OFF = 1<<3,
01238 PHY_B_PEC_EX_IPG = 1<<2,
01239 PHY_B_PEC_3_LED = 1<<1,
01240 PHY_B_PEC_HIGH_LA = 1<<0,
01241 };
01242
01243
01244 enum {
01245 PHY_B_PES_CROSS_STAT = 1<<13,
01246 PHY_B_PES_INT_STAT = 1<<12,
01247 PHY_B_PES_RRS = 1<<11,
01248 PHY_B_PES_LRS = 1<<10,
01249 PHY_B_PES_LOCKED = 1<<9,
01250 PHY_B_PES_LS = 1<<8,
01251 PHY_B_PES_RF = 1<<7,
01252 PHY_B_PES_CE_ER = 1<<6,
01253 PHY_B_PES_BAD_SSD = 1<<5,
01254 PHY_B_PES_BAD_ESD = 1<<4,
01255 PHY_B_PES_RX_ER = 1<<3,
01256 PHY_B_PES_TX_ER = 1<<2,
01257 PHY_B_PES_LOCK_ER = 1<<1,
01258 PHY_B_PES_MLT3_ER = 1<<0,
01259 };
01260
01261
01262
01263 enum {
01264 PHY_B_AN_RF = 1<<13,
01265
01266 PHY_B_AN_ASP = 1<<11,
01267 PHY_B_AN_PC = 1<<10,
01268 };
01269
01270
01271
01272 enum {
01273 PHY_B_FC_CTR = 0xff,
01274
01275
01276 PHY_B_RC_LOC_MSK = 0xff00,
01277 PHY_B_RC_REM_MSK = 0x00ff,
01278
01279
01280 PHY_B_AC_L_SQE = 1<<15,
01281 PHY_B_AC_LONG_PACK = 1<<14,
01282 PHY_B_AC_ER_CTRL = 3<<12,
01283
01284 PHY_B_AC_TX_TST = 1<<10,
01285
01286 PHY_B_AC_DIS_PRF = 1<<7,
01287
01288 PHY_B_AC_DIS_PM = 1<<5,
01289
01290 PHY_B_AC_DIAG = 1<<3,
01291 };
01292
01293
01294 enum {
01295 PHY_B_AS_AN_C = 1<<15,
01296 PHY_B_AS_AN_CA = 1<<14,
01297 PHY_B_AS_ANACK_D = 1<<13,
01298 PHY_B_AS_ANAB_D = 1<<12,
01299 PHY_B_AS_NPW = 1<<11,
01300 PHY_B_AS_AN_RES_MSK = 7<<8,
01301 PHY_B_AS_PDF = 1<<7,
01302 PHY_B_AS_RF = 1<<6,
01303 PHY_B_AS_ANP_R = 1<<5,
01304 PHY_B_AS_LP_ANAB = 1<<4,
01305 PHY_B_AS_LP_NPAB = 1<<3,
01306 PHY_B_AS_LS = 1<<2,
01307 PHY_B_AS_PRR = 1<<1,
01308 PHY_B_AS_PRT = 1<<0,
01309 };
01310 #define PHY_B_AS_PAUSE_MSK (PHY_B_AS_PRR | PHY_B_AS_PRT)
01311
01312
01313
01314 enum {
01315 PHY_B_IS_PSE = 1<<14,
01316 PHY_B_IS_MDXI_SC = 1<<13,
01317 PHY_B_IS_HCT = 1<<12,
01318 PHY_B_IS_LCT = 1<<11,
01319 PHY_B_IS_AN_PR = 1<<10,
01320 PHY_B_IS_NO_HDCL = 1<<9,
01321 PHY_B_IS_NO_HDC = 1<<8,
01322 PHY_B_IS_NEG_USHDC = 1<<7,
01323 PHY_B_IS_SCR_S_ER = 1<<6,
01324 PHY_B_IS_RRS_CHANGE = 1<<5,
01325 PHY_B_IS_LRS_CHANGE = 1<<4,
01326 PHY_B_IS_DUP_CHANGE = 1<<3,
01327 PHY_B_IS_LSP_CHANGE = 1<<2,
01328 PHY_B_IS_LST_CHANGE = 1<<1,
01329 PHY_B_IS_CRC_ER = 1<<0,
01330 };
01331 #define PHY_B_DEF_MSK \
01332 (~(PHY_B_IS_PSE | PHY_B_IS_AN_PR | PHY_B_IS_DUP_CHANGE | \
01333 PHY_B_IS_LSP_CHANGE | PHY_B_IS_LST_CHANGE))
01334
01335
01336 enum {
01337 PHY_B_P_NO_PAUSE = 0<<10,
01338 PHY_B_P_SYM_MD = 1<<10,
01339 PHY_B_P_ASYM_MD = 2<<10,
01340 PHY_B_P_BOTH_MD = 3<<10,
01341 };
01342
01343
01344
01345 enum {
01346 PHY_B_RES_1000FD = 7<<8,
01347 PHY_B_RES_1000HD = 6<<8,
01348 };
01349
01350
01351 enum {
01352 PHY_M_AN_NXT_PG = 1<<15,
01353 PHY_M_AN_ACK = 1<<14,
01354 PHY_M_AN_RF = 1<<13,
01355
01356 PHY_M_AN_ASP = 1<<11,
01357 PHY_M_AN_PC = 1<<10,
01358 PHY_M_AN_100_T4 = 1<<9,
01359 PHY_M_AN_100_FD = 1<<8,
01360 PHY_M_AN_100_HD = 1<<7,
01361 PHY_M_AN_10_FD = 1<<6,
01362 PHY_M_AN_10_HD = 1<<5,
01363 PHY_M_AN_SEL_MSK =0x1f<<4,
01364 };
01365
01366
01367 enum {
01368 PHY_M_AN_ASP_X = 1<<8,
01369 PHY_M_AN_PC_X = 1<<7,
01370 PHY_M_AN_1000X_AHD = 1<<6,
01371 PHY_M_AN_1000X_AFD = 1<<5,
01372 };
01373
01374
01375 enum {
01376 PHY_M_P_NO_PAUSE_X = 0<<7,
01377 PHY_M_P_SYM_MD_X = 1<<7,
01378 PHY_M_P_ASYM_MD_X = 2<<7,
01379 PHY_M_P_BOTH_MD_X = 3<<7,
01380 };
01381
01382
01383 enum {
01384 PHY_M_1000C_TEST= 7<<13,
01385 PHY_M_1000C_MSE = 1<<12,
01386 PHY_M_1000C_MSC = 1<<11,
01387 PHY_M_1000C_MPD = 1<<10,
01388 PHY_M_1000C_AFD = 1<<9,
01389 PHY_M_1000C_AHD = 1<<8,
01390 };
01391
01392
01393 enum {
01394 PHY_M_PC_TX_FFD_MSK = 3<<14,
01395 PHY_M_PC_RX_FFD_MSK = 3<<12,
01396 PHY_M_PC_ASS_CRS_TX = 1<<11,
01397 PHY_M_PC_FL_GOOD = 1<<10,
01398 PHY_M_PC_EN_DET_MSK = 3<<8,
01399 PHY_M_PC_ENA_EXT_D = 1<<7,
01400 PHY_M_PC_MDIX_MSK = 3<<5,
01401 PHY_M_PC_DIS_125CLK = 1<<4,
01402 PHY_M_PC_MAC_POW_UP = 1<<3,
01403 PHY_M_PC_SQE_T_ENA = 1<<2,
01404 PHY_M_PC_POL_R_DIS = 1<<1,
01405 PHY_M_PC_DIS_JABBER = 1<<0,
01406 };
01407
01408 enum {
01409 PHY_M_PC_EN_DET = 2<<8,
01410 PHY_M_PC_EN_DET_PLUS = 3<<8,
01411 };
01412
01413 enum {
01414 PHY_M_PC_MAN_MDI = 0,
01415 PHY_M_PC_MAN_MDIX = 1,
01416 PHY_M_PC_ENA_AUTO = 3,
01417 };
01418
01419
01420 enum {
01421 PHY_M_PC_ENA_DTE_DT = 1<<15,
01422 PHY_M_PC_ENA_ENE_DT = 1<<14,
01423 PHY_M_PC_DIS_NLP_CK = 1<<13,
01424 PHY_M_PC_ENA_LIP_NP = 1<<12,
01425 PHY_M_PC_DIS_NLP_GN = 1<<11,
01426
01427 PHY_M_PC_DIS_SCRAMB = 1<<9,
01428 PHY_M_PC_DIS_FEFI = 1<<8,
01429
01430 PHY_M_PC_SH_TP_SEL = 1<<6,
01431 PHY_M_PC_RX_FD_MSK = 3<<2,
01432 };
01433
01434
01435 enum {
01436 PHY_M_PS_SPEED_MSK = 3<<14,
01437 PHY_M_PS_SPEED_1000 = 1<<15,
01438 PHY_M_PS_SPEED_100 = 1<<14,
01439 PHY_M_PS_SPEED_10 = 0,
01440 PHY_M_PS_FULL_DUP = 1<<13,
01441 PHY_M_PS_PAGE_REC = 1<<12,
01442 PHY_M_PS_SPDUP_RES = 1<<11,
01443 PHY_M_PS_LINK_UP = 1<<10,
01444 PHY_M_PS_CABLE_MSK = 7<<7,
01445 PHY_M_PS_MDI_X_STAT = 1<<6,
01446 PHY_M_PS_DOWNS_STAT = 1<<5,
01447 PHY_M_PS_ENDET_STAT = 1<<4,
01448 PHY_M_PS_TX_P_EN = 1<<3,
01449 PHY_M_PS_RX_P_EN = 1<<2,
01450 PHY_M_PS_POL_REV = 1<<1,
01451 PHY_M_PS_JABBER = 1<<0,
01452 };
01453
01454 #define PHY_M_PS_PAUSE_MSK (PHY_M_PS_TX_P_EN | PHY_M_PS_RX_P_EN)
01455
01456
01457 enum {
01458 PHY_M_PS_DTE_DETECT = 1<<15,
01459 PHY_M_PS_RES_SPEED = 1<<14,
01460 };
01461
01462 enum {
01463 PHY_M_IS_AN_ERROR = 1<<15,
01464 PHY_M_IS_LSP_CHANGE = 1<<14,
01465 PHY_M_IS_DUP_CHANGE = 1<<13,
01466 PHY_M_IS_AN_PR = 1<<12,
01467 PHY_M_IS_AN_COMPL = 1<<11,
01468 PHY_M_IS_LST_CHANGE = 1<<10,
01469 PHY_M_IS_SYMB_ERROR = 1<<9,
01470 PHY_M_IS_FALSE_CARR = 1<<8,
01471 PHY_M_IS_FIFO_ERROR = 1<<7,
01472 PHY_M_IS_MDI_CHANGE = 1<<6,
01473 PHY_M_IS_DOWNSH_DET = 1<<5,
01474 PHY_M_IS_END_CHANGE = 1<<4,
01475
01476 PHY_M_IS_DTE_CHANGE = 1<<2,
01477 PHY_M_IS_POL_CHANGE = 1<<1,
01478 PHY_M_IS_JABBER = 1<<0,
01479
01480 PHY_M_IS_DEF_MSK = PHY_M_IS_AN_ERROR | PHY_M_IS_LSP_CHANGE |
01481 PHY_M_IS_LST_CHANGE | PHY_M_IS_FIFO_ERROR,
01482
01483 PHY_M_IS_AN_MSK = PHY_M_IS_AN_ERROR | PHY_M_IS_AN_COMPL,
01484 };
01485
01486
01487 enum {
01488 PHY_M_EC_ENA_BC_EXT = 1<<15,
01489 PHY_M_EC_ENA_LIN_LB = 1<<14,
01490
01491 PHY_M_EC_DIS_LINK_P = 1<<12,
01492 PHY_M_EC_M_DSC_MSK = 3<<10,
01493
01494 PHY_M_EC_S_DSC_MSK = 3<<8,
01495
01496 PHY_M_EC_M_DSC_MSK2 = 7<<9,
01497
01498 PHY_M_EC_DOWN_S_ENA = 1<<8,
01499
01500 PHY_M_EC_RX_TIM_CT = 1<<7,
01501 PHY_M_EC_MAC_S_MSK = 7<<4,
01502 PHY_M_EC_FIB_AN_ENA = 1<<3,
01503 PHY_M_EC_DTE_D_ENA = 1<<2,
01504 PHY_M_EC_TX_TIM_CT = 1<<1,
01505 PHY_M_EC_TRANS_DIS = 1<<0, };
01506
01507 #define PHY_M_EC_M_DSC(x) ((u16)(x)<<10)
01508 #define PHY_M_EC_S_DSC(x) ((u16)(x)<<8)
01509 #define PHY_M_EC_MAC_S(x) ((u16)(x)<<4)
01510
01511 #define PHY_M_EC_M_DSC_2(x) ((u16)(x)<<9)
01512
01513 enum {
01514 MAC_TX_CLK_0_MHZ = 2,
01515 MAC_TX_CLK_2_5_MHZ = 6,
01516 MAC_TX_CLK_25_MHZ = 7,
01517 };
01518
01519
01520 enum {
01521 PHY_M_LEDC_DIS_LED = 1<<15,
01522 PHY_M_LEDC_PULS_MSK = 7<<12,
01523 PHY_M_LEDC_F_INT = 1<<11,
01524 PHY_M_LEDC_BL_R_MSK = 7<<8,
01525 PHY_M_LEDC_DP_C_LSB = 1<<7,
01526 PHY_M_LEDC_TX_C_LSB = 1<<6,
01527 PHY_M_LEDC_LK_C_MSK = 7<<3,
01528
01529 };
01530 #define PHY_M_LED_PULS_DUR(x) (((u16)(x)<<12) & PHY_M_LEDC_PULS_MSK)
01531 #define PHY_M_LED_BLINK_RT(x) (((u16)(x)<<8) & PHY_M_LEDC_BL_R_MSK)
01532
01533 enum {
01534 PHY_M_LEDC_LINK_MSK = 3<<3,
01535
01536 PHY_M_LEDC_DP_CTRL = 1<<2,
01537 PHY_M_LEDC_DP_C_MSB = 1<<2,
01538 PHY_M_LEDC_RX_CTRL = 1<<1,
01539 PHY_M_LEDC_TX_CTRL = 1<<0,
01540 PHY_M_LEDC_TX_C_MSB = 1<<0,
01541 };
01542
01543 enum {
01544 PULS_NO_STR = 0,
01545 PULS_21MS = 1,
01546 PULS_42MS = 2,
01547 PULS_84MS = 3,
01548 PULS_170MS = 4,
01549 PULS_340MS = 5,
01550 PULS_670MS = 6,
01551 PULS_1300MS = 7,
01552 };
01553
01554
01555 enum {
01556 BLINK_42MS = 0,
01557 BLINK_84MS = 1,
01558 BLINK_170MS = 2,
01559 BLINK_340MS = 3,
01560 BLINK_670MS = 4,
01561 };
01562
01563
01564 #define PHY_M_LED_MO_SGMII(x) ((x)<<14)
01565
01566 #define PHY_M_LED_MO_DUP(x) ((x)<<10)
01567 #define PHY_M_LED_MO_10(x) ((x)<<8)
01568 #define PHY_M_LED_MO_100(x) ((x)<<6)
01569 #define PHY_M_LED_MO_1000(x) ((x)<<4)
01570 #define PHY_M_LED_MO_RX(x) ((x)<<2)
01571 #define PHY_M_LED_MO_TX(x) ((x)<<0)
01572
01573 enum {
01574 MO_LED_NORM = 0,
01575 MO_LED_BLINK = 1,
01576 MO_LED_OFF = 2,
01577 MO_LED_ON = 3,
01578 };
01579
01580
01581 enum {
01582 PHY_M_EC2_FI_IMPED = 1<<6,
01583 PHY_M_EC2_FO_IMPED = 1<<5,
01584 PHY_M_EC2_FO_M_CLK = 1<<4,
01585 PHY_M_EC2_FO_BOOST = 1<<3,
01586 PHY_M_EC2_FO_AM_MSK = 7,
01587 };
01588
01589
01590 enum {
01591 PHY_M_FC_AUTO_SEL = 1<<15,
01592 PHY_M_FC_AN_REG_ACC = 1<<14,
01593 PHY_M_FC_RESOLUTION = 1<<13,
01594 PHY_M_SER_IF_AN_BP = 1<<12,
01595 PHY_M_SER_IF_BP_ST = 1<<11,
01596 PHY_M_IRQ_POLARITY = 1<<10,
01597 PHY_M_DIS_AUT_MED = 1<<9,
01598
01599
01600 PHY_M_UNDOC1 = 1<<7,
01601 PHY_M_DTE_POW_STAT = 1<<4,
01602 PHY_M_MODE_MASK = 0xf,
01603 };
01604
01605
01606 enum {
01607 PHY_M_CABD_ENA_TEST = 1<<15,
01608 PHY_M_CABD_DIS_WAIT = 1<<15,
01609
01610 PHY_M_CABD_STAT_MSK = 3<<13,
01611 PHY_M_CABD_AMPL_MSK = 0x1f<<8,
01612
01613 PHY_M_CABD_DIST_MSK = 0xff,
01614 };
01615
01616
01617 enum {
01618 CABD_STAT_NORMAL= 0,
01619 CABD_STAT_SHORT = 1,
01620 CABD_STAT_OPEN = 2,
01621 CABD_STAT_FAIL = 3,
01622 };
01623
01624
01625
01626
01627 enum {
01628 PHY_M_FELP_LED2_MSK = 0xf<<8,
01629 PHY_M_FELP_LED1_MSK = 0xf<<4,
01630 PHY_M_FELP_LED0_MSK = 0xf,
01631 };
01632
01633 #define PHY_M_FELP_LED2_CTRL(x) (((x)<<8) & PHY_M_FELP_LED2_MSK)
01634 #define PHY_M_FELP_LED1_CTRL(x) (((x)<<4) & PHY_M_FELP_LED1_MSK)
01635 #define PHY_M_FELP_LED0_CTRL(x) (((x)<<0) & PHY_M_FELP_LED0_MSK)
01636
01637 enum {
01638 LED_PAR_CTRL_COLX = 0x00,
01639 LED_PAR_CTRL_ERROR = 0x01,
01640 LED_PAR_CTRL_DUPLEX = 0x02,
01641 LED_PAR_CTRL_DP_COL = 0x03,
01642 LED_PAR_CTRL_SPEED = 0x04,
01643 LED_PAR_CTRL_LINK = 0x05,
01644 LED_PAR_CTRL_TX = 0x06,
01645 LED_PAR_CTRL_RX = 0x07,
01646 LED_PAR_CTRL_ACT = 0x08,
01647 LED_PAR_CTRL_LNK_RX = 0x09,
01648 LED_PAR_CTRL_LNK_AC = 0x0a,
01649 LED_PAR_CTRL_ACT_BL = 0x0b,
01650 LED_PAR_CTRL_TX_BL = 0x0c,
01651 LED_PAR_CTRL_RX_BL = 0x0d,
01652 LED_PAR_CTRL_COL_BL = 0x0e,
01653 LED_PAR_CTRL_INACT = 0x0f
01654 };
01655
01656
01657 enum {
01658 PHY_M_FESC_DIS_WAIT = 1<<2,
01659 PHY_M_FESC_ENA_MCLK = 1<<1,
01660 PHY_M_FESC_SEL_CL_A = 1<<0,
01661 };
01662
01663
01664
01665 enum {
01666 PHY_M_LEDC_LOS_MSK = 0xf<<12,
01667 PHY_M_LEDC_INIT_MSK = 0xf<<8,
01668 PHY_M_LEDC_STA1_MSK = 0xf<<4,
01669 PHY_M_LEDC_STA0_MSK = 0xf,
01670 };
01671
01672 #define PHY_M_LEDC_LOS_CTRL(x) (((x)<<12) & PHY_M_LEDC_LOS_MSK)
01673 #define PHY_M_LEDC_INIT_CTRL(x) (((x)<<8) & PHY_M_LEDC_INIT_MSK)
01674 #define PHY_M_LEDC_STA1_CTRL(x) (((x)<<4) & PHY_M_LEDC_STA1_MSK)
01675 #define PHY_M_LEDC_STA0_CTRL(x) (((x)<<0) & PHY_M_LEDC_STA0_MSK)
01676
01677
01678
01679 enum {
01680 GM_GP_STAT = 0x0000,
01681 GM_GP_CTRL = 0x0004,
01682 GM_TX_CTRL = 0x0008,
01683 GM_RX_CTRL = 0x000c,
01684 GM_TX_FLOW_CTRL = 0x0010,
01685 GM_TX_PARAM = 0x0014,
01686 GM_SERIAL_MODE = 0x0018,
01687
01688 GM_SRC_ADDR_1L = 0x001c,
01689 GM_SRC_ADDR_1M = 0x0020,
01690 GM_SRC_ADDR_1H = 0x0024,
01691 GM_SRC_ADDR_2L = 0x0028,
01692 GM_SRC_ADDR_2M = 0x002c,
01693 GM_SRC_ADDR_2H = 0x0030,
01694
01695
01696 GM_MC_ADDR_H1 = 0x0034,
01697 GM_MC_ADDR_H2 = 0x0038,
01698 GM_MC_ADDR_H3 = 0x003c,
01699 GM_MC_ADDR_H4 = 0x0040,
01700
01701
01702 GM_TX_IRQ_SRC = 0x0044,
01703 GM_RX_IRQ_SRC = 0x0048,
01704 GM_TR_IRQ_SRC = 0x004c,
01705
01706
01707 GM_TX_IRQ_MSK = 0x0050,
01708 GM_RX_IRQ_MSK = 0x0054,
01709 GM_TR_IRQ_MSK = 0x0058,
01710
01711
01712 GM_SMI_CTRL = 0x0080,
01713 GM_SMI_DATA = 0x0084,
01714 GM_PHY_ADDR = 0x0088,
01715 };
01716
01717
01718 #define GM_MIB_CNT_BASE 0x0100
01719 #define GM_MIB_CNT_SIZE 44
01720
01721
01722
01723
01724
01725 enum {
01726 GM_RXF_UC_OK = GM_MIB_CNT_BASE + 0,
01727 GM_RXF_BC_OK = GM_MIB_CNT_BASE + 8,
01728 GM_RXF_MPAUSE = GM_MIB_CNT_BASE + 16,
01729 GM_RXF_MC_OK = GM_MIB_CNT_BASE + 24,
01730 GM_RXF_FCS_ERR = GM_MIB_CNT_BASE + 32,
01731
01732 GM_RXO_OK_LO = GM_MIB_CNT_BASE + 48,
01733 GM_RXO_OK_HI = GM_MIB_CNT_BASE + 56,
01734 GM_RXO_ERR_LO = GM_MIB_CNT_BASE + 64,
01735 GM_RXO_ERR_HI = GM_MIB_CNT_BASE + 72,
01736 GM_RXF_SHT = GM_MIB_CNT_BASE + 80,
01737 GM_RXE_FRAG = GM_MIB_CNT_BASE + 88,
01738 GM_RXF_64B = GM_MIB_CNT_BASE + 96,
01739 GM_RXF_127B = GM_MIB_CNT_BASE + 104,
01740 GM_RXF_255B = GM_MIB_CNT_BASE + 112,
01741 GM_RXF_511B = GM_MIB_CNT_BASE + 120,
01742 GM_RXF_1023B = GM_MIB_CNT_BASE + 128,
01743 GM_RXF_1518B = GM_MIB_CNT_BASE + 136,
01744 GM_RXF_MAX_SZ = GM_MIB_CNT_BASE + 144,
01745 GM_RXF_LNG_ERR = GM_MIB_CNT_BASE + 152,
01746 GM_RXF_JAB_PKT = GM_MIB_CNT_BASE + 160,
01747
01748 GM_RXE_FIFO_OV = GM_MIB_CNT_BASE + 176,
01749
01750 GM_TXF_UC_OK = GM_MIB_CNT_BASE + 192,
01751 GM_TXF_BC_OK = GM_MIB_CNT_BASE + 200,
01752 GM_TXF_MPAUSE = GM_MIB_CNT_BASE + 208,
01753 GM_TXF_MC_OK = GM_MIB_CNT_BASE + 216,
01754 GM_TXO_OK_LO = GM_MIB_CNT_BASE + 224,
01755 GM_TXO_OK_HI = GM_MIB_CNT_BASE + 232,
01756 GM_TXF_64B = GM_MIB_CNT_BASE + 240,
01757 GM_TXF_127B = GM_MIB_CNT_BASE + 248,
01758 GM_TXF_255B = GM_MIB_CNT_BASE + 256,
01759 GM_TXF_511B = GM_MIB_CNT_BASE + 264,
01760 GM_TXF_1023B = GM_MIB_CNT_BASE + 272,
01761 GM_TXF_1518B = GM_MIB_CNT_BASE + 280,
01762 GM_TXF_MAX_SZ = GM_MIB_CNT_BASE + 288,
01763
01764 GM_TXF_COL = GM_MIB_CNT_BASE + 304,
01765 GM_TXF_LAT_COL = GM_MIB_CNT_BASE + 312,
01766 GM_TXF_ABO_COL = GM_MIB_CNT_BASE + 320,
01767 GM_TXF_MUL_COL = GM_MIB_CNT_BASE + 328,
01768 GM_TXF_SNG_COL = GM_MIB_CNT_BASE + 336,
01769 GM_TXE_FIFO_UR = GM_MIB_CNT_BASE + 344,
01770 };
01771
01772
01773
01774 enum {
01775 GM_GPSR_SPEED = 1<<15,
01776 GM_GPSR_DUPLEX = 1<<14,
01777 GM_GPSR_FC_TX_DIS = 1<<13,
01778 GM_GPSR_LINK_UP = 1<<12,
01779 GM_GPSR_PAUSE = 1<<11,
01780 GM_GPSR_TX_ACTIVE = 1<<10,
01781 GM_GPSR_EXC_COL = 1<<9,
01782 GM_GPSR_LAT_COL = 1<<8,
01783
01784 GM_GPSR_PHY_ST_CH = 1<<5,
01785 GM_GPSR_GIG_SPEED = 1<<4,
01786 GM_GPSR_PART_MODE = 1<<3,
01787 GM_GPSR_FC_RX_DIS = 1<<2,
01788 GM_GPSR_PROM_EN = 1<<1,
01789 };
01790
01791
01792 enum {
01793 GM_GPCR_PROM_ENA = 1<<14,
01794 GM_GPCR_FC_TX_DIS = 1<<13,
01795 GM_GPCR_TX_ENA = 1<<12,
01796 GM_GPCR_RX_ENA = 1<<11,
01797 GM_GPCR_BURST_ENA = 1<<10,
01798 GM_GPCR_LOOP_ENA = 1<<9,
01799 GM_GPCR_PART_ENA = 1<<8,
01800 GM_GPCR_GIGS_ENA = 1<<7,
01801 GM_GPCR_FL_PASS = 1<<6,
01802 GM_GPCR_DUP_FULL = 1<<5,
01803 GM_GPCR_FC_RX_DIS = 1<<4,
01804 GM_GPCR_SPEED_100 = 1<<3,
01805 GM_GPCR_AU_DUP_DIS = 1<<2,
01806 GM_GPCR_AU_FCT_DIS = 1<<1,
01807 GM_GPCR_AU_SPD_DIS = 1<<0,
01808 };
01809
01810 #define GM_GPCR_SPEED_1000 (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
01811 #define GM_GPCR_AU_ALL_DIS (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS|GM_GPCR_AU_SPD_DIS)
01812
01813
01814 enum {
01815 GM_TXCR_FORCE_JAM = 1<<15,
01816 GM_TXCR_CRC_DIS = 1<<14,
01817 GM_TXCR_PAD_DIS = 1<<13,
01818 GM_TXCR_COL_THR_MSK = 7<<10,
01819 };
01820
01821 #define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK)
01822 #define TX_COL_DEF 0x04
01823
01824
01825 enum {
01826 GM_RXCR_UCF_ENA = 1<<15,
01827 GM_RXCR_MCF_ENA = 1<<14,
01828 GM_RXCR_CRC_DIS = 1<<13,
01829 GM_RXCR_PASS_FC = 1<<12,
01830 };
01831
01832
01833 enum {
01834 GM_TXPA_JAMLEN_MSK = 0x03<<14,
01835 GM_TXPA_JAMIPG_MSK = 0x1f<<9,
01836 GM_TXPA_JAMDAT_MSK = 0x1f<<4,
01837
01838 TX_JAM_LEN_DEF = 0x03,
01839 TX_JAM_IPG_DEF = 0x0b,
01840 TX_IPG_JAM_DEF = 0x1c,
01841 };
01842
01843 #define TX_JAM_LEN_VAL(x) (((x)<<14) & GM_TXPA_JAMLEN_MSK)
01844 #define TX_JAM_IPG_VAL(x) (((x)<<9) & GM_TXPA_JAMIPG_MSK)
01845 #define TX_IPG_JAM_DATA(x) (((x)<<4) & GM_TXPA_JAMDAT_MSK)
01846
01847
01848
01849 enum {
01850 GM_SMOD_DATABL_MSK = 0x1f<<11,
01851 GM_SMOD_LIMIT_4 = 1<<10,
01852 GM_SMOD_VLAN_ENA = 1<<9,
01853 GM_SMOD_JUMBO_ENA = 1<<8,
01854 GM_SMOD_IPG_MSK = 0x1f
01855 };
01856
01857 #define DATA_BLIND_VAL(x) (((x)<<11) & GM_SMOD_DATABL_MSK)
01858 #define DATA_BLIND_DEF 0x04
01859
01860 #define IPG_DATA_VAL(x) (x & GM_SMOD_IPG_MSK)
01861 #define IPG_DATA_DEF 0x1e
01862
01863
01864 enum {
01865 GM_SMI_CT_PHY_A_MSK = 0x1f<<11,
01866 GM_SMI_CT_REG_A_MSK = 0x1f<<6,
01867 GM_SMI_CT_OP_RD = 1<<5,
01868 GM_SMI_CT_RD_VAL = 1<<4,
01869 GM_SMI_CT_BUSY = 1<<3,
01870 };
01871
01872 #define GM_SMI_CT_PHY_AD(x) (((x)<<11) & GM_SMI_CT_PHY_A_MSK)
01873 #define GM_SMI_CT_REG_AD(x) (((x)<<6) & GM_SMI_CT_REG_A_MSK)
01874
01875
01876 enum {
01877 GM_PAR_MIB_CLR = 1<<5,
01878 GM_PAR_MIB_TST = 1<<4,
01879 };
01880
01881
01882 enum {
01883 GMR_FS_LEN = 0xffff<<16,
01884 GMR_FS_LEN_SHIFT = 16,
01885 GMR_FS_VLAN = 1<<13,
01886 GMR_FS_JABBER = 1<<12,
01887 GMR_FS_UN_SIZE = 1<<11,
01888 GMR_FS_MC = 1<<10,
01889 GMR_FS_BC = 1<<9,
01890 GMR_FS_RX_OK = 1<<8,
01891 GMR_FS_GOOD_FC = 1<<7,
01892 GMR_FS_BAD_FC = 1<<6,
01893 GMR_FS_MII_ERR = 1<<5,
01894 GMR_FS_LONG_ERR = 1<<4,
01895 GMR_FS_FRAGMENT = 1<<3,
01896
01897 GMR_FS_CRC_ERR = 1<<1,
01898 GMR_FS_RX_FF_OV = 1<<0,
01899
01900
01901
01902
01903 GMR_FS_ANY_ERR = GMR_FS_CRC_ERR | GMR_FS_LONG_ERR |
01904 GMR_FS_MII_ERR | GMR_FS_BAD_FC | GMR_FS_GOOD_FC |
01905 GMR_FS_JABBER,
01906
01907 RX_FF_FL_DEF_MSK = GMR_FS_CRC_ERR | GMR_FS_RX_FF_OV |GMR_FS_MII_ERR |
01908 GMR_FS_BAD_FC | GMR_FS_UN_SIZE | GMR_FS_JABBER,
01909 };
01910
01911
01912 enum {
01913 GMF_WP_TST_ON = 1<<14,
01914 GMF_WP_TST_OFF = 1<<13,
01915 GMF_WP_STEP = 1<<12,
01916
01917 GMF_RP_TST_ON = 1<<10,
01918 GMF_RP_TST_OFF = 1<<9,
01919 GMF_RP_STEP = 1<<8,
01920 GMF_RX_F_FL_ON = 1<<7,
01921 GMF_RX_F_FL_OFF = 1<<6,
01922 GMF_CLI_RX_FO = 1<<5,
01923 GMF_CLI_RX_FC = 1<<4,
01924 GMF_OPER_ON = 1<<3,
01925 GMF_OPER_OFF = 1<<2,
01926 GMF_RST_CLR = 1<<1,
01927 GMF_RST_SET = 1<<0,
01928
01929 RX_GMF_FL_THR_DEF = 0xa,
01930 };
01931
01932
01933
01934 enum {
01935 GMF_WSP_TST_ON = 1<<18,
01936 GMF_WSP_TST_OFF = 1<<17,
01937 GMF_WSP_STEP = 1<<16,
01938
01939 GMF_CLI_TX_FU = 1<<6,
01940 GMF_CLI_TX_FC = 1<<5,
01941 GMF_CLI_TX_PE = 1<<4,
01942 };
01943
01944
01945 enum {
01946 GMT_ST_START = 1<<2,
01947 GMT_ST_STOP = 1<<1,
01948 GMT_ST_CLR_IRQ = 1<<0,
01949 };
01950
01951
01952 enum {
01953 GMC_H_BURST_ON = 1<<7,
01954 GMC_H_BURST_OFF = 1<<6,
01955 GMC_F_LOOPB_ON = 1<<5,
01956 GMC_F_LOOPB_OFF = 1<<4,
01957 GMC_PAUSE_ON = 1<<3,
01958 GMC_PAUSE_OFF = 1<<2,
01959 GMC_RST_CLR = 1<<1,
01960 GMC_RST_SET = 1<<0,
01961 };
01962
01963
01964 enum {
01965 GPC_SEL_BDT = 1<<28,
01966 GPC_INT_POL_HI = 1<<27,
01967 GPC_75_OHM = 1<<26,
01968 GPC_DIS_FC = 1<<25,
01969 GPC_DIS_SLEEP = 1<<24,
01970 GPC_HWCFG_M_3 = 1<<23,
01971 GPC_HWCFG_M_2 = 1<<22,
01972 GPC_HWCFG_M_1 = 1<<21,
01973 GPC_HWCFG_M_0 = 1<<20,
01974 GPC_ANEG_0 = 1<<19,
01975 GPC_ENA_XC = 1<<18,
01976 GPC_DIS_125 = 1<<17,
01977 GPC_ANEG_3 = 1<<16,
01978 GPC_ANEG_2 = 1<<15,
01979 GPC_ANEG_1 = 1<<14,
01980 GPC_ENA_PAUSE = 1<<13,
01981 GPC_PHYADDR_4 = 1<<12,
01982 GPC_PHYADDR_3 = 1<<11,
01983 GPC_PHYADDR_2 = 1<<10,
01984 GPC_PHYADDR_1 = 1<<9,
01985 GPC_PHYADDR_0 = 1<<8,
01986
01987 GPC_RST_CLR = 1<<1,
01988 GPC_RST_SET = 1<<0,
01989 };
01990
01991 #define GPC_HWCFG_GMII_COP (GPC_HWCFG_M_3|GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
01992 #define GPC_HWCFG_GMII_FIB (GPC_HWCFG_M_2 | GPC_HWCFG_M_1 | GPC_HWCFG_M_0)
01993 #define GPC_ANEG_ADV_ALL_M (GPC_ANEG_3 | GPC_ANEG_2 | GPC_ANEG_1 | GPC_ANEG_0)
01994
01995
01996 #define GPC_FRC10MBIT_HALF 0
01997 #define GPC_FRC10MBIT_FULL GPC_ANEG_0
01998 #define GPC_FRC100MBIT_HALF GPC_ANEG_1
01999 #define GPC_FRC100MBIT_FULL (GPC_ANEG_0 | GPC_ANEG_1)
02000
02001
02002
02003 #define GPC_ADV_1000_HALF GPC_ANEG_2
02004 #define GPC_ADV_1000_FULL GPC_ANEG_3
02005 #define GPC_ADV_ALL (GPC_ANEG_2 | GPC_ANEG_3)
02006
02007
02008
02009 #define GPC_FORCE_MASTER 0
02010 #define GPC_FORCE_SLAVE GPC_ANEG_0
02011 #define GPC_PREF_MASTER GPC_ANEG_1
02012 #define GPC_PREF_SLAVE (GPC_ANEG_1 | GPC_ANEG_0)
02013
02014
02015
02016 enum {
02017 GM_IS_TX_CO_OV = 1<<5,
02018 GM_IS_RX_CO_OV = 1<<4,
02019 GM_IS_TX_FF_UR = 1<<3,
02020 GM_IS_TX_COMPL = 1<<2,
02021 GM_IS_RX_FF_OR = 1<<1,
02022 GM_IS_RX_COMPL = 1<<0,
02023
02024 #define GMAC_DEF_MSK (GM_IS_RX_FF_OR | GM_IS_TX_FF_UR)
02025
02026
02027
02028 GMLC_RST_CLR = 1<<1,
02029 GMLC_RST_SET = 1<<0,
02030
02031
02032
02033 WOL_CTL_LINK_CHG_OCC = 1<<15,
02034 WOL_CTL_MAGIC_PKT_OCC = 1<<14,
02035 WOL_CTL_PATTERN_OCC = 1<<13,
02036 WOL_CTL_CLEAR_RESULT = 1<<12,
02037 WOL_CTL_ENA_PME_ON_LINK_CHG = 1<<11,
02038 WOL_CTL_DIS_PME_ON_LINK_CHG = 1<<10,
02039 WOL_CTL_ENA_PME_ON_MAGIC_PKT = 1<<9,
02040 WOL_CTL_DIS_PME_ON_MAGIC_PKT = 1<<8,
02041 WOL_CTL_ENA_PME_ON_PATTERN = 1<<7,
02042 WOL_CTL_DIS_PME_ON_PATTERN = 1<<6,
02043 WOL_CTL_ENA_LINK_CHG_UNIT = 1<<5,
02044 WOL_CTL_DIS_LINK_CHG_UNIT = 1<<4,
02045 WOL_CTL_ENA_MAGIC_PKT_UNIT = 1<<3,
02046 WOL_CTL_DIS_MAGIC_PKT_UNIT = 1<<2,
02047 WOL_CTL_ENA_PATTERN_UNIT = 1<<1,
02048 WOL_CTL_DIS_PATTERN_UNIT = 1<<0,
02049 };
02050
02051 #define WOL_CTL_DEFAULT \
02052 (WOL_CTL_DIS_PME_ON_LINK_CHG | \
02053 WOL_CTL_DIS_PME_ON_PATTERN | \
02054 WOL_CTL_DIS_PME_ON_MAGIC_PKT | \
02055 WOL_CTL_DIS_LINK_CHG_UNIT | \
02056 WOL_CTL_DIS_PATTERN_UNIT | \
02057 WOL_CTL_DIS_MAGIC_PKT_UNIT)
02058
02059
02060 #define WOL_CTL_PATT_ENA(x) (1 << (x))
02061
02062
02063
02064 enum {
02065 XM_MMU_CMD = 0x0000,
02066 XM_POFF = 0x0008,
02067 XM_BURST = 0x000c,
02068 XM_1L_VLAN_TAG = 0x0010,
02069 XM_2L_VLAN_TAG = 0x0014,
02070 XM_TX_CMD = 0x0020,
02071 XM_TX_RT_LIM = 0x0024,
02072 XM_TX_STIME = 0x0028,
02073 XM_TX_IPG = 0x002c,
02074 XM_RX_CMD = 0x0030,
02075 XM_PHY_ADDR = 0x0034,
02076 XM_PHY_DATA = 0x0038,
02077 XM_GP_PORT = 0x0040,
02078 XM_IMSK = 0x0044,
02079 XM_ISRC = 0x0048,
02080 XM_HW_CFG = 0x004c,
02081 XM_TX_LO_WM = 0x0060,
02082 XM_TX_HI_WM = 0x0062,
02083 XM_TX_THR = 0x0064,
02084 XM_HT_THR = 0x0066,
02085 XM_PAUSE_DA = 0x0068,
02086 XM_CTL_PARA = 0x0070,
02087 XM_MAC_OPCODE = 0x0074,
02088 XM_MAC_PTIME = 0x0076,
02089 XM_TX_STAT = 0x0078,
02090
02091 XM_EXM_START = 0x0080,
02092 #define XM_EXM(reg) (XM_EXM_START + ((reg) << 3))
02093 };
02094
02095 enum {
02096 XM_SRC_CHK = 0x0100,
02097 XM_SA = 0x0108,
02098 XM_HSM = 0x0110,
02099 XM_RX_LO_WM = 0x0118,
02100 XM_RX_HI_WM = 0x011a,
02101 XM_RX_THR = 0x011c,
02102 XM_DEV_ID = 0x0120,
02103 XM_MODE = 0x0124,
02104 XM_LSA = 0x0128,
02105 XM_TS_READ = 0x0130,
02106 XM_TS_LOAD = 0x0134,
02107 XM_STAT_CMD = 0x0200,
02108 XM_RX_CNT_EV = 0x0204,
02109 XM_TX_CNT_EV = 0x0208,
02110 XM_RX_EV_MSK = 0x020c,
02111 XM_TX_EV_MSK = 0x0210,
02112 XM_TXF_OK = 0x0280,
02113 XM_TXO_OK_HI = 0x0284,
02114 XM_TXO_OK_LO = 0x0288,
02115 XM_TXF_BC_OK = 0x028c,
02116 XM_TXF_MC_OK = 0x0290,
02117 XM_TXF_UC_OK = 0x0294,
02118 XM_TXF_LONG = 0x0298,
02119 XM_TXE_BURST = 0x029c,
02120 XM_TXF_MPAUSE = 0x02a0,
02121 XM_TXF_MCTRL = 0x02a4,
02122 XM_TXF_SNG_COL = 0x02a8,
02123 XM_TXF_MUL_COL = 0x02ac,
02124 XM_TXF_ABO_COL = 0x02b0,
02125 XM_TXF_LAT_COL = 0x02b4,
02126 XM_TXF_DEF = 0x02b8,
02127 XM_TXF_EX_DEF = 0x02bc,
02128 XM_TXE_FIFO_UR = 0x02c0,
02129 XM_TXE_CS_ERR = 0x02c4,
02130 XM_TXP_UTIL = 0x02c8,
02131 XM_TXF_64B = 0x02d0,
02132 XM_TXF_127B = 0x02d4,
02133 XM_TXF_255B = 0x02d8,
02134 XM_TXF_511B = 0x02dc,
02135 XM_TXF_1023B = 0x02e0,
02136 XM_TXF_MAX_SZ = 0x02e4,
02137 XM_RXF_OK = 0x0300,
02138 XM_RXO_OK_HI = 0x0304,
02139 XM_RXO_OK_LO = 0x0308,
02140 XM_RXF_BC_OK = 0x030c,
02141 XM_RXF_MC_OK = 0x0310,
02142 XM_RXF_UC_OK = 0x0314,
02143 XM_RXF_MPAUSE = 0x0318,
02144 XM_RXF_MCTRL = 0x031c,
02145 XM_RXF_INV_MP = 0x0320,
02146 XM_RXF_INV_MOC = 0x0324,
02147 XM_RXE_BURST = 0x0328,
02148 XM_RXE_FMISS = 0x032c,
02149 XM_RXF_FRA_ERR = 0x0330,
02150 XM_RXE_FIFO_OV = 0x0334,
02151 XM_RXF_JAB_PKT = 0x0338,
02152 XM_RXE_CAR_ERR = 0x033c,
02153 XM_RXF_LEN_ERR = 0x0340,
02154 XM_RXE_SYM_ERR = 0x0344,
02155 XM_RXE_SHT_ERR = 0x0348,
02156 XM_RXE_RUNT = 0x034c,
02157 XM_RXF_LNG_ERR = 0x0350,
02158 XM_RXF_FCS_ERR = 0x0354,
02159 XM_RXF_CEX_ERR = 0x035c,
02160 XM_RXP_UTIL = 0x0360,
02161 XM_RXF_64B = 0x0368,
02162 XM_RXF_127B = 0x036c,
02163 XM_RXF_255B = 0x0370,
02164 XM_RXF_511B = 0x0374,
02165 XM_RXF_1023B = 0x0378,
02166 XM_RXF_MAX_SZ = 0x037c,
02167 };
02168
02169
02170 enum {
02171 XM_MMU_PHY_RDY = 1<<12,
02172 XM_MMU_PHY_BUSY = 1<<11,
02173 XM_MMU_IGN_PF = 1<<10,
02174 XM_MMU_MAC_LB = 1<<9,
02175 XM_MMU_FRC_COL = 1<<7,
02176 XM_MMU_SIM_COL = 1<<6,
02177 XM_MMU_NO_PRE = 1<<5,
02178 XM_MMU_GMII_FD = 1<<4,
02179 XM_MMU_RAT_CTRL = 1<<3,
02180 XM_MMU_GMII_LOOP= 1<<2,
02181 XM_MMU_ENA_RX = 1<<1,
02182 XM_MMU_ENA_TX = 1<<0,
02183 };
02184
02185
02186
02187 enum {
02188 XM_TX_BK2BK = 1<<6,
02189 XM_TX_ENC_BYP = 1<<5,
02190 XM_TX_SAM_LINE = 1<<4,
02191 XM_TX_NO_GIG_MD = 1<<3,
02192 XM_TX_NO_PRE = 1<<2,
02193 XM_TX_NO_CRC = 1<<1,
02194 XM_TX_AUTO_PAD = 1<<0,
02195 };
02196
02197
02198 #define XM_RT_LIM_MSK 0x1f
02199
02200
02201
02202 #define XM_STIME_MSK 0x7f
02203
02204
02205
02206 #define XM_IPG_MSK 0xff
02207
02208
02209
02210 enum {
02211 XM_RX_LENERR_OK = 1<<8,
02212
02213 XM_RX_BIG_PK_OK = 1<<7,
02214
02215 XM_RX_IPG_CAP = 1<<6,
02216 XM_RX_TP_MD = 1<<5,
02217 XM_RX_STRIP_FCS = 1<<4,
02218 XM_RX_SELF_RX = 1<<3,
02219 XM_RX_SAM_LINE = 1<<2,
02220 XM_RX_STRIP_PAD = 1<<1,
02221 XM_RX_DIS_CEXT = 1<<0,
02222 };
02223
02224
02225
02226 enum {
02227 XM_GP_ANIP = 1<<6,
02228 XM_GP_FRC_INT = 1<<5,
02229 XM_GP_RES_MAC = 1<<3,
02230 XM_GP_RES_STAT = 1<<2,
02231 XM_GP_INP_ASS = 1<<0,
02232 };
02233
02234
02235
02236
02237 enum {
02238 XM_IS_LNK_AE = 1<<14,
02239 XM_IS_TX_ABORT = 1<<13,
02240 XM_IS_FRC_INT = 1<<12,
02241 XM_IS_INP_ASS = 1<<11,
02242 XM_IS_LIPA_RC = 1<<10,
02243 XM_IS_RX_PAGE = 1<<9,
02244 XM_IS_TX_PAGE = 1<<8,
02245 XM_IS_AND = 1<<7,
02246 XM_IS_TSC_OV = 1<<6,
02247 XM_IS_RXC_OV = 1<<5,
02248 XM_IS_TXC_OV = 1<<4,
02249 XM_IS_RXF_OV = 1<<3,
02250 XM_IS_TXF_UR = 1<<2,
02251 XM_IS_TX_COMP = 1<<1,
02252 XM_IS_RX_COMP = 1<<0,
02253
02254 XM_IMSK_DISABLE = 0xffff,
02255 };
02256
02257
02258 enum {
02259 XM_HW_GEN_EOP = 1<<3,
02260 XM_HW_COM4SIG = 1<<2,
02261 XM_HW_GMII_MD = 1<<0,
02262 };
02263
02264
02265
02266
02267 #define XM_TX_WM_MSK 0x01ff
02268
02269
02270
02271
02272 #define XM_THR_MSK 0x03ff
02273
02274
02275
02276 enum {
02277 XM_ST_VALID = (1UL<<31),
02278 XM_ST_BYTE_CNT = (0x3fffL<<17),
02279 XM_ST_RETRY_CNT = (0x1fL<<12),
02280 XM_ST_EX_COL = 1<<11,
02281 XM_ST_EX_DEF = 1<<10,
02282 XM_ST_BURST = 1<<9,
02283 XM_ST_DEFER = 1<<8,
02284 XM_ST_BC = 1<<7,
02285 XM_ST_MC = 1<<6,
02286 XM_ST_UC = 1<<5,
02287 XM_ST_TX_UR = 1<<4,
02288 XM_ST_CS_ERR = 1<<3,
02289 XM_ST_LAT_COL = 1<<2,
02290 XM_ST_MUL_COL = 1<<1,
02291 XM_ST_SGN_COL = 1<<0,
02292 };
02293
02294
02295
02296 #define XM_RX_WM_MSK 0x03ff
02297
02298
02299
02300 #define XM_DEV_OUI (0x00ffffffUL<<8)
02301 #define XM_DEV_REV (0x07L << 5)
02302
02303
02304
02305 enum {
02306 XM_MD_ENA_REJ = 1<<26,
02307 XM_MD_SPOE_E = 1<<25,
02308
02309 XM_MD_TX_REP = 1<<24,
02310 XM_MD_SPOFF_I = 1<<23,
02311
02312 XM_MD_LE_STW = 1<<22,
02313 XM_MD_TX_CONT = 1<<21,
02314 XM_MD_TX_PAUSE = 1<<20,
02315 XM_MD_ATS = 1<<19,
02316 XM_MD_SPOL_I = 1<<18,
02317
02318 XM_MD_SPOH_I = 1<<17,
02319
02320 XM_MD_CAP = 1<<16,
02321 XM_MD_ENA_HASH = 1<<15,
02322 XM_MD_CSA = 1<<14,
02323 XM_MD_CAA = 1<<13,
02324 XM_MD_RX_MCTRL = 1<<12,
02325 XM_MD_RX_RUNT = 1<<11,
02326 XM_MD_RX_IRLE = 1<<10,
02327 XM_MD_RX_LONG = 1<<9,
02328 XM_MD_RX_CRCE = 1<<8,
02329 XM_MD_RX_ERR = 1<<7,
02330 XM_MD_DIS_UC = 1<<6,
02331 XM_MD_DIS_MC = 1<<5,
02332 XM_MD_DIS_BC = 1<<4,
02333 XM_MD_ENA_PROM = 1<<3,
02334 XM_MD_ENA_BE = 1<<2,
02335 XM_MD_FTF = 1<<1,
02336 XM_MD_FRF = 1<<0,
02337 };
02338
02339 #define XM_PAUSE_MODE (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
02340 #define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
02341 XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA)
02342
02343
02344 enum {
02345 XM_SC_SNP_RXC = 1<<5,
02346 XM_SC_SNP_TXC = 1<<4,
02347 XM_SC_CP_RXC = 1<<3,
02348 XM_SC_CP_TXC = 1<<2,
02349 XM_SC_CLR_RXC = 1<<1,
02350 XM_SC_CLR_TXC = 1<<0,
02351 };
02352
02353
02354
02355
02356 enum {
02357 XMR_MAX_SZ_OV = 1<<31,
02358 XMR_1023B_OV = 1<<30,
02359 XMR_511B_OV = 1<<29,
02360 XMR_255B_OV = 1<<28,
02361 XMR_127B_OV = 1<<27,
02362 XMR_64B_OV = 1<<26,
02363 XMR_UTIL_OV = 1<<25,
02364 XMR_UTIL_UR = 1<<24,
02365 XMR_CEX_ERR_OV = 1<<23,
02366 XMR_FCS_ERR_OV = 1<<21,
02367 XMR_LNG_ERR_OV = 1<<20,
02368 XMR_RUNT_OV = 1<<19,
02369 XMR_SHT_ERR_OV = 1<<18,
02370 XMR_SYM_ERR_OV = 1<<17,
02371 XMR_CAR_ERR_OV = 1<<15,
02372 XMR_JAB_PKT_OV = 1<<14,
02373 XMR_FIFO_OV = 1<<13,
02374 XMR_FRA_ERR_OV = 1<<12,
02375 XMR_FMISS_OV = 1<<11,
02376 XMR_BURST = 1<<10,
02377 XMR_INV_MOC = 1<<9,
02378 XMR_INV_MP = 1<<8,
02379 XMR_MCTRL_OV = 1<<7,
02380 XMR_MPAUSE_OV = 1<<6,
02381 XMR_UC_OK_OV = 1<<5,
02382 XMR_MC_OK_OV = 1<<4,
02383 XMR_BC_OK_OV = 1<<3,
02384 XMR_OK_LO_OV = 1<<2,
02385 XMR_OK_HI_OV = 1<<1,
02386 XMR_OK_OV = 1<<0,
02387 };
02388
02389 #define XMR_DEF_MSK (XMR_OK_LO_OV | XMR_OK_HI_OV)
02390
02391
02392
02393 enum {
02394 XMT_MAX_SZ_OV = 1<<25,
02395 XMT_1023B_OV = 1<<24,
02396 XMT_511B_OV = 1<<23,
02397 XMT_255B_OV = 1<<22,
02398 XMT_127B_OV = 1<<21,
02399 XMT_64B_OV = 1<<20,
02400 XMT_UTIL_OV = 1<<19,
02401 XMT_UTIL_UR = 1<<18,
02402 XMT_CS_ERR_OV = 1<<17,
02403 XMT_FIFO_UR_OV = 1<<16,
02404 XMT_EX_DEF_OV = 1<<15,
02405 XMT_DEF = 1<<14,
02406 XMT_LAT_COL_OV = 1<<13,
02407 XMT_ABO_COL_OV = 1<<12,
02408 XMT_MUL_COL_OV = 1<<11,
02409 XMT_SNG_COL = 1<<10,
02410 XMT_MCTRL_OV = 1<<9,
02411 XMT_MPAUSE = 1<<8,
02412 XMT_BURST = 1<<7,
02413 XMT_LONG = 1<<6,
02414 XMT_UC_OK_OV = 1<<5,
02415 XMT_MC_OK_OV = 1<<4,
02416 XMT_BC_OK_OV = 1<<3,
02417 XMT_OK_LO_OV = 1<<2,
02418 XMT_OK_HI_OV = 1<<1,
02419 XMT_OK_OV = 1<<0,
02420 };
02421
02422
02423 #define XMT_DEF_MSK (XMT_OK_LO_OV | XMT_OK_HI_OV)
02424
02425 struct skge_rx_desc {
02426 u32 control;
02427 u32 next_offset;
02428 u32 dma_lo;
02429 u32 dma_hi;
02430 u32 status;
02431 u32 timestamp;
02432 u16 csum2;
02433 u16 csum1;
02434 u16 csum2_start;
02435 u16 csum1_start;
02436 };
02437
02438 struct skge_tx_desc {
02439 u32 control;
02440 u32 next_offset;
02441 u32 dma_lo;
02442 u32 dma_hi;
02443 u32 status;
02444 u32 csum_offs;
02445 u16 csum_write;
02446 u16 csum_start;
02447 u32 rsvd;
02448 };
02449
02450 struct skge_element {
02451 struct skge_element *next;
02452 void *desc;
02453 struct io_buffer *iob;
02454 };
02455
02456 struct skge_ring {
02457 struct skge_element *to_clean;
02458 struct skge_element *to_use;
02459 struct skge_element *start;
02460 };
02461
02462
02463 struct skge_hw {
02464 u32 regs;
02465 struct pci_device *pdev;
02466 u32 intr_mask;
02467 struct net_device *dev[2];
02468
02469 u8 chip_id;
02470 u8 chip_rev;
02471 u8 copper;
02472 u8 ports;
02473 u8 phy_type;
02474
02475 u32 ram_size;
02476 u32 ram_offset;
02477 u16 phy_addr;
02478 };
02479
02480 enum pause_control {
02481 FLOW_MODE_NONE = 1,
02482 FLOW_MODE_LOC_SEND = 2,
02483 FLOW_MODE_SYMMETRIC = 3,
02484 FLOW_MODE_SYM_OR_REM = 4,
02485
02486
02487 };
02488
02489 enum pause_status {
02490 FLOW_STAT_INDETERMINATED=0,
02491 FLOW_STAT_NONE,
02492 FLOW_STAT_REM_SEND,
02493 FLOW_STAT_LOC_SEND,
02494 FLOW_STAT_SYMMETRIC,
02495 };
02496
02497
02498 struct skge_port {
02499 struct skge_hw *hw;
02500 struct net_device *netdev;
02501 int port;
02502
02503 struct skge_ring tx_ring;
02504 struct skge_ring rx_ring;
02505
02506 enum pause_control flow_control;
02507 enum pause_status flow_status;
02508 u8 autoneg;
02509 u8 duplex;
02510 u16 speed;
02511 u32 advertising;
02512
02513 void *mem;
02514 u32 dma;
02515 int use_xm_link_timer;
02516 };
02517
02518
02519
02520 static inline u32 skge_read32(const struct skge_hw *hw, int reg)
02521 {
02522 return readl(hw->regs + reg);
02523 }
02524
02525 static inline u16 skge_read16(const struct skge_hw *hw, int reg)
02526 {
02527 return readw(hw->regs + reg);
02528 }
02529
02530 static inline u8 skge_read8(const struct skge_hw *hw, int reg)
02531 {
02532 return readb(hw->regs + reg);
02533 }
02534
02535 static inline void skge_write32(const struct skge_hw *hw, int reg, u32 val)
02536 {
02537 writel(val, hw->regs + reg);
02538 }
02539
02540 static inline void skge_write16(const struct skge_hw *hw, int reg, u16 val)
02541 {
02542 writew(val, hw->regs + reg);
02543 }
02544
02545 static inline void skge_write8(const struct skge_hw *hw, int reg, u8 val)
02546 {
02547 writeb(val, hw->regs + reg);
02548 }
02549
02550
02551 #define SK_REG(port,reg) (((port)<<7)+(u16)(reg))
02552 #define SK_XMAC_REG(port, reg) \
02553 ((BASE_XMAC_1 + (port) * (BASE_XMAC_2 - BASE_XMAC_1)) | (reg) << 1)
02554
02555 static inline u32 xm_read32(const struct skge_hw *hw, int port, int reg)
02556 {
02557 u32 v;
02558 v = skge_read16(hw, SK_XMAC_REG(port, reg));
02559 v |= (u32)skge_read16(hw, SK_XMAC_REG(port, reg+2)) << 16;
02560 return v;
02561 }
02562
02563 static inline u16 xm_read16(const struct skge_hw *hw, int port, int reg)
02564 {
02565 return skge_read16(hw, SK_XMAC_REG(port,reg));
02566 }
02567
02568 static inline void xm_write32(const struct skge_hw *hw, int port, int r, u32 v)
02569 {
02570 skge_write16(hw, SK_XMAC_REG(port,r), v & 0xffff);
02571 skge_write16(hw, SK_XMAC_REG(port,r+2), v >> 16);
02572 }
02573
02574 static inline void xm_write16(const struct skge_hw *hw, int port, int r, u16 v)
02575 {
02576 skge_write16(hw, SK_XMAC_REG(port,r), v);
02577 }
02578
02579 static inline void xm_outhash(const struct skge_hw *hw, int port, int reg,
02580 const u8 *hash)
02581 {
02582 xm_write16(hw, port, reg, (u16)hash[0] | ((u16)hash[1] << 8));
02583 xm_write16(hw, port, reg+2, (u16)hash[2] | ((u16)hash[3] << 8));
02584 xm_write16(hw, port, reg+4, (u16)hash[4] | ((u16)hash[5] << 8));
02585 xm_write16(hw, port, reg+6, (u16)hash[6] | ((u16)hash[7] << 8));
02586 }
02587
02588 static inline void xm_outaddr(const struct skge_hw *hw, int port, int reg,
02589 const u8 *addr)
02590 {
02591 xm_write16(hw, port, reg, (u16)addr[0] | ((u16)addr[1] << 8));
02592 xm_write16(hw, port, reg+2, (u16)addr[2] | ((u16)addr[3] << 8));
02593 xm_write16(hw, port, reg+4, (u16)addr[4] | ((u16)addr[5] << 8));
02594 }
02595
02596 #define SK_GMAC_REG(port,reg) \
02597 (BASE_GMAC_1 + (port) * (BASE_GMAC_2-BASE_GMAC_1) + (reg))
02598
02599 static inline u16 gma_read16(const struct skge_hw *hw, int port, int reg)
02600 {
02601 return skge_read16(hw, SK_GMAC_REG(port,reg));
02602 }
02603
02604 static inline u32 gma_read32(const struct skge_hw *hw, int port, int reg)
02605 {
02606 return (u32) skge_read16(hw, SK_GMAC_REG(port,reg))
02607 | ((u32)skge_read16(hw, SK_GMAC_REG(port,reg+4)) << 16);
02608 }
02609
02610 static inline void gma_write16(const struct skge_hw *hw, int port, int r, u16 v)
02611 {
02612 skge_write16(hw, SK_GMAC_REG(port,r), v);
02613 }
02614
02615 static inline void gma_set_addr(struct skge_hw *hw, int port, int reg,
02616 const u8 *addr)
02617 {
02618 gma_write16(hw, port, reg, (u16) addr[0] | ((u16) addr[1] << 8));
02619 gma_write16(hw, port, reg+4,(u16) addr[2] | ((u16) addr[3] << 8));
02620 gma_write16(hw, port, reg+8,(u16) addr[4] | ((u16) addr[5] << 8));
02621 }
02622
02623 #endif