]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/redboot/v2_0/src/winceinc.h
Initial revision
[karo-tx-redboot.git] / packages / redboot / v2_0 / src / winceinc.h
1 #ifndef __WINCEINC_H__
2 #define __WINCEINC_H__
3
4 #pragma pack(1)
5
6 // Edbg BOOTME packet structures
7
8 typedef struct 
9 {
10     unsigned int        id;                     // Protocol identifier ("EDBG" on the wire)
11     unsigned char       service;        // Service identifier
12     unsigned char       flags;          // Flags (see defs below)
13     unsigned char       seqNum;         // For detection of dropped packets
14     unsigned char       cmd;            // For administrative messages
15     unsigned char       data[1];        // Cmd specific data starts here (format is determined by 
16                                                                 // Cmd, len is determined by UDP packet size)
17
18 eth_dbg_hdr;
19
20 #define OFFSETOF(s,m)                                   ((unsigned int)&(((s*)0)->m))
21 #define EDBG_DATA_OFFSET                                (OFFSETOF(eth_dbg_hdr, data))
22
23 typedef struct 
24 {
25     unsigned char       versionMajor;   // Bootloader version
26     unsigned char       versionMinor;   // Bootloader version
27     unsigned short      macAddr[3];             // Ether address of device (net byte order)
28     unsigned int        ipAddr;                 // IP address of device (net byte order)
29     char                        platformId[17]; // Platform Id string (NULL terminated)
30     char                        deviceName[17]; // Device name string (NULL terminated). Should include
31                                                                         // platform and number based on Ether address (e.g. Odo42, CEPCLS2346, etc)
32     unsigned char       cpuId;          // CPU identifier (upper nibble = type)
33                                                                         // The following fields were added in CE 3.0 Platform Builder release
34     unsigned char       bootmeVer;     // BOOTME Version.  Must be in the range 2 -> EDBG_CURRENT_BOOTME_VERSION, or
35                                                                         // remaining fields will be ignored by Eshell and defaults will be used.
36     unsigned int        bootFlags;      // Boot Flags
37     unsigned short      downloadPort;   // Download Port (net byte order) (0 -> EDBG_DOWNLOAD_PORT) 
38     unsigned short      svcPort;                // Service Port (net byte order) (0 -> EDBG_SVC_PORT)
39
40 } edbg_bootme_data;
41
42 // Packet size
43
44 #define BOOTME_PKT_SIZE                                 (EDBG_DATA_OFFSET + sizeof(edbg_bootme_data))
45
46 // WinCE .BIN file format signature
47
48 #define CE_BIN_SIGN                             "B000FF\x0A"
49 #define CE_BIN_SIGN_LEN                 7
50
51
52 typedef struct
53 {
54         unsigned char sign[ CE_BIN_SIGN_LEN ];
55         unsigned int rtiPhysAddr;
56         unsigned int rtiPhysLen;
57 }
58 ce_bin_hdr;
59
60 typedef struct
61 {
62         unsigned int physAddr;
63         unsigned int physLen;
64         unsigned int chkSum;
65         unsigned char data[ 1 ];
66 }
67 ce_bin_entry;
68
69 // CE ROM image structures
70
71 #define ROM_SIGNATURE_OFFSET                    0x40         // Offset from the image's physfirst address to the ROM signature.
72 #define ROM_SIGNATURE                                   0x43454345       // Signature
73 #define ROM_TOC_POINTER_OFFSET                  0x44         // Offset from the image's physfirst address to the TOC pointer.
74 #define ROM_TOC_OFFSET_OFFSET                   0x48         // Offset from the image's physfirst address to the TOC offset (from physfirst).
75
76 typedef struct
77 {
78     unsigned int        dllfirst;               // first DLL address
79     unsigned int        dlllast;                // last DLL address
80     unsigned int        physfirst;              // first physical address
81     unsigned int        physlast;               // highest physical address
82     unsigned int        nummods;                // number of TOCentry's
83     unsigned int        ramStart;                               // start of RAM
84     unsigned int        ramFree;                                // start of RAM free space
85     unsigned int        ramEnd;                                 // end of RAM
86     unsigned int        copyEntries;                    // number of copy section entries
87     unsigned int        copyOffset;                             // offset to copy section
88     unsigned int        profileLen;                             // length of PROFentries RAM 
89     unsigned int        profileOffset;                  // offset to PROFentries
90     unsigned int        numfiles;               // number of FILES
91     unsigned int        kernelFlags;                    // optional kernel flags from ROMFLAGS .bib config option
92     unsigned int        fsRamPercent;                   // Percentage of RAM used for filesystem 
93                                                                                         // from FSRAMPERCENT .bib config option
94                                                                                         // byte 0 = #4K chunks/Mbyte of RAM for filesystem 0-2Mbytes 0-255
95                                                                                         // byte 1 = #4K chunks/Mbyte of RAM for filesystem 2-4Mbytes 0-255
96                                                                                         // byte 2 = #4K chunks/Mbyte of RAM for filesystem 4-6Mbytes 0-255
97                                                                                         // byte 3 = #4K chunks/Mbyte of RAM for filesystem > 6Mbytes 0-255
98
99     unsigned int        drivglobStart;                  // device driver global starting address
100     unsigned int        drivglobLen;                    // device driver global length
101     unsigned short      cpuType;                                // CPU (machine) Type
102     unsigned short      miscFlags;                              // Miscellaneous flags
103     void*                       extensions;                             // pointer to ROM Header extensions
104     unsigned int        trackingStart;                  // tracking memory starting address
105     unsigned int        trackingLen;                    // tracking memory ending address
106
107 ce_rom_hdr;
108
109 // Win32 FILETIME strcuture
110
111 typedef struct
112 {
113     unsigned int        loDateTime;
114     unsigned int        hiDateTime;
115
116 ce_file_time;
117
118 // Table Of Contents entry structure
119
120 typedef struct
121 {   
122     unsigned int        fileAttributes;
123     ce_file_time        fileTime;
124     unsigned int        fileSize;
125     char*                       fileName;
126     unsigned int        e32Offset;            // Offset to E32 structure
127     unsigned int        o32Offset;            // Offset to O32 structure
128     unsigned int        loadOffset;           // MODULE load buffer offset
129
130 ce_toc_entry;
131
132 typedef struct  
133 {                                                                       /* Extra information header block      */
134     unsigned int        rva;            /* Virtual relative address of info    */
135     unsigned int        size;           /* Size of information block           */
136 }
137 e32_info;
138
139 #define ROM_EXTRA       9
140
141 typedef struct
142 {
143     unsigned short  e32_objcnt;     /* Number of memory objects            */
144     unsigned short  e32_imageflags; /* Image flags                         */
145     unsigned int        e32_entryrva;   /* Relative virt. addr. of entry point */
146     unsigned int        e32_vbase;      /* Virtual base address of module      */
147     unsigned short  e32_subsysmajor;/* The subsystem major version number  */
148     unsigned short  e32_subsysminor;/* The subsystem minor version number  */
149     unsigned int        e32_stackmax;   /* Maximum stack size                  */
150     unsigned int        e32_vsize;      /* Virtual size of the entire image    */
151     unsigned int        e32_sect14rva;  /* section 14 rva */
152     unsigned int        e32_sect14size; /* section 14 size */
153     unsigned int        e32_timestamp;  /* Time EXE/DLL was created/modified   */
154     e32_info            e32_unit[ ROM_EXTRA ]; /* Array of extra info units      */
155     unsigned short  e32_subsys;     /* The subsystem type                  */
156
157 e32_rom;
158
159 #pragma pack()
160
161
162 #pragma pack(1)
163
164
165 // OS config msg 
166
167 #define EDBG_FL_DBGMSG    0x01  // Debug messages
168 #define EDBG_FL_PPSH      0x02  // Text shell
169 #define EDBG_FL_KDBG      0x04  // Kernel debugger
170 #define EDBG_FL_CLEANBOOT 0x08  // Force a clean boot
171
172 typedef struct
173 {
174     unsigned char       flags;           // Flags that will be used to determine what features are
175                                                                    // enabled over ethernet (saved in driver globals by bootloader)
176     unsigned char       kitlTransport;   // Tells KITL which transport to start
177
178     // The following specify addressing info, only valid if the corresponding
179     // flag is set in the Flags field.
180     
181         unsigned int    dbgMsgIPAddr;
182     unsigned short      dbgMsgPort;
183     unsigned int        ppshIPAddr;
184     unsigned short      ppshPort;
185     unsigned int        kdbgIPAddr;
186     unsigned short      kdbgPort;
187     
188 } edbg_os_config_data;
189
190
191
192 // Driver globals structure
193 // Used to pass driver globals info from RedBoot to WinCE core
194
195 #define DRV_GLB_SIGNATURE                               0x424C4744 // "DGLB"
196
197 typedef struct
198 {
199         unsigned int            signature;              // Signature
200         unsigned int            flags;                  // Misc flags
201         unsigned int            ipAddr;                 // IP address of device (net byte order)
202         unsigned int            ipGate;                 // IP address of gateway (net byte order)
203         unsigned int            ipMask;                 // Subnet mask
204         unsigned short          macAddr[3];             // Ether address of device (net byte order)
205         edbg_os_config_data edbgConfig;         // EDBG services info
206
207 #ifdef CYGPKG_HAL_ARM_XSCALE_TRITON270_EQT32
208
209         unsigned int            contrastDefault;
210         unsigned int            contrastBand;
211         unsigned int            backlight;
212         unsigned int            backlightOffset;
213
214 #endif
215 }
216 ce_driver_globals;
217
218
219 #pragma pack()
220
221
222 // Default UDP ports used for Ethernet download and EDBG messages.  May be overriden
223 // by device in BOOTME message.
224
225 #define  EDBG_DOWNLOAD_PORT                             980   // For downloading images to bootloader via TFTP
226 #define  EDBG_SVC_PORT                                  981   // Other types of transfers
227
228 // Byte string for Id field (note - must not conflict with valid TFTP
229 // opcodes (0-5), as we share the download port with TFTP)
230
231 #define EDBG_ID                                                 0x47424445 // "EDBG"
232
233 // Defs for reserved values of the Service field
234
235 #define EDBG_SVC_DBGMSG                                 0   // Debug messages
236 #define EDBG_SVC_PPSH                                   1   // Text shell and PPFS file system
237 #define EDBG_SVC_KDBG                                   2   // Kernel debugger
238 #define EDBG_SVC_ADMIN                                  0xFF  // Administrative messages 
239
240 // Commands
241
242 #define EDBG_CMD_READ_REQ                               1       // Read request
243 #define EDBG_CMD_WRITE_REQ                              2       // Write request
244 #define EDBG_CMD_WRITE                                  3       // Host ack
245 #define EDBG_CMD_WRITE_ACK                              4       // Target ack
246 #define EDBG_CMD_ERROR                                  5       // Error
247
248 // Service Ids from 3-FE are used for user apps
249
250 #define NUM_DFLT_EDBG_SERVICES                  3  
251
252 // Size of send and receive windows (except for stop and wait mode)
253
254 #define EDBG_WINDOW_SIZE                                8
255
256 // The window size can be negotiated up to this amount if a client provides
257 // enough memory.
258 #define EDBG_MAX_WINDOW_SIZE                    16
259
260 // Max size for an EDBG frame.  Based on ethernet MTU - protocol overhead.
261 // Limited to one MTU because we don't do IP fragmentation on device.
262
263 #define EDBG_MAX_DATA_SIZE                              1446
264
265 // Defs for Flags field.
266 #define EDBG_FL_FROM_DEV                                0x01   // Set if message is from the device
267 #define EDBG_FL_NACK                                    0x02   // Set if frame is a nack
268 #define EDBG_FL_ACK                                             0x04   // Set if frame is an ack
269 #define EDBG_FL_SYNC                                    0x08   // Can be used to reset sequence # to 0
270 #define EDBG_FL_ADMIN_RESP                              0x10    // For admin messages, indicate whether this is a response
271
272 // Definitions for Cmd field (used for administrative messages)
273 // Msgs from device
274
275 #define EDBG_CMD_BOOTME                                 0   // Initial bootup message from device
276
277 // Msgs from PC
278
279 #define EDBG_CMD_SETDEBUG                               1       // Used to set debug zones on device (TBD)
280 #define EDBG_CMD_JUMPIMG                                2       // Command to tell bootloader to jump to existing
281                                                                                         // flash or RAM image. Data is same as CMD_OS_CONFIG.
282 #define EDBG_CMD_OS_CONFIG                              3       // Configure OS for debug ethernet services
283 #define EDBG_CMD_QUERYINFO                              4       // "Ping" device, and return information (same fmt as bootme)
284 #define EDBG_CMD_RESET                                  5       // Command to have platform perform SW reset (e.g. so it
285                                                                                         // can be reprogrammed).  Support for this command is
286                                                                                         // processor dependant, and may not be implemented
287                                                                                         // on all platforms (requires HW mods for Odo).
288
289 // Msgs from device or PC 
290
291 #define EDBG_CMD_SVC_CONFIG                             6
292 #define EDBG_CMD_SVC_DATA                               7
293
294 #define EDBG_CMD_DEBUGBREAK                             8 // Break into debugger
295
296 // Structures for Data portion of EDBG packets
297
298 #define EDBG_MAX_DEV_NAMELEN                    16
299
300 // BOOTME message - Devices broadcast this message when booted to request configuration
301
302 #define EDBG_CURRENT_BOOTME_VERSION             2
303
304 //
305 // Capability and boot Flags for dwBootFlags in EDBG_BOOTME_DATA
306 // LOWORD for boot flags, HIWORD for capability flags
307 //
308
309 // Always download image
310
311 #define EDBG_BOOTFLAG_FORCE_DOWNLOAD    0x00000001  
312
313 // Support passive-kitl
314
315 #define EDBG_CAPS_PASSIVEKITL           0x00010000  
316
317 // Defs for CPUId
318
319 #define EDBG_CPU_TYPE_SHX                               0x10
320 #define EDBG_CPU_TYPE_MIPS                              0x20
321 #define EDBG_CPU_TYPE_X86                               0x30
322 #define EDBG_CPU_TYPE_ARM                               0x40
323 #define EDBG_CPU_TYPE_PPC                               0x50
324 #define EDBG_CPU_TYPE_THUMB                             0x60
325     
326 #define EDBG_CPU_SH3                                    (EDBG_CPU_TYPE_SHX  | 0)
327 #define EDBG_CPU_SH4                                    (EDBG_CPU_TYPE_SHX  | 1)
328 #define EDBG_CPU_R3000                                  (EDBG_CPU_TYPE_MIPS | 0)
329 #define EDBG_CPU_R4101                                  (EDBG_CPU_TYPE_MIPS | 1)
330 #define EDBG_CPU_R4102                                  (EDBG_CPU_TYPE_MIPS | 2)
331 #define EDBG_CPU_R4111                                  (EDBG_CPU_TYPE_MIPS | 3)
332 #define EDBG_CPU_R4200                                  (EDBG_CPU_TYPE_MIPS | 4)
333 #define EDBG_CPU_R4300                                  (EDBG_CPU_TYPE_MIPS | 5)
334 #define EDBG_CPU_R5230                                  (EDBG_CPU_TYPE_MIPS | 6)
335 #define EDBG_CPU_R5432                                  (EDBG_CPU_TYPE_MIPS | 7)
336 #define EDBG_CPU_i486                                   (EDBG_CPU_TYPE_X86  | 0)
337 #define EDBG_CPU_SA1100                                 (EDBG_CPU_TYPE_ARM | 0)
338 #define EDBG_CPU_ARM720                                 (EDBG_CPU_TYPE_ARM | 1)
339 #define EDBG_CPU_PPC821                                 (EDBG_CPU_TYPE_PPC | 0)
340 #define EDBG_CPU_PPC403                                 (EDBG_CPU_TYPE_PPC | 1)
341 #define EDBG_CPU_THUMB720                               (EDBG_CPU_TYPE_THUMB | 0)
342
343 #endif
344
345
346