All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [PATCH v3 07/12] smbios: Drop the eos parameter
Date: Sun, 24 Jan 2021 10:43:26 -0700	[thread overview]
Message-ID: <20210124104327.v3.7.I6c28d884e356bafbb28c4fa3a1ce66b9fa761158@changeid> (raw)
In-Reply-To: <20210124174331.3462226-1-sjg@chromium.org>

We can store this in the context and avoid passing it to each function.
This makes it easier to follow and will also allow keeping track of the
end of the string table (in future patches).

Add an 'eos' field to the context and create a function to set it up.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v3:
- Fix comment for smbios_add_prop()
- Rename set_eos() to smbios_set_eos()

 lib/smbios.c | 60 +++++++++++++++++++++++++++++++---------------------
 1 file changed, 36 insertions(+), 24 deletions(-)

diff --git a/lib/smbios.c b/lib/smbios.c
index 4d2cb0f85e2..43628d67579 100644
--- a/lib/smbios.c
+++ b/lib/smbios.c
@@ -22,10 +22,13 @@
  *
  * @node:	node containing the information to write (ofnode_null() if none)
  * @dev:	sysinfo device to use (NULL if none)
+ * @eos:	end-of-string pointer for the table being processed. This is set
+ *		up when we start processing a table
  */
 struct smbios_ctx {
 	ofnode node;
 	struct udevice *dev;
+	char *eos;
 };
 
 /**
@@ -57,14 +60,15 @@ struct smbios_write_method {
  * This adds a string to the string area which is appended directly after
  * the formatted portion of an SMBIOS structure.
  *
- * @start:	string area start address
+ * @ctx:	SMBIOS context
  * @str:	string to add
  * @return:	string number in the string area (1 or more)
  */
-static int smbios_add_string(char *start, const char *str)
+static int smbios_add_string(struct smbios_ctx *ctx, const char *str)
 {
 	int i = 1;
-	char *p = start;
+	char *p = ctx->eos;
+
 	if (!*str)
 		str = "Unknown";
 
@@ -89,26 +93,28 @@ static int smbios_add_string(char *start, const char *str)
 /**
  * smbios_add_prop() - Add a property from the device tree
  *
- * @start:	string area start address
  * @ctx:	context for writing the tables
  * @prop:	property to write
  * @return 0 if not found, else SMBIOS string number (1 or more)
  */
-static int smbios_add_prop(char *start, struct smbios_ctx *ctx,
-			   const char *prop)
+static int smbios_add_prop(struct smbios_ctx *ctx, const char *prop)
 {
-
 	if (IS_ENABLED(CONFIG_OF_CONTROL)) {
 		const char *str;
 
 		str = ofnode_read_string(ctx->node, prop);
 		if (str)
-			return smbios_add_string(start, str);
+			return smbios_add_string(ctx, str);
 	}
 
 	return 0;
 }
 
+static void smbios_set_eos(struct smbios_ctx *ctx, char *eos)
+{
+	ctx->eos = eos;
+}
+
 /**
  * smbios_string_table_len() - compute the string area size
  *
@@ -140,9 +146,10 @@ static int smbios_write_type0(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type0));
 	fill_smbios_header(t, SMBIOS_BIOS_INFORMATION, len, handle);
-	t->vendor = smbios_add_string(t->eos, "U-Boot");
-	t->bios_ver = smbios_add_string(t->eos, PLAIN_VERSION);
-	t->bios_release_date = smbios_add_string(t->eos, U_BOOT_DMI_DATE);
+	smbios_set_eos(ctx, t->eos);
+	t->vendor = smbios_add_string(ctx, "U-Boot");
+	t->bios_ver = smbios_add_string(ctx, PLAIN_VERSION);
+	t->bios_release_date = smbios_add_string(ctx, U_BOOT_DMI_DATE);
 #ifdef CONFIG_ROM_SIZE
 	t->bios_rom_size = (CONFIG_ROM_SIZE / 65536) - 1;
 #endif
@@ -180,17 +187,18 @@ static int smbios_write_type1(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type1));
 	fill_smbios_header(t, SMBIOS_SYSTEM_INFORMATION, len, handle);
-	t->manufacturer = smbios_add_prop(t->eos, ctx, "manufacturer");
-	t->product_name = smbios_add_prop(t->eos, ctx, "product");
-	t->version = smbios_add_prop(t->eos, ctx, "version");
+	smbios_set_eos(ctx, t->eos);
+	t->manufacturer = smbios_add_prop(ctx, "manufacturer");
+	t->product_name = smbios_add_prop(ctx, "product");
+	t->version = smbios_add_prop(ctx, "version");
 	if (serial_str) {
-		t->serial_number = smbios_add_string(t->eos, serial_str);
+		t->serial_number = smbios_add_string(ctx, serial_str);
 		strncpy((char *)t->uuid, serial_str, sizeof(t->uuid));
 	} else {
-		t->serial_number = smbios_add_prop(t->eos, ctx, "serial");
+		t->serial_number = smbios_add_prop(ctx, "serial");
 	}
-	t->sku_number = smbios_add_prop(t->eos, ctx, "sku");
-	t->family = smbios_add_prop(t->eos, ctx, "family");
+	t->sku_number = smbios_add_prop(ctx, "sku");
+	t->family = smbios_add_prop(ctx, "family");
 
 	len = t->length + smbios_string_table_len(t->eos);
 	*current += len;
@@ -208,9 +216,10 @@ static int smbios_write_type2(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type2));
 	fill_smbios_header(t, SMBIOS_BOARD_INFORMATION, len, handle);
-	t->manufacturer = smbios_add_prop(t->eos, ctx, "manufacturer");
-	t->product_name = smbios_add_prop(t->eos, ctx, "product");
-	t->asset_tag_number = smbios_add_prop(t->eos, ctx, "asset-tag");
+	smbios_set_eos(ctx, t->eos);
+	t->manufacturer = smbios_add_prop(ctx, "manufacturer");
+	t->product_name = smbios_add_prop(ctx, "product");
+	t->asset_tag_number = smbios_add_prop(ctx, "asset-tag");
 	t->feature_flags = SMBIOS_BOARD_FEATURE_HOSTING;
 	t->board_type = SMBIOS_BOARD_MOTHERBOARD;
 
@@ -230,7 +239,8 @@ static int smbios_write_type3(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type3));
 	fill_smbios_header(t, SMBIOS_SYSTEM_ENCLOSURE, len, handle);
-	t->manufacturer = smbios_add_prop(t->eos, ctx, "manufacturer");
+	smbios_set_eos(ctx, t->eos);
+	t->manufacturer = smbios_add_prop(ctx, "manufacturer");
 	t->chassis_type = SMBIOS_ENCLOSURE_DESKTOP;
 	t->bootup_state = SMBIOS_STATE_SAFE;
 	t->power_supply_state = SMBIOS_STATE_SAFE;
@@ -273,8 +283,8 @@ static void smbios_write_type4_dm(struct smbios_type4 *t,
 #endif
 
 	t->processor_family = processor_family;
-	t->processor_manufacturer = smbios_add_string(t->eos, vendor);
-	t->processor_version = smbios_add_string(t->eos, name);
+	t->processor_manufacturer = smbios_add_string(ctx, vendor);
+	t->processor_version = smbios_add_string(ctx, name);
 }
 
 static int smbios_write_type4(ulong *current, int handle,
@@ -286,6 +296,7 @@ static int smbios_write_type4(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type4));
 	fill_smbios_header(t, SMBIOS_PROCESSOR_INFORMATION, len, handle);
+	smbios_set_eos(ctx, t->eos);
 	t->processor_type = SMBIOS_PROCESSOR_TYPE_CENTRAL;
 	smbios_write_type4_dm(t, ctx);
 	t->status = SMBIOS_PROCESSOR_STATUS_ENABLED;
@@ -311,6 +322,7 @@ static int smbios_write_type32(ulong *current, int handle,
 	t = map_sysmem(*current, len);
 	memset(t, 0, sizeof(struct smbios_type32));
 	fill_smbios_header(t, SMBIOS_SYSTEM_BOOT_INFORMATION, len, handle);
+	smbios_set_eos(ctx, t->eos);
 
 	*current += len;
 	unmap_sysmem(t);
-- 
2.30.0.280.ga3ce27912f-goog

  parent reply	other threads:[~2021-01-24 17:43 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-24 17:43 [PATCH v3 00/12] smbios: Enhancements for more flexibility Simon Glass
2021-01-24 17:43 ` [PATCH v3 01/12] README: Add doumentation for version information Simon Glass
2021-02-01  7:17   ` Bin Meng
2021-01-24 17:43 ` [PATCH v3 02/12] Makefile: Provide numeric versions Simon Glass
2021-01-24 17:43 ` [PATCH v3 03/12] smbios: Move smbios_write_type to the C file Simon Glass
2021-01-24 17:43 ` [PATCH v3 04/12] smbios: Use char consistently for the eos member Simon Glass
2021-01-24 17:43 ` [PATCH v3 05/12] smbios: Set BIOS release version Simon Glass
2021-01-24 17:43 ` [PATCH v3 06/12] smbios: Use a struct to keep track of context Simon Glass
2021-01-24 17:43 ` Simon Glass [this message]
2021-02-01  7:25   ` [PATCH v3 07/12] smbios: Drop the eos parameter Bin Meng
2021-01-24 17:43 ` [PATCH v3 08/12] smbios: Track the end of the string table Simon Glass
2021-01-24 17:43 ` [PATCH v3 09/12] smbios: Add more options for the BIOS version string Simon Glass
2021-02-01  7:25   ` Bin Meng
2021-01-24 17:43 ` [PATCH v3 10/12] sysinfo: Move #ifdef so that operations are always defined Simon Glass
2021-01-24 17:43 ` [PATCH v3 11/12] x86: coral: Add sysinfo ops Simon Glass
2021-02-01  7:25   ` Bin Meng
2021-01-24 17:43 ` [PATCH v3 12/12] smbios: Allow a few values to come from sysinfo Simon Glass
2021-02-01  7:25   ` Bin Meng
2021-02-05  3:17     ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210124104327.v3.7.I6c28d884e356bafbb28c4fa3a1ce66b9fa761158@changeid \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.