xref: /dpdk/drivers/common/sfc_efx/base/ef10_signed_image_layout.h (revision 672386c1e9e1f64f7aa3b1360ad22dc737ea8d72)
15e111ed8SAndrew Rybchenko /* SPDX-License-Identifier: BSD-3-Clause
25e111ed8SAndrew Rybchenko  *
3*672386c1SAndrew Rybchenko  * Copyright(c) 2019-2021 Xilinx, Inc.
45e111ed8SAndrew Rybchenko  * Copyright(c) 2016-2019 Solarflare Communications Inc.
55e111ed8SAndrew Rybchenko  */
65e111ed8SAndrew Rybchenko 
75e111ed8SAndrew Rybchenko /*
85e111ed8SAndrew Rybchenko  * This is NOT the original source file. Do NOT edit it.
95e111ed8SAndrew Rybchenko  * To update the image layout headers, please edit the copy in
105e111ed8SAndrew Rybchenko  * the sfregistry repo and then, in that repo,
115e111ed8SAndrew Rybchenko  * "make layout_headers" or "make export" to
125e111ed8SAndrew Rybchenko  * regenerate and export all types of headers.
135e111ed8SAndrew Rybchenko  */
145e111ed8SAndrew Rybchenko 
155e111ed8SAndrew Rybchenko /* These structures define the layouts for the signed firmware image binary
165e111ed8SAndrew Rybchenko  * saved in NVRAM. The original image is in the Cryptographic message
175e111ed8SAndrew Rybchenko  * syntax (CMS) format which contains the bootable firmware binary plus the
185e111ed8SAndrew Rybchenko  * signatures. The entire image is written into NVRAM to enable the firmware
195e111ed8SAndrew Rybchenko  * to validate the signatures. However, the bootrom still requires the
205e111ed8SAndrew Rybchenko  * bootable-image to start at offset 0 of the NVRAM partition. Hence the image
215e111ed8SAndrew Rybchenko  * is parsed upfront by host utilities (sfupdate) and written into nvram as
225e111ed8SAndrew Rybchenko  * 'signed_image_chunks' described by a header.
235e111ed8SAndrew Rybchenko  *
245e111ed8SAndrew Rybchenko  * This file is used by the MC as well as host-utilities (sfupdate).
255e111ed8SAndrew Rybchenko  */
265e111ed8SAndrew Rybchenko 
275e111ed8SAndrew Rybchenko 
285e111ed8SAndrew Rybchenko #ifndef CI_MGMT_SIGNED_IMAGE_LAYOUT_H
295e111ed8SAndrew Rybchenko #define CI_MGMT_SIGNED_IMAGE_LAYOUT_H
305e111ed8SAndrew Rybchenko 
315e111ed8SAndrew Rybchenko /* Signed image chunk type identifiers */
325e111ed8SAndrew Rybchenko enum {
335e111ed8SAndrew Rybchenko   SIGNED_IMAGE_CHUNK_CMS_HEADER,        /* CMS header describing the signed data */
345e111ed8SAndrew Rybchenko   SIGNED_IMAGE_CHUNK_REFLASH_HEADER,    /* Reflash header */
355e111ed8SAndrew Rybchenko   SIGNED_IMAGE_CHUNK_IMAGE,             /* Bootable binary image */
365e111ed8SAndrew Rybchenko   SIGNED_IMAGE_CHUNK_REFLASH_TRAILER,   /* Reflash trailer */
375e111ed8SAndrew Rybchenko   SIGNED_IMAGE_CHUNK_SIGNATURE,         /* Remaining contents of the signed image,
385e111ed8SAndrew Rybchenko                                          * including the certifiates and signature */
395e111ed8SAndrew Rybchenko   NUM_SIGNED_IMAGE_CHUNKS,
405e111ed8SAndrew Rybchenko };
415e111ed8SAndrew Rybchenko 
425e111ed8SAndrew Rybchenko /* Magic */
435e111ed8SAndrew Rybchenko #define SIGNED_IMAGE_CHUNK_HDR_MAGIC 0xEF105161 /* EF10 SIGned Image */
445e111ed8SAndrew Rybchenko 
455e111ed8SAndrew Rybchenko /* Initial version definition - version 1 */
465e111ed8SAndrew Rybchenko #define SIGNED_IMAGE_CHUNK_HDR_VERSION 0x1
475e111ed8SAndrew Rybchenko 
485e111ed8SAndrew Rybchenko /* Header length is 32 bytes */
495e111ed8SAndrew Rybchenko #define SIGNED_IMAGE_CHUNK_HDR_LEN   32
505e111ed8SAndrew Rybchenko /* Structure describing the header of each chunk of signed image
515e111ed8SAndrew Rybchenko  * as stored in nvram
525e111ed8SAndrew Rybchenko  */
535e111ed8SAndrew Rybchenko typedef struct signed_image_chunk_hdr_e {
545e111ed8SAndrew Rybchenko   /* Magic field to recognise a valid entry
555e111ed8SAndrew Rybchenko    * should match SIGNED_IMAGE_CHUNK_HDR_MAGIC
565e111ed8SAndrew Rybchenko    */
575e111ed8SAndrew Rybchenko   uint32_t magic;
585e111ed8SAndrew Rybchenko   /* Version number of this header */
595e111ed8SAndrew Rybchenko   uint32_t version;
605e111ed8SAndrew Rybchenko   /* Chunk type identifier */
615e111ed8SAndrew Rybchenko   uint32_t id;
625e111ed8SAndrew Rybchenko   /* Chunk offset */
635e111ed8SAndrew Rybchenko   uint32_t offset;
645e111ed8SAndrew Rybchenko   /* Chunk length */
655e111ed8SAndrew Rybchenko   uint32_t len;
665e111ed8SAndrew Rybchenko   /* Reserved for future expansion of this structure - always set to zeros */
675e111ed8SAndrew Rybchenko   uint32_t reserved[3];
685e111ed8SAndrew Rybchenko } signed_image_chunk_hdr_t;
695e111ed8SAndrew Rybchenko 
705e111ed8SAndrew Rybchenko #endif /* CI_MGMT_SIGNED_IMAGE_LAYOUT_H */
71