X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fngbe%2Fbase%2Fngbe_type.h;h=310d32ecfa58829ac32ac85727951b0ef68f47b2;hb=f40e9f0e2278daf72d7f308f17e5f591d3ce8b09;hp=93d0799852ee829003a5f30af204d6475cbf7a2e;hpb=fdb1e851975a4dea7d9a6f058f12cfb6813bff9b;p=dpdk.git diff --git a/drivers/net/ngbe/base/ngbe_type.h b/drivers/net/ngbe/base/ngbe_type.h index 93d0799852..310d32ecfa 100644 --- a/drivers/net/ngbe/base/ngbe_type.h +++ b/drivers/net/ngbe/base/ngbe_type.h @@ -8,9 +8,11 @@ #define NGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ +#define NGBE_FRAME_SIZE_MAX (9728) /* Maximum frame size, +FCS */ #define NGBE_FRAME_SIZE_DFT (1522) /* Default frame size, +FCS */ #define NGBE_NUM_POOL (32) #define NGBE_MAX_QP (8) +#define NGBE_MAX_UTA 128 #define NGBE_ALIGN 128 /* as intel did */ #define NGBE_ISB_SIZE 16 @@ -65,9 +67,19 @@ enum ngbe_media_type { ngbe_media_type_virtual }; +/* Flow Control Settings */ +enum ngbe_fc_mode { + ngbe_fc_none = 0, + ngbe_fc_rx_pause, + ngbe_fc_tx_pause, + ngbe_fc_full, + ngbe_fc_default +}; + struct ngbe_hw; struct ngbe_addr_filter_info { + u32 num_mc_addrs; u32 mta_in_use; }; @@ -79,6 +91,19 @@ struct ngbe_bus_info { u8 lan_id; }; +/* Flow control parameters */ +struct ngbe_fc_info { + u32 high_water; /* Flow Ctrl High-water */ + u32 low_water; /* Flow Ctrl Low-water */ + u16 pause_time; /* Flow Control Pause timer */ + bool send_xon; /* Flow control send XON */ + bool strict_ieee; /* Strict IEEE mode */ + bool disable_fc_autoneg; /* Do not autonegotiate FC */ + bool fc_was_autonegged; /* Is current_mode the result of autonegging? */ + enum ngbe_fc_mode current_mode; /* FC mode in effect */ + enum ngbe_fc_mode requested_mode; /* FC mode requested by caller */ +}; + /* Statistics counters collected by the MAC */ /* PB[] RxTx */ struct ngbe_pb_stats { @@ -200,8 +225,13 @@ struct ngbe_hw_stats { }; +/* iterator type for walking multicast address lists */ +typedef u8* (*ngbe_mc_addr_itr) (struct ngbe_hw *hw, u8 **mc_addr_ptr, + u32 *vmdq); + struct ngbe_rom_info { s32 (*init_params)(struct ngbe_hw *hw); + s32 (*read32)(struct ngbe_hw *hw, u32 addr, u32 *data); s32 (*validate_checksum)(struct ngbe_hw *hw, u16 *checksum_val); enum ngbe_eeprom_type type; @@ -242,7 +272,23 @@ struct ngbe_mac_info { s32 (*set_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq); s32 (*clear_vmdq)(struct ngbe_hw *hw, u32 rar, u32 vmdq); s32 (*init_rx_addrs)(struct ngbe_hw *hw); + s32 (*update_mc_addr_list)(struct ngbe_hw *hw, u8 *mc_addr_list, + u32 mc_addr_count, + ngbe_mc_addr_itr func, bool clear); s32 (*clear_vfta)(struct ngbe_hw *hw); + s32 (*set_vfta)(struct ngbe_hw *hw, u32 vlan, + u32 vind, bool vlan_on, bool vlvf_bypass); + s32 (*set_vlvf)(struct ngbe_hw *hw, u32 vlan, u32 vind, + bool vlan_on, u32 *vfta_delta, u32 vfta, + bool vlvf_bypass); + void (*set_mac_anti_spoofing)(struct ngbe_hw *hw, bool enable, int vf); + void (*set_vlan_anti_spoofing)(struct ngbe_hw *hw, + bool enable, int vf); + + /* Flow Control */ + s32 (*fc_enable)(struct ngbe_hw *hw); + s32 (*setup_fc)(struct ngbe_hw *hw); + void (*fc_autoneg)(struct ngbe_hw *hw); /* Manageability interface */ s32 (*init_thermal_sensor_thresh)(struct ngbe_hw *hw); @@ -251,6 +297,8 @@ struct ngbe_mac_info { enum ngbe_mac_type type; u8 addr[ETH_ADDR_LEN]; u8 perm_addr[ETH_ADDR_LEN]; +#define NGBE_MAX_MTA 128 + u32 mta_shadow[NGBE_MAX_MTA]; s32 mc_filter_type; u32 mcft_size; u32 vft_size; @@ -281,6 +329,10 @@ struct ngbe_phy_info { s32 (*setup_link)(struct ngbe_hw *hw, u32 speed, bool autoneg_wait_to_complete); s32 (*check_link)(struct ngbe_hw *hw, u32 *speed, bool *link_up); + s32 (*set_phy_power)(struct ngbe_hw *hw, bool on); + s32 (*get_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit); + s32 (*get_lp_adv_pause)(struct ngbe_hw *hw, u8 *pause_bit); + s32 (*set_pause_adv)(struct ngbe_hw *hw, u16 pause_bit); enum ngbe_media_type media_type; enum ngbe_phy_type type; @@ -292,6 +344,29 @@ struct ngbe_phy_info { u32 autoneg_advertised; }; +struct ngbe_mbx_stats { + u32 msgs_tx; + u32 msgs_rx; + + u32 acks; + u32 reqs; + u32 rsts; +}; + +struct ngbe_mbx_info { + void (*init_params)(struct ngbe_hw *hw); + s32 (*read)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); + s32 (*write)(struct ngbe_hw *hw, u32 *msg, u16 size, u16 vf_number); + s32 (*check_for_msg)(struct ngbe_hw *hw, u16 mbx_id); + s32 (*check_for_ack)(struct ngbe_hw *hw, u16 mbx_id); + s32 (*check_for_rst)(struct ngbe_hw *hw, u16 mbx_id); + + struct ngbe_mbx_stats stats; + u32 timeout; + u32 usec_delay; + u16 size; +}; + enum ngbe_isb_idx { NGBE_ISB_HEADER, NGBE_ISB_MISC, @@ -305,13 +380,16 @@ struct ngbe_hw { void *back; struct ngbe_mac_info mac; struct ngbe_addr_filter_info addr_ctrl; + struct ngbe_fc_info fc; struct ngbe_phy_info phy; struct ngbe_rom_info rom; struct ngbe_bus_info bus; + struct ngbe_mbx_info mbx; u16 device_id; u16 vendor_id; u16 sub_device_id; u16 sub_system_id; + u32 eeprom_id; bool adapter_stopped; uint64_t isb_dma; @@ -319,6 +397,8 @@ struct ngbe_hw { u16 nb_rx_queues; u16 nb_tx_queues; + u32 mode; + u32 q_rx_regs[8 * 4]; u32 q_tx_regs[8 * 4]; bool offset_loaded;