blob: d48d854f40a7cb98026a139e1979cb6e23ea2961 [file] [log] [blame]
/*
* Copyright(c) Realtek Semiconductor Corporation, 2008
* All rights reserved.
*
* $Revision: 28599 $
* $Date: 2012-05-07 09:41:37 +0800 (星期一, 07 五月 2012) $
*
* Purpose : Definition function prototype of RTK API.
*
* Feature : Function prototype definition
*
*/
#ifndef __RTL8367B_INIT_H__
#define __RTL8367B_INIT_H__
#include "../ruby.h"
#include "malloc.h"
#define _LITTLE_ENDIAN
#undef CHIP_RTL8365MB
#define CHIP_RTL8363SB
#define RTL8367B_REG_DIGITAL_INTERFACE_SELECT 0x1305
#define RTL8367B_SELECT_GMII_1_OFFSET 4
#define RTL8367B_SELECT_GMII_1_MASK 0xF0
#define RTL8367B_SELECT_GMII_0_OFFSET 0
#define RTL8367B_SELECT_GMII_0_MASK 0xF
#define RTL8367B_REG_DIGITAL_INTERFACE_SELECT_1 0x13c3
#define RTL8367B_SKIP_MII_2_RXER_OFFSET 4
#define RTL8367B_SKIP_MII_2_RXER_MASK 0x10
#define RTL8367B_SELECT_RGMII_2_OFFSET 0
#define RTL8367B_SELECT_RGMII_2_MASK 0xF
#define RTL8367B_REG_EXT0_RGMXF 0x1306
#define RTL8367B_REG_EXT1_RGMXF 0x1307
#define RTL8367B_REG_EXT2_RGMXF 0x13c5
#define RTL8367B_REGBITLENGTH 16
#define RTL8367B_REGDATAMAX 0xFFFF
#define RTL8367B_MAC7 7
#define RTL8367B_EXTNO 3
#define RTL8367B_EXT0_RGTX_INV_OFFSET 6
#define RTL8367B_EXT0_RGTX_INV_MASK 0x40
#define RTL8367B_EXT0_RGRX_INV_OFFSET 5
#define RTL8367B_EXT0_RGRX_INV_MASK 0x20
#define RTL8367B_EXT0_RGMXF_OFFSET 0
#define RTL8367B_EXT0_RGMXF_MASK 0x1F
#define RTL8367B_EXT1_RGTX_INV_OFFSET 6
#define RTL8367B_EXT1_RGTX_INV_MASK 0x40
#define RTL8367B_EXT1_RGRX_INV_OFFSET 5
#define RTL8367B_EXT1_RGRX_INV_MASK 0x20
#define RTL8367B_EXT1_RGMXF_OFFSET 0
#define RTL8367B_EXT1_RGMXF_MASK 0x1F
#define RTL8367B_REG_EXT_TXC_DLY 0x13f9
#define RTL8367B_EXT1_GMII_TX_DELAY_OFFSET 12
#define RTL8367B_EXT1_GMII_TX_DELAY_MASK 0x7000
#define RTL8367B_EXT0_GMII_TX_DELAY_OFFSET 9
#define RTL8367B_EXT0_GMII_TX_DELAY_MASK 0xE00
#define RTL8367B_EXT2_RGMII_TX_DELAY_OFFSET 6
#define RTL8367B_EXT2_RGMII_TX_DELAY_MASK 0x1C0
#define RTL8367B_EXT1_RGMII_TX_DELAY_OFFSET 3
#define RTL8367B_EXT1_RGMII_TX_DELAY_MASK 0x38
#define RTL8367B_EXT0_RGMII_TX_DELAY_OFFSET 0
#define RTL8367B_EXT0_RGMII_TX_DELAY_MASK 0x7
#define RTL8367B_REG_BYPASS_LINE_RATE 0x03f7
#define RTL8367B_REG_DIGITAL_INTERFACE0_FORCE 0x1310
#define RTL8367B_GMII_0_FORCE_OFFSET 12
#define RTL8367B_GMII_0_FORCE_MASK 0x1000
#define RTL8367B_RGMII_0_FORCE_OFFSET 0
#define RTL8367B_RGMII_0_FORCE_MASK 0xFFF
#define RTL8367B_REG_DIGITAL_INTERFACE1_FORCE 0x1311
#define RTL8367B_GMII_1_FORCE_OFFSET 12
#define RTL8367B_GMII_1_FORCE_MASK 0x1000
#define RTL8367B_RGMII_1_FORCE_OFFSET 0
#define RTL8367B_RGMII_1_FORCE_MASK 0xFFF
#define RTL8367B_REG_DIGITAL_INTERFACE2_FORCE 0x13c4
#define RTL8367B_GMII_2_FORCE_OFFSET 12
#define RTL8367B_GMII_2_FORCE_MASK 0x1000
#define RTL8367B_RGMII_2_FORCE_OFFSET 0
#define RTL8367B_RGMII_2_FORCE_MASK 0xFFF
#define RTK_INDRECT_ACCESS_CRTL 0x1f00
#define RTK_INDRECT_ACCESS_STATUS 0x1f01
#define RTK_INDRECT_ACCESS_ADDRESS 0x1f02
#define RTK_INDRECT_ACCESS_WRITE_DATA 0x1f03
#define RTK_INDRECT_ACCESS_READ_DATA 0x1f04
#define RTK_INDRECT_ACCESS_DELAY 0x1f80
#define RTK_INDRECT_ACCESS_BURST 0x1f81
#define RTK_RW_MASK 0x2
#define RTK_CMD_MASK 0x1
#define RTK_PHY_BUSY_OFFSET 2
#define RTK_IVL_MODE_FID 0xFFFF
#define RTL8367B_REG_INDRECT_ACCESS_CTRL 0x1f00
#define RTL8367B_RW_OFFSET 1
#define RTL8367B_RW_MASK 0x2
#define RTL8367B_CMD_OFFSET 0
#define RTL8367B_CMD_MASK 0x1
#define RTL8367B_REG_INDRECT_ACCESS_STATUS 0x1f01
#define RTL8367B_INDRECT_ACCESS_STATUS_OFFSET 2
#define RTL8367B_INDRECT_ACCESS_STATUS_MASK 0x4
#define RTL8367B_REG_INDRECT_ACCESS_ADDRESS 0x1f02
#define RTL8367B_REG_INDRECT_ACCESS_WRITE_DATA 0x1f03
#define RTL8367B_REG_INDRECT_ACCESS_READ_DATA 0x1f04
typedef uint32_t rtk_api_ret_t;
typedef uint32_t ret_t;
typedef uint64_t rtk_u_long_t;
typedef uint32_t rtk_data_t;
#define HERE do { if (0) printf("%s:%d:%s\n", __FILE__, __LINE__, __FUNCTION__); } while(0)
#define MDIO_DEBUG 0
#define RGMII_TIMING_DEBUG 0
#define SMI_SWEEP_MAX 0x8000
/*
* Data Type Declaration
*/
typedef enum rt_error_code_e
{
RT_ERR_FAILED = -1, /* General Error */
/* 0x0000xxxx for common error code */
RT_ERR_OK = 0, /* 0x00000000, OK */
RT_ERR_INPUT, /* 0x00000001, invalid input parameter */
RT_ERR_UNIT_ID, /* 0x00000002, invalid unit id */
RT_ERR_PORT_ID, /* 0x00000003, invalid port id */
RT_ERR_PORT_MASK, /* 0x00000004, invalid port mask */
RT_ERR_PORT_LINKDOWN, /* 0x00000005, link down port status */
RT_ERR_ENTRY_INDEX, /* 0x00000006, invalid entry index */
RT_ERR_NULL_POINTER, /* 0x00000007, input parameter is null pointer */
RT_ERR_QUEUE_ID, /* 0x00000008, invalid queue id */
RT_ERR_QUEUE_NUM, /* 0x00000009, invalid queue number */
RT_ERR_BUSYWAIT_TIMEOUT, /* 0x0000000a, busy watting time out */
RT_ERR_MAC, /* 0x0000000b, invalid mac address */
RT_ERR_OUT_OF_RANGE, /* 0x0000000c, input parameter out of range */
RT_ERR_CHIP_NOT_SUPPORTED, /* 0x0000000d, functions not supported by this chip model */
RT_ERR_SMI, /* 0x0000000e, SMI error */
RT_ERR_NOT_INIT, /* 0x0000000f, The module is not initial */
RT_ERR_CHIP_NOT_FOUND, /* 0x00000010, The chip can not found */
RT_ERR_NOT_ALLOWED, /* 0x00000011, actions not allowed by the function */
RT_ERR_DRIVER_NOT_FOUND, /* 0x00000012, The driver can not found */
RT_ERR_SEM_LOCK_FAILED, /* 0x00000013, Failed to lock semaphore */
RT_ERR_SEM_UNLOCK_FAILED, /* 0x00000014, Failed to unlock semaphore */
RT_ERR_ENABLE, /* 0x00000015, invalid enable parameter */
RT_ERR_TBL_FULL, /* 0x00000016, input table full */
/* 0x000exxxx for port ability */
RT_ERR_PHY_PAGE_ID = 0x000e0000, /* 0x000e0000, invalid PHY page id */
RT_ERR_PHY_REG_ID, /* 0x000e0001, invalid PHY reg id */
RT_ERR_PHY_DATAMASK, /* 0x000e0002, invalid PHY data mask */
RT_ERR_PHY_AUTO_NEGO_MODE, /* 0x000e0003, invalid PHY auto-negotiation mode*/
RT_ERR_PHY_SPEED, /* 0x000e0004, invalid PHY speed setting */
RT_ERR_PHY_DUPLEX, /* 0x000e0005, invalid PHY duplex setting */
RT_ERR_PHY_FORCE_ABILITY, /* 0x000e0006, invalid PHY force mode ability parameter */
RT_ERR_PHY_FORCE_1000, /* 0x000e0007, invalid PHY force mode 1G speed setting */
RT_ERR_PHY_TXRX, /* 0x000e0008, invalid PHY tx/rx */
RT_ERR_PHY_ID, /* 0x000e0009, invalid PHY id */
RT_ERR_PHY_RTCT_NOT_FINISH, /* 0x000e000a, PHY RTCT in progress */
} rt_error_code_t;
typedef enum rtk_enable_e
{
DISABLED = 0,
ENABLED,
RTK_ENABLE_END
} rtk_enable_t;
typedef enum rtk_port_linkStatus_e
{
PORT_LINKDOWN = 0,
PORT_LINKUP,
PORT_LINKSTATUS_END
} rtk_port_linkStatus_t;
/* enum for port current link speed */
enum SPEEDMODE
{
SPD_10M = 0,
SPD_100M,
SPD_1000M
};
/* enum for mac link mode */
enum LINKMODE
{
MAC_NORMAL = 0,
MAC_FORCE,
};
/* enum for port current link duplex mode */
enum DUPLEXMODE
{
HALF_DUPLEX = 0,
FULL_DUPLEX
};
/* enum for port current MST mode */
enum MSTMODE
{
SLAVE_MODE= 0,
MASTER_MODE
};
enum EXTMODE
{
EXT_DISABLE = 0,
EXT_RGMII,
EXT_MII_MAC,
EXT_MII_PHY,
EXT_TMII_MAC,
EXT_TMII_PHY,
EXT_GMII,
EXT_RMII_MAC,
EXT_RMII_PHY,
EXT_END
};
typedef struct rtk_port_mac_ability_s
{
uint32_t forcemode;
uint32_t speed;
uint32_t duplex;
uint32_t link;
uint32_t nway;
uint32_t txpause;
uint32_t rxpause;
} rtk_port_mac_ability_t;
typedef enum rtk_mode_ext_e
{
MODE_EXT_DISABLE = 0,
MODE_EXT_RGMII,
MODE_EXT_MII_MAC,
MODE_EXT_MII_PHY,
MODE_EXT_TMII_MAC,
MODE_EXT_TMII_PHY,
MODE_EXT_GMII,
MODE_EXT_RMII_MAC,
MODE_EXT_RMII_PHY,
MODE_EXT_RGMII_33V,
MODE_EXT_END
} rtk_mode_ext_t;
typedef enum rtk_ext_port_e
{
EXT_PORT_0 = 0,
EXT_PORT_1,
EXT_PORT_2,
EXT_PORT_END
} rtk_ext_port_t;
typedef struct rtl8367b_port_ability_s {
#ifdef _LITTLE_ENDIAN
uint16_t speed:2;
uint16_t duplex:1;
uint16_t reserve1:1;
uint16_t link:1;
uint16_t rxpause:1;
uint16_t txpause:1;
uint16_t nway:1;
uint16_t mstmode:1;
uint16_t mstfault:1;
uint16_t reserve2:2;
uint16_t forcemode:1;
uint16_t reserve3:3;
#else
uint16_t reserve3:3;
uint16_t forcemode:1;
uint16_t reserve2:2;
uint16_t mstfault:1;
uint16_t mstmode:1;
uint16_t nway:1;
uint16_t txpause:1;
uint16_t rxpause:1;
uint16_t link:1;
uint16_t reserve1:1;
uint16_t duplex:1;
uint16_t speed:2;
#endif
} rtl8367b_port_ability_t;
#define RTK_MAX_NUM_OF_INTERRUPT_TYPE 2
#define RTK_TOTAL_NUM_OF_WORD_FOR_1BIT_PORT_LIST 1
#define RTK_MAX_NUM_OF_PRIORITY 8
#define RTK_MAX_NUM_OF_QUEUE 8
#define RTK_MAX_NUM_OF_TRUNK_HASH_VAL 1
#define RTK_MAX_NUM_OF_PORT 8
#define RTK_PORT_ID_MAX (RTK_MAX_NUM_OF_PORT-1)
#define RTK_PHY_ID_MAX (RTK_MAX_NUM_OF_PORT-4)
#define RTK_PORT_COMBO_ID 4
#define RTK_MAX_NUM_OF_PROTO_TYPE 0xFFFF
#define RTK_MAX_NUM_OF_MSTI 0xF
#define RTK_MAX_NUM_OF_LEARN_LIMIT 0x840
#define RTK_MAX_PORT_MASK 0xFF
#define RTK_EFID_MAX 0x7
#define RTK_FID_MAX 0xF
#define RTK_MAX_NUM_OF_FILTER_TYPE 5
#define RTK_MAX_NUM_OF_FILTER_FIELD 8
#define RTL8367B_PHY_INTERNALNOMAX 0x4
#define RTL8367B_PHY_REGNOMAX 0x1F
#define RTL8367B_PHY_EXTERNALMAX 0x7
#define RTL8367B_PHY_BASE 0x2000
#define RTL8367B_PHY_EXT_BASE 0xA000
#define RTL8367B_PHY_OFFSET 5
#define RTL8367B_PHY_EXT_OFFSET 9
#define RTL8367B_PHY_PAGE_ADDRESS 31
#define RTL8367B_QTN_EXT_PHY_ADDR_MIN 1
#define RTL8367B_QTN_EXT_PHY_ADDR_MAX 2
rtk_api_ret_t rtk_port_macForceLinkExt_set(rtk_ext_port_t port, rtk_mode_ext_t mode, rtk_port_mac_ability_t *pPortability);
rtk_api_ret_t rtk_port_rgmiiDelayExt_set(rtk_ext_port_t port, rtk_data_t txDelay, rtk_data_t rxDelay);
rtk_api_ret_t rtk_switch_init(void);
struct emac_private;
ret_t rtl8367b_poll_linkup(struct emac_private *priv);
ret_t rtl8367b_init(struct emac_private *priv, uint32_t emac_cfg);
ret_t rtl8367b_setAsicRegBit(uint32_t reg, uint32_t bit, uint32_t value);
ret_t rtl8367b_getAsicRegBit(uint32_t reg, uint32_t bit, uint32_t *pValue);
ret_t rtl8367b_setAsicRegBits(uint32_t reg, uint32_t bits, uint32_t value);
ret_t rtl8367b_getAsicRegBits(uint32_t reg, uint32_t bits, uint32_t *pValue);
ret_t rtl8367b_setAsicReg(uint32_t reg, uint32_t value);
ret_t rtl8367b_getAsicReg(uint32_t reg, uint32_t *pValue);
ret_t rtl8367b_setAsicPortExtMode(uint32_t id, uint32_t mode);
ret_t rtl8367b_getAsicPortForceLinkExt(uint32_t id, rtl8367b_port_ability_t *pPortAbility);
ret_t rtl8367b_setAsicPortForceLinkExt(uint32_t id, rtl8367b_port_ability_t *pPortAbility);
ret_t rtl8367b_setAsicPHYReg(uint32_t phyNo, uint32_t phyAddr, uint32_t regData);
ret_t rtl8367b_getAsicPHYReg(uint32_t phyNo, uint32_t phyAddr, uint32_t* pRegData);
void mdio_base_set(unsigned int mdio_base);
#endif /* __RTL8367B_INIT_H__ */