diff options
author | Mateusz Kulikowski <mateusz.kulikowski@gmail.com> | 2015-10-19 23:00:25 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2015-10-25 05:23:13 +0300 |
commit | 51dac5f09577e8300602e378d115075cf656a32c (patch) | |
tree | f93dacb7540878b1983aebaf37a87dc87cb43326 /drivers/staging/rtl8192e | |
parent | 58533b221730c0ccbcd7d7694b2111679f11d99d (diff) | |
download | linux-51dac5f09577e8300602e378d115075cf656a32c.tar.xz |
staging: rtl8192e: Add _rtl92e_wait_for_fw()
Add function waiting for firmware load/boot;
Remove _rtl92e_is_fw_ready() that is obsolete (can be replaced
with _rtl92e_wait_for_fw().
Signed-off-by: Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/rtl8192e')
-rw-r--r-- | drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c | 73 |
1 files changed, 18 insertions, 55 deletions
diff --git a/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c b/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c index 42eabce56236..2ac74843c130 100644 --- a/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c +++ b/drivers/staging/rtl8192e/rtl8192e/r8192E_firmware.c @@ -19,6 +19,18 @@ #include "r8192E_firmware.h" #include <linux/firmware.h> +static bool _rtl92e_wait_for_fw(struct net_device *dev, u32 mask, u32 timeout) +{ + unsigned long deadline = jiffies + msecs_to_jiffies(timeout); + + while (time_before(jiffies, deadline)) { + if (rtl92e_readl(dev, CPU_GEN) & mask) + return true; + mdelay(2); + } + return false; +} + static bool _rtl92e_fw_download_code(struct net_device *dev, u8 *code_virtual_address, u32 buffer_len) { @@ -85,78 +97,30 @@ static bool _rtl92e_fw_download_code(struct net_device *dev, static bool _rtl92e_fw_boot_cpu(struct net_device *dev) { - bool rt_status = true; u32 CPU_status = 0; - unsigned long timeout; - - timeout = jiffies + msecs_to_jiffies(200); - while (time_before(jiffies, timeout)) { - CPU_status = rtl92e_readl(dev, CPU_GEN); - if (CPU_status & CPU_GEN_PUT_CODE_OK) - break; - mdelay(2); - } - if (!(CPU_status&CPU_GEN_PUT_CODE_OK)) { + if (!_rtl92e_wait_for_fw(dev, CPU_GEN_PUT_CODE_OK, 200)) { netdev_err(dev, "Firmware download failed.\n"); goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; - } else { - RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n"); } + RT_TRACE(COMP_FIRMWARE, "Download Firmware: Put code ok!\n"); CPU_status = rtl92e_readl(dev, CPU_GEN); rtl92e_writeb(dev, CPU_GEN, (u8)((CPU_status|CPU_GEN_PWR_STB_CPU)&0xff)); mdelay(1); - timeout = jiffies + msecs_to_jiffies(200); - while (time_before(jiffies, timeout)) { - CPU_status = rtl92e_readl(dev, CPU_GEN); - if (CPU_status&CPU_GEN_BOOT_RDY) - break; - mdelay(2); - } - - if (!(CPU_status&CPU_GEN_BOOT_RDY)) { + if (!_rtl92e_wait_for_fw(dev, CPU_GEN_BOOT_RDY, 200)) { netdev_err(dev, "Firmware boot failed.\n"); goto CPUCheckMainCodeOKAndTurnOnCPU_Fail; } RT_TRACE(COMP_FIRMWARE, "Download Firmware: Boot ready!\n"); - return rt_status; + return true; CPUCheckMainCodeOKAndTurnOnCPU_Fail: - rt_status = false; - return rt_status; -} - -static bool _rtl92e_is_fw_ready(struct net_device *dev) -{ - - bool rt_status = true; - u32 CPU_status = 0; - unsigned long timeout; - - timeout = jiffies + msecs_to_jiffies(20); - while (time_before(jiffies, timeout)) { - CPU_status = rtl92e_readl(dev, CPU_GEN); - if (CPU_status&CPU_GEN_FIRM_RDY) - break; - mdelay(2); - } - - if (!(CPU_status&CPU_GEN_FIRM_RDY)) - goto CPUCheckFirmwareReady_Fail; - else - RT_TRACE(COMP_FIRMWARE, "Download Firmware: Firmware ready!\n"); - - return rt_status; - -CPUCheckFirmwareReady_Fail: - rt_status = false; - return rt_status; - + return false; } static bool _rtl92e_fw_check_ready(struct net_device *dev, @@ -186,14 +150,13 @@ static bool _rtl92e_fw_check_ready(struct net_device *dev, pfirmware->status = FW_STATUS_4_MOVE_DATA_CODE; mdelay(1); - rt_status = _rtl92e_is_fw_ready(dev); + rt_status = _rtl92e_wait_for_fw(dev, CPU_GEN_FIRM_RDY, 20); if (rt_status) pfirmware->status = FW_STATUS_5_READY; else RT_TRACE(COMP_FIRMWARE, "_rtl92e_is_fw_ready fail(%d)!\n", rt_status); - break; default: rt_status = false; |