xref: /dpdk/drivers/common/cnxk/roc_sso_priv.h (revision be541d37)
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2021 Marvell.
3  */
4 
5 #ifndef _ROC_SSO_PRIV_H_
6 #define _ROC_SSO_PRIV_H_
7 
8 struct sso_rsrc {
9 	uint16_t rsrc_id;
10 	uint64_t base;
11 };
12 
13 struct sso {
14 	struct plt_pci_device *pci_dev;
15 	struct dev dev;
16 	/* Interrupt handler args. */
17 	struct sso_rsrc hws_rsrc[MAX_RVU_BLKLF_CNT];
18 	struct sso_rsrc hwgrp_rsrc[MAX_RVU_BLKLF_CNT];
19 	/* MSIX offsets */
20 	uint16_t hws_msix_offset[MAX_RVU_BLKLF_CNT];
21 	uint16_t hwgrp_msix_offset[MAX_RVU_BLKLF_CNT];
22 	/* SSO link mapping. */
23 	struct plt_bitmap **link_map;
24 	void *link_map_mem;
25 	plt_spinlock_t mbox_lock;
26 } __plt_cache_aligned;
27 
28 enum sso_err_status {
29 	SSO_ERR_PARAM = -4096,
30 	SSO_ERR_DEVICE_NOT_BOUNDED = -4097,
31 };
32 
33 enum sso_lf_type {
34 	SSO_LF_TYPE_HWS,
35 	SSO_LF_TYPE_HWGRP,
36 };
37 
38 static inline struct sso *
roc_sso_to_sso_priv(struct roc_sso * roc_sso)39 roc_sso_to_sso_priv(struct roc_sso *roc_sso)
40 {
41 	return (struct sso *)&roc_sso->reserved[0];
42 }
43 
44 /* SSO LF ops */
45 int sso_lf_alloc(struct dev *dev, enum sso_lf_type lf_type, uint16_t nb_lf,
46 		 void **rsp);
47 int sso_lf_free(struct dev *dev, enum sso_lf_type lf_type, uint16_t nb_lf);
48 void sso_hws_link_modify(uint8_t hws, uintptr_t base, struct plt_bitmap *bmp,
49 			 uint16_t hwgrp[], uint16_t n, uint16_t enable);
50 int sso_hwgrp_alloc_xaq(struct dev *dev, uint32_t npa_aura_id, uint16_t hwgrps);
51 int sso_hwgrp_release_xaq(struct dev *dev, uint16_t hwgrps);
52 int sso_hwgrp_init_xaq_aura(struct dev *dev, struct roc_sso_xaq_data *xaq,
53 			    uint32_t nb_xae, uint32_t xae_waes,
54 			    uint32_t xaq_buf_size, uint16_t nb_hwgrp);
55 int sso_hwgrp_free_xaq_aura(struct dev *dev, struct roc_sso_xaq_data *xaq,
56 			    uint16_t nb_hwgrp);
57 
58 /* SSO IRQ */
59 int sso_register_irqs_priv(struct roc_sso *roc_sso,
60 			   struct plt_intr_handle *handle, uint16_t nb_hws,
61 			   uint16_t nb_hwgrp);
62 void sso_unregister_irqs_priv(struct roc_sso *roc_sso,
63 			      struct plt_intr_handle *handle, uint16_t nb_hws,
64 			      uint16_t nb_hwgrp);
65 
66 #endif /* _ROC_SSO_PRIV_H_ */
67