X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc.h;h=8c6c02fe49bd09bb95e5d1e8ff1529c5622a39e4;hb=c7c915e1e3c81fb51fa881efe89e694a0b5b8817;hp=2683bc51484025516ab2731a8ba05f7b901d290b;hpb=aaa3f5f0f79d0c4788f378886560042aa9d6aac7;p=dpdk.git diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 2683bc5148..8c6c02fe49 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -45,6 +45,13 @@ extern "C" { #define SFC_DEV_TO_PCI(eth_dev) \ RTE_DEV_TO_PCI((eth_dev)->device) +#if EFSYS_OPT_RX_SCALE +/** RSS key length (bytes) */ +#define SFC_RSS_KEY_SIZE 40 +/** RSS hash offloads mask */ +#define SFC_RSS_OFFLOADS (ETH_RSS_IP | ETH_RSS_TCP) +#endif + /* * +---------------+ * | UNINITIALIZED |<-----------+ @@ -67,6 +74,20 @@ extern "C" { * V |.dev_close * +---------------+------------+ * | CONFIGURED | + * +---------------+<-----------+ + * |.dev_start | + * V | + * +---------------+ | + * | STARTING |------------^ + * +---------------+ failed | + * |success | + * | +---------------+ + * | | STOPPING | + * | +---------------+ + * | ^ + * V |.dev_stop + * +---------------+------------+ + * | STARTED | * +---------------+ */ enum sfc_adapter_state { @@ -75,10 +96,20 @@ enum sfc_adapter_state { SFC_ADAPTER_CONFIGURING, SFC_ADAPTER_CONFIGURED, SFC_ADAPTER_CLOSING, + SFC_ADAPTER_STARTING, + SFC_ADAPTER_STARTED, + SFC_ADAPTER_STOPPING, SFC_ADAPTER_NSTATES }; +enum sfc_dev_filter_mode { + SFC_DEV_FILTER_MODE_PROMISC = 0, + SFC_DEV_FILTER_MODE_ALLMULTI, + + SFC_DEV_FILTER_NMODES +}; + enum sfc_mcdi_state { SFC_MCDI_UNINITIALIZED = 0, SFC_MCDI_INITIALIZED, @@ -93,6 +124,37 @@ struct sfc_mcdi { efsys_mem_t mem; enum sfc_mcdi_state state; efx_mcdi_transport_t transport; + bool logging; +}; + +struct sfc_intr { + efx_intr_type_t type; + rte_intr_callback_fn handler; + boolean_t lsc_intr; +}; + +struct sfc_evq_info; +struct sfc_rxq_info; +struct sfc_txq_info; + +struct sfc_port { + unsigned int lsc_seq; + + uint32_t phy_adv_cap_mask; + uint32_t phy_adv_cap; + + unsigned int flow_ctrl; + boolean_t flow_ctrl_autoneg; + size_t pdu; + + boolean_t promisc; + boolean_t allmulti; + + rte_spinlock_t mac_stats_lock; + uint64_t *mac_stats_buf; + efsys_mem_t mac_stats_dma_mem; + + uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES]; }; /* Adapter private data */ @@ -115,9 +177,38 @@ struct sfc_adapter { rte_spinlock_t nic_lock; struct sfc_mcdi mcdi; + struct sfc_intr intr; + struct sfc_port port; unsigned int rxq_max; unsigned int txq_max; + + unsigned int txq_max_entries; + + uint32_t evq_flags; + unsigned int evq_count; + struct sfc_evq_info *evq_info; + + unsigned int mgmt_evq_index; + rte_spinlock_t mgmt_evq_lock; + + unsigned int rxq_count; + struct sfc_rxq_info *rxq_info; + + unsigned int txq_count; + struct sfc_txq_info *txq_info; + + boolean_t tso; + + unsigned int rss_channels; + +#if EFSYS_OPT_RX_SCALE + efx_rx_scale_support_t rss_support; + efx_rx_hash_support_t hash_support; + efx_rx_hash_type_t rss_hash_types; + unsigned int rss_tbl[EFX_RSS_TBL_SIZE]; + uint8_t rss_key[SFC_RSS_KEY_SIZE]; +#endif }; /* @@ -143,6 +234,12 @@ sfc_adapter_lock(struct sfc_adapter *sa) rte_spinlock_lock(&sa->lock); } +static inline int +sfc_adapter_trylock(struct sfc_adapter *sa) +{ + return rte_spinlock_trylock(&sa->lock); +} + static inline void sfc_adapter_unlock(struct sfc_adapter *sa) { @@ -161,6 +258,8 @@ void sfc_dma_free(const struct sfc_adapter *sa, efsys_mem_t *esmp); int sfc_attach(struct sfc_adapter *sa); void sfc_detach(struct sfc_adapter *sa); +int sfc_start(struct sfc_adapter *sa); +void sfc_stop(struct sfc_adapter *sa); int sfc_mcdi_init(struct sfc_adapter *sa); void sfc_mcdi_fini(struct sfc_adapter *sa); @@ -168,6 +267,23 @@ void sfc_mcdi_fini(struct sfc_adapter *sa); int sfc_configure(struct sfc_adapter *sa); void sfc_close(struct sfc_adapter *sa); +int sfc_intr_attach(struct sfc_adapter *sa); +void sfc_intr_detach(struct sfc_adapter *sa); +int sfc_intr_init(struct sfc_adapter *sa); +void sfc_intr_fini(struct sfc_adapter *sa); +int sfc_intr_start(struct sfc_adapter *sa); +void sfc_intr_stop(struct sfc_adapter *sa); + +int sfc_port_init(struct sfc_adapter *sa); +void sfc_port_fini(struct sfc_adapter *sa); +int sfc_port_start(struct sfc_adapter *sa); +void sfc_port_stop(struct sfc_adapter *sa); +void sfc_port_link_mode_to_info(efx_link_mode_t link_mode, + struct rte_eth_link *link_info); +int sfc_port_update_mac_stats(struct sfc_adapter *sa); +int sfc_set_rx_mode(struct sfc_adapter *sa); + + #ifdef __cplusplus } #endif