Device-level address ranges, partition positions, and interleaving.
lazybiosGetType20 returns a lazybiosType20Array_t holding every matching structure. Iterate entries using count. A non-NULL result whose count is zero means the table contains no structure of this type; NULL means the arguments were unusable or an allocation failed. Release the set with lazybiosFreeType20, or assign it to ctx->Type20 and let lazybiosCleanup own it.
Every record carries its own SMBIOS handle and the structure length the firmware reported.
Encoded fields are decoded during parsing into decoded, which mirrors the raw member names (ending_address, starting_address). The raw value stays alongside it, so both the encoding and its meaning are available.
Legacy starting_address and ending_address values are expressed in KiB. The ending value identifies the last KiB in the inclusive range. When both legacy values are 0xFFFFFFFF, the SMBIOS 2.7 extended fields contain the actual inclusive byte addresses. decoded.starting_address and decoded.ending_address select the applicable representation and return byte addresses.
partition_row_position uses 0xFF for an unknown position; zero is reserved. interleave_position uses zero for a non-interleaved device and 0xFF when the position is unknown. interleaved_data_depth uses zero when the device is not interleaved and 0xFF when its configuration is unknown. These encodings are present raw values rather than unavailable-field sentinels.
The returned structure array is allocated by the parser. Release it with lazybiosFreeType20 or assign it to lazybiosCTX::Type20 and use lazybiosCleanup.