rtlwifi: rtl8192c-common: Change common firmware routines for addition of rtl8192se...
authorChaoming_Li <chaoming_li@realsil.com.cn>
Mon, 25 Apr 2011 17:53:40 +0000 (12:53 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 26 Apr 2011 20:13:33 +0000 (16:13 -0400)
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>
drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
drivers/net/wireless/rtlwifi/rtl8192c/fw_common.h

index bc9d241..50303e1 100644 (file)
@@ -223,29 +223,15 @@ int rtl92c_download_fw(struct ieee80211_hw *hw)
        u8 *pfwdata;
        u32 fwsize;
        enum version_8192c version = rtlhal->version;
-       const struct firmware *firmware;
 
        printk(KERN_INFO "rtl8192c: Loading firmware file %s\n",
               rtlpriv->cfg->fw_name);
-       if (request_firmware(&firmware, rtlpriv->cfg->fw_name,
-                           rtlpriv->io.dev)) {
-               printk(KERN_ERR "rtl8192c: Firmware loading failed\n");
+       if (!rtlhal->pfirmware)
                return 1;
-       }
-
-       if (firmware->size > 0x4000) {
-               RT_TRACE(rtlpriv, COMP_ERR, DBG_EMERG,
-                        ("Firmware is too big!\n"));
-               release_firmware(firmware);
-               return 1;
-       }
-
-       memcpy(rtlhal->pfirmware, firmware->data, firmware->size);
-       fwsize = firmware->size;
-       release_firmware(firmware);
 
        pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware;
        pfwdata = (u8 *) rtlhal->pfirmware;
+       fwsize = rtlhal->fwsize;
 
        if (IS_FW_HEADER_EXIST(pfwheader)) {
                RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
@@ -553,6 +539,39 @@ void rtl92c_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
 }
 EXPORT_SYMBOL(rtl92c_set_fw_pwrmode_cmd);
 
+static bool _rtl92c_cmd_send_packet(struct ieee80211_hw *hw,
+                               struct sk_buff *skb)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+       struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
+       struct rtl8192_tx_ring *ring;
+       struct rtl_tx_desc *pdesc;
+       u8 own;
+       unsigned long flags;
+       struct sk_buff *pskb = NULL;
+
+       ring = &rtlpci->tx_ring[BEACON_QUEUE];
+
+       pskb = __skb_dequeue(&ring->queue);
+       if (pskb)
+               kfree_skb(pskb);
+
+       spin_lock_irqsave(&rtlpriv->locks.irq_th_lock, flags);
+
+       pdesc = &ring->desc[0];
+       own = (u8) rtlpriv->cfg->ops->get_desc((u8 *) pdesc, true, HW_DESC_OWN);
+
+       rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb);
+
+       __skb_queue_tail(&ring->queue, skb);
+
+       spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
+
+       rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE);
+
+       return true;
+}
+
 #define BEACON_PG              0 /*->1*/
 #define PSPOLL_PG              2
 #define NULL_PG                        3
@@ -670,7 +689,7 @@ static u8 reserved_page_packet[TOTAL_RESERVED_PKT_LEN] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 };
 
-void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
+void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool dl_finished)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        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)
        u32 totalpacketlen;
        bool rtstatus;
        u8 u1RsvdPageLoc[3] = {0};
-       bool b_dlok = false;
+       bool dlok = false;
 
        u8 *beacon;
-       u8 *p_pspoll;
+       u8 *pspoll;
        u8 *nullfunc;
-       u8 *p_probersp;
+       u8 *probersp;
        /*---------------------------------------------------------
                                (1) beacon
        ---------------------------------------------------------*/
@@ -695,10 +714,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
        /*-------------------------------------------------------
                                (2) ps-poll
        --------------------------------------------------------*/
-       p_pspoll = &reserved_page_packet[PSPOLL_PG * 128];
-       SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000));
-       SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid);
-       SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr);
+       pspoll = &reserved_page_packet[PSPOLL_PG * 128];
+       SET_80211_PS_POLL_AID(pspoll, (mac->assoc_id | 0xc000));
+       SET_80211_PS_POLL_BSSID(pspoll, mac->bssid);
+       SET_80211_PS_POLL_TA(pspoll, mac->mac_addr);
 
        SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1RsvdPageLoc, PSPOLL_PG);
 
@@ -715,10 +734,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
        /*---------------------------------------------------------
                                (4) probe response
        ----------------------------------------------------------*/
-       p_probersp = &reserved_page_packet[PROBERSP_PG * 128];
-       SET_80211_HDR_ADDRESS1(p_probersp, mac->bssid);
-       SET_80211_HDR_ADDRESS2(p_probersp, mac->mac_addr);
-       SET_80211_HDR_ADDRESS3(p_probersp, mac->bssid);
+       probersp = &reserved_page_packet[PROBERSP_PG * 128];
+       SET_80211_HDR_ADDRESS1(probersp, mac->bssid);
+       SET_80211_HDR_ADDRESS2(probersp, mac->mac_addr);
+       SET_80211_HDR_ADDRESS3(probersp, mac->bssid);
 
        SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1RsvdPageLoc, PROBERSP_PG);
 
@@ -736,12 +755,12 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
        memcpy((u8 *) skb_put(skb, totalpacketlen),
               &reserved_page_packet, totalpacketlen);
 
-       rtstatus = rtlpriv->cfg->ops->cmd_send_packet(hw, skb);
+       rtstatus = _rtl92c_cmd_send_packet(hw, skb);
 
        if (rtstatus)
-               b_dlok = true;
+               dlok = true;
 
-       if (b_dlok) {
+       if (dlok) {
                RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
                         ("Set RSVD page location to Fw.\n"));
                RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
index 3db33bd..3d5823c 100644 (file)
@@ -27,8 +27,8 @@
  *
  *****************************************************************************/
 
-#ifndef __RTL92C__FW__H__
-#define __RTL92C__FW__H__
+#ifndef __RTL92C__FW__COMMON__H__
+#define __RTL92C__FW__COMMON__H__
 
 #define FW_8192C_SIZE                          0x3000
 #define FW_8192C_START_ADDRESS                 0x1000