From: Petr Hodina <[email protected]>

Add a convenience wrapper for parsing common Android bootloader
parameters from the kernel command line. This simplifies extracting
the numerous androidboot.* parameters used in Android systems.

Signed-off-by: Petr Hodina <[email protected]>
---
 include/cmdline_utils.h | 32 +++++++++++++++++++
 lib/cmdline_utils.c     | 85 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 117 insertions(+)

diff --git a/include/cmdline_utils.h b/include/cmdline_utils.h
index fa6e20b2417..af9b5226dab 100644
--- a/include/cmdline_utils.h
+++ b/include/cmdline_utils.h
@@ -25,4 +25,36 @@ struct cmdline_mask_param {
 
 char *mask_cmdline_params(const char *cmdline, struct cmdline_mask_param 
*params, int count);
 
+struct androidboot_params {
+       char *hardware_ddr;
+       char *ddr_info;
+       char *ddr_size;
+
+       char *dsi_display0;
+
+       char *slot_suffix;
+       char *slot_retry_count;
+       char *slot_successful;
+
+       char *hardware_platform;
+       char *hardware;
+       char *revision;
+       char *hardware_sku;
+       char *hardware_majorid;
+
+       char *bootloader;
+       char *bootreason;
+       char *secure_boot;
+       char *mode;
+
+       char *cdt_hwid;
+       char *dtb_idx;
+
+       char *serialno;
+};
+
+int parse_androidboot_params(const char *cmdline, struct androidboot_params 
*params);
+
+void free_androidboot_params(struct androidboot_params *params);
+
 #endif /* _CMDLINE_UTILS_H_ */
diff --git a/lib/cmdline_utils.c b/lib/cmdline_utils.c
index 4355bdd45f4..f8fe5e79bb9 100644
--- a/lib/cmdline_utils.c
+++ b/lib/cmdline_utils.c
@@ -244,3 +244,88 @@ char *mask_cmdline_params(const char *cmdline, struct 
cmdline_mask_param *params
        *dst_pos = '\0';
        return result;
 }
+
+int parse_androidboot_params(const char *cmdline, struct androidboot_params 
*params)
+{
+       struct cmdline_param cmdline_params[] = {
+               {"androidboot.hardware.ddr", NULL, 0},
+               {"androidboot.ddr_info", NULL, 0},
+               {"androidboot.ddr_size", NULL, 0},
+               {"msm_drm.dsi_display0", NULL, 0},
+               {"androidboot.slot_suffix", NULL, 0},
+               {"androidboot.slot_retry_count", NULL, 0},
+               {"androidboot.slot_successful", NULL, 0},
+               {"androidboot.hardware.platform", NULL, 0},
+               {"androidboot.hardware", NULL, 0},
+               {"androidboot.revision", NULL, 0},
+               {"androidboot.bootloader", NULL, 0},
+               {"androidboot.hardware.sku", NULL, 0},
+               {"androidboot.secure_boot", NULL, 0},
+               {"androidboot.cdt_hwid", NULL, 0},
+               {"androidboot.hardware.majorid", NULL, 0},
+               {"androidboot.dtb_idx", NULL, 0},
+               {"androidboot.mode", NULL, 0},
+               {"androidboot.bootreason", NULL, 0},
+               {"androidboot.serialno", NULL, 0},
+       };
+       int ret, count = ARRAY_SIZE(cmdline_params);
+
+       if (!cmdline || !params)
+               return -EINVAL;
+
+       memset(params, 0, sizeof(struct androidboot_params));
+
+       ret = parse_cmdline_params(cmdline, cmdline_params, count);
+       if (ret < 0)
+               return ret;
+
+       params->hardware_ddr = cmdline_params[0].value;
+       params->ddr_info = cmdline_params[1].value;
+       params->ddr_size = cmdline_params[2].value;
+       params->dsi_display0 = cmdline_params[3].value;
+       params->slot_suffix = cmdline_params[4].value;
+       params->slot_retry_count = cmdline_params[5].value;
+       params->slot_successful = cmdline_params[6].value;
+       params->hardware_platform = cmdline_params[7].value;
+       params->hardware = cmdline_params[8].value;
+       params->revision = cmdline_params[9].value;
+       params->bootloader = cmdline_params[10].value;
+       params->hardware_sku = cmdline_params[11].value;
+       params->secure_boot = cmdline_params[12].value;
+       params->cdt_hwid = cmdline_params[13].value;
+       params->hardware_majorid = cmdline_params[14].value;
+       params->dtb_idx = cmdline_params[15].value;
+       params->mode = cmdline_params[16].value;
+       params->bootreason = cmdline_params[17].value;
+       params->serialno = cmdline_params[18].value;
+
+       return 0;
+}
+
+void free_androidboot_params(struct androidboot_params *params)
+{
+       if (!params)
+               return;
+
+       free(params->hardware_ddr);
+       free(params->ddr_info);
+       free(params->ddr_size);
+       free(params->dsi_display0);
+       free(params->slot_suffix);
+       free(params->slot_retry_count);
+       free(params->slot_successful);
+       free(params->hardware_platform);
+       free(params->hardware);
+       free(params->revision);
+       free(params->bootloader);
+       free(params->hardware_sku);
+       free(params->secure_boot);
+       free(params->cdt_hwid);
+       free(params->hardware_majorid);
+       free(params->dtb_idx);
+       free(params->mode);
+       free(params->bootreason);
+       free(params->serialno);
+
+       memset(params, 0, sizeof(struct androidboot_params));
+}

-- 
2.55.0


Reply via email to