1*5b1d7137Swdenk /* 2*5b1d7137Swdenk * (C) Copyright 2000 3*5b1d7137Swdenk * Wolfgang Denk, DENX Software Engineering, wd@denx.de. 4*5b1d7137Swdenk * 5*5b1d7137Swdenk * See file CREDITS for list of people who contributed to this 6*5b1d7137Swdenk * project. 7*5b1d7137Swdenk * 8*5b1d7137Swdenk * This program is free software; you can redistribute it and/or 9*5b1d7137Swdenk * modify it under the terms of the GNU General Public License as 10*5b1d7137Swdenk * published by the Free Software Foundation; either version 2 of 11*5b1d7137Swdenk * the License, or (at your option) any later version. 12*5b1d7137Swdenk * 13*5b1d7137Swdenk * This program is distributed in the hope that it will be useful, 14*5b1d7137Swdenk * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*5b1d7137Swdenk * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*5b1d7137Swdenk * GNU General Public License for more details. 17*5b1d7137Swdenk * 18*5b1d7137Swdenk * You should have received a copy of the GNU General Public License 19*5b1d7137Swdenk * along with this program; if not, write to the Free Software 20*5b1d7137Swdenk * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*5b1d7137Swdenk * MA 02111-1307 USA 22*5b1d7137Swdenk */ 23*5b1d7137Swdenk 24*5b1d7137Swdenk #ifndef __IMAGE_H__ 25*5b1d7137Swdenk #define __IMAGE_H__ 26*5b1d7137Swdenk 27*5b1d7137Swdenk /* 28*5b1d7137Swdenk * Operating System Codes 29*5b1d7137Swdenk */ 30*5b1d7137Swdenk #define IH_OS_INVALID 0 /* Invalid OS */ 31*5b1d7137Swdenk #define IH_OS_OPENBSD 1 /* OpenBSD */ 32*5b1d7137Swdenk #define IH_OS_NETBSD 2 /* NetBSD */ 33*5b1d7137Swdenk #define IH_OS_FREEBSD 3 /* FreeBSD */ 34*5b1d7137Swdenk #define IH_OS_4_4BSD 4 /* 4.4BSD */ 35*5b1d7137Swdenk #define IH_OS_LINUX 5 /* Linux */ 36*5b1d7137Swdenk #define IH_OS_SVR4 6 /* SVR4 */ 37*5b1d7137Swdenk #define IH_OS_ESIX 7 /* Esix */ 38*5b1d7137Swdenk #define IH_OS_SOLARIS 8 /* Solaris */ 39*5b1d7137Swdenk #define IH_OS_IRIX 9 /* Irix */ 40*5b1d7137Swdenk #define IH_OS_SCO 10 /* SCO */ 41*5b1d7137Swdenk #define IH_OS_DELL 11 /* Dell */ 42*5b1d7137Swdenk #define IH_OS_NCR 12 /* NCR */ 43*5b1d7137Swdenk #define IH_OS_LYNXOS 13 /* LynxOS */ 44*5b1d7137Swdenk #define IH_OS_VXWORKS 14 /* VxWorks */ 45*5b1d7137Swdenk #define IH_OS_PSOS 15 /* pSOS */ 46*5b1d7137Swdenk #define IH_OS_QNX 16 /* QNX */ 47*5b1d7137Swdenk #define IH_OS_U_BOOT 17 /* Firmware */ 48*5b1d7137Swdenk 49*5b1d7137Swdenk /* 50*5b1d7137Swdenk * CPU Architecture Codes (supported by Linux) 51*5b1d7137Swdenk */ 52*5b1d7137Swdenk #define IH_CPU_INVALID 0 /* Invalid CPU */ 53*5b1d7137Swdenk #define IH_CPU_ALPHA 1 /* Alpha */ 54*5b1d7137Swdenk #define IH_CPU_ARM 2 /* ARM */ 55*5b1d7137Swdenk #define IH_CPU_I386 3 /* Intel x86 */ 56*5b1d7137Swdenk #define IH_CPU_IA64 4 /* IA64 */ 57*5b1d7137Swdenk #define IH_CPU_MIPS 5 /* MIPS */ 58*5b1d7137Swdenk #define IH_CPU_MIPS64 6 /* MIPS 64 Bit */ 59*5b1d7137Swdenk #define IH_CPU_PPC 7 /* PowerPC */ 60*5b1d7137Swdenk #define IH_CPU_S390 8 /* IBM S390 */ 61*5b1d7137Swdenk #define IH_CPU_SH 9 /* SuperH */ 62*5b1d7137Swdenk #define IH_CPU_SPARC 10 /* Sparc */ 63*5b1d7137Swdenk #define IH_CPU_SPARC64 11 /* Sparc 64 Bit */ 64*5b1d7137Swdenk 65*5b1d7137Swdenk /* 66*5b1d7137Swdenk * Image Types 67*5b1d7137Swdenk * 68*5b1d7137Swdenk * "Standalone Programs" are directly runnable in the environment 69*5b1d7137Swdenk * provided by U-Boot; it is expected that (if they behave 70*5b1d7137Swdenk * well) you can continue to work in U-Boot after return from 71*5b1d7137Swdenk * the Standalone Program. 72*5b1d7137Swdenk * "OS Kernel Images" are usually images of some Embedded OS which 73*5b1d7137Swdenk * will take over control completely. Usually these programs 74*5b1d7137Swdenk * will install their own set of exception handlers, device 75*5b1d7137Swdenk * drivers, set up the MMU, etc. - this means, that you cannot 76*5b1d7137Swdenk * expect to re-enter U-Boot except by resetting the CPU. 77*5b1d7137Swdenk * "RAMDisk Images" are more or less just data blocks, and their 78*5b1d7137Swdenk * parameters (address, size) are passed to an OS kernel that is 79*5b1d7137Swdenk * being started. 80*5b1d7137Swdenk * "Multi-File Images" contain several images, typically an OS 81*5b1d7137Swdenk * (Linux) kernel image and one or more data images like 82*5b1d7137Swdenk * RAMDisks. This construct is useful for instance when you want 83*5b1d7137Swdenk * to boot over the network using BOOTP etc., where the boot 84*5b1d7137Swdenk * server provides just a single image file, but you want to get 85*5b1d7137Swdenk * for instance an OS kernel and a RAMDisk image. 86*5b1d7137Swdenk * 87*5b1d7137Swdenk * "Multi-File Images" start with a list of image sizes, each 88*5b1d7137Swdenk * image size (in bytes) specified by an "uint32_t" in network 89*5b1d7137Swdenk * byte order. This list is terminated by an "(uint32_t)0". 90*5b1d7137Swdenk * Immediately after the terminating 0 follow the images, one by 91*5b1d7137Swdenk * one, all aligned on "uint32_t" boundaries (size rounded up to 92*5b1d7137Swdenk * a multiple of 4 bytes). 93*5b1d7137Swdenk * 94*5b1d7137Swdenk * "Firmware Images" are binary images containing firmware (like 95*5b1d7137Swdenk * U-Boot or FPGA images) which usually will be programmed to 96*5b1d7137Swdenk * flash memory. 97*5b1d7137Swdenk * 98*5b1d7137Swdenk * "Script files" are command sequences that will be executed by 99*5b1d7137Swdenk * U-Boot's command interpreter; this feature is especially 100*5b1d7137Swdenk * useful when you configure U-Boot to use a real shell (hush) 101*5b1d7137Swdenk * as command interpreter. 102*5b1d7137Swdenk */ 103*5b1d7137Swdenk 104*5b1d7137Swdenk #define IH_TYPE_INVALID 0 /* Invalid Image */ 105*5b1d7137Swdenk #define IH_TYPE_STANDALONE 1 /* Standalone Program */ 106*5b1d7137Swdenk #define IH_TYPE_KERNEL 2 /* OS Kernel Image */ 107*5b1d7137Swdenk #define IH_TYPE_RAMDISK 3 /* RAMDisk Image */ 108*5b1d7137Swdenk #define IH_TYPE_MULTI 4 /* Multi-File Image */ 109*5b1d7137Swdenk #define IH_TYPE_FIRMWARE 5 /* Firmware Image */ 110*5b1d7137Swdenk #define IH_TYPE_SCRIPT 6 /* Script file */ 111*5b1d7137Swdenk 112*5b1d7137Swdenk /* 113*5b1d7137Swdenk * Compression Types 114*5b1d7137Swdenk */ 115*5b1d7137Swdenk #define IH_COMP_NONE 0 /* No Compression Used */ 116*5b1d7137Swdenk #define IH_COMP_GZIP 1 /* gzip Compression Used */ 117*5b1d7137Swdenk #define IH_COMP_BZIP2 2 /* bzip2 Compression Used */ 118*5b1d7137Swdenk 119*5b1d7137Swdenk #define IH_MAGIC 0x27051956 /* Image Magic Number */ 120*5b1d7137Swdenk #define IH_NMLEN 32 /* Image Name Length */ 121*5b1d7137Swdenk 122*5b1d7137Swdenk #ifdef __CYGWIN__ 123*5b1d7137Swdenk typedef unsigned long uint32_t; 124*5b1d7137Swdenk typedef unsigned char uint8_t; 125*5b1d7137Swdenk #endif /* __CYGWIN__ */ 126*5b1d7137Swdenk 127*5b1d7137Swdenk /* 128*5b1d7137Swdenk * all data in network byte order (aka natural aka bigendian) 129*5b1d7137Swdenk */ 130*5b1d7137Swdenk 131*5b1d7137Swdenk typedef struct image_header { 132*5b1d7137Swdenk uint32_t ih_magic; /* Image Header Magic Number */ 133*5b1d7137Swdenk uint32_t ih_hcrc; /* Image Header CRC Checksum */ 134*5b1d7137Swdenk uint32_t ih_time; /* Image Creation Timestamp */ 135*5b1d7137Swdenk uint32_t ih_size; /* Image Data Size */ 136*5b1d7137Swdenk uint32_t ih_load; /* Data Load Address */ 137*5b1d7137Swdenk uint32_t ih_ep; /* Entry Point Address */ 138*5b1d7137Swdenk uint32_t ih_dcrc; /* Image Data CRC Checksum */ 139*5b1d7137Swdenk uint8_t ih_os; /* Operating System */ 140*5b1d7137Swdenk uint8_t ih_arch; /* CPU architecture */ 141*5b1d7137Swdenk uint8_t ih_type; /* Image Type */ 142*5b1d7137Swdenk uint8_t ih_comp; /* Compression Type */ 143*5b1d7137Swdenk uint8_t ih_name[IH_NMLEN]; /* Image Name */ 144*5b1d7137Swdenk } image_header_t; 145*5b1d7137Swdenk 146*5b1d7137Swdenk 147*5b1d7137Swdenk #endif /* __IMAGE_H__ */ 148