aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChaoming_Li <chaoming_li@realsil.com.cn>2011-04-25 13:53:40 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-04-26 16:13:33 -0400
commit3ac5e26a1e935469a8bdae1d624bc3b59d1fcdc5 (patch)
treeb6b38209110543bda9e9c62db96733226f035344
parentbeb5bc4020436ee50bd50e82c5a64eb087f0e3b3 (diff)
rtlwifi: rtl8192c-common: Change common firmware routines for addition of rtl8192se and rtl8192de
Change common firmware routines for addition of RTL8192SE and RTL8192DE code. Signed-off-by: Chaoming_Li <chaoming_li@realsil.com.cn> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c81
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h4
2 files changed, 52 insertions, 33 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
index bc9d24134ac..50303e1adff 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
@@ -223,29 +223,15 @@ int rtl92c_download_fw(struct ieee80211_hw *hw)
223 u8 *pfwdata; 223 u8 *pfwdata;
224 u32 fwsize; 224 u32 fwsize;
225 enum version_8192c version = rtlhal->version; 225 enum version_8192c version = rtlhal->version;
226 const struct firmware *firmware;
227 226
228 printk(KERN_INFO "rtl8192c: Loading firmware file %s\n", 227 printk(KERN_INFO "rtl8192c: Loading firmware file %s\n",
229 rtlpriv->cfg->fw_name); 228 rtlpriv->cfg->fw_name);
230 if (request_firmware(&firmware, rtlpriv->cfg->fw_name, 229 if (!rtlhal->pfirmware)
231 rtlpriv->io.dev)) {
232 printk(KERN_ERR "rtl8192c: Firmware loading failed\n");
233 return 1; 230 return 1;
234 }
235
236 if (firmware->size > 0x4000) {
237 RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
238 ("Firmware is too big!\n"));
239 release_firmware(firmware);
240 return 1;
241 }
242
243 memcpy(rtlhal->pfirmware, firmware->data, firmware->size);
244 fwsize = firmware->size;
245 release_firmware(firmware);
246 231
247 pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware; 232 pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware;
248 pfwdata = (u8 *) rtlhal->pfirmware; 233 pfwdata = (u8 *) rtlhal->pfirmware;
234 fwsize = rtlhal->fwsize;
249 235
250 if (IS_FW_HEADER_EXIST(pfwheader)) { 236 if (IS_FW_HEADER_EXIST(pfwheader)) {
251 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, 237 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
@@ -553,6 +539,39 @@ void rtl92c_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
553} 539}
554EXPORT_SYMBOL(rtl92c_set_fw_pwrmode_cmd); 540EXPORT_SYMBOL(rtl92c_set_fw_pwrmode_cmd);
555 541
542static bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw,
543 struct sk_buff *skb)
544{
545 struct rtl_priv *rtlpriv = rtl_priv(hw);
546 struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
547 struct rtl8192_tx_ring *ring;
548 struct rtl_tx_desc *pdesc;
549 u8 own;
550 unsigned long flags;
551 struct sk_buff *pskb = NULL;
552
553 ring = &rtlpci->tx_ring[BEACON_QUEUE];
554
555 pskb = __skb_dequeue(&ring->queue);
556 if (pskb)
557 kfree_skb(pskb);
558
559 spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
560
561 pdesc = &ring->desc[0];
562 own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) pdesc, true, HW_DESC_OWN);
563
564 rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb);
565
566 __skb_queue_tail(&ring->queue, skb);
567
568 spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
569
570 rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE);
571
572 return true;
573}
574
556#define BEACON_PG 0 /*->1*/ 575#define BEACON_PG 0 /*->1*/
557#define PSPOLL_PG 2 576#define PSPOLL_PG 2
558#define NULL_PG 3 577#define NULL_PG 3
@@ -670,7 +689,7 @@ static u8 reserved_page_packet[TOTAL_RESERVED_PKT_LEN] = {
670 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 689 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
671}; 690};
672 691
673void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) 692void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
674{ 693{
675 struct rtl_priv *rtlpriv = rtl_priv(hw); 694 struct rtl_priv *rtlpriv = rtl_priv(hw);
676 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 695 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
@@ -679,12 +698,12 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
679 u32 totalpacketlen; 698 u32 totalpacketlen;
680 bool rtstatus; 699 bool rtstatus;
681 u8 u1RsvdPageLoc[3] = {0}; 700 u8 u1RsvdPageLoc[3] = {0};
682 bool b_dlok = false; 701 bool dlok = false;
683 702
684 u8 *beacon; 703 u8 *beacon;
685 u8 *p_pspoll; 704 u8 *pspoll;
686 u8 *nullfunc; 705 u8 *nullfunc;
687 u8 *p_probersp; 706 u8 *probersp;
688 /*--------------------------------------------------------- 707 /*---------------------------------------------------------
689 (1) beacon 708 (1) beacon
690 ---------------------------------------------------------*/ 709 ---------------------------------------------------------*/
@@ -695,10 +714,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
695 /*------------------------------------------------------- 714 /*-------------------------------------------------------
696 (2) ps-poll 715 (2) ps-poll
697 --------------------------------------------------------*/ 716 --------------------------------------------------------*/
698 p_pspoll = &reserved_page_packet[PSPOLL_PG * 128]; 717 pspoll = &reserved_page_packet[PSPOLL_PG * 128];
699 SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000)); 718 SET_80211_PS_POLL_AID(pspoll, (mac->assoc_id | 0xc000));
700 SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid); 719 SET_80211_PS_POLL_BSSID(pspoll, mac->bssid);
701 SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr); 720 SET_80211_PS_POLL_TA(pspoll, mac->mac_addr);
702 721
703 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1RsvdPageLoc, PSPOLL_PG); 722 SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1RsvdPageLoc, PSPOLL_PG);
704 723
@@ -715,10 +734,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
715 /*--------------------------------------------------------- 734 /*---------------------------------------------------------
716 (4) probe response 735 (4) probe response
717 ----------------------------------------------------------*/ 736 ----------------------------------------------------------*/
718 p_probersp = &reserved_page_packet[PROBERSP_PG * 128]; 737 probersp = &reserved_page_packet[PROBERSP_PG * 128];
719 SET_80211_HDR_ADDRESS1(p_probersp, mac->bssid); 738 SET_80211_HDR_ADDRESS1(probersp, mac->bssid);
720 SET_80211_HDR_ADDRESS2(p_probersp, mac->mac_addr); 739 SET_80211_HDR_ADDRESS2(probersp, mac->mac_addr);
721 SET_80211_HDR_ADDRESS3(p_probersp, mac->bssid); 740 SET_80211_HDR_ADDRESS3(probersp, mac->bssid);
722 741
723 SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1RsvdPageLoc, PROBERSP_PG); 742 SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1RsvdPageLoc, PROBERSP_PG);
724 743
@@ -736,12 +755,12 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
736 memcpy((u8 *) skb_put(skb, totalpacketlen), 755 memcpy((u8 *) skb_put(skb, totalpacketlen),
737 &reserved_page_packet, totalpacketlen); 756 &reserved_page_packet, totalpacketlen);
738 757
739 rtstatus = rtlpriv->cfg->ops->cmd_send_packet(hw, skb); 758 rtstatus = _rtl92c_cmd_send_packet(hw, skb);
740 759
741 if (rtstatus) 760 if (rtstatus)
742 b_dlok = true; 761 dlok = true;
743 762
744 if (b_dlok) { 763 if (dlok) {
745 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, 764 RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
746 ("Set RSVD page location to Fw.\n")); 765 ("Set RSVD page location to Fw.\n"));
747 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, 766 RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h
index 3db33bd1466..3d5823c1262 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h
@@ -27,8 +27,8 @@
27 * 27 *
28 *****************************************************************************/ 28 *****************************************************************************/
29 29
30#ifndef __RTL92C__FW__H__ 30#ifndef __RTL92C__FW__COMMON__H__
31#define __RTL92C__FW__H__ 31#define __RTL92C__FW__COMMON__H__
32 32
33#define FW_8192C_SIZE 0x3000 33#define FW_8192C_SIZE 0x3000
34#define FW_8192C_START_ADDRESS 0x1000 34#define FW_8192C_START_ADDRESS 0x1000