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