xref: /dpdk/drivers/common/sfc_efx/sfc_efx_mcdi.h (revision 1094dd940ec0cc4e3ce2c5cd94807350855a17f9)
13caa85daSAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause
23caa85daSAndrew Rybchenko  *
3672386c1SAndrew Rybchenko  * Copyright(c) 2019-2021 Xilinx, Inc.
43caa85daSAndrew Rybchenko  * Copyright(c) 2016-2019 Solarflare Communications Inc.
53caa85daSAndrew Rybchenko  *
63caa85daSAndrew Rybchenko  * This software was jointly developed between OKTET Labs (under contract
73caa85daSAndrew Rybchenko  * for Solarflare) and Solarflare Communications, Inc.
83caa85daSAndrew Rybchenko  */
93caa85daSAndrew Rybchenko 
103caa85daSAndrew Rybchenko #ifndef _SFC_EFX_MCDI_H
113caa85daSAndrew Rybchenko #define _SFC_EFX_MCDI_H
123caa85daSAndrew Rybchenko 
133caa85daSAndrew Rybchenko #include <stdint.h>
143caa85daSAndrew Rybchenko 
15*1094dd94SDavid Marchand #include <rte_compat.h>
163caa85daSAndrew Rybchenko #include <rte_spinlock.h>
173caa85daSAndrew Rybchenko 
183caa85daSAndrew Rybchenko #include "efsys.h"
193caa85daSAndrew Rybchenko #include "efx.h"
203caa85daSAndrew Rybchenko 
213caa85daSAndrew Rybchenko 
223caa85daSAndrew Rybchenko #ifdef __cplusplus
233caa85daSAndrew Rybchenko extern "C" {
243caa85daSAndrew Rybchenko #endif
253caa85daSAndrew Rybchenko 
263caa85daSAndrew Rybchenko enum sfc_efx_mcdi_state {
273caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_UNINITIALIZED = 0,
283caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_INITIALIZED,
293caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_BUSY,
303caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_COMPLETED,
313caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_DEAD,
323caa85daSAndrew Rybchenko 
333caa85daSAndrew Rybchenko 	SFC_EFX_MCDI_NSTATES
343caa85daSAndrew Rybchenko };
353caa85daSAndrew Rybchenko 
363caa85daSAndrew Rybchenko typedef int (sfc_efx_mcdi_dma_alloc_cb)(void *cookie, const char *name,
373caa85daSAndrew Rybchenko 					  size_t len, efsys_mem_t *esmp);
383caa85daSAndrew Rybchenko 
393caa85daSAndrew Rybchenko typedef void (sfc_efx_mcdi_dma_free_cb)(void *cookie, efsys_mem_t *esmp);
403caa85daSAndrew Rybchenko 
413caa85daSAndrew Rybchenko typedef void (sfc_efx_mcdi_sched_restart_cb)(void *cookie);
423caa85daSAndrew Rybchenko 
433caa85daSAndrew Rybchenko typedef void (sfc_efx_mcdi_mgmt_evq_poll_cb)(void *cookie);
443caa85daSAndrew Rybchenko 
453caa85daSAndrew Rybchenko struct sfc_efx_mcdi_ops {
463caa85daSAndrew Rybchenko 	sfc_efx_mcdi_dma_alloc_cb	*dma_alloc;
473caa85daSAndrew Rybchenko 	sfc_efx_mcdi_dma_free_cb	*dma_free;
483caa85daSAndrew Rybchenko 	sfc_efx_mcdi_sched_restart_cb	*sched_restart;
493caa85daSAndrew Rybchenko 	sfc_efx_mcdi_mgmt_evq_poll_cb	*mgmt_evq_poll;
503caa85daSAndrew Rybchenko };
513caa85daSAndrew Rybchenko 
523caa85daSAndrew Rybchenko struct sfc_efx_mcdi {
533caa85daSAndrew Rybchenko 	rte_spinlock_t			lock;
543caa85daSAndrew Rybchenko 	const struct sfc_efx_mcdi_ops	*ops;
553caa85daSAndrew Rybchenko 	void				*ops_cookie;
563caa85daSAndrew Rybchenko 	efx_nic_t			*nic;
573caa85daSAndrew Rybchenko 	efsys_mem_t			mem;
583caa85daSAndrew Rybchenko 	enum sfc_efx_mcdi_state		state;
593caa85daSAndrew Rybchenko 	efx_mcdi_transport_t		transport;
603caa85daSAndrew Rybchenko 	uint32_t			logtype;
613caa85daSAndrew Rybchenko 	uint32_t			proxy_handle;
623caa85daSAndrew Rybchenko 	efx_rc_t			proxy_result;
633caa85daSAndrew Rybchenko 	const char			*log_prefix;
643caa85daSAndrew Rybchenko };
653caa85daSAndrew Rybchenko 
663caa85daSAndrew Rybchenko __rte_internal
673caa85daSAndrew Rybchenko int sfc_efx_mcdi_init(struct sfc_efx_mcdi *mcdi,
683caa85daSAndrew Rybchenko 		      uint32_t logtype, const char *log_prefix,
693caa85daSAndrew Rybchenko 		      efx_nic_t *nic,
703caa85daSAndrew Rybchenko 		      const struct sfc_efx_mcdi_ops *ops, void *ops_cookie);
713caa85daSAndrew Rybchenko __rte_internal
723caa85daSAndrew Rybchenko void sfc_efx_mcdi_fini(struct sfc_efx_mcdi *mcdi);
733caa85daSAndrew Rybchenko 
743caa85daSAndrew Rybchenko #ifdef __cplusplus
753caa85daSAndrew Rybchenko }
763caa85daSAndrew Rybchenko #endif
773caa85daSAndrew Rybchenko 
783caa85daSAndrew Rybchenko #endif  /* _SFC_EFX_MCDI_H */
79