/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
*
* LICENSE:
*
* The computer program files contained in this folder ("Files")
* are provided to you under the BSD-type license terms provided
* below, and any use of such Files and any derivative works
* thereof created by you shall be governed by the following terms
* and conditions:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* with the distribution.
* - Neither the name of Marvell nor the names of its contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* /LICENSE
*
*/
#ifndef _YGE_H
#define _YGE_H
/*
* SysKonnect PCI vendor ID
*/
/*
* Marvell PCI vendor ID
*/
/*
* D-Link PCI vendor ID
*/
/*
* SysKonnect ethernet device IDs
*/
/*
* Marvell gigabit ethernet device IDs
*/
/*
* D-Link gigabit ethernet device ID
*/
/*
* PCI Configuration Space header
*/
/* PCI Express Capability */
/* PCI Express Extended Capabilities */
/* PCI_OUR_REG_1 32 bit Our Register 1 */
/* 1 = Map Flash to memory */
/* 0 = Disable addr. dec */
/* PCI_OUR_REG_2 32 bit Our Register 2 */
/* Bit 13..12: reserved */
/* PCI_OUR_STATUS 32 bit Adapter Status Register (Yukon-2) */
/* possible values for the speed field of the register */
/* PCI_OUR_REG_4 32 bit Our Register 4 (Yukon-ECU only) */
/* PCI_OUR_REG_5 - 32 bit Our Register 5 (Yukon-ECU only) */
/* Bit 31..27: for A3 & later */
/* PEX_DEV_CTRL 16 bit PEX Device Control (Yukon-2) */
/* PEX_LNK_STAT 16 bit PEX Link Status (Yukon-2) */
/* PEX_UNC_ERR_STAT PEX Uncorrectable Errors Status Register (Yukon-2) */
#define PEX_FATAL_ERRORS \
/* Control Register File (Address Map) */
/*
* Bank 0
*/
/* Special ISR registers (Yukon-2 only) */
/*
* Bank 1
* - completely empty (this is the RAP Block window)
* Note: if RAP = 1 this page is reserved
*/
/*
* Bank 2
*/
/* NA reg = 48 bit Network Address Register, 3x16 or 8x8 bit readable */
/*
* Bank 3
*/
/* RAM Random Registers */
/* RAM Interface Registers */
/* Yukon-2: use SELECT_RAM_BUFFER() to access the RAM buffer */
/*
* The HW-Spec. calls this registers Timeout Value 0..11. But this names are
* not usable in SW. Please notice these are NOT real timeouts, these are
* the number of qWords transferred continuously.
*/
/*
* Bank 4 - 5
*/
/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() to access */
/* RSS key registers for Yukon-2 Family */
/* RSS key register offsets */
/* 0x0280 - 0x0292: MAC 2 */
/*
* Bank 8 - 15
*/
/* Receive and Transmit Queue Registers, use Q_ADDR() to access */
/* Queue Register Offsets, use Q_ADDR() to access */
/* Queue Prefetch Unit Offsets, use Y2_PREF_Q_ADDR() to address */
/*
* Bank 16 - 23
*/
/* RAM Buffer Registers */
/* RAM Buffer Register Offsets, use RB_ADDR() to access */
/*
* Bank 24
*/
/* Receive GMAC FIFO (YUKON and Yukon-2), use MR_ADDR() to access */
/*
* Bank 25
*/
/* 0x0c80 - 0x0cbf: MAC 2 */
/* 0x0cc0 - 0x0cff: reserved */
/*
* Bank 26
*/
/* Transmit GMAC FIFO (YUKON and Yukon-2), use MR_ADDR() to access */
/*
* Bank 27
*/
/* 0x0d80 - 0x0dbf: MAC 2 */
/* 0x0daa - 0x0dff: reserved */
/*
* Bank 28
*/
/* Descriptor Poll Timer Registers */
/* Time Stamp Timer Registers (YUKON only) */
/* Polling Unit Registers (Yukon-2 only) */
/* ASF Subsystem Registers (Yukon-2 only) */
/*
* Bank 29
*/
/* Status BMU Registers (Yukon-2 only) */
/* Level and ISR Timer Registers (Yukon-2 only) */
/*
* Bank 30
*/
/* GMAC and GPHY Control Registers (YUKON only) */
/* Wake-up Frame Pattern Match Control Registers (YUKON only) */
/* WOL Pattern Length Registers (YUKON only) */
/* WOL Pattern Counter Registers (YUKON only) */
/*
* Bank 32 - 33
*/
/* offset to configuration space on Yukon-2 */
/*
* Control Register Bit Definitions:
*/
/* B0_POWER_CTRL 8 Bit Power Control reg (YUKON only) */
/* B0_ISRC 32 bit Interrupt Source Register */
/* B0_IMSK 32 bit Interrupt Mask Register */
/* B0_SP_ISRC 32 bit Special Interrupt Source Reg */
/* B2_IRQM_MSK 32 bit IRQ Moderation Mask */
/* B0_Y2_SP_ISRC2 32 bit Special Interrupt Source Reg 2 */
/* B0_Y2_SP_ISRC3 32 bit Special Interrupt Source Reg 3 */
/* B0_Y2_SP_EISR 32 bit Enter ISR Reg */
/* B0_Y2_SP_LISR 32 bit Leave ISR Reg */
/* B0_HWE_ISRC 32 bit HW Error Interrupt Src Reg */
/* B0_HWE_IMSK 32 bit HW Error Interrupt Mask Reg */
/* B2_IRQM_HWE_MSK 32 bit IRQ Moderation HW Error Mask */
/* B2_MAC_CFG 8 bit MAC Configuration / Chip Revision */
/* B2_CHIP_ID 8 bit Chip Identification Number */
/*
* Note the following four are not supported
* as they are pre-yukon 2 chips
*/
/* 8 bit Chip Revision Number */
#define CHIP_REV_YU_FE2_A0 0
/* B2_Y2_CLK_GATE - 8 bit Clock Gating (Yukon-2 only) */
/* B2_Y2_HW_RES 8 bit HW Resources (Yukon-2 only) */
/* B2_E_3 8 bit lower 4 bits used for HW self test result */
/* Yukon-2 */
/* B2_TI_CTRL 8 bit Timer control */
/* B2_IRQM_CTRL 8 bit IRQ Moderation Timer Control */
/* B2_TI_TEST 8 Bit Timer Test */
/* B2_IRQM_TEST 8 bit IRQ Moderation Timer Test */
/* B28_DPT_TST 8 bit Descriptor Poll Timer Test Reg */
/* 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 */
/* B2_TST_CTRL1 8 bit Test Control Register 1 */
/* B2_I2C_CTRL 32 bit I2C HW Control Register */
/* B2_I2C_IRQ 32 bit I2C HW IRQ Register */
/* B2_I2C_SW 32 bit (8 bit access) I2C HW SW Port Register */
/* I2C Address */
/* B2_BSC_CTRL 8 bit Blink Source Counter Control */
/* B2_BSC_STAT 8 bit Blink Source Counter Status */
/* B2_BSC_TST 16 bit Blink Source Counter Test Reg */
/* B2_GP_IO GLB_GPIO 0x015C General Purpose I/O Register */
/* Bit(s) GLB_GPIO_RSRV_30 reserved */
/* Bit(s) GLB_GPIO_RSRV_25_16 reserved */
/* Disable Internal Reset after D3 to D0 */
/* Bit(s) GLB_GPIO_RSRV_8_0 reserved */
/* Y2_PEX_PHY_ADDR/DATA PEX PHY address and data reg (Yukon-2 only) */
/* B3_RAM_ADDR 32 bit RAM Address, to read or write */
/* RAM Interface Registers */
/* B3_RI_CTRL 16 bit RAM Interface Control Register */
/* Transmit Arbiter Registers MAC 1 and 2, use MR_ADDR() 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 */
/* TXA_LIM_VAL 32 bit Tx Arb Limit Counter Value */
/* TXA_CTRL 8 bit Tx Arbiter Control Register */
/* TXA_TEST 8 bit Tx Arbiter Test Register */
/* TXA_STAT 8 bit Tx Arbiter Status Register */
/* Q_BC 32 bit Current Byte Counter */
/* Rx BMU Control / Status Registers (Yukon-2) */
/* Tx BMU Control / Status Registers (Yukon-2) */
/* Bit 31: same as for Rx */
/* Bit 10..0: same as for Rx */
/* Q_F 32 bit Flag Register */
/* Queue Prefetch Unt Offsts, use Y2_PREF_Q_ADDR() to addrss (Yukon-2 only) */
/* PREF_UNIT_CTRL_REG 32 bit Prefetch Control register */
/* RAM Buffer Register Offsets, use RB_ADDR(Queue, Offs) to access */
/* RB_START 32 bit RAM Buffer Start Address */
/* RB_END 32 bit RAM Buffer End Address */
/* RB_WP 32 bit RAM Buffer Write Pointer */
/* RB_RP 32 bit RAM Buffer Read Pointer */
/* RB_RX_UTPP 32 bit Rx Upper Threshold, Pause Pack */
/* RB_RX_LTPP 32 bit Rx Lower Threshold, Pause Pack */
/* RB_RX_UTHP 32 bit Rx Upper Threshold, High Prio */
/* RB_RX_LTHP 32 bit Rx Lower Threshold, High Prio */
/* RB_PC 32 bit RAM Buffer Packet Counter */
/* RB_LEV 32 bit RAM Buffer Level Register */
/* RB_TST2 8 bit RAM Buffer Test Register 2 */
/* RB_TST1 8 bit RAM Buffer Test Register 1 */
/* RB_CTRL 8 bit RAM Buffer Control Register */
/* RAM Buffer High Pause Threshold values */
/* Threshold values for Yukon-EC Ultra */
/* performance sensitive drivers should set this define to 0x80 */
/* Receive and Transmit Queues */
/* Minimum RAM Buffer Rx Queue Size */
/* Minimum RAM Buffer Tx Queue Size */
/* Percentage of queue size from whole memory. 80 % for receive */
#define WOL_CTL_DEFAULT \
/* WOL_MATCH_CTL 8 bit WOL Match Control Reg */
/* WOL_PATT_PME 8 bit WOL PME Match Enable (Yukon-2) */
/*
* Marvell-PHY Registers, indirect addressed over GMAC
*/
/* Marvell-specific registers */
/* 0x0b - 0x0e: reserved */
/* for 10/100 Fast Ethernet PHY (88E3082 only) */
/* PHY_MARV_PHY_CTRL 16 bit r/w PHY Specific Ctrl Reg */
/* for Yukon-2 Gigabit Ethernet PHY (88E1112 only) */
/* !!! Errata in spec. (1 = disable) */
/* 000=1x; 001=2x; 010=3x; 011=4x */
/* 100=5x; 101=6x; 110=7x; 111=8x */
/* for 10/100 Fast Ethernet PHY (88E3082 only) */
/* PHY_MARV_PHY_STAT 16 bit r/o PHY Specific Status Reg */
/* for 10/100 Fast Ethernet PHY (88E3082 only) */
/* PHY_MARV_INT_MASK 16 bit r/w Interrupt Mask Reg */
/* PHY_MARV_INT_STAT 16 bit r/o Interrupt Status Reg */
/* PHY_MARV_EXT_CTRL 16 bit r/w Ext. PHY Specific Ctrl */
/* (88E1011 only) */
/* (88E1011 only) */
/* (88E1111 only) */
/* !!! Errata in spec. (1 = disable) */
/* 00=1x; 01=2x; 10=3x; 11=4x */
/* 00=dis; 01=1x; 10=2x; 11=3x */
/* 01X=0; 110=2.5; 111=25 (MHz) */
/* 000=1x; 001=2x; 010=3x; 011=4x */
/* 100=5x; 101=6x; 110=7x; 111=8x */
/* PHY_MARV_LED_CTRL 16 bit r/w LED Control Reg */
/* (88E1111 only) */
/* (88E1011 only) */
/* PHY_MARV_LED_OVER 16 bit r/w Manual LED Override Reg */
#define MO_LED_NORM 0
/* PHY_MARV_EXT_CTRL_2 16 bit r/w Ext. PHY Specific Ctrl 2 */
/* PHY_MARV_EXT_P_STAT 16 bit r/w Ext. PHY Specific Status */
/* (88E1111 only) */
/* PHY_MARV_CABLE_DIAG 16 bit r/o Cable Diagnostic Reg */
/* (88E1111 only) */
/* (88E1111 only) */
/* values for Cable Diagnostic Status (11=fail; 00=OK; 10=open; 01=short) */
#define CABD_STAT_NORMAL 0
/* for 10/100 Fast Ethernet PHY (88E3082 only) */
/* PHY_MARV_FE_LED_PAR 16 bit r/w LED Parallel Select Reg. */
/* PHY_MARV_FE_SPEC_2 16 bit r/w Specific Control Reg. 2 */
/* for Yukon-2 Gigabit Ethernet PHY (88E1112 only) */
/* PHY_MARV_PHY_CTRL (page 1) 16 bit r/w Fiber Specific Ctrl */
/* PHY_MARV_PHY_CTRL (page 2) 16 bit r/w MAC Specific Ctrl */
/* PHY_MARV_PHY_CTRL (page 3) 16 bit r/w LED Control Reg. */
/* PHY_MARV_PHY_STAT (page 3) 16 bit r/w Polarity Control Reg. */
/*
* GMAC registers
*
* The GMAC registers are 16 or 32 bits wide.
* The GMACs host processor interface is 16 bits wide,
* therefore ALL registers will be addressed with 16 bit accesses.
*
* Note: NA reg = Network Address e.g DA, SA etc.
*/
/* Port Registers */
/* Source Address Registers */
/* Multicast Address Hash Registers */
/* Interrupt Source Registers */
/* Interrupt Mask Registers */
/* Serial Management Interface (SMI) Registers */
/* MIB Counters */
/*
* MIB Counters base address definitions (low word) -
* use offset 4 for access to high word (32 bit r/o)
*/
/*
* GMAC Bit Definitions
*
* If the bit access behaviour differs from the register access behaviour
* (r/w, r/o) this is documented after the bit number.
* The following bit access behaviours are used:
* (sc) self clearing
* (r/o) read only
*/
/* GM_GP_STAT 16 bit r/o General Purpose Status Register */
/* GM_GP_CTRL 16 bit r/w General Purpose Control Register */
/* GM_TX_CTRL 16 bit r/w Transmit Control Register */
/* (Yukon-2 only) */
/* GM_RX_CTRL 16 bit r/w Receive Control Register */
/* GM_TX_PARAM 16 bit r/w Transmit Parameter Register */
/* (Yukon-2 only) */
/* GM_SERIAL_MODE 16 bit r/w Serial Mode Register */
/* r/o on Yukon, r/w on Yukon-EC */
/* GM_SMI_CTRL 16 bit r/w SMI Control Register */
/* GM_PHY_ADDR 16 bit r/w GPHY Address Register */
/* Receive Frame Status Encoding */
#define GMR_FS_ANY_ERR ( \
GMR_FS_RX_FF_OV | \
GMR_FS_CRC_ERR | \
GMR_FS_FRAGMENT | \
GMR_FS_LONG_ERR | \
GMR_FS_MII_ERR | \
GMR_FS_BAD_FC | \
GMR_FS_GOOD_FC | \
GMR_FS_UN_SIZE | \
/* Rx GMAC FIFO Flush Mask (default) */
/* Receive and Transmit GMAC FIFO Registers (YUKON only) */
/* RX_GMF_EA 32 bit Rx GMAC FIFO End Address */
/* RX_GMF_AF_THR 32 bit Rx GMAC FIFO Almost Full Thresh. */
/* RX_GMF_WP 32 bit Rx GMAC FIFO Write Pointer */
/* RX_GMF_WLEV 32 bit Rx GMAC FIFO Write Level */
/* RX_GMF_RP 32 bit Rx GMAC FIFO Read Pointer */
/* RX_GMF_RLEV 32 bit Rx GMAC FIFO Read Level */
/* TX_GMF_EA 32 bit Tx GMAC FIFO End Address */
/* TX_GMF_AE_THR 32 bit Tx GMAC FIFO Almost Empty Thresh. */
/* TX_GMF_WP 32 bit Tx GMAC FIFO Write Pointer */
/* TX_GMF_WSP 32 bit Tx GMAC FIFO Write Shadow Pointer */
/* TX_GMF_WLEV 32 bit Tx GMAC FIFO Write Level */
/* TX_GMF_RP 32 bit Tx GMAC FIFO Read Pointer */
/* TX_GMF_RSTP 32 bit Tx GMAC FIFO Restart Pointer */
/* TX_GMF_RLEV 32 bit Tx GMAC FIFO Read Level */
/* Bits 15..8: same as for RX_GMF_CTRL_T */
/* Bits 3..0: same as for RX_GMF_CTRL_T */
/* GMAC_TI_ST_CTRL 8 bit Time Stamp Timer Ctrl Reg (YUKON only) */
/* POLL_CTRL 32 bit Polling Unit control register (Yukon-2 only) */
/* B28_Y2_ASF_STAT_CMD 32 bit ASF Status and Command Reg */
/* This register is used by the host driver software */
/* B28_Y2_ASF_HOST_COM 32 bit ASF Host Communication Reg */
/* This register is used by the ASF firmware */
/* STAT_CTRL 32 bit Status BMU control register (Yukon-2 only) */
/* GMAC_CTRL 32 bit GMAC Control Reg (YUKON only) */
/* GPHY_CTRL 32 bit GPHY Control Reg (YUKON only) */
/* GMAC_IRQ_SRC 8 bit GMAC Interrupt Source Reg (YUKON only) */
/* GMAC_IRQ_MSK 8 bit GMAC Interrupt Mask Reg (YUKON only) */
/* GMAC_LINK_CTRL 16 bit GMAC Link Control Reg (YUKON only) */
#define YGE_PORT_A 0
/* Register access macros */
/* Descriptor access. */
/*
* NB: Status & Address fields are the same.
*/
sizeof (yge_desc_t), (flags))
/* GPHY address (bits 15..11 of SMI control reg) */
#define PHY_ADDR_MARV 0
/*
* At first I guessed 8 bytes, the size of a single descriptor, would be
* required alignment constraints. But, it seems that Yukon II have 4096
* bytes boundary alignment constraints.
*/
/* Forward decl. */
/* descriptor data structure */
struct yge_desc {
};
struct yge_ring {
int r_num;
};
/* mask and shift value to get Tx async queue status for port 1 */
#define STLE_TXA1_SHIFTL 0
/* mask and shift value to get Tx sync queue status for port 1 */
/* mask and shift value to get Tx async queue status for port 2 */
/* this one shifts up */
/* mask and shift value to get Tx sync queue status for port 2 */
#define STLE_TXS2_SHIFTL 0
/* YUKON-2 bit values */
/* YUKON-2 Control flags */
/* YUKON-2 STATUS opcodes defines */
/* YUKON-2 SPECIAL opcodes defines */
/* Descriptor Bit Definition */
/* TxCtrl Transmit Buffer Control Field */
/* RxCtrl Receive Buffer Control Field */
/* TxCtrl specific bits */
/* RxCtrl specific bits */
/* Bit 23..16: BMU Check Opcodes */
/*
* It seems that the hardware requires extra decriptors(LEs) to offload
*
* 1 descriptor VLAN hardware tag insertion.
* 1 descriptor for TSO(TCP Segmentation Offload)
* 1 descriptor for 64bits DMA : Not applicatable due to the use of
* BUS_SPACE_MAXADDR_32BIT in parent DMA tag creation.
*/
/*
* Jumbo buffer stuff. Note that we must allocate more jumbo
* buffers than there are descriptors in the receive ring. This
* is because we don't know how long it will take for a packet
* to be released after we hand it off to the upper protocol
* layers. To be safe, we allocate 1.5 times the number of
* receive descriptors.
*/
struct yge_buf {
/* Note: We could conceivably change this to support 64-bit */
};
typedef enum {
} yge_bus_t;
struct yge_hw_stats {
/* Rx stats. */
/* Tx stats. */
/* Soft stats. */
};
/* Softc for the Marvell Yukon II controller. */
struct yge_dev {
const char *d_product;
const char *d_model;
int d_clock;
int d_txqsize;
int d_rxqsize;
int d_process_limit;
int d_stat_cons;
/* task stuff */
int d_task_flags;
/* interrupt stuff */
int d_intrsize;
int d_intrcap;
int d_intrcnt;
};
/*
* Locking hierarchy.
*
* RX lock protects receive resources, status ring, hardware
* interrupts, etc. It is always acquired first.
*
* TX lock used to protect transmit exclusive resources.
*
* PHY lock used to protect PHY and MII bus stuff. Leaf lock.
*
* DEV lock is synthetic and grabs all locks. This should be used
* when changing any state that is shared between receive and transmit,
* or global values such as the suspended flag. It should never be
* held on hot code paths, but is frequently used for extra safety on
* certain slower paths, such as when changing the receive filters.
*
* All of these locks are shaerd between both ports on a multi-port device.
* However, this shouldn't be much of a problem since such devices are
* rare. Furthermore, its not possible to fully seperate the locking
* because they share low level resources (such as the status ring.)
*
* One more note: it is *vital* that entry points into the GLDv3 or
* mii modules are not called while holding any of these locks. That
* can result in deadlock.
*/
/*
* Task locking.
*
* No other locks should be held when this is.
*/
/* Softc for each logical interface. */
struct yge_port {
int p_ppa;
int p_framesize;
/* transmit stuff */
int p_tx_wdog;
/* receive stuff */
int p_rx_putwm;
int p_detach;
/* receive filter stuff */
};
/*
* Chip Feature and Marvell special case support
*/
((ReqFeature) & 0x0fffffffUL)) != 0)
#define HW_FEAT_LIST 0
/* DWORD 0: Features */
/* DWORD 1: Deviations */
/* compl&Stat BMU deadl) */
/* with odd offset) */
/* for Yu-L Rev. A0 only */
/* DWORD 2: Deviations */
#endif /* _YGE_H */