#include "wilc_wfi_cfgoperations.h"
#define WILC_MULTICAST_TABLE_SIZE 8
+#define WILC_BOOT_RETRIES 5
static int wilc_mac_open(struct net_device *ndev);
static int wilc_mac_close(struct net_device *ndev);
struct wilc_vif *vif = netdev_priv(dev);
struct wilc *wilc = vif->wilc;
int ret = 0;
+ int retries = WILC_BOOT_RETRIES;
+ while (retries) {
+ retries--;
+ PRINT_INFO(vif->ndev, INIT_DBG, "Starting Firmware ...\n");
- PRINT_INFO(vif->ndev, INIT_DBG, "Starting Firmware ...\n");
-
- ret = wilc_wlan_start(wilc);
- if (ret < 0) {
- PRINT_ER(dev, "Failed to start Firmware\n");
- return ret;
- }
- PRINT_INFO(vif->ndev, INIT_DBG, "Waiting for FW to get ready ...\n");
+ ret = wilc_wlan_start(wilc);
+ if (ret < 0) {
+ PRINT_ER(dev, "Failed to start Firmware\n");
+ return ret;
+ }
+ PRINT_INFO(vif->ndev, INIT_DBG, "Waiting for FW to get ready ...\n");
- if (!wait_for_completion_timeout(&wilc->sync_event,
- msecs_to_jiffies(500))) {
- PRINT_INFO(vif->ndev, INIT_DBG, "Firmware start timed out\n");
- return -ETIME;
+ if (!wait_for_completion_timeout(&wilc->sync_event,
+ msecs_to_jiffies(500))) {
+ PRINT_INFO(vif->ndev, INIT_DBG, "Firmware start timed out\n");
+ ret = -ETIME;
+ }
+ else {
+ PRINT_INFO(vif->ndev, INIT_DBG, "Firmware successfully started\n");
+ ret = 0;
+ goto out;
+ }
+ PRINT_INFO(vif->ndev, INIT_DBG, "Reload Firmware ...\n");
}
- PRINT_INFO(vif->ndev, INIT_DBG, "Firmware successfully started\n");
-
- return 0;
+out:
+ return ret;
}
static int wilc_firmware_download(struct net_device *dev)