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