]> git.proxmox.com Git - ceph.git/blob - ceph/src/seastar/dpdk/drivers/event/opdl/opdl_evdev_xstats.c
import 15.2.0 Octopus source
[ceph.git] / ceph / src / seastar / dpdk / drivers / event / opdl / opdl_evdev_xstats.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2017 Intel Corporation
3 */
4
5 #include "opdl_evdev.h"
6 #include "opdl_log.h"
7
8 static const char * const port_xstat_str[] = {
9
10 "claim_pkts_requested",
11 "claim_pkts_granted",
12 "claim_non_empty",
13 "claim_empty",
14 "total_cycles",
15 };
16
17
18 void
19 opdl_xstats_init(struct rte_eventdev *dev)
20 {
21 uint32_t i, j;
22
23 struct opdl_evdev *device = opdl_pmd_priv(dev);
24
25 if (!device->do_validation)
26 return;
27
28 for (i = 0; i < device->max_port_nb; i++) {
29 struct opdl_port *port = &device->ports[i];
30
31 for (j = 0; j < max_num_port_xstat; j++) {
32 uint32_t index = (i * max_num_port_xstat) + j;
33
34 /* Name */
35 snprintf(device->port_xstat[index].stat.name,
36 sizeof(device->port_xstat[index].stat.name),
37 "port_%02u_%s", i, port_xstat_str[j]);
38
39 /* ID */
40 device->port_xstat[index].id = index;
41
42 /* Stats ptr */
43 device->port_xstat[index].value = &port->port_stat[j];
44 }
45 }
46 }
47
48 int
49 opdl_xstats_uninit(struct rte_eventdev *dev)
50 {
51 struct opdl_evdev *device = opdl_pmd_priv(dev);
52
53 if (!device->do_validation)
54 return 0;
55
56 memset(device->port_xstat,
57 0,
58 sizeof(device->port_xstat));
59
60 return 0;
61 }
62
63 int
64 opdl_xstats_get_names(const struct rte_eventdev *dev,
65 enum rte_event_dev_xstats_mode mode,
66 uint8_t queue_port_id,
67 struct rte_event_dev_xstats_name *xstats_names,
68 unsigned int *ids, unsigned int size)
69 {
70 struct opdl_evdev *device = opdl_pmd_priv(dev);
71
72 if (!device->do_validation)
73 return -ENOTSUP;
74
75 if (mode == RTE_EVENT_DEV_XSTATS_DEVICE ||
76 mode == RTE_EVENT_DEV_XSTATS_QUEUE)
77 return -EINVAL;
78
79 if (queue_port_id >= device->max_port_nb)
80 return -EINVAL;
81
82 if (size < max_num_port_xstat)
83 return max_num_port_xstat;
84
85 uint32_t port_idx = queue_port_id * max_num_port_xstat;
86
87 uint32_t j;
88 for (j = 0; j < max_num_port_xstat; j++) {
89
90 strcpy(xstats_names[j].name,
91 device->port_xstat[j + port_idx].stat.name);
92 ids[j] = device->port_xstat[j + port_idx].id;
93 }
94
95 return max_num_port_xstat;
96 }
97
98 int
99 opdl_xstats_get(const struct rte_eventdev *dev,
100 enum rte_event_dev_xstats_mode mode,
101 uint8_t queue_port_id,
102 const unsigned int ids[],
103 uint64_t values[], unsigned int n)
104 {
105 struct opdl_evdev *device = opdl_pmd_priv(dev);
106
107 if (!device->do_validation)
108 return -ENOTSUP;
109
110 if (mode == RTE_EVENT_DEV_XSTATS_DEVICE ||
111 mode == RTE_EVENT_DEV_XSTATS_QUEUE)
112 return -EINVAL;
113
114 if (queue_port_id >= device->max_port_nb)
115 return -EINVAL;
116
117 if (n > max_num_port_xstat)
118 return -EINVAL;
119
120 uint32_t p_start = queue_port_id * max_num_port_xstat;
121 uint32_t p_finish = p_start + max_num_port_xstat;
122
123 uint32_t i;
124 for (i = 0; i < n; i++) {
125 if (ids[i] < p_start || ids[i] >= p_finish)
126 return -EINVAL;
127
128 values[i] = *(device->port_xstat[ids[i]].value);
129 }
130
131 return n;
132 }
133
134 uint64_t
135 opdl_xstats_get_by_name(const struct rte_eventdev *dev,
136 const char *name, unsigned int *id)
137 {
138 struct opdl_evdev *device = opdl_pmd_priv(dev);
139
140 if (!device->do_validation)
141 return -ENOTSUP;
142
143 uint32_t max_index = device->max_port_nb * max_num_port_xstat;
144
145 uint32_t i;
146 for (i = 0; i < max_index; i++) {
147
148 if (strncmp(name,
149 device->port_xstat[i].stat.name,
150 RTE_EVENT_DEV_XSTATS_NAME_SIZE) == 0) {
151 if (id != NULL)
152 *id = i;
153 if (device->port_xstat[i].value)
154 return *(device->port_xstat[i].value);
155 break;
156 }
157 }
158 return -EINVAL;
159 }
160
161 int
162 opdl_xstats_reset(struct rte_eventdev *dev,
163 enum rte_event_dev_xstats_mode mode,
164 int16_t queue_port_id, const uint32_t ids[],
165 uint32_t nb_ids)
166 {
167 struct opdl_evdev *device = opdl_pmd_priv(dev);
168
169 if (!device->do_validation)
170 return -ENOTSUP;
171
172 RTE_SET_USED(dev);
173 RTE_SET_USED(mode);
174 RTE_SET_USED(queue_port_id);
175 RTE_SET_USED(ids);
176 RTE_SET_USED(nb_ids);
177
178 return -ENOTSUP;
179 }