summaryrefslogtreecommitdiff
path: root/packages/neuros-pkggen/files/package.h
blob: 225c53d12955b9b049ffb30b9d3f2e4f0886bfe4 (plain)
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
143
144
145
/*
 *  Copyright(C) 2005 Neuros Technology International LLC. 
 *               <www.neurostechnology.com>
 *
 *
 *  This program 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 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that, in addition to its 
 *  original purpose to support Neuros hardware, it will be useful 
 *  otherwise, 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 this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 *****************************************************************************/
/** package.h
 *
 * Some structure for package.c
 *
 * 02/22/2002	        T.Qiu	
 *			Initial creation.
 *  05/15/2008          JWU
 *                      change for osd2.0
 */

#ifndef PACKAGE_H
#define PACKAGE_H

#define VERSION "3.01"
#define NAMELEN   32
#define VERLEN    20 /* should same as the uboot */
#define DESCLEN   256

/* image type*/
#define IH_TYPE_INVALID		0	/* Invalid Image		*/
#define IH_TYPE_STANDALONE	1	/* Standalone Program		*/
#define IH_TYPE_KERNEL		2	/* OS Kernel Image		*/
#define IH_TYPE_RAMDISK		3	/* RAMDisk Image		*/
#define IH_TYPE_MULTI		4	/* Multi-File Image		*/
#define IH_TYPE_FIRMWARE	5	/* Firmware Image		*/
#define IH_TYPE_SCRIPT		6	/* Script file			*/
#define IH_TYPE_FILESYSTEM	7	/* Filesystem Image (any type)	*/
#define IH_TYPE_FLATDT		8	/* Binary Flat Device Tree Blob	*/
#define IH_TYPE_UBOOT           9
#define IH_TYPE_ROOTFS          10

/* addr in flash */
#define UBOOT_ADDR_START      0x00018000
#define UBOOT_SIZE                  (1*1024*1024)
#define UBOOT_ADDR_END        (UBOOT_ADDR_START+UBOOT_SIZE-1)
#define KERNEL_ADDR_START    (UBOOT_ADDR_END+1)
#define KERNEL_SIZE                 (5*1024*1024)
#define KERNEL_ADDR_END       (KERNEL_ADDR_START+KERNEL_SIZE-1)
#define ROOTFS_ADDR_START    (KERNEL_ADDR_END+1)
#define ROOTFS_ADDR_END       (256*1024*1024 - 1)

#define UBOOT_FILE_NAME   "u-boot.bin"
#define KERNEL_FILE_NAME  "kernel.img"
#define ROOTFS_FILE_NAME  "rootfs.img"
#define SCRIPT_FILE_NAME  "env.img"

#define UBOOT_VER_FILE    "u-boot.version"
#define KERNEL_VER_FILE   "uImage.version"
#define ROOTFS_VER_FILE   "rootfs.version"

typedef unsigned char  uint8;
typedef unsigned short uint16;
typedef unsigned int   uint32;
typedef unsigned long  uint64;

#define SWAP_LONG(x) \
	((uint32)( \
		(((uint32)(x) & (uint32)0x000000ffUL) << 24) | \
		(((uint32)(x) & (uint32)0x0000ff00UL) <<  8) | \
		(((uint32)(x) & (uint32)0x00ff0000UL) >>  8) | \
		(((uint32)(x) & (uint32)0xff000000UL) >> 24) ))

#define SWAP_SHORT(x) \
         ((uint16)(   \
	         (((uint16)(x) & (uint16)0x00ff) << 8) | \
	         (((uint16)(x) & (uint16)0xff00) >> 8))

#define     ntohl(a)	SWAP_LONG(a)
#define     htonl(a)	SWAP_LONG(a)
#define     ntohs(a)    SWAP_SHORT(a)
#define     htons(a)    SWAP_SHORT(a)

typedef struct packet_header{
  uint32    p_headsize;       /* package header size         */
  uint32    p_reserve;        /* Bit[3]:1 OSD2.0 upk */
  uint32    p_headcrc;        /* package header crc checksum */
  uint32    p_datasize;       /* package data size           */
  uint32    p_datacrc;        /* package data crc checksum   */
  uint8     p_name[NAMELEN];  /* package name                */
  uint8     p_vuboot[VERLEN]; /* version of uboot which depend on */
  uint8     p_vkernel[VERLEN];/* version of kernel which depend on*/
  uint8     p_vrootfs[VERLEN];/* version of rootfs which depend on*/
  uint32    p_imagenum;       /* num of the images in package*/
                              /* follow is image info */
}package_header_t;

typedef struct image_info{
  uint32    i_type;           /* image type                */
  uint32    i_imagesize;      /* size of image             */
  uint32    i_startaddr_p;    /* start address in packeage */
  uint32    i_startaddr_f;    /* start address in flash    */
  uint32    i_endaddr_f;      /* end address in flash      */
  uint8     i_name[NAMELEN];  /* image name                */
  uint8     i_version[VERLEN];/* image version             */
}image_info_t;

typedef struct image_header {
	uint32	        ih_magic;	/* Image Header Magic Number	*/
	uint32	        ih_hcrc;	/* Image Header CRC Checksum	*/
	uint32	        ih_time;	/* Image Creation Timestamp	*/
	uint32	        ih_size;	/* Image Data Size		*/
	uint32	        ih_load;	/* Data	 Load  Address		*/
	uint32	        ih_ep;		/* Entry Point Address		*/
        uint32	        ih_dcrc;	/* Image Data CRC Checksum	*/
	uint8		ih_os;		/* Operating System		*/
	uint8		ih_arch;	/* CPU architecture		*/
	uint8		ih_type;	/* Image Type			*/
	uint8		ih_comp;	/* Compression Type		*/
	uint8		ih_name[NAMELEN];	/* Image Name		*/
} image_header_t;

#define PACKAGE_ID "neuros-osd2.0"
typedef struct version_struct{
  uint8  upk_desc[DESCLEN];
  uint8  pack_id[NAMELEN];
  uint8  os_ver [VERLEN];
  uint8  app_ver[VERLEN];
}version_info;


extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned int);

#endif