Search Linux Wireless

[PATCH 05/10] qca-swiss-army-knife: simplify initval family handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The current code contain lots of duplication in order to
print initval arrays for different families. Refactor the
code to get rid of the duplications. This makes the code
a bit clener, and adding support for a new family will be
easier as well.

Signed-off-by: Gabor Juhos <juhosg@xxxxxxxxxxx>
---
 tools/initvals/initvals.c |  182 ++++++++++++++++++++------------------------
 1 files changed, 83 insertions(+), 99 deletions(-)

diff --git a/tools/initvals/initvals.c b/tools/initvals/initvals.c
index 4205b08..f28f2c9 100644
--- a/tools/initvals/initvals.c
+++ b/tools/initvals/initvals.c
@@ -13,6 +13,14 @@
 typedef uint32_t u32;
 typedef long long unsigned int u64;
 
+struct initval_family {
+	const char *name;
+	const char *header_def;
+	const char *header_ver;
+
+	void (*print)(bool check);
+};
+
 /*
  * compile with -DATHEROS if you want to use the upstream Atheros initvals
  * and have them handy.
@@ -744,115 +752,100 @@ static void ar9462_2p0_hw_print_initvals(bool check)
 	INI_PRINT(ar9462_common_mixed_rx_gain_table_2p0);
 }
 
-static void usage()
+#define FAM(_name, _def, _ver, _print) {	\
+	.name = _name,				\
+	.header_def = _def,			\
+	.header_ver = _ver,			\
+	.print = _print				\
+}
+
+struct initval_family families[] = {
+	FAM("ar5008"    , NULL      , NULL        , ar5008_hw_print_initvals),
+	FAM("ar9001"    , NULL      , NULL        , ar9001_hw_print_initvals),
+	FAM("ar9002"    , NULL      , NULL        , ar9002_hw_print_initvals),
+	FAM("ar9003-2p2", "9003_2P2", "AR9003 2.2", ar9003_2p2_hw_print_initvals),
+	FAM("ar9330-1p1", "9330_1P1", NULL        , ar9330_1p1_hw_print_initvals),
+	FAM("ar9330-1p2", "9330_1P2", NULL        , ar9330_1p2_hw_print_initvals),
+	FAM("ar9340"    , "9340"    , NULL        , ar9340_hw_print_initvals),
+	FAM("ar9485"    , "9485"    , "AR9485 1.0", ar9485_hw_print_initvals),
+	FAM("ar9580"    , "9580_1P0", "AR9580 1.0", ar9580_1p0_hw_print_initvals),
+	FAM("ar9462-2p0", "9462_2P0", "AR9462 2.0", ar9462_2p0_hw_print_initvals),
+};
+
+static struct initval_family *find_family(const char *name)
 {
-	printf("Usage: initvals [-w] [-f ar5008 | ar9001 | ar9002 | ar9003-2p2 | ar9330-1p1 | ar9330-1p2 | ar9462-2p0 | ar9485 | ar9580-1p0 ]\n");
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(families); i++) {
+		struct initval_family *fam;
+
+		fam = &families[i];
+		if (strncmp(fam->name, name, strlen(fam->name)) == 0)
+			return fam;
+	}
+
+	return NULL;
 }
 
-static void print_initvals_family(char *family, bool check)
+static void print_family(struct initval_family *family, bool check)
 {
-	if (!check)
+	if (!check) {
 		print_license();
 
-	if (strncmp(family, "ar5008", 6) == 0)
-		ar5008_hw_print_initvals(check);
-	else if (strncmp(family, "ar9001", 6) == 0)
-		ar9001_hw_print_initvals(check);
-	else if (strncmp(family, "ar9002", 6) == 0)
-		ar9002_hw_print_initvals(check);
-	else if (strncmp(family, "ar9003-2p2", 10) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9003_2P2_H\n");
-			printf("#define INITVALS_9003_2P2_H\n");
-			printf("\n");
-			printf("/* AR9003 2.2 */\n");
-			printf("\n");
-		}
-		ar9003_2p2_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9003_2P2_H */\n");
-	} else if (strncmp(family, "ar9330-1p1", 10) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9330_1P1_H\n");
-			printf("#define INITVALS_9330_1P1_H\n");
-			printf("\n");
-		}
-		ar9330_1p1_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9330_1P1_H */\n");
-	} else if (strncmp(family, "ar9330-1p2", 10) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9330_1P2_H\n");
-			printf("#define INITVALS_9330_1P2_H\n");
-			printf("\n");
-		}
-		ar9330_1p2_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9330_1P2_H */\n");
-	} else if (strncmp(family, "ar9340", 6) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9340_H\n");
-			printf("#define INITVALS_9340_H\n");
-			printf("\n");
-		}
-		ar9340_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9340_1P0_H */\n");
-	} else if (strncmp(family, "ar9485", 6) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9485_H\n");
-			printf("#define INITVALS_9485_H\n");
-			printf("\n");
-			printf("/* AR9485 1.0 */\n");
-			printf("\n");
-		}
-		ar9485_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9485_H */\n");
-	} else if (strncmp(family, "ar9580-1p0", 10) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9580_1P0_H\n");
-			printf("#define INITVALS_9580_1P0_H\n");
-			printf("\n");
-			printf("/* AR9580 1.0 */\n");
+		if (family->header_def) {
+			printf("#ifndef INITVALS_%s_H\n", family->header_def);
+			printf("#define INITVALS_%s_H\n", family->header_def);
 			printf("\n");
 		}
-		ar9580_1p0_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9580_1P0_H */\n");
-	} else if (strncmp(family, "ar9462-2p0", 10) == 0) {
-		if (!check) {
-			printf("#ifndef INITVALS_9462_2P0_H\n");
-			printf("#define INITVALS_9462_2P0_H\n");
-			printf("\n");
-			printf("/* AR9462 2.0 */\n");
+		if (family->header_ver) {
+			printf("/* %s */\n", family->header_ver);
 			printf("\n");
 		}
-		ar9462_2p0_hw_print_initvals(check);
-		if (!check)
-			printf("#endif /* INITVALS_9462_2P0_H */\n");
 	}
+
+	family->print(check);
+
+	if (!check && family->header_def)
+		printf("#endif /* INITVALS_%s_H */\n", family->header_def);
 }
 
-int main(int argc, char *argv[])
+static void usage()
 {
+	int i;
 
+	printf("Usage: initvals [-w] [-f <family>]\n");
+	printf("valid <family> values:\n");
+	for (i = 0; i < ARRAY_SIZE(families); i++)
+		printf("\t%s\n", families[i].name);
+}
+
+static void print_initvals_family(char *name, bool check)
+{
+	struct initval_family *family;
+
+	family = find_family(name);
+	if (!family)
+		return;
+
+	print_family(family, check);
+}
+
+static void print_initvals_family_all(bool check)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(families); i++)
+		print_family(&families[i], check);
+}
+
+int main(int argc, char *argv[])
+{
 	if (argc > 1) {
 		if (argc == 2) {
 			if (strncmp(argv[1], "-w", 2) != 0)
 				return -1;
 
-			ar5008_hw_print_initvals(false);
-			ar9001_hw_print_initvals(false);
-			ar9002_hw_print_initvals(false);
-			ar9003_2p2_hw_print_initvals(false);
-			ar9330_1p1_hw_print_initvals(false);
-			ar9330_1p2_hw_print_initvals(false);
-			ar9340_hw_print_initvals(false);
-			ar9485_hw_print_initvals(false);
-			ar9580_1p0_hw_print_initvals(false);
-			ar9462_2p0_hw_print_initvals(false);
-
+			print_initvals_family_all(false);
 			return 0;
 		}
 
@@ -874,16 +867,7 @@ int main(int argc, char *argv[])
 		return 0;
 	}
 
-	ar5008_hw_print_initvals(true);
-	ar9001_hw_print_initvals(true);
-	ar9002_hw_print_initvals(true);
-	ar9003_2p2_hw_print_initvals(true);
-	ar9330_1p1_hw_print_initvals(true);
-	ar9330_1p2_hw_print_initvals(true);
-	ar9340_hw_print_initvals(true);
-	ar9485_hw_print_initvals(true);
-	ar9580_1p0_hw_print_initvals(true);
-	ar9462_2p0_hw_print_initvals(true);
+	print_initvals_family_all(true);
 
 	return 0;
 }
-- 
1.7.2.1

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux