Firmware sends an event to host to notify that the firmware is ready.
Implemented in wireless firmware version 5.110.21.p1.

Signed-off-by: Javier Cardona <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/cmdresp.c |    5 ++++-
 drivers/net/wireless/libertas/host.h    |    1 +
 drivers/net/wireless/libertas/if_usb.c  |   14 +++++++++++---
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/libertas/cmdresp.c 
b/drivers/net/wireless/libertas/cmdresp.c
index d391391..dd1e188 100644
--- a/drivers/net/wireless/libertas/cmdresp.c
+++ b/drivers/net/wireless/libertas/cmdresp.c
@@ -982,7 +982,10 @@ int libertas_process_event(wlan_private * priv)
        case MACREG_INT_CODE_SNR_HIGH:
                lbs_pr_alert("EVENT: snr high\n");
                break;
-
+       case MACREG_INT_CODE_FIRMWARE_READY:
+               priv->adapter->fw_ready = 1;
+               lbs_pr_alert("EVENT: Wireless firmware ready\n");
+               break;
        case MACREG_INT_CODE_MESH_AUTO_STARTED:
                /* Ignore spurious autostart events if autostart is disabled */
                if (!priv->mesh_autostart_enabled) {
diff --git a/drivers/net/wireless/libertas/host.h 
b/drivers/net/wireless/libertas/host.h
index 00d5675..2150ea0 100644
--- a/drivers/net/wireless/libertas/host.h
+++ b/drivers/net/wireless/libertas/host.h
@@ -291,5 +291,6 @@ enum cmd_mesh_access_opts {
 #define MACREG_INT_CODE_RSSI_HIGH              0x0000001c
 #define MACREG_INT_CODE_SNR_HIGH               0x0000001d
 #define MACREG_INT_CODE_MESH_AUTO_STARTED      0x00000023
+#define MACREG_INT_CODE_FIRMWARE_READY          0x00000030
 
 #endif                         /* _HOST_H_ */
diff --git a/drivers/net/wireless/libertas/if_usb.c 
b/drivers/net/wireless/libertas/if_usb.c
index 4c5e20c..740065b 100644
--- a/drivers/net/wireless/libertas/if_usb.c
+++ b/drivers/net/wireless/libertas/if_usb.c
@@ -924,10 +924,18 @@ restart:
 
        if_usb_submit_rx_urb(priv);
 
-       /* Delay 200 ms to waiting for the FW ready */
-       msleep_interruptible(200);
+       /* Wait for the FW ready */
+       i = 0;
+       while (!priv->adapter->fw_ready && i < 100) {
+               msleep_interruptible(10);
+               ++i;
+       }
 
-       priv->adapter->fw_ready = 1;
+       if (!priv->adapter->fw_ready) {
+               lbs_pr_alert("No FW RDY event received.  Older FW?\n");
+               priv->adapter->fw_ready = 1;
+       } else
+               lbs_pr_info("FW ready time = %d ms\n", i * 10);
 
 done:
        lbs_deb_leave_args(LBS_DEB_USB, "ret %d", ret);
-- 
1.5.2.5



_______________________________________________
Devel mailing list
Devel@lists.laptop.org
http://lists.laptop.org/listinfo/devel

Reply via email to