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 */
125