1 #ifndef __PLT_H
2 #define __PLT_H
4 #include <linux/ethtool.h>
6 #ifdef ANDROID
7 #define CURRENT_NVS_NAME "/system/etc/firmware/ti-connectivity/wl12xx-nvs.bin"
8 #define INSMOD_PATH "/system/bin/insmod"
9 #define RMMOD_PATH "/system/bin/rmmod"
10 #else
11 #define CURRENT_NVS_NAME "/lib/firmware/ti-connectivity/wl12xx-nvs.bin"
12 #define INSMOD_PATH "/sbin/insmod"
13 #define RMMOD_PATH "/sbin/rmmod"
14 #endif
15 #define NEW_NVS_NAME "./new-nvs.bin"
16 #define NVS_FILE_SIZE_127X 0x390
17 #define NVS_FILE_SIZE_128X 0x459
19 /* NVS definition start here */
21 #define NVS_TX_TYPE_INDEX 0
23 #define START_TYPE_INDEX_IN_TLV 0
24 #define TLV_TYPE_LENGTH 1
25 #define START_LENGTH_INDEX \
26 (START_TYPE_INDEX_IN_TLV + TLV_TYPE_LENGTH) /* 1 */
27 #define TLV_LENGTH_LENGTH 2
28 #define START_PARAM_INDEX \
29 (START_LENGTH_INDEX + TLV_LENGTH_LENGTH) /* 3 */
31 #define NVS_MAC_FIRST_LENGTH_INDEX 0
32 #define NVS_MAC_FIRST_LENGHT_VALUE 1
34 #define NVS_MAC_L_ADDRESS_INDEX \
35 ((NVS_MAC_FIRST_LENGTH_INDEX) + 1) /* 1*/
36 #define NVS_MAC_L_ADDRESS_LENGTH 2
38 #define NVS_MAC_L_VALUE_INDEX \
39 ((NVS_MAC_L_ADDRESS_INDEX) + (NVS_MAC_L_ADDRESS_LENGTH)) /* 3 */
41 #define NVS_MAC_L_VALUE_LENGTH 4
43 #define NVS_MAC_SECONDE_LENGTH_INDEX \
44 ((NVS_MAC_L_VALUE_INDEX) + 4) /* 7 */
45 #define NVS_MAC_SECONDE_LENGHT_VALUE 1
47 #define NVS_MAC_H_ADDRESS_INDEX \
48 ((NVS_MAC_SECONDE_LENGTH_INDEX) + 1) /* 8*/
49 #define NVS_MAC_H_ADDRESS_LENGTH 2
51 #define NVS_MAC_H_VALUE_INDEX \
52 ((NVS_MAC_H_ADDRESS_INDEX) + (NVS_MAC_H_ADDRESS_LENGTH)) /* 10 */
53 #define NVS_MAC_H_VALUE_LENGTH 4
55 #define NVS_END_BURST_TRANSACTION_INDEX \
56 ((NVS_MAC_H_VALUE_INDEX) + (NVS_MAC_H_VALUE_LENGTH)) /* 14 */
57 #define NVS_END_BURST_TRANSACTION_VALUE 0
58 #define NVS_END_BURST_TRANSACTION_LENGTH 7
60 #define NVS_ALING_TLV_START_ADDRESS_INDEX \
61 ((NVS_END_BURST_TRANSACTION_INDEX) + \
62 (NVS_END_BURST_TRANSACTION_LENGTH)) /* 21 */
63 #define NVS_ALING_TLV_START_ADDRESS_VALUE 0
64 #define NVS_ALING_TLV_START_ADDRESS_LENGTH 3
67 /* NVS pre TLV length */
68 #define NVS_PRE_PARAMETERS_LENGTH \
69 ((NVS_ALING_TLV_START_ADDRESS_INDEX) + \
70 (NVS_ALING_TLV_START_ADDRESS_LENGTH)) /* 24 */
72 /* NVS P2G table */
73 #define NVS_TX_P2G_TABLE_LENGTH \
74 ((NUMBER_OF_SUB_BANDS_E) * 1 /* byte */) /* 8 */
76 /* NVS PPA table */
77 #define NVS_TX_PPA_STEPS_TABLE_LENGTH \
78 ((NUMBER_OF_SUB_BANDS_E) * ((TXPWR_CFG0__VGA_STEP__NUMBER_OF_STEPS_E) \
79 - 1) * 1 /* byte */) /* 32 */
81 /* NVS version 1 TX PD curve table length */
82 #define NVS_TX_PD_TABLE_LENGTH_NVS_V1 (1 /* byte to set size of table */ + \
83 ((NUMBER_OF_SUB_BANDS_E) * (2 /* 1 byte offset, 1 byte low range */ + \
84 2 /* first index in table */ + (((SIZE_OF_POWER_DETECTOR_TABLE) - 1) * \
85 1 /* 1 byte */)))) /* 233 */
87 /* NVS version 2 TX PD curve table length */
88 #define NVS_TX_PD_TABLE_LENGTH_NVS_V2 \
89 ((NUMBER_OF_SUB_BANDS_E) * (12 /* 12index of one byte -2 dBm - 9dBm */ +\
90 28 /* 14 indexes of 2 byte -3dBm, 10dBm - 22 dBm */)) /* 320 */
92 /* NVS version 1 TX parameters Length */
93 #define NVS_TX_PARAM_LENGTH_NVS_V1 \
94 ((NVS_TX_P2G_TABLE_LENGTH) + (NVS_TX_PPA_STEPS_TABLE_LENGTH) +\
95 (NVS_TX_PD_TABLE_LENGTH_NVS_V1)) /* 273 */
97 /* NVS version 2 TX parameters Length */
98 #define NVS_TX_PARAM_LENGTH_NVS_V2 \
99 ((NVS_TX_P2G_TABLE_LENGTH) + (NVS_TX_PPA_STEPS_TABLE_LENGTH) +\
100 (NVS_TX_PD_TABLE_LENGTH_NVS_V2) +\
101 (NUMBER_OF_RADIO_CHANNEL_INDEXS_E /* for Per Channel power Gain Offset tabl */))
103 /* NVS TX version */
104 /* #define NVS_TX_PARAM_LENGTH NVS_TX_PARAM_LENGTH_NVS_V2 */
105 #define NVS_TX_PARAM_LENGTH 0x199
107 /* NVS RX version */
108 #define NVS_RX_PARAM_LENGTH NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E /* 19 */
110 /* NVS version parameter length */
111 #define NVS_VERSION_PARAMETER_LENGTH 3
113 /* NVS max length */
114 /* original ((NVS_TOTAL_LENGTH) + 4 - ((NVS_TOTAL_LENGTH) % 4)) */
115 #define NVS_TOTAL_LENGTH 500
117 /* TLV max length */
118 #define MAX_TLV_LENGTH NVS_TOTAL_LENGTH
120 #define MAX_NVS_VERSION_LENGTH 12
122 enum wl1271_tm_commands {
123 WL1271_TM_CMD_UNSPEC,
124 WL1271_TM_CMD_TEST,
125 WL1271_TM_CMD_INTERROGATE,
126 WL1271_TM_CMD_CONFIGURE,
127 WL1271_TM_CMD_NVS_PUSH,
128 WL1271_TM_CMD_SET_PLT_MODE,
129 WL1271_TM_CMD_RECOVER,
130 WL1271_TM_CMD_GET_MAC,
132 __WL1271_TM_CMD_AFTER_LAST
133 };
135 enum wl1271_tm_attrs {
136 WL1271_TM_ATTR_UNSPEC,
137 WL1271_TM_ATTR_CMD_ID,
138 WL1271_TM_ATTR_ANSWER,
139 WL1271_TM_ATTR_DATA,
140 WL1271_TM_ATTR_IE_ID,
141 WL1271_TM_ATTR_PLT_MODE,
142 __WL1271_TM_ATTR_AFTER_LAST
143 };
145 #define WL1271_TM_ATTR_MAX (__WL1271_TM_ATTR_AFTER_LAST - 1)
147 enum wl1271_test_cmds {
148 TEST_CMD_PD_BUFFER_CAL = 0x1, /* TX PLT */
149 TEST_CMD_P2G_CAL, /* TX BiP */
150 TEST_CMD_RX_PLT_ENTER,
151 TEST_CMD_RX_PLT_CAL, /* RSSI Cal */
152 TEST_CMD_RX_PLT_EXIT,
153 TEST_CMD_RX_PLT_GET,
154 TEST_CMD_FCC, /* Continuous TX */
155 TEST_CMD_TELEC, /* Carrier wave in a specific channel and band */
156 TEST_CMD_STOP_TX, /* Stop FCC or TELEC */
157 TEST_CMD_PLT_TEMPLATE, /* define Template for TX */
158 TEST_CMD_PLT_GAIN_ADJUST,
159 TEST_CMD_PLT_GAIN_GET,
160 TEST_CMD_CHANNEL_TUNE,
161 TEST_CMD_FREE_RUN_RSSI, /* Free running RSSI measurement */
162 TEST_CMD_DEBUG, /* test command for debug using the struct: */
163 TEST_CMD_CLPC_COMMANDS,
164 RESERVED_4,
165 TEST_CMD_RX_STAT_STOP,
166 TEST_CMD_RX_STAT_START,
167 TEST_CMD_RX_STAT_RESET,
168 TEST_CMD_RX_STAT_GET,
169 TEST_CMD_LOOPBACK_START, /* for FW Test Debug */
170 TEST_CMD_LOOPBACK_STOP, /* for FW Test Debug */
171 TEST_CMD_GET_FW_VERSIONS,
172 TEST_CMD_INI_FILE_RADIO_PARAM,
173 TEST_CMD_RUN_CALIBRATION_TYPE,
174 TEST_CMD_TX_GAIN_ADJUST,
175 TEST_CMD_UPDATE_PD_BUFFER_ERRORS,
176 TEST_CMD_UPDATE_PD_REFERENCE_POINT,
177 TEST_CMD_INI_FILE_GENERAL_PARAM,
178 TEST_CMD_SET_EFUSE,
179 TEST_CMD_GET_EFUSE,
180 TEST_CMD_TEST_TONE,
181 TEST_CMD_POWER_MODE,
182 TEST_CMD_SMART_REFLEX,
183 TEST_CMD_CHANNEL_RESPONSE,
184 TEST_CMD_DCO_ITRIM_FEATURE,
185 TEST_CMD_INI_FILE_RF_EXTENDED_PARAM, /* !!! Not exists in 128x */
186 TEST_CMD_SET_NVS_VERSION, /* For wl128x, the value is minus 1 */
187 MAX_TEST_CMD_ID = 0xFF
188 };
190 enum plt_mode {
191 PLT_OFF = 0,
192 PLT_ON = 1,
193 PLT_FEM_DETECT = 2,
194 PLT_CHIP_AWAKE = 3,
195 };
197 struct wl1271_cmd_header {
198 __u16 id;
199 __u16 status;
200 /* payload */
201 unsigned char data[0];
202 } __attribute__((packed));
204 struct wl1271_cmd_test_header {
205 unsigned char id;
206 unsigned char padding[3];
207 } __attribute__((packed));
209 struct wl1271_cmd_cal_channel_tune {
210 struct wl1271_cmd_header header;
212 struct wl1271_cmd_test_header test;
214 unsigned char band;
215 unsigned char channel;
217 __le16 radio_status;
218 } __attribute__((packed));
220 struct wl1271_cmd_cal_update_ref_point {
221 struct wl1271_cmd_header header;
223 struct wl1271_cmd_test_header test;
225 __le32 ref_power;
226 __le32 ref_detector;
227 unsigned char sub_band;
228 unsigned char padding[3];
229 } __attribute__((packed));
231 struct wl1271_cmd_cal_tx_tone {
232 struct wl1271_cmd_header header;
234 struct wl1271_cmd_test_header test;
236 __le16 radio_status;
237 unsigned char padding[2];
238 __le32 power;
239 unsigned char tone_type;
240 unsigned char unused[11];
241 } __attribute__((packed));
243 #define NVS_VERSION_2 2
244 #define NVS_VERSION_2_1 21
246 struct wl1271_cmd_set_nvs_ver {
247 struct wl1271_cmd_header header;
249 struct wl1271_cmd_test_header test;
251 __le16 radio_status;
253 unsigned char nvs_ver;
254 unsigned char padding;
255 } __attribute__((packed));
257 struct wl1271_cmd_cal_p2g {
258 struct wl1271_cmd_header header;
260 struct wl1271_cmd_test_header test;
262 __le32 ver;
263 __le16 len;
264 unsigned char buf[MAX_TLV_LENGTH];
265 unsigned char type;
266 unsigned char padding;
268 __le16 radio_status;
270 unsigned char sub_band_mask;
271 unsigned char padding2;
272 } __attribute__((packed));
274 #define MAC_ADDR_LEN 6
276 struct wl1271_cmd_pkt_params {
277 struct wl1271_cmd_header header;
279 struct wl1271_cmd_test_header test;
281 __le16 radio_status;
282 unsigned char padding[2];
283 __le32 delay;
284 __le32 rate;
285 __le16 size;
286 __le16 amount;
287 __le32 power;
288 __le16 seed;
289 unsigned char pkt_mode;
290 unsigned char dcf_enable;
291 unsigned char g_interval;
292 unsigned char preamble;
293 unsigned char type;
294 unsigned char scramble;
295 unsigned char clpc_enable;
296 unsigned char seq_nbr_mode;
297 unsigned char src_mac[MAC_ADDR_LEN];
298 unsigned char dst_mac[MAC_ADDR_LEN];
299 unsigned char padding1[2];
300 } __attribute__((packed));
302 struct wl1271_rx_path_statcs {
303 __le32 nbr_rx_valid_pkts;
304 __le32 nbr_rx_fcs_err_pkts;
305 __le32 nbr_rx_plcp_err_pkts;
306 __le32 seq_nbr_miss_cnt; /* For PER calculation */
307 __le16 ave_snr; /* average SNR */
308 __le16 ave_rssi; /* average RSSI */
309 __le16 ave_evm;
310 unsigned char padding[2];
311 } __attribute__((packed));
313 struct wl1271_rx_pkt_statcs {
314 __le32 length;
315 __le32 evm;
316 __le32 rssi;
317 __le16 freq_delta;
318 __le16 flags;
319 char type;
320 unsigned char rate;
321 unsigned char noise;
322 unsigned char agc_gain;
323 unsigned char padding[2];
324 } __attribute__((packed));
326 #define RX_STAT_PACKETS_PER_MESSAGE (20)
328 struct wl1271_radio_rx_statcs {
329 struct wl1271_cmd_header header;
331 struct wl1271_cmd_test_header test;
333 struct wl1271_rx_path_statcs rx_path_statcs;
334 __le32 base_pkt_id;
335 __le32 nbr_pkts; /* input/output: number of following packets */
336 __le32 nbr_miss_pkts;
337 __le16 radio_status;
338 unsigned char padding[2];
339 } __attribute__((packed));
341 struct fw_version {
342 int ver[5];
343 } __attribute__((packed));
345 enum wl1271_nvs_type {
346 eNVS_VERSION = 0xaa,
347 eNVS_RADIO_TX_PARAMETERS = 1,
348 eNVS_RADIO_RX_PARAMETERS = 2,
349 eNVS_RADIO_INI = 16,
350 eNVS_NON_FILE = 0xFE,
351 eTLV_LAST = 0xFF /* last TLV type */
352 };
354 #define DEFAULT_EFUSE_VALUE (0)
356 enum wl1271_nvs_type_info {
357 eFIRST_RADIO_TYPE_PARAMETERS_INFO,
358 eNVS_RADIO_TX_TYPE_PARAMETERS_INFO = eFIRST_RADIO_TYPE_PARAMETERS_INFO,
359 eNVS_RADIO_RX_TYPE_PARAMETERS_INFO,
360 eLAST_RADIO_TYPE_PARAMETERS_INFO = eNVS_RADIO_RX_TYPE_PARAMETERS_INFO,
361 UNUSED_RADIO_TYPE_PARAMETERS_INFO,
362 eNUMBER_RADIO_TYPE_PARAMETERS_INFO = UNUSED_RADIO_TYPE_PARAMETERS_INFO,
363 LAST_RADIO_TYPE_PARAMETERS_INFO =
364 (eNUMBER_RADIO_TYPE_PARAMETERS_INFO - 1)
365 };
367 enum EFUSE_PARAMETER_TYPE_ENMT {
368 EFUSE_FIRST_PARAMETER_E,
369 /* RX PARAMETERS */
370 EFUSE_FIRST_RX_PARAMETER_E = EFUSE_FIRST_PARAMETER_E,
371 RX_BIP_MAX_GAIN_ERROR_BAND_B_E = EFUSE_FIRST_RX_PARAMETER_E,
373 RX_BIP_MAX_GAIN_ERROR_J_LOW_MID_E,
374 RX_BIP_MAX_GAIN_ERROR_J_HIGH_E,
376 RX_BIP_MAX_GAIN_ERROR_5G_1ST_E,
377 RX_BIP_MAX_GAIN_ERROR_5G_2ND_E,
378 RX_BIP_MAX_GAIN_ERROR_5G_3RD_E,
379 RX_BIP_MAX_GAIN_ERROR_5G_4TH_E,
381 RX_BIP_LNA_STEP_CORR_BAND_B_4TO3_E,
382 RX_BIP_LNA_STEP_CORR_BAND_B_3TO2_E,
383 RX_BIP_LNA_STEP_CORR_BAND_B_2TO1_E,
384 RX_BIP_LNA_STEP_CORR_BAND_B_1TO0_E,
386 RX_BIP_LNA_STEP_CORR_BAND_A_4TO3_E,
387 RX_BIP_LNA_STEP_CORR_BAND_A_3TO2_E,
388 RX_BIP_LNA_STEP_CORR_BAND_A_2TO1_E,
389 RX_BIP_LNA_STEP_CORR_BAND_A_1TO0_E,
391 RX_BIP_TA_STEP_CORR_BAND_B_2TO1_E,
392 RX_BIP_TA_STEP_CORR_BAND_B_1TO0_E,
393 RX_BIP_TA_STEP_CORR_BAND_A_2TO1_E,
394 RX_BIP_TA_STEP_CORR_BAND_A_1TO0_E,
395 NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E,
397 /* TX PARAMETERS */
398 TX_BIP_PD_BUFFER_GAIN_ERROR_E = NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E,
399 TX_BIP_PD_BUFFER_VBIAS_ERROR_E,
400 EFUSE_NUMBER_OF_PARAMETERS_E,
401 EFUSE_LAST_PARAMETER_E = (EFUSE_NUMBER_OF_PARAMETERS_E - 1)
402 } EFUSE_PARAMETER_TYPE_ENM;
404 int get_mac_addr(int ifc_num, unsigned char *mac_addr);
406 int file_exist(const char *filename);
407 int do_get_drv_info(char *dev_name, int *hw_ver,
408 struct ethtool_drvinfo *out_drvinfo);
409 int is_fw_ver_valid(char *dev_name, struct fw_version *fw_ver_valid);
412 #endif /* __PLT_H */