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(&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