diff options
Diffstat (limited to 'chip/g/signed_header.h')
-rw-r--r-- | chip/g/signed_header.h | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/chip/g/signed_header.h b/chip/g/signed_header.h new file mode 100644 index 0000000000..2da327c10d --- /dev/null +++ b/chip/g/signed_header.h @@ -0,0 +1,54 @@ +/* Copyright 2015 The Chromium OS Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +#ifndef __CROS_EC_SIGNED_HEADER_H +#define __CROS_EC_SIGNED_HEADER_H + +#include "compile_time_macros.h" + +#define FUSE_PADDING 0x55555555 /* baked in hw! */ +#define FUSE_IGNORE 0xa3badaac /* baked in rom! */ +#define FUSE_MAX 128 /* baked in rom! */ + +#define INFO_MAX 128 /* baked in rom! */ +#define INFO_IGNORE 0xaa3c55c3 /* baked in rom! */ + +struct SignedHeader { + uint32_t magic; /* -1 (thanks, boot_sys!) */ + uint32_t signature[96]; + uint32_t img_chk_; /* top 32 bit of expected img_hash */ + /* --------------------- everything below is part of img_hash */ + uint32_t tag[7]; /* words 0-6 of RWR/FWR */ + uint32_t keyid; /* word 7 of RWR */ + uint32_t key[96]; /* public key to verify signature with */ + uint32_t image_size; + uint32_t ro_base; /* readonly region */ + uint32_t ro_max; + uint32_t rx_base; /* executable region */ + uint32_t rx_max; + uint32_t fusemap[FUSE_MAX / (8 * sizeof(uint32_t))]; + uint32_t infomap[INFO_MAX / (8 * sizeof(uint32_t))]; + uint32_t epoch_; /* word 7 of FWR */ + uint32_t major_; /* keyladder count */ + uint32_t minor_; + uint64_t timestamp_; /* time of signing */ + uint32_t p4cl_; + /* bits to and with FUSE_FW_DEFINED_BROM_APPLYSEC */ + uint32_t applysec_; + /* bits to mesh with FUSE_FW_DEFINED_BROM_CONFIG1 */ + uint32_t config1_; + /* bits to or with FUSE_FW_DEFINED_BROM_ERR_RESPONSE */ + uint32_t err_response_; + /* action to take when expectation is violated */ + uint32_t expect_response_; + uint32_t _pad[256 - 1 - 96 - 1 - 7 - 1 - 96 - + 5*1 - 4 - 4 - 9*1 - 2 - 1]; + uint32_t fuses_chk_; /* top 32 bit of expected fuses hash */ + uint32_t info_chk_; /* top 32 bit of expected info hash */ +}; + +BUILD_ASSERT(sizeof(struct SignedHeader) == 1024); +BUILD_ASSERT(offsetof(struct SignedHeader, info_chk_) == 1020); + +#endif /* __CROS_EC_SIGNED_HEADER_H */ |