xref: /linux/drivers/net/wireless/intel/iwlwifi/mvm/tests/scan.c (revision f14aa5ea415b8add245e976bfab96a12986c6843)
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 
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(&notif),
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(&notif),
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