-
Notifications
You must be signed in to change notification settings - Fork 0
/
hostdl_packet.h
178 lines (143 loc) · 6.26 KB
/
hostdl_packet.h
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#ifndef _HOSTDL_PACKET_H_
#define _HOSTDL_PACKET_H_
/*==================================================================
*
* FILE: hostdl_packet.h
*
* SERVICES: None
*
* DESCRIPTION:
* This header file contains externalized definitions from the packet layer.
* It is used by the stream buffering layer.
*
* Copyright (c) 2008-2010, 2013 Qualcomm Technologies Incorporated.
* All Rights Reserved.
* QUALCOMM Confidential and Proprietary
*==================================================================*/
/*===================================================================
*
* Include Files
*
====================================================================*/
/* Maximum data length. */
/* Currently QPST tool supports a maximum packet length of 4096. This
* value can be tuned to use bigger packet sizes for better performance
* if the QPST tool supports bigger size packets */
#define UNFRAMED_MAX_DATA_LENGTH 1024
/* Older versions of QPST only supported packet sizes up to 1024 bytes in
* length. This value is used in the hello packet to support older versions
* of QPST
*/
#define FRAMED_MAX_DATA_LENGTH 1024
/* Number of packets. NUMBER_OF_PACKETS * UNFRAMED_MAX_DATA_LENGTH will be our
maximum window size. */
#define NUMBER_OF_PACKETS 2
/* ----------------------------------------------------------------------
* Defines used to calculate size of reply buffer to QPST and also
* number of Flash part sectors that will fit into that reply buffer.
* Code in packet layer will cause a fatal error if the size of the
* buffer is exceeded at run time. Code in NOR flash layer will cause
* a fatal error at compile time if number of sectors is exceeded.
----------------------------------------------------------------------*/
#define HOST_REPLY_BUFFER_SIZE 1024
/* Fixed size elements of Parameter Request Reply packet */
#define PACKET_OVERHEAD_SIZE 7
#define CMD_SIZE 1
#define MAGIC_SIZE 32
#define VERSION_SIZE 1
#define COMPAT_VERSION_SIZE 1
#define BLOCK_SIZE_SIZE 4
#define FLASH_BASE_SIZE 4
#define FLASH_ID_LEN_SIZE 1
#define WINDOW_SIZE_SIZE 2
#define NUM_SECTORS_SIZE 2
#define FEATURE_BITS_SIZE 4
/* Variable size element of Parameter Request Reply packet. The length
* of the Flash ID string is indeterminate, but currently the largest is
* 16 bytes, so allow double this size for growth. */
#define FLASH_ID_STRING_SIZE 32
/* Add up all the parts except sectors */
#define REPLY_FIXED_SIZE (PACKET_OVERHEAD_SIZE+CMD_SIZE+MAGIC_SIZE+ \
VERSION_SIZE+COMPAT_VERSION_SIZE+BLOCK_SIZE_SIZE+FLASH_BASE_SIZE+ \
FLASH_ID_LEN_SIZE+WINDOW_SIZE_SIZE+NUM_SECTORS_SIZE+ \
FEATURE_BITS_SIZE+FLASH_ID_STRING_SIZE)
#define REPLY_BUFFER_SIZE HOST_REPLY_BUFFER_SIZE
/* Calculate amount of 4 byte sector sizes which fit in remaining
* portion of parameter request reply
*/
#define MAX_SECTORS ((REPLY_BUFFER_SIZE - REPLY_FIXED_SIZE) / 4)
#define DEVICE_UNKNOWN 0xFF
/* Maximum packet size. 1 for packet type. 4 for length. 2 for CRC.
* 9 for any other overhead */
#define MAX_PACKET_SIZE (UNFRAMED_MAX_DATA_LENGTH + 1 + 4 + 2 + 9)
#define STREAM_DLOAD_MAX_VER 0x04
#define STREAM_DLOAD_MIN_VER 0x02
#define UNFRAMED_DLOAD_MIN_VER 0x04
/* UART does not support protocol versions > 3 because it does not have
* hardware error checking and CRC as required by the unframed stream write
* command
*/
#define UART_DLOAD_MAX_VER 0x03
#if 0
#if defined(USE_UART_ONLY) && (STREAM_DLOAD_MAX_VER > UART_DLOAD_MAX_VER)
#warning UART does not support protocol versions beyond UART_DLOAD_MAX_VER. \
Reverting to an earlier protocol version.
#undef STREAM_DLOAD_MAX_VER
#define STREAM_DLOAD_MAX_VER UART_DLOAD_MAX_VER
#endif
#endif
#define FEATURE_UNCOMPRESSED_DLOAD 0x00000001
/* We only support these on NAND targets */
#define FEATURE_NAND_PRIMARY_IMAGE 0x00000002
#define FEATURE_NAND_BOOTLOADER_IMAGE 0x00000004
#define FEATURE_NAND_MULTI_IMAGE 0x00000008
/* This version of the downloader does not support the old NAND two
* image mode, only Multi-Image
*/
#define SUPPORTED_FEATURES \
(FEATURE_UNCOMPRESSED_DLOAD | FEATURE_NAND_MULTI_IMAGE)
#define READ_LEN 7
/* Command/Rsp codes, DUMMY_RSP should alwaus be the last one */
#define HELLO_REQ 0x01
#define HELLO_RSP 0x02
#define READ_RSP 0x04
#define WRITE_RSP 0x06
#define STREAM_WRITE_RSP 0x08
#define NOP_RSP 0x0A
#define RESET_RSP 0x0C
#define ERROR_RSP 0x0D
#define CMD_LOG 0x0E
#define UNLOCK_RSP 0x10
#define PWRDOWN_RSP 0x12
#define OPEN_RSP 0x14
#define CLOSE_RSP 0x16
#define SECURITY_MODE_RSP 0x18
#define PARTITION_TABLE_RSP 0x1A
#define OPEN_MULTI_IMAGE_RSP 0x1C
#define ERASE_RSP 0x1E
/* Gap here for commands implemented in QPST but not phone side */
#define UNFRAMED_STREAM_WRITE_CMD 0x30 /* Needed for command parsing */
#define UNFRAMED_STREAM_WRITE_RSP 0x31
#define DUMMY_RSP 0x32
/* Only dispatch commands if they fall in the valid command range. */
#define FIRST_COMMAND 0x01
#define LAST_COMMAND 0x31
/* Check to make sure that LAST_COMMAND is in agreement */
#if (DUMMY_RSP != (LAST_COMMAND + 1))
#error LAST_COMMAND and DUMMY_RSP mismatch. Bailing out!
#endif
/* Length of buffer for size message back to host. Increase this
* value if you change the size of size_msg_fixed. Used by the
* function log_size_msg().
*/
#define SIZE_MSG_LEN 64
/* Byte offset defines for Hello packet response */
#define HELLO_CMD_OFFSET 0
#define HELLO_MAGIC_NUM_OFFSET 1
#define HELLO_MAX_VER_OFFSET 33
#define HELLO_MIN_VER_OFFSET 34
#define HELLO_MAX_DATA_SZ_1_OFFSET 35
#define HELLO_MAX_DATA_SZ_2_OFFSET 36
#define HELLO_MAX_DATA_SZ_3_OFFSET 37
#define HELLO_MAX_DATA_SZ_4_OFFSET 38
#endif /* _HOSTDL_PACKET_H_ */