aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sfc/base/ef10_signed_image_layout.h
blob: a35d16012e5ece554e9f2151d15351fa4a0ad814 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/* SPDX-License-Identifier: BSD-3-Clause
 *
 * Copyright (c) 2016-2018 Solarflare Communications Inc.
 * All rights reserved.
 */

/* These structures define the layouts for the signed firmware image binary
 * saved in NVRAM. The original image is in the Cryptographic message
 * syntax (CMS) format which contains the bootable firmware binary plus the
 * signatures. The entire image is written into NVRAM to enable the firmware
 * to validate the signatures. However, the bootrom still requires the
 * bootable-image to start at offset 0 of the NVRAM partition. Hence the image
 * is parsed upfront by host utilities (sfupdate) and written into nvram as
 * 'signed_image_chunks' described by a header.
 *
 * This file is used by the MC as well as host-utilities (sfupdate).
 */


#ifndef CI_MGMT_SIGNED_IMAGE_LAYOUT_H
#define CI_MGMT_SIGNED_IMAGE_LAYOUT_H

/* Signed image chunk type identifiers */
enum {
  SIGNED_IMAGE_CHUNK_CMS_HEADER,        /* CMS header describing the signed data */
  SIGNED_IMAGE_CHUNK_REFLASH_HEADER,    /* Reflash header */
  SIGNED_IMAGE_CHUNK_IMAGE,             /* Bootable binary image */
  SIGNED_IMAGE_CHUNK_REFLASH_TRAILER,   /* Reflash trailer */
  SIGNED_IMAGE_CHUNK_SIGNATURE,         /* Remaining contents of the signed image,
                                         * including the certifiates and signature */
  NUM_SIGNED_IMAGE_CHUNKS,
};

/* Magic */
#define SIGNED_IMAGE_CHUNK_HDR_MAGIC 0xEF105161 /* EF10 SIGned Image */

/* Initial version definition - version 1 */
#define SIGNED_IMAGE_CHUNK_HDR_VERSION 0x1

/* Header length is 32 bytes */
#define SIGNED_IMAGE_CHUNK_HDR_LEN   32
/* Structure describing the header of each chunk of signed image
 * as stored in nvram
 */
typedef struct signed_image_chunk_hdr_e {
  /* Magic field to recognise a valid entry
   * should match SIGNED_IMAGE_CHUNK_HDR_MAGIC
   */
  uint32_t magic;
  /* Version number of this header */
  uint32_t version;
  /* Chunk type identifier */
  uint32_t id;
  /* Chunk offset */
  uint32_t offset;
  /* Chunk length */
  uint32_t len;
  /* Reserved for future expansion of this structure - always set to zeros */
  uint32_t reserved[3];
} signed_image_chunk_hdr_t;

#endif /* CI_MGMT_SIGNED_IMAGE_LAYOUT_H */