6 // Edbg BOOTME packet structures
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)
20 #define OFFSETOF(s,m) ((unsigned int)&(((s*)0)->m))
21 #define EDBG_DATA_OFFSET (OFFSETOF(eth_dbg_hdr, data))
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)
44 #define BOOTME_PKT_SIZE (EDBG_DATA_OFFSET + sizeof(edbg_bootme_data))
46 // WinCE .BIN file format signature
48 #define CE_BIN_SIGN "B000FF\x0A"
49 #define CE_BIN_SIGN_LEN 7
54 unsigned char sign[ CE_BIN_SIGN_LEN ];
55 unsigned int rtiPhysAddr;
56 unsigned int rtiPhysLen;
62 unsigned int physAddr;
65 unsigned char data[ 1 ];
69 // CE ROM image structures
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).
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
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
109 // Win32 FILETIME strcuture
113 unsigned int loDateTime;
114 unsigned int hiDateTime;
118 // Table Of Contents entry structure
122 unsigned int fileAttributes;
123 ce_file_time fileTime;
124 unsigned int fileSize;
126 unsigned int e32Offset; // Offset to E32 structure
127 unsigned int o32Offset; // Offset to O32 structure
128 unsigned int loadOffset; // MODULE load buffer offset
133 { /* Extra information header block */
134 unsigned int rva; /* Virtual relative address of info */
135 unsigned int size; /* Size of information block */
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 */
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
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
178 // The following specify addressing info, only valid if the corresponding
179 // flag is set in the Flags field.
181 unsigned int dbgMsgIPAddr;
182 unsigned short dbgMsgPort;
183 unsigned int ppshIPAddr;
184 unsigned short ppshPort;
185 unsigned int kdbgIPAddr;
186 unsigned short kdbgPort;
188 } edbg_os_config_data;
192 // Driver globals structure
193 // Used to pass driver globals info from RedBoot to WinCE core
195 #define DRV_GLB_SIGNATURE 0x424C4744 // "DGLB"
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
207 #ifdef CYGPKG_HAL_ARM_XSCALE_TRITON270_EQT32
209 unsigned int contrastDefault;
210 unsigned int contrastBand;
211 unsigned int backlight;
212 unsigned int backlightOffset;
222 // Default UDP ports used for Ethernet download and EDBG messages. May be overriden
223 // by device in BOOTME message.
225 #define EDBG_DOWNLOAD_PORT 980 // For downloading images to bootloader via TFTP
226 #define EDBG_SVC_PORT 981 // Other types of transfers
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)
231 #define EDBG_ID 0x47424445 // "EDBG"
233 // Defs for reserved values of the Service field
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
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
248 // Service Ids from 3-FE are used for user apps
250 #define NUM_DFLT_EDBG_SERVICES 3
252 // Size of send and receive windows (except for stop and wait mode)
254 #define EDBG_WINDOW_SIZE 8
256 // The window size can be negotiated up to this amount if a client provides
258 #define EDBG_MAX_WINDOW_SIZE 16
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.
263 #define EDBG_MAX_DATA_SIZE 1446
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
272 // Definitions for Cmd field (used for administrative messages)
275 #define EDBG_CMD_BOOTME 0 // Initial bootup message from device
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).
289 // Msgs from device or PC
291 #define EDBG_CMD_SVC_CONFIG 6
292 #define EDBG_CMD_SVC_DATA 7
294 #define EDBG_CMD_DEBUGBREAK 8 // Break into debugger
296 // Structures for Data portion of EDBG packets
298 #define EDBG_MAX_DEV_NAMELEN 16
300 // BOOTME message - Devices broadcast this message when booted to request configuration
302 #define EDBG_CURRENT_BOOTME_VERSION 2
305 // Capability and boot Flags for dwBootFlags in EDBG_BOOTME_DATA
306 // LOWORD for boot flags, HIWORD for capability flags
309 // Always download image
311 #define EDBG_BOOTFLAG_FORCE_DOWNLOAD 0x00000001
313 // Support passive-kitl
315 #define EDBG_CAPS_PASSIVEKITL 0x00010000
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
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)