Use the offset_of macro for each struct field, annotate the `PmuLookupTableHeader` struct with `#[repr(C)]` attribute, and add a TODO message to use FromBytes when available.
Signed-off-by: Rhys Lloyd <krako...@gmail.com> --- drivers/gpu/nova-core/vbios.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index a77d7a4c8595..cedfcf3476bb 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -893,6 +893,7 @@ fn try_from(base: BiosImageBase) -> Result<Self> { /// /// See the [`PmuLookupTable`] description for more information. #[expect(dead_code)] +#[repr(C)] struct PmuLookupTableHeader { version: u8, header_len: u8, @@ -901,16 +902,17 @@ struct PmuLookupTableHeader { } impl PmuLookupTableHeader { + // TODO[TRSM]: use FromBytes::from_bytes when it becomes available. fn new(data: &[u8]) -> Result<Self> { if data.len() < core::mem::size_of::<Self>() { return Err(EINVAL); } Ok(PmuLookupTableHeader { - version: data[0], - header_len: data[1], - entry_len: data[2], - entry_count: data[3], + version: data[const { core::mem::offset_of!(PmuLookupTableHeader, version) }], + header_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, header_len) }], + entry_len: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_len) }], + entry_count: data[const { core::mem::offset_of!(PmuLookupTableHeader, entry_count) }], }) } } base-commit: 14ae91a81ec8fa0bc23170d4aa16dd2a20d54105 prerequisite-patch-id: 6f9311de987d56f4313d5fbdd85ed8c48a44e78c -- 2.50.1