1 /* SPDX-License-Identifier: BSD-3-Clause 2 * Copyright(c) 2019-2021 Broadcom 3 * All rights reserved. 4 */ 5 6 #ifndef _TF_MSG_H_ 7 #define _TF_MSG_H_ 8 9 #include <rte_common.h> 10 #include <hsi_struct_def_dpdk.h> 11 12 #include "tf_tbl.h" 13 #include "tf_rm.h" 14 #include "tf_tcam.h" 15 #include "tf_global_cfg.h" 16 17 struct tf; 18 19 /* HWRM Direct messages */ 20 21 /** 22 * Sends session open request to Firmware 23 * 24 * [in] session 25 * Pointer to session handle 26 * 27 * [in] ctrl_chan_name 28 * PCI name of the control channel 29 * 30 * [in/out] fw_session_id 31 * Pointer to the fw_session_id that is allocated on firmware side 32 * 33 * Returns: 34 * 0 on Success else internal Truflow error 35 */ 36 int tf_msg_session_open(struct tf *tfp, 37 char *ctrl_chan_name, 38 uint8_t *fw_session_id, 39 uint8_t *fw_session_client_id); 40 41 /** 42 * Sends session close request to Firmware 43 * 44 * [in] session 45 * Pointer to session handle 46 * 47 * [in] ctrl_chan_name 48 * PCI name of the control channel 49 * 50 * [in] fw_session_id 51 * Pointer to the fw_session_id that is assigned to the session at 52 * time of session open 53 * 54 * Returns: 55 * 0 on Success else internal Truflow error 56 */ 57 int tf_msg_session_attach(struct tf *tfp, 58 char *ctrl_channel_name, 59 uint8_t tf_fw_session_id); 60 61 /** 62 * Sends session client register request to Firmware 63 * 64 * [in] session 65 * Pointer to session handle 66 * 67 * [in] ctrl_chan_name 68 * PCI name of the control channel 69 * 70 * [in/out] fw_session_client_id 71 * Pointer to the fw_session_client_id that is allocated on firmware 72 * side 73 * 74 * Returns: 75 * 0 on Success else internal Truflow error 76 */ 77 int tf_msg_session_client_register(struct tf *tfp, 78 char *ctrl_channel_name, 79 uint8_t *fw_session_client_id); 80 81 /** 82 * Sends session client unregister request to Firmware 83 * 84 * [in] session 85 * Pointer to session handle 86 * 87 * [in/out] fw_session_client_id 88 * Pointer to the fw_session_client_id that is allocated on firmware 89 * side 90 * 91 * Returns: 92 * 0 on Success else internal Truflow error 93 */ 94 int tf_msg_session_client_unregister(struct tf *tfp, 95 uint8_t fw_session_client_id); 96 97 /** 98 * Sends session close request to Firmware 99 * 100 * [in] session 101 * Pointer to session handle 102 * 103 * Returns: 104 * 0 on Success else internal Truflow error 105 */ 106 int tf_msg_session_close(struct tf *tfp); 107 108 /** 109 * Sends session query config request to TF Firmware 110 * 111 * [in] session 112 * Pointer to session handle 113 * 114 * Returns: 115 * 0 on Success else internal Truflow error 116 */ 117 int tf_msg_session_qcfg(struct tf *tfp); 118 119 /** 120 * Sends session HW resource query capability request to TF Firmware 121 * 122 * [in] tfp 123 * Pointer to TF handle 124 * 125 * [in] dir 126 * Receive or Transmit direction 127 * 128 * [in] size 129 * Number of elements in the query. Should be set to the max 130 * elements for the device type 131 * 132 * [out] query 133 * Pointer to an array of query elements 134 * 135 * [out] resv_strategy 136 * Pointer to the reservation strategy 137 * 138 * Returns: 139 * 0 on Success else internal Truflow error 140 */ 141 int tf_msg_session_resc_qcaps(struct tf *tfp, 142 enum tf_dir dir, 143 uint16_t size, 144 struct tf_rm_resc_req_entry *query, 145 enum tf_rm_resc_resv_strategy *resv_strategy); 146 147 /** 148 * Sends session HW resource allocation request to TF Firmware 149 * 150 * [in] tfp 151 * Pointer to TF handle 152 * 153 * [in] dir 154 * Receive or Transmit direction 155 * 156 * [in] size 157 * Number of elements in the req and resv arrays 158 * 159 * [in] req 160 * Pointer to an array of request elements 161 * 162 * [in] resv 163 * Pointer to an array of reserved elements 164 * 165 * Returns: 166 * 0 on Success else internal Truflow error 167 */ 168 int tf_msg_session_resc_alloc(struct tf *tfp, 169 enum tf_dir dir, 170 uint16_t size, 171 struct tf_rm_resc_req_entry *request, 172 struct tf_rm_resc_entry *resv); 173 174 /** 175 * Sends session resource flush request to TF Firmware 176 * 177 * [in] tfp 178 * Pointer to TF handle 179 * 180 * [in] dir 181 * Receive or Transmit direction 182 * 183 * [in] size 184 * Number of elements in the req and resv arrays 185 * 186 * [in] resv 187 * Pointer to an array of reserved elements that needs to be flushed 188 * 189 * Returns: 190 * 0 on Success else internal Truflow error 191 */ 192 int tf_msg_session_resc_flush(struct tf *tfp, 193 enum tf_dir dir, 194 uint16_t size, 195 struct tf_rm_resc_entry *resv); 196 /** 197 * Sends EM internal insert request to Firmware 198 * 199 * [in] tfp 200 * Pointer to TF handle 201 * 202 * [in] params 203 * Pointer to em insert parameter list 204 * 205 * [in] rptr_index 206 * Record ptr index 207 * 208 * [in] rptr_entry 209 * Record ptr entry 210 * 211 * [in] num_of_entries 212 * Number of entries to insert 213 * 214 * Returns: 215 * 0 on Success else internal Truflow error 216 */ 217 int tf_msg_insert_em_internal_entry(struct tf *tfp, 218 struct tf_insert_em_entry_parms *params, 219 uint16_t *rptr_index, 220 uint8_t *rptr_entry, 221 uint8_t *num_of_entries); 222 /** 223 * Sends EM internal delete request to Firmware 224 * 225 * [in] tfp 226 * Pointer to TF handle 227 * 228 * [in] em_parms 229 * Pointer to em delete parameters 230 * 231 * Returns: 232 * 0 on Success else internal Truflow error 233 */ 234 int tf_msg_delete_em_entry(struct tf *tfp, 235 struct tf_delete_em_entry_parms *em_parms); 236 237 /** 238 * Sends EM mem register request to Firmware 239 * 240 * [in] tfp 241 * Pointer to TF handle 242 * 243 * [in] page_lvl 244 * Page level 245 * 246 * [in] page_size 247 * Page size 248 * 249 * [in] dma_addr 250 * DMA Address for the memory page 251 * 252 * [in] ctx_id 253 * Context id 254 * 255 * Returns: 256 * 0 on Success else internal Truflow error 257 */ 258 int tf_msg_em_mem_rgtr(struct tf *tfp, 259 int page_lvl, 260 int page_size, 261 uint64_t dma_addr, 262 uint16_t *ctx_id); 263 264 /** 265 * Sends EM mem unregister request to Firmware 266 * 267 * [in] tfp 268 * Pointer to TF handle 269 * 270 * [in] ctx_id 271 * Context id 272 * 273 * Returns: 274 * 0 on Success else internal Truflow error 275 */ 276 int tf_msg_em_mem_unrgtr(struct tf *tfp, 277 uint16_t *ctx_id); 278 279 /** 280 * Sends EM qcaps request to Firmware 281 * 282 * [in] tfp 283 * Pointer to TF handle 284 * 285 * [in] dir 286 * Receive or Transmit direction 287 * 288 * [in] em_caps 289 * Pointer to EM capabilities 290 * 291 * Returns: 292 * 0 on Success else internal Truflow error 293 */ 294 int tf_msg_em_qcaps(struct tf *tfp, 295 int dir, 296 struct tf_em_caps *em_caps); 297 298 /** 299 * Sends EM config request to Firmware 300 * 301 * [in] tfp 302 * Pointer to TF handle 303 * 304 * [in] num_entries 305 * EM Table, key 0, number of entries to configure 306 * 307 * [in] key0_ctx_id 308 * EM Table, Key 0 context id 309 * 310 * [in] key1_ctx_id 311 * EM Table, Key 1 context id 312 * 313 * [in] record_ctx_id 314 * EM Table, Record context id 315 * 316 * [in] efc_ctx_id 317 * EM Table, EFC Table context id 318 * 319 * [in] flush_interval 320 * Flush pending HW cached flows every 1/10th of value set in 321 * seconds, both idle and active flows are flushed from the HW 322 * cache. If set to 0, this feature will be disabled. 323 * 324 * [in] dir 325 * Receive or Transmit direction 326 * 327 * Returns: 328 * 0 on Success else internal Truflow error 329 */ 330 int tf_msg_em_cfg(struct tf *tfp, 331 uint32_t num_entries, 332 uint16_t key0_ctx_id, 333 uint16_t key1_ctx_id, 334 uint16_t record_ctx_id, 335 uint16_t efc_ctx_id, 336 uint8_t flush_interval, 337 int dir); 338 339 /** 340 * Sends EM operation request to Firmware 341 * 342 * [in] tfp 343 * Pointer to TF handle 344 * 345 * [in] dir 346 * Receive or Transmit direction 347 * 348 * [in] op 349 * CFA Operator 350 * 351 * Returns: 352 * 0 on Success else internal Truflow error 353 */ 354 int tf_msg_em_op(struct tf *tfp, 355 int dir, 356 uint16_t op); 357 358 /** 359 * Sends tcam entry 'set' to the Firmware. 360 * 361 * [in] tfp 362 * Pointer to session handle 363 * 364 * [in] parms 365 * Pointer to set parameters 366 * 367 * Returns: 368 * 0 on Success else internal Truflow error 369 */ 370 int tf_msg_tcam_entry_set(struct tf *tfp, 371 struct tf_tcam_set_parms *parms); 372 373 /** 374 * Sends tcam entry 'free' to the Firmware. 375 * 376 * [in] tfp 377 * Pointer to session handle 378 * 379 * [in] parms 380 * Pointer to free parameters 381 * 382 * Returns: 383 * 0 on Success else internal Truflow error 384 */ 385 int tf_msg_tcam_entry_free(struct tf *tfp, 386 struct tf_tcam_free_parms *parms); 387 388 /** 389 * Sends Set message of a Table Type element to the firmware. 390 * 391 * [in] tfp 392 * Pointer to session handle 393 * 394 * [in] dir 395 * Direction location of the element to set 396 * 397 * [in] hcapi_type 398 * Type of the object to set 399 * 400 * [in] size 401 * Size of the data to set 402 * 403 * [in] data 404 * Data to set 405 * 406 * [in] index 407 * Index to set 408 * 409 * Returns: 410 * 0 - Success 411 */ 412 int tf_msg_set_tbl_entry(struct tf *tfp, 413 enum tf_dir dir, 414 uint16_t hcapi_type, 415 uint16_t size, 416 uint8_t *data, 417 uint32_t index); 418 419 /** 420 * Sends get message of a Table Type element to the firmware. 421 * 422 * [in] tfp 423 * Pointer to session handle 424 * 425 * [in] dir 426 * Direction location of the element to get 427 * 428 * [in] hcapi_type 429 * Type of the object to get 430 * 431 * [in] size 432 * Size of the data read 433 * 434 * [in] data 435 * Data read 436 * 437 * [in] index 438 * Index to get 439 * 440 * Returns: 441 * 0 - Success 442 */ 443 int tf_msg_get_tbl_entry(struct tf *tfp, 444 enum tf_dir dir, 445 uint16_t hcapi_type, 446 uint16_t size, 447 uint8_t *data, 448 uint32_t index); 449 450 /* HWRM Tunneled messages */ 451 452 /** 453 * Sends global cfg read request to Firmware 454 * 455 * [in] tfp 456 * Pointer to TF handle 457 * 458 * [in] params 459 * Pointer to read parameters 460 * 461 * Returns: 462 * 0 on Success else internal Truflow error 463 */ 464 int tf_msg_get_global_cfg(struct tf *tfp, 465 struct tf_global_cfg_parms *params); 466 467 /** 468 * Sends global cfg update request to Firmware 469 * 470 * [in] tfp 471 * Pointer to TF handle 472 * 473 * [in] params 474 * Pointer to write parameters 475 * 476 * Returns: 477 * 0 on Success else internal Truflow error 478 */ 479 int tf_msg_set_global_cfg(struct tf *tfp, 480 struct tf_global_cfg_parms *params); 481 482 /** 483 * Sends bulk get message of a Table Type element to the firmware. 484 * 485 * [in] tfp 486 * Pointer to session handle 487 * 488 * [in] parms 489 * Pointer to table get bulk parameters 490 * 491 * Returns: 492 * 0 on Success else internal Truflow error 493 */ 494 int tf_msg_bulk_get_tbl_entry(struct tf *tfp, 495 enum tf_dir dir, 496 uint16_t hcapi_type, 497 uint32_t starting_idx, 498 uint16_t num_entries, 499 uint16_t entry_sz_in_bytes, 500 uint64_t physical_mem_addr); 501 502 /** 503 * Sends Set message of a IF Table Type element to the firmware. 504 * 505 * [in] tfp 506 * Pointer to session handle 507 * 508 * [in] parms 509 * Pointer to IF table set parameters 510 * 511 * Returns: 512 * 0 on Success else internal Truflow error 513 */ 514 int tf_msg_set_if_tbl_entry(struct tf *tfp, 515 struct tf_if_tbl_set_parms *params); 516 517 /** 518 * Sends get message of a IF Table Type element to the firmware. 519 * 520 * [in] tfp 521 * Pointer to session handle 522 * 523 * [in] parms 524 * Pointer to IF table get parameters 525 * 526 * Returns: 527 * 0 on Success else internal Truflow error 528 */ 529 int tf_msg_get_if_tbl_entry(struct tf *tfp, 530 struct tf_if_tbl_get_parms *params); 531 532 #endif /* _TF_MSG_H_ */ 533