#include <linux/module.h>
#include <linux/device.h>
#include <linux/kmod.h>
#include <linux/mdio.h>
#include <linux/phy.h>
#include <linux/ethtool.h>
#include "xgbe.h"
#include "xgbe-common.h"
#define XGBE_PHY_PORT_SPEED_10 …
#define XGBE_PHY_PORT_SPEED_100 …
#define XGBE_PHY_PORT_SPEED_1000 …
#define XGBE_PHY_PORT_SPEED_2500 …
#define XGBE_PHY_PORT_SPEED_10000 …
#define XGBE_MUTEX_RELEASE …
#define XGBE_SFP_DIRECT …
#define XGBE_SFP_SERIAL_ID_ADDRESS …
#define XGBE_SFP_DIAG_INFO_ADDRESS …
#define XGBE_SFP_PHY_ADDRESS …
#define XGBE_GPIO_ADDRESS_PCA9555 …
#define XGBE_GPIO_NO_TX_FAULT …
#define XGBE_GPIO_NO_RATE_SELECT …
#define XGBE_GPIO_NO_MOD_ABSENT …
#define XGBE_GPIO_NO_RX_LOS …
#define XGBE_RATECHANGE_COUNT …
#define XGBE_CDR_DELAY_INIT …
#define XGBE_CDR_DELAY_INC …
#define XGBE_CDR_DELAY_MAX …
#define XGBE_RRC_FREQUENCY …
enum xgbe_port_mode { … };
enum xgbe_conn_type { … };
enum xgbe_sfp_comm { … };
enum xgbe_sfp_cable { … };
enum xgbe_sfp_base { … };
enum xgbe_sfp_speed { … };
#define XGBE_SFP_BASE_ID …
#define XGBE_SFP_ID_SFP …
#define XGBE_SFP_BASE_EXT_ID …
#define XGBE_SFP_EXT_ID_SFP …
#define XGBE_SFP_BASE_10GBE_CC …
#define XGBE_SFP_BASE_10GBE_CC_SR …
#define XGBE_SFP_BASE_10GBE_CC_LR …
#define XGBE_SFP_BASE_10GBE_CC_LRM …
#define XGBE_SFP_BASE_10GBE_CC_ER …
#define XGBE_SFP_BASE_1GBE_CC …
#define XGBE_SFP_BASE_1GBE_CC_SX …
#define XGBE_SFP_BASE_1GBE_CC_LX …
#define XGBE_SFP_BASE_1GBE_CC_CX …
#define XGBE_SFP_BASE_1GBE_CC_T …
#define XGBE_SFP_BASE_CABLE …
#define XGBE_SFP_BASE_CABLE_PASSIVE …
#define XGBE_SFP_BASE_CABLE_ACTIVE …
#define XGBE_SFP_BASE_BR …
#define XGBE_SFP_BASE_BR_1GBE_MIN …
#define XGBE_SFP_BASE_BR_10GBE_MIN …
#define XGBE_SFP_BASE_CU_CABLE_LEN …
#define XGBE_SFP_BASE_VENDOR_NAME …
#define XGBE_SFP_BASE_VENDOR_NAME_LEN …
#define XGBE_SFP_BASE_VENDOR_PN …
#define XGBE_SFP_BASE_VENDOR_PN_LEN …
#define XGBE_SFP_BASE_VENDOR_REV …
#define XGBE_SFP_BASE_VENDOR_REV_LEN …
#define XGBE_SFP_BASE_CC …
#define XGBE_SFP_BASE_VENDOR_SN …
#define XGBE_SFP_BASE_VENDOR_SN_LEN …
#define XGBE_SFP_EXTD_OPT1 …
#define XGBE_SFP_EXTD_OPT1_RX_LOS …
#define XGBE_SFP_EXTD_OPT1_TX_FAULT …
#define XGBE_SFP_EXTD_DIAG …
#define XGBE_SFP_EXTD_DIAG_ADDR_CHANGE …
#define XGBE_SFP_EXTD_SFF_8472 …
#define XGBE_SFP_EXTD_CC …
struct xgbe_sfp_eeprom { … };
#define XGBE_SFP_DIAGS_SUPPORTED(_x) …
#define XGBE_SFP_EEPROM_BASE_LEN …
#define XGBE_SFP_EEPROM_DIAG_LEN …
#define XGBE_SFP_EEPROM_MAX …
#define XGBE_BEL_FUSE_VENDOR …
#define XGBE_BEL_FUSE_PARTNO …
#define XGBE_MOLEX_VENDOR …
struct xgbe_sfp_ascii { … };
enum xgbe_mdio_reset { … };
enum xgbe_phy_redrv_if { … };
enum xgbe_phy_redrv_model { … };
enum xgbe_phy_redrv_mode { … };
#define XGBE_PHY_REDRV_MODE_REG …
struct xgbe_phy_data { … };
static DEFINE_MUTEX(xgbe_phy_comm_lock);
static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata);
static void xgbe_phy_rrc(struct xgbe_prv_data *pdata);
static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
enum xgbe_mb_cmd cmd,
enum xgbe_mb_subcmd sub_cmd);
static int xgbe_phy_i2c_xfer(struct xgbe_prv_data *pdata,
struct xgbe_i2c_op *i2c_op)
{ … }
static int xgbe_phy_redrv_write(struct xgbe_prv_data *pdata, unsigned int reg,
unsigned int val)
{ … }
static int xgbe_phy_i2c_write(struct xgbe_prv_data *pdata, unsigned int target,
void *val, unsigned int val_len)
{ … }
static int xgbe_phy_i2c_read(struct xgbe_prv_data *pdata, unsigned int target,
void *reg, unsigned int reg_len,
void *val, unsigned int val_len)
{ … }
static int xgbe_phy_sfp_put_mux(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_sfp_get_mux(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_put_comm_ownership(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_get_comm_ownership(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_mdio_mii_write_c22(struct xgbe_prv_data *pdata, int addr,
int reg, u16 val)
{ … }
static int xgbe_phy_mdio_mii_write_c45(struct xgbe_prv_data *pdata, int addr,
int devad, int reg, u16 val)
{ … }
static int xgbe_phy_i2c_mii_write(struct xgbe_prv_data *pdata, int reg, u16 val)
{ … }
static int xgbe_phy_mii_write_c22(struct mii_bus *mii, int addr, int reg,
u16 val)
{ … }
static int xgbe_phy_mii_write_c45(struct mii_bus *mii, int addr, int devad,
int reg, u16 val)
{ … }
static int xgbe_phy_mdio_mii_read_c22(struct xgbe_prv_data *pdata, int addr,
int reg)
{ … }
static int xgbe_phy_mdio_mii_read_c45(struct xgbe_prv_data *pdata, int addr,
int devad, int reg)
{ … }
static int xgbe_phy_i2c_mii_read(struct xgbe_prv_data *pdata, int reg)
{ … }
static int xgbe_phy_mii_read_c22(struct mii_bus *mii, int addr, int reg)
{ … }
static int xgbe_phy_mii_read_c45(struct mii_bus *mii, int addr, int devad,
int reg)
{ … }
static void xgbe_phy_sfp_phy_settings(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,
enum xgbe_sfp_speed sfp_speed)
{ … }
static void xgbe_phy_free_phy_device(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_finisar_phy_quirks(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_belfuse_phy_quirks(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_external_phy_quirks(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_find_phy_device(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_external_phy(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_check_sfp_rx_los(struct xgbe_phy_data *phy_data)
{ … }
static bool xgbe_phy_check_sfp_tx_fault(struct xgbe_phy_data *phy_data)
{ … }
static bool xgbe_phy_check_sfp_mod_absent(struct xgbe_phy_data *phy_data)
{ … }
static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_eeprom_info(struct xgbe_prv_data *pdata,
struct xgbe_sfp_eeprom *sfp_eeprom)
{ … }
static bool xgbe_phy_sfp_verify_eeprom(u8 cc_in, u8 *buf, unsigned int len)
{ … }
static int xgbe_phy_sfp_read_eeprom(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_signals(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_mod_absent(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_reset(struct xgbe_phy_data *phy_data)
{ … }
static void xgbe_phy_sfp_detect(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_module_eeprom(struct xgbe_prv_data *pdata,
struct ethtool_eeprom *eeprom, u8 *data)
{ … }
static int xgbe_phy_module_info(struct xgbe_prv_data *pdata,
struct ethtool_modinfo *modinfo)
{ … }
static void xgbe_phy_phydev_flowctrl(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_an37_sgmii_outcome(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_an37_outcome(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_an73_redrv_outcome(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_an73_outcome(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_an_outcome(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_an_advertising(struct xgbe_prv_data *pdata,
struct ethtool_link_ksettings *dlks)
{ … }
static int xgbe_phy_an_config(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_an_mode xgbe_phy_an_sfp_mode(struct xgbe_phy_data *phy_data)
{ … }
static enum xgbe_an_mode xgbe_phy_an_mode(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_set_redrv_mode_mdio(struct xgbe_prv_data *pdata,
enum xgbe_phy_redrv_mode mode)
{ … }
static int xgbe_phy_set_redrv_mode_i2c(struct xgbe_prv_data *pdata,
enum xgbe_phy_redrv_mode mode)
{ … }
static void xgbe_phy_set_redrv_mode(struct xgbe_prv_data *pdata)
{ … }
#define MAX_RX_ADAPT_RETRIES …
#define XGBE_PMA_RX_VAL_SIG_MASK …
static void xgbe_set_rx_adap_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static void xgbe_rx_adaptation(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_rx_adaptation(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_rx_reset(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_pll_ctrl(struct xgbe_prv_data *pdata, bool enable)
{ … }
static void xgbe_phy_perform_ratechange(struct xgbe_prv_data *pdata,
enum xgbe_mb_cmd cmd, enum xgbe_mb_subcmd sub_cmd)
{ … }
static void xgbe_phy_rrc(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_power_off(struct xgbe_prv_data *pdata)
{ … }
static bool enable_rx_adap(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
{ … }
static void xgbe_phy_sfi_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_x_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sgmii_1000_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sgmii_100_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sgmii_10_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_kr_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_kx_2500_mode(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_kx_1000_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_cur_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_switch_baset_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_switch_bp_2500_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_switch_bp_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_switch_mode(struct xgbe_prv_data *pdata)
{ … }
static enum xgbe_mode xgbe_phy_get_basex_mode(struct xgbe_phy_data *phy_data,
int speed)
{ … }
static enum xgbe_mode xgbe_phy_get_baset_mode(struct xgbe_phy_data *phy_data,
int speed)
{ … }
static enum xgbe_mode xgbe_phy_get_sfp_mode(struct xgbe_phy_data *phy_data,
int speed)
{ … }
static enum xgbe_mode xgbe_phy_get_bp_2500_mode(int speed)
{ … }
static enum xgbe_mode xgbe_phy_get_bp_mode(int speed)
{ … }
static enum xgbe_mode xgbe_phy_get_mode(struct xgbe_prv_data *pdata,
int speed)
{ … }
static void xgbe_phy_set_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
{ … }
static bool xgbe_phy_check_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode, bool advert)
{ … }
static bool xgbe_phy_use_basex_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static bool xgbe_phy_use_baset_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static bool xgbe_phy_use_sfp_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static bool xgbe_phy_use_bp_2500_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static bool xgbe_phy_use_bp_mode(struct xgbe_prv_data *pdata,
enum xgbe_mode mode)
{ … }
static bool xgbe_phy_use_mode(struct xgbe_prv_data *pdata, enum xgbe_mode mode)
{ … }
static bool xgbe_phy_valid_speed_basex_mode(struct xgbe_phy_data *phy_data,
int speed)
{ … }
static bool xgbe_phy_valid_speed_baset_mode(struct xgbe_prv_data *pdata,
int speed)
{ … }
static bool xgbe_phy_valid_speed_sfp_mode(struct xgbe_prv_data *pdata,
int speed)
{ … }
static bool xgbe_phy_valid_speed_bp_2500_mode(int speed)
{ … }
static bool xgbe_phy_valid_speed_bp_mode(int speed)
{ … }
static bool xgbe_phy_valid_speed(struct xgbe_prv_data *pdata, int speed)
{ … }
static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart)
{ … }
static void xgbe_phy_sfp_gpio_setup(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_comm_setup(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_sfp_setup(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_int_mdio_reset(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_i2c_mdio_reset(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_mdio_reset(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_redrv_error(struct xgbe_phy_data *phy_data)
{ … }
static int xgbe_phy_mdio_reset_setup(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_port_mode_mismatch(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_conn_type_mismatch(struct xgbe_prv_data *pdata)
{ … }
static bool xgbe_phy_port_enabled(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_cdr_track(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_cdr_notrack(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_kr_training_post(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_kr_training_pre(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_an_post(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_an_pre(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_stop(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_start(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_reset(struct xgbe_prv_data *pdata)
{ … }
static void xgbe_phy_exit(struct xgbe_prv_data *pdata)
{ … }
static int xgbe_phy_init(struct xgbe_prv_data *pdata)
{ … }
void xgbe_init_function_ptrs_phy_v2(struct xgbe_phy_if *phy_if)
{ … }