1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2022 Broadcom 3 * All rights reserved. 4 */ 5 6 #include <assert.h> 7 8 #include <stdint.h> 9 #include <stdbool.h> 10 11 #include "tfc.h" 12 #include "tfo.h" 13 14 /* HWRM Direct messages */ 15 16 int 17 tfc_msg_tbl_scope_qcaps(struct tfc *tfcp, 18 bool *tbl_scope_capable, 19 uint32_t *max_lkup_rec_cnt, 20 uint32_t *max_act_rec_cnt, 21 uint8_t *max_lkup_static_buckets_exp); 22 23 int tfc_msg_tbl_scope_id_alloc(struct tfc *tfcp, uint16_t fid, bool shared, 24 enum cfa_app_type app_type, uint8_t *tsid, 25 bool *first); 26 27 int 28 tfc_msg_backing_store_cfg_v2(struct tfc *tfcp, uint8_t tsid, enum cfa_dir dir, 29 enum cfa_region_type region, uint64_t base_addr, 30 uint8_t pbl_level, uint32_t pbl_page_sz, 31 uint32_t rec_cnt, uint8_t static_bkt_cnt_exp, 32 bool cfg_done); 33 34 int 35 tfc_msg_tbl_scope_deconfig(struct tfc *tfcp, uint8_t tsid); 36 37 int 38 tfc_msg_tbl_scope_fid_add(struct tfc *tfcp, uint16_t fid, 39 uint8_t tsid, uint16_t *fid_cnt); 40 41 int 42 tfc_msg_tbl_scope_fid_rem(struct tfc *tfcp, uint16_t fid, 43 uint8_t tsid, uint16_t *fid_cnt); 44 45 int 46 tfc_msg_idx_tbl_alloc(struct tfc *tfcp, uint16_t fid, uint16_t sid, 47 enum cfa_track_type tt, enum cfa_dir dir, 48 enum cfa_resource_subtype_idx_tbl rsubtype, 49 uint16_t *id); 50 51 int 52 tfc_msg_idx_tbl_alloc_set(struct tfc *tfcp, uint16_t fid, uint16_t sid, 53 enum cfa_track_type tt, enum cfa_dir dir, 54 enum cfa_resource_subtype_idx_tbl subtype, 55 const uint32_t *dev_data, uint8_t data_size, 56 uint16_t *id); 57 58 int 59 tfc_msg_idx_tbl_set(struct tfc *tfcp, uint16_t fid, 60 uint16_t sid, enum cfa_dir dir, 61 enum cfa_resource_subtype_idx_tbl subtype, 62 uint16_t id, const uint32_t *dev_data, uint8_t data_size); 63 64 int 65 tfc_msg_idx_tbl_get(struct tfc *tfcp, uint16_t fid, 66 uint16_t sid, enum cfa_dir dir, 67 enum cfa_resource_subtype_idx_tbl subtype, 68 uint16_t id, uint32_t *dev_data, uint8_t *data_size); 69 70 int 71 tfc_msg_idx_tbl_free(struct tfc *tfcp, uint16_t fid, 72 uint16_t sid, enum cfa_dir dir, 73 enum cfa_resource_subtype_idx_tbl subtype, uint16_t id); 74 75 int tfc_msg_global_id_alloc(struct tfc *tfcp, uint16_t fid, uint16_t sid, 76 enum tfc_domain_id domain_id, uint16_t req_cnt, 77 const struct tfc_global_id_req *glb_id_req, 78 struct tfc_global_id *rsp, uint16_t *rsp_cnt, 79 bool *first); 80 int 81 tfc_msg_session_id_alloc(struct tfc *tfcp, uint16_t fid, uint16_t *tsid); 82 83 int 84 tfc_msg_session_fid_add(struct tfc *tfcp, uint16_t fid, 85 uint16_t sid, uint16_t *fid_cnt); 86 int 87 tfc_msg_session_fid_rem(struct tfc *tfcp, uint16_t fid, 88 uint16_t sid, uint16_t *fid_cnt); 89 90 int tfc_msg_identifier_alloc(struct tfc *tfcp, enum cfa_dir dir, 91 enum cfa_resource_subtype_ident subtype, 92 enum cfa_track_type tt, uint16_t fid, 93 uint16_t sid, uint16_t *ident_id); 94 95 int tfc_msg_identifier_free(struct tfc *tfcp, enum cfa_dir dir, 96 enum cfa_resource_subtype_ident subtype, 97 uint16_t fid, uint16_t sid, 98 uint16_t ident_id); 99 100 #ifndef TFC_FORCE_POOL_0 101 int 102 tfc_msg_tbl_scope_pool_alloc(struct tfc *tfcp, 103 uint8_t tsid, 104 enum cfa_dir dir, 105 enum tfc_ts_table_type type, 106 uint16_t *pool_id, 107 uint8_t *lkup_pool_sz_exp); 108 109 int 110 tfc_msg_tbl_scope_pool_free(struct tfc *tfcp, 111 uint8_t tsid, 112 enum cfa_dir dir, 113 enum tfc_ts_table_type type, 114 uint16_t pool_id); 115 #endif /* !TFC_FORCE_POOL_0 */ 116 117 int 118 tfc_msg_tbl_scope_config_get(struct tfc *tfcp, uint8_t tsid, bool *configured); 119 120 int 121 tfc_msg_tcam_alloc(struct tfc *tfcp, uint16_t fid, uint16_t sid, 122 enum cfa_dir dir, enum cfa_resource_subtype_tcam subtype, 123 enum cfa_track_type tt, uint16_t pri, uint16_t key_sz_words, 124 uint16_t *tcam_id); 125 126 int 127 tfc_msg_tcam_alloc_set(struct tfc *tfcp, uint16_t fid, uint16_t sid, 128 enum cfa_dir dir, enum cfa_resource_subtype_tcam subtype, 129 enum cfa_track_type tt, uint16_t *tcam_id, uint16_t pri, 130 const uint8_t *key, uint8_t key_size, const uint8_t *mask, 131 const uint8_t *remap, uint8_t remap_size); 132 133 int 134 tfc_msg_tcam_set(struct tfc *tfcp, uint16_t fid, uint16_t sid, 135 enum cfa_dir dir, enum cfa_resource_subtype_tcam subtype, 136 uint16_t tcam_id, const uint8_t *key, uint8_t key_size, 137 const uint8_t *mask, const uint8_t *remap, 138 uint8_t remap_size); 139 140 int 141 tfc_msg_tcam_get(struct tfc *tfcp, uint16_t fid, uint16_t sid, 142 enum cfa_dir dir, enum cfa_resource_subtype_tcam subtype, 143 uint16_t tcam_id, uint8_t *key, uint8_t *key_size, 144 uint8_t *mask, uint8_t *remap, uint8_t *remap_size); 145 146 int 147 tfc_msg_tcam_free(struct tfc *tfcp, uint16_t fid, uint16_t sid, 148 enum cfa_dir dir, enum cfa_resource_subtype_tcam subtype, 149 uint16_t tcam_id); 150 151 int 152 tfc_msg_if_tbl_set(struct tfc *tfcp, uint16_t fid, uint16_t sid, 153 enum cfa_dir dir, enum cfa_resource_subtype_if_tbl subtype, 154 uint16_t index, uint8_t data_size, const uint8_t *data); 155 156 int 157 tfc_msg_if_tbl_get(struct tfc *tfcp, uint16_t fid, uint16_t sid, 158 enum cfa_dir dir, enum cfa_resource_subtype_if_tbl subtype, 159 uint16_t index, uint8_t *data_size, uint8_t *data); 160 161 #ifdef TF_FLOW_SCALE_QUERY 162 int tfc_msg_resc_usage_query(struct tfc *tfcp, uint16_t sid, enum cfa_dir dir, 163 uint16_t *data_size, void *data); 164 #endif /* TF_FLOW_SCALE_QUERY */ 165