/* SPDX-License-Identifier: BSD-3-Clause
- * Copyright(c) 2019-2020 Broadcom
+ * Copyright(c) 2019-2021 Broadcom
* All rights reserved.
*/
#include "tf_identifier.h"
#include "tf_tbl.h"
#include "tf_tcam.h"
+#ifdef TF_TCAM_SHARED
+#include "tf_tcam_shared.h"
+#endif
+#include "tf_if_tbl.h"
+#include "tf_global_cfg.h"
struct tf;
struct tf_session;
-/**
- * Device module types
- */
-enum tf_device_module_type {
- /**
- * Identifier module
- */
- TF_DEVICE_MODULE_TYPE_IDENTIFIER,
- /**
- * Table type module
- */
- TF_DEVICE_MODULE_TYPE_TABLE,
- /**
- * TCAM module
- */
- TF_DEVICE_MODULE_TYPE_TCAM,
- /**
- * EM module
- */
- TF_DEVICE_MODULE_TYPE_EM,
- TF_DEVICE_MODULE_TYPE_MAX
-};
-
/**
* The Device module provides a general device template. A supported
* device type should implement one or more of the listed function
int tf_dev_unbind(struct tf *tfp,
struct tf_dev_info *dev_handle);
+int
+tf_dev_bind_ops(enum tf_device_type type,
+ struct tf_dev_info *dev_handle);
+
/**
* Truflow device specific function hooks structure
*
int (*tf_dev_get_max_types)(struct tf *tfp,
uint16_t *max_types);
+ /**
+ * Retrieves the string description for the CFA resource
+ * type
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] resource_id
+ * HCAPI cfa resource type id
+ *
+ * [out] resource_str
+ * Pointer to a string
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_resource_str)(struct tf *tfp,
+ uint16_t resource_id,
+ const char **resource_str);
+
/**
* Retrieves the WC TCAM slice information that the device
* supports.
struct tf_ident_free_parms *parms);
/**
- * Allocation of a table type element.
+ * Search of an identifier element.
+ *
+ * This API search the specified identifier element from a
+ * device specific identifier shadow DB. The allocated element
+ * is returned.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to identifier search parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_search_ident)(struct tf *tfp,
+ struct tf_ident_search_parms *parms);
+
+ /**
+ * Retrieves the identifier resource info.
+ *
+ * This API retrieves the identifier resource info from the rm db.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to identifier info
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_ident_resc_info)(struct tf *tfp,
+ struct tf_identifier_resource_info *parms);
+
+ /**
+ * Get SRAM table information.
+ *
+ * Converts an internal RM allocated element offset to
+ * a user address and vice versa.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] type
+ * Truflow index table type, e.g. TF_TYPE_FULL_ACT_RECORD
+ *
+ * [in/out] base
+ * Pointer to the base address of the associated table type.
+ *
+ * [in/out] shift
+ * Pointer to any shift required for the associated table type.
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_tbl_info)(struct tf *tfp,
+ void *tbl_db,
+ enum tf_tbl_type type,
+ uint16_t *base,
+ uint16_t *shift);
+
+ /**
+ * Allocation of an index table type element.
*
* This API allocates the specified table type element from a
* device specific table type DB. The allocated element is
int (*tf_dev_get_bulk_tbl)(struct tf *tfp,
struct tf_tbl_get_bulk_parms *parms);
+ /**
+ * Gets the increment value to add to the shared session resource
+ * start offset by for each count in the "stride"
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to get shared tbl increment parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_shared_tbl_increment)(struct tf *tfp,
+ struct tf_get_shared_tbl_increment_parms *parms);
+
+ /**
+ * Retrieves the table resource info.
+ *
+ * This API retrieves the table resource info from the rm db.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to tbl info
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_tbl_resc_info)(struct tf *tfp,
+ struct tf_tbl_resource_info *parms);
+
/**
* Allocation of a tcam element.
*
int (*tf_dev_get_tcam)(struct tf *tfp,
struct tf_tcam_get_parms *parms);
+#ifdef TF_TCAM_SHARED
+ /**
+ * Move TCAM shared entries
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_move_tcam)(struct tf *tfp,
+ struct tf_move_tcam_shared_entries_parms *parms);
+
+ /**
+ * Move TCAM shared entries
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_clear_tcam)(struct tf *tfp,
+ struct tf_clear_tcam_shared_entries_parms *parms);
+
+#endif /* TF_TCAM_SHARED */
+
+ /**
+ * Retrieves the tcam resource info.
+ *
+ * This API retrieves the tcam resource info from the rm db.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to tcam info
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_tcam_resc_info)(struct tf *tfp,
+ struct tf_tcam_resource_info *parms);
+
/**
* Insert EM hash entry API
*
int (*tf_dev_delete_int_em_entry)(struct tf *tfp,
struct tf_delete_em_entry_parms *parms);
+ /**
+ * Move EM hash entry API
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to E/EM move parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_move_int_em_entry)(struct tf *tfp,
+ struct tf_move_em_entry_parms *parms);
+
/**
* Insert EEM hash entry API
*
int (*tf_dev_delete_ext_em_entry)(struct tf *tfp,
struct tf_delete_em_entry_parms *parms);
+ /**
+ * Retrieves the em resource info.
+ *
+ * This API retrieves the em resource info from the rm db.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to em info
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_em_resc_info)(struct tf *tfp,
+ struct tf_em_resource_info *parms);
+
+ /**
+ * Move EEM hash entry API
+ *
+ * Pointer to E/EM move parameters
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to em info
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_move_ext_em_entry)(struct tf *tfp,
+ struct tf_move_em_entry_parms *parms);
+
/**
* Allocate EEM table scope
*
*/
int (*tf_dev_alloc_tbl_scope)(struct tf *tfp,
struct tf_alloc_tbl_scope_parms *parms);
+ /**
+ * Map EEM parif
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] pf
+ * PF associated with the table scope
+ *
+ * [in] parif_bitmask
+ * Bitmask of PARIFs to enable
+ *
+ * [in/out] pointer to the parif_2_pf data to be updated
+ *
+ * [in/out] pointer to the parif_2_pf mask to be updated
+ *
+ * [in] sz_in_bytes - number of bytes to be written
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_map_parif)(struct tf *tfp,
+ uint16_t parif_bitmask,
+ uint16_t pf,
+ uint8_t *data,
+ uint8_t *mask,
+ uint16_t sz_in_bytes);
+ /**
+ * Map EEM table scope
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to table scope map parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_map_tbl_scope)(struct tf *tfp,
+ struct tf_map_tbl_scope_parms *parms);
/**
* Free EEM table scope
*/
int (*tf_dev_free_tbl_scope)(struct tf *tfp,
struct tf_free_tbl_scope_parms *parms);
+
+ /**
+ * Sets the specified interface table type element.
+ *
+ * This API sets the specified element data by invoking the
+ * firmware.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to interface table set parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_set_if_tbl)(struct tf *tfp,
+ struct tf_if_tbl_set_parms *parms);
+
+ /**
+ * Retrieves the specified interface table type element.
+ *
+ * This API retrieves the specified element data by invoking the
+ * firmware.
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to table get parameters
+ *
+ * Returns
+ * - (0) if successful.
+ * - (-EINVAL) on failure.
+ */
+ int (*tf_dev_get_if_tbl)(struct tf *tfp,
+ struct tf_if_tbl_get_parms *parms);
+
+ /**
+ * Update global cfg
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to global cfg parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_set_global_cfg)(struct tf *tfp,
+ struct tf_global_cfg_parms *parms);
+
+ /**
+ * Get global cfg
+ *
+ * [in] tfp
+ * Pointer to TF handle
+ *
+ * [in] parms
+ * Pointer to global cfg parameters
+ *
+ * returns:
+ * 0 - Success
+ * -EINVAL - Error
+ */
+ int (*tf_dev_get_global_cfg)(struct tf *tfp,
+ struct tf_global_cfg_parms *parms);
+
+ /**
+ * Get mailbox
+ *
+ * returns:
+ * mailbox
+ */
+ int (*tf_dev_get_mailbox)(void);
+
+ /**
+ * Convert length in bit to length in byte and align to word.
+ * The word length depends on device type.
+ *
+ * [in] size
+ * Size in bit
+ *
+ * Returns
+ * Size in byte
+ */
+ int (*tf_dev_word_align)(uint16_t size);
+
+ /**
+ * Hash key using crc32 and lookup3
+ *
+ * [in] key_data
+ * Pointer to key
+ *
+ * [in] bitlen
+ * Number of key bits
+ *
+ * Returns
+ * Hashes
+ */
+ uint64_t (*tf_dev_cfa_key_hash)(uint64_t *key_data,
+ uint16_t bitlen);
};
/**
*/
extern const struct tf_dev_ops tf_dev_ops_p4_init;
extern const struct tf_dev_ops tf_dev_ops_p4;
+extern const struct tf_dev_ops tf_dev_ops_p58_init;
+extern const struct tf_dev_ops tf_dev_ops_p58;
#endif /* _TF_DEVICE_H_ */