Xeon-SP boards: Factor out OCP VPD `get_cxl_mode()` impl
[coreboot2.git] / util / cbfstool / bpdt_formats / subpart_hdr_1.c
blob5335c7a844e766cc6f090aa7b71fb539e6682756
1 /* Subpart directory header version 1 support */
2 /* SPDX-License-Identifier: GPL-2.0-only */
4 #include <sys/types.h>
6 #include "cse_serger.h"
8 struct subpart_hdr {
9 uint32_t signature; /* SUBPART_SIGNATURE */
10 uint32_t count;
11 uint8_t hdr_version; /* Header version = 1 */
12 uint8_t entry_version; /* Entry version = 1 */
13 uint8_t length;
14 uint8_t checksum;
15 uint8_t name[4];
16 } __packed;
18 static void subpart_hdr_print(const subpart_hdr_ptr ptr)
20 const struct subpart_hdr *hdr = ptr;
22 printf("%-25s %.4s\n", "Signature", (const char *)&hdr->signature);
23 printf("%-25s %-25d\n", "Count", hdr->count);
24 printf("%-25s %-25d\n", "Header Version", hdr->hdr_version);
25 printf("%-25s %-25d\n", "Entry Version", hdr->entry_version);
26 printf("%-25s 0x%-23x\n", "Header Length", hdr->length);
27 printf("%-25s 0x%-23x\n", "Checksum", hdr->checksum);
28 printf("%-25s ", "Name");
29 for (size_t i = 0; i < sizeof(hdr->name); i++)
30 printf("%c", hdr->name[i]);
31 printf("\n");
34 static subpart_hdr_ptr subpart_hdr_read(struct buffer *buff)
36 struct subpart_hdr *hdr = malloc(sizeof(*hdr));
38 if (!hdr)
39 return NULL;
41 READ_MEMBER(buff, hdr->signature);
42 READ_MEMBER(buff, hdr->count);
43 READ_MEMBER(buff, hdr->hdr_version);
44 READ_MEMBER(buff, hdr->entry_version);
45 READ_MEMBER(buff, hdr->length);
46 READ_MEMBER(buff, hdr->checksum);
47 READ_MEMBER(buff, hdr->name);
49 return hdr;
52 static size_t subpart_get_count(const subpart_hdr_ptr ptr)
54 const struct subpart_hdr *hdr = ptr;
56 return hdr->count;
59 static void subpart_hdr_free(subpart_hdr_ptr ptr)
61 free(ptr);
64 const struct subpart_hdr_ops subpart_hdr_1_ops = {
65 .read = subpart_hdr_read,
66 .print = subpart_hdr_print,
67 .get_entry_count = subpart_get_count,
68 .free = subpart_hdr_free,