1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(C) 2021 Marvell.
8 struct roc_sso_hwgrp_qos {
15 struct roc_sso_hws_stats {
19 struct roc_sso_hwgrp_stats {
30 struct roc_sso_xaq_data {
40 struct plt_pci_device *pci_dev;
47 struct roc_sso_xaq_data xaq;
50 uint32_t xaq_buf_size;
53 #define ROC_SSO_MEM_SZ (16 * 1024)
54 uint8_t reserved[ROC_SSO_MEM_SZ] __plt_cache_aligned;
55 } __plt_cache_aligned;
57 static __plt_always_inline void
58 roc_sso_hws_head_wait(uintptr_t tag_op)
63 asm volatile(PLT_CPU_FEATURE_PREAMBLE
64 " ldr %[tag], [%[tag_op]] \n"
65 " tbnz %[tag], 35, done%= \n"
68 " ldr %[tag], [%[tag_op]] \n"
69 " tbz %[tag], 35, rty%= \n"
72 : [tag_op] "r"(tag_op));
74 /* Wait for the SWTAG/SWTAG_FULL operation */
75 while (!(plt_read64(tag_op) & BIT_ULL(35)))
80 /* SSO device initialization */
81 int __roc_api roc_sso_dev_init(struct roc_sso *roc_sso);
82 int __roc_api roc_sso_dev_fini(struct roc_sso *roc_sso);
84 /* SSO device configuration */
85 int __roc_api roc_sso_rsrc_init(struct roc_sso *roc_sso, uint8_t nb_hws,
87 void __roc_api roc_sso_rsrc_fini(struct roc_sso *roc_sso);
88 int __roc_api roc_sso_hwgrp_qos_config(struct roc_sso *roc_sso,
89 struct roc_sso_hwgrp_qos *qos,
90 uint8_t nb_qos, uint32_t nb_xaq);
91 int __roc_api roc_sso_hwgrp_alloc_xaq(struct roc_sso *roc_sso,
92 uint32_t npa_aura_id, uint16_t hwgrps);
93 int __roc_api roc_sso_hwgrp_release_xaq(struct roc_sso *roc_sso,
95 int __roc_api roc_sso_hwgrp_set_priority(struct roc_sso *roc_sso,
96 uint16_t hwgrp, uint8_t weight,
97 uint8_t affinity, uint8_t priority);
98 uint64_t __roc_api roc_sso_ns_to_gw(struct roc_sso *roc_sso, uint64_t ns);
99 int __roc_api roc_sso_hws_link(struct roc_sso *roc_sso, uint8_t hws,
100 uint16_t hwgrp[], uint16_t nb_hwgrp);
101 int __roc_api roc_sso_hws_unlink(struct roc_sso *roc_sso, uint8_t hws,
102 uint16_t hwgrp[], uint16_t nb_hwgrp);
103 int __roc_api roc_sso_hwgrp_hws_link_status(struct roc_sso *roc_sso,
104 uint8_t hws, uint16_t hwgrp);
105 uintptr_t __roc_api roc_sso_hws_base_get(struct roc_sso *roc_sso, uint8_t hws);
106 uintptr_t __roc_api roc_sso_hwgrp_base_get(struct roc_sso *roc_sso,
108 int __roc_api roc_sso_hwgrp_init_xaq_aura(struct roc_sso *roc_sso,
110 int __roc_api roc_sso_hwgrp_free_xaq_aura(struct roc_sso *roc_sso,
114 void __roc_api roc_sso_dump(struct roc_sso *roc_sso, uint8_t nb_hws,
115 uint16_t hwgrp, FILE *f);
116 int __roc_api roc_sso_hwgrp_stats_get(struct roc_sso *roc_sso, uint8_t hwgrp,
117 struct roc_sso_hwgrp_stats *stats);
118 int __roc_api roc_sso_hws_stats_get(struct roc_sso *roc_sso, uint8_t hws,
119 struct roc_sso_hws_stats *stats);
121 #endif /* _ROC_SSOW_H_ */