common/cnxk: support NIX stats
[dpdk.git] / drivers / common / cnxk / roc_nix.h
index 83388ce..45aca83 100644 (file)
@@ -17,6 +17,11 @@ enum roc_nix_sq_max_sqe_sz {
        roc_nix_maxsqesz_w8 = NIX_MAXSQESZ_W8,
 };
 
+/* Range to adjust PTP frequency. Valid range is
+ * (-ROC_NIX_PTP_FREQ_ADJUST, ROC_NIX_PTP_FREQ_ADJUST)
+ */
+#define ROC_NIX_PTP_FREQ_ADJUST (1 << 9)
+
 /* NIX LF RX offload configuration flags.
  * These are input flags to roc_nix_lf_alloc:rx_cfg
  */
@@ -42,6 +47,49 @@ enum roc_nix_sq_max_sqe_sz {
 #define ROC_NIX_VWQE_MAX_SIZE_LOG2 11
 #define ROC_NIX_VWQE_MIN_SIZE_LOG2 2
 
+struct roc_nix_stats {
+       /* Rx */
+       uint64_t rx_octs;
+       uint64_t rx_ucast;
+       uint64_t rx_bcast;
+       uint64_t rx_mcast;
+       uint64_t rx_drop;
+       uint64_t rx_drop_octs;
+       uint64_t rx_fcs;
+       uint64_t rx_err;
+       uint64_t rx_drop_bcast;
+       uint64_t rx_drop_mcast;
+       uint64_t rx_drop_l3_bcast;
+       uint64_t rx_drop_l3_mcast;
+       /* Tx */
+       uint64_t tx_ucast;
+       uint64_t tx_bcast;
+       uint64_t tx_mcast;
+       uint64_t tx_drop;
+       uint64_t tx_octs;
+};
+
+struct roc_nix_stats_queue {
+       PLT_STD_C11
+       union {
+               struct {
+                       /* Rx */
+                       uint64_t rx_pkts;
+                       uint64_t rx_octs;
+                       uint64_t rx_drop_pkts;
+                       uint64_t rx_drop_octs;
+                       uint64_t rx_error_pkts;
+               };
+               struct {
+                       /* Tx */
+                       uint64_t tx_pkts;
+                       uint64_t tx_octs;
+                       uint64_t tx_drop_pkts;
+                       uint64_t tx_drop_octs;
+               };
+       };
+};
+
 struct roc_nix_rq {
        /* Input parameters */
        uint16_t qid;
@@ -232,6 +280,16 @@ int __roc_api roc_nix_rss_flowkey_set(struct roc_nix *roc_nix, uint8_t *alg_idx,
 int __roc_api roc_nix_rss_default_setup(struct roc_nix *roc_nix,
                                        uint32_t flowkey);
 
+/* Stats */
+int __roc_api roc_nix_stats_get(struct roc_nix *roc_nix,
+                               struct roc_nix_stats *stats);
+int __roc_api roc_nix_stats_reset(struct roc_nix *roc_nix);
+int __roc_api roc_nix_stats_queue_get(struct roc_nix *roc_nix, uint16_t qid,
+                                     bool is_rx,
+                                     struct roc_nix_stats_queue *qstats);
+int __roc_api roc_nix_stats_queue_reset(struct roc_nix *roc_nix, uint16_t qid,
+                                       bool is_rx);
+
 /* Queue */
 int __roc_api roc_nix_rq_init(struct roc_nix *roc_nix, struct roc_nix_rq *rq,
                              bool ena);
@@ -244,6 +302,17 @@ int __roc_api roc_nix_cq_fini(struct roc_nix_cq *cq);
 int __roc_api roc_nix_sq_init(struct roc_nix *roc_nix, struct roc_nix_sq *sq);
 int __roc_api roc_nix_sq_fini(struct roc_nix_sq *sq);
 
+/* PTP */
+int __roc_api roc_nix_ptp_rx_ena_dis(struct roc_nix *roc_nix, int enable);
+int __roc_api roc_nix_ptp_tx_ena_dis(struct roc_nix *roc_nix, int enable);
+int __roc_api roc_nix_ptp_clock_read(struct roc_nix *roc_nix, uint64_t *clock,
+                                    uint64_t *tsc, uint8_t is_pmu);
+int __roc_api roc_nix_ptp_sync_time_adjust(struct roc_nix *roc_nix,
+                                          int64_t delta);
+int __roc_api roc_nix_ptp_info_cb_register(struct roc_nix *roc_nix,
+                                          ptp_info_update_t ptp_update);
+void __roc_api roc_nix_ptp_info_cb_unregister(struct roc_nix *roc_nix);
+
 /* MCAST*/
 int __roc_api roc_nix_mcast_mcam_entry_alloc(struct roc_nix *roc_nix,
                                             uint16_t nb_entries,