* [dpdk-dev] [PATCH v2 01/17] net/sfc/base: add missing extern storage-class specifiers
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 02/17] net/sfc/base: decorate libefx API functions Andrew Rybchenko
` (16 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
libefx coding standard requires it and the specifier is
used for almost all functions in the header file.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@solarflare.com>
Reviewed-by: Richard Houldsworth <rhouldsw@xilinx.com>
---
drivers/net/sfc/base/ef10_impl.h | 56 ++++++++++++++++----------------
drivers/net/sfc/base/efx.h | 18 +++++-----
drivers/net/sfc/base/efx_impl.h | 18 +++++-----
drivers/net/sfc/base/mcdi_mon.h | 4 +--
4 files changed, 48 insertions(+), 48 deletions(-)
diff --git a/drivers/net/sfc/base/ef10_impl.h b/drivers/net/sfc/base/ef10_impl.h
index 0530f62baa..1f17fc2f69 100644
--- a/drivers/net/sfc/base/ef10_impl.h
+++ b/drivers/net/sfc/base/ef10_impl.h
@@ -91,15 +91,15 @@ extern "C" {
/* EV */
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_ev_init(
__in efx_nic_t *enp);
- void
+extern void
ef10_ev_fini(
__in efx_nic_t *enp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_ev_qcreate(
__in efx_nic_t *enp,
__in unsigned int index,
@@ -110,85 +110,85 @@ ef10_ev_qcreate(
__in uint32_t flags,
__in efx_evq_t *eep);
- void
+extern void
ef10_ev_qdestroy(
__in efx_evq_t *eep);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_ev_qprime(
__in efx_evq_t *eep,
__in unsigned int count);
- void
+extern void
ef10_ev_qpost(
__in efx_evq_t *eep,
__in uint16_t data);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_ev_qmoderate(
__in efx_evq_t *eep,
__in unsigned int us);
#if EFSYS_OPT_QSTATS
- void
+extern void
ef10_ev_qstats_update(
__in efx_evq_t *eep,
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat);
#endif /* EFSYS_OPT_QSTATS */
- void
+extern void
ef10_ev_rxlabel_init(
__in efx_evq_t *eep,
__in efx_rxq_t *erp,
__in unsigned int label,
__in efx_rxq_type_t type);
- void
+extern void
ef10_ev_rxlabel_fini(
__in efx_evq_t *eep,
__in unsigned int label);
/* INTR */
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_intr_init(
__in efx_nic_t *enp,
__in efx_intr_type_t type,
__in efsys_mem_t *esmp);
- void
+extern void
ef10_intr_enable(
__in efx_nic_t *enp);
- void
+extern void
ef10_intr_disable(
__in efx_nic_t *enp);
- void
+extern void
ef10_intr_disable_unlocked(
__in efx_nic_t *enp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_intr_trigger(
__in efx_nic_t *enp,
__in unsigned int level);
- void
+extern void
ef10_intr_status_line(
__in efx_nic_t *enp,
__out boolean_t *fatalp,
__out uint32_t *qmaskp);
- void
+extern void
ef10_intr_status_message(
__in efx_nic_t *enp,
__in unsigned int message,
__out boolean_t *fatalp);
- void
+extern void
ef10_intr_fatal(
__in efx_nic_t *enp);
- void
+extern void
ef10_intr_fini(
__in efx_nic_t *enp);
@@ -1134,25 +1134,25 @@ typedef struct ef10_filter_table_s {
uint32_t eft_encap_filter_count;
} ef10_filter_table_t;
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_filter_init(
__in efx_nic_t *enp);
- void
+extern void
ef10_filter_fini(
__in efx_nic_t *enp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_filter_restore(
__in efx_nic_t *enp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_filter_add(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec,
__in enum efx_filter_replacement_policy_e policy);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_filter_delete(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec);
@@ -1394,26 +1394,26 @@ ef10_proxy_auth_privilege_modify(
__in uint32_t add_privileges_mask,
__in uint32_t remove_privileges_mask);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_proxy_auth_set_privilege_mask(
__in efx_nic_t *enp,
__in uint32_t vf_index,
__in uint32_t mask,
__in uint32_t value);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_proxy_auth_complete_request(
__in efx_nic_t *enp,
__in uint32_t fn_index,
__in uint32_t proxy_result,
__in uint32_t handle);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_proxy_auth_exec_cmd(
__in efx_nic_t *enp,
__inout efx_proxy_cmd_params_t *paramsp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
ef10_proxy_auth_get_privilege_mask(
__in efx_nic_t *enp,
__in uint32_t pf_index,
diff --git a/drivers/net/sfc/base/efx.h b/drivers/net/sfc/base/efx.h
index 07cd0bb398..f723ff2540 100644
--- a/drivers/net/sfc/base/efx.h
+++ b/drivers/net/sfc/base/efx.h
@@ -269,7 +269,7 @@ extern __checkReturn efx_rc_t
efx_mcdi_reboot(
__in efx_nic_t *enp);
- void
+extern void
efx_mcdi_new_epoch(
__in efx_nic_t *enp);
@@ -2346,7 +2346,7 @@ efx_rx_fini(
__in efx_nic_t *enp);
#if EFSYS_OPT_RX_SCATTER
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_rx_scatter_enable(
__in efx_nic_t *enp,
__in unsigned int buf_size);
@@ -3244,7 +3244,7 @@ efx_lic_write_key(
__in uint32_t length,
__out uint32_t *lengthp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_lic_delete_key(
__in efx_nic_t *enp,
__in_bcount(buffer_size)
@@ -3511,38 +3511,38 @@ efx_proxy_auth_configure(
__in efx_nic_t *enp,
__in efx_proxy_auth_config_t *configp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_destroy(
__in efx_nic_t *enp,
__in uint32_t handled_privileges);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_complete_request(
__in efx_nic_t *enp,
__in uint32_t fn_index,
__in uint32_t proxy_result,
__in uint32_t handle);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_exec_cmd(
__in efx_nic_t *enp,
__inout efx_proxy_cmd_params_t *paramsp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_set_privilege_mask(
__in efx_nic_t *enp,
__in uint32_t vf_index,
__in uint32_t mask,
__in uint32_t value);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_privilege_mask_get(
__in efx_nic_t *enp,
__in uint32_t pf_index,
__in uint32_t vf_index,
__out uint32_t *maskp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_proxy_auth_privilege_modify(
__in efx_nic_t *enp,
__in uint32_t pf_index,
diff --git a/drivers/net/sfc/base/efx_impl.h b/drivers/net/sfc/base/efx_impl.h
index c4718dba70..70176760be 100644
--- a/drivers/net/sfc/base/efx_impl.h
+++ b/drivers/net/sfc/base/efx_impl.h
@@ -566,14 +566,14 @@ typedef struct efx_vpd_ops_s {
#if EFSYS_OPT_VPD || EFSYS_OPT_NVRAM
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_partitions(
__in efx_nic_t *enp,
__out_bcount(size) caddr_t data,
__in size_t size,
__out unsigned int *npartnp);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_metadata(
__in efx_nic_t *enp,
__in uint32_t partn,
@@ -582,18 +582,18 @@ efx_mcdi_nvram_metadata(
__out_bcount_opt(size) char *descp,
__in size_t size);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_info(
__in efx_nic_t *enp,
__in uint32_t partn,
__out efx_nvram_info_t *eni);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_update_start(
__in efx_nic_t *enp,
__in uint32_t partn);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_read(
__in efx_nic_t *enp,
__in uint32_t partn,
@@ -602,14 +602,14 @@ efx_mcdi_nvram_read(
__in size_t size,
__in uint32_t mode);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_erase(
__in efx_nic_t *enp,
__in uint32_t partn,
__in uint32_t offset,
__in size_t size);
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_write(
__in efx_nic_t *enp,
__in uint32_t partn,
@@ -620,7 +620,7 @@ efx_mcdi_nvram_write(
#define EFX_NVRAM_UPDATE_FLAGS_BACKGROUND 0x00000001
#define EFX_NVRAM_UPDATE_FLAGS_POLL 0x00000002
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_update_finish(
__in efx_nic_t *enp,
__in uint32_t partn,
@@ -630,7 +630,7 @@ efx_mcdi_nvram_update_finish(
#if EFSYS_OPT_DIAG
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
efx_mcdi_nvram_test(
__in efx_nic_t *enp,
__in uint32_t partn);
diff --git a/drivers/net/sfc/base/mcdi_mon.h b/drivers/net/sfc/base/mcdi_mon.h
index d7fbf07c36..c79f55c35f 100644
--- a/drivers/net/sfc/base/mcdi_mon.h
+++ b/drivers/net/sfc/base/mcdi_mon.h
@@ -17,11 +17,11 @@ extern "C" {
#if EFSYS_OPT_MON_STATS
- __checkReturn efx_rc_t
+extern __checkReturn efx_rc_t
mcdi_mon_cfg_build(
__in efx_nic_t *enp);
- void
+extern void
mcdi_mon_cfg_free(
__in efx_nic_t *enp);
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 02/17] net/sfc/base: decorate libefx API functions
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 01/17] net/sfc/base: add missing extern storage-class specifiers Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 03/17] net/sfc/base: decorate libefx internal extern functions Andrew Rybchenko
` (15 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
The decorators will be used in the future to mark libefx API
functions as __rte_internal.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@solarflare.com>
Reviewed-by: Richard Houldsworth <rhouldsw@xilinx.com>
---
drivers/net/sfc/base/efx.h | 251 +++++++++++++++++++++++++++++++
drivers/net/sfc/base/efx_check.h | 9 ++
drivers/net/sfc/base/efx_mcdi.h | 1 +
drivers/net/sfc/efsys.h | 3 +
4 files changed, 264 insertions(+)
diff --git a/drivers/net/sfc/base/efx.h b/drivers/net/sfc/base/efx.h
index f723ff2540..c1b4876314 100644
--- a/drivers/net/sfc/base/efx.h
+++ b/drivers/net/sfc/base/efx.h
@@ -58,6 +58,7 @@ typedef enum efx_family_e {
EFX_FAMILY_NTYPES
} efx_family_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_family(
__in uint16_t venid,
@@ -120,6 +121,7 @@ enum {
};
/* Calculate the IEEE 802.3 CRC32 of a MAC addr */
+LIBEFX_API
extern __checkReturn uint32_t
efx_crc32_calculate(
__in uint32_t crc_init,
@@ -135,6 +137,7 @@ typedef struct efx_rxq_s efx_rxq_t;
typedef struct efx_nic_s efx_nic_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_create(
__in efx_family_t family,
@@ -155,43 +158,52 @@ typedef enum efx_fw_variant_e {
EFX_FW_VARIANT_DONT_CARE = 0xffffffff
} efx_fw_variant_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_probe(
__in efx_nic_t *enp,
__in efx_fw_variant_t efv);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_reset(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn boolean_t
efx_nic_hw_unavailable(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_nic_set_hw_unavailable(
__in efx_nic_t *enp);
#if EFSYS_OPT_DIAG
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_register_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_API
extern void
efx_nic_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_nic_unprobe(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_nic_destroy(
__in efx_nic_t *enp);
@@ -207,12 +219,14 @@ typedef enum efx_pcie_link_performance_e {
EFX_PCIE_LINK_PERFORMANCE_OPTIMAL
} efx_pcie_link_performance_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_calculate_pcie_link_bandwidth(
__in uint32_t pcie_link_width,
__in uint32_t pcie_link_gen,
__out uint32_t *bandwidth_mbpsp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_check_pcie_link_speed(
__in efx_nic_t *enp,
@@ -260,39 +274,47 @@ typedef struct efx_mcdi_transport_s {
#endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */
} efx_mcdi_transport_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mcdi_init(
__in efx_nic_t *enp,
__in const efx_mcdi_transport_t *mtp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mcdi_reboot(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_mcdi_new_epoch(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_mcdi_get_timeout(
__in efx_nic_t *enp,
__in efx_mcdi_req_t *emrp,
__out uint32_t *usec_timeoutp);
+LIBEFX_API
extern void
efx_mcdi_request_start(
__in efx_nic_t *enp,
__in efx_mcdi_req_t *emrp,
__in boolean_t ev_cpl);
+LIBEFX_API
extern __checkReturn boolean_t
efx_mcdi_request_poll(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn boolean_t
efx_mcdi_request_abort(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_mcdi_fini(
__in efx_nic_t *enp);
@@ -312,47 +334,56 @@ typedef enum efx_intr_type_e {
#define EFX_INTR_SIZE (sizeof (efx_oword_t))
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_intr_init(
__in efx_nic_t *enp,
__in efx_intr_type_t type,
__in_opt efsys_mem_t *esmp);
+LIBEFX_API
extern void
efx_intr_enable(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_intr_disable(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_intr_disable_unlocked(
__in efx_nic_t *enp);
#define EFX_INTR_NEVQS 32
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_intr_trigger(
__in efx_nic_t *enp,
__in unsigned int level);
+LIBEFX_API
extern void
efx_intr_status_line(
__in efx_nic_t *enp,
__out boolean_t *fatalp,
__out uint32_t *maskp);
+LIBEFX_API
extern void
efx_intr_status_message(
__in efx_nic_t *enp,
__in unsigned int message,
__out boolean_t *fatalp);
+LIBEFX_API
extern void
efx_intr_fatal(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_intr_fini(
__in efx_nic_t *enp);
@@ -521,21 +552,25 @@ typedef enum efx_link_mode_e {
#define EFX_MAC_PDU_MIN 60
#define EFX_MAC_PDU_MAX EFX_MAC_PDU(EFX_MAC_SDU_MAX)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_pdu_get(
__in efx_nic_t *enp,
__out size_t *pdu);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_pdu_set(
__in efx_nic_t *enp,
__in size_t pdu);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_addr_set(
__in efx_nic_t *enp,
__in uint8_t *addr);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_filter_set(
__in efx_nic_t *enp,
@@ -544,33 +579,39 @@ efx_mac_filter_set(
__in boolean_t all_mulcst,
__in boolean_t brdcst);
+LIBEFX_API
extern void
efx_mac_filter_get_all_ucast_mcast(
__in efx_nic_t *enp,
__out boolean_t *all_unicst,
__out boolean_t *all_mulcst);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_multicast_list_set(
__in efx_nic_t *enp,
__in_ecount(6*count) uint8_t const *addrs,
__in int count);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_filter_default_rxq_set(
__in efx_nic_t *enp,
__in efx_rxq_t *erp,
__in boolean_t using_rss);
+LIBEFX_API
extern void
efx_mac_filter_default_rxq_clear(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_drain(
__in efx_nic_t *enp,
__in boolean_t enabled);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_up(
__in efx_nic_t *enp,
@@ -579,12 +620,14 @@ efx_mac_up(
#define EFX_FCNTL_RESPOND 0x00000001
#define EFX_FCNTL_GENERATE 0x00000002
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_fcntl_set(
__in efx_nic_t *enp,
__in unsigned int fcntl,
__in boolean_t autoneg);
+LIBEFX_API
extern void
efx_mac_fcntl_get(
__in efx_nic_t *enp,
@@ -596,6 +639,7 @@ efx_mac_fcntl_get(
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern __checkReturn const char *
efx_mac_stat_name(
__in efx_nic_t *enp,
@@ -617,6 +661,7 @@ efx_mac_stat_name(
* returned. EFX_MAC_STATS_MASK_NPAGES multiplied by size of the page
* (which is sizeof (uint32_t)) is sufficient.
*/
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_stats_get_mask(
__in efx_nic_t *enp,
@@ -628,6 +673,7 @@ efx_mac_stats_get_mask(
(1ULL << ((_stat) & (EFX_MAC_STATS_MASK_BITS_PER_PAGE - 1))))
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_stats_clear(
__in efx_nic_t *enp);
@@ -645,11 +691,13 @@ efx_mac_stats_clear(
* Thus, drivers should zero this buffer before use, so that not-understood
* statistics read back as zero.
*/
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_stats_upload(
__in efx_nic_t *enp,
__in efsys_mem_t *esmp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_stats_periodic(
__in efx_nic_t *enp,
@@ -657,6 +705,7 @@ efx_mac_stats_periodic(
__in uint16_t period_ms,
__in boolean_t events);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mac_stats_update(
__in efx_nic_t *enp,
@@ -678,12 +727,14 @@ typedef enum efx_mon_type_e {
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern const char *
efx_mon_name(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_NAMES */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mon_init(
__in efx_nic_t *enp);
@@ -824,11 +875,13 @@ typedef enum efx_mon_stat_portmask_e {
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern const char *
efx_mon_stat_name(
__in efx_nic_t *enp,
__in efx_mon_stat_t id);
+LIBEFX_API
extern const char *
efx_mon_stat_description(
__in efx_nic_t *enp,
@@ -836,27 +889,32 @@ efx_mon_stat_description(
#endif /* EFSYS_OPT_NAMES */
+LIBEFX_API
extern __checkReturn boolean_t
efx_mon_mcdi_to_efx_stat(
__in int mcdi_index,
__out efx_mon_stat_t *statp);
+LIBEFX_API
extern __checkReturn boolean_t
efx_mon_get_stat_unit(
__in efx_mon_stat_t stat,
__out efx_mon_stat_unit_t *unitp);
+LIBEFX_API
extern __checkReturn boolean_t
efx_mon_get_stat_portmap(
__in efx_mon_stat_t stat,
__out efx_mon_stat_portmask_t *maskp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mon_stats_update(
__in efx_nic_t *enp,
__in efsys_mem_t *esmp,
__inout_ecount(EFX_MON_NSTATS) efx_mon_stat_value_t *values);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mon_limits_update(
__in efx_nic_t *enp,
@@ -864,12 +922,14 @@ efx_mon_limits_update(
#endif /* EFSYS_OPT_MON_STATS */
+LIBEFX_API
extern void
efx_mon_fini(
__in efx_nic_t *enp);
/* PHY */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_verify(
__in efx_nic_t *enp);
@@ -884,6 +944,7 @@ typedef enum efx_phy_led_mode_e {
EFX_PHY_LED_NMODES
} efx_phy_led_mode_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_led_set(
__in efx_nic_t *enp,
@@ -891,6 +952,7 @@ efx_phy_led_set(
#endif /* EFSYS_OPT_PHY_LED_CONTROL */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_port_init(
__in efx_nic_t *enp);
@@ -947,11 +1009,13 @@ typedef enum efx_loopback_kind_e {
EFX_LOOPBACK_NKINDS
} efx_loopback_kind_t;
+LIBEFX_API
extern void
efx_loopback_mask(
__in efx_loopback_kind_t loopback_kind,
__out efx_qword_t *maskp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_port_loopback_set(
__in efx_nic_t *enp,
@@ -960,6 +1024,7 @@ efx_port_loopback_set(
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern __checkReturn const char *
efx_loopback_type_name(
__in efx_nic_t *enp,
@@ -969,11 +1034,13 @@ efx_loopback_type_name(
#endif /* EFSYS_OPT_LOOPBACK */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_port_poll(
__in efx_nic_t *enp,
__out_opt efx_link_mode_t *link_modep);
+LIBEFX_API
extern void
efx_port_fini(
__in efx_nic_t *enp);
@@ -1009,22 +1076,26 @@ typedef enum efx_phy_cap_type_e {
#define EFX_PHY_CAP_DEFAULT 0x00000001
#define EFX_PHY_CAP_PERM 0x00000002
+LIBEFX_API
extern void
efx_phy_adv_cap_get(
__in efx_nic_t *enp,
__in uint32_t flag,
__out uint32_t *maskp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_adv_cap_set(
__in efx_nic_t *enp,
__in uint32_t mask);
+LIBEFX_API
extern void
efx_phy_lp_cap_get(
__in efx_nic_t *enp,
__out uint32_t *maskp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_oui_get(
__in efx_nic_t *enp,
@@ -1048,6 +1119,7 @@ typedef enum efx_phy_media_type_e {
* the module, then this will be the media type of the module.
* Otherwise it will be the media type of the port.
*/
+LIBEFX_API
extern void
efx_phy_media_type_get(
__in efx_nic_t *enp,
@@ -1080,6 +1152,7 @@ efx_phy_media_type_get(
#define EFX_PHY_MEDIA_INFO_MAX_OFFSET 0x100
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_module_get_info(
__in efx_nic_t *enp,
@@ -1145,6 +1218,7 @@ typedef enum efx_phy_stat_e {
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern const char *
efx_phy_stat_name(
__in efx_nic_t *enp,
@@ -1154,6 +1228,7 @@ efx_phy_stat_name(
#define EFX_PHY_STATS_SIZE 0x100
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_stats_update(
__in efx_nic_t *enp,
@@ -1217,15 +1292,18 @@ typedef enum efx_bist_value_e {
EFX_BIST_NVALUES,
} efx_bist_value_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_bist_enable_offline(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_bist_start(
__in efx_nic_t *enp,
__in efx_bist_type_t type);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_bist_poll(
__in efx_nic_t *enp,
@@ -1235,6 +1313,7 @@ efx_bist_poll(
__out_ecount_opt(count) unsigned long *valuesp,
__in size_t count);
+LIBEFX_API
extern void
efx_bist_stop(
__in efx_nic_t *enp,
@@ -1446,6 +1525,7 @@ typedef struct efx_nic_cfg_s {
#define EFX_PCI_VF_PARENT(_encp) ((_encp)->enc_pf)
+LIBEFX_API
extern const efx_nic_cfg_t *
efx_nic_cfg_get(
__in const efx_nic_t *enp);
@@ -1470,6 +1550,7 @@ typedef struct efx_nic_fw_info_s {
uint16_t enfi_tx_dpcpu_fw_id;
} efx_nic_fw_info_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_get_fw_version(
__in efx_nic_t *enp,
@@ -1491,6 +1572,7 @@ typedef struct efx_drv_limits_s {
uint32_t edl_max_pio_alloc_count;
} efx_drv_limits_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_set_drv_limits(
__inout efx_nic_t *enp,
@@ -1503,6 +1585,7 @@ efx_nic_set_drv_limits(
* should be advertised. It is valid to set the version string
* only before efx_nic_probe() is called.
*/
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_set_drv_version(
__inout efx_nic_t *enp,
@@ -1514,6 +1597,7 @@ typedef enum efx_nic_region_e {
EFX_REGION_PIO_WRITE_VI, /* Memory BAR WC mapping */
} efx_nic_region_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_get_bar_region(
__in efx_nic_t *enp,
@@ -1521,6 +1605,7 @@ efx_nic_get_bar_region(
__out uint32_t *offsetp,
__out size_t *sizep);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_get_vi_pool(
__in efx_nic_t *enp,
@@ -1550,33 +1635,39 @@ typedef struct efx_vpd_value_s {
#define EFX_VPD_KEYWORD(x, y) ((x) | ((y) << 8))
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_size(
__in efx_nic_t *enp,
__out size_t *sizep);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_read(
__in efx_nic_t *enp,
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_verify(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_reinit(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_get(
__in efx_nic_t *enp,
@@ -1584,6 +1675,7 @@ efx_vpd_get(
__in size_t size,
__inout efx_vpd_value_t *evvp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_set(
__in efx_nic_t *enp,
@@ -1591,6 +1683,7 @@ efx_vpd_set(
__in size_t size,
__in efx_vpd_value_t *evvp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_next(
__in efx_nic_t *enp,
@@ -1599,12 +1692,14 @@ efx_vpd_next(
__out efx_vpd_value_t *evvp,
__inout unsigned int *contp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_vpd_write(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern void
efx_vpd_fini(
__in efx_nic_t *enp);
@@ -1648,42 +1743,49 @@ typedef struct efx_nvram_info_s {
#define EFX_NVRAM_FLAG_READ_ONLY (1 << 0)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_init(
__in efx_nic_t *enp);
#if EFSYS_OPT_DIAG
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_size(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out size_t *sizep);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_info(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out efx_nvram_info_t *enip);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_rw_start(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out_opt size_t *pref_chunkp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_rw_finish(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out_opt uint32_t *verify_resultp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_get_version(
__in efx_nic_t *enp,
@@ -1691,6 +1793,7 @@ efx_nvram_get_version(
__out uint32_t *subtypep,
__out_ecount(4) uint16_t version[4]);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_read_chunk(
__in efx_nic_t *enp,
@@ -1699,6 +1802,7 @@ efx_nvram_read_chunk(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_read_backup(
__in efx_nic_t *enp,
@@ -1707,12 +1811,14 @@ efx_nvram_read_backup(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_set_version(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__in_ecount(4) uint16_t version[4]);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_validate(
__in efx_nic_t *enp,
@@ -1720,11 +1826,13 @@ efx_nvram_validate(
__in_bcount(partn_size) caddr_t partn_data,
__in size_t partn_size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_erase(
__in efx_nic_t *enp,
__in efx_nvram_type_t type);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nvram_write_chunk(
__in efx_nic_t *enp,
@@ -1733,6 +1841,7 @@ efx_nvram_write_chunk(
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_API
extern void
efx_nvram_fini(
__in efx_nic_t *enp);
@@ -1742,6 +1851,7 @@ efx_nvram_fini(
#if EFSYS_OPT_BOOTCFG
/* Report size and offset of bootcfg sector in NVRAM partition. */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_bootcfg_sector_info(
__in efx_nic_t *enp,
@@ -1754,6 +1864,7 @@ efx_bootcfg_sector_info(
* Copy bootcfg sector data to a target buffer which may differ in size.
* Optionally corrects format errors in source buffer.
*/
+LIBEFX_API
extern efx_rc_t
efx_bootcfg_copy_sector(
__in efx_nic_t *enp,
@@ -1764,12 +1875,14 @@ efx_bootcfg_copy_sector(
__in size_t data_size,
__in boolean_t handle_format_errors);
+LIBEFX_API
extern efx_rc_t
efx_bootcfg_read(
__in efx_nic_t *enp,
__out_bcount(size) uint8_t *data,
__in size_t size);
+LIBEFX_API
extern efx_rc_t
efx_bootcfg_write(
__in efx_nic_t *enp,
@@ -1807,17 +1920,20 @@ efx_bootcfg_write(
#define EFX_DHCP_ENCAP_OPT(encapsulator, encapsulated) \
(uint16_t)(((encapsulator) << 8) | (encapsulated))
+LIBEFX_API
extern __checkReturn uint8_t
efx_dhcp_csum(
__in_bcount(size) uint8_t const *data,
__in size_t size);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_verify(
__in_bcount(size) uint8_t const *data,
__in size_t size,
__out_opt size_t *usedp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_find_tag(
__in_bcount(buffer_length) uint8_t *bufferp,
@@ -1826,6 +1942,7 @@ efx_dhcp_find_tag(
__deref_out uint8_t **valuepp,
__out size_t *value_lengthp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_find_end(
__in_bcount(buffer_length) uint8_t *bufferp,
@@ -1833,12 +1950,14 @@ efx_dhcp_find_end(
__deref_out uint8_t **endpp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_delete_tag(
__inout_bcount(buffer_length) uint8_t *bufferp,
__in size_t buffer_length,
__in uint16_t opt);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_add_tag(
__inout_bcount(buffer_length) uint8_t *bufferp,
@@ -1847,6 +1966,7 @@ efx_dhcp_add_tag(
__in_bcount_opt(value_length) uint8_t *valuep,
__in size_t value_length);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_dhcp_update_tag(
__inout_bcount(buffer_length) uint8_t *bufferp,
@@ -1931,12 +2051,14 @@ typedef struct efx_image_info_s {
efx_image_header_t * eii_headerp;
} efx_image_info_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_check_reflash_image(
__in void *bufferp,
__in uint32_t buffer_size,
__out efx_image_info_t *infop);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_build_signed_image_write_buffer(
__out_bcount(buffer_size)
@@ -1965,6 +2087,7 @@ typedef void
__in boolean_t negate,
__out efx_qword_t *eqp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_sram_test(
__in efx_nic_t *enp,
@@ -1972,6 +2095,7 @@ efx_sram_test(
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_sram_buf_tbl_set(
__in efx_nic_t *enp,
@@ -1979,6 +2103,7 @@ efx_sram_buf_tbl_set(
__in efsys_mem_t *esmp,
__in size_t n);
+LIBEFX_API
extern void
efx_sram_buf_tbl_clear(
__in efx_nic_t *enp,
@@ -2042,19 +2167,23 @@ typedef enum efx_ev_qstat_e {
#endif /* EFSYS_OPT_QSTATS */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_ev_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_ev_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn size_t
efx_evq_size(
__in const efx_nic_t *enp,
__in unsigned int ndescs);
+LIBEFX_API
extern __checkReturn unsigned int
efx_evq_nbufs(
__in const efx_nic_t *enp,
@@ -2079,6 +2208,7 @@ efx_evq_nbufs(
*/
#define EFX_EVQ_FLAGS_NO_CONT_EV (0x10)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_ev_qcreate(
__in efx_nic_t *enp,
@@ -2090,6 +2220,7 @@ efx_ev_qcreate(
__in uint32_t flags,
__deref_out efx_evq_t **eepp);
+LIBEFX_API
extern void
efx_ev_qpost(
__in efx_evq_t *eep,
@@ -2276,6 +2407,7 @@ typedef struct efx_ev_callbacks_s {
#endif /* EFSYS_OPT_MAC_STATS */
} efx_ev_callbacks_t;
+LIBEFX_API
extern __checkReturn boolean_t
efx_ev_qpending(
__in efx_evq_t *eep,
@@ -2283,6 +2415,7 @@ efx_ev_qpending(
#if EFSYS_OPT_EV_PREFETCH
+LIBEFX_API
extern void
efx_ev_qprefetch(
__in efx_evq_t *eep,
@@ -2290,6 +2423,7 @@ efx_ev_qprefetch(
#endif /* EFSYS_OPT_EV_PREFETCH */
+LIBEFX_API
extern void
efx_ev_qpoll(
__in efx_evq_t *eep,
@@ -2297,17 +2431,20 @@ efx_ev_qpoll(
__in const efx_ev_callbacks_t *eecp,
__in_opt void *arg);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_ev_usecs_to_ticks(
__in efx_nic_t *enp,
__in unsigned int usecs,
__out unsigned int *ticksp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_ev_qmoderate(
__in efx_evq_t *eep,
__in unsigned int us);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_ev_qprime(
__in efx_evq_t *eep,
@@ -2317,6 +2454,7 @@ efx_ev_qprime(
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern const char *
efx_ev_qstat_name(
__in efx_nic_t *enp,
@@ -2324,6 +2462,7 @@ efx_ev_qstat_name(
#endif /* EFSYS_OPT_NAMES */
+LIBEFX_API
extern void
efx_ev_qstats_update(
__in efx_evq_t *eep,
@@ -2331,21 +2470,25 @@ efx_ev_qstats_update(
#endif /* EFSYS_OPT_QSTATS */
+LIBEFX_API
extern void
efx_ev_qdestroy(
__in efx_evq_t *eep);
/* RX */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_init(
__inout efx_nic_t *enp);
+LIBEFX_API
extern void
efx_rx_fini(
__in efx_nic_t *enp);
#if EFSYS_OPT_RX_SCATTER
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scatter_enable(
__in efx_nic_t *enp,
@@ -2485,6 +2628,7 @@ typedef enum efx_rx_scale_context_type_e {
*/
#define EFX_RX_HASH_NFLAGS (EFX_RX_NCLASSES * EFX_RX_CLASS_HASH_NTUPLES)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_hash_flags_get(
__in efx_nic_t *enp,
@@ -2493,17 +2637,20 @@ efx_rx_scale_hash_flags_get(
__in unsigned int max_nflags,
__out unsigned int *nflagsp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_hash_default_support_get(
__in efx_nic_t *enp,
__out efx_rx_hash_support_t *supportp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_default_support_get(
__in efx_nic_t *enp,
__out efx_rx_scale_context_type_t *typep);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_context_alloc(
__in efx_nic_t *enp,
@@ -2511,11 +2658,13 @@ efx_rx_scale_context_alloc(
__in uint32_t num_queues,
__out uint32_t *rss_contextp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_context_free(
__in efx_nic_t *enp,
__in uint32_t rss_context);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_mode_set(
__in efx_nic_t *enp,
@@ -2524,6 +2673,7 @@ efx_rx_scale_mode_set(
__in efx_rx_hash_type_t type,
__in boolean_t insert);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_tbl_set(
__in efx_nic_t *enp,
@@ -2531,6 +2681,7 @@ efx_rx_scale_tbl_set(
__in_ecount(n) unsigned int *table,
__in size_t n);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_scale_key_set(
__in efx_nic_t *enp,
@@ -2538,6 +2689,7 @@ efx_rx_scale_key_set(
__in_ecount(n) uint8_t *key,
__in size_t n);
+LIBEFX_API
extern __checkReturn uint32_t
efx_pseudo_hdr_hash_get(
__in efx_rxq_t *erp,
@@ -2546,17 +2698,20 @@ efx_pseudo_hdr_hash_get(
#endif /* EFSYS_OPT_RX_SCALE */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_pseudo_hdr_pkt_length_get(
__in efx_rxq_t *erp,
__in uint8_t *buffer,
__out uint16_t *pkt_lengthp);
+LIBEFX_API
extern __checkReturn size_t
efx_rxq_size(
__in const efx_nic_t *enp,
__in unsigned int ndescs);
+LIBEFX_API
extern __checkReturn unsigned int
efx_rxq_nbufs(
__in const efx_nic_t *enp,
@@ -2587,6 +2742,7 @@ typedef enum efx_rxq_type_e {
*/
#define EFX_RXQ_FLAG_INNER_CLASSES 0x2
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_qcreate(
__in efx_nic_t *enp,
@@ -2609,6 +2765,7 @@ efx_rx_qcreate(
#define EFX_RXQ_PACKED_STREAM_BUF_SIZE_128K (128U * 1024)
#define EFX_RXQ_PACKED_STREAM_BUF_SIZE_64K (64U * 1024)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_qcreate_packed_stream(
__in efx_nic_t *enp,
@@ -2627,6 +2784,7 @@ efx_rx_qcreate_packed_stream(
/* Maximum head-of-line block timeout in nanoseconds */
#define EFX_RXQ_ES_SUPER_BUFFER_HOL_BLOCK_MAX (400U * 1000 * 1000)
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_qcreate_es_super_buffer(
__in efx_nic_t *enp,
@@ -2654,6 +2812,7 @@ typedef struct efx_desc_s {
efx_qword_t ed_eq;
} efx_desc_t;
+LIBEFX_API
extern void
efx_rx_qpost(
__in efx_rxq_t *erp,
@@ -2663,6 +2822,7 @@ efx_rx_qpost(
__in unsigned int completed,
__in unsigned int added);
+LIBEFX_API
extern void
efx_rx_qpush(
__in efx_rxq_t *erp,
@@ -2671,10 +2831,12 @@ efx_rx_qpush(
#if EFSYS_OPT_RX_PACKED_STREAM
+LIBEFX_API
extern void
efx_rx_qpush_ps_credits(
__in efx_rxq_t *erp);
+LIBEFX_API
extern __checkReturn uint8_t *
efx_rx_qps_packet_info(
__in efx_rxq_t *erp,
@@ -2686,14 +2848,17 @@ efx_rx_qps_packet_info(
__out uint32_t *timestamp);
#endif
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_rx_qflush(
__in efx_rxq_t *erp);
+LIBEFX_API
extern void
efx_rx_qenable(
__in efx_rxq_t *erp);
+LIBEFX_API
extern void
efx_rx_qdestroy(
__in efx_rxq_t *erp);
@@ -2715,19 +2880,23 @@ typedef enum efx_tx_qstat_e {
#endif /* EFSYS_OPT_QSTATS */
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_tx_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn size_t
efx_txq_size(
__in const efx_nic_t *enp,
__in unsigned int ndescs);
+LIBEFX_API
extern __checkReturn unsigned int
efx_txq_nbufs(
__in const efx_nic_t *enp,
@@ -2741,6 +2910,7 @@ efx_txq_nbufs(
#define EFX_TXQ_CKSUM_INNER_IPV4 0x0008
#define EFX_TXQ_CKSUM_INNER_TCPUDP 0x0010
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qcreate(
__in efx_nic_t *enp,
@@ -2754,6 +2924,7 @@ efx_tx_qcreate(
__deref_out efx_txq_t **etpp,
__out unsigned int *addedp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qpost(
__in efx_txq_t *etp,
@@ -2762,33 +2933,40 @@ efx_tx_qpost(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qpace(
__in efx_txq_t *etp,
__in unsigned int ns);
+LIBEFX_API
extern void
efx_tx_qpush(
__in efx_txq_t *etp,
__in unsigned int added,
__in unsigned int pushed);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qflush(
__in efx_txq_t *etp);
+LIBEFX_API
extern void
efx_tx_qenable(
__in efx_txq_t *etp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qpio_enable(
__in efx_txq_t *etp);
+LIBEFX_API
extern void
efx_tx_qpio_disable(
__in efx_txq_t *etp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qpio_write(
__in efx_txq_t *etp,
@@ -2796,6 +2974,7 @@ efx_tx_qpio_write(
__in size_t buf_length,
__in size_t pio_buf_offset);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qpio_post(
__in efx_txq_t *etp,
@@ -2803,6 +2982,7 @@ efx_tx_qpio_post(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tx_qdesc_post(
__in efx_txq_t *etp,
@@ -2811,6 +2991,7 @@ efx_tx_qdesc_post(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_API
extern void
efx_tx_qdesc_dma_create(
__in efx_txq_t *etp,
@@ -2819,6 +3000,7 @@ efx_tx_qdesc_dma_create(
__in boolean_t eop,
__out efx_desc_t *edp);
+LIBEFX_API
extern void
efx_tx_qdesc_tso_create(
__in efx_txq_t *etp,
@@ -2833,6 +3015,7 @@ efx_tx_qdesc_tso_create(
/* Maximum number of DMA segments per TSO packet (not superframe) */
#define EFX_TX_FATSOV2_DMA_SEGS_PER_PKT_MAX 24
+LIBEFX_API
extern void
efx_tx_qdesc_tso2_create(
__in efx_txq_t *etp,
@@ -2843,12 +3026,14 @@ efx_tx_qdesc_tso2_create(
__out_ecount(count) efx_desc_t *edp,
__in int count);
+LIBEFX_API
extern void
efx_tx_qdesc_vlantci_create(
__in efx_txq_t *etp,
__in uint16_t tci,
__out efx_desc_t *edp);
+LIBEFX_API
extern void
efx_tx_qdesc_checksum_create(
__in efx_txq_t *etp,
@@ -2859,6 +3044,7 @@ efx_tx_qdesc_checksum_create(
#if EFSYS_OPT_NAMES
+LIBEFX_API
extern const char *
efx_tx_qstat_name(
__in efx_nic_t *etp,
@@ -2866,6 +3052,7 @@ efx_tx_qstat_name(
#endif /* EFSYS_OPT_NAMES */
+LIBEFX_API
extern void
efx_tx_qstats_update(
__in efx_txq_t *etp,
@@ -2873,6 +3060,7 @@ efx_tx_qstats_update(
#endif /* EFSYS_OPT_QSTATS */
+LIBEFX_API
extern void
efx_tx_qdestroy(
__in efx_txq_t *etp);
@@ -3004,28 +3192,34 @@ typedef struct efx_filter_spec_s {
#define EFX_FILTER_SPEC_RX_DMAQ_ID_DROP 0xfff
#define EFX_FILTER_SPEC_VID_UNSPEC 0xffff
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_filter_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_insert(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_remove(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_restore(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_supported_filters(
__in efx_nic_t *enp,
@@ -3033,6 +3227,7 @@ efx_filter_supported_filters(
__in size_t buffer_length,
__out size_t *list_lengthp);
+LIBEFX_API
extern void
efx_filter_spec_init_rx(
__out efx_filter_spec_t *spec,
@@ -3040,11 +3235,13 @@ efx_filter_spec_init_rx(
__in efx_filter_flags_t flags,
__in efx_rxq_t *erp);
+LIBEFX_API
extern void
efx_filter_spec_init_tx(
__out efx_filter_spec_t *spec,
__in efx_txq_t *etp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_ipv4_local(
__inout efx_filter_spec_t *spec,
@@ -3052,6 +3249,7 @@ efx_filter_spec_set_ipv4_local(
__in uint32_t host,
__in uint16_t port);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_ipv4_full(
__inout efx_filter_spec_t *spec,
@@ -3061,21 +3259,25 @@ efx_filter_spec_set_ipv4_full(
__in uint32_t rhost,
__in uint16_t rport);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_eth_local(
__inout efx_filter_spec_t *spec,
__in uint16_t vid,
__in const uint8_t *addr);
+LIBEFX_API
extern void
efx_filter_spec_set_ether_type(
__inout efx_filter_spec_t *spec,
__in uint16_t ether_type);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_uc_def(
__inout efx_filter_spec_t *spec);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_mc_def(
__inout efx_filter_spec_t *spec);
@@ -3086,12 +3288,14 @@ typedef enum efx_filter_inner_frame_match_e {
EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_UCAST_DST
} efx_filter_inner_frame_match_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_encap_type(
__inout efx_filter_spec_t *spec,
__in efx_tunnel_protocol_t encap_type,
__in efx_filter_inner_frame_match_t inner_frame_match);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_vxlan(
__inout efx_filter_spec_t *spec,
@@ -3099,6 +3303,7 @@ efx_filter_spec_set_vxlan(
__in const uint8_t *inner_addr,
__in const uint8_t *outer_addr);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_geneve(
__inout efx_filter_spec_t *spec,
@@ -3106,6 +3311,7 @@ efx_filter_spec_set_geneve(
__in const uint8_t *inner_addr,
__in const uint8_t *outer_addr);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_nvgre(
__inout efx_filter_spec_t *spec,
@@ -3114,6 +3320,7 @@ efx_filter_spec_set_nvgre(
__in const uint8_t *outer_addr);
#if EFSYS_OPT_RX_SCALE
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_filter_spec_set_rss_context(
__inout efx_filter_spec_t *spec,
@@ -3123,12 +3330,14 @@ efx_filter_spec_set_rss_context(
/* HASH */
+LIBEFX_API
extern __checkReturn uint32_t
efx_hash_dwords(
__in_ecount(count) uint32_t const *input,
__in size_t count,
__in uint32_t init);
+LIBEFX_API
extern __checkReturn uint32_t
efx_hash_bytes(
__in_ecount(length) uint8_t const *input,
@@ -3151,33 +3360,40 @@ typedef struct efx_key_stats_s {
uint32_t eks_licensed_features_hi;
} efx_key_stats_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_lic_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn boolean_t
efx_lic_check_support(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_update_licenses(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_get_key_stats(
__in efx_nic_t *enp,
__out efx_key_stats_t *ksp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_app_state(
__in efx_nic_t *enp,
__in uint64_t app_id,
__out boolean_t *licensedp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_get_id(
__in efx_nic_t *enp,
@@ -3187,6 +3403,7 @@ efx_lic_get_id(
__out_opt uint8_t *bufferp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_find_start(
__in efx_nic_t *enp,
@@ -3195,6 +3412,7 @@ efx_lic_find_start(
__in size_t buffer_size,
__out uint32_t *startp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_find_end(
__in efx_nic_t *enp,
@@ -3204,6 +3422,7 @@ efx_lic_find_end(
__in uint32_t offset,
__out uint32_t *endp);
+LIBEFX_API
extern __checkReturn __success(return != B_FALSE) boolean_t
efx_lic_find_key(
__in efx_nic_t *enp,
@@ -3214,12 +3433,14 @@ efx_lic_find_key(
__out uint32_t *startp,
__out uint32_t *lengthp);
+LIBEFX_API
extern __checkReturn __success(return != B_FALSE) boolean_t
efx_lic_validate_key(
__in efx_nic_t *enp,
__in_bcount(length) caddr_t keyp,
__in uint32_t length);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_read_key(
__in efx_nic_t *enp,
@@ -3233,6 +3454,7 @@ efx_lic_read_key(
__in size_t key_max_size,
__out uint32_t *lengthp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_write_key(
__in efx_nic_t *enp,
@@ -3244,6 +3466,7 @@ efx_lic_write_key(
__in uint32_t length,
__out uint32_t *lengthp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_delete_key(
__in efx_nic_t *enp,
@@ -3255,6 +3478,7 @@ efx_lic_delete_key(
__in uint32_t end,
__out uint32_t *deltap);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_lic_create_partition(
__in efx_nic_t *enp,
@@ -3275,10 +3499,12 @@ efx_lic_finish_partition(
#if EFSYS_OPT_TUNNEL
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tunnel_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_tunnel_fini(
__in efx_nic_t *enp);
@@ -3290,18 +3516,21 @@ efx_tunnel_fini(
* The UDP port/protocol list is global.
*/
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tunnel_config_udp_add(
__in efx_nic_t *enp,
__in uint16_t port /* host/cpu-endian */,
__in efx_tunnel_protocol_t protocol);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tunnel_config_udp_remove(
__in efx_nic_t *enp,
__in uint16_t port /* host/cpu-endian */,
__in efx_tunnel_protocol_t protocol);
+LIBEFX_API
extern void
efx_tunnel_config_clear(
__in efx_nic_t *enp);
@@ -3312,6 +3541,7 @@ efx_tunnel_config_clear(
* EAGAIN is returned if hardware will be reset (datapath and managment CPU
* reboot).
*/
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_tunnel_reconfigure(
__in efx_nic_t *enp);
@@ -3339,11 +3569,13 @@ typedef enum efx_nic_fw_subvariant_e {
EFX_NIC_FW_SUBVARIANT_NTYPES
} efx_nic_fw_subvariant_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_get_fw_subvariant(
__in efx_nic_t *enp,
__out efx_nic_fw_subvariant_t *subvariantp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_nic_set_fw_subvariant(
__in efx_nic_t *enp,
@@ -3357,6 +3589,7 @@ typedef enum efx_phy_fec_type_e {
EFX_PHY_FEC_RS
} efx_phy_fec_type_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_fec_type_get(
__in efx_nic_t *enp,
@@ -3371,6 +3604,7 @@ typedef struct efx_phy_link_state_s {
efx_link_mode_t epls_link_mode;
} efx_phy_link_state_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_phy_link_state_get(
__in efx_nic_t *enp,
@@ -3424,14 +3658,17 @@ typedef struct efx_vport_config_s {
typedef struct efx_vswitch_s efx_vswitch_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_evb_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vswitch_create(
__in efx_nic_t *enp,
@@ -3439,11 +3676,13 @@ efx_evb_vswitch_create(
__inout_ecount(num_vports) efx_vport_config_t *vport_configp,
__deref_out efx_vswitch_t **evpp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vswitch_destroy(
__in efx_nic_t *enp,
__in efx_vswitch_t *evp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vport_mac_set(
__in efx_nic_t *enp,
@@ -3451,6 +3690,7 @@ efx_evb_vport_mac_set(
__in efx_vport_id_t vport_id,
__in_bcount(EFX_MAC_ADDR_LEN) uint8_t *addrp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vport_vlan_set(
__in efx_nic_t *enp,
@@ -3458,6 +3698,7 @@ efx_evb_vport_vlan_set(
__in efx_vport_id_t vport_id,
__in uint16_t vid);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vport_reset(
__in efx_nic_t *enp,
@@ -3467,6 +3708,7 @@ efx_evb_vport_reset(
__in uint16_t vid,
__out boolean_t *is_fn_resetp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_evb_vport_stats(
__in efx_nic_t *enp,
@@ -3498,24 +3740,29 @@ typedef struct efx_proxy_cmd_params_s {
size_t *response_size_actualp;
} efx_proxy_cmd_params_t;
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_init(
__in efx_nic_t *enp);
+LIBEFX_API
extern void
efx_proxy_auth_fini(
__in efx_nic_t *enp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_configure(
__in efx_nic_t *enp,
__in efx_proxy_auth_config_t *configp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_destroy(
__in efx_nic_t *enp,
__in uint32_t handled_privileges);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_complete_request(
__in efx_nic_t *enp,
@@ -3523,11 +3770,13 @@ efx_proxy_auth_complete_request(
__in uint32_t proxy_result,
__in uint32_t handle);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_exec_cmd(
__in efx_nic_t *enp,
__inout efx_proxy_cmd_params_t *paramsp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_set_privilege_mask(
__in efx_nic_t *enp,
@@ -3535,6 +3784,7 @@ efx_proxy_auth_set_privilege_mask(
__in uint32_t mask,
__in uint32_t value);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_privilege_mask_get(
__in efx_nic_t *enp,
@@ -3542,6 +3792,7 @@ efx_proxy_auth_privilege_mask_get(
__in uint32_t vf_index,
__out uint32_t *maskp);
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_proxy_auth_privilege_modify(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/base/efx_check.h b/drivers/net/sfc/base/efx_check.h
index 5965247569..41300fd9b1 100644
--- a/drivers/net/sfc/base/efx_check.h
+++ b/drivers/net/sfc/base/efx_check.h
@@ -9,6 +9,15 @@
#include "efsys.h"
+/*
+ * LIBEFX_* defines may be used to put API functions into dedicated code
+ * section if required by driver development framework and conventions.
+ */
+
+#ifndef LIBEFX_API
+# error "LIBEFX_API must be defined"
+#endif
+
/*
* Check that the efsys.h header in client code has a valid combination of
* EFSYS_OPT_xxx options.
diff --git a/drivers/net/sfc/base/efx_mcdi.h b/drivers/net/sfc/base/efx_mcdi.h
index d199060a41..42c84eb7d6 100644
--- a/drivers/net/sfc/base/efx_mcdi.h
+++ b/drivers/net/sfc/base/efx_mcdi.h
@@ -74,6 +74,7 @@ efx_mcdi_ev_cpl(
__in int errcode);
#if EFSYS_OPT_MCDI_PROXY_AUTH
+LIBEFX_API
extern __checkReturn efx_rc_t
efx_mcdi_get_proxy_handle(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/efsys.h b/drivers/net/sfc/efsys.h
index c94e6c0b93..cc132d83bb 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/net/sfc/efsys.h
@@ -32,6 +32,9 @@
extern "C" {
#endif
+/* No specific decorations required since all functions are local now */
+#define LIBEFX_API
+
#define EFSYS_HAS_UINT64 1
#define EFSYS_USE_UINT64 1
#define EFSYS_HAS_SSE2_M128 1
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 03/17] net/sfc/base: decorate libefx internal extern functions
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 01/17] net/sfc/base: add missing extern storage-class specifiers Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 02/17] net/sfc/base: decorate libefx API functions Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 04/17] net/sfc: include header with debug helpers directly Andrew Rybchenko
` (14 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
The decorator may be used in the future to instruct linker
to put it into dedicated sections or hide.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
Reviewed-by: Mark Spender <mspender@xilinx.com>
Reviewed-by: Richard Houldsworth <rhouldsw@xilinx.com>
---
drivers/net/sfc/base/ef10_impl.h | 194 +++++++++++++++++++++++++++
drivers/net/sfc/base/efx_check.h | 4 +
drivers/net/sfc/base/efx_impl.h | 26 ++++
drivers/net/sfc/base/efx_mcdi.h | 28 ++++
drivers/net/sfc/base/hunt_impl.h | 1 +
drivers/net/sfc/base/mcdi_mon.h | 5 +
drivers/net/sfc/base/medford2_impl.h | 1 +
drivers/net/sfc/base/medford_impl.h | 1 +
drivers/net/sfc/base/siena_impl.h | 60 +++++++++
drivers/net/sfc/efsys.h | 1 +
10 files changed, 321 insertions(+)
diff --git a/drivers/net/sfc/base/ef10_impl.h b/drivers/net/sfc/base/ef10_impl.h
index 1f17fc2f69..da0ec7fab5 100644
--- a/drivers/net/sfc/base/ef10_impl.h
+++ b/drivers/net/sfc/base/ef10_impl.h
@@ -91,14 +91,17 @@ extern "C" {
/* EV */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_ev_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_ev_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_ev_qcreate(
__in efx_nic_t *enp,
@@ -110,32 +113,38 @@ ef10_ev_qcreate(
__in uint32_t flags,
__in efx_evq_t *eep);
+LIBEFX_INTERNAL
extern void
ef10_ev_qdestroy(
__in efx_evq_t *eep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_ev_qprime(
__in efx_evq_t *eep,
__in unsigned int count);
+LIBEFX_INTERNAL
extern void
ef10_ev_qpost(
__in efx_evq_t *eep,
__in uint16_t data);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_ev_qmoderate(
__in efx_evq_t *eep,
__in unsigned int us);
#if EFSYS_OPT_QSTATS
+LIBEFX_INTERNAL
extern void
ef10_ev_qstats_update(
__in efx_evq_t *eep,
__inout_ecount(EV_NQSTATS) efsys_stat_t *stat);
#endif /* EFSYS_OPT_QSTATS */
+LIBEFX_INTERNAL
extern void
ef10_ev_rxlabel_init(
__in efx_evq_t *eep,
@@ -143,6 +152,7 @@ ef10_ev_rxlabel_init(
__in unsigned int label,
__in efx_rxq_type_t type);
+LIBEFX_INTERNAL
extern void
ef10_ev_rxlabel_fini(
__in efx_evq_t *eep,
@@ -150,74 +160,90 @@ ef10_ev_rxlabel_fini(
/* INTR */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_intr_init(
__in efx_nic_t *enp,
__in efx_intr_type_t type,
__in efsys_mem_t *esmp);
+LIBEFX_INTERNAL
extern void
ef10_intr_enable(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_intr_disable(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_intr_disable_unlocked(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_intr_trigger(
__in efx_nic_t *enp,
__in unsigned int level);
+LIBEFX_INTERNAL
extern void
ef10_intr_status_line(
__in efx_nic_t *enp,
__out boolean_t *fatalp,
__out uint32_t *qmaskp);
+LIBEFX_INTERNAL
extern void
ef10_intr_status_message(
__in efx_nic_t *enp,
__in unsigned int message,
__out boolean_t *fatalp);
+LIBEFX_INTERNAL
extern void
ef10_intr_fatal(
__in efx_nic_t *enp);
+
+LIBEFX_INTERNAL
extern void
ef10_intr_fini(
__in efx_nic_t *enp);
/* NIC */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_vadaptor_alloc(
__in efx_nic_t *enp,
__in uint32_t port_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_vadaptor_free(
__in efx_nic_t *enp,
__in uint32_t port_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_probe(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_set_drv_limits(
__inout efx_nic_t *enp,
__in efx_drv_limits_t *edlp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_get_vi_pool(
__in efx_nic_t *enp,
__out uint32_t *vi_countp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_get_bar_region(
__in efx_nic_t *enp,
@@ -225,34 +251,41 @@ ef10_nic_get_bar_region(
__out uint32_t *offsetp,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_reset(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn boolean_t
ef10_nic_hw_unavailable(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_nic_set_hw_unavailable(
__in efx_nic_t *enp);
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_register_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_INTERNAL
extern void
ef10_nic_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_nic_unprobe(
__in efx_nic_t *enp);
@@ -260,49 +293,59 @@ ef10_nic_unprobe(
/* MAC */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_poll(
__in efx_nic_t *enp,
__out efx_link_mode_t *link_modep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_up(
__in efx_nic_t *enp,
__out boolean_t *mac_upp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_addr_set(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_pdu_set(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_pdu_get(
__in efx_nic_t *enp,
__out size_t *pdu);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_reconfigure(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_multicast_list_set(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_filter_default_rxq_set(
__in efx_nic_t *enp,
__in efx_rxq_t *erp,
__in boolean_t using_rss);
+LIBEFX_INTERNAL
extern void
ef10_mac_filter_default_rxq_clear(
__in efx_nic_t *enp);
#if EFSYS_OPT_LOOPBACK
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_loopback_set(
__in efx_nic_t *enp,
@@ -313,12 +356,14 @@ ef10_mac_loopback_set(
#if EFSYS_OPT_MAC_STATS
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_stats_get_mask(
__in efx_nic_t *enp,
__inout_bcount(mask_size) uint32_t *maskp,
__in size_t mask_size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mac_stats_update(
__in efx_nic_t *enp,
@@ -333,15 +378,18 @@ ef10_mac_stats_update(
#if EFSYS_OPT_MCDI
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mcdi_init(
__in efx_nic_t *enp,
__in const efx_mcdi_transport_t *mtp);
+LIBEFX_INTERNAL
extern void
ef10_mcdi_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_mcdi_send_request(
__in efx_nic_t *enp,
@@ -350,10 +398,12 @@ ef10_mcdi_send_request(
__in_bcount(sdu_len) void *sdup,
__in size_t sdu_len);
+LIBEFX_INTERNAL
extern __checkReturn boolean_t
ef10_mcdi_poll_response(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_mcdi_read_response(
__in efx_nic_t *enp,
@@ -361,16 +411,19 @@ ef10_mcdi_read_response(
__in size_t offset,
__in size_t length);
+LIBEFX_INTERNAL
extern efx_rc_t
ef10_mcdi_poll_reboot(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_mcdi_feature_supported(
__in efx_nic_t *enp,
__in efx_mcdi_feature_id_t id,
__out boolean_t *supportedp);
+LIBEFX_INTERNAL
extern void
ef10_mcdi_get_timeout(
__in efx_nic_t *enp,
@@ -383,6 +436,7 @@ ef10_mcdi_get_timeout(
#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buf_read_tlv(
__in efx_nic_t *enp,
@@ -392,6 +446,7 @@ ef10_nvram_buf_read_tlv(
__deref_out_bcount_opt(*sizep) caddr_t *datap,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buf_write_tlv(
__inout_bcount(partn_size) caddr_t partn_data,
@@ -401,6 +456,7 @@ ef10_nvram_buf_write_tlv(
__in size_t tag_size,
__out size_t *total_lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_read_tlv(
__in efx_nic_t *enp,
@@ -409,6 +465,7 @@ ef10_nvram_partn_read_tlv(
__deref_out_bcount_opt(*sizep) caddr_t *datap,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_write_tlv(
__in efx_nic_t *enp,
@@ -417,6 +474,7 @@ ef10_nvram_partn_write_tlv(
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_write_segment_tlv(
__in efx_nic_t *enp,
@@ -426,11 +484,13 @@ ef10_nvram_partn_write_segment_tlv(
__in size_t size,
__in boolean_t all_segments);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_lock(
__in efx_nic_t *enp,
__in uint32_t partn);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_unlock(
__in efx_nic_t *enp,
@@ -443,36 +503,42 @@ ef10_nvram_partn_unlock(
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_type_to_partn(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out uint32_t *partnp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_size(
__in efx_nic_t *enp,
__in uint32_t partn,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_info(
__in efx_nic_t *enp,
__in uint32_t partn,
__out efx_nvram_info_t * enip);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_rw_start(
__in efx_nic_t *enp,
__in uint32_t partn,
__out size_t *chunk_sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_read_mode(
__in efx_nic_t *enp,
@@ -482,6 +548,7 @@ ef10_nvram_partn_read_mode(
__in size_t size,
__in uint32_t mode);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_read(
__in efx_nic_t *enp,
@@ -490,6 +557,7 @@ ef10_nvram_partn_read(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_read_backup(
__in efx_nic_t *enp,
@@ -498,6 +566,7 @@ ef10_nvram_partn_read_backup(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_erase(
__in efx_nic_t *enp,
@@ -505,6 +574,7 @@ ef10_nvram_partn_erase(
__in unsigned int offset,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_write(
__in efx_nic_t *enp,
@@ -513,12 +583,14 @@ ef10_nvram_partn_write(
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_rw_finish(
__in efx_nic_t *enp,
__in uint32_t partn,
__out_opt uint32_t *verify_resultp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_get_version(
__in efx_nic_t *enp,
@@ -526,12 +598,14 @@ ef10_nvram_partn_get_version(
__out uint32_t *subtypep,
__out_ecount(4) uint16_t version[4]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_partn_set_version(
__in efx_nic_t *enp,
__in uint32_t partn,
__in_ecount(4) uint16_t version[4]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_validate(
__in uint32_t partn,
@@ -539,12 +613,14 @@ ef10_nvram_buffer_validate(
caddr_t bufferp,
__in size_t buffer_size);
+LIBEFX_INTERNAL
extern void
ef10_nvram_buffer_init(
__out_bcount(buffer_size)
caddr_t bufferp,
__in size_t buffer_size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_create(
__in uint32_t partn_type,
@@ -552,6 +628,7 @@ ef10_nvram_buffer_create(
caddr_t bufferp,
__in size_t buffer_size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_find_item_start(
__in_bcount(buffer_size)
@@ -559,6 +636,7 @@ ef10_nvram_buffer_find_item_start(
__in size_t buffer_size,
__out uint32_t *startp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_find_end(
__in_bcount(buffer_size)
@@ -567,6 +645,7 @@ ef10_nvram_buffer_find_end(
__in uint32_t offset,
__out uint32_t *endp);
+LIBEFX_INTERNAL
extern __checkReturn __success(return != B_FALSE) boolean_t
ef10_nvram_buffer_find_item(
__in_bcount(buffer_size)
@@ -576,6 +655,7 @@ ef10_nvram_buffer_find_item(
__out uint32_t *startp,
__out uint32_t *lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_peek_item(
__in_bcount(buffer_size)
@@ -586,6 +666,7 @@ ef10_nvram_buffer_peek_item(
__out uint32_t *lengthp,
__out uint32_t *value_offsetp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_get_item(
__in_bcount(buffer_size)
@@ -599,6 +680,7 @@ ef10_nvram_buffer_get_item(
__in size_t value_max_size,
__out uint32_t *lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_insert_item(
__in_bcount(buffer_size)
@@ -610,6 +692,7 @@ ef10_nvram_buffer_insert_item(
__in uint32_t length,
__out uint32_t *lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_modify_item(
__in_bcount(buffer_size)
@@ -621,6 +704,7 @@ ef10_nvram_buffer_modify_item(
__in uint32_t length,
__out uint32_t *lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_delete_item(
__in_bcount(buffer_size)
@@ -630,6 +714,7 @@ ef10_nvram_buffer_delete_item(
__in uint32_t length,
__in uint32_t end);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nvram_buffer_finish(
__in_bcount(buffer_size)
@@ -649,35 +734,42 @@ typedef struct ef10_link_state_s {
boolean_t els_mac_up;
} ef10_link_state_t;
+LIBEFX_INTERNAL
extern void
ef10_phy_link_ev(
__in efx_nic_t *enp,
__in efx_qword_t *eqp,
__out efx_link_mode_t *link_modep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_get_link(
__in efx_nic_t *enp,
__out ef10_link_state_t *elsp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_power(
__in efx_nic_t *enp,
__in boolean_t on);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_reconfigure(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_verify(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_oui_get(
__in efx_nic_t *enp,
__out uint32_t *ouip);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_link_state_get(
__in efx_nic_t *enp,
@@ -685,6 +777,7 @@ ef10_phy_link_state_get(
#if EFSYS_OPT_PHY_STATS
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_phy_stats_update(
__in efx_nic_t *enp,
@@ -695,15 +788,18 @@ ef10_phy_stats_update(
#if EFSYS_OPT_BIST
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_bist_enable_offline(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_bist_start(
__in efx_nic_t *enp,
__in efx_bist_type_t type);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_bist_poll(
__in efx_nic_t *enp,
@@ -715,6 +811,7 @@ ef10_bist_poll(
unsigned long *valuesp,
__in size_t count);
+LIBEFX_INTERNAL
extern void
ef10_bist_stop(
__in efx_nic_t *enp,
@@ -724,14 +821,17 @@ ef10_bist_stop(
/* TX */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_tx_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qcreate(
__in efx_nic_t *enp,
@@ -745,10 +845,12 @@ ef10_tx_qcreate(
__in efx_txq_t *etp,
__out unsigned int *addedp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdestroy(
__in efx_txq_t *etp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qpost(
__in efx_txq_t *etp,
@@ -757,6 +859,7 @@ ef10_tx_qpost(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qpush(
__in efx_txq_t *etp,
@@ -764,10 +867,12 @@ ef10_tx_qpush(
__in unsigned int pushed);
#if EFSYS_OPT_RX_PACKED_STREAM
+LIBEFX_INTERNAL
extern void
ef10_rx_qpush_ps_credits(
__in efx_rxq_t *erp);
+LIBEFX_INTERNAL
extern __checkReturn uint8_t *
ef10_rx_qps_packet_info(
__in efx_rxq_t *erp,
@@ -779,27 +884,33 @@ ef10_rx_qps_packet_info(
__out uint32_t *timestamp);
#endif
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qpace(
__in efx_txq_t *etp,
__in unsigned int ns);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qflush(
__in efx_txq_t *etp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qenable(
__in efx_txq_t *etp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qpio_enable(
__in efx_txq_t *etp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qpio_disable(
__in efx_txq_t *etp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qpio_write(
__in efx_txq_t *etp,
@@ -807,6 +918,7 @@ ef10_tx_qpio_write(
__in size_t buf_length,
__in size_t pio_buf_offset);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qpio_post(
__in efx_txq_t *etp,
@@ -814,6 +926,7 @@ ef10_tx_qpio_post(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_tx_qdesc_post(
__in efx_txq_t *etp,
@@ -822,6 +935,7 @@ ef10_tx_qdesc_post(
__in unsigned int completed,
__inout unsigned int *addedp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdesc_dma_create(
__in efx_txq_t *etp,
@@ -830,6 +944,7 @@ ef10_tx_qdesc_dma_create(
__in boolean_t eop,
__out efx_desc_t *edp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdesc_tso_create(
__in efx_txq_t *etp,
@@ -838,6 +953,7 @@ ef10_tx_qdesc_tso_create(
__in uint8_t tcp_flags,
__out efx_desc_t *edp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdesc_tso2_create(
__in efx_txq_t *etp,
@@ -848,12 +964,14 @@ ef10_tx_qdesc_tso2_create(
__out_ecount(count) efx_desc_t *edp,
__in int count);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdesc_vlantci_create(
__in efx_txq_t *etp,
__in uint16_t vlan_tci,
__out efx_desc_t *edp);
+LIBEFX_INTERNAL
extern void
ef10_tx_qdesc_checksum_create(
__in efx_txq_t *etp,
@@ -862,6 +980,7 @@ ef10_tx_qdesc_checksum_create(
#if EFSYS_OPT_QSTATS
+LIBEFX_INTERNAL
extern void
ef10_tx_qstats_update(
__in efx_txq_t *etp,
@@ -873,6 +992,7 @@ typedef uint32_t efx_piobuf_handle_t;
#define EFX_PIOBUF_HANDLE_INVALID ((efx_piobuf_handle_t)-1)
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_pio_alloc(
__inout efx_nic_t *enp,
@@ -882,18 +1002,21 @@ ef10_nic_pio_alloc(
__out uint32_t *offsetp,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_pio_free(
__inout efx_nic_t *enp,
__in uint32_t bufnum,
__in uint32_t blknum);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_pio_link(
__inout efx_nic_t *enp,
__in uint32_t vi_index,
__in efx_piobuf_handle_t handle);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_pio_unlink(
__inout efx_nic_t *enp,
@@ -904,33 +1027,39 @@ ef10_nic_pio_unlink(
#if EFSYS_OPT_VPD
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_size(
__in efx_nic_t *enp,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_read(
__in efx_nic_t *enp,
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_verify(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_reinit(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_get(
__in efx_nic_t *enp,
@@ -938,6 +1067,7 @@ ef10_vpd_get(
__in size_t size,
__inout efx_vpd_value_t *evvp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_set(
__in efx_nic_t *enp,
@@ -945,6 +1075,7 @@ ef10_vpd_set(
__in size_t size,
__in efx_vpd_value_t *evvp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_next(
__in efx_nic_t *enp,
@@ -953,12 +1084,14 @@ ef10_vpd_next(
__out efx_vpd_value_t *evvp,
__inout unsigned int *contp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_vpd_write(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern void
ef10_vpd_fini(
__in efx_nic_t *enp);
@@ -968,11 +1101,13 @@ ef10_vpd_fini(
/* RX */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_init(
__in efx_nic_t *enp);
#if EFSYS_OPT_RX_SCATTER
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scatter_enable(
__in efx_nic_t *enp,
@@ -982,6 +1117,7 @@ ef10_rx_scatter_enable(
#if EFSYS_OPT_RX_SCALE
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scale_context_alloc(
__in efx_nic_t *enp,
@@ -989,11 +1125,13 @@ ef10_rx_scale_context_alloc(
__in uint32_t num_queues,
__out uint32_t *rss_contextp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scale_context_free(
__in efx_nic_t *enp,
__in uint32_t rss_context);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scale_mode_set(
__in efx_nic_t *enp,
@@ -1002,6 +1140,7 @@ ef10_rx_scale_mode_set(
__in efx_rx_hash_type_t type,
__in boolean_t insert);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scale_key_set(
__in efx_nic_t *enp,
@@ -1009,6 +1148,7 @@ ef10_rx_scale_key_set(
__in_ecount(n) uint8_t *key,
__in size_t n);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_scale_tbl_set(
__in efx_nic_t *enp,
@@ -1016,6 +1156,7 @@ ef10_rx_scale_tbl_set(
__in_ecount(n) unsigned int *table,
__in size_t n);
+LIBEFX_INTERNAL
extern __checkReturn uint32_t
ef10_rx_prefix_hash(
__in efx_nic_t *enp,
@@ -1024,12 +1165,14 @@ ef10_rx_prefix_hash(
#endif /* EFSYS_OPT_RX_SCALE */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_prefix_pktlen(
__in efx_nic_t *enp,
__in uint8_t *buffer,
__out uint16_t *lengthp);
+LIBEFX_INTERNAL
extern void
ef10_rx_qpost(
__in efx_rxq_t *erp,
@@ -1039,22 +1182,26 @@ ef10_rx_qpost(
__in unsigned int completed,
__in unsigned int added);
+LIBEFX_INTERNAL
extern void
ef10_rx_qpush(
__in efx_rxq_t *erp,
__in unsigned int added,
__inout unsigned int *pushedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_qflush(
__in efx_rxq_t *erp);
+LIBEFX_INTERNAL
extern void
ef10_rx_qenable(
__in efx_rxq_t *erp);
union efx_rxq_type_data_u;
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_rx_qcreate(
__in efx_nic_t *enp,
@@ -1069,10 +1216,12 @@ ef10_rx_qcreate(
__in efx_evq_t *eep,
__in efx_rxq_t *erp);
+LIBEFX_INTERNAL
extern void
ef10_rx_qdestroy(
__in efx_rxq_t *erp);
+LIBEFX_INTERNAL
extern void
ef10_rx_fini(
__in efx_nic_t *enp);
@@ -1134,29 +1283,35 @@ typedef struct ef10_filter_table_s {
uint32_t eft_encap_filter_count;
} ef10_filter_table_t;
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_filter_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_restore(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_add(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec,
__in enum efx_filter_replacement_policy_e policy);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_delete(
__in efx_nic_t *enp,
__inout efx_filter_spec_t *spec);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_supported_filters(
__in efx_nic_t *enp,
@@ -1164,6 +1319,7 @@ ef10_filter_supported_filters(
__in size_t buffer_length,
__out size_t *list_lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_filter_reconfigure(
__in efx_nic_t *enp,
@@ -1175,18 +1331,21 @@ ef10_filter_reconfigure(
__in_ecount(6*count) uint8_t const *addrs,
__in uint32_t count);
+LIBEFX_INTERNAL
extern void
ef10_filter_get_default_rxq(
__in efx_nic_t *enp,
__out efx_rxq_t **erpp,
__out boolean_t *using_rss);
+LIBEFX_INTERNAL
extern void
ef10_filter_default_rxq_set(
__in efx_nic_t *enp,
__in efx_rxq_t *erp,
__in boolean_t using_rss);
+LIBEFX_INTERNAL
extern void
ef10_filter_default_rxq_clear(
__in efx_nic_t *enp);
@@ -1194,12 +1353,14 @@ ef10_filter_default_rxq_clear(
#endif /* EFSYS_OPT_FILTER */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_function_info(
__in efx_nic_t *enp,
__out uint32_t *pfp,
__out_opt uint32_t *vfp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_privilege_mask(
__in efx_nic_t *enp,
@@ -1207,11 +1368,13 @@ efx_mcdi_privilege_mask(
__in uint32_t vf,
__out uint32_t *maskp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_port_assignment(
__in efx_nic_t *enp,
__out uint32_t *portp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_port_modes(
__in efx_nic_t *enp,
@@ -1219,21 +1382,25 @@ efx_mcdi_get_port_modes(
__out_opt uint32_t *current_modep,
__out_opt uint32_t *default_modep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_nic_get_port_mode_bandwidth(
__in efx_nic_t *enp,
__out uint32_t *bandwidth_mbpsp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_mac_address_pf(
__in efx_nic_t *enp,
__out_ecount_opt(6) uint8_t mac_addrp[6]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_mac_address_vf(
__in efx_nic_t *enp,
__out_ecount_opt(6) uint8_t mac_addrp[6]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_clock(
__in efx_nic_t *enp,
@@ -1241,11 +1408,13 @@ efx_mcdi_get_clock(
__out uint32_t *dpcpu_freqp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_rxdp_config(
__in efx_nic_t *enp,
__out uint32_t *end_paddingp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_vector_cfg(
__in efx_nic_t *enp,
@@ -1253,6 +1422,7 @@ efx_mcdi_get_vector_cfg(
__out_opt uint32_t *pf_nvecp,
__out_opt uint32_t *vf_nvecp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_get_privilege_mask(
__in efx_nic_t *enp,
@@ -1260,12 +1430,14 @@ ef10_get_privilege_mask(
#if EFSYS_OPT_FW_SUBVARIANT_AWARE
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_nic_global(
__in efx_nic_t *enp,
__in uint32_t key,
__out uint32_t *valuep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_set_nic_global(
__in efx_nic_t *enp,
@@ -1275,25 +1447,30 @@ efx_mcdi_set_nic_global(
#endif /* EFSYS_OPT_FW_SUBVARIANT_AWARE */
#if EFSYS_OPT_EVB
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_evb_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vswitch_alloc(
__in efx_nic_t *enp,
__out efx_vswitch_id_t *vswitch_idp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vswitch_free(
__in efx_nic_t *enp,
__in efx_vswitch_id_t vswitch_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_alloc(
__in efx_nic_t *enp,
@@ -1304,12 +1481,14 @@ ef10_evb_vport_alloc(
__out efx_vport_id_t *vport_idp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_free(
__in efx_nic_t *enp,
__in efx_vswitch_id_t vswitch_id,
__in efx_vport_id_t vport_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_mac_addr_add(
__in efx_nic_t *enp,
@@ -1317,6 +1496,7 @@ ef10_evb_vport_mac_addr_add(
__in efx_vport_id_t vport_id,
__in_ecount(6) uint8_t *addrp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_mac_addr_del(
__in efx_nic_t *enp,
@@ -1324,6 +1504,7 @@ ef10_evb_vport_mac_addr_del(
__in efx_vport_id_t vport_id,
__in_ecount(6) uint8_t *addrp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vadaptor_alloc(
__in efx_nic_t *enp,
@@ -1331,12 +1512,14 @@ ef10_evb_vadaptor_alloc(
__in efx_vport_id_t vport_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vadaptor_free(
__in efx_nic_t *enp,
__in efx_vswitch_id_t vswitch_id,
__in efx_vport_id_t vport_id);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_assign(
__in efx_nic_t *enp,
@@ -1344,6 +1527,7 @@ ef10_evb_vport_assign(
__in efx_vport_id_t vport_id,
__in uint32_t vf_index);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_reconfigure(
__in efx_nic_t *enp,
@@ -1353,6 +1537,7 @@ ef10_evb_vport_reconfigure(
__in_bcount_opt(EFX_MAC_ADDR_LEN) uint8_t *addrp,
__out_opt boolean_t *fn_resetp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_evb_vport_stats(
__in efx_nic_t *enp,
@@ -1363,14 +1548,17 @@ ef10_evb_vport_stats(
#endif /* EFSYS_OPT_EVB */
#if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
ef10_proxy_auth_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_mc_config(
__in efx_nic_t *enp,
@@ -1381,10 +1569,12 @@ ef10_proxy_auth_mc_config(
__in_ecount(op_count) uint32_t *op_listp,
__in size_t op_count);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_disable(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_privilege_modify(
__in efx_nic_t *enp,
@@ -1394,6 +1584,7 @@ ef10_proxy_auth_privilege_modify(
__in uint32_t add_privileges_mask,
__in uint32_t remove_privileges_mask);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_set_privilege_mask(
__in efx_nic_t *enp,
@@ -1401,6 +1592,7 @@ ef10_proxy_auth_set_privilege_mask(
__in uint32_t mask,
__in uint32_t value);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_complete_request(
__in efx_nic_t *enp,
@@ -1408,11 +1600,13 @@ ef10_proxy_auth_complete_request(
__in uint32_t proxy_result,
__in uint32_t handle);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_exec_cmd(
__in efx_nic_t *enp,
__inout efx_proxy_cmd_params_t *paramsp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
ef10_proxy_auth_get_privilege_mask(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/base/efx_check.h b/drivers/net/sfc/base/efx_check.h
index 41300fd9b1..5a04a69e5f 100644
--- a/drivers/net/sfc/base/efx_check.h
+++ b/drivers/net/sfc/base/efx_check.h
@@ -18,6 +18,10 @@
# error "LIBEFX_API must be defined"
#endif
+#ifndef LIBEFX_INTERNAL
+# error "LIBEFX_INTERNAL must be defined"
+#endif
+
/*
* Check that the efsys.h header in client code has a valid combination of
* EFSYS_OPT_xxx options.
diff --git a/drivers/net/sfc/base/efx_impl.h b/drivers/net/sfc/base/efx_impl.h
index 70176760be..7d6a31d298 100644
--- a/drivers/net/sfc/base/efx_impl.h
+++ b/drivers/net/sfc/base/efx_impl.h
@@ -279,6 +279,7 @@ typedef struct efx_filter_ops_s {
uint8_t const *, uint32_t);
} efx_filter_ops_t;
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_filter_reconfigure(
__in efx_nic_t *enp,
@@ -464,6 +465,7 @@ typedef struct efx_filter_s {
#if EFSYS_OPT_SIENA
+LIBEFX_INTERNAL
extern void
siena_filter_tbl_clear(
__in efx_nic_t *enp,
@@ -566,6 +568,7 @@ typedef struct efx_vpd_ops_s {
#if EFSYS_OPT_VPD || EFSYS_OPT_NVRAM
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_partitions(
__in efx_nic_t *enp,
@@ -573,6 +576,7 @@ efx_mcdi_nvram_partitions(
__in size_t size,
__out unsigned int *npartnp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_metadata(
__in efx_nic_t *enp,
@@ -582,17 +586,20 @@ efx_mcdi_nvram_metadata(
__out_bcount_opt(size) char *descp,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_info(
__in efx_nic_t *enp,
__in uint32_t partn,
__out efx_nvram_info_t *eni);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_update_start(
__in efx_nic_t *enp,
__in uint32_t partn);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_read(
__in efx_nic_t *enp,
@@ -602,6 +609,7 @@ efx_mcdi_nvram_read(
__in size_t size,
__in uint32_t mode);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_erase(
__in efx_nic_t *enp,
@@ -609,6 +617,7 @@ efx_mcdi_nvram_erase(
__in uint32_t offset,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_write(
__in efx_nic_t *enp,
@@ -620,6 +629,7 @@ efx_mcdi_nvram_write(
#define EFX_NVRAM_UPDATE_FLAGS_BACKGROUND 0x00000001
#define EFX_NVRAM_UPDATE_FLAGS_POLL 0x00000002
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_update_finish(
__in efx_nic_t *enp,
@@ -630,6 +640,7 @@ efx_mcdi_nvram_update_finish(
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_nvram_test(
__in efx_nic_t *enp,
@@ -713,6 +724,7 @@ typedef struct efx_evb_ops_s {
efx_vport_id_t, efsys_mem_t *);
} efx_evb_ops_t;
+LIBEFX_INTERNAL
extern __checkReturn boolean_t
efx_is_zero_eth_addr(
__in_bcount(EFX_MAC_ADDR_LEN) const uint8_t *addrp);
@@ -1286,10 +1298,12 @@ struct efx_txq_s {
_NOTE(CONSTANTCONDITION) \
} while (B_FALSE)
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mac_select(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
efx_mac_multicast_hash_compute(
__in_ecount(6*count) uint8_t const *addrs,
@@ -1297,10 +1311,12 @@ efx_mac_multicast_hash_compute(
__out efx_oword_t *hash_low,
__out efx_oword_t *hash_high);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_phy_probe(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
efx_phy_unprobe(
__in efx_nic_t *enp);
@@ -1309,24 +1325,28 @@ efx_phy_unprobe(
/* VPD utility functions */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_length(
__in_bcount(size) caddr_t data,
__in size_t size,
__out size_t *lengthp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_verify(
__in_bcount(size) caddr_t data,
__in size_t size,
__out_opt boolean_t *cksummedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_reinit(
__in_bcount(size) caddr_t data,
__in size_t size,
__in boolean_t wantpid);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_get(
__in_bcount(size) caddr_t data,
@@ -1336,6 +1356,7 @@ efx_vpd_hunk_get(
__out unsigned int *payloadp,
__out uint8_t *paylenp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_next(
__in_bcount(size) caddr_t data,
@@ -1346,6 +1367,7 @@ efx_vpd_hunk_next(
__out_opt uint8_t *paylenp,
__inout unsigned int *contp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_vpd_hunk_set(
__in_bcount(size) caddr_t data,
@@ -1356,6 +1378,7 @@ efx_vpd_hunk_set(
#if EFSYS_OPT_MCDI
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_set_workaround(
__in efx_nic_t *enp,
@@ -1363,6 +1386,7 @@ efx_mcdi_set_workaround(
__in boolean_t enabled,
__out_opt uint32_t *flagsp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_workarounds(
__in efx_nic_t *enp,
@@ -1391,6 +1415,7 @@ typedef enum efx_stats_action_e {
EFX_STATS_DISABLE,
} efx_stats_action_t;
+LIBEFX_INTERNAL
extern efx_rc_t
efx_mac_stats_mask_add_ranges(
__inout_bcount(mask_size) uint32_t *maskp,
@@ -1398,6 +1423,7 @@ efx_mac_stats_mask_add_ranges(
__in_ecount(rng_count) const struct efx_mac_stats_range *rngp,
__in unsigned int rng_count);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_mac_stats(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/base/efx_mcdi.h b/drivers/net/sfc/base/efx_mcdi.h
index 42c84eb7d6..97ac8bf496 100644
--- a/drivers/net/sfc/base/efx_mcdi.h
+++ b/drivers/net/sfc/base/efx_mcdi.h
@@ -56,16 +56,19 @@ typedef struct efx_mcdi_iface_s {
uint32_t emi_mc_reboot_status;
} efx_mcdi_iface_t;
+LIBEFX_INTERNAL
extern void
efx_mcdi_execute(
__in efx_nic_t *enp,
__inout efx_mcdi_req_t *emrp);
+LIBEFX_INTERNAL
extern void
efx_mcdi_execute_quiet(
__in efx_nic_t *enp,
__inout efx_mcdi_req_t *emrp);
+LIBEFX_INTERNAL
extern void
efx_mcdi_ev_cpl(
__in efx_nic_t *enp,
@@ -81,6 +84,7 @@ efx_mcdi_get_proxy_handle(
__in efx_mcdi_req_t *emrp,
__out uint32_t *handlep);
+LIBEFX_INTERNAL
extern void
efx_mcdi_ev_proxy_response(
__in efx_nic_t *enp,
@@ -89,21 +93,25 @@ efx_mcdi_ev_proxy_response(
#endif
#if EFSYS_OPT_MCDI_PROXY_AUTH_SERVER
+LIBEFX_INTERNAL
extern void
efx_mcdi_ev_proxy_request(
__in efx_nic_t *enp,
__in unsigned int index);
#endif /* EFSYS_OPT_MCDI_PROXY_AUTH_SERVER */
+LIBEFX_INTERNAL
extern void
efx_mcdi_ev_death(
__in efx_nic_t *enp,
__in int rc);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_request_errcode(
__in unsigned int err);
+LIBEFX_INTERNAL
extern void
efx_mcdi_raise_exception(
__in efx_nic_t *enp,
@@ -116,6 +124,7 @@ typedef enum efx_mcdi_boot_e {
EFX_MCDI_BOOT_ROM,
} efx_mcdi_boot_t;
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_version(
__in efx_nic_t *enp,
@@ -123,6 +132,7 @@ efx_mcdi_version(
__out_opt uint32_t *buildp,
__out_opt efx_mcdi_boot_t *statusp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_capabilities(
__in efx_nic_t *enp,
@@ -132,19 +142,23 @@ efx_mcdi_get_capabilities(
__out_opt uint32_t *flags2p,
__out_opt uint32_t *tso2ncp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_read_assertion(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_exit_assertion_handler(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_drv_attach(
__in efx_nic_t *enp,
__in boolean_t attach);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_board_cfg(
__in efx_nic_t *enp,
@@ -152,25 +166,30 @@ efx_mcdi_get_board_cfg(
__out_opt efx_dword_t *capabilitiesp,
__out_ecount_opt(6) uint8_t mac_addrp[6]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_phy_cfg(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_firmware_update_supported(
__in efx_nic_t *enp,
__out boolean_t *supportedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_macaddr_change_supported(
__in efx_nic_t *enp,
__out boolean_t *supportedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_link_control_supported(
__in efx_nic_t *enp,
__out boolean_t *supportedp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_mac_spoofing_supported(
__in efx_nic_t *enp,
@@ -179,16 +198,19 @@ efx_mcdi_mac_spoofing_supported(
#if EFSYS_OPT_BIST
#if EFX_OPTS_EF10()
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_bist_enable_offline(
__in efx_nic_t *enp);
#endif /* EFX_OPTS_EF10() */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_bist_start(
__in efx_nic_t *enp,
__in efx_bist_type_t type);
#endif /* EFSYS_OPT_BIST */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_resource_limits(
__in efx_nic_t *enp,
@@ -196,19 +218,23 @@ efx_mcdi_get_resource_limits(
__out_opt uint32_t *nrxqp,
__out_opt uint32_t *ntxqp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_log_ctrl(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_mac_stats_clear(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_mac_stats_upload(
__in efx_nic_t *enp,
__in efsys_mem_t *esmp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_mac_stats_periodic(
__in efx_nic_t *enp,
@@ -218,11 +244,13 @@ efx_mcdi_mac_stats_periodic(
#if EFSYS_OPT_LOOPBACK
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_get_loopback_modes(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_LOOPBACK */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
efx_mcdi_phy_module_get_info(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/base/hunt_impl.h b/drivers/net/sfc/base/hunt_impl.h
index 546c5d9d0a..4f193935a7 100644
--- a/drivers/net/sfc/base/hunt_impl.h
+++ b/drivers/net/sfc/base/hunt_impl.h
@@ -43,6 +43,7 @@ extern "C" {
/* NIC */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
hunt_board_cfg(
__in efx_nic_t *enp);
diff --git a/drivers/net/sfc/base/mcdi_mon.h b/drivers/net/sfc/base/mcdi_mon.h
index c79f55c35f..4cdf9d6f5f 100644
--- a/drivers/net/sfc/base/mcdi_mon.h
+++ b/drivers/net/sfc/base/mcdi_mon.h
@@ -17,15 +17,18 @@ extern "C" {
#if EFSYS_OPT_MON_STATS
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
mcdi_mon_cfg_build(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
mcdi_mon_cfg_free(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
mcdi_mon_ev(
__in efx_nic_t *enp,
@@ -33,12 +36,14 @@ mcdi_mon_ev(
__out efx_mon_stat_t *idp,
__out efx_mon_stat_value_t *valuep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
mcdi_mon_stats_update(
__in efx_nic_t *enp,
__in efsys_mem_t *esmp,
__inout_ecount(EFX_MON_NSTATS) efx_mon_stat_value_t *values);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
mcdi_mon_limits_update(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/base/medford2_impl.h b/drivers/net/sfc/base/medford2_impl.h
index 61a11829f2..ea93b51690 100644
--- a/drivers/net/sfc/base/medford2_impl.h
+++ b/drivers/net/sfc/base/medford2_impl.h
@@ -27,6 +27,7 @@ extern "C" {
#define MEDFORD2_MIN_PIO_ALLOC_SIZE (MEDFORD2_PIOBUF_SIZE / 32)
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
medford2_board_cfg(
__in efx_nic_t *enp);
diff --git a/drivers/net/sfc/base/medford_impl.h b/drivers/net/sfc/base/medford_impl.h
index 21e5652fbf..f1a3bb1bf6 100644
--- a/drivers/net/sfc/base/medford_impl.h
+++ b/drivers/net/sfc/base/medford_impl.h
@@ -27,6 +27,7 @@ extern "C" {
#define MEDFORD_MIN_PIO_ALLOC_SIZE (MEDFORD_PIOBUF_SIZE / 32)
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
medford_board_cfg(
__in efx_nic_t *enp);
diff --git a/drivers/net/sfc/base/siena_impl.h b/drivers/net/sfc/base/siena_impl.h
index 83f60d164c..eb3b76369b 100644
--- a/drivers/net/sfc/base/siena_impl.h
+++ b/drivers/net/sfc/base/siena_impl.h
@@ -40,20 +40,24 @@ extern "C" {
#define SIENA_NVRAM_CHUNK 0x80
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nic_probe(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nic_reset(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nic_init(
__in efx_nic_t *enp);
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern efx_sram_pattern_fn_t __efx_sram_pattern_fns[];
typedef struct siena_register_set_s {
@@ -63,28 +67,33 @@ typedef struct siena_register_set_s {
efx_oword_t mask;
} siena_register_set_t;
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nic_register_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_INTERNAL
extern void
siena_nic_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
siena_nic_unprobe(
__in efx_nic_t *enp);
#define SIENA_SRAM_ROWS 0x12000
+LIBEFX_INTERNAL
extern void
siena_sram_init(
__in efx_nic_t *enp);
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_sram_test(
__in efx_nic_t *enp,
@@ -94,11 +103,13 @@ siena_sram_test(
#if EFSYS_OPT_MCDI
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mcdi_init(
__in efx_nic_t *enp,
__in const efx_mcdi_transport_t *mtp);
+LIBEFX_INTERNAL
extern void
siena_mcdi_send_request(
__in efx_nic_t *enp,
@@ -107,10 +118,12 @@ siena_mcdi_send_request(
__in_bcount(sdu_len) void *sdup,
__in size_t sdu_len);
+LIBEFX_INTERNAL
extern __checkReturn boolean_t
siena_mcdi_poll_response(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
siena_mcdi_read_response(
__in efx_nic_t *enp,
@@ -118,20 +131,24 @@ siena_mcdi_read_response(
__in size_t offset,
__in size_t length);
+LIBEFX_INTERNAL
extern efx_rc_t
siena_mcdi_poll_reboot(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern void
siena_mcdi_fini(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mcdi_feature_supported(
__in efx_nic_t *enp,
__in efx_mcdi_feature_id_t id,
__out boolean_t *supportedp);
+LIBEFX_INTERNAL
extern void
siena_mcdi_get_timeout(
__in efx_nic_t *enp,
@@ -142,17 +159,20 @@ siena_mcdi_get_timeout(
#if EFSYS_OPT_NVRAM || EFSYS_OPT_VPD
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_lock(
__in efx_nic_t *enp,
__in uint32_t partn);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_unlock(
__in efx_nic_t *enp,
__in uint32_t partn,
__out_opt uint32_t *verify_resultp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_get_dynamic_cfg(
__in efx_nic_t *enp,
@@ -167,42 +187,49 @@ siena_nvram_get_dynamic_cfg(
#if EFSYS_OPT_DIAG
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_test(
__in efx_nic_t *enp);
#endif /* EFSYS_OPT_DIAG */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_get_subtype(
__in efx_nic_t *enp,
__in uint32_t partn,
__out uint32_t *subtypep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_type_to_partn(
__in efx_nic_t *enp,
__in efx_nvram_type_t type,
__out uint32_t *partnp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_size(
__in efx_nic_t *enp,
__in uint32_t partn,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_info(
__in efx_nic_t *enp,
__in uint32_t partn,
__out efx_nvram_info_t * enip);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_rw_start(
__in efx_nic_t *enp,
__in uint32_t partn,
__out size_t *chunk_sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_read(
__in efx_nic_t *enp,
@@ -211,6 +238,7 @@ siena_nvram_partn_read(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_erase(
__in efx_nic_t *enp,
@@ -218,6 +246,7 @@ siena_nvram_partn_erase(
__in unsigned int offset,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_write(
__in efx_nic_t *enp,
@@ -226,12 +255,14 @@ siena_nvram_partn_write(
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_rw_finish(
__in efx_nic_t *enp,
__in uint32_t partn,
__out_opt uint32_t *verify_resultp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_get_version(
__in efx_nic_t *enp,
@@ -239,6 +270,7 @@ siena_nvram_partn_get_version(
__out uint32_t *subtypep,
__out_ecount(4) uint16_t version[4]);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_nvram_partn_set_version(
__in efx_nic_t *enp,
@@ -249,33 +281,39 @@ siena_nvram_partn_set_version(
#if EFSYS_OPT_VPD
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_init(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_size(
__in efx_nic_t *enp,
__out size_t *sizep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_read(
__in efx_nic_t *enp,
__out_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_verify(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_reinit(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_get(
__in efx_nic_t *enp,
@@ -283,6 +321,7 @@ siena_vpd_get(
__in size_t size,
__inout efx_vpd_value_t *evvp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_set(
__in efx_nic_t *enp,
@@ -290,6 +329,7 @@ siena_vpd_set(
__in size_t size,
__in efx_vpd_value_t *evvp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_next(
__in efx_nic_t *enp,
@@ -298,12 +338,14 @@ siena_vpd_next(
__out efx_vpd_value_t *evvp,
__inout unsigned int *contp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_vpd_write(
__in efx_nic_t *enp,
__in_bcount(size) caddr_t data,
__in size_t size);
+LIBEFX_INTERNAL
extern void
siena_vpd_fini(
__in efx_nic_t *enp);
@@ -321,30 +363,36 @@ typedef struct siena_link_state_s {
boolean_t sls_mac_up;
} siena_link_state_t;
+LIBEFX_INTERNAL
extern void
siena_phy_link_ev(
__in efx_nic_t *enp,
__in efx_qword_t *eqp,
__out efx_link_mode_t *link_modep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_get_link(
__in efx_nic_t *enp,
__out siena_link_state_t *slsp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_power(
__in efx_nic_t *enp,
__in boolean_t on);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_reconfigure(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_verify(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_oui_get(
__in efx_nic_t *enp,
@@ -352,6 +400,7 @@ siena_phy_oui_get(
#if EFSYS_OPT_PHY_STATS
+LIBEFX_INTERNAL
extern void
siena_phy_decode_stats(
__in efx_nic_t *enp,
@@ -360,6 +409,7 @@ siena_phy_decode_stats(
__out_opt uint64_t *smaskp,
__inout_ecount_opt(EFX_PHY_NSTATS) uint32_t *stat);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_stats_update(
__in efx_nic_t *enp,
@@ -370,11 +420,13 @@ siena_phy_stats_update(
#if EFSYS_OPT_BIST
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_bist_start(
__in efx_nic_t *enp,
__in efx_bist_type_t type);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_phy_bist_poll(
__in efx_nic_t *enp,
@@ -386,6 +438,7 @@ siena_phy_bist_poll(
unsigned long *valuesp,
__in size_t count);
+LIBEFX_INTERNAL
extern void
siena_phy_bist_stop(
__in efx_nic_t *enp,
@@ -393,20 +446,24 @@ siena_phy_bist_stop(
#endif /* EFSYS_OPT_BIST */
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_poll(
__in efx_nic_t *enp,
__out efx_link_mode_t *link_modep);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_up(
__in efx_nic_t *enp,
__out boolean_t *mac_upp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_reconfigure(
__in efx_nic_t *enp);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_pdu_get(
__in efx_nic_t *enp,
@@ -414,6 +471,7 @@ siena_mac_pdu_get(
#if EFSYS_OPT_LOOPBACK
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_loopback_set(
__in efx_nic_t *enp,
@@ -424,12 +482,14 @@ siena_mac_loopback_set(
#if EFSYS_OPT_MAC_STATS
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_stats_get_mask(
__in efx_nic_t *enp,
__inout_bcount(mask_size) uint32_t *maskp,
__in size_t mask_size);
+LIBEFX_INTERNAL
extern __checkReturn efx_rc_t
siena_mac_stats_update(
__in efx_nic_t *enp,
diff --git a/drivers/net/sfc/efsys.h b/drivers/net/sfc/efsys.h
index cc132d83bb..dee06e5ae3 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/net/sfc/efsys.h
@@ -34,6 +34,7 @@ extern "C" {
/* No specific decorations required since all functions are local now */
#define LIBEFX_API
+#define LIBEFX_INTERNAL
#define EFSYS_HAS_UINT64 1
#define EFSYS_USE_UINT64 1
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 04/17] net/sfc: include header with debug helpers directly
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (2 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 03/17] net/sfc/base: decorate libefx internal extern functions Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 05/17] net/sfc: introduce common driver library Andrew Rybchenko
` (13 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Avoid build failures on further restructuring.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc.c | 1 +
drivers/net/sfc/sfc.h | 1 +
drivers/net/sfc/sfc_dp_tx.h | 1 +
drivers/net/sfc/sfc_ef10.h | 2 ++
drivers/net/sfc/sfc_ef10_essb_rx.c | 1 +
drivers/net/sfc/sfc_ef10_rx.c | 1 +
drivers/net/sfc/sfc_ef10_rx_ev.h | 2 ++
drivers/net/sfc/sfc_ef10_tx.c | 1 +
drivers/net/sfc/sfc_filter.c | 1 +
drivers/net/sfc/sfc_flow.c | 1 +
drivers/net/sfc/sfc_mcdi.c | 1 +
drivers/net/sfc/sfc_port.c | 1 +
12 files changed, 14 insertions(+)
diff --git a/drivers/net/sfc/sfc.c b/drivers/net/sfc/sfc.c
index c19d81cc88..03ea5dc128 100644
--- a/drivers/net/sfc/sfc.c
+++ b/drivers/net/sfc/sfc.c
@@ -16,6 +16,7 @@
#include "efx.h"
#include "sfc.h"
+#include "sfc_debug.h"
#include "sfc_log.h"
#include "sfc_ev.h"
#include "sfc_rx.h"
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index cf95ebaf90..cdff9be3ec 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -21,6 +21,7 @@
#include "efx.h"
+#include "sfc_debug.h"
#include "sfc_filter.h"
#ifdef __cplusplus
diff --git a/drivers/net/sfc/sfc_dp_tx.h b/drivers/net/sfc/sfc_dp_tx.h
index dcad4fe585..77ae166885 100644
--- a/drivers/net/sfc/sfc_dp_tx.h
+++ b/drivers/net/sfc/sfc_dp_tx.h
@@ -12,6 +12,7 @@
#include <rte_ethdev_driver.h>
+#include "sfc_debug.h"
#include "sfc_dp.h"
#include "sfc_debug.h"
#include "sfc_tso.h"
diff --git a/drivers/net/sfc/sfc_ef10.h b/drivers/net/sfc/sfc_ef10.h
index f138e8d9b0..07c322f7a6 100644
--- a/drivers/net/sfc/sfc_ef10.h
+++ b/drivers/net/sfc/sfc_ef10.h
@@ -10,6 +10,8 @@
#ifndef _SFC_EF10_H
#define _SFC_EF10_H
+#include "sfc_debug.h"
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/drivers/net/sfc/sfc_ef10_essb_rx.c b/drivers/net/sfc/sfc_ef10_essb_rx.c
index 13b2b824e3..8238cc830d 100644
--- a/drivers/net/sfc/sfc_ef10_essb_rx.c
+++ b/drivers/net/sfc/sfc_ef10_essb_rx.c
@@ -18,6 +18,7 @@
#include "efx_types.h"
#include "efx_regs_ef10.h"
+#include "sfc_debug.h"
#include "sfc_tweak.h"
#include "sfc_dp_rx.h"
#include "sfc_kvargs.h"
diff --git a/drivers/net/sfc/sfc_ef10_rx.c b/drivers/net/sfc/sfc_ef10_rx.c
index 42e205e1bd..8c6ebaa2fa 100644
--- a/drivers/net/sfc/sfc_ef10_rx.c
+++ b/drivers/net/sfc/sfc_ef10_rx.c
@@ -21,6 +21,7 @@
#include "efx_regs.h"
#include "efx_regs_ef10.h"
+#include "sfc_debug.h"
#include "sfc_tweak.h"
#include "sfc_dp_rx.h"
#include "sfc_kvargs.h"
diff --git a/drivers/net/sfc/sfc_ef10_rx_ev.h b/drivers/net/sfc/sfc_ef10_rx_ev.h
index a9896eae56..d15d24f4c1 100644
--- a/drivers/net/sfc/sfc_ef10_rx_ev.h
+++ b/drivers/net/sfc/sfc_ef10_rx_ev.h
@@ -16,6 +16,8 @@
#include "efx_regs.h"
#include "efx_regs_ef10.h"
+#include "sfc_debug.h"
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/drivers/net/sfc/sfc_ef10_tx.c b/drivers/net/sfc/sfc_ef10_tx.c
index b91c8068b1..4d7da427cb 100644
--- a/drivers/net/sfc/sfc_ef10_tx.c
+++ b/drivers/net/sfc/sfc_ef10_tx.c
@@ -19,6 +19,7 @@
#include "efx_regs.h"
#include "efx_regs_ef10.h"
+#include "sfc_debug.h"
#include "sfc_dp_tx.h"
#include "sfc_tweak.h"
#include "sfc_kvargs.h"
diff --git a/drivers/net/sfc/sfc_filter.c b/drivers/net/sfc/sfc_filter.c
index 7f4f7c47a5..05a9799230 100644
--- a/drivers/net/sfc/sfc_filter.c
+++ b/drivers/net/sfc/sfc_filter.c
@@ -12,6 +12,7 @@
#include "efx.h"
#include "sfc.h"
+#include "sfc_debug.h"
#include "sfc_log.h"
boolean_t
diff --git a/drivers/net/sfc/sfc_flow.c b/drivers/net/sfc/sfc_flow.c
index c8e6fb8bce..1a3c0d618b 100644
--- a/drivers/net/sfc/sfc_flow.c
+++ b/drivers/net/sfc/sfc_flow.c
@@ -18,6 +18,7 @@
#include "efx.h"
#include "sfc.h"
+#include "sfc_debug.h"
#include "sfc_rx.h"
#include "sfc_filter.h"
#include "sfc_flow.h"
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 872e4e76b1..ec62ba95ff 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -14,6 +14,7 @@
#include "efx_regs_mcdi.h"
#include "sfc.h"
+#include "sfc_debug.h"
#include "sfc_log.h"
#include "sfc_ev.h"
diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
index 32a0894a55..4de13267d5 100644
--- a/drivers/net/sfc/sfc_port.c
+++ b/drivers/net/sfc/sfc_port.c
@@ -10,6 +10,7 @@
#include "efx.h"
#include "sfc.h"
+#include "sfc_debug.h"
#include "sfc_log.h"
#include "sfc_kvargs.h"
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 05/17] net/sfc: introduce common driver library
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (3 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 04/17] net/sfc: include header with debug helpers directly Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 06/17] net/sfc: add dedicated header file with MCDI interface Andrew Rybchenko
` (12 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Move libefx (base driver) into common driver.
Prepare to add vDPA driver which will use the common driver as well.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
MAINTAINERS | 1 +
drivers/common/meson.build | 2 +-
.../{net/sfc => common/sfc_efx}/base/README | 0
.../sfc => common/sfc_efx}/base/ef10_ev.c | 0
.../sfc => common/sfc_efx}/base/ef10_evb.c | 0
.../sfc => common/sfc_efx}/base/ef10_filter.c | 0
.../sfc_efx}/base/ef10_firmware_ids.h | 0
.../sfc => common/sfc_efx}/base/ef10_image.c | 0
.../sfc => common/sfc_efx}/base/ef10_impl.h | 0
.../sfc => common/sfc_efx}/base/ef10_intr.c | 0
.../sfc => common/sfc_efx}/base/ef10_mac.c | 0
.../sfc => common/sfc_efx}/base/ef10_mcdi.c | 0
.../sfc => common/sfc_efx}/base/ef10_nic.c | 0
.../sfc => common/sfc_efx}/base/ef10_nvram.c | 0
.../sfc => common/sfc_efx}/base/ef10_phy.c | 0
.../sfc => common/sfc_efx}/base/ef10_proxy.c | 0
.../sfc => common/sfc_efx}/base/ef10_rx.c | 0
.../sfc_efx}/base/ef10_signed_image_layout.h | 0
.../sfc_efx}/base/ef10_tlv_layout.h | 0
.../sfc => common/sfc_efx}/base/ef10_tx.c | 0
.../sfc => common/sfc_efx}/base/ef10_vpd.c | 0
.../{net/sfc => common/sfc_efx}/base/efx.h | 0
.../sfc => common/sfc_efx}/base/efx_annote.h | 0
.../sfc => common/sfc_efx}/base/efx_bootcfg.c | 0
.../sfc => common/sfc_efx}/base/efx_check.h | 0
.../sfc => common/sfc_efx}/base/efx_crc32.c | 0
.../{net/sfc => common/sfc_efx}/base/efx_ev.c | 0
.../sfc => common/sfc_efx}/base/efx_evb.c | 0
.../sfc => common/sfc_efx}/base/efx_filter.c | 0
.../sfc => common/sfc_efx}/base/efx_hash.c | 0
.../sfc => common/sfc_efx}/base/efx_impl.h | 0
.../sfc => common/sfc_efx}/base/efx_intr.c | 0
.../sfc => common/sfc_efx}/base/efx_lic.c | 0
.../sfc => common/sfc_efx}/base/efx_mac.c | 0
.../sfc => common/sfc_efx}/base/efx_mcdi.c | 0
.../sfc => common/sfc_efx}/base/efx_mcdi.h | 0
.../sfc => common/sfc_efx}/base/efx_mon.c | 0
.../sfc => common/sfc_efx}/base/efx_nic.c | 0
.../sfc => common/sfc_efx}/base/efx_nvram.c | 0
.../sfc => common/sfc_efx}/base/efx_phy.c | 0
.../sfc => common/sfc_efx}/base/efx_phy_ids.h | 0
.../sfc => common/sfc_efx}/base/efx_port.c | 0
.../sfc => common/sfc_efx}/base/efx_proxy.c | 0
.../sfc => common/sfc_efx}/base/efx_regs.h | 0
.../sfc_efx}/base/efx_regs_ef10.h | 0
.../sfc_efx}/base/efx_regs_mcdi.h | 0
.../sfc_efx}/base/efx_regs_mcdi_aoe.h | 0
.../sfc_efx}/base/efx_regs_mcdi_strs.h | 0
.../sfc_efx}/base/efx_regs_pci.h | 0
.../{net/sfc => common/sfc_efx}/base/efx_rx.c | 0
.../sfc => common/sfc_efx}/base/efx_sram.c | 0
.../sfc => common/sfc_efx}/base/efx_tunnel.c | 0
.../{net/sfc => common/sfc_efx}/base/efx_tx.c | 0
.../sfc => common/sfc_efx}/base/efx_types.h | 0
.../sfc => common/sfc_efx}/base/efx_vpd.c | 0
.../sfc => common/sfc_efx}/base/hunt_impl.h | 0
.../sfc => common/sfc_efx}/base/hunt_nic.c | 0
.../sfc => common/sfc_efx}/base/mcdi_mon.c | 0
.../sfc => common/sfc_efx}/base/mcdi_mon.h | 0
.../sfc_efx}/base/medford2_impl.h | 0
.../sfc_efx}/base/medford2_nic.c | 0
.../sfc_efx}/base/medford_impl.h | 0
.../sfc => common/sfc_efx}/base/medford_nic.c | 0
.../sfc => common/sfc_efx}/base/meson.build | 0
.../sfc => common/sfc_efx}/base/siena_flash.h | 0
.../sfc => common/sfc_efx}/base/siena_impl.h | 0
.../sfc => common/sfc_efx}/base/siena_mac.c | 0
.../sfc => common/sfc_efx}/base/siena_mcdi.c | 0
.../sfc => common/sfc_efx}/base/siena_nic.c | 0
.../sfc => common/sfc_efx}/base/siena_nvram.c | 0
.../sfc => common/sfc_efx}/base/siena_phy.c | 0
.../sfc => common/sfc_efx}/base/siena_sram.c | 0
.../sfc => common/sfc_efx}/base/siena_vpd.c | 0
drivers/{net/sfc => common/sfc_efx}/efsys.h | 63 +++---
drivers/common/sfc_efx/meson.build | 39 ++++
.../sfc_efx/rte_common_sfc_efx_version.map | 182 ++++++++++++++++++
drivers/common/sfc_efx/sfc_efx.c | 23 +++
drivers/common/sfc_efx/sfc_efx_debug.h | 29 +++
drivers/common/sfc_efx/sfc_efx_log.h | 22 +++
drivers/net/sfc/meson.build | 6 +-
80 files changed, 330 insertions(+), 37 deletions(-)
rename drivers/{net/sfc => common/sfc_efx}/base/README (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_ev.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_evb.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_filter.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_firmware_ids.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_image.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_intr.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_mac.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_mcdi.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_nvram.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_phy.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_proxy.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_rx.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_signed_image_layout.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_tlv_layout.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_tx.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/ef10_vpd.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_annote.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_bootcfg.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_check.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_crc32.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_ev.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_evb.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_filter.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_hash.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_intr.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_lic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_mac.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_mcdi.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_mcdi.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_mon.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_nvram.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_phy.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_phy_ids.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_port.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_proxy.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs_ef10.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs_mcdi.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs_mcdi_aoe.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs_mcdi_strs.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_regs_pci.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_rx.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_sram.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_tunnel.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_tx.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_types.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/efx_vpd.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/hunt_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/hunt_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/mcdi_mon.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/mcdi_mon.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/medford2_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/medford2_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/medford_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/medford_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/meson.build (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_flash.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_impl.h (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_mac.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_mcdi.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_nic.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_nvram.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_phy.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_sram.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/base/siena_vpd.c (100%)
rename drivers/{net/sfc => common/sfc_efx}/efsys.h (93%)
create mode 100644 drivers/common/sfc_efx/meson.build
create mode 100644 drivers/common/sfc_efx/rte_common_sfc_efx_version.map
create mode 100644 drivers/common/sfc_efx/sfc_efx.c
create mode 100644 drivers/common/sfc_efx/sfc_efx_debug.h
create mode 100644 drivers/common/sfc_efx/sfc_efx_log.h
diff --git a/MAINTAINERS b/MAINTAINERS
index 9db8d69f19..2f6344b057 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -854,6 +854,7 @@ F: doc/guides/nics/features/qede*.ini
Solarflare sfc_efx
M: Andrew Rybchenko <arybchenko@solarflare.com>
+F: drivers/common/sfc_efx/
F: drivers/net/sfc/
F: doc/guides/nics/sfc_efx.rst
F: doc/guides/nics/features/sfc_efx.ini
diff --git a/drivers/common/meson.build b/drivers/common/meson.build
index 9ed4c04ba5..7ac1ca73a2 100644
--- a/drivers/common/meson.build
+++ b/drivers/common/meson.build
@@ -6,6 +6,6 @@ if is_windows
endif
std_deps = ['eal']
-drivers = ['cpt', 'dpaax', 'iavf', 'mvep', 'octeontx', 'octeontx2', 'qat']
+drivers = ['cpt', 'dpaax', 'iavf', 'mvep', 'octeontx', 'octeontx2', 'qat', 'sfc_efx']
config_flag_fmt = 'RTE_LIBRTE_@0@_COMMON'
driver_name_fmt = 'rte_common_@0@'
diff --git a/drivers/net/sfc/base/README b/drivers/common/sfc_efx/base/README
similarity index 100%
rename from drivers/net/sfc/base/README
rename to drivers/common/sfc_efx/base/README
diff --git a/drivers/net/sfc/base/ef10_ev.c b/drivers/common/sfc_efx/base/ef10_ev.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_ev.c
rename to drivers/common/sfc_efx/base/ef10_ev.c
diff --git a/drivers/net/sfc/base/ef10_evb.c b/drivers/common/sfc_efx/base/ef10_evb.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_evb.c
rename to drivers/common/sfc_efx/base/ef10_evb.c
diff --git a/drivers/net/sfc/base/ef10_filter.c b/drivers/common/sfc_efx/base/ef10_filter.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_filter.c
rename to drivers/common/sfc_efx/base/ef10_filter.c
diff --git a/drivers/net/sfc/base/ef10_firmware_ids.h b/drivers/common/sfc_efx/base/ef10_firmware_ids.h
similarity index 100%
rename from drivers/net/sfc/base/ef10_firmware_ids.h
rename to drivers/common/sfc_efx/base/ef10_firmware_ids.h
diff --git a/drivers/net/sfc/base/ef10_image.c b/drivers/common/sfc_efx/base/ef10_image.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_image.c
rename to drivers/common/sfc_efx/base/ef10_image.c
diff --git a/drivers/net/sfc/base/ef10_impl.h b/drivers/common/sfc_efx/base/ef10_impl.h
similarity index 100%
rename from drivers/net/sfc/base/ef10_impl.h
rename to drivers/common/sfc_efx/base/ef10_impl.h
diff --git a/drivers/net/sfc/base/ef10_intr.c b/drivers/common/sfc_efx/base/ef10_intr.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_intr.c
rename to drivers/common/sfc_efx/base/ef10_intr.c
diff --git a/drivers/net/sfc/base/ef10_mac.c b/drivers/common/sfc_efx/base/ef10_mac.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_mac.c
rename to drivers/common/sfc_efx/base/ef10_mac.c
diff --git a/drivers/net/sfc/base/ef10_mcdi.c b/drivers/common/sfc_efx/base/ef10_mcdi.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_mcdi.c
rename to drivers/common/sfc_efx/base/ef10_mcdi.c
diff --git a/drivers/net/sfc/base/ef10_nic.c b/drivers/common/sfc_efx/base/ef10_nic.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_nic.c
rename to drivers/common/sfc_efx/base/ef10_nic.c
diff --git a/drivers/net/sfc/base/ef10_nvram.c b/drivers/common/sfc_efx/base/ef10_nvram.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_nvram.c
rename to drivers/common/sfc_efx/base/ef10_nvram.c
diff --git a/drivers/net/sfc/base/ef10_phy.c b/drivers/common/sfc_efx/base/ef10_phy.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_phy.c
rename to drivers/common/sfc_efx/base/ef10_phy.c
diff --git a/drivers/net/sfc/base/ef10_proxy.c b/drivers/common/sfc_efx/base/ef10_proxy.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_proxy.c
rename to drivers/common/sfc_efx/base/ef10_proxy.c
diff --git a/drivers/net/sfc/base/ef10_rx.c b/drivers/common/sfc_efx/base/ef10_rx.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_rx.c
rename to drivers/common/sfc_efx/base/ef10_rx.c
diff --git a/drivers/net/sfc/base/ef10_signed_image_layout.h b/drivers/common/sfc_efx/base/ef10_signed_image_layout.h
similarity index 100%
rename from drivers/net/sfc/base/ef10_signed_image_layout.h
rename to drivers/common/sfc_efx/base/ef10_signed_image_layout.h
diff --git a/drivers/net/sfc/base/ef10_tlv_layout.h b/drivers/common/sfc_efx/base/ef10_tlv_layout.h
similarity index 100%
rename from drivers/net/sfc/base/ef10_tlv_layout.h
rename to drivers/common/sfc_efx/base/ef10_tlv_layout.h
diff --git a/drivers/net/sfc/base/ef10_tx.c b/drivers/common/sfc_efx/base/ef10_tx.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_tx.c
rename to drivers/common/sfc_efx/base/ef10_tx.c
diff --git a/drivers/net/sfc/base/ef10_vpd.c b/drivers/common/sfc_efx/base/ef10_vpd.c
similarity index 100%
rename from drivers/net/sfc/base/ef10_vpd.c
rename to drivers/common/sfc_efx/base/ef10_vpd.c
diff --git a/drivers/net/sfc/base/efx.h b/drivers/common/sfc_efx/base/efx.h
similarity index 100%
rename from drivers/net/sfc/base/efx.h
rename to drivers/common/sfc_efx/base/efx.h
diff --git a/drivers/net/sfc/base/efx_annote.h b/drivers/common/sfc_efx/base/efx_annote.h
similarity index 100%
rename from drivers/net/sfc/base/efx_annote.h
rename to drivers/common/sfc_efx/base/efx_annote.h
diff --git a/drivers/net/sfc/base/efx_bootcfg.c b/drivers/common/sfc_efx/base/efx_bootcfg.c
similarity index 100%
rename from drivers/net/sfc/base/efx_bootcfg.c
rename to drivers/common/sfc_efx/base/efx_bootcfg.c
diff --git a/drivers/net/sfc/base/efx_check.h b/drivers/common/sfc_efx/base/efx_check.h
similarity index 100%
rename from drivers/net/sfc/base/efx_check.h
rename to drivers/common/sfc_efx/base/efx_check.h
diff --git a/drivers/net/sfc/base/efx_crc32.c b/drivers/common/sfc_efx/base/efx_crc32.c
similarity index 100%
rename from drivers/net/sfc/base/efx_crc32.c
rename to drivers/common/sfc_efx/base/efx_crc32.c
diff --git a/drivers/net/sfc/base/efx_ev.c b/drivers/common/sfc_efx/base/efx_ev.c
similarity index 100%
rename from drivers/net/sfc/base/efx_ev.c
rename to drivers/common/sfc_efx/base/efx_ev.c
diff --git a/drivers/net/sfc/base/efx_evb.c b/drivers/common/sfc_efx/base/efx_evb.c
similarity index 100%
rename from drivers/net/sfc/base/efx_evb.c
rename to drivers/common/sfc_efx/base/efx_evb.c
diff --git a/drivers/net/sfc/base/efx_filter.c b/drivers/common/sfc_efx/base/efx_filter.c
similarity index 100%
rename from drivers/net/sfc/base/efx_filter.c
rename to drivers/common/sfc_efx/base/efx_filter.c
diff --git a/drivers/net/sfc/base/efx_hash.c b/drivers/common/sfc_efx/base/efx_hash.c
similarity index 100%
rename from drivers/net/sfc/base/efx_hash.c
rename to drivers/common/sfc_efx/base/efx_hash.c
diff --git a/drivers/net/sfc/base/efx_impl.h b/drivers/common/sfc_efx/base/efx_impl.h
similarity index 100%
rename from drivers/net/sfc/base/efx_impl.h
rename to drivers/common/sfc_efx/base/efx_impl.h
diff --git a/drivers/net/sfc/base/efx_intr.c b/drivers/common/sfc_efx/base/efx_intr.c
similarity index 100%
rename from drivers/net/sfc/base/efx_intr.c
rename to drivers/common/sfc_efx/base/efx_intr.c
diff --git a/drivers/net/sfc/base/efx_lic.c b/drivers/common/sfc_efx/base/efx_lic.c
similarity index 100%
rename from drivers/net/sfc/base/efx_lic.c
rename to drivers/common/sfc_efx/base/efx_lic.c
diff --git a/drivers/net/sfc/base/efx_mac.c b/drivers/common/sfc_efx/base/efx_mac.c
similarity index 100%
rename from drivers/net/sfc/base/efx_mac.c
rename to drivers/common/sfc_efx/base/efx_mac.c
diff --git a/drivers/net/sfc/base/efx_mcdi.c b/drivers/common/sfc_efx/base/efx_mcdi.c
similarity index 100%
rename from drivers/net/sfc/base/efx_mcdi.c
rename to drivers/common/sfc_efx/base/efx_mcdi.c
diff --git a/drivers/net/sfc/base/efx_mcdi.h b/drivers/common/sfc_efx/base/efx_mcdi.h
similarity index 100%
rename from drivers/net/sfc/base/efx_mcdi.h
rename to drivers/common/sfc_efx/base/efx_mcdi.h
diff --git a/drivers/net/sfc/base/efx_mon.c b/drivers/common/sfc_efx/base/efx_mon.c
similarity index 100%
rename from drivers/net/sfc/base/efx_mon.c
rename to drivers/common/sfc_efx/base/efx_mon.c
diff --git a/drivers/net/sfc/base/efx_nic.c b/drivers/common/sfc_efx/base/efx_nic.c
similarity index 100%
rename from drivers/net/sfc/base/efx_nic.c
rename to drivers/common/sfc_efx/base/efx_nic.c
diff --git a/drivers/net/sfc/base/efx_nvram.c b/drivers/common/sfc_efx/base/efx_nvram.c
similarity index 100%
rename from drivers/net/sfc/base/efx_nvram.c
rename to drivers/common/sfc_efx/base/efx_nvram.c
diff --git a/drivers/net/sfc/base/efx_phy.c b/drivers/common/sfc_efx/base/efx_phy.c
similarity index 100%
rename from drivers/net/sfc/base/efx_phy.c
rename to drivers/common/sfc_efx/base/efx_phy.c
diff --git a/drivers/net/sfc/base/efx_phy_ids.h b/drivers/common/sfc_efx/base/efx_phy_ids.h
similarity index 100%
rename from drivers/net/sfc/base/efx_phy_ids.h
rename to drivers/common/sfc_efx/base/efx_phy_ids.h
diff --git a/drivers/net/sfc/base/efx_port.c b/drivers/common/sfc_efx/base/efx_port.c
similarity index 100%
rename from drivers/net/sfc/base/efx_port.c
rename to drivers/common/sfc_efx/base/efx_port.c
diff --git a/drivers/net/sfc/base/efx_proxy.c b/drivers/common/sfc_efx/base/efx_proxy.c
similarity index 100%
rename from drivers/net/sfc/base/efx_proxy.c
rename to drivers/common/sfc_efx/base/efx_proxy.c
diff --git a/drivers/net/sfc/base/efx_regs.h b/drivers/common/sfc_efx/base/efx_regs.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs.h
rename to drivers/common/sfc_efx/base/efx_regs.h
diff --git a/drivers/net/sfc/base/efx_regs_ef10.h b/drivers/common/sfc_efx/base/efx_regs_ef10.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs_ef10.h
rename to drivers/common/sfc_efx/base/efx_regs_ef10.h
diff --git a/drivers/net/sfc/base/efx_regs_mcdi.h b/drivers/common/sfc_efx/base/efx_regs_mcdi.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs_mcdi.h
rename to drivers/common/sfc_efx/base/efx_regs_mcdi.h
diff --git a/drivers/net/sfc/base/efx_regs_mcdi_aoe.h b/drivers/common/sfc_efx/base/efx_regs_mcdi_aoe.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs_mcdi_aoe.h
rename to drivers/common/sfc_efx/base/efx_regs_mcdi_aoe.h
diff --git a/drivers/net/sfc/base/efx_regs_mcdi_strs.h b/drivers/common/sfc_efx/base/efx_regs_mcdi_strs.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs_mcdi_strs.h
rename to drivers/common/sfc_efx/base/efx_regs_mcdi_strs.h
diff --git a/drivers/net/sfc/base/efx_regs_pci.h b/drivers/common/sfc_efx/base/efx_regs_pci.h
similarity index 100%
rename from drivers/net/sfc/base/efx_regs_pci.h
rename to drivers/common/sfc_efx/base/efx_regs_pci.h
diff --git a/drivers/net/sfc/base/efx_rx.c b/drivers/common/sfc_efx/base/efx_rx.c
similarity index 100%
rename from drivers/net/sfc/base/efx_rx.c
rename to drivers/common/sfc_efx/base/efx_rx.c
diff --git a/drivers/net/sfc/base/efx_sram.c b/drivers/common/sfc_efx/base/efx_sram.c
similarity index 100%
rename from drivers/net/sfc/base/efx_sram.c
rename to drivers/common/sfc_efx/base/efx_sram.c
diff --git a/drivers/net/sfc/base/efx_tunnel.c b/drivers/common/sfc_efx/base/efx_tunnel.c
similarity index 100%
rename from drivers/net/sfc/base/efx_tunnel.c
rename to drivers/common/sfc_efx/base/efx_tunnel.c
diff --git a/drivers/net/sfc/base/efx_tx.c b/drivers/common/sfc_efx/base/efx_tx.c
similarity index 100%
rename from drivers/net/sfc/base/efx_tx.c
rename to drivers/common/sfc_efx/base/efx_tx.c
diff --git a/drivers/net/sfc/base/efx_types.h b/drivers/common/sfc_efx/base/efx_types.h
similarity index 100%
rename from drivers/net/sfc/base/efx_types.h
rename to drivers/common/sfc_efx/base/efx_types.h
diff --git a/drivers/net/sfc/base/efx_vpd.c b/drivers/common/sfc_efx/base/efx_vpd.c
similarity index 100%
rename from drivers/net/sfc/base/efx_vpd.c
rename to drivers/common/sfc_efx/base/efx_vpd.c
diff --git a/drivers/net/sfc/base/hunt_impl.h b/drivers/common/sfc_efx/base/hunt_impl.h
similarity index 100%
rename from drivers/net/sfc/base/hunt_impl.h
rename to drivers/common/sfc_efx/base/hunt_impl.h
diff --git a/drivers/net/sfc/base/hunt_nic.c b/drivers/common/sfc_efx/base/hunt_nic.c
similarity index 100%
rename from drivers/net/sfc/base/hunt_nic.c
rename to drivers/common/sfc_efx/base/hunt_nic.c
diff --git a/drivers/net/sfc/base/mcdi_mon.c b/drivers/common/sfc_efx/base/mcdi_mon.c
similarity index 100%
rename from drivers/net/sfc/base/mcdi_mon.c
rename to drivers/common/sfc_efx/base/mcdi_mon.c
diff --git a/drivers/net/sfc/base/mcdi_mon.h b/drivers/common/sfc_efx/base/mcdi_mon.h
similarity index 100%
rename from drivers/net/sfc/base/mcdi_mon.h
rename to drivers/common/sfc_efx/base/mcdi_mon.h
diff --git a/drivers/net/sfc/base/medford2_impl.h b/drivers/common/sfc_efx/base/medford2_impl.h
similarity index 100%
rename from drivers/net/sfc/base/medford2_impl.h
rename to drivers/common/sfc_efx/base/medford2_impl.h
diff --git a/drivers/net/sfc/base/medford2_nic.c b/drivers/common/sfc_efx/base/medford2_nic.c
similarity index 100%
rename from drivers/net/sfc/base/medford2_nic.c
rename to drivers/common/sfc_efx/base/medford2_nic.c
diff --git a/drivers/net/sfc/base/medford_impl.h b/drivers/common/sfc_efx/base/medford_impl.h
similarity index 100%
rename from drivers/net/sfc/base/medford_impl.h
rename to drivers/common/sfc_efx/base/medford_impl.h
diff --git a/drivers/net/sfc/base/medford_nic.c b/drivers/common/sfc_efx/base/medford_nic.c
similarity index 100%
rename from drivers/net/sfc/base/medford_nic.c
rename to drivers/common/sfc_efx/base/medford_nic.c
diff --git a/drivers/net/sfc/base/meson.build b/drivers/common/sfc_efx/base/meson.build
similarity index 100%
rename from drivers/net/sfc/base/meson.build
rename to drivers/common/sfc_efx/base/meson.build
diff --git a/drivers/net/sfc/base/siena_flash.h b/drivers/common/sfc_efx/base/siena_flash.h
similarity index 100%
rename from drivers/net/sfc/base/siena_flash.h
rename to drivers/common/sfc_efx/base/siena_flash.h
diff --git a/drivers/net/sfc/base/siena_impl.h b/drivers/common/sfc_efx/base/siena_impl.h
similarity index 100%
rename from drivers/net/sfc/base/siena_impl.h
rename to drivers/common/sfc_efx/base/siena_impl.h
diff --git a/drivers/net/sfc/base/siena_mac.c b/drivers/common/sfc_efx/base/siena_mac.c
similarity index 100%
rename from drivers/net/sfc/base/siena_mac.c
rename to drivers/common/sfc_efx/base/siena_mac.c
diff --git a/drivers/net/sfc/base/siena_mcdi.c b/drivers/common/sfc_efx/base/siena_mcdi.c
similarity index 100%
rename from drivers/net/sfc/base/siena_mcdi.c
rename to drivers/common/sfc_efx/base/siena_mcdi.c
diff --git a/drivers/net/sfc/base/siena_nic.c b/drivers/common/sfc_efx/base/siena_nic.c
similarity index 100%
rename from drivers/net/sfc/base/siena_nic.c
rename to drivers/common/sfc_efx/base/siena_nic.c
diff --git a/drivers/net/sfc/base/siena_nvram.c b/drivers/common/sfc_efx/base/siena_nvram.c
similarity index 100%
rename from drivers/net/sfc/base/siena_nvram.c
rename to drivers/common/sfc_efx/base/siena_nvram.c
diff --git a/drivers/net/sfc/base/siena_phy.c b/drivers/common/sfc_efx/base/siena_phy.c
similarity index 100%
rename from drivers/net/sfc/base/siena_phy.c
rename to drivers/common/sfc_efx/base/siena_phy.c
diff --git a/drivers/net/sfc/base/siena_sram.c b/drivers/common/sfc_efx/base/siena_sram.c
similarity index 100%
rename from drivers/net/sfc/base/siena_sram.c
rename to drivers/common/sfc_efx/base/siena_sram.c
diff --git a/drivers/net/sfc/base/siena_vpd.c b/drivers/common/sfc_efx/base/siena_vpd.c
similarity index 100%
rename from drivers/net/sfc/base/siena_vpd.c
rename to drivers/common/sfc_efx/base/siena_vpd.c
diff --git a/drivers/net/sfc/efsys.h b/drivers/common/sfc_efx/efsys.h
similarity index 93%
rename from drivers/net/sfc/efsys.h
rename to drivers/common/sfc_efx/efsys.h
index dee06e5ae3..46b08f9789 100644
--- a/drivers/net/sfc/efsys.h
+++ b/drivers/common/sfc_efx/efsys.h
@@ -25,15 +25,16 @@
#include <rte_log.h>
#include <rte_io.h>
-#include "sfc_debug.h"
-#include "sfc_log.h"
+#include "sfc_efx_debug.h"
+#include "sfc_efx_log.h"
#ifdef __cplusplus
extern "C" {
#endif
-/* No specific decorations required since all functions are local now */
-#define LIBEFX_API
+#define LIBEFX_API __rte_internal
+
+/* No specific decorations required since functions are local by default */
#define LIBEFX_INTERNAL
#define EFSYS_HAS_UINT64 1
@@ -228,8 +229,8 @@ typedef struct efsys_mem_s {
volatile uint32_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_dword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_dword_t))); \
\
_addr = (volatile uint32_t *)(_base + (_offset)); \
(_edp)->ed_u32[0] = _addr[0]; \
@@ -246,8 +247,8 @@ typedef struct efsys_mem_s {
volatile uint64_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_qword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_qword_t))); \
\
_addr = (volatile uint64_t *)(_base + (_offset)); \
(_eqp)->eq_u64[0] = _addr[0]; \
@@ -265,8 +266,8 @@ typedef struct efsys_mem_s {
volatile __m128i *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_oword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_oword_t))); \
\
_addr = (volatile __m128i *)(_base + (_offset)); \
(_eop)->eo_u128[0] = _addr[0]; \
@@ -287,8 +288,8 @@ typedef struct efsys_mem_s {
volatile uint32_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_dword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_dword_t))); \
\
EFSYS_PROBE2(mem_writed, unsigned int, (_offset), \
uint32_t, (_edp)->ed_u32[0]); \
@@ -305,8 +306,8 @@ typedef struct efsys_mem_s {
volatile uint64_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_qword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_qword_t))); \
\
EFSYS_PROBE3(mem_writeq, unsigned int, (_offset), \
uint32_t, (_eqp)->eq_u32[1], \
@@ -324,8 +325,8 @@ typedef struct efsys_mem_s {
volatile __m128i *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_oword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_oword_t))); \
\
\
EFSYS_PROBE5(mem_writeo, unsigned int, (_offset), \
@@ -390,8 +391,8 @@ typedef struct efsys_bar_s {
volatile uint32_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_dword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_dword_t))); \
_NOTE(CONSTANTCONDITION); \
if (_lock) \
SFC_BAR_LOCK(_esbp); \
@@ -415,8 +416,8 @@ typedef struct efsys_bar_s {
volatile uint64_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_qword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_qword_t))); \
\
SFC_BAR_LOCK(_esbp); \
\
@@ -438,8 +439,8 @@ typedef struct efsys_bar_s {
volatile __m128i *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_oword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_oword_t))); \
\
_NOTE(CONSTANTCONDITION); \
if (_lock) \
@@ -469,8 +470,8 @@ typedef struct efsys_bar_s {
volatile uint32_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_dword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_dword_t))); \
\
_NOTE(CONSTANTCONDITION); \
if (_lock) \
@@ -495,8 +496,8 @@ typedef struct efsys_bar_s {
volatile uint64_t *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_qword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_qword_t))); \
\
SFC_BAR_LOCK(_esbp); \
\
@@ -530,8 +531,8 @@ typedef struct efsys_bar_s {
volatile __m128i *_addr; \
\
_NOTE(CONSTANTCONDITION); \
- SFC_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
- sizeof(efx_oword_t))); \
+ SFC_EFX_ASSERT(EFX_IS_P2ALIGNED(size_t, _offset, \
+ sizeof(efx_oword_t))); \
\
_NOTE(CONSTANTCONDITION); \
if (_lock) \
@@ -629,7 +630,7 @@ typedef rte_spinlock_t efsys_lock_t;
#define SFC_EFSYS_UNLOCK(_eslp) \
rte_spinlock_unlock((_eslp))
#define SFC_EFSYS_LOCK_ASSERT_OWNED(_eslp) \
- SFC_ASSERT(rte_spinlock_is_locked((_eslp)))
+ SFC_EFX_ASSERT(rte_spinlock_is_locked((_eslp)))
typedef int efsys_lock_state_t;
@@ -644,7 +645,7 @@ typedef int efsys_lock_state_t;
#define EFSYS_UNLOCK(_lockp, _state) \
do { \
- SFC_ASSERT((_state) == EFSYS_LOCK_MAGIC); \
+ SFC_EFX_ASSERT((_state) == EFSYS_LOCK_MAGIC); \
SFC_EFSYS_UNLOCK(_lockp); \
_NOTE(CONSTANTCONDITION); \
} while (B_FALSE)
@@ -701,7 +702,7 @@ typedef uint64_t efsys_stat_t;
#define EFSYS_ERR(_esip, _code, _dword0, _dword1) \
do { \
(void)(_esip); \
- SFC_GENERIC_LOG(ERR, "FATAL ERROR #%u (0x%08x%08x)", \
+ SFC_EFX_LOG(ERR, "FATAL ERROR #%u (0x%08x%08x)", \
(_code), (_dword0), (_dword1)); \
_NOTE(CONSTANTCONDITION); \
} while (B_FALSE)
diff --git a/drivers/common/sfc_efx/meson.build b/drivers/common/sfc_efx/meson.build
new file mode 100644
index 0000000000..8fab4df792
--- /dev/null
+++ b/drivers/common/sfc_efx/meson.build
@@ -0,0 +1,39 @@
+# SPDX-License-Identifier: BSD-3-Clause
+#
+# Copyright(c) 2019-2020 Xilinx, Inc.
+#
+# This software was jointly developed between OKTET Labs (under contract
+# for Solarflare) and Solarflare Communications, Inc.
+
+if arch_subdir != 'x86' or not dpdk_conf.get('RTE_ARCH_64')
+ build = false
+ reason = 'only supported on x86_64'
+endif
+
+extra_flags = []
+
+# Enable more warnings
+extra_flags += [
+ '-Wdisabled-optimization'
+]
+
+# Compiler and version dependent flags
+extra_flags += [
+ '-Waggregate-return',
+ '-Wbad-function-cast'
+]
+
+foreach flag: extra_flags
+ if cc.has_argument(flag)
+ cflags += flag
+ endif
+endforeach
+
+subdir('base')
+objs = [base_objs]
+
+sources = files(
+ 'sfc_efx.c',
+)
+
+includes += include_directories('base')
diff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
new file mode 100644
index 0000000000..fa297d251b
--- /dev/null
+++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
@@ -0,0 +1,182 @@
+INTERNAL {
+ global:
+
+ efx_crc32_calculate;
+
+ efx_ev_fini;
+ efx_ev_init;
+ efx_ev_qcreate;
+ efx_ev_qdestroy;
+ efx_ev_qmoderate;
+ efx_ev_qpending;
+ efx_ev_qpoll;
+ efx_ev_qpost;
+ efx_ev_qprime;
+ efx_ev_usecs_to_ticks;
+
+ efx_evq_nbufs;
+ efx_evq_size;
+
+ efx_family;
+
+ efx_filter_fini;
+ efx_filter_init;
+ efx_filter_insert;
+ efx_filter_remove;
+ efx_filter_restore;
+ efx_filter_spec_init_rx;
+ efx_filter_spec_init_tx;
+ efx_filter_spec_set_encap_type;
+ efx_filter_spec_set_eth_local;
+ efx_filter_spec_set_ether_type;
+ efx_filter_spec_set_geneve;
+ efx_filter_spec_set_ipv4_full;
+ efx_filter_spec_set_ipv4_local;
+ efx_filter_spec_set_mc_def;
+ efx_filter_spec_set_nvgre;
+ efx_filter_spec_set_rss_context;
+ efx_filter_spec_set_uc_def;
+ efx_filter_spec_set_vxlan;
+ efx_filter_supported_filters;
+
+ efx_hash_bytes;
+ efx_hash_dwords;
+
+ efx_intr_disable;
+ efx_intr_disable_unlocked;
+ efx_intr_enable;
+ efx_intr_fatal;
+ efx_intr_fini;
+ efx_intr_init;
+ efx_intr_status_line;
+ efx_intr_status_message;
+ efx_intr_trigger;
+
+ efx_loopback_mask;
+ efx_loopback_type_name;
+
+ efx_mac_addr_set;
+ efx_mac_drain;
+ efx_mac_fcntl_get;
+ efx_mac_fcntl_set;
+ efx_mac_filter_default_rxq_clear;
+ efx_mac_filter_default_rxq_set;
+ efx_mac_filter_get_all_ucast_mcast;
+ efx_mac_filter_set;
+ efx_mac_multicast_list_set;
+ efx_mac_pdu_get;
+ efx_mac_pdu_set;
+ efx_mac_stat_name;
+ efx_mac_stats_clear;
+ efx_mac_stats_get_mask;
+ efx_mac_stats_periodic;
+ efx_mac_stats_update;
+ efx_mac_stats_upload;
+ efx_mac_up;
+
+ efx_mcdi_fini;
+ efx_mcdi_get_proxy_handle;
+ efx_mcdi_get_timeout;
+ efx_mcdi_init;
+ efx_mcdi_new_epoch;
+ efx_mcdi_reboot;
+ efx_mcdi_request_abort;
+ efx_mcdi_request_poll;
+ efx_mcdi_request_start;
+
+ efx_mon_fini;
+ efx_mon_init;
+ efx_mon_name;
+
+ efx_nic_calculate_pcie_link_bandwidth;
+ efx_nic_cfg_get;
+ efx_nic_check_pcie_link_speed;
+ efx_nic_create;
+ efx_nic_destroy;
+ efx_nic_fini;
+ efx_nic_get_bar_region;
+ efx_nic_get_fw_subvariant;
+ efx_nic_get_fw_version;
+ efx_nic_get_vi_pool;
+ efx_nic_hw_unavailable;
+ efx_nic_init;
+ efx_nic_probe;
+ efx_nic_reset;
+ efx_nic_set_drv_limits;
+ efx_nic_set_drv_version;
+ efx_nic_set_fw_subvariant;
+ efx_nic_set_hw_unavailable;
+ efx_nic_unprobe;
+
+ efx_phy_adv_cap_get;
+ efx_phy_adv_cap_set;
+ efx_phy_fec_type_get;
+ efx_phy_link_state_get;
+ efx_phy_lp_cap_get;
+ efx_phy_media_type_get;
+ efx_phy_module_get_info;
+ efx_phy_oui_get;
+ efx_phy_verify;
+
+ efx_port_fini;
+ efx_port_init;
+ efx_port_loopback_set;
+ efx_port_poll;
+
+ efx_pseudo_hdr_hash_get;
+ efx_pseudo_hdr_pkt_length_get;
+
+ efx_rx_fini;
+ efx_rx_hash_default_support_get;
+ efx_rx_init;
+ efx_rx_qcreate;
+ efx_rx_qcreate_es_super_buffer;
+ efx_rx_qdestroy;
+ efx_rx_qenable;
+ efx_rx_qflush;
+ efx_rx_qpost;
+ efx_rx_qpush;
+ efx_rx_scale_context_alloc;
+ efx_rx_scale_context_free;
+ efx_rx_scale_default_support_get;
+ efx_rx_scale_hash_flags_get;
+ efx_rx_scale_key_set;
+ efx_rx_scale_mode_set;
+ efx_rx_scale_tbl_set;
+ efx_rxq_nbufs;
+ efx_rxq_size;
+
+ efx_sram_buf_tbl_clear;
+ efx_sram_buf_tbl_set;
+
+ efx_tunnel_config_clear;
+ efx_tunnel_config_udp_add;
+ efx_tunnel_config_udp_remove;
+ efx_tunnel_fini;
+ efx_tunnel_init;
+ efx_tunnel_reconfigure;
+
+ efx_tx_fini;
+ efx_tx_init;
+ efx_tx_qcreate;
+ efx_tx_qdesc_checksum_create;
+ efx_tx_qdesc_dma_create;
+ efx_tx_qdesc_post;
+ efx_tx_qdesc_tso_create;
+ efx_tx_qdesc_tso2_create;
+ efx_tx_qdesc_vlantci_create;
+ efx_tx_qdestroy;
+ efx_tx_qenable;
+ efx_tx_qflush;
+ efx_tx_qpace;
+ efx_tx_qpio_disable;
+ efx_tx_qpio_enable;
+ efx_tx_qpio_post;
+ efx_tx_qpio_write;
+ efx_tx_qpost;
+ efx_tx_qpush;
+ efx_txq_nbufs;
+ efx_txq_size;
+
+ local: *;
+};
diff --git a/drivers/common/sfc_efx/sfc_efx.c b/drivers/common/sfc_efx/sfc_efx.c
new file mode 100644
index 0000000000..0b8d5efee9
--- /dev/null
+++ b/drivers/common/sfc_efx/sfc_efx.c
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2019 Solarflare Communications Inc.
+ *
+ * This software was jointly developed between OKTET Labs (under contract
+ * for Solarflare) and Solarflare Communications, Inc.
+ */
+
+#include <rte_log.h>
+
+#include "sfc_efx_log.h"
+
+uint32_t sfc_efx_logtype;
+
+RTE_INIT(sfc_efx_register_logtype)
+{
+ int ret;
+
+ ret = rte_log_register_type_and_pick_level("pmd.common.sfc_efx",
+ RTE_LOG_NOTICE);
+ sfc_efx_logtype = (ret < 0) ? RTE_LOGTYPE_PMD : ret;
+}
diff --git a/drivers/common/sfc_efx/sfc_efx_debug.h b/drivers/common/sfc_efx/sfc_efx_debug.h
new file mode 100644
index 0000000000..e0bdeeb5a4
--- /dev/null
+++ b/drivers/common/sfc_efx/sfc_efx_debug.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2019 Solarflare Communications Inc.
+ *
+ * This software was jointly developed between OKTET Labs (under contract
+ * for Solarflare) and Solarflare Communications, Inc.
+ */
+
+#ifndef _SFC_EFX_DEBUG_H_
+#define _SFC_EFX_DEBUG_H_
+
+#include <rte_debug.h>
+
+#ifndef RTE_DEBUG_COMMON_SFC_EFX
+#define RTE_DEBUG_COMMON_SFC_EFX 0
+#endif
+
+#ifdef RTE_DEBUG_COMMON_SFC_EFX
+/* Avoid dependency from RTE_LOG_DP_LEVEL to be able to enable debug check
+ * in the driver only.
+ */
+#define SFC_EFX_ASSERT(exp) RTE_VERIFY(exp)
+#else
+/* If the driver debug is not enabled, follow DPDK debug/non-debug */
+#define SFC_EFX_ASSERT(exp) RTE_ASSERT(exp)
+#endif
+
+#endif /* _SFC_EFX_DEBUG_H_ */
diff --git a/drivers/common/sfc_efx/sfc_efx_log.h b/drivers/common/sfc_efx/sfc_efx_log.h
new file mode 100644
index 0000000000..f4417ffc30
--- /dev/null
+++ b/drivers/common/sfc_efx/sfc_efx_log.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2019 Solarflare Communications Inc.
+ *
+ * This software was jointly developed between OKTET Labs (under contract
+ * for Solarflare) and Solarflare Communications, Inc.
+ */
+
+#ifndef _SFC_EFX_LOG_H_
+#define _SFC_EFX_LOG_H_
+
+/** Generic driver log type */
+extern uint32_t sfc_efx_logtype;
+
+/** Log message, add a prefix and a line break */
+#define SFC_EFX_LOG(level, ...) \
+ rte_log(RTE_LOG_ ## level, sfc_efx_logtype, \
+ RTE_FMT("sfc_efx: " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
+ RTE_FMT_TAIL(__VA_ARGS__ ,)))
+
+#endif /* _SFC_EFX_LOG_H_ */
diff --git a/drivers/net/sfc/meson.build b/drivers/net/sfc/meson.build
index 35c05ac1dd..26f0323738 100644
--- a/drivers/net/sfc/meson.build
+++ b/drivers/net/sfc/meson.build
@@ -33,9 +33,7 @@ foreach flag: extra_flags
endif
endforeach
-subdir('base')
-objs = [base_objs]
-
+deps += ['common_sfc_efx']
sources = files(
'sfc_ethdev.c',
'sfc_kvargs.c',
@@ -54,5 +52,3 @@ sources = files(
'sfc_ef10_essb_rx.c',
'sfc_ef10_tx.c'
)
-
-includes += include_directories('base')
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 06/17] net/sfc: add dedicated header file with MCDI interface
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (4 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 05/17] net/sfc: introduce common driver library Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 07/17] net/sfc: move MCDI helper interface to dedicated namespace Andrew Rybchenko
` (11 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
MCDI helpers will be shared by net and vDPA drivers.
Prepare to move it to common/sfc_efx.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc.h | 23 +---------------
drivers/net/sfc/sfc_mcdi.c | 1 +
drivers/net/sfc/sfc_mcdi.h | 54 ++++++++++++++++++++++++++++++++++++++
3 files changed, 56 insertions(+), 22 deletions(-)
create mode 100644 drivers/net/sfc/sfc_mcdi.h
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index cdff9be3ec..a530b12a8e 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -23,6 +23,7 @@
#include "sfc_debug.h"
#include "sfc_filter.h"
+#include "sfc_mcdi.h"
#ifdef __cplusplus
extern "C" {
@@ -86,25 +87,6 @@ enum sfc_dev_filter_mode {
SFC_DEV_FILTER_NMODES
};
-enum sfc_mcdi_state {
- SFC_MCDI_UNINITIALIZED = 0,
- SFC_MCDI_INITIALIZED,
- SFC_MCDI_BUSY,
- SFC_MCDI_COMPLETED,
-
- SFC_MCDI_NSTATES
-};
-
-struct sfc_mcdi {
- rte_spinlock_t lock;
- efsys_mem_t mem;
- enum sfc_mcdi_state state;
- efx_mcdi_transport_t transport;
- uint32_t logtype;
- uint32_t proxy_handle;
- efx_rc_t proxy_result;
-};
-
struct sfc_intr {
efx_intr_type_t type;
rte_intr_callback_fn handler;
@@ -384,9 +366,6 @@ void sfc_stop(struct sfc_adapter *sa);
void sfc_schedule_restart(struct sfc_adapter *sa);
-int sfc_mcdi_init(struct sfc_adapter *sa);
-void sfc_mcdi_fini(struct sfc_adapter *sa);
-
int sfc_configure(struct sfc_adapter *sa);
void sfc_close(struct sfc_adapter *sa);
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index ec62ba95ff..9a51b3e030 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -13,6 +13,7 @@
#include "efx_mcdi.h"
#include "efx_regs_mcdi.h"
+#include "sfc_mcdi.h"
#include "sfc.h"
#include "sfc_debug.h"
#include "sfc_log.h"
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
new file mode 100644
index 0000000000..789a16d8bb
--- /dev/null
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2016-2019 Solarflare Communications Inc.
+ *
+ * This software was jointly developed between OKTET Labs (under contract
+ * for Solarflare) and Solarflare Communications, Inc.
+ */
+
+#ifndef _SFC_MCDI_H
+#define _SFC_MCDI_H
+
+#include <stdint.h>
+
+#include <rte_spinlock.h>
+
+#include "efsys.h"
+#include "efx.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum sfc_mcdi_state {
+ SFC_MCDI_UNINITIALIZED = 0,
+ SFC_MCDI_INITIALIZED,
+ SFC_MCDI_BUSY,
+ SFC_MCDI_COMPLETED,
+
+ SFC_MCDI_NSTATES
+};
+
+struct sfc_mcdi {
+ rte_spinlock_t lock;
+ efsys_mem_t mem;
+ enum sfc_mcdi_state state;
+ efx_mcdi_transport_t transport;
+ uint32_t logtype;
+ uint32_t proxy_handle;
+ efx_rc_t proxy_result;
+};
+
+
+struct sfc_adapter;
+
+int sfc_mcdi_init(struct sfc_adapter *sa);
+void sfc_mcdi_fini(struct sfc_adapter *sa);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SFC_MCDI_H */
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 07/17] net/sfc: move MCDI helper interface to dedicated namespace
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (5 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 06/17] net/sfc: add dedicated header file with MCDI interface Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 08/17] net/sfc: make MCDI logging helper macros local Andrew Rybchenko
` (10 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
MCDI helpers will be moved to common/sfc_efx and it is better
to do dummy renamings first before non-trivial changes.
Existing functionality should be split into common and network
driver specific parts. Prepare to do it.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc.h | 5 +-
drivers/net/sfc/sfc_mcdi.c | 108 +++++++++++++++++++++----------------
drivers/net/sfc/sfc_mcdi.h | 22 +++-----
3 files changed, 73 insertions(+), 62 deletions(-)
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index a530b12a8e..b3ac752334 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -220,7 +220,7 @@ struct sfc_adapter {
rte_spinlock_t nic_lock;
rte_atomic32_t restart_required;
- struct sfc_mcdi mcdi;
+ struct sfc_efx_mcdi mcdi;
struct sfc_intr intr;
struct sfc_port port;
struct sfc_filter filter;
@@ -366,6 +366,9 @@ void sfc_stop(struct sfc_adapter *sa);
void sfc_schedule_restart(struct sfc_adapter *sa);
+int sfc_mcdi_init(struct sfc_adapter *sa);
+void sfc_mcdi_fini(struct sfc_adapter *sa);
+
int sfc_configure(struct sfc_adapter *sa);
void sfc_close(struct sfc_adapter *sa);
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 9a51b3e030..c97a33d558 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -19,12 +19,12 @@
#include "sfc_log.h"
#include "sfc_ev.h"
-#define SFC_MCDI_POLL_INTERVAL_MIN_US 10 /* 10us in 1us units */
-#define SFC_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms in 1us units */
-#define SFC_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s in 1us units */
+#define SFC_EFX_MCDI_POLL_INTERVAL_MIN_US 10 /* 10us */
+#define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */
+#define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */
static void
-sfc_mcdi_timeout(struct sfc_adapter *sa)
+sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
{
sfc_warn(sa, "MC TIMEOUT");
@@ -32,9 +32,9 @@ sfc_mcdi_timeout(struct sfc_adapter *sa)
}
static inline boolean_t
-sfc_mcdi_proxy_event_available(struct sfc_adapter *sa)
+sfc_efx_mcdi_proxy_event_available(struct sfc_adapter *sa)
{
- struct sfc_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
mcdi->proxy_handle = 0;
mcdi->proxy_result = ETIMEDOUT;
@@ -46,7 +46,7 @@ sfc_mcdi_proxy_event_available(struct sfc_adapter *sa)
}
static void
-sfc_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
+sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
{
efx_nic_t *enp;
unsigned int delay_total;
@@ -54,22 +54,22 @@ sfc_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
boolean_t aborted __rte_unused;
delay_total = 0;
- delay_us = SFC_MCDI_POLL_INTERVAL_MIN_US;
+ delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MIN_US;
enp = sa->nic;
do {
boolean_t poll_completed;
- poll_completed = (proxy) ? sfc_mcdi_proxy_event_available(sa) :
+ poll_completed = (proxy) ? sfc_efx_mcdi_proxy_event_available(sa) :
efx_mcdi_request_poll(enp);
if (poll_completed)
return;
- if (delay_total > SFC_MCDI_WATCHDOG_INTERVAL_US) {
+ if (delay_total > SFC_EFX_MCDI_WATCHDOG_INTERVAL_US) {
if (!proxy) {
aborted = efx_mcdi_request_abort(enp);
SFC_ASSERT(aborted);
- sfc_mcdi_timeout(sa);
+ sfc_efx_mcdi_timeout(sa);
}
return;
@@ -80,27 +80,28 @@ sfc_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
delay_total += delay_us;
/* Exponentially back off the poll frequency */
- RTE_BUILD_BUG_ON(SFC_MCDI_POLL_INTERVAL_MAX_US > UINT_MAX / 2);
+ RTE_BUILD_BUG_ON(SFC_EFX_MCDI_POLL_INTERVAL_MAX_US >
+ UINT_MAX / 2);
delay_us *= 2;
- if (delay_us > SFC_MCDI_POLL_INTERVAL_MAX_US)
- delay_us = SFC_MCDI_POLL_INTERVAL_MAX_US;
+ if (delay_us > SFC_EFX_MCDI_POLL_INTERVAL_MAX_US)
+ delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MAX_US;
} while (1);
}
static void
-sfc_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
+sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
uint32_t proxy_handle;
rte_spinlock_lock(&mcdi->lock);
- SFC_ASSERT(mcdi->state == SFC_MCDI_INITIALIZED);
+ SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
efx_mcdi_request_start(sa->nic, emrp, B_FALSE);
- sfc_mcdi_poll(sa, B_FALSE);
+ sfc_efx_mcdi_poll(sa, B_FALSE);
if (efx_mcdi_get_proxy_handle(sa->nic, emrp, &proxy_handle) == 0) {
/*
@@ -109,7 +110,7 @@ sfc_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
* a non-zero proxy handle (should be the same as
* the value obtained above) and operation status
*/
- sfc_mcdi_poll(sa, B_TRUE);
+ sfc_efx_mcdi_poll(sa, B_TRUE);
if ((mcdi->proxy_handle != 0) &&
(mcdi->proxy_handle != proxy_handle)) {
@@ -121,7 +122,7 @@ sfc_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
* request and poll for an ordinary MCDI response
*/
efx_mcdi_request_start(sa->nic, emrp, B_FALSE);
- sfc_mcdi_poll(sa, B_FALSE);
+ sfc_efx_mcdi_poll(sa, B_FALSE);
} else {
emrp->emr_rc = mcdi->proxy_result;
sfc_err(sa, "MCDI proxy authorization failed "
@@ -134,20 +135,20 @@ sfc_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
}
static void
-sfc_mcdi_ev_cpl(void *arg)
+sfc_efx_mcdi_ev_cpl(void *arg)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_mcdi *mcdi __rte_unused;
+ struct sfc_efx_mcdi *mcdi __rte_unused;
mcdi = &sa->mcdi;
- SFC_ASSERT(mcdi->state == SFC_MCDI_INITIALIZED);
+ SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
/* MCDI is polled, completions are not expected */
SFC_ASSERT(0);
}
static void
-sfc_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
+sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
@@ -161,7 +162,7 @@ sfc_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
#define SFC_MCDI_LOG_BUF_SIZE 128
static size_t
-sfc_mcdi_do_log(const struct sfc_adapter *sa,
+sfc_efx_mcdi_do_log(const struct sfc_adapter *sa,
char *buffer, void *data, size_t data_size,
size_t pfxsize, size_t position)
{
@@ -190,7 +191,7 @@ sfc_mcdi_do_log(const struct sfc_adapter *sa,
}
static void
-sfc_mcdi_logger(void *arg, efx_log_msg_t type,
+sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
void *header, size_t header_size,
void *data, size_t data_size)
{
@@ -215,9 +216,10 @@ sfc_mcdi_logger(void *arg, efx_log_msg_t type,
pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
type == EFX_LOG_MCDI_REQUEST ? "REQ" :
type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???");
- start = sfc_mcdi_do_log(sa, buffer, header, header_size,
- pfxsize, pfxsize);
- start = sfc_mcdi_do_log(sa, buffer, data, data_size, pfxsize, start);
+ start = sfc_efx_mcdi_do_log(sa, buffer, header, header_size,
+ pfxsize, pfxsize);
+ start = sfc_efx_mcdi_do_log(sa, buffer, data, data_size,
+ pfxsize, start);
if (start != pfxsize) {
buffer[start] = '\0';
sfc_log_mcdi(sa, "%s", buffer);
@@ -225,19 +227,19 @@ sfc_mcdi_logger(void *arg, efx_log_msg_t type,
}
static void
-sfc_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
+sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
mcdi->proxy_handle = handle;
mcdi->proxy_result = result;
}
-int
-sfc_mcdi_init(struct sfc_adapter *sa)
+static int
+sfc_efx_mcdi_init(struct sfc_adapter *sa)
{
- struct sfc_mcdi *mcdi;
+ struct sfc_efx_mcdi *mcdi;
size_t max_msg_size;
efx_mcdi_transport_t *emtp;
int rc;
@@ -246,11 +248,11 @@ sfc_mcdi_init(struct sfc_adapter *sa)
mcdi = &sa->mcdi;
- SFC_ASSERT(mcdi->state == SFC_MCDI_UNINITIALIZED);
+ SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
rte_spinlock_init(&mcdi->lock);
- mcdi->state = SFC_MCDI_INITIALIZED;
+ mcdi->state = SFC_EFX_MCDI_INITIALIZED;
max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2;
rc = sfc_dma_alloc(sa, "mcdi", 0, max_msg_size, sa->socket_id,
@@ -265,11 +267,11 @@ sfc_mcdi_init(struct sfc_adapter *sa)
emtp = &mcdi->transport;
emtp->emt_context = sa;
emtp->emt_dma_mem = &mcdi->mem;
- emtp->emt_execute = sfc_mcdi_execute;
- emtp->emt_ev_cpl = sfc_mcdi_ev_cpl;
- emtp->emt_exception = sfc_mcdi_exception;
- emtp->emt_logger = sfc_mcdi_logger;
- emtp->emt_ev_proxy_response = sfc_mcdi_ev_proxy_response;
+ emtp->emt_execute = sfc_efx_mcdi_execute;
+ emtp->emt_ev_cpl = sfc_efx_mcdi_ev_cpl;
+ emtp->emt_exception = sfc_efx_mcdi_exception;
+ emtp->emt_logger = sfc_efx_mcdi_logger;
+ emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response;
sfc_log_init(sa, "init MCDI");
rc = efx_mcdi_init(sa->nic, emtp);
@@ -283,14 +285,14 @@ sfc_mcdi_init(struct sfc_adapter *sa)
sfc_dma_free(sa, &mcdi->mem);
fail_dma_alloc:
- mcdi->state = SFC_MCDI_UNINITIALIZED;
+ mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
return rc;
}
-void
-sfc_mcdi_fini(struct sfc_adapter *sa)
+static void
+sfc_efx_mcdi_fini(struct sfc_adapter *sa)
{
- struct sfc_mcdi *mcdi;
+ struct sfc_efx_mcdi *mcdi;
efx_mcdi_transport_t *emtp;
sfc_log_init(sa, "entry");
@@ -300,8 +302,8 @@ sfc_mcdi_fini(struct sfc_adapter *sa)
rte_spinlock_lock(&mcdi->lock);
- SFC_ASSERT(mcdi->state == SFC_MCDI_INITIALIZED);
- mcdi->state = SFC_MCDI_UNINITIALIZED;
+ SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
+ mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
sfc_log_init(sa, "fini MCDI");
efx_mcdi_fini(sa->nic);
@@ -311,3 +313,15 @@ sfc_mcdi_fini(struct sfc_adapter *sa)
sfc_dma_free(sa, &mcdi->mem);
}
+
+int
+sfc_mcdi_init(struct sfc_adapter *sa)
+{
+ return sfc_efx_mcdi_init(sa);
+}
+
+void
+sfc_mcdi_fini(struct sfc_adapter *sa)
+{
+ sfc_efx_mcdi_fini(sa);
+}
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index 789a16d8bb..10f5bab666 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -22,31 +22,25 @@
extern "C" {
#endif
-enum sfc_mcdi_state {
- SFC_MCDI_UNINITIALIZED = 0,
- SFC_MCDI_INITIALIZED,
- SFC_MCDI_BUSY,
- SFC_MCDI_COMPLETED,
+enum sfc_efx_mcdi_state {
+ SFC_EFX_MCDI_UNINITIALIZED = 0,
+ SFC_EFX_MCDI_INITIALIZED,
+ SFC_EFX_MCDI_BUSY,
+ SFC_EFX_MCDI_COMPLETED,
- SFC_MCDI_NSTATES
+ SFC_EFX_MCDI_NSTATES
};
-struct sfc_mcdi {
+struct sfc_efx_mcdi {
rte_spinlock_t lock;
efsys_mem_t mem;
- enum sfc_mcdi_state state;
+ enum sfc_efx_mcdi_state state;
efx_mcdi_transport_t transport;
uint32_t logtype;
uint32_t proxy_handle;
efx_rc_t proxy_result;
};
-
-struct sfc_adapter;
-
-int sfc_mcdi_init(struct sfc_adapter *sa);
-void sfc_mcdi_fini(struct sfc_adapter *sa);
-
#ifdef __cplusplus
}
#endif
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 08/17] net/sfc: make MCDI logging helper macros local
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (6 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 07/17] net/sfc: move MCDI helper interface to dedicated namespace Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 09/17] net/sfc: start to make MCDI helpers interface shareable Andrew Rybchenko
` (9 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Prepare to move MCDI helpers to drivers/common.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_log.h | 11 -----------
drivers/net/sfc/sfc_mcdi.c | 21 ++++++++++++++++-----
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h
index 5383091c76..4bf44b1f15 100644
--- a/drivers/net/sfc/sfc_log.h
+++ b/drivers/net/sfc/sfc_log.h
@@ -28,9 +28,6 @@ extern uint32_t sfc_logtype_driver;
/** Device MCDI log type name prefix */
#define SFC_LOGTYPE_MCDI_STR SFC_LOGTYPE_PREFIX "mcdi"
-/** Level value used by MCDI log statements */
-#define SFC_LOG_LEVEL_MCDI RTE_LOG_INFO
-
/* Log PMD message, automatically add prefix and \n */
#define SFC_LOG(sas, level, type, ...) \
do { \
@@ -92,13 +89,5 @@ extern uint32_t sfc_logtype_driver;
RTE_FMT_TAIL(__VA_ARGS__ ,))); \
} while (0)
-#define sfc_log_mcdi(sa, ...) \
- do { \
- const struct sfc_adapter *_sa = (sa); \
- \
- SFC_LOG(_sa->priv.shared, SFC_LOG_LEVEL_MCDI, \
- _sa->mcdi.logtype, __VA_ARGS__); \
- } while (0)
-
#endif /* _SFC_LOG_H_ */
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index c97a33d558..c716caabdf 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -23,6 +23,17 @@
#define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */
#define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */
+/** Level value used by MCDI log statements */
+#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO
+
+#define sfc_efx_log_mcdi(sa, ...) \
+ do { \
+ const struct sfc_adapter *_sa = (sa); \
+ \
+ SFC_LOG(_sa->priv.shared, SFC_EFX_LOG_LEVEL_MCDI, \
+ _sa->mcdi.logtype, __VA_ARGS__); \
+ } while (0)
+
static void
sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
{
@@ -178,7 +189,7 @@ sfc_efx_mcdi_do_log(const struct sfc_adapter *sa,
* at the end which is required by netlogdecode.
*/
buffer[position] = '\0';
- sfc_log_mcdi(sa, "%s \\", buffer);
+ sfc_efx_log_mcdi(sa, "%s \\", buffer);
/* Preserve prefix for the next log message */
position = pfxsize;
}
@@ -207,11 +218,11 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
*
* To avoid wasting time, the actual level is examined in advance.
*/
- if (rte_log_get_level(sa->mcdi.logtype) < (int)SFC_LOG_LEVEL_MCDI)
+ if (rte_log_get_level(sa->mcdi.logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
return;
- /* The format including prefix added by sfc_log_mcdi() is the format
- * consumed by the Solarflare netlogdecode tool.
+ /* The format including prefix added by sfc_efx_log_mcdi() is the
+ * format consumed by the Solarflare netlogdecode tool.
*/
pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
type == EFX_LOG_MCDI_REQUEST ? "REQ" :
@@ -222,7 +233,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
pfxsize, start);
if (start != pfxsize) {
buffer[start] = '\0';
- sfc_log_mcdi(sa, "%s", buffer);
+ sfc_efx_log_mcdi(sa, "%s", buffer);
}
}
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 09/17] net/sfc: start to make MCDI helpers interface shareable
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (7 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 08/17] net/sfc: make MCDI logging helper macros local Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 10/17] net/sfc: use own logging helper macros Andrew Rybchenko
` (8 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
sfc_adapter is network driver specific structure which finally
should not be used in shared MCDI helpers interface.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index c716caabdf..35e1f3940d 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -248,17 +248,14 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
}
static int
-sfc_efx_mcdi_init(struct sfc_adapter *sa)
+sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
{
- struct sfc_efx_mcdi *mcdi;
size_t max_msg_size;
efx_mcdi_transport_t *emtp;
int rc;
sfc_log_init(sa, "entry");
- mcdi = &sa->mcdi;
-
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
rte_spinlock_init(&mcdi->lock);
@@ -301,14 +298,12 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa)
}
static void
-sfc_efx_mcdi_fini(struct sfc_adapter *sa)
+sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
{
- struct sfc_efx_mcdi *mcdi;
efx_mcdi_transport_t *emtp;
sfc_log_init(sa, "entry");
- mcdi = &sa->mcdi;
emtp = &mcdi->transport;
rte_spinlock_lock(&mcdi->lock);
@@ -328,11 +323,11 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa)
int
sfc_mcdi_init(struct sfc_adapter *sa)
{
- return sfc_efx_mcdi_init(sa);
+ return sfc_efx_mcdi_init(sa, &sa->mcdi);
}
void
sfc_mcdi_fini(struct sfc_adapter *sa)
{
- sfc_efx_mcdi_fini(sa);
+ sfc_efx_mcdi_fini(sa, &sa->mcdi);
}
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 10/17] net/sfc: use own logging helper macros
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (8 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 09/17] net/sfc: start to make MCDI helpers interface shareable Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 11/17] net/sfc: avoid usage of NIC pointer from adapter context Andrew Rybchenko
` (7 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Network driver logging macros depends on sfc_adapter which is
specific to the driver and cannot be used in common code.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc.h | 2 +
drivers/net/sfc/sfc_ethdev.c | 13 ++++++
drivers/net/sfc/sfc_log.h | 12 ++---
drivers/net/sfc/sfc_mcdi.c | 86 +++++++++++++++++++++++-------------
drivers/net/sfc/sfc_mcdi.h | 1 +
5 files changed, 75 insertions(+), 39 deletions(-)
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index b3ac752334..b20fecb4f8 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -22,6 +22,7 @@
#include "efx.h"
#include "sfc_debug.h"
+#include "sfc_log.h"
#include "sfc_filter.h"
#include "sfc_mcdi.h"
@@ -170,6 +171,7 @@ struct sfc_adapter_shared {
boolean_t isolated;
uint32_t tunnel_encaps;
+ char log_prefix[SFC_LOG_PREFIX_MAX];
struct rte_pci_addr pci_addr;
uint16_t port_id;
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 1a58e0df84..6c96118007 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -2136,6 +2136,7 @@ sfc_eth_dev_init(struct rte_eth_dev *dev)
int rc;
const efx_nic_cfg_t *encp;
const struct rte_ether_addr *from;
+ int ret;
sfc_register_dp();
@@ -2147,6 +2148,18 @@ sfc_eth_dev_init(struct rte_eth_dev *dev)
return -sfc_eth_dev_secondary_init(dev, logtype_main);
/* Required for logging */
+ ret = snprintf(sas->log_prefix, sizeof(sas->log_prefix),
+ "PMD: sfc_efx " PCI_PRI_FMT " #%" PRIu16 ": ",
+ pci_dev->addr.domain, pci_dev->addr.bus,
+ pci_dev->addr.devid, pci_dev->addr.function,
+ dev->data->port_id);
+ if (ret < 0 || ret >= (int)sizeof(sas->log_prefix)) {
+ SFC_GENERIC_LOG(ERR,
+ "reserved log prefix is too short for " PCI_PRI_FMT,
+ pci_dev->addr.domain, pci_dev->addr.bus,
+ pci_dev->addr.devid, pci_dev->addr.function);
+ return -EINVAL;
+ }
sas->pci_addr = pci_dev->addr;
sas->port_id = dev->data->port_id;
diff --git a/drivers/net/sfc/sfc_log.h b/drivers/net/sfc/sfc_log.h
index 4bf44b1f15..a2d714afb7 100644
--- a/drivers/net/sfc/sfc_log.h
+++ b/drivers/net/sfc/sfc_log.h
@@ -28,20 +28,16 @@ extern uint32_t sfc_logtype_driver;
/** Device MCDI log type name prefix */
#define SFC_LOGTYPE_MCDI_STR SFC_LOGTYPE_PREFIX "mcdi"
+#define SFC_LOG_PREFIX_MAX 32
+
/* Log PMD message, automatically add prefix and \n */
#define SFC_LOG(sas, level, type, ...) \
do { \
const struct sfc_adapter_shared *_sas = (sas); \
\
rte_log(level, type, \
- RTE_FMT("PMD: sfc_efx " \
- PCI_PRI_FMT " #%" PRIu16 \
- ": " RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
- _sas->pci_addr.domain, \
- _sas->pci_addr.bus, \
- _sas->pci_addr.devid, \
- _sas->pci_addr.function, \
- _sas->port_id, \
+ RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
+ _sas->log_prefix, \
RTE_FMT_TAIL(__VA_ARGS__,))); \
} while (0)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 35e1f3940d..5f6ad0a4aa 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -23,21 +23,37 @@
#define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */
#define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */
-/** Level value used by MCDI log statements */
-#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO
-
-#define sfc_efx_log_mcdi(sa, ...) \
+#define sfc_efx_mcdi_log(mcdi, level, ...) \
do { \
- const struct sfc_adapter *_sa = (sa); \
+ const struct sfc_efx_mcdi *_mcdi = (mcdi); \
\
- SFC_LOG(_sa->priv.shared, SFC_EFX_LOG_LEVEL_MCDI, \
- _sa->mcdi.logtype, __VA_ARGS__); \
+ rte_log(level, _mcdi->logtype, \
+ RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
+ _mcdi->log_prefix, \
+ RTE_FMT_TAIL(__VA_ARGS__,))); \
} while (0)
+#define sfc_efx_mcdi_err(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__)
+
+#define sfc_efx_mcdi_warn(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_WARNING, __VA_ARGS__)
+
+#define sfc_efx_mcdi_info(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_INFO, __VA_ARGS__)
+
+/** Level value used by MCDI log statements */
+#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO
+
+#define sfc_efx_log_mcdi(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, SFC_EFX_LOG_LEVEL_MCDI, __VA_ARGS__)
+
static void
sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
{
- sfc_warn(sa, "MC TIMEOUT");
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
+
+ sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
sfc_panic(sa, "MCDI timeout handling is not implemented\n");
}
@@ -125,7 +141,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
if ((mcdi->proxy_handle != 0) &&
(mcdi->proxy_handle != proxy_handle)) {
- sfc_err(sa, "Unexpected MCDI proxy event");
+ sfc_efx_mcdi_err(mcdi, "Unexpected MCDI proxy event");
emrp->emr_rc = EFAULT;
} else if (mcdi->proxy_result == 0) {
/*
@@ -136,9 +152,9 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
sfc_efx_mcdi_poll(sa, B_FALSE);
} else {
emrp->emr_rc = mcdi->proxy_result;
- sfc_err(sa, "MCDI proxy authorization failed "
- "(handle=%08x, result=%d)",
- proxy_handle, mcdi->proxy_result);
+ sfc_efx_mcdi_err(mcdi,
+ "MCDI proxy authorization failed (handle=%08x, result=%d)",
+ proxy_handle, mcdi->proxy_result);
}
}
@@ -162,8 +178,9 @@ static void
sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
- sfc_warn(sa, "MC %s",
+ sfc_efx_mcdi_warn(mcdi, "MC %s",
(eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
(eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN");
@@ -173,7 +190,7 @@ sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
#define SFC_MCDI_LOG_BUF_SIZE 128
static size_t
-sfc_efx_mcdi_do_log(const struct sfc_adapter *sa,
+sfc_efx_mcdi_do_log(const struct sfc_efx_mcdi *mcdi,
char *buffer, void *data, size_t data_size,
size_t pfxsize, size_t position)
{
@@ -189,7 +206,7 @@ sfc_efx_mcdi_do_log(const struct sfc_adapter *sa,
* at the end which is required by netlogdecode.
*/
buffer[position] = '\0';
- sfc_efx_log_mcdi(sa, "%s \\", buffer);
+ sfc_efx_log_mcdi(mcdi, "%s \\", buffer);
/* Preserve prefix for the next log message */
position = pfxsize;
}
@@ -207,6 +224,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
void *data, size_t data_size)
{
struct sfc_adapter *sa = (struct sfc_adapter *)arg;
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
char buffer[SFC_MCDI_LOG_BUF_SIZE];
size_t pfxsize;
size_t start;
@@ -218,7 +236,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
*
* To avoid wasting time, the actual level is examined in advance.
*/
- if (rte_log_get_level(sa->mcdi.logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
+ if (rte_log_get_level(mcdi->logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
return;
/* The format including prefix added by sfc_efx_log_mcdi() is the
@@ -227,13 +245,13 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
type == EFX_LOG_MCDI_REQUEST ? "REQ" :
type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???");
- start = sfc_efx_mcdi_do_log(sa, buffer, header, header_size,
+ start = sfc_efx_mcdi_do_log(mcdi, buffer, header, header_size,
pfxsize, pfxsize);
- start = sfc_efx_mcdi_do_log(sa, buffer, data, data_size,
+ start = sfc_efx_mcdi_do_log(mcdi, buffer, data, data_size,
pfxsize, start);
if (start != pfxsize) {
buffer[start] = '\0';
- sfc_efx_log_mcdi(sa, "%s", buffer);
+ sfc_efx_log_mcdi(mcdi, "%s", buffer);
}
}
@@ -248,30 +266,28 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
}
static int
-sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
+sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
+ uint32_t logtype, const char *log_prefix)
{
size_t max_msg_size;
efx_mcdi_transport_t *emtp;
int rc;
- sfc_log_init(sa, "entry");
-
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
rte_spinlock_init(&mcdi->lock);
mcdi->state = SFC_EFX_MCDI_INITIALIZED;
+ mcdi->logtype = logtype;
+ mcdi->log_prefix = log_prefix;
+
max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2;
rc = sfc_dma_alloc(sa, "mcdi", 0, max_msg_size, sa->socket_id,
&mcdi->mem);
if (rc != 0)
goto fail_dma_alloc;
- mcdi->logtype = sfc_register_logtype(&sa->priv.shared->pci_addr,
- SFC_LOGTYPE_MCDI_STR,
- RTE_LOG_NOTICE);
-
emtp = &mcdi->transport;
emtp->emt_context = sa;
emtp->emt_dma_mem = &mcdi->mem;
@@ -281,7 +297,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
emtp->emt_logger = sfc_efx_mcdi_logger;
emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response;
- sfc_log_init(sa, "init MCDI");
+ sfc_efx_mcdi_info(mcdi, "init MCDI");
rc = efx_mcdi_init(sa->nic, emtp);
if (rc != 0)
goto fail_mcdi_init;
@@ -302,8 +318,6 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
{
efx_mcdi_transport_t *emtp;
- sfc_log_init(sa, "entry");
-
emtp = &mcdi->transport;
rte_spinlock_lock(&mcdi->lock);
@@ -311,7 +325,7 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
- sfc_log_init(sa, "fini MCDI");
+ sfc_efx_mcdi_info(mcdi, "fini MCDI");
efx_mcdi_fini(sa->nic);
memset(emtp, 0, sizeof(*emtp));
@@ -323,11 +337,21 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
int
sfc_mcdi_init(struct sfc_adapter *sa)
{
- return sfc_efx_mcdi_init(sa, &sa->mcdi);
+ uint32_t logtype;
+
+ sfc_log_init(sa, "entry");
+
+ logtype = sfc_register_logtype(&sa->priv.shared->pci_addr,
+ SFC_LOGTYPE_MCDI_STR,
+ RTE_LOG_NOTICE);
+
+ return sfc_efx_mcdi_init(sa, &sa->mcdi, logtype,
+ sa->priv.shared->log_prefix);
}
void
sfc_mcdi_fini(struct sfc_adapter *sa)
{
+ sfc_log_init(sa, "entry");
sfc_efx_mcdi_fini(sa, &sa->mcdi);
}
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index 10f5bab666..0194825bfa 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -39,6 +39,7 @@ struct sfc_efx_mcdi {
uint32_t logtype;
uint32_t proxy_handle;
efx_rc_t proxy_result;
+ const char *log_prefix;
};
#ifdef __cplusplus
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 11/17] net/sfc: avoid usage of NIC pointer from adapter context
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (9 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 10/17] net/sfc: use own logging helper macros Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 12/17] net/sfc: avoid panic in the case of MCDI timeout Andrew Rybchenko
` (6 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Prepare to avoid usage of the adapter context in common MCDI helpers.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 19 +++++++++++--------
drivers/net/sfc/sfc_mcdi.h | 1 +
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 5f6ad0a4aa..8f446e8bc8 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -75,6 +75,7 @@ sfc_efx_mcdi_proxy_event_available(struct sfc_adapter *sa)
static void
sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
{
+ struct sfc_efx_mcdi *mcdi = &sa->mcdi;
efx_nic_t *enp;
unsigned int delay_total;
unsigned int delay_us;
@@ -82,7 +83,7 @@ sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
delay_total = 0;
delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MIN_US;
- enp = sa->nic;
+ enp = mcdi->nic;
do {
boolean_t poll_completed;
@@ -127,10 +128,10 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
- efx_mcdi_request_start(sa->nic, emrp, B_FALSE);
+ efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
sfc_efx_mcdi_poll(sa, B_FALSE);
- if (efx_mcdi_get_proxy_handle(sa->nic, emrp, &proxy_handle) == 0) {
+ if (efx_mcdi_get_proxy_handle(mcdi->nic, emrp, &proxy_handle) == 0) {
/*
* Authorization is required for the MCDI request;
* wait for an MCDI proxy response event to bring
@@ -148,7 +149,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
* Authorization succeeded; re-issue the original
* request and poll for an ordinary MCDI response
*/
- efx_mcdi_request_start(sa->nic, emrp, B_FALSE);
+ efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
sfc_efx_mcdi_poll(sa, B_FALSE);
} else {
emrp->emr_rc = mcdi->proxy_result;
@@ -267,7 +268,7 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
static int
sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
- uint32_t logtype, const char *log_prefix)
+ uint32_t logtype, const char *log_prefix, efx_nic_t *nic)
{
size_t max_msg_size;
efx_mcdi_transport_t *emtp;
@@ -277,6 +278,8 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
rte_spinlock_init(&mcdi->lock);
+ mcdi->nic = nic;
+
mcdi->state = SFC_EFX_MCDI_INITIALIZED;
mcdi->logtype = logtype;
@@ -298,7 +301,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response;
sfc_efx_mcdi_info(mcdi, "init MCDI");
- rc = efx_mcdi_init(sa->nic, emtp);
+ rc = efx_mcdi_init(mcdi->nic, emtp);
if (rc != 0)
goto fail_mcdi_init;
@@ -326,7 +329,7 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
sfc_efx_mcdi_info(mcdi, "fini MCDI");
- efx_mcdi_fini(sa->nic);
+ efx_mcdi_fini(mcdi->nic);
memset(emtp, 0, sizeof(*emtp));
rte_spinlock_unlock(&mcdi->lock);
@@ -346,7 +349,7 @@ sfc_mcdi_init(struct sfc_adapter *sa)
RTE_LOG_NOTICE);
return sfc_efx_mcdi_init(sa, &sa->mcdi, logtype,
- sa->priv.shared->log_prefix);
+ sa->priv.shared->log_prefix, sa->nic);
}
void
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index 0194825bfa..e2105364ad 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -33,6 +33,7 @@ enum sfc_efx_mcdi_state {
struct sfc_efx_mcdi {
rte_spinlock_t lock;
+ efx_nic_t *nic;
efsys_mem_t mem;
enum sfc_efx_mcdi_state state;
efx_mcdi_transport_t transport;
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 12/17] net/sfc: avoid panic in the case of MCDI timeout
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (10 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 11/17] net/sfc: avoid usage of NIC pointer from adapter context Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 13/17] net/sfc: add MCDI callbacks to allocate/free DMA memory Andrew Rybchenko
` (5 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Implement dummy MCDI timeout handling which simply rejects
further MCDI requests.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 15 +++++++++++++--
drivers/net/sfc/sfc_mcdi.h | 1 +
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 8f446e8bc8..928a08c0a2 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -33,6 +33,9 @@
RTE_FMT_TAIL(__VA_ARGS__,))); \
} while (0)
+#define sfc_efx_mcdi_crit(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_CRIT, __VA_ARGS__)
+
#define sfc_efx_mcdi_err(mcdi, ...) \
sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__)
@@ -55,7 +58,9 @@ sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
- sfc_panic(sa, "MCDI timeout handling is not implemented\n");
+ mcdi->state = SFC_EFX_MCDI_DEAD;
+ sfc_efx_mcdi_crit(mcdi,
+ "MCDI timeout handling is not implemented - NIC is unusable");
}
static inline boolean_t
@@ -124,6 +129,11 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
struct sfc_efx_mcdi *mcdi = &sa->mcdi;
uint32_t proxy_handle;
+ if (mcdi->state == SFC_EFX_MCDI_DEAD) {
+ emrp->emr_rc = ENOEXEC;
+ return;
+ }
+
rte_spinlock_lock(&mcdi->lock);
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
@@ -325,7 +335,8 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
rte_spinlock_lock(&mcdi->lock);
- SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
+ SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED ||
+ mcdi->state == SFC_EFX_MCDI_DEAD);
mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
sfc_efx_mcdi_info(mcdi, "fini MCDI");
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index e2105364ad..b93b268e32 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -27,6 +27,7 @@ enum sfc_efx_mcdi_state {
SFC_EFX_MCDI_INITIALIZED,
SFC_EFX_MCDI_BUSY,
SFC_EFX_MCDI_COMPLETED,
+ SFC_EFX_MCDI_DEAD,
SFC_EFX_MCDI_NSTATES
};
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 13/17] net/sfc: add MCDI callbacks to allocate/free DMA memory
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (11 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 12/17] net/sfc: avoid panic in the case of MCDI timeout Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 14/17] net/sfc: add MCDI callback to schedule restart Andrew Rybchenko
` (4 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Net driver should use rte_eth_dma_zone_reserve(), but it is ethdev
specific API which is not available for vDPA.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 46 +++++++++++++++++++++++++++++++-------
drivers/net/sfc/sfc_mcdi.h | 12 ++++++++++
2 files changed, 50 insertions(+), 8 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 928a08c0a2..5077fcddd6 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -278,16 +278,22 @@ sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
static int
sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
- uint32_t logtype, const char *log_prefix, efx_nic_t *nic)
+ uint32_t logtype, const char *log_prefix, efx_nic_t *nic,
+ const struct sfc_efx_mcdi_ops *ops, void *ops_cookie)
{
size_t max_msg_size;
efx_mcdi_transport_t *emtp;
int rc;
+ if (ops->dma_alloc == NULL || ops->dma_free == NULL)
+ return EINVAL;
+
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
rte_spinlock_init(&mcdi->lock);
+ mcdi->ops = ops;
+ mcdi->ops_cookie = ops_cookie;
mcdi->nic = nic;
mcdi->state = SFC_EFX_MCDI_INITIALIZED;
@@ -296,8 +302,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
mcdi->log_prefix = log_prefix;
max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2;
- rc = sfc_dma_alloc(sa, "mcdi", 0, max_msg_size, sa->socket_id,
- &mcdi->mem);
+ rc = ops->dma_alloc(ops_cookie, "mcdi", max_msg_size, &mcdi->mem);
if (rc != 0)
goto fail_dma_alloc;
@@ -319,7 +324,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
fail_mcdi_init:
memset(emtp, 0, sizeof(*emtp));
- sfc_dma_free(sa, &mcdi->mem);
+ ops->dma_free(ops_cookie, &mcdi->mem);
fail_dma_alloc:
mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
@@ -327,7 +332,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
}
static void
-sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
+sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi)
{
efx_mcdi_transport_t *emtp;
@@ -345,9 +350,33 @@ sfc_efx_mcdi_fini(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi)
rte_spinlock_unlock(&mcdi->lock);
- sfc_dma_free(sa, &mcdi->mem);
+ mcdi->ops->dma_free(mcdi->ops_cookie, &mcdi->mem);
+}
+
+static sfc_efx_mcdi_dma_alloc_cb sfc_mcdi_dma_alloc;
+static int
+sfc_mcdi_dma_alloc(void *cookie, const char *name, size_t len,
+ efsys_mem_t *esmp)
+{
+ const struct sfc_adapter *sa = cookie;
+
+ return sfc_dma_alloc(sa, name, 0, len, sa->socket_id, esmp);
}
+static sfc_efx_mcdi_dma_free_cb sfc_mcdi_dma_free;
+static void
+sfc_mcdi_dma_free(void *cookie, efsys_mem_t *esmp)
+{
+ const struct sfc_adapter *sa = cookie;
+
+ sfc_dma_free(sa, esmp);
+}
+
+static const struct sfc_efx_mcdi_ops sfc_mcdi_ops = {
+ .dma_alloc = sfc_mcdi_dma_alloc,
+ .dma_free = sfc_mcdi_dma_free,
+};
+
int
sfc_mcdi_init(struct sfc_adapter *sa)
{
@@ -360,12 +389,13 @@ sfc_mcdi_init(struct sfc_adapter *sa)
RTE_LOG_NOTICE);
return sfc_efx_mcdi_init(sa, &sa->mcdi, logtype,
- sa->priv.shared->log_prefix, sa->nic);
+ sa->priv.shared->log_prefix, sa->nic,
+ &sfc_mcdi_ops, sa);
}
void
sfc_mcdi_fini(struct sfc_adapter *sa)
{
sfc_log_init(sa, "entry");
- sfc_efx_mcdi_fini(sa, &sa->mcdi);
+ sfc_efx_mcdi_fini(&sa->mcdi);
}
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index b93b268e32..ef24a8bc67 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -32,8 +32,20 @@ enum sfc_efx_mcdi_state {
SFC_EFX_MCDI_NSTATES
};
+typedef int (sfc_efx_mcdi_dma_alloc_cb)(void *cookie, const char *name,
+ size_t len, efsys_mem_t *esmp);
+
+typedef void (sfc_efx_mcdi_dma_free_cb)(void *cookie, efsys_mem_t *esmp);
+
+struct sfc_efx_mcdi_ops {
+ sfc_efx_mcdi_dma_alloc_cb *dma_alloc;
+ sfc_efx_mcdi_dma_free_cb *dma_free;
+};
+
struct sfc_efx_mcdi {
rte_spinlock_t lock;
+ const struct sfc_efx_mcdi_ops *ops;
+ void *ops_cookie;
efx_nic_t *nic;
efsys_mem_t mem;
enum sfc_efx_mcdi_state state;
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 14/17] net/sfc: add MCDI callback to schedule restart
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (12 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 13/17] net/sfc: add MCDI callbacks to allocate/free DMA memory Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 15/17] net/sfc: add MCDI callback to poll management event queue Andrew Rybchenko
` (3 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
MC reboot handling is driver specific.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 15 +++++++++++++--
drivers/net/sfc/sfc_mcdi.h | 3 +++
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 5077fcddd6..73dbd8194b 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -195,7 +195,7 @@ sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
(eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
(eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN");
- sfc_schedule_restart(sa);
+ mcdi->ops->sched_restart(mcdi->ops_cookie);
}
#define SFC_MCDI_LOG_BUF_SIZE 128
@@ -285,7 +285,8 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
efx_mcdi_transport_t *emtp;
int rc;
- if (ops->dma_alloc == NULL || ops->dma_free == NULL)
+ if (ops->dma_alloc == NULL || ops->dma_free == NULL ||
+ ops->sched_restart == NULL)
return EINVAL;
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
@@ -372,9 +373,19 @@ sfc_mcdi_dma_free(void *cookie, efsys_mem_t *esmp)
sfc_dma_free(sa, esmp);
}
+static sfc_efx_mcdi_sched_restart_cb sfc_mcdi_sched_restart;
+static void
+sfc_mcdi_sched_restart(void *cookie)
+{
+ struct sfc_adapter *sa = cookie;
+
+ sfc_schedule_restart(sa);
+}
+
static const struct sfc_efx_mcdi_ops sfc_mcdi_ops = {
.dma_alloc = sfc_mcdi_dma_alloc,
.dma_free = sfc_mcdi_dma_free,
+ .sched_restart = sfc_mcdi_sched_restart,
};
int
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index ef24a8bc67..8f9b1991be 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -37,9 +37,12 @@ typedef int (sfc_efx_mcdi_dma_alloc_cb)(void *cookie, const char *name,
typedef void (sfc_efx_mcdi_dma_free_cb)(void *cookie, efsys_mem_t *esmp);
+typedef void (sfc_efx_mcdi_sched_restart_cb)(void *cookie);
+
struct sfc_efx_mcdi_ops {
sfc_efx_mcdi_dma_alloc_cb *dma_alloc;
sfc_efx_mcdi_dma_free_cb *dma_free;
+ sfc_efx_mcdi_sched_restart_cb *sched_restart;
};
struct sfc_efx_mcdi {
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 15/17] net/sfc: add MCDI callback to poll management event queue
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (13 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 14/17] net/sfc: add MCDI callback to schedule restart Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 16/17] net/sfc: use MCDI control structure as libefx ops context Andrew Rybchenko
` (2 subsequent siblings)
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Management event queue polling is required in the case of
MCDI proxy authentication (client driver code).
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 14 ++++++++++++--
drivers/net/sfc/sfc_mcdi.h | 3 +++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index 73dbd8194b..fa9160f6d3 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -70,7 +70,7 @@ sfc_efx_mcdi_proxy_event_available(struct sfc_adapter *sa)
mcdi->proxy_handle = 0;
mcdi->proxy_result = ETIMEDOUT;
- sfc_ev_mgmt_qpoll(sa);
+ mcdi->ops->mgmt_evq_poll(mcdi->ops_cookie);
if (mcdi->proxy_result != ETIMEDOUT)
return B_TRUE;
@@ -286,7 +286,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
int rc;
if (ops->dma_alloc == NULL || ops->dma_free == NULL ||
- ops->sched_restart == NULL)
+ ops->sched_restart == NULL || ops->mgmt_evq_poll == NULL)
return EINVAL;
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
@@ -382,10 +382,20 @@ sfc_mcdi_sched_restart(void *cookie)
sfc_schedule_restart(sa);
}
+static sfc_efx_mcdi_mgmt_evq_poll_cb sfc_mcdi_mgmt_evq_poll;
+static void
+sfc_mcdi_mgmt_evq_poll(void *cookie)
+{
+ struct sfc_adapter *sa = cookie;
+
+ sfc_ev_mgmt_qpoll(sa);
+}
+
static const struct sfc_efx_mcdi_ops sfc_mcdi_ops = {
.dma_alloc = sfc_mcdi_dma_alloc,
.dma_free = sfc_mcdi_dma_free,
.sched_restart = sfc_mcdi_sched_restart,
+ .mgmt_evq_poll = sfc_mcdi_mgmt_evq_poll,
};
int
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/net/sfc/sfc_mcdi.h
index 8f9b1991be..e3a637aeb7 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/net/sfc/sfc_mcdi.h
@@ -39,10 +39,13 @@ typedef void (sfc_efx_mcdi_dma_free_cb)(void *cookie, efsys_mem_t *esmp);
typedef void (sfc_efx_mcdi_sched_restart_cb)(void *cookie);
+typedef void (sfc_efx_mcdi_mgmt_evq_poll_cb)(void *cookie);
+
struct sfc_efx_mcdi_ops {
sfc_efx_mcdi_dma_alloc_cb *dma_alloc;
sfc_efx_mcdi_dma_free_cb *dma_free;
sfc_efx_mcdi_sched_restart_cb *sched_restart;
+ sfc_efx_mcdi_mgmt_evq_poll_cb *mgmt_evq_poll;
};
struct sfc_efx_mcdi {
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 16/17] net/sfc: use MCDI control structure as libefx ops context
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (14 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 15/17] net/sfc: add MCDI callback to poll management event queue Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 17/17] net/sfc: move MCDI helpers to common driver Andrew Rybchenko
2020-09-21 22:38 ` [dpdk-dev] [PATCH v2 00/17] net/sfc: factor out common driver library Ferruh Yigit
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
Now MCDI helpers interface is independent from network driver and
may be moved into common driver.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/net/sfc/sfc_mcdi.c | 47 +++++++++++++++-----------------------
1 file changed, 19 insertions(+), 28 deletions(-)
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index fa9160f6d3..ff2bc14c5d 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -52,10 +52,8 @@
sfc_efx_mcdi_log(mcdi, SFC_EFX_LOG_LEVEL_MCDI, __VA_ARGS__)
static void
-sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
+sfc_efx_mcdi_timeout(struct sfc_efx_mcdi *mcdi)
{
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
-
sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
mcdi->state = SFC_EFX_MCDI_DEAD;
@@ -64,10 +62,8 @@ sfc_efx_mcdi_timeout(struct sfc_adapter *sa)
}
static inline boolean_t
-sfc_efx_mcdi_proxy_event_available(struct sfc_adapter *sa)
+sfc_efx_mcdi_proxy_event_available(struct sfc_efx_mcdi *mcdi)
{
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
-
mcdi->proxy_handle = 0;
mcdi->proxy_result = ETIMEDOUT;
mcdi->ops->mgmt_evq_poll(mcdi->ops_cookie);
@@ -78,9 +74,8 @@ sfc_efx_mcdi_proxy_event_available(struct sfc_adapter *sa)
}
static void
-sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
+sfc_efx_mcdi_poll(struct sfc_efx_mcdi *mcdi, boolean_t proxy)
{
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
efx_nic_t *enp;
unsigned int delay_total;
unsigned int delay_us;
@@ -93,8 +88,9 @@ sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
do {
boolean_t poll_completed;
- poll_completed = (proxy) ? sfc_efx_mcdi_proxy_event_available(sa) :
- efx_mcdi_request_poll(enp);
+ poll_completed = (proxy) ?
+ sfc_efx_mcdi_proxy_event_available(mcdi) :
+ efx_mcdi_request_poll(enp);
if (poll_completed)
return;
@@ -102,7 +98,7 @@ sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
if (!proxy) {
aborted = efx_mcdi_request_abort(enp);
SFC_ASSERT(aborted);
- sfc_efx_mcdi_timeout(sa);
+ sfc_efx_mcdi_timeout(mcdi);
}
return;
@@ -125,8 +121,7 @@ sfc_efx_mcdi_poll(struct sfc_adapter *sa, boolean_t proxy)
static void
sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
uint32_t proxy_handle;
if (mcdi->state == SFC_EFX_MCDI_DEAD) {
@@ -139,7 +134,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
- sfc_efx_mcdi_poll(sa, B_FALSE);
+ sfc_efx_mcdi_poll(mcdi, B_FALSE);
if (efx_mcdi_get_proxy_handle(mcdi->nic, emrp, &proxy_handle) == 0) {
/*
@@ -148,7 +143,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
* a non-zero proxy handle (should be the same as
* the value obtained above) and operation status
*/
- sfc_efx_mcdi_poll(sa, B_TRUE);
+ sfc_efx_mcdi_poll(mcdi, B_TRUE);
if ((mcdi->proxy_handle != 0) &&
(mcdi->proxy_handle != proxy_handle)) {
@@ -160,7 +155,7 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
* request and poll for an ordinary MCDI response
*/
efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
- sfc_efx_mcdi_poll(sa, B_FALSE);
+ sfc_efx_mcdi_poll(mcdi, B_FALSE);
} else {
emrp->emr_rc = mcdi->proxy_result;
sfc_efx_mcdi_err(mcdi,
@@ -175,10 +170,9 @@ sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
static void
sfc_efx_mcdi_ev_cpl(void *arg)
{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_efx_mcdi *mcdi __rte_unused;
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
- mcdi = &sa->mcdi;
+ RTE_SET_USED(mcdi);
SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
/* MCDI is polled, completions are not expected */
@@ -188,8 +182,7 @@ sfc_efx_mcdi_ev_cpl(void *arg)
static void
sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
sfc_efx_mcdi_warn(mcdi, "MC %s",
(eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
@@ -234,8 +227,7 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
void *header, size_t header_size,
void *data, size_t data_size)
{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
char buffer[SFC_MCDI_LOG_BUF_SIZE];
size_t pfxsize;
size_t start;
@@ -269,15 +261,14 @@ sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
static void
sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
{
- struct sfc_adapter *sa = (struct sfc_adapter *)arg;
- struct sfc_efx_mcdi *mcdi = &sa->mcdi;
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
mcdi->proxy_handle = handle;
mcdi->proxy_result = result;
}
static int
-sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
+sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
uint32_t logtype, const char *log_prefix, efx_nic_t *nic,
const struct sfc_efx_mcdi_ops *ops, void *ops_cookie)
{
@@ -308,7 +299,7 @@ sfc_efx_mcdi_init(struct sfc_adapter *sa, struct sfc_efx_mcdi *mcdi,
goto fail_dma_alloc;
emtp = &mcdi->transport;
- emtp->emt_context = sa;
+ emtp->emt_context = mcdi;
emtp->emt_dma_mem = &mcdi->mem;
emtp->emt_execute = sfc_efx_mcdi_execute;
emtp->emt_ev_cpl = sfc_efx_mcdi_ev_cpl;
@@ -409,7 +400,7 @@ sfc_mcdi_init(struct sfc_adapter *sa)
SFC_LOGTYPE_MCDI_STR,
RTE_LOG_NOTICE);
- return sfc_efx_mcdi_init(sa, &sa->mcdi, logtype,
+ return sfc_efx_mcdi_init(&sa->mcdi, logtype,
sa->priv.shared->log_prefix, sa->nic,
&sfc_mcdi_ops, sa);
}
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [dpdk-dev] [PATCH v2 17/17] net/sfc: move MCDI helpers to common driver
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (15 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 16/17] net/sfc: use MCDI control structure as libefx ops context Andrew Rybchenko
@ 2020-09-17 6:34 ` Andrew Rybchenko
2020-09-21 22:38 ` [dpdk-dev] [PATCH v2 00/17] net/sfc: factor out common driver library Ferruh Yigit
17 siblings, 0 replies; 38+ messages in thread
From: Andrew Rybchenko @ 2020-09-17 6:34 UTC (permalink / raw)
To: dev
These helper will be reused by other libefx consumers, e.g. vDPA
driver.
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
Reviewed-by: Andy Moreton <amoreton@xilinx.com>
---
drivers/common/sfc_efx/meson.build | 1 +
.../sfc_efx/rte_common_sfc_efx_version.map | 3 +
drivers/common/sfc_efx/sfc_efx_mcdi.c | 343 ++++++++++++++++++
.../sfc_efx/sfc_efx_mcdi.h} | 14 +-
drivers/net/sfc/sfc.h | 3 +-
drivers/net/sfc/sfc_mcdi.c | 333 +----------------
6 files changed, 361 insertions(+), 336 deletions(-)
create mode 100644 drivers/common/sfc_efx/sfc_efx_mcdi.c
rename drivers/{net/sfc/sfc_mcdi.h => common/sfc_efx/sfc_efx_mcdi.h} (80%)
diff --git a/drivers/common/sfc_efx/meson.build b/drivers/common/sfc_efx/meson.build
index 8fab4df792..b7a0763a34 100644
--- a/drivers/common/sfc_efx/meson.build
+++ b/drivers/common/sfc_efx/meson.build
@@ -34,6 +34,7 @@ objs = [base_objs]
sources = files(
'sfc_efx.c',
+ 'sfc_efx_mcdi.c',
)
includes += include_directories('base')
diff --git a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
index fa297d251b..5e2a7ad919 100644
--- a/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
+++ b/drivers/common/sfc_efx/rte_common_sfc_efx_version.map
@@ -178,5 +178,8 @@ INTERNAL {
efx_txq_nbufs;
efx_txq_size;
+ sfc_efx_mcdi_init;
+ sfc_efx_mcdi_fini;
+
local: *;
};
diff --git a/drivers/common/sfc_efx/sfc_efx_mcdi.c b/drivers/common/sfc_efx/sfc_efx_mcdi.c
new file mode 100644
index 0000000000..7eb565bbd6
--- /dev/null
+++ b/drivers/common/sfc_efx/sfc_efx_mcdi.c
@@ -0,0 +1,343 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Copyright(c) 2019-2020 Xilinx, Inc.
+ * Copyright(c) 2016-2019 Solarflare Communications Inc.
+ *
+ * This software was jointly developed between OKTET Labs (under contract
+ * for Solarflare) and Solarflare Communications, Inc.
+ */
+
+#include <rte_cycles.h>
+
+#include "efx.h"
+#include "efx_mcdi.h"
+#include "efx_regs_mcdi.h"
+
+#include "sfc_efx_mcdi.h"
+#include "sfc_efx_debug.h"
+
+#define SFC_EFX_MCDI_POLL_INTERVAL_MIN_US 10 /* 10us */
+#define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */
+#define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */
+
+#define sfc_efx_mcdi_log(mcdi, level, ...) \
+ do { \
+ const struct sfc_efx_mcdi *_mcdi = (mcdi); \
+ \
+ rte_log(level, _mcdi->logtype, \
+ RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
+ _mcdi->log_prefix, \
+ RTE_FMT_TAIL(__VA_ARGS__,))); \
+ } while (0)
+
+#define sfc_efx_mcdi_crit(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_CRIT, __VA_ARGS__)
+
+#define sfc_efx_mcdi_err(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__)
+
+#define sfc_efx_mcdi_warn(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_WARNING, __VA_ARGS__)
+
+#define sfc_efx_mcdi_info(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, RTE_LOG_INFO, __VA_ARGS__)
+
+/** Level value used by MCDI log statements */
+#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO
+
+#define sfc_efx_log_mcdi(mcdi, ...) \
+ sfc_efx_mcdi_log(mcdi, SFC_EFX_LOG_LEVEL_MCDI, __VA_ARGS__)
+
+static void
+sfc_efx_mcdi_timeout(struct sfc_efx_mcdi *mcdi)
+{
+ sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
+
+ sfc_efx_mcdi_crit(mcdi, "MCDI timeout handling is not implemented");
+ sfc_efx_mcdi_crit(mcdi, "NIC is unusable");
+ mcdi->state = SFC_EFX_MCDI_DEAD;
+}
+
+static inline boolean_t
+sfc_efx_mcdi_proxy_event_available(struct sfc_efx_mcdi *mcdi)
+{
+ mcdi->proxy_handle = 0;
+ mcdi->proxy_result = ETIMEDOUT;
+ mcdi->ops->mgmt_evq_poll(mcdi->ops_cookie);
+ if (mcdi->proxy_result != ETIMEDOUT)
+ return B_TRUE;
+
+ return B_FALSE;
+}
+
+static void
+sfc_efx_mcdi_poll(struct sfc_efx_mcdi *mcdi, boolean_t proxy)
+{
+ efx_nic_t *enp;
+ unsigned int delay_total;
+ unsigned int delay_us;
+ boolean_t aborted __rte_unused;
+
+ delay_total = 0;
+ delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MIN_US;
+ enp = mcdi->nic;
+
+ do {
+ boolean_t poll_completed;
+
+ poll_completed = (proxy) ?
+ sfc_efx_mcdi_proxy_event_available(mcdi) :
+ efx_mcdi_request_poll(enp);
+ if (poll_completed)
+ return;
+
+ if (delay_total > SFC_EFX_MCDI_WATCHDOG_INTERVAL_US) {
+ if (!proxy) {
+ aborted = efx_mcdi_request_abort(enp);
+ SFC_EFX_ASSERT(aborted);
+ sfc_efx_mcdi_timeout(mcdi);
+ }
+
+ return;
+ }
+
+ rte_delay_us(delay_us);
+
+ delay_total += delay_us;
+
+ /* Exponentially back off the poll frequency */
+ RTE_BUILD_BUG_ON(SFC_EFX_MCDI_POLL_INTERVAL_MAX_US >
+ UINT_MAX / 2);
+ delay_us *= 2;
+ if (delay_us > SFC_EFX_MCDI_POLL_INTERVAL_MAX_US)
+ delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MAX_US;
+
+ } while (1);
+}
+
+static void
+sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
+{
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
+ uint32_t proxy_handle;
+
+ if (mcdi->state == SFC_EFX_MCDI_DEAD) {
+ emrp->emr_rc = ENOEXEC;
+ return;
+ }
+
+ rte_spinlock_lock(&mcdi->lock);
+
+ SFC_EFX_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
+
+ efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
+ sfc_efx_mcdi_poll(mcdi, B_FALSE);
+
+ if (efx_mcdi_get_proxy_handle(mcdi->nic, emrp, &proxy_handle) == 0) {
+ /*
+ * Authorization is required for the MCDI request;
+ * wait for an MCDI proxy response event to bring
+ * a non-zero proxy handle (should be the same as
+ * the value obtained above) and operation status
+ */
+ sfc_efx_mcdi_poll(mcdi, B_TRUE);
+
+ if ((mcdi->proxy_handle != 0) &&
+ (mcdi->proxy_handle != proxy_handle)) {
+ sfc_efx_mcdi_err(mcdi, "Unexpected MCDI proxy event");
+ emrp->emr_rc = EFAULT;
+ } else if (mcdi->proxy_result == 0) {
+ /*
+ * Authorization succeeded; re-issue the original
+ * request and poll for an ordinary MCDI response
+ */
+ efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
+ sfc_efx_mcdi_poll(mcdi, B_FALSE);
+ } else {
+ emrp->emr_rc = mcdi->proxy_result;
+ sfc_efx_mcdi_err(mcdi,
+ "MCDI proxy authorization failed (handle=%08x, result=%d)",
+ proxy_handle, mcdi->proxy_result);
+ }
+ }
+
+ rte_spinlock_unlock(&mcdi->lock);
+}
+
+static void
+sfc_efx_mcdi_ev_cpl(void *arg)
+{
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
+
+ RTE_SET_USED(mcdi);
+ SFC_EFX_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
+
+ /* MCDI is polled, completions are not expected */
+ SFC_EFX_ASSERT(0);
+}
+
+static void
+sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
+{
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
+
+ sfc_efx_mcdi_warn(mcdi, "MC %s",
+ (eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
+ (eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN");
+
+ mcdi->ops->sched_restart(mcdi->ops_cookie);
+}
+
+#define SFC_MCDI_LOG_BUF_SIZE 128
+
+static size_t
+sfc_efx_mcdi_do_log(const struct sfc_efx_mcdi *mcdi,
+ char *buffer, void *data, size_t data_size,
+ size_t pfxsize, size_t position)
+{
+ uint32_t *words = data;
+ /* Space separator plus 2 characters per byte */
+ const size_t word_str_space = 1 + 2 * sizeof(*words);
+ size_t i;
+
+ for (i = 0; i < data_size; i += sizeof(*words)) {
+ if (position + word_str_space >=
+ SFC_MCDI_LOG_BUF_SIZE) {
+ /* Flush at SFC_MCDI_LOG_BUF_SIZE with backslash
+ * at the end which is required by netlogdecode.
+ */
+ buffer[position] = '\0';
+ sfc_efx_log_mcdi(mcdi, "%s \\", buffer);
+ /* Preserve prefix for the next log message */
+ position = pfxsize;
+ }
+ position += snprintf(buffer + position,
+ SFC_MCDI_LOG_BUF_SIZE - position,
+ " %08x", *words);
+ words++;
+ }
+ return position;
+}
+
+static void
+sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
+ void *header, size_t header_size,
+ void *data, size_t data_size)
+{
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
+ char buffer[SFC_MCDI_LOG_BUF_SIZE];
+ size_t pfxsize;
+ size_t start;
+
+ /*
+ * Unlike the other cases, MCDI logging implies more onerous work
+ * needed to produce a message. If the dynamic log level prevents
+ * the end result from being printed, the CPU time will be wasted.
+ *
+ * To avoid wasting time, the actual level is examined in advance.
+ */
+ if (rte_log_get_level(mcdi->logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
+ return;
+
+ /* The format including prefix added by sfc_efx_log_mcdi() is the
+ * format consumed by the Solarflare netlogdecode tool.
+ */
+ pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
+ type == EFX_LOG_MCDI_REQUEST ? "REQ" :
+ type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???");
+ start = sfc_efx_mcdi_do_log(mcdi, buffer, header, header_size,
+ pfxsize, pfxsize);
+ start = sfc_efx_mcdi_do_log(mcdi, buffer, data, data_size,
+ pfxsize, start);
+ if (start != pfxsize) {
+ buffer[start] = '\0';
+ sfc_efx_log_mcdi(mcdi, "%s", buffer);
+ }
+}
+
+static void
+sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
+{
+ struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
+
+ mcdi->proxy_handle = handle;
+ mcdi->proxy_result = result;
+}
+
+int
+sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
+ uint32_t logtype, const char *log_prefix, efx_nic_t *nic,
+ const struct sfc_efx_mcdi_ops *ops, void *ops_cookie)
+{
+ size_t max_msg_size;
+ efx_mcdi_transport_t *emtp;
+ int rc;
+
+ if (ops->dma_alloc == NULL || ops->dma_free == NULL ||
+ ops->sched_restart == NULL || ops->mgmt_evq_poll == NULL)
+ return EINVAL;
+
+ SFC_EFX_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
+
+ rte_spinlock_init(&mcdi->lock);
+
+ mcdi->ops = ops;
+ mcdi->ops_cookie = ops_cookie;
+ mcdi->nic = nic;
+
+ mcdi->state = SFC_EFX_MCDI_INITIALIZED;
+
+ mcdi->logtype = logtype;
+ mcdi->log_prefix = log_prefix;
+
+ max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2;
+ rc = ops->dma_alloc(ops_cookie, "mcdi", max_msg_size, &mcdi->mem);
+ if (rc != 0)
+ goto fail_dma_alloc;
+
+ emtp = &mcdi->transport;
+ emtp->emt_context = mcdi;
+ emtp->emt_dma_mem = &mcdi->mem;
+ emtp->emt_execute = sfc_efx_mcdi_execute;
+ emtp->emt_ev_cpl = sfc_efx_mcdi_ev_cpl;
+ emtp->emt_exception = sfc_efx_mcdi_exception;
+ emtp->emt_logger = sfc_efx_mcdi_logger;
+ emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response;
+
+ sfc_efx_mcdi_info(mcdi, "init MCDI");
+ rc = efx_mcdi_init(mcdi->nic, emtp);
+ if (rc != 0)
+ goto fail_mcdi_init;
+
+ return 0;
+
+fail_mcdi_init:
+ memset(emtp, 0, sizeof(*emtp));
+ ops->dma_free(ops_cookie, &mcdi->mem);
+
+fail_dma_alloc:
+ mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
+ return rc;
+}
+
+void
+sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi)
+{
+ efx_mcdi_transport_t *emtp;
+
+ emtp = &mcdi->transport;
+
+ rte_spinlock_lock(&mcdi->lock);
+
+ SFC_EFX_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED ||
+ mcdi->state == SFC_EFX_MCDI_DEAD);
+ mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
+
+ sfc_efx_mcdi_info(mcdi, "fini MCDI");
+ efx_mcdi_fini(mcdi->nic);
+ memset(emtp, 0, sizeof(*emtp));
+
+ rte_spinlock_unlock(&mcdi->lock);
+
+ mcdi->ops->dma_free(mcdi->ops_cookie, &mcdi->mem);
+}
diff --git a/drivers/net/sfc/sfc_mcdi.h b/drivers/common/sfc_efx/sfc_efx_mcdi.h
similarity index 80%
rename from drivers/net/sfc/sfc_mcdi.h
rename to drivers/common/sfc_efx/sfc_efx_mcdi.h
index e3a637aeb7..d75d9a7cfd 100644
--- a/drivers/net/sfc/sfc_mcdi.h
+++ b/drivers/common/sfc_efx/sfc_efx_mcdi.h
@@ -7,8 +7,8 @@
* for Solarflare) and Solarflare Communications, Inc.
*/
-#ifndef _SFC_MCDI_H
-#define _SFC_MCDI_H
+#ifndef _SFC_EFX_MCDI_H
+#define _SFC_EFX_MCDI_H
#include <stdint.h>
@@ -62,8 +62,16 @@ struct sfc_efx_mcdi {
const char *log_prefix;
};
+__rte_internal
+int sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
+ uint32_t logtype, const char *log_prefix,
+ efx_nic_t *nic,
+ const struct sfc_efx_mcdi_ops *ops, void *ops_cookie);
+__rte_internal
+void sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi);
+
#ifdef __cplusplus
}
#endif
-#endif /* _SFC_MCDI_H */
+#endif /* _SFC_EFX_MCDI_H */
diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h
index b20fecb4f8..fa7c79b80b 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -21,10 +21,11 @@
#include "efx.h"
+#include "sfc_efx_mcdi.h"
+
#include "sfc_debug.h"
#include "sfc_log.h"
#include "sfc_filter.h"
-#include "sfc_mcdi.h"
#ifdef __cplusplus
extern "C" {
diff --git a/drivers/net/sfc/sfc_mcdi.c b/drivers/net/sfc/sfc_mcdi.c
index ff2bc14c5d..644dd9c980 100644
--- a/drivers/net/sfc/sfc_mcdi.c
+++ b/drivers/net/sfc/sfc_mcdi.c
@@ -7,344 +7,13 @@
* for Solarflare) and Solarflare Communications, Inc.
*/
-#include <rte_cycles.h>
+#include "sfc_efx_mcdi.h"
-#include "efx.h"
-#include "efx_mcdi.h"
-#include "efx_regs_mcdi.h"
-
-#include "sfc_mcdi.h"
#include "sfc.h"
#include "sfc_debug.h"
#include "sfc_log.h"
#include "sfc_ev.h"
-#define SFC_EFX_MCDI_POLL_INTERVAL_MIN_US 10 /* 10us */
-#define SFC_EFX_MCDI_POLL_INTERVAL_MAX_US (US_PER_S / 10) /* 100ms */
-#define SFC_EFX_MCDI_WATCHDOG_INTERVAL_US (10 * US_PER_S) /* 10s */
-
-#define sfc_efx_mcdi_log(mcdi, level, ...) \
- do { \
- const struct sfc_efx_mcdi *_mcdi = (mcdi); \
- \
- rte_log(level, _mcdi->logtype, \
- RTE_FMT("%s" RTE_FMT_HEAD(__VA_ARGS__ ,) "\n", \
- _mcdi->log_prefix, \
- RTE_FMT_TAIL(__VA_ARGS__,))); \
- } while (0)
-
-#define sfc_efx_mcdi_crit(mcdi, ...) \
- sfc_efx_mcdi_log(mcdi, RTE_LOG_CRIT, __VA_ARGS__)
-
-#define sfc_efx_mcdi_err(mcdi, ...) \
- sfc_efx_mcdi_log(mcdi, RTE_LOG_ERR, __VA_ARGS__)
-
-#define sfc_efx_mcdi_warn(mcdi, ...) \
- sfc_efx_mcdi_log(mcdi, RTE_LOG_WARNING, __VA_ARGS__)
-
-#define sfc_efx_mcdi_info(mcdi, ...) \
- sfc_efx_mcdi_log(mcdi, RTE_LOG_INFO, __VA_ARGS__)
-
-/** Level value used by MCDI log statements */
-#define SFC_EFX_LOG_LEVEL_MCDI RTE_LOG_INFO
-
-#define sfc_efx_log_mcdi(mcdi, ...) \
- sfc_efx_mcdi_log(mcdi, SFC_EFX_LOG_LEVEL_MCDI, __VA_ARGS__)
-
-static void
-sfc_efx_mcdi_timeout(struct sfc_efx_mcdi *mcdi)
-{
- sfc_efx_mcdi_warn(mcdi, "MC TIMEOUT");
-
- mcdi->state = SFC_EFX_MCDI_DEAD;
- sfc_efx_mcdi_crit(mcdi,
- "MCDI timeout handling is not implemented - NIC is unusable");
-}
-
-static inline boolean_t
-sfc_efx_mcdi_proxy_event_available(struct sfc_efx_mcdi *mcdi)
-{
- mcdi->proxy_handle = 0;
- mcdi->proxy_result = ETIMEDOUT;
- mcdi->ops->mgmt_evq_poll(mcdi->ops_cookie);
- if (mcdi->proxy_result != ETIMEDOUT)
- return B_TRUE;
-
- return B_FALSE;
-}
-
-static void
-sfc_efx_mcdi_poll(struct sfc_efx_mcdi *mcdi, boolean_t proxy)
-{
- efx_nic_t *enp;
- unsigned int delay_total;
- unsigned int delay_us;
- boolean_t aborted __rte_unused;
-
- delay_total = 0;
- delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MIN_US;
- enp = mcdi->nic;
-
- do {
- boolean_t poll_completed;
-
- poll_completed = (proxy) ?
- sfc_efx_mcdi_proxy_event_available(mcdi) :
- efx_mcdi_request_poll(enp);
- if (poll_completed)
- return;
-
- if (delay_total > SFC_EFX_MCDI_WATCHDOG_INTERVAL_US) {
- if (!proxy) {
- aborted = efx_mcdi_request_abort(enp);
- SFC_ASSERT(aborted);
- sfc_efx_mcdi_timeout(mcdi);
- }
-
- return;
- }
-
- rte_delay_us(delay_us);
-
- delay_total += delay_us;
-
- /* Exponentially back off the poll frequency */
- RTE_BUILD_BUG_ON(SFC_EFX_MCDI_POLL_INTERVAL_MAX_US >
- UINT_MAX / 2);
- delay_us *= 2;
- if (delay_us > SFC_EFX_MCDI_POLL_INTERVAL_MAX_US)
- delay_us = SFC_EFX_MCDI_POLL_INTERVAL_MAX_US;
-
- } while (1);
-}
-
-static void
-sfc_efx_mcdi_execute(void *arg, efx_mcdi_req_t *emrp)
-{
- struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
- uint32_t proxy_handle;
-
- if (mcdi->state == SFC_EFX_MCDI_DEAD) {
- emrp->emr_rc = ENOEXEC;
- return;
- }
-
- rte_spinlock_lock(&mcdi->lock);
-
- SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
-
- efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
- sfc_efx_mcdi_poll(mcdi, B_FALSE);
-
- if (efx_mcdi_get_proxy_handle(mcdi->nic, emrp, &proxy_handle) == 0) {
- /*
- * Authorization is required for the MCDI request;
- * wait for an MCDI proxy response event to bring
- * a non-zero proxy handle (should be the same as
- * the value obtained above) and operation status
- */
- sfc_efx_mcdi_poll(mcdi, B_TRUE);
-
- if ((mcdi->proxy_handle != 0) &&
- (mcdi->proxy_handle != proxy_handle)) {
- sfc_efx_mcdi_err(mcdi, "Unexpected MCDI proxy event");
- emrp->emr_rc = EFAULT;
- } else if (mcdi->proxy_result == 0) {
- /*
- * Authorization succeeded; re-issue the original
- * request and poll for an ordinary MCDI response
- */
- efx_mcdi_request_start(mcdi->nic, emrp, B_FALSE);
- sfc_efx_mcdi_poll(mcdi, B_FALSE);
- } else {
- emrp->emr_rc = mcdi->proxy_result;
- sfc_efx_mcdi_err(mcdi,
- "MCDI proxy authorization failed (handle=%08x, result=%d)",
- proxy_handle, mcdi->proxy_result);
- }
- }
-
- rte_spinlock_unlock(&mcdi->lock);
-}
-
-static void
-sfc_efx_mcdi_ev_cpl(void *arg)
-{
- struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
-
- RTE_SET_USED(mcdi);
- SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED);
-
- /* MCDI is polled, completions are not expected */
- SFC_ASSERT(0);
-}
-
-static void
-sfc_efx_mcdi_exception(void *arg, efx_mcdi_exception_t eme)
-{
- struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
-
- sfc_efx_mcdi_warn(mcdi, "MC %s",
- (eme == EFX_MCDI_EXCEPTION_MC_REBOOT) ? "REBOOT" :
- (eme == EFX_MCDI_EXCEPTION_MC_BADASSERT) ? "BADASSERT" : "UNKNOWN");
-
- mcdi->ops->sched_restart(mcdi->ops_cookie);
-}
-
-#define SFC_MCDI_LOG_BUF_SIZE 128
-
-static size_t
-sfc_efx_mcdi_do_log(const struct sfc_efx_mcdi *mcdi,
- char *buffer, void *data, size_t data_size,
- size_t pfxsize, size_t position)
-{
- uint32_t *words = data;
- /* Space separator plus 2 characters per byte */
- const size_t word_str_space = 1 + 2 * sizeof(*words);
- size_t i;
-
- for (i = 0; i < data_size; i += sizeof(*words)) {
- if (position + word_str_space >=
- SFC_MCDI_LOG_BUF_SIZE) {
- /* Flush at SFC_MCDI_LOG_BUF_SIZE with backslash
- * at the end which is required by netlogdecode.
- */
- buffer[position] = '\0';
- sfc_efx_log_mcdi(mcdi, "%s \\", buffer);
- /* Preserve prefix for the next log message */
- position = pfxsize;
- }
- position += snprintf(buffer + position,
- SFC_MCDI_LOG_BUF_SIZE - position,
- " %08x", *words);
- words++;
- }
- return position;
-}
-
-static void
-sfc_efx_mcdi_logger(void *arg, efx_log_msg_t type,
- void *header, size_t header_size,
- void *data, size_t data_size)
-{
- struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
- char buffer[SFC_MCDI_LOG_BUF_SIZE];
- size_t pfxsize;
- size_t start;
-
- /*
- * Unlike the other cases, MCDI logging implies more onerous work
- * needed to produce a message. If the dynamic log level prevents
- * the end result from being printed, the CPU time will be wasted.
- *
- * To avoid wasting time, the actual level is examined in advance.
- */
- if (rte_log_get_level(mcdi->logtype) < (int)SFC_EFX_LOG_LEVEL_MCDI)
- return;
-
- /* The format including prefix added by sfc_efx_log_mcdi() is the
- * format consumed by the Solarflare netlogdecode tool.
- */
- pfxsize = snprintf(buffer, sizeof(buffer), "MCDI RPC %s:",
- type == EFX_LOG_MCDI_REQUEST ? "REQ" :
- type == EFX_LOG_MCDI_RESPONSE ? "RESP" : "???");
- start = sfc_efx_mcdi_do_log(mcdi, buffer, header, header_size,
- pfxsize, pfxsize);
- start = sfc_efx_mcdi_do_log(mcdi, buffer, data, data_size,
- pfxsize, start);
- if (start != pfxsize) {
- buffer[start] = '\0';
- sfc_efx_log_mcdi(mcdi, "%s", buffer);
- }
-}
-
-static void
-sfc_efx_mcdi_ev_proxy_response(void *arg, uint32_t handle, efx_rc_t result)
-{
- struct sfc_efx_mcdi *mcdi = (struct sfc_efx_mcdi *)arg;
-
- mcdi->proxy_handle = handle;
- mcdi->proxy_result = result;
-}
-
-static int
-sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
- uint32_t logtype, const char *log_prefix, efx_nic_t *nic,
- const struct sfc_efx_mcdi_ops *ops, void *ops_cookie)
-{
- size_t max_msg_size;
- efx_mcdi_transport_t *emtp;
- int rc;
-
- if (ops->dma_alloc == NULL || ops->dma_free == NULL ||
- ops->sched_restart == NULL || ops->mgmt_evq_poll == NULL)
- return EINVAL;
-
- SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_UNINITIALIZED);
-
- rte_spinlock_init(&mcdi->lock);
-
- mcdi->ops = ops;
- mcdi->ops_cookie = ops_cookie;
- mcdi->nic = nic;
-
- mcdi->state = SFC_EFX_MCDI_INITIALIZED;
-
- mcdi->logtype = logtype;
- mcdi->log_prefix = log_prefix;
-
- max_msg_size = sizeof(uint32_t) + MCDI_CTL_SDU_LEN_MAX_V2;
- rc = ops->dma_alloc(ops_cookie, "mcdi", max_msg_size, &mcdi->mem);
- if (rc != 0)
- goto fail_dma_alloc;
-
- emtp = &mcdi->transport;
- emtp->emt_context = mcdi;
- emtp->emt_dma_mem = &mcdi->mem;
- emtp->emt_execute = sfc_efx_mcdi_execute;
- emtp->emt_ev_cpl = sfc_efx_mcdi_ev_cpl;
- emtp->emt_exception = sfc_efx_mcdi_exception;
- emtp->emt_logger = sfc_efx_mcdi_logger;
- emtp->emt_ev_proxy_response = sfc_efx_mcdi_ev_proxy_response;
-
- sfc_efx_mcdi_info(mcdi, "init MCDI");
- rc = efx_mcdi_init(mcdi->nic, emtp);
- if (rc != 0)
- goto fail_mcdi_init;
-
- return 0;
-
-fail_mcdi_init:
- memset(emtp, 0, sizeof(*emtp));
- ops->dma_free(ops_cookie, &mcdi->mem);
-
-fail_dma_alloc:
- mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
- return rc;
-}
-
-static void
-sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi)
-{
- efx_mcdi_transport_t *emtp;
-
- emtp = &mcdi->transport;
-
- rte_spinlock_lock(&mcdi->lock);
-
- SFC_ASSERT(mcdi->state == SFC_EFX_MCDI_INITIALIZED ||
- mcdi->state == SFC_EFX_MCDI_DEAD);
- mcdi->state = SFC_EFX_MCDI_UNINITIALIZED;
-
- sfc_efx_mcdi_info(mcdi, "fini MCDI");
- efx_mcdi_fini(mcdi->nic);
- memset(emtp, 0, sizeof(*emtp));
-
- rte_spinlock_unlock(&mcdi->lock);
-
- mcdi->ops->dma_free(mcdi->ops_cookie, &mcdi->mem);
-}
-
static sfc_efx_mcdi_dma_alloc_cb sfc_mcdi_dma_alloc;
static int
sfc_mcdi_dma_alloc(void *cookie, const char *name, size_t len,
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [dpdk-dev] [PATCH v2 00/17] net/sfc: factor out common driver library
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 00/17] " Andrew Rybchenko
` (16 preceding siblings ...)
2020-09-17 6:34 ` [dpdk-dev] [PATCH v2 17/17] net/sfc: move MCDI helpers to common driver Andrew Rybchenko
@ 2020-09-21 22:38 ` Ferruh Yigit
17 siblings, 0 replies; 38+ messages in thread
From: Ferruh Yigit @ 2020-09-21 22:38 UTC (permalink / raw)
To: Andrew Rybchenko, dev; +Cc: Thomas Monjalon, David Marchand
On 9/17/2020 7:34 AM, Andrew Rybchenko wrote:
> Network and vDPA drivers share libefx. So, libefx should be moved
> to common drivers.
>
> DPDK adaptation of the MCDI interface may be shared as well.
>
> The new common driver name is sfc_efx since it a new home of
> libefx base driver. sfc_ prefix is used to make it clear that
> it is related to net/sfc (and vdpa/sfc in the future).
>
> Cc: Thomas Monjalon <thomas@monjalon.net>
> Cc: David Marchand <david.marchand@redhat.com>
> Cc: Ferruh Yigit <ferruh.yigit@intel.com>
>
> v2:
> - add patches to introduce LIBEFX_API and LIBEFX_INTERNAL
> global functions decorators
> - use LIBEFX_API for __rte_internal markup
>
> Andrew Rybchenko (17):
> net/sfc/base: add missing extern storage-class specifiers
> net/sfc/base: decorate libefx API functions
> net/sfc/base: decorate libefx internal extern functions
> net/sfc: include header with debug helpers directly
> net/sfc: introduce common driver library
> net/sfc: add dedicated header file with MCDI interface
> net/sfc: move MCDI helper interface to dedicated namespace
> net/sfc: make MCDI logging helper macros local
> net/sfc: start to make MCDI helpers interface shareable
> net/sfc: use own logging helper macros
> net/sfc: avoid usage of NIC pointer from adapter context
> net/sfc: avoid panic in the case of MCDI timeout
> net/sfc: add MCDI callbacks to allocate/free DMA memory
> net/sfc: add MCDI callback to schedule restart
> net/sfc: add MCDI callback to poll management event queue
> net/sfc: use MCDI control structure as libefx ops context
> net/sfc: move MCDI helpers to common driver
>
Series applied to dpdk-next-net/main, thanks.
^ permalink raw reply [flat|nested] 38+ messages in thread