1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * KUnit tests for channel helper functions
4 *
5 * Copyright (C) 2024 Intel Corporation
6 */
7 #include <net/mac80211.h>
8 #include "../mvm.h"
9 #include <kunit/test.h>
10
11 MODULE_IMPORT_NS(EXPORTED_FOR_KUNIT_TESTING);
12
13 static const struct acs_average_db_case {
14 const char *desc;
15 u8 neg_dbm[22];
16 s8 result;
17 } acs_average_db_cases[] = {
18 {
19 .desc = "Smallest possible value, all filled",
20 .neg_dbm = {
21 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
22 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
23 128, 128
24 },
25 .result = -128,
26 },
27 {
28 .desc = "Biggest possible value, all filled",
29 .neg_dbm = {
30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
31 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
32 0, 0,
33 },
34 .result = 0,
35 },
36 {
37 .desc = "Smallest possible value, partial filled",
38 .neg_dbm = {
39 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
40 0xff, 0xff, 0xff, 0xff, 0xff,
41 0xff, 0xff, 0xff, 0xff, 0xff,
42 0xff, 0xff,
43 },
44 .result = -128,
45 },
46 {
47 .desc = "Biggest possible value, partial filled",
48 .neg_dbm = {
49 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
50 0xff, 0xff, 0xff, 0xff, 0xff,
51 0xff, 0xff, 0xff, 0xff, 0xff,
52 0xff, 0xff,
53 },
54 .result = 0,
55 },
56 {
57 .desc = "Adding -80dBm to -75dBm until it is still rounded to -79dBm",
58 .neg_dbm = {
59 75, 80, 80, 80, 80, 80, 80, 80, 80, 80,
60 80, 80, 80, 80, 80, 80, 80, 0xff, 0xff, 0xff,
61 0xff, 0xff,
62 },
63 .result = -79,
64 },
65 {
66 .desc = "Adding -80dBm to -75dBm until it is just rounded to -80dBm",
67 .neg_dbm = {
68 75, 80, 80, 80, 80, 80, 80, 80, 80, 80,
69 80, 80, 80, 80, 80, 80, 80, 80, 0xff, 0xff,
70 0xff, 0xff,
71 },
72 .result = -80,
73 },
74 };
75
KUNIT_ARRAY_PARAM_DESC(acs_average_db,acs_average_db_cases,desc)76 KUNIT_ARRAY_PARAM_DESC(acs_average_db, acs_average_db_cases, desc)
77
78 static void test_acs_average_db(struct kunit *test)
79 {
80 const struct acs_average_db_case *params = test->param_value;
81 struct iwl_umac_scan_channel_survey_notif notif;
82 int i;
83
84 /* Test the values in the given order */
85 for (i = 0; i < ARRAY_SIZE(params->neg_dbm); i++)
86 notif.noise[i] = params->neg_dbm[i];
87 KUNIT_ASSERT_EQ(test,
88 iwl_mvm_average_dbm_values(¬if),
89 params->result);
90
91 /* Test in reverse order */
92 for (i = 0; i < ARRAY_SIZE(params->neg_dbm); i++)
93 notif.noise[ARRAY_SIZE(params->neg_dbm) - i - 1] =
94 params->neg_dbm[i];
95 KUNIT_ASSERT_EQ(test,
96 iwl_mvm_average_dbm_values(¬if),
97 params->result);
98 }
99
100 static struct kunit_case acs_average_db_case[] = {
101 KUNIT_CASE_PARAM(test_acs_average_db, acs_average_db_gen_params),
102 {}
103 };
104
105 static struct kunit_suite acs_average_db = {
106 .name = "iwlmvm-acs-average-db",
107 .test_cases = acs_average_db_case,
108 };
109
110 kunit_test_suite(acs_average_db);
111