X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fsfc%2Fsfc.h;h=7f11bf22d082a1e85913c9c895f640c3f0319752;hb=dae76a678cf8b36e1fefecc8c68f70613c275a02;hp=ca39df0c0fd12c9f5b8f828984ef30a3e4142d6c;hpb=e56fa9c23e7a669a2e61253e1a66b50337575ba6;p=dpdk.git diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index ca39df0c0f..7f11bf22d0 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -1,5 +1,7 @@ /*- - * Copyright (c) 2016 Solarflare Communications Inc. + * BSD LICENSE + * + * Copyright (c) 2016-2017 Solarflare Communications Inc. * All rights reserved. * * This software was jointly developed between OKTET Labs (under contract @@ -32,6 +34,8 @@ #include +#include +#include #include #include #include @@ -44,12 +48,7 @@ extern "C" { #endif -#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 @@ -62,20 +61,20 @@ extern "C" { * V | * +---------------+------------+ * | INITIALIZED | - * +---------------+<-----------+ - * |.dev_configure | - * V | - * +---------------+ | - * | CONFIGURING |------------^ - * +---------------+ failed | - * |success | - * | +---------------+ - * | | CLOSING | - * | +---------------+ - * | ^ - * V |.dev_close - * +---------------+------------+ - * | CONFIGURED | + * +---------------+<-----------<---------------+ + * |.dev_configure | | + * V |failed | + * +---------------+------------+ | + * | CONFIGURING | | + * +---------------+----+ | + * |success | | + * | | +---------------+ + * | | | CLOSING | + * | | +---------------+ + * | | ^ + * V |.dev_configure | + * +---------------+----+ |.dev_close + * | CONFIGURED |----------------------------+ * +---------------+<-----------+ * |.dev_start | * V | @@ -127,6 +126,8 @@ struct sfc_mcdi { enum sfc_mcdi_state state; efx_mcdi_transport_t transport; bool logging; + uint32_t proxy_handle; + efx_rc_t proxy_result; }; struct sfc_intr { @@ -135,9 +136,9 @@ struct sfc_intr { boolean_t lsc_intr; }; -struct sfc_evq_info; struct sfc_rxq_info; struct sfc_txq_info; +struct sfc_dp_rx; struct sfc_port { unsigned int lsc_seq; @@ -149,6 +150,11 @@ struct sfc_port { boolean_t flow_ctrl_autoneg; size_t pdu; + /* + * Flow API isolated mode overrides promisc and allmulti settings; + * they won't be applied if isolated mode is active + */ + boolean_t isolated; boolean_t promisc; boolean_t allmulti; @@ -158,10 +164,13 @@ struct sfc_port { rte_spinlock_t mac_stats_lock; uint64_t *mac_stats_buf; + unsigned int mac_stats_nb_supported; efsys_mem_t mac_stats_dma_mem; boolean_t mac_stats_reset_pending; uint16_t mac_stats_update_period_ms; uint32_t mac_stats_update_generation; + boolean_t mac_stats_periodic_dma_supported; + uint64_t mac_stats_last_request_timestamp; uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES]; }; @@ -176,6 +185,8 @@ struct sfc_adapter { */ rte_spinlock_t lock; enum sfc_adapter_state state; + struct rte_pci_addr pci_addr; + uint16_t port_id; struct rte_eth_dev *eth_dev; struct rte_kvargs *kvargs; bool debug_init; @@ -197,10 +208,10 @@ struct sfc_adapter { 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; + struct sfc_evq *mgmt_evq; unsigned int rxq_count; struct sfc_rxq_info *rxq_info; @@ -213,12 +224,26 @@ struct sfc_adapter { unsigned int rss_channels; #if EFSYS_OPT_RX_SCALE - efx_rx_scale_support_t rss_support; + efx_rx_scale_context_type_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]; + uint8_t rss_key[EFX_RSS_KEY_SIZE]; #endif + + /* + * Shared memory copy of the Rx datapath name to be used by + * the secondary process to find Rx datapath to be used. + */ + char *dp_rx_name; + const struct sfc_dp_rx *dp_rx; + + /* + * Shared memory copy of the Tx datapath name to be used by + * the secondary process to find Rx datapath to be used. + */ + char *dp_tx_name; + const struct sfc_dp_tx *dp_tx; }; /* @@ -262,10 +287,19 @@ sfc_adapter_lock_fini(__rte_unused struct sfc_adapter *sa) /* Just for symmetry of the API */ } +/** Get the number of milliseconds since boot from the default timer */ +static inline uint64_t +sfc_get_system_msecs(void) +{ + return rte_get_timer_cycles() * MS_PER_S / rte_get_timer_hz(); +} + int sfc_dma_alloc(const struct sfc_adapter *sa, const char *name, uint16_t id, size_t len, int socket_id, efsys_mem_t *esmp); void sfc_dma_free(const struct sfc_adapter *sa, efsys_mem_t *esmp); +int sfc_probe(struct sfc_adapter *sa); +void sfc_unprobe(struct sfc_adapter *sa); int sfc_attach(struct sfc_adapter *sa); void sfc_detach(struct sfc_adapter *sa); int sfc_start(struct sfc_adapter *sa); @@ -279,13 +313,15 @@ 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_configure(struct sfc_adapter *sa); +void sfc_intr_close(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_attach(struct sfc_adapter *sa); +void sfc_port_detach(struct sfc_adapter *sa); +int sfc_port_configure(struct sfc_adapter *sa); +void sfc_port_close(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,