diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192ce/fw.c')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/fw.c | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c index 11dd22b987e7..11c8bdb4af59 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c | |||
@@ -133,17 +133,15 @@ static void _rtl92c_write_fw(struct ieee80211_hw *hw, | |||
133 | { | 133 | { |
134 | struct rtl_priv *rtlpriv = rtl_priv(hw); | 134 | struct rtl_priv *rtlpriv = rtl_priv(hw); |
135 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | 135 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
136 | bool is_version_b; | ||
137 | u8 *bufferPtr = (u8 *) buffer; | 136 | u8 *bufferPtr = (u8 *) buffer; |
138 | 137 | ||
139 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, ("FW size is %d bytes,\n", size)); | 138 | RT_TRACE(rtlpriv, COMP_FW, DBG_TRACE, ("FW size is %d bytes,\n", size)); |
140 | 139 | ||
141 | is_version_b = IS_CHIP_VER_B(version); | 140 | if (IS_CHIP_VER_B(version)) { |
142 | if (is_version_b) { | ||
143 | u32 pageNums, remainSize; | 141 | u32 pageNums, remainSize; |
144 | u32 page, offset; | 142 | u32 page, offset; |
145 | 143 | ||
146 | if (rtlhal->hw_type == HARDWARE_TYPE_RTL8192CE) | 144 | if (IS_HARDWARE_TYPE_8192CE(rtlhal)) |
147 | _rtl92c_fill_dummy(bufferPtr, &size); | 145 | _rtl92c_fill_dummy(bufferPtr, &size); |
148 | 146 | ||
149 | pageNums = size / FW_8192C_PAGE_SIZE; | 147 | pageNums = size / FW_8192C_PAGE_SIZE; |
@@ -231,14 +229,14 @@ int rtl92c_download_fw(struct ieee80211_hw *hw) | |||
231 | u32 fwsize; | 229 | u32 fwsize; |
232 | int err; | 230 | int err; |
233 | enum version_8192c version = rtlhal->version; | 231 | enum version_8192c version = rtlhal->version; |
232 | const struct firmware *firmware; | ||
234 | 233 | ||
235 | const struct firmware *firmware = NULL; | 234 | printk(KERN_INFO "rtl8192cu: Loading firmware file %s\n", |
236 | 235 | rtlpriv->cfg->fw_name); | |
237 | err = request_firmware(&firmware, rtlpriv->cfg->fw_name, | 236 | err = request_firmware(&firmware, rtlpriv->cfg->fw_name, |
238 | rtlpriv->io.dev); | 237 | rtlpriv->io.dev); |
239 | if (err) { | 238 | if (err) { |
240 | RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG, | 239 | printk(KERN_ERR "rtl8192cu: Firmware loading failed\n"); |
241 | ("Failed to request firmware!\n")); | ||
242 | return 1; | 240 | return 1; |
243 | } | 241 | } |
244 | 242 | ||
@@ -318,12 +316,12 @@ static void _rtl92c_fill_h2c_command(struct ieee80211_hw *hw, | |||
318 | 316 | ||
319 | while (true) { | 317 | while (true) { |
320 | spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); | 318 | spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); |
321 | if (rtlhal->b_h2c_setinprogress) { | 319 | if (rtlhal->h2c_setinprogress) { |
322 | RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, | 320 | RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, |
323 | ("H2C set in progress! Wait to set.." | 321 | ("H2C set in progress! Wait to set.." |
324 | "element_id(%d).\n", element_id)); | 322 | "element_id(%d).\n", element_id)); |
325 | 323 | ||
326 | while (rtlhal->b_h2c_setinprogress) { | 324 | while (rtlhal->h2c_setinprogress) { |
327 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, | 325 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, |
328 | flag); | 326 | flag); |
329 | h2c_waitcounter++; | 327 | h2c_waitcounter++; |
@@ -339,7 +337,7 @@ static void _rtl92c_fill_h2c_command(struct ieee80211_hw *hw, | |||
339 | } | 337 | } |
340 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); | 338 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); |
341 | } else { | 339 | } else { |
342 | rtlhal->b_h2c_setinprogress = true; | 340 | rtlhal->h2c_setinprogress = true; |
343 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); | 341 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); |
344 | break; | 342 | break; |
345 | } | 343 | } |
@@ -495,7 +493,7 @@ static void _rtl92c_fill_h2c_command(struct ieee80211_hw *hw, | |||
495 | } | 493 | } |
496 | 494 | ||
497 | spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); | 495 | spin_lock_irqsave(&rtlpriv->locks.h2c_lock, flag); |
498 | rtlhal->b_h2c_setinprogress = false; | 496 | rtlhal->h2c_setinprogress = false; |
499 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); | 497 | spin_unlock_irqrestore(&rtlpriv->locks.h2c_lock, flag); |
500 | 498 | ||
501 | RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, ("go out\n")); | 499 | RT_TRACE(rtlpriv, COMP_CMD, DBG_LOUD, ("go out\n")); |
@@ -507,7 +505,7 @@ void rtl92c_fill_h2c_cmd(struct ieee80211_hw *hw, | |||
507 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); | 505 | struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw)); |
508 | u32 tmp_cmdbuf[2]; | 506 | u32 tmp_cmdbuf[2]; |
509 | 507 | ||
510 | if (rtlhal->bfw_ready == false) { | 508 | if (rtlhal->fw_ready == false) { |
511 | RT_ASSERT(false, ("return H2C cmd because of Fw " | 509 | RT_ASSERT(false, ("return H2C cmd because of Fw " |
512 | "download fail!!!\n")); | 510 | "download fail!!!\n")); |
513 | return; | 511 | return; |
@@ -560,39 +558,6 @@ void rtl92c_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) | |||
560 | 558 | ||
561 | } | 559 | } |
562 | 560 | ||
563 | static bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw, | ||
564 | struct sk_buff *skb) | ||
565 | { | ||
566 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
567 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | ||
568 | struct rtl8192_tx_ring *ring; | ||
569 | struct rtl_tx_desc *pdesc; | ||
570 | u8 own; | ||
571 | unsigned long flags; | ||
572 | struct sk_buff *pskb = NULL; | ||
573 | |||
574 | ring = &rtlpci->tx_ring[BEACON_QUEUE]; | ||
575 | |||
576 | pskb = __skb_dequeue(&ring->queue); | ||
577 | if (pskb) | ||
578 | kfree_skb(pskb); | ||
579 | |||
580 | spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags); | ||
581 | |||
582 | pdesc = &ring->desc[0]; | ||
583 | own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) pdesc, true, HW_DESC_OWN); | ||
584 | |||
585 | rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb); | ||
586 | |||
587 | __skb_queue_tail(&ring->queue, skb); | ||
588 | |||
589 | spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); | ||
590 | |||
591 | rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE); | ||
592 | |||
593 | return true; | ||
594 | } | ||
595 | |||
596 | #define BEACON_PG 0 /*->1*/ | 561 | #define BEACON_PG 0 /*->1*/ |
597 | #define PSPOLL_PG 2 | 562 | #define PSPOLL_PG 2 |
598 | #define NULL_PG 3 | 563 | #define NULL_PG 3 |
@@ -776,7 +741,7 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) | |||
776 | memcpy((u8 *) skb_put(skb, totalpacketlen), | 741 | memcpy((u8 *) skb_put(skb, totalpacketlen), |
777 | &reserved_page_packet, totalpacketlen); | 742 | &reserved_page_packet, totalpacketlen); |
778 | 743 | ||
779 | rtstatus = _rtl92c_cmd_send_packet(hw, skb); | 744 | rtstatus = rtlpriv->cfg->ops->cmd_send_packet(hw, skb); |
780 | 745 | ||
781 | if (rtstatus) | 746 | if (rtstatus) |
782 | b_dlok = true; | 747 | b_dlok = true; |