]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - wilink8-wlan/18xx-ti-utils.git/commitdiff
calibrator: Adding FW version validation R8.xx_Build-10 R8.xx_Build-12 R8.xx_Build-13 R8.xx_Build-15 R8.xx_Build-16 R8.xx_Build-17 R8.xx_Build-18 R8.xx_Build-20 R8.xx_Build-21 R8.xx_Build-22 R8.xx_Build-23 R8.xx_Build-24 R8.xx_Build-25 R8.xx_Build-27 R8.xx_Build-28 R8.xx_Build-32 R8.xx_Build-34 R8.xx_Build-35 R8.xx_Build-36 R8.xx_Build-37 R8.xx_Build-38 R8.xx_Build-39 R8.xx_Build-40 R8.xx_Build-41 R8.xx_Build-42 R8.xx_Build-43 R8.xx_Build-44 R8.xx_Build-45 R8.xx_Build-46 R8.xx_Build-48 R8.xx_Build-49 R8.xx_Build-50 R8.xx_Build-51 R8.xx_Build-52 R8.xx_Build-53 R8.xx_Build-54 R8.xx_Build-55 R8.xx_Build-56 R8.xx_Build-57 R8.xx_Build-58 R8.xx_Build-59 R8.xx_Build-6 R8.xx_Build-60 R8.xx_Build-61 R8.xx_Build-62 R8.xx_Build-63 R8.xx_Build-64 R8.xx_Build-65 R8.xx_Build-66 R8.xx_Build-67 R8.xx_Build-68 R8.xx_Build-69 R8.xx_Build-7 R8.xx_Build-8 R8.xx_Build-9 ol_r8.a4.01 ol_r8.a4.02 ol_r8.a4.03 r8.a3.09-build_49 r8.a3.09-build_50 r8.a3.09-build_51
authorArthur Tiv <arthur.tiv@ti.com>
Thu, 30 Aug 2012 04:51:58 +0000 (04:51 +0000)
committerYair Shapira <yair.shapira@ti.com>
Thu, 30 Aug 2012 15:15:34 +0000 (18:15 +0300)
 Adding FW version validation for last 4 new command.

Signed-off-by: Arthur Tiv <arthur.tiv@ti.com>
Signed-off-by: Yair Shapira <yair.shapira@ti.com>
misc_cmds.c
plt.c
plt.h
wl18xx_plt.c

index ba6597d8545e4b59cf4b0ffa0d1a4e63c38a7d96..e19972d424962ae0a9231bf603636e1e460481d6 100644 (file)
@@ -292,7 +292,7 @@ static int get_drv_info(struct nl80211_state *state, struct nl_cb *cb,
                return 2;
        }
 
-       return do_get_drv_info(argv[0], NULL);
+       return do_get_drv_info(argv[0], NULL, NULL);
 }
 
 COMMAND(get, drv_info, "<device name>", 0, 0, CIB_NONE, get_drv_info,
@@ -311,7 +311,7 @@ static int get_hw_version(struct nl80211_state *state, struct nl_cb *cb,
                return 2;
        }
 
-       ret = do_get_drv_info(argv[0], &chip_id);
+       ret = do_get_drv_info(argv[0], &chip_id, NULL);
        if (!ret)
                printf("%08X\n", chip_id);
 
diff --git a/plt.c b/plt.c
index 01e7f91d68c13410e6c6e88ae097fb5604069384..4ddd46357823f97dd045c83fedeeb312d9e3ba1a 100644 (file)
--- a/plt.c
+++ b/plt.c
@@ -266,7 +266,9 @@ static void dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs)
                info->fw_version, info->bus_info, regs->version);
 }
 
-int do_get_drv_info(char *dev_name, int *hw_ver)
+
+int do_get_drv_info(char *dev_name, int *hw_ver,
+                   struct ethtool_drvinfo *out_drvinfo)
 {
        struct ifreq ifr;
        int fd, err;
@@ -307,7 +309,9 @@ int do_get_drv_info(char *dev_name, int *hw_ver)
 
        if (hw_ver)
                *hw_ver = regs->version;
-       else
+       if (out_drvinfo)
+               *out_drvinfo=drvinfo;
+       if (!hw_ver && !out_drvinfo)
                dump_regs(&drvinfo, regs);
        free(regs);
 
@@ -322,11 +326,50 @@ error_out:
        return 1;
 }
 
+int is_fw_ver_valid(char *dev_name, struct fw_version *fw_ver_valid)
+{
+       char *str, *tmp_str;
+       struct ethtool_drvinfo drvinfo;
+       char sep = '.';
+       int i=0, ret=0;
+       struct fw_version fw_ver_crnt;
+
+       ret = do_get_drv_info(dev_name, NULL, &drvinfo);
+       if(ret) {
+               printf("\tFailed to get FW version.\n");
+               goto error;
+       }
+
+       str=drvinfo.fw_version;
+
+       /* Looking for the last space in the version.*/
+       /* Usually version starting with text and value after spacing.*/
+       tmp_str = strrchr (str,' ');
+       while((tmp_str != NULL) &&
+             (i < (int) (sizeof(fw_ver_valid->ver)/sizeof(int))))
+       {
+               tmp_str++;
+               fw_ver_crnt.ver[i]=atoi(tmp_str);
+               if (fw_ver_crnt.ver[i] < fw_ver_valid->ver[i]) {
+                       ret=1;
+                       break;
+               } else if (fw_ver_crnt.ver[i] > fw_ver_valid->ver[i]) {
+                       ret=0;
+                       break;
+               }
+               tmp_str = strchr (tmp_str, '.');
+               i++;
+       }
+
+error:
+       return ret;
+}
+
 static int get_chip_arch(char *dev_name, enum wl12xx_arch *arch)
 {
        int hw_ver, ret;
 
-       ret = do_get_drv_info(dev_name, &hw_ver);
+       ret = do_get_drv_info(dev_name, &hw_ver, NULL);
        if (ret)
                return 1;
 
diff --git a/plt.h b/plt.h
index d6ca9eb23536d8fd4d8f81cff7517fe6ed4daa5a..391d46c35a11dbf165675c07f456ff2fab6706ab 100644 (file)
--- a/plt.h
+++ b/plt.h
@@ -1,6 +1,8 @@
 #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"
@@ -329,6 +331,10 @@ struct wl1271_radio_rx_statcs {
        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,
@@ -391,7 +397,9 @@ enum EFUSE_PARAMETER_TYPE_ENMT {
 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);
 
-int do_get_drv_info(char *dev_name, int *arch);
 
 #endif /* __PLT_H */
index 8e8d0b10e24b092862ceb73551e5c2f3af22f6e9..f6133fd8bae445cabd1ce0364dcbdf17abcf0106 100644 (file)
@@ -31,6 +31,17 @@ static int  plt_wl18xx_phy_reg_write(struct nl80211_state *state, struct nl_cb *
 {
        struct nlattr *key;
        struct wl18xx_cmd_phy_reg_write prms;
+       struct fw_version fw_ver_valid={{8,4,0,0,2}};
+
+       /* Validate the FW supported version (given 3 args before) */
+       if (is_fw_ver_valid(*(argv-3), &fw_ver_valid)) {
+               printf("\tFail: the FW version does not support this command\n");
+               printf("\tThe FW supported verstion starting from %d.%d.%d.%d.%d\n",
+                               fw_ver_valid.ver[0], fw_ver_valid.ver[1],
+                               fw_ver_valid.ver[2], fw_ver_valid.ver[3],
+                               fw_ver_valid.ver[4]);
+               return 1;
+       }
 
        if (argc != 2)
                return 1;
@@ -95,6 +106,17 @@ static int  plt_wl18xx_phy_reg_read(struct nl80211_state *state, struct nl_cb *c
 {
        struct nlattr *key;
        struct wl18xx_cmd_phy_reg_read prms;
+       struct fw_version fw_ver_valid={{8,4,0,0,2}};
+
+       /* Validate the FW supported version (given 3 args before) */
+       if (is_fw_ver_valid(*(argv-3), &fw_ver_valid)) {
+               printf("\tFail: the FW version does not support this command\n");
+               printf("\tThe FW supported verstion starting from %d.%d.%d.%d.%d\n",
+                               fw_ver_valid.ver[0], fw_ver_valid.ver[1],
+                               fw_ver_valid.ver[2], fw_ver_valid.ver[3],
+                               fw_ver_valid.ver[4]);
+               return 1;
+       }
 
        if (argc != 1)
                return 1;
@@ -135,6 +157,18 @@ static int  plt_wl18xx_set_antenna_mode_5G(struct nl80211_state *state, struct n
 {
        struct nlattr *key;
        struct wl18xx_cmd_set_antenna_mode_5G prms;
+       struct fw_version fw_ver_valid={{8,4,0,0,2}};
+
+       /* Validate the FW supported version (given 3 args before) */
+       if (is_fw_ver_valid(*(argv-3), &fw_ver_valid)) {
+               printf("\tFail: the FW version does not support this command\n");
+               printf("\tThe FW supported verstion starting from %d.%d.%d.%d.%d\n",
+                               fw_ver_valid.ver[0], fw_ver_valid.ver[1],
+                               fw_ver_valid.ver[2], fw_ver_valid.ver[3],
+                               fw_ver_valid.ver[4]);
+               return 1;
+       }
+
 
        if (argc != 4)
                return 1;
@@ -183,6 +217,17 @@ static int  plt_wl18xx_set_antenna_mode_24G(struct nl80211_state *state, struct
 {
        struct nlattr *key;
        struct wl18xx_cmd_set_antenna_mode_24G prms;
+       struct fw_version fw_ver_valid={{8,4,0,0,2}};
+
+       /* Validate the FW supported version (given 3 args before) */
+       if (is_fw_ver_valid(*(argv-3), &fw_ver_valid)) {
+               printf("\tFail: the FW version does not support this command\n");
+               printf("\tThe FW supported verstion starting from %d.%d.%d.%d.%d\n",
+                               fw_ver_valid.ver[0], fw_ver_valid.ver[1],
+                               fw_ver_valid.ver[2], fw_ver_valid.ver[3],
+                               fw_ver_valid.ver[4]);
+               return 1;
+       }
 
        if (argc != 6)
                return 1;