summaryrefslogtreecommitdiff
path: root/plt.h
diff options
context:
space:
mode:
Diffstat (limited to 'plt.h')
-rw-r--r--plt.h412
1 files changed, 412 insertions, 0 deletions
diff --git a/plt.h b/plt.h
new file mode 100644
index 0000000..8b534a9
--- /dev/null
+++ b/plt.h
@@ -0,0 +1,412 @@
+#ifndef __PLT_H
+#define __PLT_H
+
+#include <linux/ethtool.h>
+
+#ifdef ANDROID
+#define CURRENT_NVS_NAME "/system/etc/firmware/ti-connectivity/wl12xx-nvs.bin"
+#define INSMOD_PATH "/system/bin/insmod"
+#define RMMOD_PATH "/system/bin/rmmod"
+#else
+#define CURRENT_NVS_NAME "/lib/firmware/ti-connectivity/wl12xx-nvs.bin"
+#define INSMOD_PATH "/sbin/insmod"
+#define RMMOD_PATH "/sbin/rmmod"
+#endif
+#define NEW_NVS_NAME "./new-nvs.bin"
+#define NVS_FILE_SIZE_127X 0x390
+#define NVS_FILE_SIZE_128X 0x459
+
+/* NVS definition start here */
+
+#define NVS_TX_TYPE_INDEX 0
+
+#define START_TYPE_INDEX_IN_TLV 0
+#define TLV_TYPE_LENGTH 1
+#define START_LENGTH_INDEX \
+(START_TYPE_INDEX_IN_TLV + TLV_TYPE_LENGTH) /* 1 */
+#define TLV_LENGTH_LENGTH 2
+#define START_PARAM_INDEX \
+(START_LENGTH_INDEX + TLV_LENGTH_LENGTH) /* 3 */
+
+#define NVS_MAC_FIRST_LENGTH_INDEX 0
+#define NVS_MAC_FIRST_LENGHT_VALUE 1
+
+#define NVS_MAC_L_ADDRESS_INDEX \
+((NVS_MAC_FIRST_LENGTH_INDEX) + 1) /* 1*/
+#define NVS_MAC_L_ADDRESS_LENGTH 2
+
+#define NVS_MAC_L_VALUE_INDEX \
+((NVS_MAC_L_ADDRESS_INDEX) + (NVS_MAC_L_ADDRESS_LENGTH)) /* 3 */
+
+#define NVS_MAC_L_VALUE_LENGTH 4
+
+#define NVS_MAC_SECONDE_LENGTH_INDEX \
+((NVS_MAC_L_VALUE_INDEX) + 4) /* 7 */
+#define NVS_MAC_SECONDE_LENGHT_VALUE 1
+
+#define NVS_MAC_H_ADDRESS_INDEX \
+((NVS_MAC_SECONDE_LENGTH_INDEX) + 1) /* 8*/
+#define NVS_MAC_H_ADDRESS_LENGTH 2
+
+#define NVS_MAC_H_VALUE_INDEX \
+((NVS_MAC_H_ADDRESS_INDEX) + (NVS_MAC_H_ADDRESS_LENGTH)) /* 10 */
+#define NVS_MAC_H_VALUE_LENGTH 4
+
+#define NVS_END_BURST_TRANSACTION_INDEX \
+((NVS_MAC_H_VALUE_INDEX) + (NVS_MAC_H_VALUE_LENGTH)) /* 14 */
+#define NVS_END_BURST_TRANSACTION_VALUE 0
+#define NVS_END_BURST_TRANSACTION_LENGTH 7
+
+#define NVS_ALING_TLV_START_ADDRESS_INDEX \
+((NVS_END_BURST_TRANSACTION_INDEX) + \
+(NVS_END_BURST_TRANSACTION_LENGTH)) /* 21 */
+#define NVS_ALING_TLV_START_ADDRESS_VALUE 0
+#define NVS_ALING_TLV_START_ADDRESS_LENGTH 3
+
+
+/* NVS pre TLV length */
+#define NVS_PRE_PARAMETERS_LENGTH \
+((NVS_ALING_TLV_START_ADDRESS_INDEX) + \
+(NVS_ALING_TLV_START_ADDRESS_LENGTH)) /* 24 */
+
+/* NVS P2G table */
+#define NVS_TX_P2G_TABLE_LENGTH \
+((NUMBER_OF_SUB_BANDS_E) * 1 /* byte */) /* 8 */
+
+/* NVS PPA table */
+#define NVS_TX_PPA_STEPS_TABLE_LENGTH \
+((NUMBER_OF_SUB_BANDS_E) * ((TXPWR_CFG0__VGA_STEP__NUMBER_OF_STEPS_E) \
+- 1) * 1 /* byte */) /* 32 */
+
+/* NVS version 1 TX PD curve table length */
+#define NVS_TX_PD_TABLE_LENGTH_NVS_V1 (1 /* byte to set size of table */ + \
+((NUMBER_OF_SUB_BANDS_E) * (2 /* 1 byte offset, 1 byte low range */ + \
+2 /* first index in table */ + (((SIZE_OF_POWER_DETECTOR_TABLE) - 1) * \
+1 /* 1 byte */)))) /* 233 */
+
+/* NVS version 2 TX PD curve table length */
+#define NVS_TX_PD_TABLE_LENGTH_NVS_V2 \
+((NUMBER_OF_SUB_BANDS_E) * (12 /* 12index of one byte -2 dBm - 9dBm */ +\
+28 /* 14 indexes of 2 byte -3dBm, 10dBm - 22 dBm */)) /* 320 */
+
+/* NVS version 1 TX parameters Length */
+#define NVS_TX_PARAM_LENGTH_NVS_V1 \
+((NVS_TX_P2G_TABLE_LENGTH) + (NVS_TX_PPA_STEPS_TABLE_LENGTH) +\
+(NVS_TX_PD_TABLE_LENGTH_NVS_V1)) /* 273 */
+
+/* NVS version 2 TX parameters Length */
+#define NVS_TX_PARAM_LENGTH_NVS_V2 \
+((NVS_TX_P2G_TABLE_LENGTH) + (NVS_TX_PPA_STEPS_TABLE_LENGTH) +\
+(NVS_TX_PD_TABLE_LENGTH_NVS_V2) +\
+(NUMBER_OF_RADIO_CHANNEL_INDEXS_E /* for Per Channel power Gain Offset tabl */))
+
+/* NVS TX version */
+/* #define NVS_TX_PARAM_LENGTH NVS_TX_PARAM_LENGTH_NVS_V2 */
+#define NVS_TX_PARAM_LENGTH 0x199
+
+/* NVS RX version */
+#define NVS_RX_PARAM_LENGTH NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E /* 19 */
+
+/* NVS version parameter length */
+#define NVS_VERSION_PARAMETER_LENGTH 3
+
+/* NVS max length */
+/* original ((NVS_TOTAL_LENGTH) + 4 - ((NVS_TOTAL_LENGTH) % 4)) */
+#define NVS_TOTAL_LENGTH 500
+
+/* TLV max length */
+#define MAX_TLV_LENGTH NVS_TOTAL_LENGTH
+
+#define MAX_NVS_VERSION_LENGTH 12
+
+enum wl1271_tm_commands {
+ WL1271_TM_CMD_UNSPEC,
+ WL1271_TM_CMD_TEST,
+ WL1271_TM_CMD_INTERROGATE,
+ WL1271_TM_CMD_CONFIGURE,
+ WL1271_TM_CMD_NVS_PUSH,
+ WL1271_TM_CMD_SET_PLT_MODE,
+ WL1271_TM_CMD_RECOVER,
+ WL1271_TM_CMD_GET_MAC,
+
+ __WL1271_TM_CMD_AFTER_LAST
+};
+
+enum wl1271_tm_attrs {
+ WL1271_TM_ATTR_UNSPEC,
+ WL1271_TM_ATTR_CMD_ID,
+ WL1271_TM_ATTR_ANSWER,
+ WL1271_TM_ATTR_DATA,
+ WL1271_TM_ATTR_IE_ID,
+ WL1271_TM_ATTR_PLT_MODE,
+ __WL1271_TM_ATTR_AFTER_LAST
+};
+
+#define WL1271_TM_ATTR_MAX (__WL1271_TM_ATTR_AFTER_LAST - 1)
+
+enum wl1271_test_cmds {
+ TEST_CMD_PD_BUFFER_CAL = 0x1, /* TX PLT */
+ TEST_CMD_P2G_CAL, /* TX BiP */
+ TEST_CMD_RX_PLT_ENTER,
+ TEST_CMD_RX_PLT_CAL, /* RSSI Cal */
+ TEST_CMD_RX_PLT_EXIT,
+ TEST_CMD_RX_PLT_GET,
+ TEST_CMD_FCC, /* Continuous TX */
+ TEST_CMD_TELEC, /* Carrier wave in a specific channel and band */
+ TEST_CMD_STOP_TX, /* Stop FCC or TELEC */
+ TEST_CMD_PLT_TEMPLATE, /* define Template for TX */
+ TEST_CMD_PLT_GAIN_ADJUST,
+ TEST_CMD_PLT_GAIN_GET,
+ TEST_CMD_CHANNEL_TUNE,
+ TEST_CMD_FREE_RUN_RSSI, /* Free running RSSI measurement */
+ TEST_CMD_DEBUG, /* test command for debug using the struct: */
+ TEST_CMD_CLPC_COMMANDS,
+ RESERVED_4,
+ TEST_CMD_RX_STAT_STOP,
+ TEST_CMD_RX_STAT_START,
+ TEST_CMD_RX_STAT_RESET,
+ TEST_CMD_RX_STAT_GET,
+ TEST_CMD_LOOPBACK_START, /* for FW Test Debug */
+ TEST_CMD_LOOPBACK_STOP, /* for FW Test Debug */
+ TEST_CMD_GET_FW_VERSIONS,
+ TEST_CMD_INI_FILE_RADIO_PARAM,
+ TEST_CMD_RUN_CALIBRATION_TYPE,
+ TEST_CMD_TX_GAIN_ADJUST,
+ TEST_CMD_UPDATE_PD_BUFFER_ERRORS,
+ TEST_CMD_UPDATE_PD_REFERENCE_POINT,
+ TEST_CMD_INI_FILE_GENERAL_PARAM,
+ TEST_CMD_SET_EFUSE,
+ TEST_CMD_GET_EFUSE,
+ TEST_CMD_TEST_TONE,
+ TEST_CMD_POWER_MODE,
+ TEST_CMD_SMART_REFLEX,
+ TEST_CMD_CHANNEL_RESPONSE,
+ TEST_CMD_DCO_ITRIM_FEATURE,
+ TEST_CMD_INI_FILE_RF_EXTENDED_PARAM, /* !!! Not exists in 128x */
+ TEST_CMD_SET_NVS_VERSION, /* For wl128x, the value is minus 1 */
+ MAX_TEST_CMD_ID = 0xFF
+};
+
+enum plt_mode {
+ PLT_OFF = 0,
+ PLT_ON = 1,
+ PLT_FEM_DETECT = 2,
+ PLT_CHIP_AWAKE = 3,
+};
+
+struct wl1271_cmd_header {
+ __u16 id;
+ __u16 status;
+ /* payload */
+ unsigned char data[0];
+} __attribute__((packed));
+
+struct wl1271_cmd_test_header {
+ unsigned char id;
+ unsigned char padding[3];
+} __attribute__((packed));
+
+struct wl1271_cmd_cal_channel_tune {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ unsigned char band;
+ unsigned char channel;
+
+ __le16 radio_status;
+} __attribute__((packed));
+
+struct wl1271_cmd_cal_update_ref_point {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ __le32 ref_power;
+ __le32 ref_detector;
+ unsigned char sub_band;
+ unsigned char padding[3];
+} __attribute__((packed));
+
+struct wl1271_cmd_cal_tx_tone {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ __le16 radio_status;
+ unsigned char padding[2];
+ __le32 power;
+ unsigned char tone_type;
+ unsigned char unused[11];
+} __attribute__((packed));
+
+#define NVS_VERSION_2 2
+#define NVS_VERSION_2_1 21
+
+struct wl1271_cmd_set_nvs_ver {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ __le16 radio_status;
+
+ unsigned char nvs_ver;
+ unsigned char padding;
+} __attribute__((packed));
+
+struct wl1271_cmd_cal_p2g {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ __le32 ver;
+ __le16 len;
+ unsigned char buf[MAX_TLV_LENGTH];
+ unsigned char type;
+ unsigned char padding;
+
+ __le16 radio_status;
+
+ unsigned char sub_band_mask;
+ unsigned char padding2;
+} __attribute__((packed));
+
+#define MAC_ADDR_LEN 6
+
+struct wl1271_cmd_pkt_params {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ __le16 radio_status;
+ unsigned char padding[2];
+ __le32 delay;
+ __le32 rate;
+ __le16 size;
+ __le16 amount;
+ __le32 power;
+ __le16 seed;
+ unsigned char pkt_mode;
+ unsigned char dcf_enable;
+ unsigned char g_interval;
+ unsigned char preamble;
+ unsigned char type;
+ unsigned char scramble;
+ unsigned char clpc_enable;
+ unsigned char seq_nbr_mode;
+ unsigned char src_mac[MAC_ADDR_LEN];
+ unsigned char dst_mac[MAC_ADDR_LEN];
+ unsigned char padding1[2];
+} __attribute__((packed));
+
+struct wl1271_rx_path_statcs {
+ __le32 nbr_rx_valid_pkts;
+ __le32 nbr_rx_fcs_err_pkts;
+ __le32 nbr_rx_plcp_err_pkts;
+ __le32 seq_nbr_miss_cnt; /* For PER calculation */
+ __le16 ave_snr; /* average SNR */
+ __le16 ave_rssi; /* average RSSI */
+ __le16 ave_evm;
+ unsigned char padding[2];
+} __attribute__((packed));
+
+struct wl1271_rx_pkt_statcs {
+ __le32 length;
+ __le32 evm;
+ __le32 rssi;
+ __le16 freq_delta;
+ __le16 flags;
+ char type;
+ unsigned char rate;
+ unsigned char noise;
+ unsigned char agc_gain;
+ unsigned char padding[2];
+} __attribute__((packed));
+
+#define RX_STAT_PACKETS_PER_MESSAGE (20)
+
+struct wl1271_radio_rx_statcs {
+ struct wl1271_cmd_header header;
+
+ struct wl1271_cmd_test_header test;
+
+ struct wl1271_rx_path_statcs rx_path_statcs;
+ __le32 base_pkt_id;
+ __le32 nbr_pkts; /* input/output: number of following packets */
+ __le32 nbr_miss_pkts;
+ __le16 radio_status;
+ unsigned char padding[2];
+} __attribute__((packed));
+
+struct fw_version {
+ int ver[5];
+} __attribute__((packed));
+
+enum wl1271_nvs_type {
+ eNVS_VERSION = 0xaa,
+ eNVS_RADIO_TX_PARAMETERS = 1,
+ eNVS_RADIO_RX_PARAMETERS = 2,
+ eNVS_RADIO_INI = 16,
+ eNVS_NON_FILE = 0xFE,
+ eTLV_LAST = 0xFF /* last TLV type */
+};
+
+#define DEFAULT_EFUSE_VALUE (0)
+
+enum wl1271_nvs_type_info {
+ eFIRST_RADIO_TYPE_PARAMETERS_INFO,
+ eNVS_RADIO_TX_TYPE_PARAMETERS_INFO = eFIRST_RADIO_TYPE_PARAMETERS_INFO,
+ eNVS_RADIO_RX_TYPE_PARAMETERS_INFO,
+ eLAST_RADIO_TYPE_PARAMETERS_INFO = eNVS_RADIO_RX_TYPE_PARAMETERS_INFO,
+ UNUSED_RADIO_TYPE_PARAMETERS_INFO,
+ eNUMBER_RADIO_TYPE_PARAMETERS_INFO = UNUSED_RADIO_TYPE_PARAMETERS_INFO,
+ LAST_RADIO_TYPE_PARAMETERS_INFO =
+ (eNUMBER_RADIO_TYPE_PARAMETERS_INFO - 1)
+};
+
+enum EFUSE_PARAMETER_TYPE_ENMT {
+ EFUSE_FIRST_PARAMETER_E,
+ /* RX PARAMETERS */
+ EFUSE_FIRST_RX_PARAMETER_E = EFUSE_FIRST_PARAMETER_E,
+ RX_BIP_MAX_GAIN_ERROR_BAND_B_E = EFUSE_FIRST_RX_PARAMETER_E,
+
+ RX_BIP_MAX_GAIN_ERROR_J_LOW_MID_E,
+ RX_BIP_MAX_GAIN_ERROR_J_HIGH_E,
+
+ RX_BIP_MAX_GAIN_ERROR_5G_1ST_E,
+ RX_BIP_MAX_GAIN_ERROR_5G_2ND_E,
+ RX_BIP_MAX_GAIN_ERROR_5G_3RD_E,
+ RX_BIP_MAX_GAIN_ERROR_5G_4TH_E,
+
+ RX_BIP_LNA_STEP_CORR_BAND_B_4TO3_E,
+ RX_BIP_LNA_STEP_CORR_BAND_B_3TO2_E,
+ RX_BIP_LNA_STEP_CORR_BAND_B_2TO1_E,
+ RX_BIP_LNA_STEP_CORR_BAND_B_1TO0_E,
+
+ RX_BIP_LNA_STEP_CORR_BAND_A_4TO3_E,
+ RX_BIP_LNA_STEP_CORR_BAND_A_3TO2_E,
+ RX_BIP_LNA_STEP_CORR_BAND_A_2TO1_E,
+ RX_BIP_LNA_STEP_CORR_BAND_A_1TO0_E,
+
+ RX_BIP_TA_STEP_CORR_BAND_B_2TO1_E,
+ RX_BIP_TA_STEP_CORR_BAND_B_1TO0_E,
+ RX_BIP_TA_STEP_CORR_BAND_A_2TO1_E,
+ RX_BIP_TA_STEP_CORR_BAND_A_1TO0_E,
+ NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E,
+
+ /* TX PARAMETERS */
+ TX_BIP_PD_BUFFER_GAIN_ERROR_E = NUMBER_OF_RX_BIP_EFUSE_PARAMETERS_E,
+ TX_BIP_PD_BUFFER_VBIAS_ERROR_E,
+ EFUSE_NUMBER_OF_PARAMETERS_E,
+ EFUSE_LAST_PARAMETER_E = (EFUSE_NUMBER_OF_PARAMETERS_E - 1)
+} EFUSE_PARAMETER_TYPE_ENM;
+
+int get_mac_addr(int ifc_num, unsigned char *mac_addr);
+
+int file_exist(const char *filename);
+int do_get_drv_info(char *dev_name, int *hw_ver,
+ struct ethtool_drvinfo *out_drvinfo);
+int is_fw_ver_valid(char *dev_name, struct fw_version *fw_ver_valid);
+
+
+#endif /* __PLT_H */