]> git.proxmox.com Git - ceph.git/blame - ceph/src/spdk/dpdk/test/test/test_meter.c
update download target update for octopus release
[ceph.git] / ceph / src / spdk / dpdk / test / test / test_meter.c
CommitLineData
11fdf7f2
TL
1/* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2010-2014 Intel Corporation
7c673cae
FG
3 */
4
5#include <stdlib.h>
6#include <stdio.h>
7#include <string.h>
8#include <stdint.h>
9#include <unistd.h>
10
11#include "test.h"
12
13#include <rte_cycles.h>
14#include <rte_meter.h>
15
16#define mlog(format, ...) do{\
17 printf("Line %d:",__LINE__);\
18 printf(format, ##__VA_ARGS__);\
19 printf("\n");\
20 }while(0);
21
22#define melog(format, ...) do{\
23 printf("Line %d:",__LINE__);\
24 printf(format, ##__VA_ARGS__);\
25 printf(" failed!\n");\
26 return -1;\
27 }while(0);
28
29#define TM_TEST_SRTCM_CIR_DF 46000000
30#define TM_TEST_SRTCM_CBS_DF 2048
31#define TM_TEST_SRTCM_EBS_DF 4096
32
33#define TM_TEST_TRTCM_CIR_DF 46000000
34#define TM_TEST_TRTCM_PIR_DF 69000000
35#define TM_TEST_TRTCM_CBS_DF 2048
36#define TM_TEST_TRTCM_PBS_DF 4096
37
38static struct rte_meter_srtcm_params sparams =
39 {.cir = TM_TEST_SRTCM_CIR_DF,
40 .cbs = TM_TEST_SRTCM_CBS_DF,
41 .ebs = TM_TEST_SRTCM_EBS_DF,};
42
43static struct rte_meter_trtcm_params tparams=
44 {.cir = TM_TEST_TRTCM_CIR_DF,
45 .pir = TM_TEST_TRTCM_PIR_DF,
46 .cbs = TM_TEST_TRTCM_CBS_DF,
47 .pbs = TM_TEST_TRTCM_PBS_DF,};
48
49/**
50 * functional test for rte_meter_srtcm_config
51 */
52static inline int
53tm_test_srtcm_config(void)
54{
55#define SRTCM_CFG_MSG "srtcm_config"
11fdf7f2 56 struct rte_meter_srtcm_profile sp;
7c673cae
FG
57 struct rte_meter_srtcm_params sparams1;
58
59 /* invalid parameter test */
11fdf7f2 60 if (rte_meter_srtcm_profile_config(NULL, NULL) == 0)
7c673cae 61 melog(SRTCM_CFG_MSG);
11fdf7f2 62 if (rte_meter_srtcm_profile_config(&sp, NULL) == 0)
7c673cae 63 melog(SRTCM_CFG_MSG);
11fdf7f2 64 if (rte_meter_srtcm_profile_config(NULL, &sparams) == 0)
7c673cae
FG
65 melog(SRTCM_CFG_MSG);
66
67 /* cbs and ebs can't both be zero */
68 sparams1 = sparams;
69 sparams1.cbs = 0;
70 sparams1.ebs = 0;
11fdf7f2 71 if (rte_meter_srtcm_profile_config(&sp, &sparams1) == 0)
7c673cae
FG
72 melog(SRTCM_CFG_MSG);
73
74 /* cir should never be 0 */
75 sparams1 = sparams;
76 sparams1.cir = 0;
11fdf7f2 77 if (rte_meter_srtcm_profile_config(&sp, &sparams1) == 0)
7c673cae
FG
78 melog(SRTCM_CFG_MSG);
79
80 /* one of ebs and cbs can be zero, should be successful */
81 sparams1 = sparams;
82 sparams1.ebs = 0;
11fdf7f2 83 if (rte_meter_srtcm_profile_config(&sp, &sparams1) != 0)
7c673cae
FG
84 melog(SRTCM_CFG_MSG);
85
86 sparams1 = sparams;
87 sparams1.cbs = 0;
11fdf7f2 88 if (rte_meter_srtcm_profile_config(&sp, &sparams1) != 0)
7c673cae
FG
89 melog(SRTCM_CFG_MSG);
90
91 /* usual parameter, should be successful */
11fdf7f2 92 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
7c673cae
FG
93 melog(SRTCM_CFG_MSG);
94
95 return 0;
96
97}
98
99/**
100 * functional test for rte_meter_trtcm_config
101 */
102static inline int
103tm_test_trtcm_config(void)
104{
11fdf7f2 105 struct rte_meter_trtcm_profile tp;
7c673cae
FG
106 struct rte_meter_trtcm_params tparams1;
107#define TRTCM_CFG_MSG "trtcm_config"
108
109 /* invalid parameter test */
11fdf7f2 110 if (rte_meter_trtcm_profile_config(NULL, NULL) == 0)
7c673cae 111 melog(TRTCM_CFG_MSG);
11fdf7f2 112 if (rte_meter_trtcm_profile_config(&tp, NULL) == 0)
7c673cae 113 melog(TRTCM_CFG_MSG);
11fdf7f2 114 if (rte_meter_trtcm_profile_config(NULL, &tparams) == 0)
7c673cae
FG
115 melog(TRTCM_CFG_MSG);
116
117 /* cir, cbs, pir and pbs never be zero */
118 tparams1 = tparams;
119 tparams1.cir = 0;
11fdf7f2 120 if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
7c673cae
FG
121 melog(TRTCM_CFG_MSG);
122
123 tparams1 = tparams;
124 tparams1.cbs = 0;
11fdf7f2 125 if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
7c673cae
FG
126 melog(TRTCM_CFG_MSG);
127
128 tparams1 = tparams;
129 tparams1.pbs = 0;
11fdf7f2 130 if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
7c673cae
FG
131 melog(TRTCM_CFG_MSG);
132
133 tparams1 = tparams;
134 tparams1.pir = 0;
11fdf7f2 135 if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
7c673cae
FG
136 melog(TRTCM_CFG_MSG);
137
138 /* pir should be greater or equal to cir */
139 tparams1 = tparams;
140 tparams1.pir = tparams1.cir - 1;
11fdf7f2 141 if (rte_meter_trtcm_profile_config(&tp, &tparams1) == 0)
7c673cae
FG
142 melog(TRTCM_CFG_MSG" pir < cir test");
143
144 /* usual parameter, should be successful */
11fdf7f2 145 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
7c673cae
FG
146 melog(TRTCM_CFG_MSG);
147
148 return 0;
149}
150
151/**
152 * functional test for rte_meter_srtcm_color_blind_check
153 */
154static inline int
155tm_test_srtcm_color_blind_check(void)
156{
157#define SRTCM_BLIND_CHECK_MSG "srtcm_blind_check"
11fdf7f2 158 struct rte_meter_srtcm_profile sp;
7c673cae
FG
159 struct rte_meter_srtcm sm;
160 uint64_t time;
161 uint64_t hz = rte_get_tsc_hz();
162
163 /* Test green */
11fdf7f2
TL
164 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
165 melog(SRTCM_BLIND_CHECK_MSG);
166 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
167 melog(SRTCM_BLIND_CHECK_MSG);
168 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
169 if (rte_meter_srtcm_color_blind_check(
170 &sm, &sp, time, TM_TEST_SRTCM_CBS_DF - 1)
7c673cae
FG
171 != e_RTE_METER_GREEN)
172 melog(SRTCM_BLIND_CHECK_MSG" GREEN");
173
174 /* Test yellow */
11fdf7f2
TL
175 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
176 melog(SRTCM_BLIND_CHECK_MSG);
177 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
178 melog(SRTCM_BLIND_CHECK_MSG);
179 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
180 if (rte_meter_srtcm_color_blind_check(
181 &sm, &sp, time, TM_TEST_SRTCM_CBS_DF + 1)
7c673cae
FG
182 != e_RTE_METER_YELLOW)
183 melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
184
11fdf7f2
TL
185 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
186 melog(SRTCM_BLIND_CHECK_MSG);
187 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
188 melog(SRTCM_BLIND_CHECK_MSG);
189 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
190 if (rte_meter_srtcm_color_blind_check(
191 &sm, &sp, time, (uint32_t)sp.ebs - 1) != e_RTE_METER_YELLOW)
7c673cae
FG
192 melog(SRTCM_BLIND_CHECK_MSG" YELLOW");
193
194 /* Test red */
11fdf7f2
TL
195 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
196 melog(SRTCM_BLIND_CHECK_MSG);
197 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
198 melog(SRTCM_BLIND_CHECK_MSG);
199 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
200 if (rte_meter_srtcm_color_blind_check(
201 &sm, &sp, time, TM_TEST_SRTCM_EBS_DF + 1)
7c673cae
FG
202 != e_RTE_METER_RED)
203 melog(SRTCM_BLIND_CHECK_MSG" RED");
204
205 return 0;
206
207}
208
209/**
210 * functional test for rte_meter_trtcm_color_blind_check
211 */
212static inline int
213tm_test_trtcm_color_blind_check(void)
214{
215#define TRTCM_BLIND_CHECK_MSG "trtcm_blind_check"
216
217 uint64_t time;
11fdf7f2 218 struct rte_meter_trtcm_profile tp;
7c673cae
FG
219 struct rte_meter_trtcm tm;
220 uint64_t hz = rte_get_tsc_hz();
221
222 /* Test green */
11fdf7f2
TL
223 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
224 melog(TRTCM_BLIND_CHECK_MSG);
225 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
226 melog(TRTCM_BLIND_CHECK_MSG);
227 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
228 if (rte_meter_trtcm_color_blind_check(
229 &tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1)
7c673cae
FG
230 != e_RTE_METER_GREEN)
231 melog(TRTCM_BLIND_CHECK_MSG" GREEN");
232
233 /* Test yellow */
11fdf7f2
TL
234 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
235 melog(TRTCM_BLIND_CHECK_MSG);
236 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
237 melog(TRTCM_BLIND_CHECK_MSG);
238 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
239 if (rte_meter_trtcm_color_blind_check(
240 &tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1)
7c673cae
FG
241 != e_RTE_METER_YELLOW)
242 melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
243
11fdf7f2
TL
244 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
245 melog(TRTCM_BLIND_CHECK_MSG);
246 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
247 melog(TRTCM_BLIND_CHECK_MSG);
248 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
249 if (rte_meter_trtcm_color_blind_check(
250 &tm, &tp, time, TM_TEST_TRTCM_PBS_DF - 1)
7c673cae
FG
251 != e_RTE_METER_YELLOW)
252 melog(TRTCM_BLIND_CHECK_MSG" YELLOW");
253
254 /* Test red */
11fdf7f2
TL
255 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
256 melog(TRTCM_BLIND_CHECK_MSG);
257 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
258 melog(TRTCM_BLIND_CHECK_MSG);
259 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
260 if (rte_meter_trtcm_color_blind_check(
261 &tm, &tp, time, TM_TEST_TRTCM_PBS_DF + 1)
7c673cae
FG
262 != e_RTE_METER_RED)
263 melog(TRTCM_BLIND_CHECK_MSG" RED");
264
265 return 0;
266}
267
268
269/**
270 * @in[4] : the flags packets carries.
271 * @in[4] : the flags function expect to return.
272 * It will do blind check at the time of 1 second from beginning.
273 * At the time, it will use packets length of cbs -1, cbs + 1,
274 * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
275 * aware check, expect flag out[0], out[1], out[2] and out[3]
276 */
277
278static inline int
279tm_test_srtcm_aware_check
280(enum rte_meter_color in[4], enum rte_meter_color out[4])
281{
282#define SRTCM_AWARE_CHECK_MSG "srtcm_aware_check"
11fdf7f2 283 struct rte_meter_srtcm_profile sp;
7c673cae
FG
284 struct rte_meter_srtcm sm;
285 uint64_t time;
286 uint64_t hz = rte_get_tsc_hz();
287
11fdf7f2
TL
288 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
289 melog(SRTCM_AWARE_CHECK_MSG);
290 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
291 melog(SRTCM_AWARE_CHECK_MSG);
292 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
293 if (rte_meter_srtcm_color_aware_check(
294 &sm, &sp, time, TM_TEST_SRTCM_CBS_DF - 1, in[0]) != out[0])
7c673cae
FG
295 melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
296
11fdf7f2
TL
297 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
298 melog(SRTCM_AWARE_CHECK_MSG);
299 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
300 melog(SRTCM_AWARE_CHECK_MSG);
301 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
302 if (rte_meter_srtcm_color_aware_check(
303 &sm, &sp, time, TM_TEST_SRTCM_CBS_DF + 1, in[1]) != out[1])
7c673cae
FG
304 melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
305
11fdf7f2
TL
306 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
307 melog(SRTCM_AWARE_CHECK_MSG);
308 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
309 melog(SRTCM_AWARE_CHECK_MSG);
310 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
311 if (rte_meter_srtcm_color_aware_check(
312 &sm, &sp, time, TM_TEST_SRTCM_EBS_DF - 1, in[2]) != out[2])
7c673cae
FG
313 melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
314
11fdf7f2
TL
315 if (rte_meter_srtcm_profile_config(&sp, &sparams) != 0)
316 melog(SRTCM_AWARE_CHECK_MSG);
317 if (rte_meter_srtcm_config(&sm, &sp) != 0)
7c673cae
FG
318 melog(SRTCM_AWARE_CHECK_MSG);
319 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
320 if (rte_meter_srtcm_color_aware_check(
321 &sm, &sp, time, TM_TEST_SRTCM_EBS_DF + 1, in[3]) != out[3])
7c673cae
FG
322 melog(SRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
323
324 return 0;
325}
326
327
328/**
329 * functional test for rte_meter_srtcm_color_aware_check
330 */
331static inline int
332tm_test_srtcm_color_aware_check(void)
333{
334 enum rte_meter_color in[4], out[4];
335
336 /**
337 * test 4 points that will produce green, yellow, yellow, red flag
338 * if using blind check
339 */
340
341 /* previouly have a green, test points should keep unchanged */
342 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_GREEN;
343 out[0] = e_RTE_METER_GREEN;
344 out[1] = e_RTE_METER_YELLOW;
345 out[2] = e_RTE_METER_YELLOW;
346 out[3] = e_RTE_METER_RED;
11fdf7f2 347 if (tm_test_srtcm_aware_check(in, out) != 0)
7c673cae
FG
348 return -1;
349
350 /**
351 * previously have a yellow, green & yellow = yellow
352 * yellow & red = red
353 */
354 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_YELLOW;
355 out[0] = e_RTE_METER_YELLOW;
356 out[1] = e_RTE_METER_YELLOW;
357 out[2] = e_RTE_METER_YELLOW;
358 out[3] = e_RTE_METER_RED;
11fdf7f2 359 if (tm_test_srtcm_aware_check(in, out) != 0)
7c673cae
FG
360 return -1;
361
362 /**
363 * previously have a red, red & green = red
364 * red & yellow = red
365 */
366 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_RED;
367 out[0] = e_RTE_METER_RED;
368 out[1] = e_RTE_METER_RED;
369 out[2] = e_RTE_METER_RED;
370 out[3] = e_RTE_METER_RED;
11fdf7f2 371 if (tm_test_srtcm_aware_check(in, out) != 0)
7c673cae
FG
372 return -1;
373
374 return 0;
375}
376
377/**
378 * @in[4] : the flags packets carries.
379 * @in[4] : the flags function expect to return.
380 * It will do blind check at the time of 1 second from beginning.
381 * At the time, it will use packets length of cbs -1, cbs + 1,
382 * ebs -1 and ebs +1 with flag in[0], in[1], in[2] and in[3] to do
383 * aware check, expect flag out[0], out[1], out[2] and out[3]
384 */
385static inline int
386tm_test_trtcm_aware_check
387(enum rte_meter_color in[4], enum rte_meter_color out[4])
388{
389#define TRTCM_AWARE_CHECK_MSG "trtcm_aware_check"
11fdf7f2 390 struct rte_meter_trtcm_profile tp;
7c673cae
FG
391 struct rte_meter_trtcm tm;
392 uint64_t time;
393 uint64_t hz = rte_get_tsc_hz();
394
11fdf7f2
TL
395 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
396 melog(TRTCM_AWARE_CHECK_MSG);
397 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
398 melog(TRTCM_AWARE_CHECK_MSG);
399 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
400 if (rte_meter_trtcm_color_aware_check(
401 &tm, &tp, time, TM_TEST_TRTCM_CBS_DF - 1, in[0]) != out[0])
7c673cae
FG
402 melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[0], out[0]);
403
11fdf7f2
TL
404 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
405 melog(TRTCM_AWARE_CHECK_MSG);
406 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
407 melog(TRTCM_AWARE_CHECK_MSG);
408 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
409 if (rte_meter_trtcm_color_aware_check(
410 &tm, &tp, time, TM_TEST_TRTCM_CBS_DF + 1, in[1]) != out[1])
7c673cae
FG
411 melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[1], out[1]);
412
11fdf7f2
TL
413 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
414 melog(TRTCM_AWARE_CHECK_MSG);
415 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
416 melog(TRTCM_AWARE_CHECK_MSG);
417 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
418 if (rte_meter_trtcm_color_aware_check(
419 &tm, &tp, time, TM_TEST_TRTCM_PBS_DF - 1, in[2]) != out[2])
7c673cae
FG
420 melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[2], out[2]);
421
11fdf7f2
TL
422 if (rte_meter_trtcm_profile_config(&tp, &tparams) != 0)
423 melog(TRTCM_AWARE_CHECK_MSG);
424 if (rte_meter_trtcm_config(&tm, &tp) != 0)
7c673cae
FG
425 melog(TRTCM_AWARE_CHECK_MSG);
426 time = rte_get_tsc_cycles() + hz;
11fdf7f2
TL
427 if (rte_meter_trtcm_color_aware_check(
428 &tm, &tp, time, TM_TEST_TRTCM_PBS_DF + 1, in[3]) != out[3])
7c673cae
FG
429 melog(TRTCM_AWARE_CHECK_MSG" %u:%u", in[3], out[3]);
430
431 return 0;
432}
433
434
435/**
436 * functional test for rte_meter_trtcm_color_aware_check
437 */
438
439static inline int
440tm_test_trtcm_color_aware_check(void)
441{
442 enum rte_meter_color in[4], out[4];
443 /**
444 * test 4 points that will produce green, yellow, yellow, red flag
445 * if using blind check
446 */
447
448 /* previouly have a green, test points should keep unchanged */
449 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_GREEN;
450 out[0] = e_RTE_METER_GREEN;
451 out[1] = e_RTE_METER_YELLOW;
452 out[2] = e_RTE_METER_YELLOW;
453 out[3] = e_RTE_METER_RED;
11fdf7f2 454 if (tm_test_trtcm_aware_check(in, out) != 0)
7c673cae
FG
455 return -1;
456
457 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_YELLOW;
458 out[0] = e_RTE_METER_YELLOW;
459 out[1] = e_RTE_METER_YELLOW;
460 out[2] = e_RTE_METER_YELLOW;
461 out[3] = e_RTE_METER_RED;
11fdf7f2 462 if (tm_test_trtcm_aware_check(in, out) != 0)
7c673cae
FG
463 return -1;
464
465 in[0] = in[1] = in[2] = in[3] = e_RTE_METER_RED;
466 out[0] = e_RTE_METER_RED;
467 out[1] = e_RTE_METER_RED;
468 out[2] = e_RTE_METER_RED;
469 out[3] = e_RTE_METER_RED;
11fdf7f2 470 if (tm_test_trtcm_aware_check(in, out) != 0)
7c673cae
FG
471 return -1;
472
473 return 0;
474}
475
476/**
477 * test main entrance for library meter
478 */
479static int
480test_meter(void)
481{
11fdf7f2 482 if (tm_test_srtcm_config() != 0)
7c673cae
FG
483 return -1;
484
11fdf7f2 485 if (tm_test_trtcm_config() != 0)
7c673cae
FG
486 return -1;
487
11fdf7f2 488 if (tm_test_srtcm_color_blind_check() != 0)
7c673cae
FG
489 return -1;
490
11fdf7f2 491 if (tm_test_trtcm_color_blind_check() != 0)
7c673cae
FG
492 return -1;
493
11fdf7f2 494 if (tm_test_srtcm_color_aware_check() != 0)
7c673cae
FG
495 return -1;
496
11fdf7f2 497 if (tm_test_trtcm_color_aware_check() != 0)
7c673cae
FG
498 return -1;
499
500 return 0;
501
502}
503
504REGISTER_TEST_COMMAND(meter_autotest, test_meter);