net/cnxk: add cn9k segregated Tx functions
[dpdk.git] / drivers / event / cnxk / cnxk_tim_worker.c
index 717c53f..3ce9986 100644 (file)
@@ -86,10 +86,13 @@ cnxk_tim_timer_arm_burst(const struct rte_event_timer_adapter *adptr,
                }
        }
 
+       if (flags & CNXK_TIM_ENA_STATS)
+               __atomic_fetch_add(&tim_ring->arm_cnt, index, __ATOMIC_RELAXED);
+
        return index;
 }
 
-#define FP(_name, _f2, _f1, _flags)                                            \
+#define FP(_name, _f3, _f2, _f1, _flags)                                       \
        uint16_t __rte_noinline cnxk_tim_arm_burst_##_name(                    \
                const struct rte_event_timer_adapter *adptr,                   \
                struct rte_event_timer **tim, const uint16_t nb_timers)        \
@@ -138,10 +141,14 @@ cnxk_tim_timer_arm_tmo_brst(const struct rte_event_timer_adapter *adptr,
                        break;
        }
 
+       if (flags & CNXK_TIM_ENA_STATS)
+               __atomic_fetch_add(&tim_ring->arm_cnt, set_timers,
+                                  __ATOMIC_RELAXED);
+
        return set_timers;
 }
 
-#define FP(_name, _f1, _flags)                                                 \
+#define FP(_name, _f2, _f1, _flags)                                            \
        uint16_t __rte_noinline cnxk_tim_arm_tmo_tick_burst_##_name(           \
                const struct rte_event_timer_adapter *adptr,                   \
                struct rte_event_timer **tim, const uint64_t timeout_tick,     \
@@ -152,3 +159,33 @@ cnxk_tim_timer_arm_tmo_brst(const struct rte_event_timer_adapter *adptr,
        }
 TIM_ARM_TMO_FASTPATH_MODES
 #undef FP
+
+uint16_t
+cnxk_tim_timer_cancel_burst(const struct rte_event_timer_adapter *adptr,
+                           struct rte_event_timer **tim,
+                           const uint16_t nb_timers)
+{
+       uint16_t index;
+       int ret;
+
+       RTE_SET_USED(adptr);
+       rte_atomic_thread_fence(__ATOMIC_ACQUIRE);
+       for (index = 0; index < nb_timers; index++) {
+               if (tim[index]->state == RTE_EVENT_TIMER_CANCELED) {
+                       rte_errno = EALREADY;
+                       break;
+               }
+
+               if (tim[index]->state != RTE_EVENT_TIMER_ARMED) {
+                       rte_errno = EINVAL;
+                       break;
+               }
+               ret = cnxk_tim_rm_entry(tim[index]);
+               if (ret) {
+                       rte_errno = -ret;
+                       break;
+               }
+       }
+
+       return index;
+}