提交 3ac5e26a 编写于 作者: C Chaoming_Li 提交者: John W. Linville

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: NChaoming_Li <chaoming_li@realsil.com.cn>
Signed-off-by: NLarry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 beb5bc40
...@@ -223,29 +223,15 @@ int rtl92c_download_fw(struct ieee80211_hw *hw) ...@@ -223,29 +223,15 @@ int rtl92c_download_fw(struct ieee80211_hw *hw)
u8 *pfwdata; u8 *pfwdata;
u32 fwsize; u32 fwsize;
enum version_8192c version = rtlhal->version; enum version_8192c version = rtlhal->version;
const struct firmware *firmware;
printk(KERN_INFO "rtl8192c: Loading firmware file %s\n", printk(KERN_INFO "rtl8192c: Loading firmware file %s\n",
rtlpriv->cfg->fw_name); rtlpriv->cfg->fw_name);
if (request_firmware(&firmware, rtlpriv->cfg->fw_name, if (!rtlhal->pfirmware)
rtlpriv->io.dev)) {
printk(KERN_ERR "rtl8192c: Firmware loading failed\n");
return 1; 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; pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware;
pfwdata = (u8 *) rtlhal->pfirmware; pfwdata = (u8 *) rtlhal->pfirmware;
fwsize = rtlhal->fwsize;
if (IS_FW_HEADER_EXIST(pfwheader)) { if (IS_FW_HEADER_EXIST(pfwheader)) {
RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
...@@ -553,6 +539,39 @@ void rtl92c_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode) ...@@ -553,6 +539,39 @@ void rtl92c_set_fw_pwrmode_cmd(struct ieee80211_hw *hw, u8 mode)
} }
EXPORT_SYMBOL(rtl92c_set_fw_pwrmode_cmd); 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 BEACON_PG 0 /*->1*/
#define PSPOLL_PG 2 #define PSPOLL_PG 2
#define NULL_PG 3 #define NULL_PG 3
...@@ -670,7 +689,7 @@ static u8 reserved_page_packet[TOTAL_RESERVED_PKT_LEN] = { ...@@ -670,7 +689,7 @@ static u8 reserved_page_packet[TOTAL_RESERVED_PKT_LEN] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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_priv *rtlpriv = rtl_priv(hw);
struct rtl_mac *mac = rtl_mac(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) ...@@ -679,12 +698,12 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
u32 totalpacketlen; u32 totalpacketlen;
bool rtstatus; bool rtstatus;
u8 u1RsvdPageLoc[3] = {0}; u8 u1RsvdPageLoc[3] = {0};
bool b_dlok = false; bool dlok = false;
u8 *beacon; u8 *beacon;
u8 *p_pspoll; u8 *pspoll;
u8 *nullfunc; u8 *nullfunc;
u8 *p_probersp; u8 *probersp;
/*--------------------------------------------------------- /*---------------------------------------------------------
(1) beacon (1) beacon
---------------------------------------------------------*/ ---------------------------------------------------------*/
...@@ -695,10 +714,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished) ...@@ -695,10 +714,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
/*------------------------------------------------------- /*-------------------------------------------------------
(2) ps-poll (2) ps-poll
--------------------------------------------------------*/ --------------------------------------------------------*/
p_pspoll = &reserved_page_packet[PSPOLL_PG * 128]; pspoll = &reserved_page_packet[PSPOLL_PG * 128];
SET_80211_PS_POLL_AID(p_pspoll, (mac->assoc_id | 0xc000)); SET_80211_PS_POLL_AID(pspoll, (mac->assoc_id | 0xc000));
SET_80211_PS_POLL_BSSID(p_pspoll, mac->bssid); SET_80211_PS_POLL_BSSID(pspoll, mac->bssid);
SET_80211_PS_POLL_TA(p_pspoll, mac->mac_addr); SET_80211_PS_POLL_TA(pspoll, mac->mac_addr);
SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(u1RsvdPageLoc, PSPOLL_PG); 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) ...@@ -715,10 +734,10 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
/*--------------------------------------------------------- /*---------------------------------------------------------
(4) probe response (4) probe response
----------------------------------------------------------*/ ----------------------------------------------------------*/
p_probersp = &reserved_page_packet[PROBERSP_PG * 128]; probersp = &reserved_page_packet[PROBERSP_PG * 128];
SET_80211_HDR_ADDRESS1(p_probersp, mac->bssid); SET_80211_HDR_ADDRESS1(probersp, mac->bssid);
SET_80211_HDR_ADDRESS2(p_probersp, mac->mac_addr); SET_80211_HDR_ADDRESS2(probersp, mac->mac_addr);
SET_80211_HDR_ADDRESS3(p_probersp, mac->bssid); SET_80211_HDR_ADDRESS3(probersp, mac->bssid);
SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(u1RsvdPageLoc, PROBERSP_PG); 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) ...@@ -736,12 +755,12 @@ void rtl92c_set_fw_rsvdpagepkt(struct ieee80211_hw *hw, bool b_dl_finished)
memcpy((u8 *) skb_put(skb, totalpacketlen), memcpy((u8 *) skb_put(skb, totalpacketlen),
&reserved_page_packet, totalpacketlen); &reserved_page_packet, totalpacketlen);
rtstatus = rtlpriv->cfg->ops->cmd_send_packet(hw, skb); rtstatus = _rtl92c_cmd_send_packet(hw, skb);
if (rtstatus) if (rtstatus)
b_dlok = true; dlok = true;
if (b_dlok) { if (dlok) {
RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD, RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
("Set RSVD page location to Fw.\n")); ("Set RSVD page location to Fw.\n"));
RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG, RT_PRINT_DATA(rtlpriv, COMP_CMD, DBG_DMESG,
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
* *
*****************************************************************************/ *****************************************************************************/
#ifndef __RTL92C__FW__H__ #ifndef __RTL92C__FW__COMMON__H__
#define __RTL92C__FW__H__ #define __RTL92C__FW__COMMON__H__
#define FW_8192C_SIZE 0x3000 #define FW_8192C_SIZE 0x3000
#define FW_8192C_START_ADDRESS 0x1000 #define FW_8192C_START_ADDRESS 0x1000
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册