tree a4f3e2c059d9bd87c1925c65ffe71339100e22f8
parent bacbbac1ddc5ee4b4184b73bccdd535b05f9e870
author Andrew Jeffery <andrew@codeconstruct.com.au> 1741751141 +1030
committer Andrew Jeffery <andrew@codeconstruct.com.au> 1749870620 +0930

dsp: firmware_update: Introduce iterators for parsing firmware packages

The new collection of APIs allows parsing of arbitrary PLDM firmware
update packages in a style that is reasonably ergonomic and free of
library allocations.

As a rough sketch, use of the API looks as follows:

```
/* Pin the package parsing to format revision 2 */
DEFINE_PLDM_PACKAGE_FORMAT_PIN_FR02H(pin);

struct pldm_package_downstream_device_id_record ddrec;
struct pldm_package_component_image_information info;
struct pldm_package_firmware_device_id_record fdrec;
pldm_package_header_information_pad hdr;
struct pldm_package_iter iter;
int rc;

...

rc = decode_pldm_firmware_update_package(package, in, &pin, &hdr, &iter);
if (rc < 0) { ... }

/* Do something with hdr */

foreach_pldm_package_firmware_device_id_record(iter, fdrec, rc)
{
	struct pldm_descriptor desc;

	/* Do something with fdrec */

	foreach_pldm_package_firmware_device_id_record_descriptor(iter, fdrec,
								  desc, rc)
	{
		/* Do something with desc */
	}
	if (rc) { /* Handle desc decode failure */ }
}
if (rc) { /* Handle fdrec decode failure */ }

foreach_pldm_package_downstream_device_id_record(iter, ddrec, rc)
{
	struct pldm_descriptor desc;

	/* Do something with ddrec */

	foreach_pldm_package_downstream_device_id_record_descriptor(iter, ddrec,
								    desc, rc)
	{
		/* Do something with desc */
	}
	if (rc) { /* Handle desc decode failure */ }
}
if (rc) { /* Handle ddrec decode failure */ }

foreach_pldm_package_component_image_information(iter, info, rc)
{
	/* Do something with info */
}
if (rc) { /* Handle info decode failure */ }
```

Note that these new APIs intersects with some existing functionality.
Where possible, implementations have been unified, however, the existing
APIs were inflexible and unergonomic, requiring pointer arithmetic on
the part of the caller, and could not safely cater to concepts added in
later revisions of the spec. The existing APIs will be deprecated in a
later patch.

Further to that, the implementation of the component image information
parsing could not be unified in a way that wasn't awkward. The existing
API passed raw image offsets back to the caller, where the new API
resolves the offsets against the image location in memory, yielding a
valid pointer and bounds-checked length (thereby relieving the caller of
the pointer arithmetic). Unwinding that back to a raw offset seems
tedious at best in the context of other tests for pointer validity, so
don't even try.

Change-Id: I53472ca22b4c8aa79a5515b20a72bf8f66ed66e3
Co-developed-by: Rajeev Ranjan <rajeeranjan@nvidia.com>
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
