[Skiboot] [RFC PATCH 2/4] hdata/vpd: Parse additional VINI records
Oliver O'Halloran
oohall at gmail.com
Tue Feb 28 18:49:46 AEDT 2017
On Tue, Feb 28, 2017 at 4:14 PM, Ananth N Mavinakayanahalli
<ananth at linux.vnet.ibm.com> wrote:
> While there, use the helper to add individual records.
>
> Signed-off-by: Ananth N Mavinakayanahalli <ananth at linux.vnet.ibm.com>
> ---
> hdata/vpd.c | 95 ++++++++++++++++++++++++++++++-----------------------------
> 1 file changed, 49 insertions(+), 46 deletions(-)
>
> diff --git a/hdata/vpd.c b/hdata/vpd.c
> index 4c787c6..79f2893 100644
> --- a/hdata/vpd.c
> +++ b/hdata/vpd.c
> @@ -225,54 +225,69 @@ static const struct card_info *card_info_lookup(char *ccin)
> return NULL;
> }
>
> +static void vpd_add_property_string(struct dt_node *n, const char *name,
> + const void *vpd, unsigned int sz)
> +{
> + char *str = zalloc(sz + 1);
> + if (!str)
> + return;
> + memcpy(str, vpd, sz);
> + dt_add_property_string(n, name, str);
> + free(str);
> +}
> +
This looks the same as dt_add_property_nstr(). Can we remove this
helper entirely and use that instead?
> static void vpd_vini_parse(struct dt_node *node,
> const void *fruvpd, unsigned int fruvpd_sz)
> {
> const void *kw;
> char *str;
> - uint8_t kwsz;
> + uint8_t sz;
> const struct card_info *cinfo;
>
> /* FRU Stocking Part Number */
> - kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "FN", &kwsz);
> - if (kw) {
> - str = zalloc(kwsz + 1);
> - if (!str)
> - goto no_memory;
> - memcpy(str, kw, kwsz);
> - dt_add_property_string(node, "fru-number", str);
> - free(str);
> - }
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "FN", &sz);
> + if (kw)
> + vpd_add_property_string(node, "fru-number", kw, sz);
>
> /* Serial Number */
> - kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "SN", &kwsz);
> - if (kw) {
> - str = zalloc(kwsz + 1);
> - if (!str)
> - goto no_memory;
> - memcpy(str, kw, kwsz);
> - dt_add_property_string(node, "serial-number", str);
> - free(str);
> - }
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "SN", &sz);
> + if (kw)
> + vpd_add_property_string(node, "serial-number", kw, sz);
>
> /* Part Number */
> - kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "PN", &kwsz);
> - if (kw) {
> - str = zalloc(kwsz + 1);
> - if (!str)
> - goto no_memory;
> - memcpy(str, kw, kwsz);
> - dt_add_property_string(node, "part-number", str);
> - free(str);
> - }
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "PN", &sz);
> + if (kw)
> + vpd_add_property_string(node, "part-number", kw, sz);
> +
> + /* CCIN Extension */
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "CE", &sz);
> + if (kw)
> + vpd_add_property_string(node, "ccin-extension", kw, sz);
> +
> + /* HW Version info */
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "HW", &sz);
> + if (kw)
> + vpd_add_property_string(node, "hw-version", kw, sz);
> +
> + /* Card type info */
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "CT", &sz);
> + if (kw)
> + vpd_add_property_string(node, "card-type", kw, sz);
> +
> + /* HW characteristics info */
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "B3", &sz);
> + if (kw)
> + vpd_add_property_string(node, "hw-characteristics", kw, sz);
>
> /* Customer Card Identification Number (CCIN) */
> - kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "CC", &kwsz);
> + kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "CC", &sz);
> if (kw) {
> - str = zalloc(kwsz + 1);
> - if (!str)
> - goto no_memory;
> - memcpy(str, kw, kwsz);
> + str = zalloc(sz + 1);
> + if (!str) {
> + prerror("VPD: memory allocation failure in VINI parsing\n");
> + return;
> + }
> + memcpy(str, kw, sz);
> dt_add_property_string(node, "ccin", str);
We can probably use the helper here too if we looked up what we just
added to the DT, or if card_info_lookup() was tweaked to use
strncmp().
> cinfo = card_info_lookup(str);
> if (cinfo) {
> @@ -285,9 +300,8 @@ static void vpd_vini_parse(struct dt_node *node,
> }
> free(str);
> }
> +
> return;
> -no_memory:
> - prerror("VPD: memory allocation failure in VINI parsing\n");
> }
>
> static bool valid_child_entry(const struct slca_entry *entry)
> @@ -486,17 +500,6 @@ def_model:
> dt_add_property_string(dt_root, "model-name", model_name);
> }
>
> -static void vpd_add_property_string(struct dt_node *n, const char *name,
> - const void *vpd, unsigned int sz)
> -{
> - char *str = zalloc(sz + 1);
> - if (!str)
> - return;
> - memcpy(str, vpd, sz);
> - dt_add_property_string(n, name, str);
> - free(str);
> -}
> -
> static void sysvpd_parse_opp(const void *sysvpd, unsigned int sysvpd_sz)
> {
> const char *v;
>
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot
More information about the Skiboot
mailing list