From bf1dec110d517755e66125d4b8699f50b8e6dfcf Mon Sep 17 00:00:00 2001 From: Manel Caro Date: Thu, 7 Mar 2019 20:13:19 +0100 Subject: Calibrator and uim Initial Commit --- plt.h | 412 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 412 insertions(+) create mode 100644 plt.h (limited to 'plt.h') 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 + +#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 */ -- cgit v1.1