diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2011-02-11 15:34:03 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-02-11 16:16:38 -0500 |
commit | 25b2bc30865e3ca1a9a2116788bb2e82be5b1a99 (patch) | |
tree | 1281dbe06c131202c2195deb29f2ed44e43aa440 /drivers/net/wireless/rtlwifi | |
parent | 8c96fcf7212bd58f28cf7e96b13b1e2161637f3b (diff) |
rtlwifi: rtl8192ce: Refactor rtl8192ce/fw
Make rtlwifi/rtl8192ce/fw.{h,c} match what will be needed for
rtlwifi/rtl8192cu.{h,c}.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rtlwifi')
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/fw.c | 49 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/sw.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | 33 | ||||
-rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192ce/trx.h | 2 |
5 files changed, 45 insertions, 42 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/fw.c index 11dd22b987e7..b0776a34b817 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 | ||
@@ -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; |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c index b366e8862929..a8b3d0605abd 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.c | |||
@@ -135,6 +135,7 @@ static struct rtl_hal_ops rtl8192ce_hal_ops = { | |||
135 | .set_bbreg = rtl92c_phy_set_bb_reg, | 135 | .set_bbreg = rtl92c_phy_set_bb_reg, |
136 | .get_rfreg = rtl92c_phy_query_rf_reg, | 136 | .get_rfreg = rtl92c_phy_query_rf_reg, |
137 | .set_rfreg = rtl92c_phy_set_rf_reg, | 137 | .set_rfreg = rtl92c_phy_set_rf_reg, |
138 | .cmd_send_packet = _rtl92c_cmd_send_packet, | ||
138 | }; | 139 | }; |
139 | 140 | ||
140 | static struct rtl_mod_params rtl92ce_mod_params = { | 141 | static struct rtl_mod_params rtl92ce_mod_params = { |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h index de1198c38d4e..0568d6dc83d7 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/sw.h | |||
@@ -33,5 +33,7 @@ | |||
33 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw); | 33 | int rtl92c_init_sw_vars(struct ieee80211_hw *hw); |
34 | void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw); | 34 | void rtl92c_deinit_sw_vars(struct ieee80211_hw *hw); |
35 | void rtl92c_init_var_map(struct ieee80211_hw *hw); | 35 | void rtl92c_init_var_map(struct ieee80211_hw *hw); |
36 | bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw, | ||
37 | struct sk_buff *skb); | ||
36 | 38 | ||
37 | #endif | 39 | #endif |
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c index bf5852f2d634..003bf108193f 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.c | |||
@@ -1029,3 +1029,36 @@ void rtl92ce_tx_polling(struct ieee80211_hw *hw, unsigned int hw_queue) | |||
1029 | BIT(0) << (hw_queue)); | 1029 | BIT(0) << (hw_queue)); |
1030 | } | 1030 | } |
1031 | } | 1031 | } |
1032 | |||
1033 | bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw, | ||
1034 | struct sk_buff *skb) | ||
1035 | { | ||
1036 | struct rtl_priv *rtlpriv = rtl_priv(hw); | ||
1037 | struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw)); | ||
1038 | struct rtl8192_tx_ring *ring; | ||
1039 | struct rtl_tx_desc *pdesc; | ||
1040 | u8 own; | ||
1041 | unsigned long flags; | ||
1042 | struct sk_buff *pskb = NULL; | ||
1043 | |||
1044 | ring = &rtlpci->tx_ring[BEACON_QUEUE]; | ||
1045 | |||
1046 | spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags); | ||
1047 | |||
1048 | pskb = __skb_dequeue(&ring->queue); | ||
1049 | if (pskb) | ||
1050 | kfree_skb(pskb); | ||
1051 | |||
1052 | pdesc = &ring->desc[0]; | ||
1053 | own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) pdesc, true, HW_DESC_OWN); | ||
1054 | |||
1055 | rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb); | ||
1056 | |||
1057 | __skb_queue_tail(&ring->queue, skb); | ||
1058 | |||
1059 | spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags); | ||
1060 | |||
1061 | rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE); | ||
1062 | |||
1063 | return true; | ||
1064 | } | ||
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h index 53d0e0a5af5c..a5fcdfb69cda 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h +++ b/drivers/net/wireless/rtlwifi/rtl8192ce/trx.h | |||
@@ -711,4 +711,6 @@ void rtl92ce_tx_polling(struct ieee80211_hw *hw, unsigned int hw_queue); | |||
711 | void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, | 711 | void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, |
712 | bool b_firstseg, bool b_lastseg, | 712 | bool b_firstseg, bool b_lastseg, |
713 | struct sk_buff *skb); | 713 | struct sk_buff *skb); |
714 | bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb); | ||
715 | |||
714 | #endif | 716 | #endif |