forked from luck/tmp_suning_uos_patched
Merge upstream net/ieee80211.h changes into 'ieee80211' branch.
This commit is contained in:
commit
245ac8738b
1704
drivers/net/skge.c
1704
drivers/net/skge.c
File diff suppressed because it is too large
Load Diff
@ -7,31 +7,6 @@
|
||||
/* PCI config registers */
|
||||
#define PCI_DEV_REG1 0x40
|
||||
#define PCI_DEV_REG2 0x44
|
||||
#ifndef PCI_VPD
|
||||
#define PCI_VPD 0x50
|
||||
#endif
|
||||
|
||||
/* PCI_OUR_REG_2 32 bit Our Register 2 */
|
||||
enum {
|
||||
PCI_VPD_WR_THR = 0xff<<24, /* Bit 31..24: VPD Write Threshold */
|
||||
PCI_DEV_SEL = 0x7f<<17, /* Bit 23..17: EEPROM Device Select */
|
||||
PCI_VPD_ROM_SZ = 7 <<14, /* Bit 16..14: VPD ROM Size */
|
||||
/* Bit 13..12: reserved */
|
||||
PCI_EN_DUMMY_RD = 1<<3, /* Enable Dummy Read */
|
||||
PCI_REV_DESC = 1<<2, /* Reverse Desc. Bytes */
|
||||
PCI_USEDATA64 = 1<<0, /* Use 64Bit Data bus ext */
|
||||
};
|
||||
|
||||
/* PCI_VPD_ADR_REG 16 bit VPD Address Register */
|
||||
enum {
|
||||
PCI_VPD_FLAG = 1<<15, /* starts VPD rd/wr cycle */
|
||||
PCI_VPD_ADR_MSK =0x7fffL, /* Bit 14.. 0: VPD Address Mask */
|
||||
VPD_RES_ID = 0x82,
|
||||
VPD_RES_READ = 0x90,
|
||||
VPD_RES_WRITE = 0x81,
|
||||
VPD_RES_END = 0x78,
|
||||
};
|
||||
|
||||
|
||||
#define PCI_STATUS_ERROR_BITS (PCI_STATUS_DETECTED_PARITY | \
|
||||
PCI_STATUS_SIG_SYSTEM_ERROR | \
|
||||
@ -39,7 +14,6 @@ enum {
|
||||
PCI_STATUS_REC_TARGET_ABORT | \
|
||||
PCI_STATUS_PARITY)
|
||||
|
||||
|
||||
enum csr_regs {
|
||||
B0_RAP = 0x0000,
|
||||
B0_CTST = 0x0004,
|
||||
@ -229,8 +203,11 @@ enum {
|
||||
IS_XA2_F = 1<<1, /* Q_XA2 End of Frame */
|
||||
IS_XA2_C = 1<<0, /* Q_XA2 Encoding Error */
|
||||
|
||||
IS_PORT_1 = IS_XA1_F| IS_R1_F| IS_MAC1,
|
||||
IS_PORT_2 = IS_XA2_F| IS_R2_F| IS_MAC2,
|
||||
IS_TO_PORT1 = IS_PA_TO_RX1 | IS_PA_TO_TX1,
|
||||
IS_TO_PORT2 = IS_PA_TO_RX2 | IS_PA_TO_TX2,
|
||||
|
||||
IS_PORT_1 = IS_XA1_F| IS_R1_F | IS_TO_PORT1 | IS_MAC1,
|
||||
IS_PORT_2 = IS_XA2_F| IS_R2_F | IS_TO_PORT2 | IS_MAC2,
|
||||
};
|
||||
|
||||
|
||||
@ -288,14 +265,6 @@ enum {
|
||||
CHIP_REV_YU_LITE_A3 = 7, /* Chip Rev. for YUKON-Lite A3 */
|
||||
};
|
||||
|
||||
/* B2_LD_TEST 8 bit EPROM loader test register */
|
||||
enum {
|
||||
LD_T_ON = 1<<3, /* Loader Test mode on */
|
||||
LD_T_OFF = 1<<2, /* Loader Test mode off */
|
||||
LD_T_STEP = 1<<1, /* Decrement FPROM addr. Counter */
|
||||
LD_START = 1<<0, /* Start loading FPROM */
|
||||
};
|
||||
|
||||
/* B2_TI_CTRL 8 bit Timer control */
|
||||
/* B2_IRQM_CTRL 8 bit IRQ Moderation Timer Control */
|
||||
enum {
|
||||
@ -313,16 +282,6 @@ enum {
|
||||
TIM_T_STEP = 1<<0, /* Test step */
|
||||
};
|
||||
|
||||
/* B28_DPT_INI 32 bit Descriptor Poll Timer Init Val */
|
||||
/* B28_DPT_VAL 32 bit Descriptor Poll Timer Curr Val */
|
||||
/* B28_DPT_CTRL 8 bit Descriptor Poll Timer Ctrl Reg */
|
||||
enum {
|
||||
DPT_MSK = 0x00ffffffL, /* Bit 23.. 0: Desc Poll Timer Bits */
|
||||
|
||||
DPT_START = 1<<1, /* Start Descriptor Poll Timer */
|
||||
DPT_STOP = 1<<0, /* Stop Descriptor Poll Timer */
|
||||
};
|
||||
|
||||
/* B2_GP_IO 32 bit General Purpose I/O Register */
|
||||
enum {
|
||||
GP_DIR_9 = 1<<25, /* IO_9 direct, 0=In/1=Out */
|
||||
@ -348,30 +307,6 @@ enum {
|
||||
GP_IO_0 = 1<<0, /* IO_0 pin */
|
||||
};
|
||||
|
||||
/* Rx/Tx Path related Arbiter Test Registers */
|
||||
/* B3_MA_TO_TEST 16 bit MAC Arbiter Timeout Test Reg */
|
||||
/* B3_MA_RC_TEST 16 bit MAC Arbiter Recovery Test Reg */
|
||||
/* B3_PA_TEST 16 bit Packet Arbiter Test Register */
|
||||
/* Bit 15, 11, 7, and 3 are reserved in B3_PA_TEST */
|
||||
enum {
|
||||
TX2_T_EV = 1<<15,/* TX2 Timeout/Recv Event occured */
|
||||
TX2_T_ON = 1<<14,/* TX2 Timeout/Recv Timer Test On */
|
||||
TX2_T_OFF = 1<<13,/* TX2 Timeout/Recv Timer Tst Off */
|
||||
TX2_T_STEP = 1<<12,/* TX2 Timeout/Recv Timer Step */
|
||||
TX1_T_EV = 1<<11,/* TX1 Timeout/Recv Event occured */
|
||||
TX1_T_ON = 1<<10,/* TX1 Timeout/Recv Timer Test On */
|
||||
TX1_T_OFF = 1<<9, /* TX1 Timeout/Recv Timer Tst Off */
|
||||
TX1_T_STEP = 1<<8, /* TX1 Timeout/Recv Timer Step */
|
||||
RX2_T_EV = 1<<7, /* RX2 Timeout/Recv Event occured */
|
||||
RX2_T_ON = 1<<6, /* RX2 Timeout/Recv Timer Test On */
|
||||
RX2_T_OFF = 1<<5, /* RX2 Timeout/Recv Timer Tst Off */
|
||||
RX2_T_STEP = 1<<4, /* RX2 Timeout/Recv Timer Step */
|
||||
RX1_T_EV = 1<<3, /* RX1 Timeout/Recv Event occured */
|
||||
RX1_T_ON = 1<<2, /* RX1 Timeout/Recv Timer Test On */
|
||||
RX1_T_OFF = 1<<1, /* RX1 Timeout/Recv Timer Tst Off */
|
||||
RX1_T_STEP = 1<<0, /* RX1 Timeout/Recv Timer Step */
|
||||
};
|
||||
|
||||
/* Descriptor Bit Definition */
|
||||
/* TxCtrl Transmit Buffer Control Field */
|
||||
/* RxCtrl Receive Buffer Control Field */
|
||||
@ -428,14 +363,6 @@ enum {
|
||||
RI_RST_SET = 1<<0, /* Set RAM Interface Reset */
|
||||
};
|
||||
|
||||
/* B3_RI_TEST 8 bit RAM Iface Test Register */
|
||||
enum {
|
||||
RI_T_EV = 1<<3, /* Timeout Event occured */
|
||||
RI_T_ON = 1<<2, /* Timeout Timer Test On */
|
||||
RI_T_OFF = 1<<1, /* Timeout Timer Test Off */
|
||||
RI_T_STEP = 1<<0, /* Timeout Timer Step */
|
||||
};
|
||||
|
||||
/* MAC Arbiter Registers */
|
||||
/* B3_MA_TO_CTRL 16 bit MAC Arbiter Timeout Ctrl Reg */
|
||||
enum {
|
||||
@ -452,19 +379,6 @@ enum {
|
||||
#define SK_PKT_TO_MAX 0xffff /* Maximum value */
|
||||
#define SK_RI_TO_53 36 /* RAM interface timeout */
|
||||
|
||||
|
||||
/* B3_MA_RC_CTRL 16 bit MAC Arbiter Recovery Ctrl Reg */
|
||||
enum {
|
||||
MA_ENA_REC_TX2 = 1<<7, /* Enable Recovery Timer TX2 */
|
||||
MA_DIS_REC_TX2 = 1<<6, /* Disable Recovery Timer TX2 */
|
||||
MA_ENA_REC_TX1 = 1<<5, /* Enable Recovery Timer TX1 */
|
||||
MA_DIS_REC_TX1 = 1<<4, /* Disable Recovery Timer TX1 */
|
||||
MA_ENA_REC_RX2 = 1<<3, /* Enable Recovery Timer RX2 */
|
||||
MA_DIS_REC_RX2 = 1<<2, /* Disable Recovery Timer RX2 */
|
||||
MA_ENA_REC_RX1 = 1<<1, /* Enable Recovery Timer RX1 */
|
||||
MA_DIS_REC_RX1 = 1<<0, /* Disable Recovery Timer RX1 */
|
||||
};
|
||||
|
||||
/* Packet Arbiter Registers */
|
||||
/* B3_PA_CTRL 16 bit Packet Arbiter Ctrl Register */
|
||||
enum {
|
||||
@ -488,7 +402,7 @@ enum {
|
||||
PA_ENA_TO_TX1 | PA_ENA_TO_TX2)
|
||||
|
||||
|
||||
/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
|
||||
/* Transmit Arbiter Registers MAC 1 and 2, use SK_REG() to access */
|
||||
/* TXA_ITI_INI 32 bit Tx Arb Interval Timer Init Val */
|
||||
/* TXA_ITI_VAL 32 bit Tx Arb Interval Timer Value */
|
||||
/* TXA_LIM_INI 32 bit Tx Arb Limit Counter Init Val */
|
||||
@ -511,7 +425,7 @@ enum {
|
||||
/*
|
||||
* Bank 4 - 5
|
||||
*/
|
||||
/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
|
||||
/* Transmit Arbiter Registers MAC 1 and 2, use SK_REG() to access */
|
||||
enum {
|
||||
TXA_ITI_INI = 0x0200,/* 32 bit Tx Arb Interval Timer Init Val*/
|
||||
TXA_ITI_VAL = 0x0204,/* 32 bit Tx Arb Interval Timer Value */
|
||||
@ -537,7 +451,7 @@ enum {
|
||||
|
||||
/* Queue Register Offsets, use Q_ADDR() to access */
|
||||
enum {
|
||||
B8_Q_REGS = 0x0400, /* base of Queue registers */
|
||||
B8_Q_REGS = 0x0400, /* base of Queue registers */
|
||||
Q_D = 0x00, /* 8*32 bit Current Descriptor */
|
||||
Q_DA_L = 0x20, /* 32 bit Current Descriptor Address Low dWord */
|
||||
Q_DA_H = 0x24, /* 32 bit Current Descriptor Address High dWord */
|
||||
@ -618,8 +532,7 @@ enum {
|
||||
enum {
|
||||
PHY_ADDR_XMAC = 0<<8,
|
||||
PHY_ADDR_BCOM = 1<<8,
|
||||
PHY_ADDR_LONE = 3<<8,
|
||||
PHY_ADDR_NAT = 0<<8,
|
||||
|
||||
/* GPHY address (bits 15..11 of SMI control reg) */
|
||||
PHY_ADDR_MARV = 0,
|
||||
};
|
||||
@ -986,7 +899,7 @@ enum {
|
||||
LINKLED_BLINK_OFF = 0x10,
|
||||
LINKLED_BLINK_ON = 0x20,
|
||||
};
|
||||
|
||||
|
||||
/* GMAC and GPHY Control Registers (YUKON only) */
|
||||
enum {
|
||||
GMAC_CTRL = 0x0f00,/* 32 bit GMAC Control Reg */
|
||||
@ -1151,54 +1064,6 @@ enum {
|
||||
PHY_MARV_FE_SPEC_2 = 0x1c,/* 16 bit r/w Specific Control Reg. 2 */
|
||||
};
|
||||
|
||||
/* Level One-PHY Registers, indirect addressed over XMAC */
|
||||
enum {
|
||||
PHY_LONE_CTRL = 0x00,/* 16 bit r/w PHY Control Register */
|
||||
PHY_LONE_STAT = 0x01,/* 16 bit r/o PHY Status Register */
|
||||
PHY_LONE_ID0 = 0x02,/* 16 bit r/o PHY ID0 Register */
|
||||
PHY_LONE_ID1 = 0x03,/* 16 bit r/o PHY ID1 Register */
|
||||
PHY_LONE_AUNE_ADV = 0x04,/* 16 bit r/w Auto-Neg. Advertisement */
|
||||
PHY_LONE_AUNE_LP = 0x05,/* 16 bit r/o Link Part Ability Reg */
|
||||
PHY_LONE_AUNE_EXP = 0x06,/* 16 bit r/o Auto-Neg. Expansion Reg */
|
||||
PHY_LONE_NEPG = 0x07,/* 16 bit r/w Next Page Register */
|
||||
PHY_LONE_NEPG_LP = 0x08,/* 16 bit r/o Next Page Link Partner */
|
||||
/* Level One-specific registers */
|
||||
PHY_LONE_1000T_CTRL = 0x09,/* 16 bit r/w 1000Base-T Control Reg */
|
||||
PHY_LONE_1000T_STAT = 0x0a,/* 16 bit r/o 1000Base-T Status Reg */
|
||||
PHY_LONE_EXT_STAT = 0x0f,/* 16 bit r/o Extended Status Reg */
|
||||
PHY_LONE_PORT_CFG = 0x10,/* 16 bit r/w Port Configuration Reg*/
|
||||
PHY_LONE_Q_STAT = 0x11,/* 16 bit r/o Quick Status Reg */
|
||||
PHY_LONE_INT_ENAB = 0x12,/* 16 bit r/w Interrupt Enable Reg */
|
||||
PHY_LONE_INT_STAT = 0x13,/* 16 bit r/o Interrupt Status Reg */
|
||||
PHY_LONE_LED_CFG = 0x14,/* 16 bit r/w LED Configuration Reg */
|
||||
PHY_LONE_PORT_CTRL = 0x15,/* 16 bit r/w Port Control Reg */
|
||||
PHY_LONE_CIM = 0x16,/* 16 bit r/o CIM Reg */
|
||||
};
|
||||
|
||||
/* National-PHY Registers, indirect addressed over XMAC */
|
||||
enum {
|
||||
PHY_NAT_CTRL = 0x00,/* 16 bit r/w PHY Control Register */
|
||||
PHY_NAT_STAT = 0x01,/* 16 bit r/w PHY Status Register */
|
||||
PHY_NAT_ID0 = 0x02,/* 16 bit r/o PHY ID0 Register */
|
||||
PHY_NAT_ID1 = 0x03,/* 16 bit r/o PHY ID1 Register */
|
||||
PHY_NAT_AUNE_ADV = 0x04,/* 16 bit r/w Auto-Neg. Advertisement */
|
||||
PHY_NAT_AUNE_LP = 0x05,/* 16 bit r/o Link Partner Ability Reg */
|
||||
PHY_NAT_AUNE_EXP = 0x06,/* 16 bit r/o Auto-Neg. Expansion Reg */
|
||||
PHY_NAT_NEPG = 0x07,/* 16 bit r/w Next Page Register */
|
||||
PHY_NAT_NEPG_LP = 0x08,/* 16 bit r/o Next Page Link Partner Reg */
|
||||
/* National-specific registers */
|
||||
PHY_NAT_1000T_CTRL = 0x09,/* 16 bit r/w 1000Base-T Control Reg */
|
||||
PHY_NAT_1000T_STAT = 0x0a,/* 16 bit r/o 1000Base-T Status Reg */
|
||||
PHY_NAT_EXT_STAT = 0x0f,/* 16 bit r/o Extended Status Register */
|
||||
PHY_NAT_EXT_CTRL1 = 0x10,/* 16 bit r/o Extended Control Reg1 */
|
||||
PHY_NAT_Q_STAT1 = 0x11,/* 16 bit r/o Quick Status Reg1 */
|
||||
PHY_NAT_10B_OP = 0x12,/* 16 bit r/o 10Base-T Operations Reg */
|
||||
PHY_NAT_EXT_CTRL2 = 0x13,/* 16 bit r/o Extended Control Reg1 */
|
||||
PHY_NAT_Q_STAT2 = 0x14,/* 16 bit r/o Quick Status Reg2 */
|
||||
|
||||
PHY_NAT_PHY_ADDR = 0x19,/* 16 bit r/o PHY Address Register */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_CT_RESET = 1<<15, /* Bit 15: (sc) clear all PHY related regs */
|
||||
PHY_CT_LOOP = 1<<14, /* Bit 14: enable Loopback over PHY */
|
||||
@ -1253,8 +1118,29 @@ enum {
|
||||
PHY_MARV_ID1_Y2 = 0x0C91, /* Yukon-2 (PHY 88E1112) */
|
||||
};
|
||||
|
||||
/* Advertisement register bits */
|
||||
enum {
|
||||
PHY_AN_NXT_PG = 1<<15, /* Bit 15: Request Next Page */
|
||||
PHY_AN_ACK = 1<<14, /* Bit 14: (ro) Acknowledge Received */
|
||||
PHY_AN_RF = 1<<13, /* Bit 13: Remote Fault Bits */
|
||||
|
||||
PHY_AN_PAUSE_ASYM = 1<<11,/* Bit 11: Try for asymmetric */
|
||||
PHY_AN_PAUSE_CAP = 1<<10, /* Bit 10: Try for pause */
|
||||
PHY_AN_100BASE4 = 1<<9, /* Bit 9: Try for 100mbps 4k packets */
|
||||
PHY_AN_100FULL = 1<<8, /* Bit 8: Try for 100mbps full-duplex */
|
||||
PHY_AN_100HALF = 1<<7, /* Bit 7: Try for 100mbps half-duplex */
|
||||
PHY_AN_10FULL = 1<<6, /* Bit 6: Try for 10mbps full-duplex */
|
||||
PHY_AN_10HALF = 1<<5, /* Bit 5: Try for 10mbps half-duplex */
|
||||
PHY_AN_CSMA = 1<<0, /* Bit 0: Only selector supported */
|
||||
PHY_AN_SEL = 0x1f, /* Bit 4..0: Selector Field, 00001=Ethernet*/
|
||||
PHY_AN_FULL = PHY_AN_100FULL | PHY_AN_10FULL | PHY_AN_CSMA,
|
||||
PHY_AN_ALL = PHY_AN_10HALF | PHY_AN_10FULL |
|
||||
PHY_AN_100HALF | PHY_AN_100FULL,
|
||||
};
|
||||
|
||||
/* Xmac Specific */
|
||||
enum {
|
||||
PHY_X_AN_NXT_PG = 1<<15, /* Bit 15: Request Next Page */
|
||||
PHY_X_AN_ACK = 1<<14, /* Bit 14: (ro) Acknowledge Received */
|
||||
PHY_X_AN_RFB = 3<<12,/* Bit 13..12: Remote Fault Bits */
|
||||
|
||||
@ -1263,82 +1149,6 @@ enum {
|
||||
PHY_X_AN_FD = 1<<5, /* Bit 5: Full Duplex */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_B_AN_RF = 1<<13, /* Bit 13: Remote Fault */
|
||||
|
||||
PHY_B_AN_ASP = 1<<11, /* Bit 11: Asymmetric Pause */
|
||||
PHY_B_AN_PC = 1<<10, /* Bit 10: Pause Capable */
|
||||
PHY_B_AN_SEL = 0x1f, /* Bit 4..0: Selector Field, 00001=Ethernet*/
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_L_AN_RF = 1<<13, /* Bit 13: Remote Fault */
|
||||
/* Bit 12: reserved */
|
||||
PHY_L_AN_ASP = 1<<11, /* Bit 11: Asymmetric Pause */
|
||||
PHY_L_AN_PC = 1<<10, /* Bit 10: Pause Capable */
|
||||
|
||||
PHY_L_AN_SEL = 0x1f, /* Bit 4..0: Selector Field, 00001=Ethernet*/
|
||||
};
|
||||
|
||||
/* PHY_NAT_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement */
|
||||
/* PHY_NAT_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
|
||||
/* PHY_AN_NXT_PG (see XMAC) Bit 15: Request Next Page */
|
||||
enum {
|
||||
PHY_N_AN_RF = 1<<13, /* Bit 13: Remote Fault */
|
||||
|
||||
PHY_N_AN_100F = 1<<11, /* Bit 11: 100Base-T2 FD Support */
|
||||
PHY_N_AN_100H = 1<<10, /* Bit 10: 100Base-T2 HD Support */
|
||||
|
||||
PHY_N_AN_SEL = 0x1f, /* Bit 4..0: Selector Field, 00001=Ethernet*/
|
||||
};
|
||||
|
||||
/* field type definition for PHY_x_AN_SEL */
|
||||
enum {
|
||||
PHY_SEL_TYPE = 1, /* 00001 = Ethernet */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_ANE_LP_NP = 1<<3, /* Bit 3: Link Partner can Next Page */
|
||||
PHY_ANE_LOC_NP = 1<<2, /* Bit 2: Local PHY can Next Page */
|
||||
PHY_ANE_RX_PG = 1<<1, /* Bit 1: Page Received */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_ANE_PAR_DF = 1<<4, /* Bit 4: Parallel Detection Fault */
|
||||
|
||||
PHY_ANE_LP_CAP = 1<<0, /* Bit 0: Link Partner Auto-Neg. Cap. */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_NP_MORE = 1<<15, /* Bit 15: More, Next Pages to follow */
|
||||
PHY_NP_ACK1 = 1<<14, /* Bit 14: (ro) Ack1, for receiving a message */
|
||||
PHY_NP_MSG_VAL = 1<<13, /* Bit 13: Message Page valid */
|
||||
PHY_NP_ACK2 = 1<<12, /* Bit 12: Ack2, comply with msg content */
|
||||
PHY_NP_TOG = 1<<11, /* Bit 11: Toggle Bit, ensure sync */
|
||||
PHY_NP_MSG = 0x07ff, /* Bit 10..0: Message from/to Link Partner */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_X_EX_FD = 1<<15, /* Bit 15: Device Supports Full Duplex */
|
||||
PHY_X_EX_HD = 1<<14, /* Bit 14: Device Supports Half Duplex */
|
||||
};
|
||||
|
||||
enum {
|
||||
PHY_X_RS_PAUSE = 3<<7,/* Bit 8..7: selected Pause Mode */
|
||||
PHY_X_RS_HD = 1<<6, /* Bit 6: Half Duplex Mode selected */
|
||||
PHY_X_RS_FD = 1<<5, /* Bit 5: Full Duplex Mode selected */
|
||||
PHY_X_RS_ABLMIS = 1<<4, /* Bit 4: duplex or pause cap mismatch */
|
||||
PHY_X_RS_PAUMIS = 1<<3, /* Bit 3: pause capability mismatch */
|
||||
};
|
||||
|
||||
/** Remote Fault Bits (PHY_X_AN_RFB) encoding */
|
||||
enum {
|
||||
X_RFB_OK = 0<<12,/* Bit 13..12 No errors, Link OK */
|
||||
X_RFB_LF = 1<<12, /* Bit 13..12 Link Failure */
|
||||
X_RFB_OFF = 2<<12,/* Bit 13..12 Offline */
|
||||
X_RFB_AN_ERR = 3<<12,/* Bit 13..12 Auto-Negotiation Error */
|
||||
};
|
||||
|
||||
/* Pause Bits (PHY_X_AN_PAUSE and PHY_X_RS_PAUSE) encoding */
|
||||
enum {
|
||||
PHY_X_P_NO_PAUSE = 0<<7,/* Bit 8..7: no Pause Mode */
|
||||
@ -1418,6 +1228,16 @@ enum {
|
||||
PHY_B_PES_MLT3_ER = 1<<0, /* Bit 0: MLT3 code Error */
|
||||
};
|
||||
|
||||
/* PHY_BCOM_AUNE_ADV 16 bit r/w Auto-Negotiation Advertisement *****/
|
||||
/* PHY_BCOM_AUNE_LP 16 bit r/o Link Partner Ability Reg *****/
|
||||
enum {
|
||||
PHY_B_AN_RF = 1<<13, /* Bit 13: Remote Fault */
|
||||
|
||||
PHY_B_AN_ASP = 1<<11, /* Bit 11: Asymmetric Pause */
|
||||
PHY_B_AN_PC = 1<<10, /* Bit 10: Pause Capable */
|
||||
};
|
||||
|
||||
|
||||
/***** PHY_BCOM_FC_CTR 16 bit r/w False Carrier Counter *****/
|
||||
enum {
|
||||
PHY_B_FC_CTR = 0xff, /* Bit 7..0: False Carrier Counter */
|
||||
@ -1478,7 +1298,9 @@ enum {
|
||||
PHY_B_IS_LST_CHANGE = 1<<1, /* Bit 1: Link Status Changed */
|
||||
PHY_B_IS_CRC_ER = 1<<0, /* Bit 0: CRC Error */
|
||||
};
|
||||
#define PHY_B_DEF_MSK (~(PHY_B_IS_AN_PR | PHY_B_IS_LST_CHANGE))
|
||||
#define PHY_B_DEF_MSK \
|
||||
(~(PHY_B_IS_PSE | PHY_B_IS_AN_PR | PHY_B_IS_DUP_CHANGE | \
|
||||
PHY_B_IS_LSP_CHANGE | PHY_B_IS_LST_CHANGE))
|
||||
|
||||
/* Pause Bits (PHY_B_AN_ASP and PHY_B_AN_PC) encoding */
|
||||
enum {
|
||||
@ -1495,166 +1317,6 @@ enum {
|
||||
PHY_B_RES_1000HD = 6<<8,/* Bit 10..8: 1000Base-T Half Dup. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Level One-Specific
|
||||
*/
|
||||
/***** PHY_LONE_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
|
||||
enum {
|
||||
PHY_L_1000C_TEST = 7<<13,/* Bit 15..13: Test Modes */
|
||||
PHY_L_1000C_MSE = 1<<12, /* Bit 12: Master/Slave Enable */
|
||||
PHY_L_1000C_MSC = 1<<11, /* Bit 11: M/S Configuration */
|
||||
PHY_L_1000C_RD = 1<<10, /* Bit 10: Repeater/DTE */
|
||||
PHY_L_1000C_AFD = 1<<9, /* Bit 9: Advertise Full Duplex */
|
||||
PHY_L_1000C_AHD = 1<<8, /* Bit 8: Advertise Half Duplex */
|
||||
};
|
||||
|
||||
/***** PHY_LONE_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
|
||||
enum {
|
||||
PHY_L_1000S_MSF = 1<<15, /* Bit 15: Master/Slave Fault */
|
||||
PHY_L_1000S_MSR = 1<<14, /* Bit 14: Master/Slave Result */
|
||||
PHY_L_1000S_LRS = 1<<13, /* Bit 13: Local Receiver Status */
|
||||
PHY_L_1000S_RRS = 1<<12, /* Bit 12: Remote Receiver Status */
|
||||
PHY_L_1000S_LP_FD = 1<<11, /* Bit 11: Link Partner can FD */
|
||||
PHY_L_1000S_LP_HD = 1<<10, /* Bit 10: Link Partner can HD */
|
||||
|
||||
PHY_L_1000S_IEC = 0xff, /* Bit 7..0: Idle Error Count */
|
||||
|
||||
/***** PHY_LONE_EXT_STAT 16 bit r/o Extended Status Register *****/
|
||||
PHY_L_ES_X_FD_CAP = 1<<15, /* Bit 15: 1000Base-X FD capable */
|
||||
PHY_L_ES_X_HD_CAP = 1<<14, /* Bit 14: 1000Base-X HD capable */
|
||||
PHY_L_ES_T_FD_CAP = 1<<13, /* Bit 13: 1000Base-T FD capable */
|
||||
PHY_L_ES_T_HD_CAP = 1<<12, /* Bit 12: 1000Base-T HD capable */
|
||||
};
|
||||
|
||||
/***** PHY_LONE_PORT_CFG 16 bit r/w Port Configuration Reg *****/
|
||||
enum {
|
||||
PHY_L_PC_REP_MODE = 1<<15, /* Bit 15: Repeater Mode */
|
||||
|
||||
PHY_L_PC_TX_DIS = 1<<13, /* Bit 13: Tx output Disabled */
|
||||
PHY_L_PC_BY_SCR = 1<<12, /* Bit 12: Bypass Scrambler */
|
||||
PHY_L_PC_BY_45 = 1<<11, /* Bit 11: Bypass 4B5B-Decoder */
|
||||
PHY_L_PC_JAB_DIS = 1<<10, /* Bit 10: Jabber Disabled */
|
||||
PHY_L_PC_SQE = 1<<9, /* Bit 9: Enable Heartbeat */
|
||||
PHY_L_PC_TP_LOOP = 1<<8, /* Bit 8: TP Loopback */
|
||||
PHY_L_PC_SSS = 1<<7, /* Bit 7: Smart Speed Selection */
|
||||
PHY_L_PC_FIFO_SIZE = 1<<6, /* Bit 6: FIFO Size */
|
||||
PHY_L_PC_PRE_EN = 1<<5, /* Bit 5: Preamble Enable */
|
||||
PHY_L_PC_CIM = 1<<4, /* Bit 4: Carrier Integrity Mon */
|
||||
PHY_L_PC_10_SER = 1<<3, /* Bit 3: Use Serial Output */
|
||||
PHY_L_PC_ANISOL = 1<<2, /* Bit 2: Unisolate Port */
|
||||
PHY_L_PC_TEN_BIT = 1<<1, /* Bit 1: 10bit iface mode on */
|
||||
PHY_L_PC_ALTCLOCK = 1<<0, /* Bit 0: (ro) ALTCLOCK Mode on */
|
||||
};
|
||||
|
||||
/***** PHY_LONE_Q_STAT 16 bit r/o Quick Status Reg *****/
|
||||
enum {
|
||||
PHY_L_QS_D_RATE = 3<<14,/* Bit 15..14: Data Rate */
|
||||
PHY_L_QS_TX_STAT = 1<<13, /* Bit 13: Transmitting */
|
||||
PHY_L_QS_RX_STAT = 1<<12, /* Bit 12: Receiving */
|
||||
PHY_L_QS_COL_STAT = 1<<11, /* Bit 11: Collision */
|
||||
PHY_L_QS_L_STAT = 1<<10, /* Bit 10: Link is up */
|
||||
PHY_L_QS_DUP_MOD = 1<<9, /* Bit 9: Full/Half Duplex */
|
||||
PHY_L_QS_AN = 1<<8, /* Bit 8: AutoNeg is On */
|
||||
PHY_L_QS_AN_C = 1<<7, /* Bit 7: AN is Complete */
|
||||
PHY_L_QS_LLE = 7<<4,/* Bit 6..4: Line Length Estim. */
|
||||
PHY_L_QS_PAUSE = 1<<3, /* Bit 3: LP advertised Pause */
|
||||
PHY_L_QS_AS_PAUSE = 1<<2, /* Bit 2: LP adv. asym. Pause */
|
||||
PHY_L_QS_ISOLATE = 1<<1, /* Bit 1: CIM Isolated */
|
||||
PHY_L_QS_EVENT = 1<<0, /* Bit 0: Event has occurred */
|
||||
};
|
||||
|
||||
/***** PHY_LONE_INT_ENAB 16 bit r/w Interrupt Enable Reg *****/
|
||||
/***** PHY_LONE_INT_STAT 16 bit r/o Interrupt Status Reg *****/
|
||||
enum {
|
||||
PHY_L_IS_AN_F = 1<<13, /* Bit 13: Auto-Negotiation fault */
|
||||
PHY_L_IS_CROSS = 1<<11, /* Bit 11: Crossover used */
|
||||
PHY_L_IS_POL = 1<<10, /* Bit 10: Polarity correct. used */
|
||||
PHY_L_IS_SS = 1<<9, /* Bit 9: Smart Speed Downgrade */
|
||||
PHY_L_IS_CFULL = 1<<8, /* Bit 8: Counter Full */
|
||||
PHY_L_IS_AN_C = 1<<7, /* Bit 7: AutoNeg Complete */
|
||||
PHY_L_IS_SPEED = 1<<6, /* Bit 6: Speed Changed */
|
||||
PHY_L_IS_DUP = 1<<5, /* Bit 5: Duplex Changed */
|
||||
PHY_L_IS_LS = 1<<4, /* Bit 4: Link Status Changed */
|
||||
PHY_L_IS_ISOL = 1<<3, /* Bit 3: Isolate Occured */
|
||||
PHY_L_IS_MDINT = 1<<2, /* Bit 2: (ro) STAT: MII Int Pending */
|
||||
PHY_L_IS_INTEN = 1<<1, /* Bit 1: ENAB: Enable IRQs */
|
||||
PHY_L_IS_FORCE = 1<<0, /* Bit 0: ENAB: Force Interrupt */
|
||||
};
|
||||
|
||||
/* int. mask */
|
||||
#define PHY_L_DEF_MSK (PHY_L_IS_LS | PHY_L_IS_ISOL | PHY_L_IS_INTEN)
|
||||
|
||||
/***** PHY_LONE_LED_CFG 16 bit r/w LED Configuration Reg *****/
|
||||
enum {
|
||||
PHY_L_LC_LEDC = 3<<14,/* Bit 15..14: Col/Blink/On/Off */
|
||||
PHY_L_LC_LEDR = 3<<12,/* Bit 13..12: Rx/Blink/On/Off */
|
||||
PHY_L_LC_LEDT = 3<<10,/* Bit 11..10: Tx/Blink/On/Off */
|
||||
PHY_L_LC_LEDG = 3<<8,/* Bit 9..8: Giga/Blink/On/Off */
|
||||
PHY_L_LC_LEDS = 3<<6,/* Bit 7..6: 10-100/Blink/On/Off */
|
||||
PHY_L_LC_LEDL = 3<<4,/* Bit 5..4: Link/Blink/On/Off */
|
||||
PHY_L_LC_LEDF = 3<<2,/* Bit 3..2: Duplex/Blink/On/Off */
|
||||
PHY_L_LC_PSTRECH= 1<<1, /* Bit 1: Strech LED Pulses */
|
||||
PHY_L_LC_FREQ = 1<<0, /* Bit 0: 30/100 ms */
|
||||
};
|
||||
|
||||
/***** PHY_LONE_PORT_CTRL 16 bit r/w Port Control Reg *****/
|
||||
enum {
|
||||
PHY_L_PC_TX_TCLK = 1<<15, /* Bit 15: Enable TX_TCLK */
|
||||
PHY_L_PC_ALT_NP = 1<<13, /* Bit 14: Alternate Next Page */
|
||||
PHY_L_PC_GMII_ALT= 1<<12, /* Bit 13: Alternate GMII driver */
|
||||
PHY_L_PC_TEN_CRS = 1<<10, /* Bit 10: Extend CRS*/
|
||||
};
|
||||
|
||||
/***** PHY_LONE_CIM 16 bit r/o CIM Reg *****/
|
||||
enum {
|
||||
PHY_L_CIM_ISOL = 0xff<<8,/* Bit 15..8: Isolate Count */
|
||||
PHY_L_CIM_FALSE_CAR = 0xff, /* Bit 7..0: False Carrier Count */
|
||||
};
|
||||
|
||||
/*
|
||||
* Pause Bits (PHY_L_AN_ASP and PHY_L_AN_PC) encoding
|
||||
*/
|
||||
enum {
|
||||
PHY_L_P_NO_PAUSE= 0<<10,/* Bit 11..10: no Pause Mode */
|
||||
PHY_L_P_SYM_MD = 1<<10, /* Bit 11..10: symmetric Pause Mode */
|
||||
PHY_L_P_ASYM_MD = 2<<10,/* Bit 11..10: asymmetric Pause Mode */
|
||||
PHY_L_P_BOTH_MD = 3<<10,/* Bit 11..10: both Pause Mode */
|
||||
};
|
||||
|
||||
/*
|
||||
* National-Specific
|
||||
*/
|
||||
/***** PHY_NAT_1000T_CTRL 16 bit r/w 1000Base-T Control Reg *****/
|
||||
enum {
|
||||
PHY_N_1000C_TEST= 7<<13,/* Bit 15..13: Test Modes */
|
||||
PHY_N_1000C_MSE = 1<<12, /* Bit 12: Master/Slave Enable */
|
||||
PHY_N_1000C_MSC = 1<<11, /* Bit 11: M/S Configuration */
|
||||
PHY_N_1000C_RD = 1<<10, /* Bit 10: Repeater/DTE */
|
||||
PHY_N_1000C_AFD = 1<<9, /* Bit 9: Advertise Full Duplex */
|
||||
PHY_N_1000C_AHD = 1<<8, /* Bit 8: Advertise Half Duplex */
|
||||
PHY_N_1000C_APC = 1<<7, /* Bit 7: Asymmetric Pause Cap. */};
|
||||
|
||||
|
||||
/***** PHY_NAT_1000T_STAT 16 bit r/o 1000Base-T Status Reg *****/
|
||||
enum {
|
||||
PHY_N_1000S_MSF = 1<<15, /* Bit 15: Master/Slave Fault */
|
||||
PHY_N_1000S_MSR = 1<<14, /* Bit 14: Master/Slave Result */
|
||||
PHY_N_1000S_LRS = 1<<13, /* Bit 13: Local Receiver Status */
|
||||
PHY_N_1000S_RRS = 1<<12, /* Bit 12: Remote Receiver Status*/
|
||||
PHY_N_1000S_LP_FD= 1<<11, /* Bit 11: Link Partner can FD */
|
||||
PHY_N_1000S_LP_HD= 1<<10, /* Bit 10: Link Partner can HD */
|
||||
PHY_N_1000C_LP_APC= 1<<9, /* Bit 9: LP Asym. Pause Cap. */
|
||||
PHY_N_1000S_IEC = 0xff, /* Bit 7..0: Idle Error Count */
|
||||
};
|
||||
|
||||
/***** PHY_NAT_EXT_STAT 16 bit r/o Extended Status Register *****/
|
||||
enum {
|
||||
PHY_N_ES_X_FD_CAP= 1<<15, /* Bit 15: 1000Base-X FD capable */
|
||||
PHY_N_ES_X_HD_CAP= 1<<14, /* Bit 14: 1000Base-X HD capable */
|
||||
PHY_N_ES_T_FD_CAP= 1<<13, /* Bit 13: 1000Base-T FD capable */
|
||||
PHY_N_ES_T_HD_CAP= 1<<12, /* Bit 12: 1000Base-T HD capable */
|
||||
};
|
||||
|
||||
/** Marvell-Specific */
|
||||
enum {
|
||||
PHY_M_AN_NXT_PG = 1<<15, /* Request Next Page */
|
||||
@ -1718,7 +1380,7 @@ enum {
|
||||
PHY_M_PC_EN_DET_PLUS = 3<<8, /* Energy Detect Plus (Mode 2) */
|
||||
};
|
||||
|
||||
#define PHY_M_PC_MDI_XMODE(x) (((x)<<5) & PHY_M_PC_MDIX_MSK)
|
||||
#define PHY_M_PC_MDI_XMODE(x) (((x)<<5) & PHY_M_PC_MDIX_MSK)
|
||||
|
||||
enum {
|
||||
PHY_M_PC_MAN_MDI = 0, /* 00 = Manual MDI configuration */
|
||||
@ -2105,7 +1767,7 @@ enum {
|
||||
GM_GPSR_FC_RX_DIS = 1<<2, /* Bit 2: Rx Flow-Control Mode Disabled */
|
||||
GM_GPSR_PROM_EN = 1<<1, /* Bit 1: Promiscuous Mode Enabled */
|
||||
};
|
||||
|
||||
|
||||
/* GM_GP_CTRL 16 bit r/w General Purpose Control Register */
|
||||
enum {
|
||||
GM_GPCR_PROM_ENA = 1<<14, /* Bit 14: Enable Promiscuous Mode */
|
||||
@ -2127,7 +1789,7 @@ enum {
|
||||
|
||||
#define GM_GPCR_SPEED_1000 (GM_GPCR_GIGS_ENA | GM_GPCR_SPEED_100)
|
||||
#define GM_GPCR_AU_ALL_DIS (GM_GPCR_AU_DUP_DIS | GM_GPCR_AU_FCT_DIS|GM_GPCR_AU_SPD_DIS)
|
||||
|
||||
|
||||
/* GM_TX_CTRL 16 bit r/w Transmit Control Register */
|
||||
enum {
|
||||
GM_TXCR_FORCE_JAM = 1<<15, /* Bit 15: Force Jam / Flow-Control */
|
||||
@ -2138,7 +1800,7 @@ enum {
|
||||
|
||||
#define TX_COL_THR(x) (((x)<<10) & GM_TXCR_COL_THR_MSK)
|
||||
#define TX_COL_DEF 0x04
|
||||
|
||||
|
||||
/* GM_RX_CTRL 16 bit r/w Receive Control Register */
|
||||
enum {
|
||||
GM_RXCR_UCF_ENA = 1<<15, /* Bit 15: Enable Unicast filtering */
|
||||
@ -2146,7 +1808,7 @@ enum {
|
||||
GM_RXCR_CRC_DIS = 1<<13, /* Bit 13: Remove 4-byte CRC */
|
||||
GM_RXCR_PASS_FC = 1<<12, /* Bit 12: Pass FC packets to FIFO */
|
||||
};
|
||||
|
||||
|
||||
/* GM_TX_PARAM 16 bit r/w Transmit Parameter Register */
|
||||
enum {
|
||||
GM_TXPA_JAMLEN_MSK = 0x03<<14, /* Bit 15..14: Jam Length */
|
||||
@ -2171,7 +1833,7 @@ enum {
|
||||
GM_SMOD_JUMBO_ENA = 1<<8, /* Bit 8: Enable Jumbo (Max. Frame Len) */
|
||||
GM_SMOD_IPG_MSK = 0x1f /* Bit 4..0: Inter-Packet Gap (IPG) */
|
||||
};
|
||||
|
||||
|
||||
#define DATA_BLIND_VAL(x) (((x)<<11) & GM_SMOD_DATABL_MSK)
|
||||
#define DATA_BLIND_DEF 0x04
|
||||
|
||||
@ -2186,7 +1848,7 @@ enum {
|
||||
GM_SMI_CT_RD_VAL = 1<<4, /* Bit 4: Read Valid (Read completed) */
|
||||
GM_SMI_CT_BUSY = 1<<3, /* Bit 3: Busy (Operation in progress) */
|
||||
};
|
||||
|
||||
|
||||
#define GM_SMI_CT_PHY_AD(x) (((x)<<11) & GM_SMI_CT_PHY_A_MSK)
|
||||
#define GM_SMI_CT_REG_AD(x) (((x)<<6) & GM_SMI_CT_REG_A_MSK)
|
||||
|
||||
@ -2195,7 +1857,7 @@ enum {
|
||||
GM_PAR_MIB_CLR = 1<<5, /* Bit 5: Set MIB Clear Counter Mode */
|
||||
GM_PAR_MIB_TST = 1<<4, /* Bit 4: MIB Load Counter (Test Mode) */
|
||||
};
|
||||
|
||||
|
||||
/* Receive Frame Status Encoding */
|
||||
enum {
|
||||
GMR_FS_LEN = 0xffff<<16, /* Bit 31..16: Rx Frame Length */
|
||||
@ -2217,12 +1879,12 @@ enum {
|
||||
/*
|
||||
* GMR_FS_ANY_ERR (analogous to XMR_FS_ANY_ERR)
|
||||
*/
|
||||
GMR_FS_ANY_ERR = GMR_FS_CRC_ERR | GMR_FS_LONG_ERR |
|
||||
GMR_FS_MII_ERR | GMR_FS_BAD_FC | GMR_FS_GOOD_FC |
|
||||
GMR_FS_ANY_ERR = GMR_FS_CRC_ERR | GMR_FS_LONG_ERR |
|
||||
GMR_FS_MII_ERR | GMR_FS_BAD_FC | GMR_FS_GOOD_FC |
|
||||
GMR_FS_JABBER,
|
||||
/* Rx GMAC FIFO Flush Mask (default) */
|
||||
RX_FF_FL_DEF_MSK = GMR_FS_CRC_ERR | GMR_FS_RX_FF_OV |GMR_FS_MII_ERR |
|
||||
GMR_FS_BAD_FC | GMR_FS_GOOD_FC | GMR_FS_UN_SIZE |
|
||||
GMR_FS_BAD_FC | GMR_FS_GOOD_FC | GMR_FS_UN_SIZE |
|
||||
GMR_FS_JABBER,
|
||||
};
|
||||
|
||||
@ -2540,10 +2202,6 @@ enum {
|
||||
};
|
||||
|
||||
|
||||
/* XM_PHY_ADDR 16 bit r/w PHY Address Register */
|
||||
#define XM_PHY_ADDR_SZ 0x1f /* Bit 4..0: PHY Address bits */
|
||||
|
||||
|
||||
/* XM_GP_PORT 32 bit r/w General Purpose Port Register */
|
||||
enum {
|
||||
XM_GP_ANIP = 1<<6, /* Bit 6: (ro) Auto-Neg. in progress */
|
||||
@ -2662,8 +2320,8 @@ enum {
|
||||
};
|
||||
|
||||
#define XM_PAUSE_MODE (XM_MD_SPOE_E | XM_MD_SPOL_I | XM_MD_SPOH_I)
|
||||
#define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
|
||||
XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA | XM_MD_CAA)
|
||||
#define XM_DEF_MODE (XM_MD_RX_RUNT | XM_MD_RX_IRLE | XM_MD_RX_LONG |\
|
||||
XM_MD_RX_CRCE | XM_MD_RX_ERR | XM_MD_CSA)
|
||||
|
||||
/* XM_STAT_CMD 16 bit r/w Statistics Command Register */
|
||||
enum {
|
||||
@ -2793,28 +2451,20 @@ struct skge_hw {
|
||||
u32 intr_mask;
|
||||
struct net_device *dev[2];
|
||||
|
||||
u8 mac_cfg;
|
||||
u8 chip_id;
|
||||
u8 chip_rev;
|
||||
u8 phy_type;
|
||||
u8 pmd_type;
|
||||
u16 phy_addr;
|
||||
u8 ports;
|
||||
|
||||
u32 ram_size;
|
||||
u32 ram_offset;
|
||||
|
||||
|
||||
struct tasklet_struct ext_tasklet;
|
||||
spinlock_t phy_lock;
|
||||
};
|
||||
|
||||
static inline int isdualport(const struct skge_hw *hw)
|
||||
{
|
||||
return !(hw->mac_cfg & CFG_SNG_MAC);
|
||||
}
|
||||
|
||||
static inline u8 chip_rev(const struct skge_hw *hw)
|
||||
{
|
||||
return (hw->mac_cfg & CFG_CHIP_R_MSK) >> 4;
|
||||
}
|
||||
|
||||
static inline int iscopper(const struct skge_hw *hw)
|
||||
{
|
||||
@ -2827,7 +2477,7 @@ enum {
|
||||
FLOW_MODE_REM_SEND = 2, /* Symmetric or just remote */
|
||||
FLOW_MODE_SYMMETRIC = 3, /* Both stations may send PAUSE */
|
||||
};
|
||||
|
||||
|
||||
struct skge_port {
|
||||
u32 msg_enable;
|
||||
struct skge_hw *hw;
|
||||
@ -2853,8 +2503,8 @@ struct skge_port {
|
||||
void *mem; /* PCI memory for rings */
|
||||
dma_addr_t dma;
|
||||
unsigned long mem_size;
|
||||
unsigned int rx_buf_size;
|
||||
|
||||
struct timer_list link_check;
|
||||
struct timer_list led_blink;
|
||||
};
|
||||
|
||||
@ -2863,7 +2513,6 @@ struct skge_port {
|
||||
static inline u32 skge_read32(const struct skge_hw *hw, int reg)
|
||||
{
|
||||
return readl(hw->regs + reg);
|
||||
|
||||
}
|
||||
|
||||
static inline u16 skge_read16(const struct skge_hw *hw, int reg)
|
||||
@ -2892,114 +2541,87 @@ static inline void skge_write8(const struct skge_hw *hw, int reg, u8 val)
|
||||
}
|
||||
|
||||
/* MAC Related Registers inside the device. */
|
||||
#define SKGEMAC_REG(port,reg) (((port)<<7)+(reg))
|
||||
|
||||
/* PCI config space can be accessed via memory mapped space */
|
||||
#define SKGEPCI_REG(reg) ((reg)+ 0x380)
|
||||
|
||||
#define SKGEXM_REG(port, reg) \
|
||||
#define SK_REG(port,reg) (((port)<<7)+(reg))
|
||||
#define SK_XMAC_REG(port, reg) \
|
||||
((BASE_XMAC_1 + (port) * (BASE_XMAC_2 - BASE_XMAC_1)) | (reg) << 1)
|
||||
|
||||
static inline u32 skge_xm_read32(const struct skge_hw *hw, int port, int reg)
|
||||
static inline u32 xm_read32(const struct skge_hw *hw, int port, int reg)
|
||||
{
|
||||
return skge_read32(hw, SKGEXM_REG(port,reg));
|
||||
u32 v;
|
||||
v = skge_read16(hw, SK_XMAC_REG(port, reg));
|
||||
v |= (u32)skge_read16(hw, SK_XMAC_REG(port, reg+2)) << 16;
|
||||
return v;
|
||||
}
|
||||
|
||||
static inline u16 skge_xm_read16(const struct skge_hw *hw, int port, int reg)
|
||||
static inline u16 xm_read16(const struct skge_hw *hw, int port, int reg)
|
||||
{
|
||||
return skge_read16(hw, SKGEXM_REG(port,reg));
|
||||
return skge_read16(hw, SK_XMAC_REG(port,reg));
|
||||
}
|
||||
|
||||
static inline u8 skge_xm_read8(const struct skge_hw *hw, int port, int reg)
|
||||
static inline void xm_write32(const struct skge_hw *hw, int port, int r, u32 v)
|
||||
{
|
||||
return skge_read8(hw, SKGEXM_REG(port,reg));
|
||||
skge_write16(hw, SK_XMAC_REG(port,r), v & 0xffff);
|
||||
skge_write16(hw, SK_XMAC_REG(port,r+2), v >> 16);
|
||||
}
|
||||
|
||||
static inline void skge_xm_write32(const struct skge_hw *hw, int port, int r, u32 v)
|
||||
static inline void xm_write16(const struct skge_hw *hw, int port, int r, u16 v)
|
||||
{
|
||||
skge_write32(hw, SKGEXM_REG(port,r), v);
|
||||
skge_write16(hw, SK_XMAC_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_xm_write16(const struct skge_hw *hw, int port, int r, u16 v)
|
||||
{
|
||||
skge_write16(hw, SKGEXM_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_xm_write8(const struct skge_hw *hw, int port, int r, u8 v)
|
||||
{
|
||||
skge_write8(hw, SKGEXM_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_xm_outhash(const struct skge_hw *hw, int port, int reg,
|
||||
static inline void xm_outhash(const struct skge_hw *hw, int port, int reg,
|
||||
const u8 *hash)
|
||||
{
|
||||
skge_xm_write16(hw, port, reg,
|
||||
(u16)hash[0] | ((u16)hash[1] << 8));
|
||||
skge_xm_write16(hw, port, reg+2,
|
||||
(u16)hash[2] | ((u16)hash[3] << 8));
|
||||
skge_xm_write16(hw, port, reg+4,
|
||||
(u16)hash[4] | ((u16)hash[5] << 8));
|
||||
skge_xm_write16(hw, port, reg+6,
|
||||
(u16)hash[6] | ((u16)hash[7] << 8));
|
||||
xm_write16(hw, port, reg, (u16)hash[0] | ((u16)hash[1] << 8));
|
||||
xm_write16(hw, port, reg+2, (u16)hash[2] | ((u16)hash[3] << 8));
|
||||
xm_write16(hw, port, reg+4, (u16)hash[4] | ((u16)hash[5] << 8));
|
||||
xm_write16(hw, port, reg+6, (u16)hash[6] | ((u16)hash[7] << 8));
|
||||
}
|
||||
|
||||
static inline void skge_xm_outaddr(const struct skge_hw *hw, int port, int reg,
|
||||
static inline void xm_outaddr(const struct skge_hw *hw, int port, int reg,
|
||||
const u8 *addr)
|
||||
{
|
||||
skge_xm_write16(hw, port, reg,
|
||||
(u16)addr[0] | ((u16)addr[1] << 8));
|
||||
skge_xm_write16(hw, port, reg,
|
||||
(u16)addr[2] | ((u16)addr[3] << 8));
|
||||
skge_xm_write16(hw, port, reg,
|
||||
(u16)addr[4] | ((u16)addr[5] << 8));
|
||||
xm_write16(hw, port, reg, (u16)addr[0] | ((u16)addr[1] << 8));
|
||||
xm_write16(hw, port, reg+2, (u16)addr[2] | ((u16)addr[3] << 8));
|
||||
xm_write16(hw, port, reg+4, (u16)addr[4] | ((u16)addr[5] << 8));
|
||||
}
|
||||
|
||||
#define SK_GMAC_REG(port,reg) \
|
||||
(BASE_GMAC_1 + (port) * (BASE_GMAC_2-BASE_GMAC_1) + (reg))
|
||||
|
||||
#define SKGEGMA_REG(port,reg) \
|
||||
((reg) + BASE_GMAC_1 + \
|
||||
(port) * (BASE_GMAC_2-BASE_GMAC_1))
|
||||
|
||||
static inline u16 skge_gma_read16(const struct skge_hw *hw, int port, int reg)
|
||||
static inline u16 gma_read16(const struct skge_hw *hw, int port, int reg)
|
||||
{
|
||||
return skge_read16(hw, SKGEGMA_REG(port,reg));
|
||||
return skge_read16(hw, SK_GMAC_REG(port,reg));
|
||||
}
|
||||
|
||||
static inline u32 skge_gma_read32(const struct skge_hw *hw, int port, int reg)
|
||||
static inline u32 gma_read32(const struct skge_hw *hw, int port, int reg)
|
||||
{
|
||||
return (u32) skge_read16(hw, SKGEGMA_REG(port,reg))
|
||||
| ((u32)skge_read16(hw, SKGEGMA_REG(port,reg+4)) << 16);
|
||||
return (u32) skge_read16(hw, SK_GMAC_REG(port,reg))
|
||||
| ((u32)skge_read16(hw, SK_GMAC_REG(port,reg+4)) << 16);
|
||||
}
|
||||
|
||||
static inline u8 skge_gma_read8(const struct skge_hw *hw, int port, int reg)
|
||||
static inline void gma_write16(const struct skge_hw *hw, int port, int r, u16 v)
|
||||
{
|
||||
return skge_read8(hw, SKGEGMA_REG(port,reg));
|
||||
skge_write16(hw, SK_GMAC_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_gma_write16(const struct skge_hw *hw, int port, int r, u16 v)
|
||||
static inline void gma_write32(const struct skge_hw *hw, int port, int r, u32 v)
|
||||
{
|
||||
skge_write16(hw, SKGEGMA_REG(port,r), v);
|
||||
skge_write16(hw, SK_GMAC_REG(port, r), (u16) v);
|
||||
skge_write32(hw, SK_GMAC_REG(port, r+4), (u16)(v >> 16));
|
||||
}
|
||||
|
||||
static inline void skge_gma_write32(const struct skge_hw *hw, int port, int r, u32 v)
|
||||
static inline void gma_write8(const struct skge_hw *hw, int port, int r, u8 v)
|
||||
{
|
||||
skge_write16(hw, SKGEGMA_REG(port, r), (u16) v);
|
||||
skge_write32(hw, SKGEGMA_REG(port, r+4), (u16)(v >> 16));
|
||||
skge_write8(hw, SK_GMAC_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_gma_write8(const struct skge_hw *hw, int port, int r, u8 v)
|
||||
{
|
||||
skge_write8(hw, SKGEGMA_REG(port,r), v);
|
||||
}
|
||||
|
||||
static inline void skge_gm_set_addr(struct skge_hw *hw, int port, int reg,
|
||||
static inline void gma_set_addr(struct skge_hw *hw, int port, int reg,
|
||||
const u8 *addr)
|
||||
{
|
||||
skge_gma_write16(hw, port, reg,
|
||||
(u16) addr[0] | ((u16) addr[1] << 8));
|
||||
skge_gma_write16(hw, port, reg+4,
|
||||
(u16) addr[2] | ((u16) addr[3] << 8));
|
||||
skge_gma_write16(hw, port, reg+8,
|
||||
(u16) addr[4] | ((u16) addr[5] << 8));
|
||||
gma_write16(hw, port, reg, (u16) addr[0] | ((u16) addr[1] << 8));
|
||||
gma_write16(hw, port, reg+4,(u16) addr[2] | ((u16) addr[3] << 8));
|
||||
gma_write16(hw, port, reg+8,(u16) addr[4] | ((u16) addr[5] << 8));
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -65,7 +65,7 @@ static inline int is_zero_ether_addr(const u8 *addr)
|
||||
*/
|
||||
static inline int is_multicast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return addr[0] & 0x01;
|
||||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -625,17 +625,6 @@ enum ieee80211_state {
|
||||
#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
|
||||
|
||||
|
||||
extern inline int is_multicast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] != 0xff) && (0x01 & addr[0]));
|
||||
}
|
||||
|
||||
extern inline int is_broadcast_ether_addr(const u8 *addr)
|
||||
{
|
||||
return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \
|
||||
(addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff));
|
||||
}
|
||||
|
||||
#define CFG_IEEE80211_RESERVE_FCS (1<<0)
|
||||
#define CFG_IEEE80211_COMPUTE_FCS (1<<1)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user