]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - wilink8-wlan/18xx-ti-utils.git/blob - plt.h
configure-device.sh updated to support new WiLink8 firmware ( 8.9.0.0.89 or later...
[wilink8-wlan/18xx-ti-utils.git] / plt.h
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 */