/** Maximum length of a match string */
#define MRVL_MATCH_LEN 16
+#define MRVL_BURST_SIZE 64
+
/** PMD-specific definition of a flow rule handle. */
struct mrvl_mtr;
struct rte_flow {
struct pp2_cls_tbl_rule rule;
struct pp2_cls_cos_desc cos;
struct pp2_cls_tbl_action action;
+ uint8_t next_udf_id;
};
struct mrvl_mtr_profile {
uint8_t uc_mc_flushed;
uint8_t isolated;
uint8_t multiseg;
+ uint16_t max_mtu;
+ uint8_t flow_ctrl;
+ struct rte_eth_fc_conf fc_conf;
struct pp2_ppio_params ppio_params;
struct pp2_cls_qos_tbl_params qos_tbl_params;
LIST_HEAD(shaper_profiles, mrvl_tm_shaper_profile) shaper_profiles;
LIST_HEAD(nodes, mrvl_tm_node) nodes;
uint64_t rate_max;
+
+ uint8_t forward_bad_frames;
+ uint32_t fill_bpool_buffs;
+
+ uint8_t configured; /** indicates if device has been configured */
};
/** Flow operations forward declaration. */
rte_log(RTE_LOG_ ## level, mrvl_logtype, "%s(): " fmt "\n", \
__func__, ##args)
+extern struct pp2_bpool *dummy_pool[PP2_NUM_PKT_PROC];
+
+/**
+ * Convert string to uint32_t with extra checks for result correctness.
+ *
+ * @param string String to convert.
+ * @param val Conversion result.
+ * @returns 0 in case of success, negative value otherwise.
+ */
+static int
+get_val_securely(const char *string, uint32_t *val)
+{
+ char *endptr;
+ size_t len = strlen(string);
+
+ if (len == 0)
+ return -1;
+
+ errno = 0;
+ *val = strtoul(string, &endptr, 0);
+ if (errno != 0 || RTE_PTR_DIFF(endptr, string) != len)
+ return -2;
+
+ return 0;
+}
+
+static int
+get_val_securely8(const char *string, uint32_t base, uint8_t *val)
+{
+ char *endptr;
+ size_t len = strlen(string);
+
+ if (len == 0)
+ return -1;
+
+ errno = 0;
+ *val = (uint8_t)strtoul(string, &endptr, base);
+ if (errno != 0 || RTE_PTR_DIFF(endptr, string) != len)
+ return -2;
+
+ return 0;
+}
+
#endif /* _MRVL_ETHDEV_H_ */