1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, v.1, (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://opensource.org/licenses/CDDL-1.0.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2014-2017 Cavium, Inc.
24 * The contents of this file are subject to the terms of the Common Development
25 * and Distribution License, v.1, (the "License").
26
27 * You may not use this file except in compliance with the License.
28
29 * You can obtain a copy of the License at available
30 * at http://opensource.org/licenses/CDDL-1.0
31
32 * See the License for the specific language governing permissions and
33 * limitations under the License.
34 */
35
36 /****************************************************************************
37 * Name: append.h
38 *
39 * Description:
40 * This is a utility to append firmware and other images into a
41 * single file. The primary use of this is to combine two phases
42 * of the bootcode into a single file. It appends some header
43 * information (used for parsing the file) and the input image to
44 * the output file. (If the output file does not yet exist, it'll
45 * create one.)
46 * This header file defines the image header information.
47 *
48 * Bundle image layout:
49 * ========================================================
50 * = Bundle Header <bundle_header>
51 * = <magic > - 0xbdbdbdbd
52 * = <version > - Currently 1
53 * = <num_images> - Of the bundle
54 * = <total_size> - Of the bundle
55 * ========================================================
56 * = Img1 Hdr <image_header>
57 * = <magic > - 0x669955aa
58 * = <version > - Currently 2
59 * = <type >
60 * = <image_info>
61 * = <start_addr>
62 * = <run_addr >
63 * = <byte_cnt >
64 * ========================================================
65 * = Img1 data
66 * ========================================================
67 * ========================================================
68 * = ImgN Hdr <image_header>
69 * ========================================================
70 * = ImgN data
71 * ========================================================
72 *
73 ****************************************************************************/
74
75 #ifndef APPEND_H
76 #define APPEND_H
77
78 #define SIGNATURE_MAX_DER_SIZE 128
79 #define SIGNATURE_MIN_DER_SIZE 64
80
81 struct image_header {
82 #pragma pack(push, 1)
83 u32 magic;
84 #define FILE_MAGIC 0x669955aa
85 u32 version;
86 #define FORMAT_VERSION_1 0x1
87 #define FORMAT_VERSION_2 0x2
88 #define FORMAT_VERSION_3 0x3
89 #define LATEST_FORMAT_VERSION FORMAT_VERSION_3
90 u32 type;
91 u32 image_info;
92 /* MAX_MEM base value is 8K, means if MAX_MEM value is 0,
93 * the size is 8K. */
94 #define IMAGE_INFO_MAX_MEM_BASE 8
95 /* Runtime mem size required in k, Encoded with value +
96 * IMAGE_INFO_MAX_MEM_BASE */
97 #define IMAGE_INFO_MAX_MEM_MASK 0x0000001f
98
99 /* bit 23:16 reserved for bit define that device it can support.
100 * These are bit fields. */
101 #define IMAGE_INFO_CHIP_MASK 0x00ff0000
102 #define IMAGE_INFO_CHIP_57940 0x00200000
103 #define IMAGE_INFO_CHIP_579XX 0x00400000
104 #define IMAGE_INFO_CHIP_579XX_B0_ONLY 0x00500000 /* For PCIE2 */
105
106 u32 start_addr;
107 u32 run_addr;
108 u32 byte_cnt;
109 u32 image[1]; /* Unbounded */
110 #pragma pack(pop)
111 };
112
113 #define IMG_HDR_LEN (sizeof(struct image_header))
114
115 struct bundle_header {
116 u32 magic;
117 #define BUNDLE_MAGIC 0xbdbdbdbd
118 u32 version;
119 #define BUNDLE_IMAGE_VER 1
120 u32 num_images;
121 u32 total_size;
122 };
123
124 #endif /*APPEND_H */