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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
#ifndef _SIB_H_
#define _SIB_H_
//==========================================================================
//
// sib.h
//
// RedBoot - structure of ARM flash file format
//
//==========================================================================
// ####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later
// version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License
// along with eCos; if not, write to the Free Software Foundation, Inc.,
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//
// As a special exception, if other files instantiate templates or use
// macros or inline functions from this file, or you compile this file
// and link it with other works to produce a work based on this file,
// this file does not by itself cause the resulting work to be covered by
// the GNU General Public License. However the source code for this file
// must still be made available in accordance with section (3) of the GNU
// General Public License v2.
//
// This exception does not invalidate any other reasons why a work based
// on this file might be covered by the GNU General Public License.
// -------------------------------------------
// ####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): Philippe Robin
// Contributors: Philippe Robin, jskov
// Date: 2001-10-31
// Purpose:
// Description:
//
// This code is part of RedBoot (tm).
//
//####DESCRIPTIONEND####
//
//==========================================================================
#include <cyg/hal/hal_io.h>
/* type information :-
* 0xffff ffff - deleted (usual flash erased value)
* 0x0000 xxxx - Reserved for ARM usage:
* Bit 0 - ARM Executable Image
* Bit 1 - System Information Block
* Bit 2 - File System Block
* 0xyyyy 0000 - Available for customers (y != 0)
*/
#define TYPE_DELETED 0xFFFFFFFF
#define TYPE_ARM_MASK 0x0000FFFF
#define TYPE_CUSTOM_MASK 0xFFFF0000
#define TYPE_ARM_EXEC 0x00000001
#define TYPE_ARM_SIB 0x00000002
#define TYPE_ARM_SYSBLOCK 0x00000004
/* This is the type we use for RedBoot blocks */
#define TYPE_REDHAT_REDBOOT 0x52420000
/* The ARM monitor may be using a different memory mapping than RedBoot */
#ifndef _ADDR_REDBOOT_TO_ARM
# define _ADDR_REDBOOT_TO_ARM(x)
#endif
/* Filetypes */
#define UNKNOWN_FILE 0x00000000
#define MOT_S_RECORD 0x00000001
#define INTEL_HEX 0x00000002
#define ELF 0x00000004
#define DWARF 0x00000008
#define ARM_AOF 0x00000010
#define ARM_AIF 0x00000020
#define PLAIN_BINARY 0x00000040
#define ARM_AIF_BIN 0x00000080
#define MCS_TYPE 0x00000100
#define CONVERT_TYPE (MOT_S_RECORD | INTEL_HEX | MCS_TYPE | ELF)
#define SIB_OWNER_STRING_SIZE 32
#define MAX_SIB_SIZE 512
#define MAX_SIB_INDEX 64
#define SIB_HEADER_SIGNATURE 0xA00FFF9F /* This is an invalid instruction - MULGE pc,pc,pc */
#define FLASH_FOOTER_SIGNATURE 0xA0FFFF9F /* This is an invalid instruction - SMULALGES pc,pc,pc */
typedef struct SIBType {
cyg_uint32 signature;
cyg_uint32 size;
char owner[SIB_OWNER_STRING_SIZE];
cyg_uint32 index;
cyg_uint32 revision;
cyg_uint32 checksum;
} tSIB;
typedef struct SIBInfoType {
cyg_uint32 SIB_number; /* Unique number of SIB Block */
cyg_uint32 SIB_Extension; /* Base of SIB Flash Block */
char Label[16]; /* String space for ownership string */
cyg_uint32 checksum; /* SIB Image checksum */
} tSIBInfo;
typedef struct FooterType {
void *infoBase; /* Address of first word of ImageFooter */
char *blockBase; /* Start of area reserved by this footer */
cyg_uint32 signature; /* 'Magic' number proves it's a footer */
cyg_uint32 type; /* Area type: ARM Image, SIB, customer */
cyg_uint32 checksum; /* Just this structure */
} tFooter ;
typedef struct ImageInfoType {
cyg_uint32 bootFlags; /* Boot flags, compression etc. */
cyg_uint32 imageNumber; /* Unique number, selects for boot etc. */
char *loadAddress; /* Address program should be loaded to */
cyg_uint32 length; /* Actual size of image */
char *address; /* Image is executed from here */
char name[16]; /* Null terminated */
char *headerBase; /* Flash Address of any stripped header */
cyg_uint32 header_length; /* Length of header in memory */
cyg_uint32 headerType; /* AIF, RLF, s-record etc. */
cyg_uint32 checksum; /* Image checksum (inc. this struct) */
} tImageInfo;
#endif // _SIB_H_
|