ソースを参照

qcacmn: Use meta table information to print INI values

The current CFG/INI code prints the cfg values by expanding
all the current INI items in the same function causing the
function size to increase substantially.

Use the CFG/INI meta table to iterate over the INI items
and print the INI values.

Change-Id: I79ff6023263bfe98bfd614c74b1fff0f6ee78fe0
CRs-Fixed: 2994756
Vivek 4 年 前
コミット
bc5590deaf
1 ファイル変更122 行追加78 行削除
  1. 122 78
      cfg/src/cfg.c

+ 122 - 78
cfg/src/cfg.c

@@ -47,6 +47,28 @@ struct cfg_value_store {
 	struct cfg_values values;
 };
 
+/**
+ * enum cfg_type - Enum for CFG/INI types
+ * @CFG_INT_ITEM: Integer CFG/INI
+ * @CFG_UINT_ITEM: Unsigned integer CFG/INI
+ * @CFG_BOOL_ITEM: Boolean CFG/INI
+ * @CFG_STRING_ITEM: String CFG/INI
+ * @CFG_MAC_ITEM: Mac address CFG/INI
+ * @CFG_IPV4_ITEM: IPV4 address CFG/INI
+ * @CFG_IPV6_ITEM: IPV6 address CFG/INI
+ * @CFG_MAX_ITEM: Max CFG type
+ */
+enum cfg_type {
+	CFG_INT_ITEM,
+	CFG_UINT_ITEM,
+	CFG_BOOL_ITEM,
+	CFG_STRING_ITEM,
+	CFG_MAC_ITEM,
+	CFG_IPV4_ITEM,
+	CFG_IPV6_ITEM,
+	CFG_MAX_ITEM,
+};
+
 /* define/populate dynamic metadata lookup table */
 
 /**
@@ -60,6 +82,7 @@ struct cfg_value_store {
 struct cfg_meta {
 	const char *name;
 	const uint32_t field_offset;
+	const enum cfg_type cfg_type;
 	void (*const item_handler)(struct cfg_value_store *store,
 				   const struct cfg_meta *meta,
 				   const char *value);
@@ -278,6 +301,7 @@ cfg_ipv6_item_handler(struct cfg_value_store *store,
 { \
 	.name = _name, \
 	.field_offset = qdf_offsetof(struct cfg_values, _id##_internal), \
+	.cfg_type = CFG_ ##_mtype ## _ITEM, \
 	.item_handler = cfg_ ## _mtype ## _item_handler, \
 	.min = _min, \
 	.max = _max, \
@@ -520,12 +544,13 @@ QDF_STATUS cfg_parse_to_global_store(const char *path)
 
 qdf_export_symbol(cfg_parse_to_global_store);
 
-
 static QDF_STATUS
 cfg_store_print(struct wlan_objmgr_psoc *psoc)
 {
 	struct cfg_value_store *store;
 	struct cfg_psoc_ctx *psoc_ctx;
+	void *offset;
+	uint32_t i;
 
 	cfg_enter();
 
@@ -537,34 +562,47 @@ cfg_store_print(struct wlan_objmgr_psoc *psoc)
 	if (!store)
 		return QDF_STATUS_E_FAILURE;
 
-#undef __CFG_INI_MAC
-#define __CFG_INI_MAC(id, mtype, ctype, name, desc, def...) \
-	cfg_nofl_debug("%s "QDF_MAC_ADDR_FMT, name, \
-	QDF_MAC_ADDR_REF((&store->values.id##_internal)->bytes));
-
-#undef __CFG_INI_IPV4
-#define __CFG_INI_IPV4(id, mtype, ctype, name, desc, def...) \
-	cfg_nofl_debug("%s %pI4", name, (&store->values.id##_internal)->bytes);
-
-#undef __CFG_INI_IPV6
-#define __CFG_INI_IPV6(id, mtype, ctype, name, desc, def...) \
-	cfg_nofl_debug("%s %pI6c", name, (&store->values.id##_internal)->bytes);
-
-#undef __CFG_INI
-#define __CFG_INI(id, mtype, ctype, name, min, max, fallback, desc, def...) \
-	cfg_nofl_debug("%s %d", name, *(ctype *)&store->values.id##_internal);
-
-#undef __CFG_INI_STRING
-#define __CFG_INI_STRING(id, mtype, ctype, name, min_len, max_len, ...) \
-	cfg_nofl_debug("%s %s", name, (char *)&store->values.id##_internal);
+	for (i = 0; i < QDF_ARRAY_SIZE(cfg_meta_lookup_table); i++) {
+		const struct cfg_meta *meta = &cfg_meta_lookup_table[i];
 
-	CFG_ALL
+		offset = cfg_value_ptr(store, meta);
 
-#undef __CFG_INI_MAC
-#undef __CFG_INI_IPV4
-#undef __CFG_INI_IPV6
-#undef __CFG_INI
-#undef __CFG_INI_STRING
+		switch (meta->cfg_type) {
+		case CFG_INT_ITEM:
+			cfg_nofl_debug("%pK %s %d", offset, meta->name,
+				       *((int32_t *)offset));
+			break;
+		case CFG_UINT_ITEM:
+			cfg_nofl_debug("%pK %s %d", offset, meta->name,
+				       *((uint32_t *)offset));
+			break;
+		case CFG_BOOL_ITEM:
+			cfg_nofl_debug("%pK %s %d", offset, meta->name,
+				       *((bool *)offset));
+			break;
+		case CFG_STRING_ITEM:
+			cfg_nofl_debug("%pK %s %s", offset, meta->name,
+				       (char *)offset);
+			break;
+		case CFG_MAC_ITEM:
+			cfg_nofl_debug("%pK %s " QDF_MAC_ADDR_FMT,
+				       offset, meta->name,
+				       QDF_MAC_ADDR_REF(offset));
+			break;
+		case CFG_IPV4_ITEM:
+			cfg_nofl_debug("%pK %s %pI4",
+				       offset, meta->name,
+				       offset);
+			break;
+		case CFG_IPV6_ITEM:
+			cfg_nofl_debug("%pK %s %pI6c",
+				       offset, meta->name,
+				       offset);
+			break;
+		default:
+			continue;
+		}
+	}
 
 	cfg_exit();
 	return QDF_STATUS_SUCCESS;
@@ -578,6 +616,8 @@ cfg_ini_config_print(struct wlan_objmgr_psoc *psoc, uint8_t *buf,
 	struct cfg_psoc_ctx *psoc_ctx;
 	ssize_t len;
 	ssize_t total_len = buflen;
+	uint32_t i;
+	void *offset;
 
 	cfg_enter();
 
@@ -589,59 +629,61 @@ cfg_ini_config_print(struct wlan_objmgr_psoc *psoc, uint8_t *buf,
 	if (!store)
 		return QDF_STATUS_E_FAILURE;
 
-#undef __CFG_INI_MAC
-#define __CFG_INI_MAC(id, mtype, ctype, name, desc, def...) \
-	do { \
-		len = qdf_scnprintf(buf, buflen, "%s "QDF_MAC_ADDR_FMT"\n", \
-			name, \
-			QDF_MAC_ADDR_REF((&store->values.id##_internal)->bytes)); \
-		buf += len; \
-		buflen -= len; \
-	} while (0);
-
-#undef __CFG_INI_IPV4
-#define __CFG_INI_IPV4(id, mtype, ctype, name, desc, def...) \
-	do { \
-		len = qdf_scnprintf(buf, buflen, "%s %pI4\n", name, \
-				    (&store->values.id##_internal)->bytes); \
-		buf += len; \
-		buflen -= len; \
-	} while (0);
-
-#undef __CFG_INI_IPV6
-#define __CFG_INI_IPV6(id, mtype, ctype, name, desc, def...) \
-	do { \
-		len = qdf_scnprintf(buf, buflen, "%s %pI6c\n", name, \
-				    (&store->values.id##_internal)->bytes); \
-		buf += len; \
-		buflen -= len; \
-	} while (0);
-
-#undef __CFG_INI
-#define __CFG_INI(id, mtype, ctype, name, min, max, fallback, desc, def...) \
-	do { \
-		len = qdf_scnprintf(buf, buflen, "%s %d\n", name, \
-				    *(ctype *)&store->values.id##_internal); \
-		buf += len; \
-		buflen -= len; \
-	} while (0);
-
-#undef __CFG_INI_STRING
-#define __CFG_INI_STRING(id, mtype, ctype, name, min_len, max_len, ...) \
-	do { \
-		len = qdf_scnprintf(buf, buflen, "%s %s\n", name, \
-				    (char *)&store->values.id##_internal); \
-		buf += len; \
-		buflen -= len; \
-	} while (0);
+	for (i = 0; i < QDF_ARRAY_SIZE(cfg_meta_lookup_table); i++) {
+		const struct cfg_meta *meta = &cfg_meta_lookup_table[i];
 
-	CFG_ALL
+		offset = cfg_value_ptr(store, meta);
 
-#undef __CFG_INI_MAC
-#undef __CFG_INI_IPV4
-#undef __CFG_INI_IPV6
-#undef __CFG_INI
-#undef __CFG_INI_STRING
+		switch (meta->cfg_type) {
+		case CFG_INT_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %d\n", meta->name,
+					    *((int32_t *)offset));
+			buf += len;
+			break;
+		case CFG_UINT_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %d\n", meta->name,
+					    *((uint32_t *)offset));
+			buf += len;
+			buflen -= len;
+			break;
+		case CFG_BOOL_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %d\n", meta->name,
+					    *((bool *)offset));
+			buf += len;
+			buflen -= len;
+			break;
+		case CFG_STRING_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %s\n", meta->name,
+					    (char *)offset);
+			buf += len;
+			buflen -= len;
+			break;
+		case CFG_MAC_ITEM:
+			len = qdf_scnprintf(buf, buflen,
+					    "%s " QDF_MAC_ADDR_FMT "\n",
+					    meta->name,
+					    QDF_MAC_ADDR_REF(offset));
+			buf += len;
+			buflen -= len;
+			break;
+		case CFG_IPV4_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %pI4\n",
+					    meta->name,
+					    offset);
+			buf += len;
+			buflen -= len;
+			break;
+		case CFG_IPV6_ITEM:
+			len = qdf_scnprintf(buf, buflen, "%s %pI6c\n",
+					    meta->name,
+					    offset);
+			buf += len;
+			buflen -= len;
+			break;
+		default:
+			continue;
+		}
+	}
 
 	*plen = total_len - buflen;
 	cfg_exit();
@@ -654,6 +696,8 @@ QDF_STATUS ucfg_cfg_store_print(struct wlan_objmgr_psoc *psoc)
 	return cfg_store_print(psoc);
 }
 
+qdf_export_symbol(ucfg_cfg_store_print);
+
 QDF_STATUS ucfg_cfg_ini_config_print(struct wlan_objmgr_psoc *psoc,
 				     uint8_t *buf, ssize_t *plen,
 				     ssize_t buflen)