/* Single Media Direct board is the plain 577xx board with CX4/RJ45 jacks */ #define SINGLE_MEDIA_DIRECT(params) (params->num_phys == 1) /* Single Media board contains single external phy */ #define SINGLE_MEDIA(params) (params->num_phys == 2) /* Dual Media board contains two external phy with different media */ #define DUAL_MEDIA(params) (params->num_phys == 3)
/* Same configuration is shared between the XGXS and the first external phy */ #define LINK_CONFIG_SIZE (MAX_PHYS - 1) #define LINK_CONFIG_IDX(_phy_idx) ((_phy_idx == INT_PHY) ? \ 0 : (_phy_idx - 1)) /***********************************************************/ /* bnx2x_phy struct */ /* Defines the required arguments and function per phy */ /***********************************************************/ struct link_vars; struct link_params; struct bnx2x_phy;
/* The address in which version is located*/
u32 ver_addr;
u16 req_flow_ctrl;
u16 req_line_speed;
u32 speed_cap_mask;
u16 req_duplex;
u16 rsrv; /* Called per phy/port init, and it configures LASI, speed, autoneg,
duplex, flow control negotiation, etc. */
config_init_t config_init;
/* Called due to interrupt. It determines the link, speed */
read_status_t read_status;
/* Called when driver is unloading. Should reset the phy */
link_reset_t link_reset;
/* Set the loopback configuration for the phy */
config_loopback_t config_loopback;
/* Format the given raw number into str up to len */
format_fw_ver_t format_fw_ver;
/* Reset the phy (both ports) */
hw_reset_t hw_reset;
/* Set link led mode (on/off/oper)*/
set_link_led_t set_link_led;
/* Will be populated during common init */ struct bnx2x_phy phy[MAX_PHYS];
/* Will be populated during common init */
u8 num_phys;
u8 rsrv;
/* Used to configure the EEE Tx LPI timer, has several modes of *operation,accordingtobits29:28- *2'b00:Timerwillbeconfiguredbynvram,outputwillbethevalue *fromnvram. *2'b01:Timerwillbeconfiguredbynvram,outputwillbein *microseconds. *2'b10:bits1:0containannvramvaluewhichwillbeusedinstead *oftheonelocatedinthenvram.Outputwillbethatvalue. *2'b11:bits19:0containtheidletimerinmicroseconds;output *willbeinmicroseconds. *Bits31:30shouldbe2'b11inorderforEEEtobeenabled.
*/
u32 eee_mode; #define EEE_MODE_NVRAM_BALANCED_TIME (0xa00) #define EEE_MODE_NVRAM_AGGRESSIVE_TIME (0x100) #define EEE_MODE_NVRAM_LATENCY_TIME (0x6000) #define EEE_MODE_NVRAM_MASK (0x3) #define EEE_MODE_TIMER_MASK (0xfffff) #define EEE_MODE_OUTPUT_TIME (1<<28) #define EEE_MODE_OVERRIDE_NVRAM (1<<29) #define EEE_MODE_ENABLE_LPI (1<<30) #define EEE_MODE_ADV_LPI (1<<31)
u16 hw_led_mode; /* part of the hw_config read from the shmem */
u32 multi_phy_config;
/* Device pointer passed to all callback functions */ struct bnx2x *bp;
u16 req_fc_auto_adv; /* Should be set to TX / BOTH when
req_flow_ctrl is set to AUTO */
u16 link_flags; #define LINK_FLAGS_INT_DISABLED (1<<0) #define PHY_INITIALIZED (1<<1)
u32 lfa_base;
/* The same definitions as the shmem2 parameter */
u32 link_attr_sync;
};
/* Reset the link. Should be called when driver or interface goes down Beforecallingphyfirmwareupgrade,thereset_ext_physhouldbeset
to 0 */ int bnx2x_link_reset(struct link_params *params, struct link_vars *vars,
u8 reset_ext_phy); int bnx2x_lfa_reset(struct link_params *params, struct link_vars *vars); /* bnx2x_link_update should be called upon link interrupt */ int bnx2x_link_update(struct link_params *params, struct link_vars *vars);
/* use the following phy functions to read/write from external_phy Inordertouseittoread/writeinternalphyregisters,use DEFAULT_PHY_DEV_ADDRasdevad,and(_bank+(_addr&0xf))as
the register */ int bnx2x_phy_read(struct link_params *params, u8 phy_addr,
u8 devad, u16 reg, u16 *ret_val);
/* Reads the link_status from the shmem,
and update the link vars accordingly */ void bnx2x_link_status_update(struct link_params *input, struct link_vars *output); /* returns string representing the fw_version of the external phy */ int bnx2x_get_ext_phy_fw_version(struct link_params *params, u8 *version,
u16 len);
/* Set/Unset the led Basically,theCLCtakescareoftheledforthelink,butincaseoneneeds toset/unsettheledunnaturally,setthe"mode"toLED_MODE_OPERto
blink the led, and LED_MODE_OFF to set the led off.*/ int bnx2x_set_led(struct link_params *params, struct link_vars *vars, u8 mode, u32 speed); #define LED_MODE_OFF 0 #define LED_MODE_ON 1 #define LED_MODE_OPER 2 #define LED_MODE_FRONT_PANEL_OFF 3
/* bnx2x_handle_module_detect_int should be called upon module detection
interrupt */ void bnx2x_handle_module_detect_int(struct link_params *params);
/* Get the actual link status. In case it returns 0, link is up,
otherwise link is down*/ int bnx2x_test_link(struct link_params *params, struct link_vars *vars,
u8 is_serdes);
/* One-time initialization for external phy after power up */ int bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base_path[],
u32 shmem2_base_path[], u32 chip_id);
/* Reset the external PHY using GPIO */ void bnx2x_ext_phy_hw_reset(struct bnx2x *bp, u8 port);
/* Reset the external of SFX7101 */ void bnx2x_sfx7101_sp_sw_reset(struct bnx2x *bp, struct bnx2x_phy *phy);
/* Read "byte_cnt" bytes from address "addr" from the SFP+ EEPROM */ int bnx2x_read_sfp_module_eeprom(struct bnx2x_phy *phy, struct link_params *params, u8 dev_addr,
u16 addr, u16 byte_cnt, u8 *o_buf);
/* Check swap bit and adjust PHY order */
u32 bnx2x_phy_selection(struct link_params *params);
/* Probe the phys on board, and populate them in "params" */ int bnx2x_phy_probe(struct link_params *params);
/* Checks if fan failure detection is required on one of the phys on board */
u8 bnx2x_fan_failure_det_req(struct bnx2x *bp, u32 shmem_base,
u32 shmem2_base, u8 port);
/* Open / close the gate between the NIG and the BRB */ void bnx2x_set_rx_filter(struct link_params *params, u8 en);
/* DCBX structs */
/* Number of maximum COS per chip */ #define DCBX_E2E3_MAX_NUM_COS (2) #define DCBX_E3B0_MAX_NUM_COS_PORT0 (6) #define DCBX_E3B0_MAX_NUM_COS_PORT1 (3) #define DCBX_E3B0_MAX_NUM_COS ( \
MAXVAL(DCBX_E3B0_MAX_NUM_COS_PORT0, \
DCBX_E3B0_MAX_NUM_COS_PORT1))
struct bnx2x_ets_cos_params { enum bnx2x_cos_state state ; union { struct bnx2x_ets_bw_params bw_params; struct bnx2x_ets_sp_params sp_params;
} params;
};
struct bnx2x_ets_params {
u8 num_of_cos; /* Number of valid COS entries*/ struct bnx2x_ets_cos_params cos[DCBX_MAX_NUM_COS];
};
/* Used to update the PFC attributes in EMAC, BMAC, NIG and BRB *whenlinkisalreadyup
*/ int bnx2x_update_pfc(struct link_params *params, struct link_vars *vars, struct bnx2x_nig_brb_pfc_port_params *pfc_params);
/* Used to configure the ETS to disable */ int bnx2x_ets_disabled(struct link_params *params, struct link_vars *vars);
/* Used to configure the ETS to BW limited */ void bnx2x_ets_bw_limit(conststruct link_params *params, const u32 cos0_bw, const u32 cos1_bw);
/* Used to configure the ETS to strict */ int bnx2x_ets_strict(conststruct link_params *params, const u8 strict_cos);
/* Configure the COS to ETS according to BW and SP settings.*/ int bnx2x_ets_e3b0_config(conststruct link_params *params, conststruct link_vars *vars, struct bnx2x_ets_params *ets_params);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.